WebGoat之Authentication Flaws

Password Strength

这一节主要是讲密码强度的,一个好的密码应该由大写字母,小写字母,数字组成。需要我们把密码都拿到这个网站去测试,然后给出测试结果即可。
由于这个网站关闭了,找到了这个网站用于测试密码强度。该课程设定如下结果会通过:
1

Forget Password

这一节是关于找回密码功能的。密码找回功能设置过于简单时,别人可以猜对答案。本节课程要求找回用户名为admin的密码,需要回答正确最喜欢的颜色是什么,猜测green是对的,通过。

Basic Authentication

关于HTTP的基本认证,这篇文章讲的比较详细了。这一节讲基本的身份验证,基本的身份验证是用来保护服务器端资源的,当客户端向服务器请求一个URL,如果服务器这个资源需要身份认证的话,服务器将发送401认证请求与所请求的资源响应。例如,以我们登陆WebGoat的过程为例。
这是客户端传过去的请求:
2
这是服务端的响应:
3
页面显示如下:
4

然后输入用户名和密码提交,发送请求如下:
5
可见在请求头部增加了一个认证字段,这个认证字段的内容是浏览器将刚刚输入的用户名和密码使用Base64编码方式进行编码,并将这些凭据发送给Web服务器。Web服务器会验证这些凭据,如果凭据正确,则返回所请求的资源。
服务器传过来的回应如下:
6
它给浏览器传了一个set-cookie字段,这个set-cookie是一个JSESSIONID,以后浏览器给服务器传东西都要用这个cookie进行身份的认证。

Stage 1

第一阶段是需要我们输入认证信息的头和认证信息解密后的内容:
7
我们以上一节Forgot Password为例:
8

输入用户名后点击提交,下面是burpsuit拦截到的请求:
9
注意cookie和Authentication两个字段,可以看到cookie就是之前登陆的时候服务传给我们的set-cookie,而认证字段里面的值,经过Base64解密之后为:

10

因此在课程页面输入“Authorization”,“guest:guest”,提交后通过。

Stage 2

这一部分是让我们明白cookie是如何用来进行会话管理的,同时基本认证头是如何用来进行认证的。

  • 如果客户端传给服务器的请求头中Authorization字段是正确的,cookie也是正确的,没有影响,服务器会定位到当前工作页面。
  • 如果客户端传给服务器的请求头中Authorization字段是正确的,而cookie是不正确的,服务器会给客户端传一个新的set-cookie,并且定位到Webgoat开始的地方,历史记录会存在。

以上两点可以看出,cookie影响的是客户端和服务器端的会话。

  • 如果客户端传给服务器的请求头中没有Authorization字段,而cookie是正确的,没有影响。
  • 如果客户端传给服务器的请求头中没有Authorization字段,而cookie是错误的或者没有,服务会需要重新输入用户名和密码进行验证。

以上两点看出,服务器先验证cookie,再看Authorization字段。

同时删除Authorization和cookie,服务器会要求输入新的用户名和密码。
而此时认证提交给服务器的数据:

  • 用户名和密码是另一个用户的,如果cookie与之前相同,那么就是新用户老会话
  • 用户名和密码是另一个用户的,如果cookie与之前不同,那么就是新用户新会话

当达到后一点时,该课程就通过了。

也就是首先修改提交数据,同时删除Authorization和cookie,强迫让服务器进行重新验证。而重新验证的时候一般发送时会带有原来会话的cookie,在提交的时候删除该cookie即可成功。这时对服务器而言就是一个新的用户和新的会话,可以看到原来通过的课程都没有标记了。再次点击这一关,显示通过了。

Multi Level Login 1

这是一个多级登陆,对于多级登陆的系统,往往会要求首先输入用户名和密码,进入之后,会要求再输入一个什么密码,而这个密码有点像密保卡一样,密保卡只有用户本人拥有,系统随机要求输入第几行第几列的数字组合,用户照着密保卡上面的数字按照系统提示的规则输入进去就行了。这个多级登陆的方式在原来的《大话西游》网游中曾经用过。

Stage 1

这部分是要求我们了解多级登陆的流程,按照要求输入即可通过。

Stage 2

现在一名黑客已经拿到了某个人的用户名和密码,以及他的第一个业务码,但其他的业务码不知道。而问题在于第一个业务码会经常被用到,黑客如果照他的用户名和密码进行登录之后进行操作的话,系统会要求其输入其他的业务码,如何解决该问题?
进去之后,依然提交第一个业务码,然后抓包之后修改提交参数,把hidden_tan的值由2改为1即可。

Multi Level login 2

我是WebGoat财务系统中正常的一名客户Joe,我拥有我应该有的所有密码。现在要求利用多级登陆的漏洞,在仅仅知道Jane的名字的情况下,我要以Jane的身份登陆进去。
同样在提交业务码的时候,抓包之后修改隐藏的提交参数,把hidden_user的值由Joe改为Jane即可。

Summarize

有时候安全系统越复杂,往往看起来更安全,但实际上可能隐藏的漏洞也更多。简单而高效才是真正的牛逼。


【版权声明】
本文首发于戚名钰的博客http://qimingyu.github.io/ ),欢迎转载,但是必须保留本文的署名戚名钰(包含链接)。如您有任何商业合作或者授权方面的协商,请给我留言:mingyuqi.java@qq.com
欢迎关注我的微信公众号:科技锐新

本文永久链接:http://qimingyu.github.io/2016/05/03/Webgoat之Authentication_Flaws/

坚持原创技术分享,您的支持将鼓励我继续创作!

热评文章