模块一、输入输出测试
测试点1 文件上传时,对类型、大小的测试
- 根据系统对文件类型、大小、数量的限制,分别进行正常场景、异常场景的测试。
正常场景:上传符合要求的文件,检查是否上传成功。
异常场景:通过枚举法,分别上传不符合要求的文件,检查是否上传成功。 - 上传攻击测试:
在文件上传页面,上传JSP文件、木马、病毒文件、钓鱼图片,若客户端存在限制,可拦截正常的上传请求,修改文件,重新发送请求;检查是否上传成功。若上传成功,则构造访问的URL,并通过浏览器去访问。
- 检查系统是否对用户上传文件次数具有限制;(疯狂上传文件)
- 检查文件上传下载操作是否有记录到日志;
测试点2 文件下载路径测试
- 检查系统中文件下载模块的功能是否正常;
- 通过拦截软件,拦截下载过程,检查响应报文中是否存在暴露路径的风险;
- 通过对下载URL的构造,检查是否能够越权下载服务器上的其他文件;
测试点3 前后端校验一致测试
+不管是前台还是后台,都必须对所有用户产生的输入进行校验;一旦数据不合法,给予相应提示;不能仅仅依赖于客户端校验。
- 检查系统所有页面输入框的前后端校验规则(数据类型、数据长度、数据范围、特殊字符)是否统一;
- 检查在服务端进行数据校验不通过时,相应的请求是否记录到了安全日志中;
模块二、会话安全测试
测试点1 会话标识测试
- 会话标识传输安全测试
1.检查会话标识是否通过URL传输;如sessionid
2. 检查会话标识是否加密显示。如请求header中的会话标识、响应header中的会话表述、数据库存储的会话标识,后台运行日志中的会话标识显示; - 会话标识生成需具备强随机性
1.检查会话标识生成是否具有规律性,是否可被猜测,如不同的会话标识中,存在固定、相同的组成部分;
2.检查会话标识的长度(>16)、构成(数字、大小写字母、特殊字符)是否符合要求;如纯数字生成的会话标识,就不符合要求,过于简单,存在风险。 - 会话注销测试
1.用户登录系统并访问任意页面,点击“注销或退出”按钮后,在不登陆的情况下,重新请求访问之前访问的页面,查看是否能够请求成功;也可通过拦截软件测试。
2. 将页面闲置超过设定的时间,查看页面是否依旧能正常访问。
(用户退出或注销后、会话超时后,需销毁用户会话信息)
3. 若管理员将用户暂停或删除后,检查用户是否还能正常访问页面;若还能访问,则存在问题;
4. 若系统存在session与token,检查两者的生命周期;(token<session)
测试点2 会话固定测试
- 用户认证前后的会话标识必须不一致
进入系统登陆页面,登陆前通过软件工具抓取到的会话信息值与在登录后抓取到的会话标识值进行对比,如果其值一样,则可判断其会话的cookies或者sessions未进行更新,存在风险。
- 应禁止浏览器存储敏感信息
后退查看浏览历史记录,若依然能看到敏感信息,说明应用程序未禁止浏览器存储它。
测试点3 会话绕过测试
- 篡改请求的会话标识信息,检查是否能够请求成功:空会话、非法会话
如:Cookie: USER=1826cc8f:PSTYLE=…/…/…/…/etc/passwd
测试点4 cookie属性测试
-
检查cookie是否具有httponly属性、secure属性;
Httponly主要为防止系统由跨站脚本漏洞导致的javascript属性;
Secure表示只要当是https方法时才会传输cookie。 -
检查对应请求的Domain设置是否合理严谨、path设置是否合理严谨、Expires属性是否设置成一个将来的时间;
模块三、信息泄露测试
测试点1 源代码信息泄露测试
- 检查web页面的html源代码钟,是否存在账号口令、身份证等敏感信息。
- 检查后台代码中是否存储了敏感信息,如密钥、口令、未公开接口、未公开账号等。
- 检查发布版本的后台代码中,是否将开发过程中存在的所有注释去掉。
- 检查cookie/session中是否以明文形式显示敏感信息。
- 检查后台的加密算法是否为公开、安全、标准的加密算法。
- 检查日志或者数据库中是否明文存储了敏感信息。
- 通过在google浏览器中输入URL地址,查询应用所在服务器的信息:
Tomcat:http://x.x.x.x/manager/html
(默认帐号admin,默认密码admin或空)
Apache:http://x.x.x.x/ /server-status
测试点2 异常处理信息泄露测试
- 在web页面或通过URL构造异常(通过访问一些不存在的链接),检查返回的信息中是否存在暴露源代码、服务器版本、文件路径等敏感信息
测试点3 重要配置文件测试
- 检查系统应用下重要的配置文件是否做了相应的权限控制。
- 检查配置文件中有关口令、密钥等敏感信息的地方是否进行了加密处理。
- 检查交付资料/产品资料中是否进行敏感数据、隐私申明,口令清单是否完整。
模块四、文件目录测试
测试点1 文件归档测试
- 1.登陆后台web服务器的操作系统;
- 2.进入可通过web方式访问的目录,如tomcat/webapps等
- 3.使用find命令查找是否存在:/.bak、/.BAK、/.old、/.OLD、/.zip、/.ZIP、/.gz、/.rar、/.tar、/.temp、/.save、/.backup、/.orig、/.dut、/.tpl这些结尾的备份文件;
- 4.检查产品资料/交付资料是否全部及时归档,内容是否正确完整。
测试点2 路径遍历测试
- 程序未过滤用户输入的…/和./之类的目录跳转符,从而导致不法分子可通过提交这些来遍历服务器上的任意文件,常见的参数名由file、page。
- 在测试时,输入…/等目录跳转符,看请求是否成功,是否返回了服务器上对应的文件。
在进行测试时,有时需要对Url编码进行转换;编码如:
%2e%2e%2f代表…/
%2e%2e/代表…/
…%2f代表…/
%2e%2e%5c代表…
%2e%2e\代表…
…%5c代表…
%252e%252e%255c代表…
…%255c代表…\
测试点3 文件包含测试
-
本地文件包含:构造并请求,如:
http://ip/fileind/test.php?page=…/admin.text
http://ip/fileind/test.php?name=…/…/…/etc/passwd
http://ip/fileind/test.php?name=…/…/…/etc/passwd%00
http://ip/fileind/test.php?name=mani.cgi
cookie: USER=*******: PSTYLE=…/…/…/etc/passwd -
远程文件包含,构造并请求,如:
http://ip/fileind/test.php?page=http://ip:port/path -
常见的导致文件包含的函数如下:
PHP:include(), include_once(), require(), require_once(), fopen(), readfile(),
JSP/Servlet:java.io.File()、java.io.FileReader()
ASP:include file 、include virtual