0
点赞
收藏
分享

微信扫一扫

ThinkPHP3.2不规范接收参数导致的SQL注入分析之exp


本篇文章首先是讲解利用,之后会讲解I函数为什么能绕过过滤

前提是tp没有用I函数去接收参数,具体原因会在分析之后给出

先给出测试的payload,​​u[0]=exp&u[1]==%27admin%27​​接下来我们去分析

首先看看我们index页面,看看我们的语句

ThinkPHP3.2不规范接收参数导致的SQL注入分析之exp_标量

M就不必多说上一篇已经讲过了,返回一个users模型的对象,我们直接跟进​​where​​函数,看看接收的参数username为数组

ThinkPHP3.2不规范接收参数导致的SQL注入分析之exp_数组_02

因为是数组原因所以只执行这一句赋值返回​​$this​

ThinkPHP3.2不规范接收参数导致的SQL注入分析之exp_数组_03

接下来进入​​find()​​也就是我们的关键,继续跟进

ThinkPHP3.2不规范接收参数导致的SQL注入分析之exp_数组_04

首先merge参数合并这不是我们关心的地方

ThinkPHP3.2不规范接收参数导致的SQL注入分析之exp_数组_05

​标量变量是指 int、float、string 或 bool 类型的变量。 array、object 和 resource 类型不是标量。​​​我们的​​username​​是一个数组因此直接到下面,回到find,到最关键的地方了,准备生成sql语句了,继续跟进

ThinkPHP3.2不规范接收参数导致的SQL注入分析之exp_标量_06

跟进

ThinkPHP3.2不规范接收参数导致的SQL注入分析之exp_数组_07

继续跟进

ThinkPHP3.2不规范接收参数导致的SQL注入分析之exp_数组_08

这里会返回最终sql语句,因为只有where,我们直接跟进​​parseWhere​

ThinkPHP3.2不规范接收参数导致的SQL注入分析之exp_标量_09

别忘了我们传入的参数

ThinkPHP3.2不规范接收参数导致的SQL注入分析之exp_sql语句_10

之后的一些非关键处理我们略过,继续跟进

ThinkPHP3.2不规范接收参数导致的SQL注入分析之exp_sql语句_11

这里进行拼接​​$whereStr .= $key.' '.$val[1];​​看到没没过滤,直接绕过了

ThinkPHP3.2不规范接收参数导致的SQL注入分析之exp_数组_12

最终​​$whereStr​​​为​​username ='admin'​​,也得到了最终的payload

ThinkPHP3.2不规范接收参数导致的SQL注入分析之exp_sql语句_13

因此,我们便可以有其他姿势了,盲注什么随便来,我们这里测试一下报错注入,没毛病的

ThinkPHP3.2不规范接收参数导致的SQL注入分析之exp_sql语句_14

接下来我们把接收参数改成I函数,他会对里面参数做处理,会在前面加一个空格,​​exp​​​!=​​exp​

ThinkPHP3.2不规范接收参数导致的SQL注入分析之exp_标量_15

这里也就进不去了,分析完毕

ThinkPHP3.2不规范接收参数导致的SQL注入分析之exp_标量_16


举报

相关推荐

0 条评论