Web安全测试指南--会话管理
会话复杂度:
编号 |
Web_ Sess_01 |
用例名称 |
会话复杂度测试 |
用例描述 |
测试目标系统产生的session id是否具备足够的复杂度。 |
严重级别 |
高 |
前置条件 |
1、 目标系统使用登录会话机制。 2、 目标web应用可访问,业务正常运行。 3、 已安装http拦截代理(burp、fiddler或webscarab均可)。 |
执行步骤 |
1、 开启burp,设置对http请求进行拦截,并在浏览器中配置代理。 2、 打开目标系统的登录页面,使用正确的用户名和密码提交登录,比如: POST /login.php HTTP/1.1 #登录请求 Host: www.example.com [other HTTP headers] username=admin&password=123456 3、 将burp拦截到的登录请求转入burp sequencer。 4、 使用burp sequencer向目标系统快速大量地提交登录请求以获得批量session id,并将得到的session id保存到本地。 5、 使用文本编辑器打开保存session id的文件。 6、 检查所有session id的长度。 7、 检查所有session id的构成。 |
预期结果 |
1、 所有的session id的字符串长度都大于等于16。 2、 所有session id都由数字、普通小写字符、普通大写字符和特殊字符中的2种组合而成。比如:6p331epl5hjserrcbrg5lgmhi6 |
测试结果 |
|
备注 |
1、 关于burp sequencer的使用,请参考《常见安全工具使用指南》。 2、 用于分析的token数量建议至少100个以上。 3、 Session id只是所有会话标记的统称,不同系统会话标记名称可能不一样,比如:jssessionid、sid和DDNSCOOKIE等。 |
5.3.2、会话预测:
编号 |
Web_ Sess_02 |
用例名称 |
会话可预测性测试 |
用例描述 |
测试session id是否可以进行预测。 |
严重级别 |
高 |
前置条件 |
1、 目标系统使用登录会话机制。 2、 目标web应用可访问,业务正常运行。 3、 已安装http拦截代理(burp、fiddler或webscarab均可)。 |
执行步骤 |
1、 开启burp,设置对http请求进行拦截,并在浏览器中配置代理。 2、 打开目标系统的登录页面,使用正确的用户名和密码提交登录,比如: POST /login.php HTTP/1.1 #登录请求 Host: www.example.com [other HTTP headers] username=admin&password=123456 3、 将burp拦截到的登录请求转入burp sequencer。 4、 使用burp sequencer向目标系统快速大量地提交登录请求以获得批量session id,并将得到的session id保存到本地。 5、 使用文本编辑器打开保存session id的文件。 6、 检查产生的token是否存在静态不变的部分,比如: 8d2pv839pgopg9q53lpb7qb7r5 8d2pv839v581o45rkhcg7qb7r5 7、 检查产生的token是否存在可预测的部分,比如: 5id92rgqhkvb1vtsic18075997 qnplhr8frbah41n9s028075998
jtqm4mi1i8r0r4fae138075999 8、 将token中静态不变以及可预测的部分删除,检查剩余部分是否满足会话复杂度要求(参考用例:“会话复杂度”)。 |
预期结果 |
删除静态和可预测部分后的Session id满足会话复杂度要求。 |
测试结果 |
|
备注 |
1、 关于burp sequencer的使用,请参考《常见安全工具使用指南》。 2、 用于分析的token数量建议至少100个以上。 |
5.3.3、会话定置:
编号 |
Web_Sess_03 |
用例名称 |
会话定置测试 |
用例描述 |
测试用户成功后目标系统是否会更新会话标记(比如:session id)。 |
严重级别 |
中 |
前置条件 |
1、 目标系统使用登录会话机制。 2、 目标web应用可访问,业务正常运行。 3、 已安装http拦截代理(burp、fiddler或webscarab均可)。 |
执行步骤 |
1、 开启burp,设置对http请求进行拦截,并在浏览器中配置代理。 2、 打开目标系统的登录页面,使用正确的用户名和密码提交登录。 3、 在burp拦截到的http请求中检查是否存在会话标记(比如:session id),如果存在则记录下来,如果没有则测试结束(通过),比如: POST /login.php HTTP/1.1 #登录请求 Host: www.example.com Cookie: PHPSESSID=urvo14kd4ke4j5vef07t4edj43;
[other HTTP headers] username=admin&password=123456 4、 释放提交被拦截的登录请求,直至登录成功。 5、 登录成功后,点击目标系统需要带cookie才能访问的任意功能。 6、 在burp拦截到的http请求中检查会话标记的值(一般在cookie中)。 |
预期结果 |
步骤3和步骤6中,会话标记的值不一样。 |
测试结果 |
|
备注 |
使用GET提交请求数据可能会被记录在web server日志或缓存在浏览器。 |
5.3.4、CSRF:
编号 |
Web_Sess_04 |
用例名称 |
跨站伪造请求测试 |
用例描述 |
测试在目标系统上进行关键性或敏感性操作是否携带随机token。 |
严重级别 |
中 |
前置条件 |
1、 目标系统使用登录会话机制。 2、 目标web应用可访问,业务正常运行。 3、 已安装http拦截代理(burp、fiddler或webscarab均可)。 4、 已明确区分出目标系统的关键性或敏感性操作(比如:删除数据库)。 |
执行步骤 |
1、 开启burp,设置对http请求进行拦截,并在浏览器中配置代理。 2、 使用正确账户名和密码登录目标系统。 3、 访问具有关键性或敏感性功能的页面,并点击提交请求(比如:删除数据库、重启设备等等)。 4、 在burp拦截到的GET/POST http请求中观察所有参数的值。 |
预期结果 |
参数体中存在不可预测的随机因子(比如:UUID或session id),比如: POST /db/delDB.jsp HTTP/1.1 #添加数据库 Host: www.example.com [other HTTP headers] dbName=users&token =5uvd5k97rqdpk698firq7g93s1 |
测试结果 |
|
备注 |
1、 对于关键性或敏感性操作的判断一般具有较大的主观性,通常来讲,可以从执行该操作后可能造成的结果来判断,但不同的人可能看到的危害程度不一样,最终应当以能想象得到的最严重的情况为标准。 2、 “写”操作往往是关键性或敏感性操作的特征,比如:增、删和改,对于这类操作应予以特别的关注。 |
5.3.5、会话注销:
编号 |
Web_Sess_05 |
用例名称 |
会话注销测试 |
用例描述 |
测试目标系统的会话注销功能是否存在安全缺陷。 |
严重级别 |
高 |
前置条件 |
1、 目标系统使用登录会话机制。 2、 目标web应用可访问,业务正常运行。 3、 已安装http拦截代理(burp、fiddler或webscarab均可)。 |
执行步骤 |
1、 开启burp,设置对http请求进行拦截,并在浏览器中配置代理。 2、 使用正确账户名和密码登录目标系统。 3、 检查目标系统是否存在注销功能,如果不存在,测试结束(不通过)。 4、 点击进入不同的功能页面,检查是否在所有页面都能很容易地看到或找到注销功能。 5、 点击目标系统需要带cookie才能访问的任意功能。 6、 将burp拦截到的http请求转入burp repeater。 7、 点击目标系统的注销功能登出账户。 8、 在burp repeater上重放步骤6拦截到的http请求,并观察结果。 |
预期结果 |
1、 步骤3中,目标系统存在注销功能。 2、 步骤8中,目标系统跳转到登录页面或者返回类似“未登录”的信息或者错误码。 |
测试结果 |
|
备注 |
|
5.3.6、会话超时:
编号 |
Web_Sess_06_01 |
用例名称 |
会话闲置超时测试 |
用例描述 |
测试会话在闲置预设的时间后是否被强制销毁。 |
严重级别 |
高 |
前置条件 |
1、 目标系统使用登录会话机制。 2、 目标web应用可访问,业务正常运行。 |
执行步骤 |
1、 使用正确账户名和密码登录目标系统。 2、 打开任意需要登录才能访问的功能页面。 3、 在目标系统上闲置N分钟并且不进行任何操作。 4、 刷新步骤2的功能页面,并观察结果。 |
预期结果 |
目标系统跳转到登录页面或者返回类似“未登录”的信息或者错误码。 |
测试结果 |
|
备注 |
N的值应根据业务自身的特点来决定,对于安全性要求高的业务,一般设置为15,其它的业务可以往上递增直至一个合理的值。 |
编号 |
Web_Sess_06_02 |
用例名称 |
会话绝对超时测试 |
用例描述 |
测试会话在使用预设的时间后是否被强制销毁。 |
严重级别 |
低 |
前置条件 |
1、 目标系统使用登录会话机制。 2、 目标web应用可访问,业务正常运行。 |
执行步骤 |
1、 使用正确账户名和密码登录目标系统。 2、 打开任意需要登录才能访问的功能页面。 3、 等待N分钟(期间可进行除了注销以外的任意操作)。 4、 刷新步骤2的功能页面,并观察结果。 |
预期结果 |
目标系统跳转到登录页面或者返回类似“未登录”的信息或者错误码。 |
测试结果 |
|
备注 |
1、 会话绝对超时时间一般大于等于会话闲置时间。 2、 会话绝对超时时间并非所有业务系统必须的,但安全性要求高的业务应当存在。 3、 N的值同样根据业务自身特性来决定。 |
提示:如果IE显示不正常,请使用chrome浏览器