本节汇总了身份验证页面中的问题示例:从琐碎的暴力到更复杂的问题。
Example 1
这个例子非常简单。只需仔细阅读提示,你应该很快。常用密码可能是绕过身份验证的最简单和最常用的方法。例如:admin , admin
Example 2
此示例是非时间常量字符串比较漏洞的夸大版本。 如果比较两个字符串并在第一个无效字符处停止,则字符串A与字符串B共同的前6个字符将比字符串A'与字符串B只有前2个字符相比需要更多时间进行比较 您可以在此示例中使用此信息强制密码。
这里提示符中提供了用户名,您只需要找到密码即可。 为此,您需要遍历所有字符,直到找到花费最多时间的字符,因为应用程序会比较另一个字符。
首先,您需要能够使用Authorization:Basic标头发送HTTP请求。 使用的格式是:
GET /authentication/example2/ HTTP/1.1
Host: 192.168.40.131
Authorization: Basic aGFja2VyOnBlbnRlc3RlcmxhYgo=
字符串aGFja2VyOnBlbnRlc3RlcmxhYgo=是username:password的base64。
一旦有了发送此请求的代码,您将需要循环所有字符集(此处仅限于小写字符和数字)并检查每个请求需要多长时间。
例如,这是我的脚本的输出:
$ ruby auth-example2.rb
hacker:a -> 1.4625000953674316
hacker:b -> 1.4070789813995361
hacker:c -> 1.407270908355713
[...]
hacker:l -> 1.4061241149902344
hacker:m -> 1.4065420627593994
hacker:o -> 1.4070839881896973
hacker:p -> 1.6072182655334473
[...]
hacker:4 -> 1.4077167510986328
hacker:5 -> 1.4075558185577393
hacker:6 -> 1.40665602684021
hacker:7 -> 1.4062080383300781
hacker:8 -> 1.4082770347595215
hacker:9 -> 1.407080888748169
你可以看到字母p花费的时间比其他字母多。
当你试着猜下一个字母时,它也被证实:
[..]
hacker:pa -> 1.6075811386108398
hacker:pb -> 1.608860969543457
最后,一旦获得HTTP 200响应,脚本就需要退出。 这意味着找到了正确的凭据。
根据您的设置稳定性,此技术可能会失败。 一个好主意是继续监视脚本并手动查看结果。 您应该能够通过将已经猜到的值添加到用户名hacker:来轻松地从停止的位置重新启动脚本(例如在连接问题之后)。
此示例是Ruxcon 2012 CTF期间轻松的Web挑战之一。
Example 3
在本练习中,您可以登录为user1。您的目标是以登录身份登录admin。为此,您需要仔细查看服务器发回的响应。
您可以看到,当您登录时user1,您将获得一个名为的cookie user1。
从中您可以轻松修改此值(使用代理或浏览器的扩展名)以登录为admin。
注意:把cookie值从user1改成admin后,一定要重新打开从http://192.168.40.131/进入Example 3。
最后成功如下图:
Example 4
此示例与前一个示例类似。 一旦从应用程序收到cookie,总是很高兴看到它的样子。 尝试使用密码破解程序破解它或尝试只是谷歌它。 从那以后,您应该能够为用户admin生成有效的cookie。
此示例目的与上一题一样,只是将cookie中的user字段的值由明文“user1"改成了“md5加密user1"的值。同理,只需要把值admin用md5加密一下就可以了。
如果您在登录时多次获得相同的会话ID:有问题! 如果您从干净的浏览器登录,则不应该两次获得相同的cookie。
Example 5
此示例显示了不同字符串比较方法的结果。 创建用户时,应用程序将通过比较现有用户提供的用户名,以编程方式检查用户不存在。 当您登录时,应用程序将检查您的用户名和密码是否正确,然后它会在您的会话中保存您的用户名。 最后,每次您访问该应用程序时,该应用程序都将根据会话中提供的用户名检索您的用户详细信息。
这里的诀窍来自这样一个事实,即创建用户时的比较是以编程方式完成的(即:在Ruby中),但是当检索到用户的详细信息时,比较由数据库完成。 默认情况下,MySQL(类型为VARCHAR)将执行不区分大小写的比较:“admin”和“Admin”是相同的值。
使用该信息,您应该能够创建一个将被标识为admin的用户。
我们可以这样来绕过:
已经有一个admin用户,让我们认证它。 同时又提供了一个注册的接口。 在mysql中,大小写区分不敏感,所以可以注册一个Admin来绕过认证。再用admin+Admin密码登陆,即可成功!
Example 6
为了修复上一个问题,开发人员决定在用户创建期间使用区分大小写的比较。 根据MySQL执行字符串比较的方式,也可以绕过此检查:MySQL忽略尾随空格(即:pentesterlab 和pentesterlab等于)。 使用与上面相同的方法,您应该可以假装以用户admin身份登录。