前言:登录认证模块测试包含五方面内容:
暴力破解测试、本地加密传输测试、session测试、密文对比认证测试、登录失败信息测试。
0x01:暴力破解测试
暴力破解测试是指对应用系统用户登录账号与密码进行的枚举测试,针对账号或密码进行逐一比较,直到找出正确的账号与密码。
一般分为以下三种情况:
a.在已知账号的情况下,加载密码字典针对面膜进行枚举测试。
b.在未知账号的情况下,加载账号字典,并结合密码字典进行枚举测试。
c.在未知账号和密码的情况下,利用账号和密码字典进行测试。
修复建议:
1.增加验证码,登录失败一次,验证码换一次。
2、配置登录失败次数限制策略,如在同一用户尝试登录的前提下,5分钟内连续登录失败超过6次,则禁止用户在3小时内登录系统。
3、在条件允许的情况下,增加手机接收短信验证码或邮箱接收邮件验证码。
0x02:本地加密传输测试
本地加密传输测试是针对客户端与服务器的数据传输,查看数据是否采用SSL(Security Socker Layer,安全套接层)加密方式加密。
wireshark观察登录的数据包。
修复建议:在架设web应用的服务器上部署有效的SSL证书服务。
0x03:session会话固定测试
session是应用系统对浏览器客户端身份认证的属性标识,在用户退出应用系统时,应将客户端session认证属性标识清空。
如果未能清空客户端session标识,在下次登录系统时,系统会重复利用该session标识进行会话。
攻击者可利用该漏洞生成固定Session会话,并诱骗用户利用攻击者生成的固定会话进行系统登录,从而导致用户会话认证被窃取。
测试方法:
在注销退出系统时,对当前浏览器授权SessionID值进行记录。再次登录系统,将本次授权SessionID值与上次进行比对校验。
判断服务器是否使用与上次相同的SessionID值进行授权认证,若使用相同SessionID值则存在固定会话风险。
0x04:Session会话注销测试
Session是应用系统对浏览器客户端身份认证的属性标识,在用户注销或退出应用程序系统时,系统应将客户端Session认证属性标识清空。如果未能清空Session认证会话,该认证会话将持续有效,此时攻击者获得该Session认证会话会导致用户权限被盗取。
测试方法:
在用户注销退出系统后,判断授权认证SessionID值是否依然有效。若授权SessinID依然则存在风险。
修复建议:
在用户注销或退出应用系统时,服务器应及时销毁Session认证会话信息并清空客户端浏览器Session属性标识。
0x05:seesion会话超时时间测试
在用户成功登录系统获得Session认证会话后,该Session认证会话应具有生命周期,即用户在成功登录系统后,
如果在固定时间内(例如10分钟)该用户与服务器无任何交互操作,应销毁该用户Session认证会话消息,要求用户重新登录
系统认证。
修复建议:
对每个生成的Session认证会话配置生命周期(常规业务系统建议30分钟内),从而有效降低因用户会话认证时间
过长而导致的信息泄露风险。
0x06:cookie仿冒测试
服务器为鉴别客户端浏览器会话及身份信息,会将用户身份信息存储在Cookie中,并发送至客户端存储。攻击者通过尝试修改Cookie中的身份标识,从而达到仿冒其他用户身份的目的,并拥有相关用户的所有权限。
测试方法:
对系统会话授权认证Cookie中会话身份认证标识进行篡改测试,通过篡改身份认证标识值来判断能否改变用户身份会话。
例如:cookie: user-id=admin;PHPSESSID=i7fsdfsdfsdfxxxxxxxxx5
通过篡改修cookie字段中user-id的值,来尝试登录其他用户。
修改建议:
建议客户端标识的用户敏感信息数据,使用Session会话认证方式,避免被他人仿冒。
0x07:密文比对认证测试
a.服务器加密用户名和密码再与数据库中加密值做对比。
在系统登录时密码加密流程一般是先将用户名和密码发送到服务器,服务器会把用户提交的密码经过HASH算法加密后
和数据库中存储的加密值对比,如果加密值相同,则判断用户提交密码正确。
b. 客户端hash加密(前端js加密)再与数据库中加密值做对比
但有些网站系统的流程实在前台浏览器客户端对密码进行Hash加密后传输给服务器并与数据库中加密值进行对比,
如果加密值值相同,则判断用户提交密码正确。此流程会泄露密码加密方式,导致出现安全隐患。
思考:如何判断用户名和密码是客户端加密还是服务端加密
JS代码得知是客户端加密。
利用方法,前端加密我们可以使用Burp(payloads模块中子模块Payload Processing进行爆破)。
修复建议:
将密码加密过程及密文对比过程放置在服务器后台执行。
发送用户名和密码到服务器后台,后台对用户提交的密码经过MD5算法加密后和数据库中存储的MD5密码值进行比对,
如果加密值相同,则允许用户登录。
0x08:登录失败信息测试
在用户登录系统失败时,系统会在页面显示用户登录失败信息,假如提交账号在系统中不存在,系统提示“用户名不存在”
、“账号不存在”等明确信息;假如提交账号在系统中存在,则系统提示“密码/口令错误”等间接提示信息。
攻击者可根据此类登录失败提示信息来判断当前登录账号是否在系统中存在,从而进行有针对性的暴力破解测试。
测试方法:
针对系统返回不同的登录失败提示信息进行逻辑分析,判断是否能通过系统返回的登录失败信息猜测系统账号或密码。
来自web攻防之业务安全