失效的身份验证实验

1.忘记密码验证漏洞

一、漏洞原理介绍

当web应用程序提供为用户找回密码的功能,由于找回密码的验证机制不完善,或者用户设置的验证找回密码的信息太过简单。没有任何提交几次后锁定的策略,可以通过暴力枚举来破解验证信息。

二、实验部分

实验环境:webgoat靶机

Authentication Flaws模块下的forget password,当用户忘记密码要求输入username后进入验证找回密码

图片1.png

尝试输入admin,提示如下:
图片2.png

根据意思,就是回答正确后就可以找回密码,测试了几个数据,显示错误后,发现没有任何锁定策略,可以枚举可能的答案。

输入red,返回

图片3.png

再输入几个常见的颜色,yellow,blue,green,发现green是正确的答案

图片4.png

三、修复

  1. 完善验证机制,输入多次错误后采取锁定策略,防止暴力枚举;
  2. 不要以基于知识的问题验证;
  3. 采取多重验证。

四、总结

在开发web应用程序的时,应该注意开发中所注意的安全问题,在忘记密码后找回密码的机制中加入多重验证,采取锁定策略,不要以基于知识的问题等方法防止安全问题的发生。

2.多级登录验证漏洞

一、漏洞原理介绍

多级登录提供了一个健壮的验证,在通过您的用户名密码登录后,您可以请求一个“交易认证号(TAN)”。这经常用于网上银行。您得到一个银行提供的由很多交易认证号生成唯一的列表,每个交易认证号只能使用一次。但是这个交易认证号存储在数据库中,并且可以多次使用。

二、漏洞代码分析

图片5.png

查看验证Tan的代码方法,可见该程序把tan放在数据库中,并且通过查询操作判断存在与否,tan的有效期并没有设置,则存在绕过的的缺陷。

三、实验演示

实验环境:webgoat靶场,Authentication Flaws模块下的Multi Level Login 1
图片6.png

在已经获取到某用户的账号和密码,但是在多级登录的验证下,还要输入tan验证才能进行转账等其他操作

图片7.png

登录后要求输入tan

输入用过的tan后

图片8.png

发现可以登录成功,再次登录时tan已经发生改变,要求再次输入tan验证

图片9.png

再次输入第一次用的tan,发现登不上,通过抓包发现,如下:

图片10.png

有关键参数hidden_tan = 2,tan=15648,猜测提交后在数据库中验证,然后修改参数hidden_tan的值为1,提交后则通过验证

图片11.png

四、修复

修复方案:
1. 多级验证中的tan值不能存储在数据库中,并且不能循环利用;
2. tan值应该是随机生成并且设置有效期,避免在再次使用。
3. 对多次登录失败的帐号进行短时锁定;设置会话闲置超时。
4. 短信提供一个交易认证号,设置证号超时。

五、总结

在多级登录验证中,短信验证码或交易号应随机生成并在设置时效。这样攻击者无法获得用户的交易认证号。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据