第3部分 安全测试 测试需求:完成电子商务系统的以下安全测试工作。
- 对旧版本的登录功能进行暴力攻击测试
- 分别对新版本的通过邮件/电话号码找回密码,进行篡改邮件地址/电话号码进行安全性测试。
- 分别对旧版本进行试图查看/修改/删除别人的信息的安全性测试。
安全测试 安全测试方法中很重要的一种手段就是利用像Burp Suite这样的发包工具来截获HTTP请求包,进行信息篡改,最后发给服务器,观察服务器做出什么反应。JMeter其实也是一个发送HTTP请求的工具,可以自定义请求的内容,所以理论上Burp Suite可以实现的功能都可以用JMeter来实现。 1 暴力攻击 为了方便起见,我们以接口测试中的MySQL数据作为暴力破解字典。 1)建立一个新的jmx文件,命名为ebusiness_sec.jmx。 2)在Test plan下建立线程组。 3)右击线程组,在弹出菜单中选择“添加->逻辑控制器->模块控制器”。按照图1所示。” 关于模块控制器将在第6.1-1节进行介绍。
图1 模块控制器
4)右击线程组,在弹出菜单中选择“添加->测试片段->测试片段”。修改名称为“暴力破解”,按照图2所示。” 关于测试片段将在第6.2-1节进行介绍。重新点击模块控制器,点击线程组左边的 号,如图3所示,出现“暴力破解”测试片段,以后我们添加新的测试片段,就可以在这里选择需要测试的对应测试片段了。
图2 测试片段
图3 加了“暴力破解”后的模块控制器
5)在模块控制器后面建立HTTP请求默认值。如第4.1.3节第5)步进行设置。 6)在模块控制器后面建立HTTP Cookie管理器。 7)按照第5.4.2节建立JDBC Connection Configuration和JDBC Request。在JDBC Request的Variable name下输入username,password。如图4所示。
图4 在JDBC Request的Variable name下输入username,password
8)点击暴力破解测试片段,在弹出菜单下选择“新建->逻辑控制器->ForEach控制器”。如图5所示。
图5
- 名称改为:根据username控制
- 输入变量前缀:username。
- 开始循环字段(不包含):0。
- 循环结束字段(包括):5。
- 输出变量名称:new_username。
- 选择数字之前加下划线"_"。
9)点击根据username控制,在弹出菜单下选择“新建->逻辑控制器->ForEach控制器”。如图6所示。
图6 根据password控制
- 名称改为:根据password控制
- 输入变量前缀:password。
- 开始循环字段(不包含):0。
- 循环结束字段(包括):5。
- 输出变量名称:new_password。
- 选择数字之前加下划线"_"。
在这里我们采用两个ForEach控制器,相当于Burp Suite测试器中的集束炸弹的作用。关于ForEach控制器将在第6.1-1节中进行介绍。 10)按照图7设置下面的元件。
图7 设置暴力破解的下面元件
11)在商品列表HTTP请求中,username的值设置为:{new_username};password的值设置为:{__digest(SHA-256,${new_password},,,)}。 12)为了寻找方便,我们在商品列表下的响应断言设置为:用户名或者密码错误。 13)运行测试。 14)在暴力破解测试片段下添加察看结果树。 15)运行测试。 16)在察看结果树中寻找断言失败的,即为暴力破解成功的。然后在调试取样器中查看取得的用户名和密码。如图8所示。
图8 暴力破解成功的数据
作为白帽子黑客,暴力破解的目的是检查用户设置的用户名和密码是否过于简单,如果被暴力破解查处,可以通知用户修改用户名和密码,这样就给产品增加看了一项增值业务,站在安全的角度上为用户所想。