web渗透测试(高级) 第4课:身份验证问题

本节汇总了身份验证页面中的问题示例:从琐碎的暴力到更复杂的问题。

 

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当您登录时user1,您将获得一个名为的cookie user1

 

从中您可以轻松修改此值(使用代理或浏览器的扩展名)以登录为admin改cookie值为admin

 

注意:把cookie值从user1改成admin后,一定要重新打开从http://192.168.40.131/进入Example 3。

最后成功如下图:

sql注入

 

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身份登录。

付杰
  • ¥ 298.0元
  • 市场价:598.0元
  • ¥ 39.0元
  • 市场价:39.0元
  • ¥ 398.0元
  • 市场价:598.0元
  • ¥ 68.0元
  • 市场价:98.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: