2021-07-23

安全测试-测试点

|缩略语| 全称 |
|-CRLF-|–\r\n回车换行|
| LDAP | Lightweight Directory Access Protocol 轻量级目录访问协议 |
| MML | man-machine language 人机交互语言 |
|-SessionID-|标志会话的ID|
| Web Service |Web服务是一种面向服务的架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以互操作 |
|-SOAP-|-Simple Object Access Protocol 简单对象访问协议-|
|XFS |Cross Frame Script 跨帧脚本 |
|-XSS-|Cross Site Script 跨站脚本|

1 测试过程
测试主要包括主动模式和被动模式两种。在被动模式中,测试人员尽可能的了解应用逻辑:比如用工具分析所有的HTTP请求及响应,以便测试人员掌握应用程序所有的接入点(包括HTTP头,参数,cookies等);在主动模式中,测试人员对应用系统、后台等进行渗透测试,其可能造成的影响主要是数据破坏、拒绝服务等。一般测试人员需要先熟悉目标系统,即被动模式下的测试,然后再开展进一步的分析,即主动模式下的测试。

2 Web安全测试
2.1 Web漏洞扫描工具测试
自动化扫描工具只能检测到部分常见的漏洞(如跨站脚本、SQL注入等),不是针对用户代码的,也就是说不能理解业务逻辑,无法对这些漏洞做进一步业务上的判断。往往最严重的安全问题并不是常见的漏洞,而是通过这些漏洞针对业务逻辑和应用的攻击。

Web目前分为application和Web service两部分。Application指通常意义上的Web应用,而Web service是一种面向服务的架构的技术,通过标准的Web协议(如HTTP、XML、SOAP、WSDL)提供服务。

2.1.1 AppScan application扫描测试
测试用例名称

AppScan application 扫描测试

测试目的

利用自动化的Web安全扫描工具AppScan进行扫描,以发现Web应用中存在的常见漏洞

测试条件

1、 已知Web服务器域名或IP地址

2、 Web业务运行正常

3、 测试用机上安装了AppScan

执行步骤

1、 双击运行AppScan,选择file—new新建扫描,选择扫描模板default

2、 弹出扫描配置对话框,选择扫描类型,默认为Web Application Scan,点击next

3、 在Starting URL中填入需扫描的目标服务器域名或IP地址,其他配置不需修改,点击next

4、 选择No Login,点击next

5、 不需修改任何参数,点击next

6、 不需修改参数,选择Start a full automatic scan,点击finish完成配置,开始扫描

7、 扫描完成,保存扫描结果,并对结果进行分析

预期结果

经过对扫描结果分析,确认不存在“中等等级”及以上级别的漏洞。

备注

注意:该用例的执行对被测系统的性能影响比较大,而且可能导致一些垃圾数据,建议只在测试环境执行。

由于自动化工具在很多情况下只是提示一种漏洞存在的可能,因此需要对所有的结果进行人工的分析判断。分析过程参考以下章节的测试项,使用辅助工具或者是手动验证。

业界常用的自动化扫描工具还有WebInspcet,NStalker,Acunetix Web Vulnerability Scanner。在有条件的情况下,可以综合使用。

测试结果

2.1.2 AppScan Web Service 扫描测试
测试用例名称

AppScan Web Service 扫描测试

测试目的

利用自动化的Web安全扫描工具AppScan进行扫描,以发现Web Service中存在的漏洞

测试条件

1、 已知Web服务器域名或IP地址

2、 Web业务运行正常

3、 目标系统使用了Web Service服务

4、 测试用机上安装了AppScan

执行步骤

1、 双击运行AppScan,选择file—new新建扫描,选择扫描模板default

2、 弹出扫描配置对话框,选择扫描类型,默认为Web Service Scan,点击next

3、 在Starting URL中填入需扫描的目标服务器域名或IP地址,其他配置不需修改,点击next

4、 不需修改任何参数,点击next

5、 不需修改任何参数,点击Finish完成配置,开始扫描

6、 扫描完成,保存扫描结果,并对结果进行分析

预期结果

经过分析确认以后的扫描结果中不存在信息提示以上等级的漏洞。

备注

注意:该用例的执行对被测系统的性能影响比较大,而且可能导致一些垃圾数据,建议只在测试环境执行。

由于自动化工具在很多情况下只是提示一种漏洞存在的可能,因此需要对所有的结果进行人工的分析判断。

测试结果

2.2 服务器信息收集
2.2.1 运行帐号权限测试
测试用例名称

运行帐号权限测试

测试目的

运行Web服务器的操作系统帐号权限越高,那么Web遭到攻击产生的危害就越大。因此,不应使用“root”、“administrator”、等特权帐号或高级别权限的操作系统帐号来运行Web,应该尽可能地使用低级别权限的操作系统帐号。

测试条件

1、 已知Web网站IP地址和OS登陆帐号、密码

执行步骤

1、 登陆Web服务器操作系统

2、 查看运行Web服务器的操作系统帐号,不是“root”、“admin”等特权帐号或高级别权限帐号,如果是则存在漏洞。

Ÿ linux:使用“ps –ef|grep java”命令,返回结果第一列的操作系统用户就是运行Web服务器的帐号;

预期结果

没有使用“root”、“admin”等特权操作系统帐号运行Web。

测试结果

2.2.2 Web服务器端口扫描
测试用例名称

Web服务器端口扫描

测试目的

有时Web应用服务器除业务端口外还会开放一些默认端口(如tomcat开放的8080),这些默认端口对最终用户是不需要开放的,而且也不会用于维护,容易被攻击,本测试目的在于发现服务器上未使用的Web端口。

测试条件

1、 已知Web服务器域名或IP地址,假设IP地址为192.168.1.1

2、 测试用机安装了nmap,假设路径为d:\nmap

执行步骤

1、 打开命令提示符,切换到nmap路径下,输入cd /d d:\nmap

2、 运行nmap –n –P0 –sS –sV –p1-65535 –oX scan_report.xml 192.168.1.1

3、 使用浏览器打开scan_report.xml

4、 观察结果,看是否为必须开放的Web服务端口。

预期结果

系统未开放业务不需要使用的端口。

