前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【代码审计】thinkphp3.2.3 SQL注入

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

作者头像
YanXia
发布2023-08-28 17:28:30
5490
发布2023-08-28 17:28:30
举报
文章被收录于专栏:YX’blogYX’blog

今天学习手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的表了

接下来在home文件夹底下新建个文件

接着访问一下

0x01正文

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

filters = isset(filter) ?

接着会往下进行参数过滤

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

代码语言:javascript
复制
/^(EXP|NEQ|GT|EGT|LT|ELT|OR|XOR|LIKE|NOTLIKE|NOT BETWEEN|NOTBETWEEN|BETWEEN|NOTIN|NOT IN|IN)$/i

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

代码语言:javascript
复制
 $options = $this->_parseOptions($options);

若是正常用?id=0%20union%20select%201,database(),3的话,会进入这个if

然后会进入到this->_parseType(

若我们采用id[where]的形式,则不会进入到if()之中也就绕过了此处过滤。

接着就返回到find()被select()调用,其在ThinkPHP\Library\Think\Db\Driver.class.php

然后进入buildSelectSql()再到parseSql()

然后进parseWhere()

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00预先准备
  • 0x01正文
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档