靶机下载地址
信息收集
主机发现
nmap 192.168.31.0/24 -Pn -T4
靶机ip:192.168.31.188
端口扫描
nmap 192.168.31.188 -A -p- -T4
开放端口有80,111,1337(ssh),2049(nfs)。
目录扫描
访问http服务。
点击图片进入游戏。玩了一下没看到什么信息。
目录扫描。
dirsearch -u http://192.168.31.188
结合这个系列靶机的渗透测试经验,file.php可能存在文件包含漏洞,缺少一个参数。
info.php,敏感信息泄露,网站根路径/var/www/html。
readme.md
Poppoppero.
模糊测试参数
file.php存在文件包含漏洞的可能,wfuzz模糊查询参数。
wfuzz -c -u http://192.168.31.188/file.php?FUZZ=/etc/passwd -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt --hh 238
参数file。
渗透
文件包含漏洞利用(LFI)
http://192.168.31.188/file.php?file=/etc/passwd,可知root和hacksudo有默认shell。(这样看可能比较乱,可以在终端使用curl查看curl 'http://192.168.31.188/file.php?file=/etc/passwd')
已经验证存在文件包含漏洞,尝试包含远程文件getshell,但是需要确认一个前提——php开启allow_url_include(允许远程包含)。从info.php内容得知,不允许远程文件包含。
LFI本地文件包含,且没有文件上传功能点如何getshell。
1、利用日志文件,例如:apache日志文件/Nginx错误日志/SSH登录日志,往日志文件中“写”一句话木马,文件包含日志文件来执行日志文件的一句话木马。经过测试利用日志文件写入一句话木马getshell的方法是不可行的。
2、通过LFI获取hacksudo用户的ssh私钥、公钥文件以此getshell也不可行,因为不回显。
NFS结合LFI
NFS共享目录挂载到本地
nmap探测靶机开放端口,知道靶机上运行了NFS服务,将NFS共享目录挂载到本地Linux。步骤如下:
1、查看nfs服务器上可用的共享目录
showmount -e 192.168.31.188
2、在Linux机器上创建一个用于挂载的目录
mkdir tp
3、mount命令挂载nfs共享目录
mount -t nfs 192.168.31.188:/mnt/nfs tp -o nolock
mount命令挂载到本地时出现了很多问题,例如:can't find /mnt/ in /etc/fstab
,搜索引擎的普遍解决方式是在/etc/fstab下添加
192.168.31.188:/mnt/nfs mnt nfs default 0 0
-
需要挂载的文件系统或需要挂载的目录
-
挂载点
-
文件系统
-
挂载形式
-
是否备份,0是忽略,1是备份
-
fsck选项
修改后提示:mount: (hint) your fstab has been modified, but systemd still uses the old version; use 'systemctl daemon-reload' to reload.按照提示使用systemctl daemon-reload
消除了这个报错,成功挂载。
成功挂载后,将反弹shell复制到挂载目录中,即上传到共享文件夹。
nc开启监听,利用LFI包含反弹shell文件,成功getshell。
# python获得交互式shell
python3 -c 'import pty;pty.spawn("/bin/bash");'
利用NFS提权
现在我们拿到了一个低权限shell,查看/etc/exports文件(NFS配置文件),发现可利用NFS提权。
框起来的部分解释:
-
/mnt/nfs。共享文件夹路径。
-
*。远程用户可挂载。
-
rw。可读可写。
-
no_root_squash。允许在共享内以root身份写入文件。
利用挂载NFS分享提权:这个提权方法的前提是启用no_root_squash。原理是只要我们在本地挂载共享目录时攻击机是root用户,就能以root身份赋予恶意可执行文件SUID权限,此时目标机共享文件夹中也会做相同修改,再执行恶意可执行文件达到提权目的。
这里我复制/bin/bash到挂载的共享文件夹中,修改权限并赋予SUID权限,之后执行SUID bash即可获得root shell(为什么不通过自定义漏洞利用程序,因为该靶机没有编译环境)。需要注意的是bash版本,先看一下目标机bash版本——5.0.17。
攻击机的bash版本——5.2.21。版本不同会报错的,需要找和目标机版本相同的bash。(刚好有个Ubuntn是5.0.17版本的bash)
将合适版本的bash复制到攻击机的挂载目录下,修改权限并赋予SUID。
chmod 777 bash
chmod +s bash
./bash -p 执行bash。
get root.txt!🎆