一、前言
信息安全对于用户登录认证最为典型的用例,下面通过几个安全认证测试用例,分析一般情况存在的安全漏洞,主要用例有:验证码测试、用户名枚举测试、账号锁定策略测试、表单绕过测试、密码找回功能测试、密码找回用户凭证暴力破解、弱token带来的任意重置及找回密码本地验证、密码修改测试
二、认证用例
1、验证码测试 - 查看是否有验证码机制,以及验证码机制是否完善。
1) 登陆页面是否存在验证码,不存在说明存在漏洞,完成测试;
2) 验证码和用户名、密码是否一次性、同时提交给服务器验证,如果是分开提交、分开验证,则存在漏洞
3) 在服务器端,是否只有在验证码检验通过后才进行用户名和密码的检验,如果不是说明存在漏洞。(检测方法:输入错误的用户名或密码、错误的验证码。观察返回信息,是否只提示验证码错误,也就是说当验证码错误时,禁止再判断用户名和密码。)
4) 验证码是否为图片形式且在一张图片中,不为图片形式或不在一张图片中,说明存在漏洞,完成测试
5) 生成的验证码是否可以通过html源代码查看到,如果可以说明存在漏洞,完成测试
6) 生成验证码的模块是否根据提供的参数生成验证码,如果是说明存在漏洞,完成测试
7) 请求10次观察验证码是否随机生成,如果存在一定的规律(例如5次后出现同一验证码)说明存在漏洞,完成测试
8) 观察验证码图片中背景是否存在无规律的点或线条,如果背景为纯色(例如只有白色)说明存在漏洞,完成测试
9) 验证码在认证一次后是否立即失效:
10) 请求登陆页面,得到生成的验证码
11) 开启Burpsuite,配置对GET和POST请求进行拦截;并在浏览器中配置代理服务器IP为127.0.0.1,端口为8008
12) 填入错误的用户名和口令,填入正确的验证码,提交表单
13) 从Burpsuite拦截数据中复制对应登陆请求的POST或GET消息(文本格式),将其中的口令更改一个字符
14) 在命令行中输入telnet <服务器域名或IP> <端口>,回车
15) 将修改的内容粘贴到命令行窗口中,回车
16) 判断返回的页面中是否包含“验证码错误”(或类似)的提示,如果没有,说明存在漏洞,完成测试
2、用户名枚举测试 - 进行暴力破解,攻击者首先需要知道已存在的用户名,如果登陆验证设计过程中,出现提示用户名不存在现象,则可能存在用户名枚举漏洞。
1) 在用户名输入框中输入常见用户名(admin,test、system、manage、demo等),口令任意;
2) 若输入用户名后,服务器返回提示类似于“用户名不存在”,则说明存在漏洞,完成测试;
3) 使用正确的用户名(或同功能的身份标志),在口令框中输入admin;
4) 若服务器提示类似于“密码/口令错误”, “用户名不存在”之类的信息,则说明存在漏洞,完成测试。
3、账号锁定策略测试 - 当频繁的输入错误的用户名/口令,系统自动锁定该帐户是防范暴力破解常用手段,本测试主要用于测试系统是否有该安全机制。
1) 打开burpsuite代理工具,设置拦截代理模式;
2) 打开登陆页面,输入用户名、密码后提交;
3) 切换到burpsuite拦截页面;
4)发送到intruder模块,在密码字段添加变量
5)attack type:sniper,payload设置为simple list:并导入密码字典
6)选择好payload后,点击菜单栏intruder-start attack开始;
7)观测是否用于测试的账号被锁定,如果被锁定,则测试通过。
4、表单绕过测试 - 目前很多身份验证设计采用表单登录验证方式,本测试主要分析采用表单身份登陆设计是否可以通过输入特殊字符绕过身份验证。
1) 打开登陆页面
2) 在用户名输入框分别尝试输入以下字符
admin’ or ‘1’=’1@b@‘ or ‘1’=’1@b@‘or’=’or’
3) 在口令输入框分别尝试输入以下字符
admin’ or ‘1’=’1@b@‘ or ‘1’=’1@b@‘or’=’or’
4) 提交表单,观察返回结果,如果可以绕过登陆则说明存在问题。
5、密码找回功能测试 - 网站在密码重设和密码找回功能上如果存在着缺陷,攻击者可以通过此功能找到指定用户的密码,更改指定用户的密码让其不能登陆,造成业务数据修改等。
1) 打开密码找回功能的页面
2) 如果没有对用户的合法身份进行任何验证就发送密码,则说明存在漏洞。
3) 系统正常需要用户输入一些能够证明其合法身份的信息(比如回答一些原来注册用户时填写的一些信息,比如小学教师姓名等),如果是回答问题的方式,则判断问题是否类似于“我的生日”或“我的姓氏”这种答案限定范围非常小的问题。如果是说明存在漏洞,完成测试,否则进行下一步。
4) 如果为输入密码的方式,则查看该页的html源代码
5) 在html源代码中查看是否存在着可能为密码的数据,如果是,说明存在漏洞
6) 用户的密码一般通过用户邮箱或者手机短信的方式来通知用户,如果在返回的Web页面直接显示明文口令,则说明存在漏洞。
7) 输入用户名后,如果给默认绑定手机、邮箱发送短信/邮件,在发送报文中修改的手机号、邮箱地址,新修改的手机号、邮箱仍然能收到系统发送的信息,说明存在漏洞。
6、密码找回用户凭证暴力破解 - 有些网站输入需要找回的账号后,会采用OCP(动态口令)产生验证码,如果验证码是4位纯数字,则有可能存在被暴力猜解漏洞。
1) 输入待找回帐户
2) 提交找回
3) 等待短信验证码,输入收到的随机验证码,提交报文
4) 打开Burpsuite指定验证码字段,暴力破解
7、弱token带来的任意重置 - 目前很多网站在找回密码功能时,会随机产生一些token用于区分不同用户,如果token规律性太强,则有可能导致任意重置漏洞。
1) 填写待找回帐户信息,点发送按钮;
2) 收到找回密码邮件,分析token字段;
3) http://www.example.com/findpwd/setpwdfromemail?vc=c4ce4dd3d566ef83f9[马赛克]&u=[马赛克]%40gmail.com,
4) 如果token只是采用简单的unix时间戳,则很可能存在漏洞
8、找回密码本地验证 - 如果修改密码功能存在着缺陷,攻击者可以通过抓包拦截,修改一些指定字段信息即可完成任意用户帐户重置。
1) 使用找回密码功能,输入指定要找回密码的帐户,第三次测试用官方帐号“test”为例,使用抓包工具抓包
2) 修改返回的默认数据包
3) 提交后自己设置的手机将会收到验证码,但是默认提交将不会成功。
4) 按图所示修改数据包参数提交
9、密码修改测试 - 如果修改密码功能存在着缺陷,攻击者可以通过此其缺陷修改其他用户的密码。
1) 登陆网站
2) 进入密码修改页面
3) 查看是否必须提交正确旧密码,如果不需要则存在漏洞
4) 填写并提交修改密码数据,并以Burpsuite拦截修改密码请求,观察新旧密码是否通过同一个HTTP请求提交到服务器,如果不是则存在漏洞;
5) 观察是否客户端是否提交用户名或用户ID,如果是则修改为其他用户名或用户ID,看看是否能够成功修改其他用户的密码,如果可以则存在漏洞。