web基础漏洞-反射型和存储xss测试

1、异同

反射型基于单次请求-响应过程,payload在请求中提交,然后直接在响应中包含。测试过程中,分析payload在唯一响应体部中的表现。

存储型基于两次请求-响应过程,payload在初次请求中提交,然后在第二次请求的响应中包含。测试过程中,分析的是payload在第二次响应体部中的表现。

2、测试过程

2.1 样本请求

2.2 索引检查

2.3 存储型xss判断与处理

2.4 响应头部字段分析

(1)x-xss-protection

(2)csp

2.5 逐参数测试

  • 参数是否包含
  • 敏感字符包含
  • 脚本payload包含

3、是否包含测试

该步骤测试,是为了均衡效率与请求需求。如果不满足参数包含返回,那么就可以直接判断该参数不存在xss漏洞。反之,则继续测试。

  • 如果参数值是常见的、短小的字符串,那么在响应体部包含并不足以说明满足xss的参数包含返回条件,比如html、<、1等参数值是不建议使用的。
  • 如果参数值是路径参数,自定义构造极有可能导致404或跳转其它页面。类似的,如果参数值在服务端导致程序异常或者检查错误,那么也可能导致输出异常信息或跳转其它页面。
  • 如果参数值被服务端拆分进行使用,典型的是分词匹配搜索技术,那么响应包含参数个数会失真。如果查询结果包含参数值,响应包含参数个数也会失真。建议搜索为空结果集。
  • 一方面,参数值即使经过一定的选择构造,在响应体部中仍然可能存在非参数包含。另一方面,参数值在请求的其它参数中可能作为子串,由此影响该参数在响应体部中的包含个数。

综合来看,选择一个参数值替代样本参数是有必要的,尽量避免常见字符组合和敏感字符,以及适当的长度,比如t404t。分析时,直接参考其在当前响应体部的个数即可。

这样的测试并不完美,但是相对均衡。

4、敏感字符包含测试

5、特殊性测试

(1)控制浏览器,请求中写入payload,发起请求

(2)payload响应然后解析,其预期作用是向自搭建的某服务器发起请求

(3)自搭建服务器接收请求之后存储相关数据,并且供请求

(4)分析服务器被请求的数据,是否存在xss,以及对应的paylaod

该测试除了技术方面比较麻烦,从适应的需求来说,要么极简,只测试具有代表性的payload。要么极繁,测试几乎所有的payload。

posted @ 2023-10-24 14:36  挖洞404  阅读(40)  评论(0编辑  收藏  举报