备注

各种参数扫描请参考《利用nmap进行端口扫描》

测试结果

2.2.3 HTTP方法测试
测试用例名称

开放HTTP方法测试

测试目的

有些Web服务器默认情况下开放了一些不必要的HTTP方法(如DELETE、PUT、TRACE、MOVE、COPY),这样就增加了受攻击面。

测试条件

1、 已知Web网站IP地址及Web访问端口

2、 Web业务正常运行

执行步骤

1、 点击“开始”-“运行”,输入cmd并回车,运行cmd.exe

2、 输入telnet IP 端口 (其中IP和端口按实际情况填写,用空格隔开)

3、 回车

4、 在新行中输入如下一行,并回车

OPTIONS / HTTP/1.1

5、 观察返回结果中的Allow的方法列表

返回结果样例:

HTTP/1.1 200 OK

Server: Apache-Coyote/1.1

X-Powered-By: Servlet 2.4; JBoss-4.0.5.GA (build: CVSTag=Branch_4_0 date=200610162339)/Tomcat-5.5

Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS

Content-Length: 0

Date: Mon, 29 Jun 2009 08:02:47 GMT

Connection: close

如果返回结果中包含不安全的HTTP方法(DELETE、PUT、TRACE、MOVE、COPY),则验证这些防范是否可用

6、 如果方法可用则说明存在漏洞,测试不通过。

预期结果

不包含不安全的HTTP方法(如DELETE、PUT、TRACE、MOVE、COPY)

备注

由于不同的Web服务器支持的HTTP协议版本不同,如果系统不支持HTTP/1.0,那么步骤4返回 “HTTP/1.0 400 Bad Request”;这种情况下,应该更改步骤4的输入行为OPTIONS / HTTP/1.0

测试结果

2.2.4 HTTP PUT方法测试
测试用例名称

HTTP PUT方法测试

测试目的

有些Web服务器开放了PUT方法,攻击者能够通过该方法上传任意文件到Web服务器的一些目录中去。包括Web木马程序。

测试条件

1、 已知Web网站IP地址

2、 Web业务正常运行

3、 测试用机安装了IISPUTScanner测试工具

执行步骤

1、 运行IISPUTScanner.exe

2、 在Start IP和End IP输入框中输入Web服务器的IP地址,在Port输入框中输入对应的端口,选中“Try to upload file”和“Try on other systems”,如图:

3、 点击Scan按钮

4、 观察扫描结果

预期结果

工具的“PUT”栏的值不为“YES”,Web服务器上没有新创建的alert.txt文件

备注

本测试适用于所有的Web服务器,不仅仅是IIS。

测试结果

2.2.5 HTTP DELETE方法测试
测试用例名称

HTTP DELETE方法测试

测试目的

有些Web服务器开放了DELETE方法,攻击者能够通过该方法删除Web服务器上的文件。

测试条件

1、 已知Web网站IP地址

2、 Web业务正常运行

3、 Web网站存在/alert.txt文件(如果没有,手工创建)

执行步骤

1、 点击“开始”-“运行”,输入cmd并回车,运行cmd.exe

2、 输入telnet IP 端口 (其中IP和端口按实际情况填写,用空格隔开,比如:telnet 192.168.4.86 80)

3、 回车

4、 在新行中输入如下一行,并回车

DELETE /alert.txt HTTP/1.0

5、 查看Web服务器上alert.txt是否被删除

预期结果

Web服务器上alert.txt文件依然存在

备注

由于不同的Web服务器支持的HTTP协议版本不同,如果系统不支持HTTP/1.0,那么步骤4返回 “HTTP/1.0 400 Bad Request”;这种情况下,应该更改步骤4的输入行为DELETE /index.jsp HTTP/1.0

测试结果

2.2.6 HTTP TRACE方法测试
测试用例名称

HTTP TRACE方法测试

测试目的

有些Web服务器开放了TRACE方法(主要是用于客户端通过向Web服务器提交TRACE请求来进行测试或获得诊断信息),攻击者能够通过该方法构造跨站攻击。

测试条件

1、 已知Web网站IP地址

2、 Web业务正常运行

执行步骤

1、 点击“开始”-“运行”,输入cmd并回车,运行cmd.exe

2、 输入telnet IP 端口 (其中IP和端口按实际情况填写,用空格隔开,比如:telnet 192.168.4.86 80)

3、 回车

4、 在新行中输入如下一行,并回车

TRACE / HTTP/1.0

5、 观察返回结果

预期结果

Web服务器的返回信息提示Trace方法“not allowed”

备注

由于不同的Web服务器支持的HTTP协议版本不同,如果系统不支持HTTP/1.0,那么步骤4返回 “HTTP/1.0 400 Bad Request”;这种情况下,应该更改步骤4的输入行为TRACE / HTTP/1.0

测试结果

2.2.7 HTTP MOVE方法测试
测试用例名称

HTTP MOVE方法测试

测试目的

有些Web服务器开放了MOVE方法,用于请求服务器将指定的页面移到另一个网络地址,该方法不安全,容易被利用。

测试条件

1、 已知Web网站IP地址

2、 Web业务正常运行

执行步骤

1、 点击“开始”-“运行”,输入cmd并回车,运行cmd.exe

2、 输入telnet IP 端口 (其中IP和端口按实际情况填写,用空格隔开,比如:telnet 192.168.4.86 80)

3、 回车

4、 在新行中输入如下一行,并回车

MOVE /test/a.html /a.html HTTP/1.0

5、 观察返回结果

预期结果

Web服务器的返回信息提示MOVE方法“not supported”

备注

由于不同的Web服务器支持的HTTP协议版本不同,如果系统不支持HTTP/1.0,那么步骤4返回 “HTTP/1.0 400 Bad Request”;这种情况下,应该更改步骤4的输入行为MOVE /test/a.html /a.html HTTP/1.1

测试结果

2.2.8 HTTP COPY方法测试
测试用例名称

HTTP COPY方法测试

测试目的

有些Web服务器开放了COPY方法,用于请求服务器将指定的页面拷贝到另一个网络地址,该方法不安全,容易被利用。

测试条件

1、 已知Web网站IP地址

