php新版还有漏洞吗,Thinkphp3.2.3发现新版SQL注入漏洞!

07b0eb09cdf658cbebdcc3d9c18a64e5.png

安全客文章报道发现Thinkphp3.2.3最新版SQL注入漏洞!还使用Thinkphp3.2.3版本的小伙伴赶紧去github上更新补丁!

漏洞详情

由于框架实现安全数据库过程中在update更新数据的过程中存在SQL语句的拼接,并且当传入数组未过滤时导致出现了SQL注入。

thinkphp系列框架过滤表达式注入多半采用I函数去调用think_filter

0b8d725d44afdeee7195b3b6716fd66d.png

有没有相关tips来达到I函数绕过呢?是可以的。一般按照官方的写法,thinkphp提供了数据库链式操作,其中包含连贯操作和curd操作,在进行数据库CURD操作去更新数据的时候:举例update数据操作。

e1ae7e5937b0782d51969d3c17f2362f.png

直接看框架的where子单元函数,之前网上公开的exp表达式注入就是从这里分析出来的结论:Thinkphp/Library/Think/Db/Driver.class.php其中除了exp能利用外还有一处bind,而bind可以完美避开了think_filter:

549e6f711681e0f7936ee86d335ef1eb.png

这里由于拼接了$val参数的形式造成了注入,但是这里的bind表达式会引入:符号参数绑定的形式去拼接数据,通过白盒对几处CURD操作函数进行分析定位到update函数,insert函数会造成sql注入,于是回到上面的updateh函数。

Thinkphp/Library/Think/Db/Driver.class.php

接着跟进execute函数,这里有处对$this->queryStr进行字符替换的操作:

439f1548d85975b987001c5a2881f836.png

具体是什么,我这里写了一个实例:常规的跟新数据库用户信息的操作:Application/Home/Controller/UserController.class.php

631ecfe4f0f0a79d3c3eeff637d0477d.png

根据进来的id更新用户的名字和钱,构造一个简单一个pocid[]=bind&id[]=1’&money[]=1123&user=liao当走到execute函数时sql语句为:

19acdf01af4db7e1322a4f9012821ebf.png

然后$that = $this

8c0a7369865375f6bad0fd3cdadbf3e1.png

然后下面的替换操作是将”:0”替换为外部传进来的字符串,这里就可控了。

30f03c3595cb56794e2eb1916e785919.png

替换后:

28ea2f8b7892f10e5b23d096a285fc6a.png

明显发现之前的user参数为:0然后被替换为了liao,这样就把:替换掉了。后面的:1明显是替换不掉的:

b00f4d935297f1c3e7d7e2a212bf36af.png

那么我们将id[1]数组的参数变为0呢?id[]=bind&id[]=0%27&money[]=1123&user=liao

27831133751433b05eef36a7311f70af.png

果然造成了注入:POC:money[]=1123&user=liao&id[0]=bind&id[1]=0%20and%20(updatexml(1,concat(0x7e,(select%20user()),0x7e),1))

02de5200b82b259cf0586fce1726a34b.png

修复方式

更新最新补丁ht#tps#:/#/githu#b.com/t#op-think/thi#nkphp/commit/7e47e34af72996497c90c20bcfa3b2e1cedd7fa4

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值