【代码审计】thinkphp3.2.3 SQL注入

admin 2025年1月11日12:27:15评论7 views字数 1005阅读3分21秒阅读模式

今天学习手tp3.2.3的sql注入漏洞

0x00预先准备

先从github下载下thinkphp3.2.3的代码
https://github.com/top-think/thinkphp/archive/refs/tags/3.2.3.zip

接下来去ThinkPHP\conf\convention.php配置数据库,这里我直接拿sqli-labs的表了
【代码审计】thinkphp3.2.3 SQL注入

【代码审计】thinkphp3.2.3 SQL注入

接下来在home文件夹底下新建个文件
【代码审计】thinkphp3.2.3 SQL注入

接着访问一下
【代码审计】thinkphp3.2.3 SQL注入

0x01正文

接下来就开始正式的来走了,建议各位审计的时候搭配上XDEBUG便于分析流程。
先跟进I()其指向ThinkPHP\Common\functions.php
在经过这里时,存在处过滤
【代码审计】thinkphp3.2.3 SQL注入

$filters = isset($filter) ? $filter : C('DEFAULT_FILTER');这里将会获得常量
'DEFAULT_FILTER' => 'htmlspecialchars'
//htmlspecialchars() 函数会把预定义的字符转换为 HTML 实体
【代码审计】thinkphp3.2.3 SQL注入

【代码审计】thinkphp3.2.3 SQL注入

接着会往下进行参数过滤
【代码审计】thinkphp3.2.3 SQL注入

将会把下图中函数置换为空

/^(EXP|NEQ|GT|EGT|LT|ELT|OR|XOR|LIKE|NOTLIKE|NOT BETWEEN|NOTBETWEEN|BETWEEN|NOTIN|NOT IN|IN)$/i

【代码审计】thinkphp3.2.3 SQL注入

I()的过滤就到这了。接下来往下跟find()
其指向\ThinkPHP\Library\Think\Model.class.php
下面这个比较关键

 $options = $this->_parseOptions($options);

【代码审计】thinkphp3.2.3 SQL注入

若是正常用?id=0%20union%20select%201,database(),3的话,会进入这个if
【代码审计】thinkphp3.2.3 SQL注入

然后会进入到$this->_parseType($options['where'], $key);
这个地方就对参数进行了强转。由于id是int类型的所以说会被intval()强制转换成数字
【代码审计】thinkphp3.2.3 SQL注入

【代码审计】thinkphp3.2.3 SQL注入

【代码审计】thinkphp3.2.3 SQL注入

若我们采用id[where]的形式,则不会进入到if()之中也就绕过了此处过滤。
【代码审计】thinkphp3.2.3 SQL注入

接着就返回到find()被select()调用,其在\ThinkPHP\Library\Think\Db\Driver.class.php
【代码审计】thinkphp3.2.3 SQL注入

【代码审计】thinkphp3.2.3 SQL注入

然后进入buildSelectSql()再到parseSql()
【代码审计】thinkphp3.2.3 SQL注入

然后进parseWhere()

【代码审计】thinkphp3.2.3 SQL注入

【代码审计】thinkphp3.2.3 SQL注入

最后走query()执行。就over了

©著作权归作者所有 - source: 535yx.cn

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月11日12:27:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【代码审计】thinkphp3.2.3 SQL注入https://cn-sec.com/archives/3618860.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息