web基础漏洞-xss

1、介绍

xss,cross site script跨站脚本攻击。在用户的浏览器上解析攻击者构造的payload作为脚本执行,从而造成危害。

2、场景

2.1 反射型xss

测试参数在url的路径参数、直接参数中,或者表单请求体部中。响应体部包含该参数,并可以构造解析为脚本

title标签之间不能嵌套其他任何标签,不执行
head标签是可以嵌套body、img等体部标签的
textarea标签内部不能嵌套任何标签,会将其作为普通文本
script标签之间是不能嵌套任何标签的
style标签之间是不能嵌套任何标签的,不解析
noscript标签也不能嵌套其他标签

2.2 存储型xss

攻击者将payload保存到服务端,其它用户请求包含payload的资源,payload在响应体部中可以解析为脚本。

2.3 dom型xss

基于响应页面的脚本,读取攻击者构造的payload,执行造成危害。

eval()
window.execScript()
window.setInterval()
window.setTimeout()

document.write()
document.writeln()
document.body.innerHTML=''
document.forms[0].action=''
document.attachEvent()
document.create()
document.execCommand()
document.body.
window.attachEvent()

document.open()
window.open()
window.location.href=''
document.locaiton=''
document.location.hostname=''
document.location.replace=''
document.location.assign()
document.URL=''
window.navigate()

#jquery

2.4 其它

  • 4xx或5xx,将参数写入响应体部
  • 个人管理后台,csrf伪造请求将payload写入,然后再自己请求触发

3、防护

(1)cookie设置为httponly

(2)编码处理

  • 输出到各处时,结合输出点类型进行编码
  • 一般场景是进行html实体编码,包括元素属性值、元素事件中的字面量、元素包含的文本
  • 对于script内的脚本的字面量,进行js转义编码,即添加\前缀
  • 某些方案中,对元素的地址属性值中的敏感字符,会使用url编码,即%编码。比如a的href、form的action、script的src、link的href等
  • 是OWASP提供的一套java编码的api,可以选择编码方式对不同html输出参数进行不同编码。防止xss

(3)csp和 X-XSS-Protection

4、测试&绕过

(1)反射型的测试

  • 判断请求是否为非ajax、响应是否为html页面,请求是否存在测试参数
  • 测试参数是否存在返回,这个过程一般是采用干扰较小的payload,比如test000
  • 敏感字符过滤,主要是<>'"/五个字符,当然其它字符也有可能作为xss的利用点
  • 基于输出点和敏感字符过滤构造payload

(2)存储型

与反射型基本一致,区别在于分析响应可能需要另外请求

(3)dom型

  • 分析数据流向,常见的是cookie和location.hash、location.query
  • 查找敏感的js函数或属性

5、渗透经验

(1)比较偏门的几个测试点

  • 404等状态码页面
  • 参数包含敏感字符响应警告
  • jsonp或其它非html响应,直接地址栏请求或者表单请求
  • 路径参数和伪静态页面的参数

(2)某次测试过程中,其它敏感字符和关键字被防火墙过滤,且cookie无法获取

先基于load方法将数据加载到当前页面的某元素中,再基于img的onerrer事件,持续读取加载的数据发送给攻击者。

需要注意,这个过程中,由于onerrer的作用是设置this.src=攻击者控制的网站接口+读取元素文本,不是合法的src属性,所以会反复触发onerrer事件。而load方法是异步加载,所以前几次onerrer并不能读取到真正的数据,需要等到加载完成才能够成功获取

posted @ 2023-07-06 22:44  挖洞404  阅读(8)  评论(0编辑  收藏  举报