2、 Web业务正常运行

执行步骤

1、 点击“开始”-“运行”,输入cmd并回车,运行cmd.exe

2、 输入telnet IP 端口 (其中IP和端口按实际情况填写,用空格隔开,比如:telnet 192.168.4.86 80)

3、 回车

4、 在新行中输入如下一行,并回车

COPY /test/a.html /a.html HTTP/1.0

5、 观察返回结果

预期结果

Web服务器的返回信息提示COPY方法“not supported”

备注

由于不同的Web服务器支持的HTTP协议版本不同,如果系统不支持HTTP/1.0,那么步骤4返回 “HTTP/1.0 400 Bad Request”;这种情况下,应该更改步骤4的输入行为COPY /test/a.html /a.html HTTP/1.1

测试结果

2.2.9 Web服务器版本信息收集
测试用例名称

Web服务器版本信息收集

测试目的

一些情况下,Web服务器能通过隐藏或者修改banner信息的方式防止黑客攻击。这时候我们需要使用不依靠服务器Server标题头的扫描方式进行服务器类型、版本判断。

测试条件

1、 Web业务运行正常

2、 已知Web服务器域名或IP地址

3、 测试用机安装了httprint(Windows环境)

执行步骤

1、 运行Httprint_gui.exe

2、 在Host列中输入主机域名(如果没有域名则输入IP地址),在端口列中输入端口号。如果为HTTPS则要选择锁图标下面的选择框。

3、 点击程序下方的运行按钮

4、 观察程序输出的结果

预期结果

不能够得到Web服务器准确的版本信息

测试结果

2.3 文件、目录测试
2.3.1 工具方式的敏感接口遍历
测试用例名称

工具方式的敏感接口遍历

测试目的

网站目录查找是进行攻击的必备知识,只有知道了目录信息才能确定攻击的目标,进行目录查找是测试的首要阶段,一般扫描工具进行扫描前首先要进行目录查找。其次对于某些隐藏的管理接口(目录或文件),虽然没有对外有明显的链接,但是通过一系列有特定含义的枚举是可以访问的。

测试条件

1、 Web业务运行正常

2、 已知目标网站的域名或IP地址

3、 测试用机上需安装JRE

4、 测试用机上有DirBuster软件

执行步骤

1、 双击运行DirBuster.jar

2、 在host栏中填入目标IP地址或域名,在Port栏中输入服务器对应的端口;如果服务器只接受HTTPS请求,则需要选择Protocol为HTTPS

3、 在file with list of dirs/files 栏后点击browse,选择破解的字典库为directory-list-2.3-small.txt

4、 将File extension中填入正确的文件后缀,默认为php,如果为jsp页面,需要填入jsp

5、 其他选项不变,点击右下角的start,启动目录查找

6、 观察返回结果,可点击右下角的report,生成目录报告

预期结果

经过分析以后的结果中,业务系统不存在不需要对外开放的敏感接口,或者该接口进行了完善的权限控制。

备注

举一个测试不通过的例子:

Type

Found

Response

File

/admin/adduser.jsp

200

测试结果

2.3.2 Robots方式的敏感接口查找
测试用例名称

Robots方式的敏感接口查找

测试目的

为了防止搜索引擎的爬虫访问敏感的目录接口,服务器上可能会编辑一个robots.txt文件,内容为需要保护的文件或目录名称。直接访问robots.txt文件能够获取一些可能的敏感接口

测试条件

1、 Web业务运行正常

2、 已知待测目标URL,假设为http://sso.kedou.com

执行步骤

1、 尝试访问http://sso.kedou.com/robots.txt
例如可能返回如下结果:
2、 观察返回结果

预期结果

通过robots.txt文件不能获取敏感的目录或文件信息。

备注

测试结果

2.3.3 Web服务器的控制台
测试用例名称

Web服务器的控制台

测试目的

检查是否部署了Web服务器的控制台,控制台是否存在默认帐号、口令,是否存在弱口令。

测试条件

1、 Web业务运行正常

2、 已知目标网站的域名或IP地址

3、 已知Web服务器版本信息

执行步骤

1、 根据Web服务器的版本信息,通过google查询其对应的控制台URL地址和默认的帐号、口令。以下列出一些常见的Web服务器控制台URL地址和默认帐号、口令:

Tomcat控制台URL:http://sso.kedou.com/manager/html

Tomcat控制台默认帐号admin,默认密码admin或空

2、 在浏览器地址栏中输入Web服务器对应的URL。由于不同的应用可能目录有所差异,如果访问不到,可以登陆后台服务器以find命令查找,比如find / -name “console”,find / -name “admin”,看看实际的URL应该是什么,再次尝试。

3、 检查是否存在Web服务器控制台

4、 如果存在控制台,使用默认帐号、口令登录,弱口令登录,查看是否登录成功,如果可以则存在漏洞。

预期结果

不存在Web服务器控制台,或者存在控制台但有强口令。

测试结果

2.3.4 目录列表测试
测试用例名称

目录列表测试

测试目的

目录列表能够造成信息泄漏,而且对于攻击者而言是非常容易进行的。所以在测试过程中,我们应当找出所有的目录列表漏洞。

测试条件

1、 Web业务运行正常

2、 已知目标网站的域名或IP地址

3、 测试用机上需安装JRE

4、 测试用机上有DirBuster软件

执行步骤

1、 双击运行DirBuster-0.9.8.jar

2、 在host栏中填入目标IP地址或域名,在Port栏中输入服务器对应的端口;如果服务器只接受HTTPS请求,则需要选择Protocol为HTTPS

3、 在file with list of dirs/files 栏后点击browse,选择破解的字典库为directory-list-2.3-small.txt:

4、 去除Burte Force Files选项

5、 其他选项不变,点击右下角的start,启动目录查找

6、 依次右击Response值为200的行,在出现的菜单中点击Open In Browser

7、 分析结果

预期结果

所有对目录的访问均不能打印出文件列表。

测试结果

2.4 认证测试
在以下的一些测试中,围绕能否满足暴力破解进行的设计,未设计直接进行暴力破解的攻击用例。如果需要,测试人员可以使用hydra和AppScan中集成的Authentication Tester工具进行。

