web基础漏洞-xss

1、介绍

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

  • 应用,广义上包含任何支持脚本解析的程序,一般特指浏览器
  • 脚本,广义上包含js、vbscript和actionscript(flash)等,一般特指js
  • 狭义的说,xss实际上基于js执行场景和js代码相关

2、三个问题

2.1 如何使payload作为脚本执行

  • 嵌入型:payload嵌入到html文档中,由浏览器解析html和js过程中,作为脚本代码直接执行
  • 解析型:js执行过程中,读取payload作为参数,然后解析为脚本执行。比如eval、document.write
    • payload在响应之前,保存到了浏览器的地址栏、cookie等数据中
    • payload在响应中,作为任意数据,包括js变量、注释、元素文本
    • payload在响应之后,再进行请求获取

js执行场景:浏览器执行js脚本 - 挖洞404 - 博客园 (cnblogs.com)

2.2 如何构造payload

  • 嵌入型:尝试直接利用当前输出点,如果不行则构造关闭当前js或者html语法结构,再尝试
  • 解析型:直接构造相对独立的js代码,或者html

html语法:

2.3 攻击者构造的payload如何传递到用户浏览器中

(1)攻击者构造包含payload的url,其直接指向目标域,基于聊天工具、网站通信、邮件等传递给用户,诱使其点击

(2)攻击者控制第三方网站,用户访问时被迫向目标域跳转

  • 请求方法可以是GET或POST
  • 请求可以是直接基于url跳转,或者表单请求。不能是ajax
  • payload可以在url中,也可以在请求体部中

(3)攻击者访问目标域,将payload存储,为公开数据。然后用户访问该数据

3、三种常见的xss分类

  • 反射型,单次请求-响应过程,payload在请求中包含,然后在响应中返回
  • 存储型,两次请求-响应过程,由攻击者在初次请求过程中将payload提交保存到服务端,然后其它用户在第二次请求过程中访问payload数据
  • dom型,单次请求-响应过程,响应中的js脚本读取可能存储在任意处的payload解析为脚本

4、漏洞防护

(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

5、渗透经验

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

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

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

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

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

posted @ 2023-10-20 17:21  挖洞404  阅读(8)  评论(0编辑  收藏  举报