web基础漏洞-xss手工测试与自动测试
手工测试,一般是指结合浏览器和burp的重放进行。
1、反射型xss手工测试
1.1 测试是否返回
如果测试参数在响应的体部中并未返回,那么基本可以判断不存在反射型xss。
问题1:测试参数在响应中固有
- 如果测试参数除了包含返回之外,还存在固有。这样的话,直接根据测试参数是否在响应体部中包含就没有意义。
- 解决办法是:样本请求一次,然后设置测试参数为适当值,再进行测试。比较后者参数值在两次请求的响应体部中的个数,如果在后者中的个数大于前者,说明存在返回。
问题2:跳转其它页面
- 由于测试参数包含敏感字符或者关键字,服务端转向到其它页面。
- 解决办法:会有一定影响,但一般不用过于担心,异常页面只要包含测试参数,那么也可以存在xss
1.2 测试敏感字符
xss的利用大多数情况下都需要基于敏感字符,而对敏感字符进行编码是xss的主要防护方式之一。
所以在构造更正式的脚本payload之前,一般会简单的对常见的几个敏感字符进行测试。'"<>/
1.3 测试关键词和其它
除了敏感字符过滤,服务端还可能过滤常见的html/js关键词,比如alert,window,eval等。
以及对参数字符长度的检查、设置响应头部等。
1.4 测试脚本payload
2、存储型xss手工测试
其测试过程和反射型xss手工测试基本一致,区别在于基于一个请求携带payload发送后,需要基于另一个请求以获取payload进行分析。
3、dom型xss手工测试
相对反射型和存储型的嵌入式解析,dom型的场景更加复杂,并没有太好的测试方法。
一般是在响应中搜索js关键词,比如document.write(,eval(。另一方面是聚焦攻击者可控制的参数,梳理数据流向。
4、反射型xss和存储型xss自动测试
由于这两个类型高度一致,所以合并进行测试
(1)样本请求及标记判断
- 如果请求的url未设置,或者未设任何标记,结束
(2)逐一参数进行测试
(3)测试是否返回
(4)测试敏感字符
为了减轻请求压力,可以先统一测试,如果出现全部被拒的情况,再询问逐一测试
(5)测试常见的关键词
该流程并不常见
(6)测试脚本payload
5、dom型xss自动测试
目前来说,很难写出自动化测试dom型xss的代码。
- 样本请求,将响应体部导出为文件
- 指定文件,批量搜索关键词的个数
- 日志分析,手动查看和搜索报文内容