2.4.1 验证码测试
测试用例名称

验证码测试

测试目的

查看是否有验证码机制,以及验证码机制是否完善

测试条件

1、 已知Web网站地址

2、 Web业务运行正常

3、 存在登陆页面

执行步骤

1、 登陆页面是否存在验证码,不存在说明存在漏洞,完成测试

2、 验证码和用户名、密码是否一次性、同时提交给服务器验证,如果是分开提交、分开验证,则存在漏洞

3、 在服务器端,是否只有在验证码检验通过后才进行用户名和密码的检验,如果不是说明存在漏洞。(检测方法:输入错误的用户名或密码、错误的验证码。观察返回信息,是否只提示验证码错误,也就是说当验证码错误时,禁止再判断用户名和密码。)

4、 验证码是否为图片形式且在一张图片中,不为图片形式或不在一张图片中,说明存在漏洞,完成测试

5、 生成的验证码是否可以通过html源代码查看到,如果可以说明存在漏洞,完成测试

6、 生成验证码的模块是否根据提供的参数生成验证码,如果是说明存在漏洞,完成测试

7、 请求10次观察验证码是否随机生成,如果存在一定的规律(例如5次后出现同一验证码)说明存在漏洞,完成测试

8、 观察验证码图片中背景是否存在无规律的点或线条,如果背景为纯色(例如只有白色)说明存在漏洞,完成测试

9、 验证码在认证一次后是否立即失效:

¨ 请求登陆页面,得到生成的验证码

¨ 开启WebScarab,配置对GET和POST请求进行拦截;并在浏览器中配置代理服务器IP为127.0.0.1,端口为8008

¨ 填入错误的用户名和口令,填入正确的验证码,提交表单

¨ 从WebScarab拦截数据中复制对应登陆请求的POST或GET消息(文本格式),将其中的口令更改一个字符

¨ 在命令行中输入telnet <服务器域名或IP> <端口>,回车

¨ 将修改的内容粘贴到命令行窗口中,回车

¨ 判断返回的页面中是否包含“验证码错误”(或类似)的提示,如果没有,说明存在漏洞,完成测试

预期结果

不存在上述漏洞

备注

本用例根据最严格的方式对目标进行测试,如果产品线对安全的要求不高且有自身的安全策略规定时,可以视情况对测试项进行部分测试

测试结果

2.4.2 认证错误提示
测试用例名称

认证错误提示

测试目的

为了进行暴力破解,攻击者需要知道已存在的用户名,再对该用户名进行攻击。所以,本测试用于确认目标服务器在处理登陆操作时会提示出具体的信息。

测试条件

1、 已知Web网站地址

2、 Web业务运行正常

3、 存在登陆页面

执行步骤

1、 在用户名(或其他身份标志)的输入框中输入noexists,口令任意

2、 若服务器返回提示类似于“用户名不存在”,则说明存在漏洞,完成测试

3、 使用正确的用户名(或同功能的身份标志),在口令框中输入noexists

4、 若服务器提示类似于“密码/口令错误” “用户名不存在”之类的信息,则说明存在漏洞,完成测试。

预期结果

服务器不会针对认证错误的情况提示准确的信息。

备注

测试结果

2.4.3 锁定策略测试
测试用例名称

锁定策略测试

测试目的

在缺少锁定策略和验证码设计有问题的情况下,攻击者可以通过枚举的方式来进行暴力猜解。本测试用于发现目标系统是否缺少锁定策略。

测试条件

1、 已知Web网站地址

2、 Web业务运行正常

3、 存在登陆页面

执行步骤

1、 打开登陆页面

2、 在用户名(或同功能的身份标志)输入框中输入正确的用户名

3、 在口令(或同功能的口令标志)输入框中输入错误的口令

4、 在验证码输入框(如果有的话)中输入正确的验证码

5、 提交表单

6、 重复1~5步骤10次

7、 判断目标系统返回的信息

预期结果

目标系统提示“帐号已锁定”或者“IP已锁定”或者类似“锁定”等之类的信息。

备注

第6步中重复步骤次数视各产品实际情况而定。

另外,如果系统存在一些认证接口(带认证参数的URL,不是普通登陆页面),那么也需要对认证接口进行失败认证尝试,以测试其锁定策略。

测试结果

2.4.4 认证绕过测试
测试用例名称

认证绕过测试

测试目的

发现目标认证系统是否存在绕过的可能

测试条件

1、 已知Web网站地址

2、 Web业务运行正常

3、 存在登陆页面

执行步骤

1、 打开登陆页面

2、 在用户名(或同功能的身份标志)输入框中输入admin’ or ‘1’=’1

3、 在口令(或同功能的口令标志)输入框中输入admin’ or ‘1’=’1

4、 提交表单,观察返回结果

预期结果

不能够成功登陆。

备注

如果目标系统采用javascript限制了输入格式,可以通过WebScarab来进行修改。关于WebScarab的使用说明,请参看相关帮助文档。

测试结果

2.5 会话管理测试
2.5.1 身份信息维护方式测试
测试用例名称

身份信息维护方式测试

测试目的

发现目标系统是否采用参数来进行身份判断。

测试条件

1、 已知Web网站地址

2、 Web业务正常运行

3、 Web业务存在不同级别的权限(角色)

执行步骤

1、 登录系统

2、 配置WebScarab进行http get和post请求拦截

3、 请求Web页面

4、 在WebScarab中查看请求报文

5、 检查请求消息中是否携带了与用户身份相关的数据。如果有,修改身份信息。如果服务器端以修改后的身份进行操作,则说明存在漏洞,完成测试。

预期结果

用户登陆后,身份信息不再由客户端提交,而是以服务器端会话信息中保存的身份信息为准。

备注

测试结果

2.5.2 Cookie存储方式测试
测试用例名称

Cookie存储方式测试

测试目的

某些Web应用将SesssionId放到了URL中进行传输,攻击者能够诱使被攻击者访问特定的资源,例如图片。在被攻击者查看资源时获取该SessionID(在HTTP协议中Referer标题头中携带了来源地址),从而导致身份盗用。

测试条件

1、 已知Web网站地址

