本章节主要讲解“软件测试之认证测试”的内容,认证测试主要是验证系统对暴力破解的一种防护能力。对于口令的破解,最常用的方式是暴力测试,特别是对于由六位纯数字组成的密码,如电信和金融行业。暴力破解主要是通过穷举法,对密码每一种可能的情况进行一一试验,直到找到正确的密码为止。
测试时主要是测试系统防护暴力破解的能力,并不对系统进行暴力测试,如果需要进行暴力破解,可以使用一些相关的工具进行测试。
认证方面的测试主要包括以下几方面内容:
强口令策略测试。
认证信息出错的提示信息测试。
避开认证登录测试。
验证码测试。
账号锁定阈值测试。
找回密码测试。
修改密码测试。
敏感数据传输测试。
(1)强口令策略测试。
强口令策略测试主要是测试在注册或修改用户口令时,Web 系统是否要求用户口令必须为强口令。
测试时进入密码修改页面,或者注册一个新的用户,在密码输入框中输入弱密码(如密码的长度少于6 位字符、设置纯数字为密码)。当输入的密码少于6 位字符时,系统应该弹出相应的提示信息(如密码长度不能少于6 位字符);当输入纯数字时,系统也应该弹出相应的提示信息(如当前设置的密码为弱密码,是否修改)。
一个强口令策略必须满足以下条件:
口令长度的取值范围为0~32 个字符,口令的最短长度和最长长度均可设置,口令的最短长度建议默认为6 个字符。
口令中至少需要包括一个大写字母(A~Z)、一个小写字母(a~z)、一个数字字符(0~9),是否必须包含特殊字符可以设置。
口令中允许同一字符连续出现的最大次数可设置,取值范围为0~9。当设置为0 时,表示无限制,建议默认为3。
口令必须设置有效期,最短有效期的取值范围为0~9999 分钟,当取值为0 时,表示无限制,建议默认值为5 分钟;最长有效期的取值范围为0~999 天,当取值为 0 时,表示口令永久有效,建议默认值为90 天。
在口令到期前,当用户登录时系统必须进行提示,提前提示的天数可设置,取值范围为1~99 天,建议默认设置为7 天。
口令到达最长有效期后,用户在进入系统前,系统需要强制更改口令,直至更改成功。
口令历史记录数可设置,取值范围为0~30,建议默认设置为3 个。
管理员、操作员、最终用户修改自己的口令时,必须提供旧口令。
初始口令为系统提供的默认口令或者是由管理员设定时,则在用户/操作员使用初始口令成功登录后,要强制用户、操作员更改初始口令,直至更改成功。
口令不能以明文的形式在界面上显示。
口令不能以明文的形式保存,必须加密保存;口令与用户名关联加密,即加密前的数据不仅包括口令,还包括用户名。
只有当用户通过认证之后,才可以修改口令。
修改口令的账号只能从服务器端的会话信息中获取,而不能由客户端指定。
实现弱口令词典功能。
(2)认证信息出错的提示信息测试。
攻击者在进行暴力破解时,最终通过穷举法,对用户名和密码进行逐个实验,当登录错误时,目标服务器会产生相应的提示,而这个提示信息很可能存在漏洞,如提示“该用户名不存在”,像这类提示信息就存在漏洞。
测试时可以测试两种情况,一是使用错误的用户名和任意密码进行登录,查看服务器弹出的提示信息;二是输入正确的用户名,输入错误的密码,查看服务器弹出的提示信息。对于这类涉及到安全的错误提示信息,系统在处理时不能给出准确的、具体的提示信息。
(3)避开认证登录测试。
避开认证登录测试主要是测试服务器是否可能存在被绕过登录的可能性。避开认证登录其实是SQL 注入的一种使用方式,一般情况下服务验证登录的一般方式是将输入的用户名和口令与数据库中的记录进行对比,如果输入的用户名和口令与数据库中的某条记录相同,那么登录成功;反之提示登录失败。
代码如下:
Set rs = Server.CreateObject("ADODB.Connection")sql = "select * from Manage_User where UserName='" & name & "' And PassWord='"&encrypt(pwd)&"'"Set rs = conn.Execute(sql)
这条SQL 语句看似没有问题,当用户输入合法的用户名和密码时,如admin/123456,程序可以正确地判断登录是否成功。但如果在用户名或密码输入框中输入admin' or '1'='1,那么执行的SQL
语句为:
sql = "select * from Manage_User where UserName='admin' or '1'='1' And PassWord=' admin' or '1'='1'"这样不管用户名和密码输入的内容是否正确,都能绕过服务器的验证顺利登录成功,因为“'1'='1'”这个条件一定为真。
测试时在用户名和密码输入框中都输入admin' or '1'='1,验证是否能正确地登录Web 系统,系统应该能正确地处理这种情况。
(4)验证码测试。
验证码测试主要是测试在登录时系统是否提供验证码机制,以及验证码机制是否完善,是否存在漏洞。
验证码的测试需要注意以下几个问题:
第一:登录页面是否存在验证码机制,如果不存在,说明系统存在漏洞。
第二:确保验证码与用户名、密码是一次性同时提交给服务器进行验证的,如果分开提交、分开验证,那么系统存在漏洞。
第三:测试后台服务器是否为检查验证码正确后才进行用户名和密码的检验,如果不是,说明系统存在漏洞。从性能的角度来说,先检查验证码,如果验证码失败也可以节约服务器的时间,因为可以省去数据库判断的时间。测试时可以故意输错误的用户名、密码或验证码,系统返回提示信息,如果提示“验证码错误”,说明服务器是先判断验证码,再判断用户名和密码。
第四:验证码是否为图片且在一张图片中,如果不是图片或不在一张图片中,说明系统存在漏洞。
第五:在登录界面单击右键查看HTML 源代码,如果在HTML 源代码中可以查看到验证码的值,说明系统存在漏洞。
第六:生成的验证码是否根据提供的参数生成,如果是,则说明系统存在漏洞。
第七:测试验证码是否为随机生成,并且不能出现前几次可以随机产生,之后不再随机生成的情况(如前8 次可以随机产生验证码,但此后再也不随机产生验证码)。
第八:测试产生验证码的图片中背景色是否为无规律的点或线条。如果背景为纯色(如纯红色),说明系统存在漏洞,一般验证码的背景色是由一种颜色向另一种颜色渐变,如图12-15 所示。
图12-15 验证码
第九:测试生成的验证码的有效次数只为一次,即只要使用该验证码登录过一次后,该验证码就失效。
测试时可以按如下步骤进行:
步骤1:进入登录页面,页面中显示当前生成的验证码。
步骤2:使用工具对GET 和POST 请求进行拦截。
步骤3:输入错误的用户名或密码,输入正确的验证码,提交请求。
步骤4:将拦截到的GET 或POST 请求拷贝到文件中,并修改用户名或密码。
步骤5:在“开始”菜单中运行cmd.exe 程序,在命令行中输入命令telnet <服务器域名或IP地址><端口号>,并按Enter 键。
步骤6:将修改的GET 或POST 请求粘贴到命令行窗口中,并按Enter 键。
步骤7:查看页面中是否提示“验证码错误”一类的信息,如果没有相关提示,则说明服务器存在漏洞。
(5)账户锁定阈值测试。
如果缺少锁定策略,那么攻击者很可能通过穷举法对系统进行暴力破解。如网站对同一个IP地址注册账户的限制,一般网站不允许同一个IP 地址在24 小时之内注册超过3 次。可以通过账户锁定阈值来设置登录失败多少次后锁定用户账号,设置次数的范围为1~999,如果设置为0,表示该账号永不锁定;如果定义了账户锁定阈值,那么账户锁定时间必须大于或等于复位时间。
测试时可以故意输入错误的用户名或密码,重复多次登录,观察目标系统返回的信息,系统应该提示“账号已锁定”或“IP 地址已锁定”等类似的信息。
(6)找回密码测试。
找回密码测试主要是测试当用户忘记密码并通过网站找回密码时,系统是否存在漏洞。如果系统存在漏洞,攻击者则可能通过找回密码功能来重置用户的密码,导致用户不能正常登录,造成业务数据被修改。
具体的测试步骤如下:
步骤1:进入找回密码界面。
步骤2:在找回密码时,需要对用户的身份进行验证,未对身份验证就发送密码,说明系统存在漏洞。常用的身份验证的信息如一些原来注册时填写的找回密码的问题(如小学所在地),对于这类回答式的问题,应该避开类似判断的问题,如喜欢的宠物是否为小狗这类问题,这样会缩小问题的范围,说明系统存在漏洞。
步骤3:如果为输入密码的方式,应该查看HTML 源代码,检查是否存在关于密码的一些数据。
步骤4:重置后的密码一般通过用户的备用邮箱或手机短信来通知用户,不能以明文的方式直接显示在页面上。
(7)修改密码测试。
修改密码测试主要是测试修改密码的功能是否存在缺陷。
具体的测试步骤如下:
步骤1:进入修改密码界面。
步骤2:查看修改密码时是否要求输入旧密码,如果不需要用户填写旧密码,说明系统存在缺陷。
步骤3:修改密码时,需要将旧密码通过一个HTTP 请求提交到服务器,可以通过一些工具(如WebScarab 工具)进行栏截来测试,如果不是,则说明系统存在漏洞。
步骤4:测试是否可以修改其他用户的密码,一般只有管理员或有相关权限的用户可以修改其他用户的密码。
注意:如果初始口令为系统提供的默认口令或者是由管理员设定,则在用户使用初始口令成功登录后,系统必须强制用户更改初始口令,直至更改成功,否则存在漏洞。
(8)敏感数据传输测试。
敏感数据传输测试主要是测试系统处理用户名和密码传输时,是否对用户名和密码进行加密处理。
测试时可以使用工具(如WebScarab 工具)对客户提交的GET 和POST 请求进行拦截,查看用户登录过程中用户名和密码是否是使用HTTPS 协议进行传输。
同理,对于找回密码和修改密码功能,用户名和密码也必须使用HTTPS 协议传输。
HTTPS(Secure HyperText Transfer Protocol,安全超文本传输协议)是一个安全通信通道,基于HTTP 开发,是在HTTP 的基础上加入SSL 层,其加密的过程主要是通过SSL 来完成。HTTPS通信过程如图12-16 所示。
图12-16 HTTPS 通信过程
本章节关于“软件测试之认证测试”的内容就学习到这里,大家觉得文章有用的话记得每天来这里和小编一起学习涨薪技能哦。