web基础漏洞-xss非html响应处理
1、介绍
对于反射型和存储型xss来说,一般要求响应类型为text/html,然后进一步测试敏感字符和构造payload。
测试过程中,逐个日志进行查看。如果响应类型是application/javascript等其它非text/html的文本类型,直接构造payload的话浏览器并不会将其作为html解析。
但是,如果直接复制url在浏览器中访问,或者基于form表单提交,查看burp其响应类型变为text/html的话,那么就满足基本条件,可以进一步测试xss。
2、示例
(1)文档中间过程加载jsonp,访问过程中,发现存在参数包含返回,但响应类型不为text/html
(2)直接浏览器访问url,发现响应类型变更为html。可以进一步测试xss
3、进一步阐述
(1)比较这两组请求报文,区别在于Accept的值。
- 如果是浏览器地址栏直接请求,更倾向于html类型。text/html优先级更高
- 而在html文档间接发出请求,可能会设置为*/*无倾向,或者其它非text/html类型
- 服务端接收请求后,有大概三种情况:
- 代码或者服务器容器直接设置固定的响应头部字段content-type
- 请求中accept为*/*,无预期偏好。服务器根据请求的路径后缀和响应内容自动设置
- 请求中accept表现偏好。服务器结合请求的路径后缀和响应内容,进行设置。
(2)accept设置与处理
- 浏览器地址栏请求和form表单,可以一定程度影响accept请求字段。form表单具有属性accept,可以直接设置
- 需要注意,accept只是有可能将响应类型变更为text/html,但并不绝对
(3)场景
- html文档中加载其它js、css等文本文档
- html文档ajax交互,获取非html的文本文档
- html文档ajax交互,获取到html的文本文档