2、 Web业务运行正常

3、 Web业务存在登陆认证模块

4、 已知正确的用户名、口令

执行步骤

1、 登录系统。

2、 请求不同的业务应用

3、 观察URL。

预期结果

URL中没有携带Session ID信息(可能是sid,JSESSIONID等形式)。

测试结果

2.5.3 用户注销登陆的方式测试
测试用例名称

用户注销登陆的方式测试

测试目的

查看是否提供注销登陆功能

测试条件

1、 已知Web网站地址

2、 Web业务运行正常

3、 Web业务存在登陆认证模块

4、 已知正确的用户名、口令

执行步骤

1、 使用正常的用户、口令登录系统。

2、 查找登陆后的所有页面中是否存在明确的“退出”或“注销”(或类似)的按钮或者链接

预期结果

登陆后的页面中有明确的“退出”或“注销”按钮。

备注

测试结果

2.5.4 注销时会话信息是否清除测试
测试用例名称

注销时(logout),会话信息是否清除

测试目的

由于网站程序在编写上考虑不周,用户注销后会话信息没有清除,导致用户在点击注销按钮之后还能继续访问注销之前(也就是登陆之后)才能访问的页面。我们需要经过测试来判断是否存在此类问题。

测试条件

1、 已知Web网站地址

2、 Web业务正常运行

3、 存在注销功能的页面

执行步骤

1、 使用合法的账户口令登陆。

2、 开启WebScarab,配置对GET和POST请求进行拦截

3、 在浏览器中配置代理服务器IP为127.0.0.1,端口为8008

4、 在Web页面中进行一些操作(比如修改个人信息),这些操作都会被WebScarab拦截,不修改,在弹出的WebScarab界面中点击“Accept Changes”按钮。这样请求就被WebScarab记录下来。

5、 然后在Web页面中点击注销/退出(logout)。

6、 点击WebScarab的“Manual Request”TAB页,在Previous Requests的下拉列表框中选择“步骤4”所产生的URL请求,然后点击“Fetch Response”,重新发送“步骤4”的URL请求。

7、 在WebScarab的Response的“Raw”Tab页中观察返回结果,如果还能够正常完成“步骤4”的操作,则存在安全漏洞。

预期结果

在WebScarab的Response的“Raw”Tab页中显示“HTTP/1.1 302 Moved Temporarily”,不能够访问只有登陆才能访问的页面,不能完成只有登陆后才能完成的操作。

备注

如果存在多个注销功能的页面,要重复测试过程把所有有注销功能的页面测试完。

测试结果

2.5.5 会话超时时间测试
测试用例名称

会话超时时间测试

测试目的

查看是否存在浏览器窗口闲置超时后需重新登录的机制

测试条件

1、 已知Web网站地址

2、 Web业务运行正常

3、 Web业务存在登陆认证模块

4、 已知正确的用户名、口令

执行步骤

1、 使用正常的用户、口令登录系统。

2、 将浏览器窗口闲置11分钟。

3、 刷新浏览器,查看是否需要重新登录。

备注:也可以登陆后台Web服务器,查看对应的web.xml文件中的session-timeout参数值,该值表示会话的超时时间。

预期结果

会话超时时间不大于10分钟,刷新浏览器之后需要重新登录。

备注

测试结果

2.5.6 会话定置测试
测试用例名称

会话定置(session fixation)测试

测试目的

查看登录成功后会话标识是否变更。如果未变更,那么攻击者就可以通过一些手段(如构造URL)为受害着确定一个会话标识,当受害者登录成功后,攻击者也可以利用这个会话标识冒充受害者访问系统。

测试条件

1、 已知Web网站地址

2、 Web业务运行正常

3、 Web业务存在登陆认证模块

4、 已知正确的用户名、口令

执行步骤

1、 访问登录页面

2、 开启WebScarab,配置对GET和POST请求进行拦截;并在浏览器中配置代理服务器IP为127.0.0.1,端口为8008

3、 填入正确的用户名和口令,填入正确的验证码,登录

4、 WebScarab跳出拦截界面,点击“RAW”TAB页,查看会话标识(例如JSP的会话标识为JSESSIONID)的值。

5、 点击“Accept Changes”,登录成功。

6、 成功登录后,点击系统提供的链接,请求任意功能页面。

7、 WebScarab再次跳出拦截界面,点击“RAW”TAB页,查看(例如JSP的会话标识为JSESSIONID)的值。

8、 如果步骤4和步骤7查看到的会话标识的值一样,说明登录前后会话标识没有变更,存在会话定置的安全漏洞。

预期结果

步骤4和步骤7(登录前后)查看到的会话标识的值不一样

备注

虽然会话定置的危害比较大,但由于要事先为受害者确定会话标识,并且让受害者根据此会话标识登录系统,其发生的概率很小,所以综合风险不高,测试时根据被测系统安全要求的高低,来确定是否执行该用例。

测试结果

2.6 文件上传下载测试
2.6.1 文件上传测试
测试用例名称

文件上传测试

测试目的

很多网站提供文件上传功能(包括图片上传),如果在服务器端没有对上传文件的类型、大小以及保存的路径及文件名进行严格限制,攻击者就很容易上传后门程序取得WebShell,从而控制服务器。

测试条件

1、 Web业务运行正常

2、 待测网站存在文件上传页面

执行步骤

1、 登陆网站,并打开文件上传页面

2、 点击“浏览”按钮,并选择本地的一个JSP文件(比如hacker.jsp),确认上传。

3、 如果客户端脚本限制了上传文件的类型(比如允许gif文件),则把hacker.jsp更名为hacker.gif;配置HTTP Proxy(WebScarab)进行http请求拦截;重新点击“浏览”按钮,并选择hacker.gift,确认上传。

4、 在WebScarab拦截的HTTP请求数据中,将hacker.gif修改为hacker.jsp,再发送请求数据。

5、 登陆后台服务器,用命令find / -name hacker.jsp查看hacker.jsp文件存放的路径。如果可以直接以Web方式访问,则构造访问的URL,并通过浏览器访问hacker.jsp,如果可以正常访问,则已经取得WebShell,测试结束。如果hacker.jsp无法通过web方式访问,例如hacker.jsp存放在/home/tmp/目录下,而/home/tomcat/webapps目录对应http://www.example.com/,则进行下一步

6、 重复1~3,在WebScarab拦截的HTTP请求数据中,将hacker.gif修改为…/tomcat/webapps/hacker.jsp,再发送请求数据。

7、 在浏览器地址栏输入http://www.example.com/hacker.jsp,访问该后门程序,取得WebShell,结束测试。

预期结果

服务器端对上传文件的类型、大小以及保存的路径及文件名进行严格限制,无法上传后门程序。

备注

测试结果

2.6.2 文件下载测试
测试用例名称

文件下载测试1

测试目的

很多网站提供文件下载功能,如果网站对下载文件的权限控制不严,攻击者很容易利用目录跨越、越权下载到本不该下载的文件(比如其他用户的私有、敏感文件)。

测试条件

1、 Web业务运行正常

2、 已知某下载页面URL(假设用户a下载自己的工资清单文件http://sso.kedou.com/download/usera/salary.xls)

执行步骤

1、 猜测并更改URL路径

http://sso.kedou.com/download/userb/salary.xls

http://sso.kedou.com/download/userc/salary.xls

http://sso.kedou.com/admin/report.xls

……

2、 观察页面返回信息,如果可以越权获取到其他用户的私有、敏感文件,则说明存在漏洞。

预期结果

不能越权获取到不该获取的文件

备注

参考资料

测试用例名称

文件下载测试2

测试目的

很多网站可能接受类似于文件名的参数用于下载或者显示内容。如果未进行严格判断的话,攻击者可以通过修改这个参数值来下载、读取任意文件内容。比如、/etc/password,甚至是数据库连接配置文件以及源代码等等。

测试条件

1、 Web业务运行正常

2、 已知某页面URL(假设为http://sso.kedou.com/viewfile.do?filename=report.xls)

执行步骤

1、 更改参数的值为其他路径和文件

2、 在浏览器地址栏中尝试以下URL

http://sso.kedou.com/viewfile.do?filename=…/etc/passwd

http://sso.kedou.com/viewfile.do?filename=…/…/etc/passwd

http://sso.kedou.com/viewfile.do?filename=…/…/…/etc/passwd

http://sso.kedou.com/viewfile.do?filename=…/…/…/…/etc/passwd

http://sso.kedou.com/viewfile.do?filename=…/…/…/…/…/etc/passwd

……

对于UNIX/Linux服务器可以尝试下载/etc/passwd;对于Windows服务器可以尝试下载c:\boot.ini文件

3、 观察页面返回信息,如果可以获取到passwd或boot.ini文件,则说明存在漏洞。

预期结果

不能获取到passwd或boot.ini或JSP源代码等文件。

备注

参考资料

2.7 信息泄漏测试
泄露出的敏感信息包括但不限于:数据库连接地址、帐号和口令等信息、服务器系统信息、Web服务器软件名称、版本、Web网站路径、除html之外的源代码、业务敏感数据等。

2.7.1 连接数据库的帐号密码加密测试
编号

SEC_Web_LEAKAGE_01

测试用例名称

连接数据库的帐号密码加密测试

测试目的

连接数据库的帐号密码在配置文件中如果明文存储,容易被恶意维护人员获取,从而直接登陆后台数据库进行数据篡改。

用例级别

1

测试条件

1、拥有Web服务器操作系统的帐号和口令

2、已知连接数据库的帐号密码所在的配置文件,可以找环境搭建人员咨询。(还可以用grep命令查找哪些xml文件包含该数据库帐号,然后打开这些文件进行检查)

执行步骤

1、 登陆Web服务器的操作系统。

2、 用find命令找到对应的配置文件。

3、 查看配置文件中连接数据库的帐号密码在配置文件中是否加密。

预期结果

连接数据库的帐号密码在配置文件中加密存储

备注

测试结果

2.7.2 客户端源代码敏感信息测试
编号

SEC_Web_LEAKAGE_02

测试用例名称

客户端源代码敏感信息测试

测试目的

Web页面的html源代码中不允许包含口令等敏感信息,特别关注修改口令、带有星号口令的Web页面。

用例级别

1

测试条件

1、已知Web网站地址

2、Web业务正常运行

3、待测页面能够正常访问

执行步骤

1、 登陆Web服务器。

2、 选择可能存在敏感信息的页面(比如修改口令、带有星号口令的页面)。

3、 在页面上单击鼠标右键,选择“查看源代码”。

4、 查看页面的源代码包含口令等敏感信息。

预期结果

在页面的源代码中看不到明文的口令等敏感信息

备注

测试结果

2.7.3 客户端源代码注释测试
测试用例名称

客户端源代码注释测试

测试目的

开发版本的Web程序所带有的注释在发布版本中没有被去掉,而导致一些敏感信息的泄漏。我们要查看客户端能看到的页面源代码并发现此类安全隐患。

测试条件

1、已知Web网站地址

2、Web业务正常运行

3、待测页面能够正常访问

执行步骤

1、 从客户端查看网页源代码。

2、 找到注释部分并查看是否有敏感信息。

预期结果

源代码里不存在敏感信息(比如:内网IP地址、SQL语句、密码、物理路径等)。

备注

测试结果

2.7.4 异常处理
在这个部分我们通过构造各种异常的条件让Web程序处理,通过其返回信息来判断是否存在信息泄漏的问题。

¨ 不存在的URL

测试用例名称

不存在的URL

测试目的

Web网站在处理用户提交的不存在的URL时会返回错误信息,我们通过返回的错误信息来确认是否会有敏感信息的泄漏问题。

测试条件

1、已知Web网站地址,假设为:http://sso.kedou.com 或 IP:http://aa.bb.cc.dd

2、Web业务运行正常

执行步骤

1、 我们请求不存在的文件,比如:

http://sso.kedou.com/unexist.jsp 或者 http://aa.bb.cc.dd/unexist.jsp

2、 观察返回结果

预期结果

返回的页面中没有敏感信息。

备注

在各个目录和功能模块重复此操作

测试结果

¨ 非法字符

测试用例名称

非法字符导致信息泄漏

测试目的

Web应用在处理用户提交的含有特殊字符的URL时,可能会返回错误的信息,通过错误信息来判断是否存在敏感信息的泄漏问题。

测试条件

1、 已知Web网站地址

2、 Web业务正常运行

3、 如果是IE浏览器,在Internet选项->高级里把“显示友好HTTP信息”去掉选择状态

4、 已知待测目标URL,假设为http://sso.kedou.com/page.xxx

待测目标存在参数输入,假设为name=value,即:

http://sso.kedou.com/page.xxx?name= value

执行步骤

1、 在正常的URL的参数中添加特殊字符: % * ; ’ ?

添加特殊字符后的URL为:

http://sso.kedou.com/page.xxx?name= value%

http://sso.kedou.com/page.xxx?name= value*

http://sso.kedou.com/page.xxx?name= value;

http://sso.kedou.com/page.xxx?name= value?

http://sso.kedou.com/page.xxx?name= value’

2、 在浏览器地址栏中依次输入这些带有特殊字符的URL并回车

3、 观察返回结果

预期结果

返回的页面中没有敏感信息(比如:详细的类名、方法,SQL语句,物理路径等)。

备注

页面可能接受多个参数,需对每个参数都进行测试

POST情况下的参数也需要测试

测试结果

2.7.5 Web服务器状态信息测试
测试用例名称

Web服务器状态信息测试

测试目的

Web服务器默认会提供服务器状态信息查询功能,该功能容易泄漏系统信息,从而被攻击者利用。

测试条件

1、已知Web网站地址

2、Web业务正常运行

执行步骤

1、 访问http://sso.kedou.com/status?full=true。

2、 观察返回结果,是否包含服务器的敏感信息。

预期结果

查询不到Web服务器的状态信息

备注

适用于Tomcat

测试结果

2.7.6 不安全的存储
本测试无法给出很具体的测试指导,在测试中可以根据下列方法进行测试:

¨ 上传文件所在的目录(或者是临时目录)能否直接远程访问。

¨ 服务器配置文件目录或日志存放目录能否直接访问。

¨ 日志或数据库中是否能够看到明文敏感信息:Web应用一般都会对一些业务操作进行记录日志操作。在日志文件中很可能包含了一些敏感信息(例如用户在更改口令后日志文件中会记录该用户原始口令以及更改后的口令信息)。假如Web应用的日志存放的目录被攻击者发现(符合上一条测试项),那么攻击者就可以从中获取大量的敏感数据用户后续的攻击。因此,本测试需要对日志文件中的数据进行调查,检查其中是否带有敏感数据或者敏感数据进行了加密处理。同样对于数据库也述要进行审查。

¨ 公用文件头(如数据库连接信息、源代码头文件等)是否采用不被服务器处理的后缀(如inc,它将作为文本格式直接输出)进行存储。

2.8 输入数据测试
很多Web应用开发人员图简便,只是在客户端通过script对用户输入的数据进行合法性校验,在服务器端没有对输入数据的合法性进行再次校验。客户端的输入检验,根本起不到安全作用,可以通过HTTP代理轻易绕过。方法如下:

1、 开启WebScarab,配置对GET和POST请求进行拦截;

2、 在浏览器中配置代理服务器IP为127.0.0.1,端口为8008;

3、 在Web页面中输入合法数据,并提交;

4、 此时WebScarab会弹出HTTP请求拦截窗口,修改对应的输入参数值为不合法数据(根据测试需要,构造输入数据);

5、 点击“Accept Changes”按钮,提交数据。这样就绕过了客户端的输入校验,向服务端提交不合法的输入数据。

2.8.1 SQL注入测试
测试用例名称

手工SQL注入测试

测试目的

由于SQL注入有可能造成信息泄漏,在严重情况下(根据使用的数据库而定)甚至可能造成数据修改、删除,从而导致业务中断。因此必须发现所有存在的注入点。

测试条件

1、 Web业务运行正常

2、 已知待测目标URL

3、 待测目标存在参数输入,假设为name=value

执行步骤

1、 观察参数的值value是否为数字型。如果是数字型进行数字型测试,否则跳到第4步进行字符型测试(例如如果出现a那说明是字符型,如果出现2则将其当做数字型测试)

2、 将被测参数后加上测试语句“and 1=1”, 如果返回正确页面则进行下一步操作,否则跳到第4步。

3、 将被测参数后加上测试语句“and 1=2”(这里以第n个参数为例),其他参数保持不变,如果返回正确页面则进行下一步操作,否则该参数存在注入漏洞,完成测试

4、 将被测参数后加上测试语句“’ and ‘1’=’1”, 如果返回正确页面则进行下一步操作,否则该参数存在注入漏洞,完成测试

5、 将被测参数后加上测试语句“’ and ‘1’=’2”, 如果返回正确页面则不存在漏洞,否则该参数存在注入漏洞,完成测试

预期结果

不存在注入点

备注

1、 页面可能接受多个参数,需对每个参数都进行测试

2、 如果客户端script对输入数据进行合法行校验,阻止非法数据,可以通过3.9介绍的方法(通过WebScarab拦截并修改参数值),绕过客户端数据校验。

3、 POST、AJAX以及隐藏域提交参数也需要测试(方法是通过WebScarab拦截HTTP请求,找到提交的参数并参照上面的方法修改参数值)

4、 本测试包含了现有最常见的两种测试方法

测试结果

测试用例名称

自动化工具SQL注入测试

测试目的

由于SQL注入有可能造成信息泄漏,在严重情况下(根据使用的数据库而定)甚至可能造成数据修改、删除,从而导致业务中断。因此必须发现所有存在的注入点。

测试条件

1、 Web业务运行正常

2、 已知待测目标URL,假设为http://sso.kedou.com/page.xxx

3、 待测目标存在参数输入,假设为name=value

4、 测试用机安装了pangolin测试工具

执行步骤

1、 运行pangolin

2、 在URL输入框中输入http://sso.kedou.com/page.xxx?name=value

3、 点击Check按钮执行扫描操作

4、 观察结果

预期结果

Pangolin工具不能得到目标服务器的注入类型和数据库类型。

备注

页面可能接受多个参数,需对每个参数都进行测试

测试结果

2.8.2 MML语法注入
MML语法注入是我司特有的一种漏洞。MML语句通过分号(;)可以执行多语句。如果在缺少对输入参数进行严格控制的情况下,攻击者能够执行任意的MML语句。

由于结果判断的过程中无法给出准确的判断准则,所以这里也就没有办法给出详细的具体步骤,这里给出一下基本步骤:

1、 找出提交给MML处理的参数

2、 在参数后面加入分号(;)提交请求

3、 观察返回结果

如果结果返回正常可能就存在该漏洞。这里有一种情况:如果参数并未作为MML语句执行中的一个参数值,那么返回的结果也可能是正确的,这时候就需要测试人员自己进行判断了。

2.8.3 命令执行测试
测试用例名称

命令执行测试

测试目的

某些页面可能接受类似于文件名的参数用于下载或者显示内容。

测试条件

1、 Web业务运行正常

2、 已知某页面URL接收参数,且参数中接收类似于系统命令的字符(假设为cmd=ls)

执行步骤

1、 更改参数的值为其他命令,可以尝试以下一些字符串:
net user
ipconfig
cat /etc/passwd

2、 观察页面返回信息。

预期结果

页面的源代码中不包含类似于系统命令的返回信息。

备注

参考资料

2.9 跨站脚本攻击测试
2.9.1 GET方式跨站脚本测试
测试用例名称

GET方式跨站脚本测试

测试目的

由于跨站脚本会导致会话被劫持、敏感信息泄漏、账户被盗,严重时甚至造成数据修改、删除,从而导致业务中断,因此需检测跨站脚本是否存在

测试条件

1、 Web业务运行正常

2、 已知待测目标URL

3、 待测目标存在参数输入,假设为name=value

4、 在某种情况下,用户输入被重新显示在网页上,包括名字、帐号、检索结果等等(说明目标网站服务器并没有对用户提交数据检测)

执行步骤

1、 在输入的参数后逐条添加以下语句,以第一条为例,输入http://sso.kedou.com/page.xxx?name=只要其中一条弹出显示123456的告警框,就说明存在跨站漏洞,记录漏洞,停止测试。

2、 如果没有弹出显示123456的告警框,则在返回的页面上单击鼠标右键,选择“查看源文件”

3、 查找网页源文件中是否包含完整的字符串,则不管有没有弹出显示123456的告警框,都表明存在跨站脚本漏洞。

4、 由于有些HTML元素(比如或”)会影响脚本的执行,所以不一定能够正确弹出123456告警框,需要根据返回网页源文件的内容,构造value的值,比如

多行文本输入框:

文本输入框:

'>

预期结果

不存在跨站脚本漏洞

备注

需要对页面上所有可以提交参数的地方进行测试。具体跨站脚本的测试语句根据实际情况的不同而不同,这里列出了一些最常见构造语句。

AppScan可以找出扫描到的页面的绝大部分跨站脚本漏洞,但对没有扫描到的网页就无能为力了。

测试结果

2.9.2 POST方式跨站脚本测试
测试用例名称

POST方式跨站脚本测试

测试目的

由于跨站脚本会导致会话被劫持、敏感信息泄漏、账户被盗,严重时甚至造成数据修改、删除,从而导致业务中断,因此需检测跨站脚本是否存在

测试条件

1、 Web业务运行正常

2、 已知待测目标URL,假设为http://sso.kedou.com/page.xxx

3、 待测目标以POST方式提交参数,显示为表单方式

4、 在某种情况下,用户输入被重新显示在网页上,包括名字、帐号、检索结果等等(说明目标网站服务器并没有对用户提交数据检测)

执行步骤

1、 在POST表单中逐条输入以下语句,只要其中一条弹出显示123456的对话框,就说明存在跨站漏洞,记录漏洞,停止测试。

[img]javascript:alert(123456);[/img]

2、 如果没有弹出显示123456的告警框,则在返回的页面上单击鼠标右键,选择“查看源文件”

3、 查找网页源文件中是否包含完整的字符串,则不管有没有弹出显示123456的告警框,都表明存在跨站脚本漏洞。

4、 由于有些HTML元素(比如或”)会影响脚本的执行,所以不一定能够正确弹出123456告警框,需要根据返回网页源文件的内容,构造value的值,比如

'>

预期结果

不会弹出显示123456的对话框。

备注

需要对页面上所有可以提交参数的地方进行测试。

测试结果

3 AppScan测试覆盖项说明
自动化测试工具AppScan满足如下测试项:

n 参数操作

¨ 跨站脚本

¨ SQL注入

¨ 代码执行

¨ 文件包含

¨ 脚本源代码检查

¨ CRLF注入

¨ Cross Frame Scripting (XFS)

¨ PHP代码注入

¨ XPath注入

¨ 全路径泄漏

¨ LDAP注入

¨ Cookie 操作

n 文件检查

¨ 检查备份的文件及目录

¨ URI中的跨站脚本

¨ 检查脚本错误

n 目录检查

¨ 查找常见的文件

¨ 发现敏感的文件和目录

¨ 发现存在弱权限控制的目录

¨ 路径和SESSIONID中的跨站脚本

n 文本搜索

¨ 目录列表

¨ 源代码泄漏

¨ 注释信息搜索

¨ 常见文件检查

¨ Email地址收集

¨ 本地路径泄漏

¨ 错误信息

n Google Hacking

4 附件
4.1 方案所涉及的测试工具
安全工具的申请和使用请遵循公司信息安全相关规定。

工具名称

简介

AppScan

IBM Rational AppScan,在Web安全测试中所使用的自动化扫描工具

Httprint

Web服务器类型和版本的探测工具

WebScarab

Web Proxy软件,可以对浏览器与Web服务器之间的通信数据进行编辑修改

DirBuster

在Web安全测试中用来遍历目录、文件的工具

Pangolin

SQL注入测试工具

WireShark

网络协议抓包与分析工具
————————————————
版权声明:本文为CSDN博主「步飞」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/aojie80/article/details/43836521

猜你喜欢

转载自blog.csdn.net/qq_44028724/article/details/119012068