XSS过滤器绕过总结

黑名单过滤器绕过

黑名单模式下的过滤器是最常见的。他们的目标是检测特定模式并防止恶意行为。这完全是“模式”的问题,它们越准确,就越可以拦截攻击。

1. 注入脚本代码

主要是

1.1 绕过弱

简单的过滤器无法涵盖所有可能的情况,所以可以绕开它们。 以下示例仅是对弱规则的一些绕过。

#大写和小写字符

#标签后加随机字符串

ipt>alert(1)ipt> #嵌套标签(双写)

alert(1) #NULL字节

1.2 ModSecurity > 基于标签的XSS向量规则

这是ModSecurity过滤

SecRule ARGS "(?i)(

显然,我们插入脚本代码方法不是唯一的。 有多种方法可以运行我们的代码,例如不同的HTML标签和相关的事件。

1.3 除

show

sendsend

#可使用https://github.com/evilcos/xss.swf

1.4 除

事件是访问者与HTML DOM之间交互性的方式; 这只需通过执行客户端代码(JavaScript)来实现。

几乎所有事件处理程序标识符都以on开头,后跟事件名称。 最常用的一种是onerror,

常用On事件

onsearch

onwebkitanimationend

onwebkitanimationiteration

onwebkitanimationstart

onwebkittransitionend

onabort

onblur

oncancel

oncanplay

oncanplaythrough

onchange

onclick

onclose

oncontextmenu

oncuechange

ondblclick

ondrag

ondragend

ondragenter

ondragleave

ondragover

ondragstart

ondrop

ondurationchange

onemptied

onended

onerror

onfocus

onformdata

oninput

oninvalid

onkeydown

onkeypress

onkeyup

onload

onloadeddata

onloadedmetadata

onloadstart

onmousedown

onmouseenter

onmouseleave

onmousemove

onmouseout

onmouseover

onmouseup

onmousewheel

onpause

onplay

onplaying

onprogress

onratechange

onreset

onresize

onscroll

onseeked

onseeking

onselect

onstalled

onsubmit

onsuspend

ontimeupdate

ontoggle

onvolumechange

onwaiting

onwheel

onauxclick

ongotpointercapture

onlostpointercapture

onpointerdown

onpointermove

onpointerup

onpointercancel

onpointerover

onpointerout

onpointerenter

onpointerleave

onselectstart

onselectionchange

onanimationend

onanimationiteration

onanimationstart

ontransitionend

onafterprint

onbeforeprint

onbeforeunload

onhashchange

onlanguagechange

onmessage

onmessageerror

onoffline

ononline

onpagehide

onpageshow

onpopstate

onrejectionhandled

onstorage

onunhandledrejection

onunload

以下是一些HTML 4标签示例:

以下是一些HTML 5标签示例:

从防御的角度来看,解决此问题方案是过滤所有以on开头的事件,防止XSS。

这是一个被广泛使用的正则表达式(on\w+\s*=)

由于HTML和浏览器“动态性”的结合,我们可以轻松绕过这个过滤器:

因此有了“升级”版过滤器:(?i)([\s\"'`;\/0-9\=]+on\w+\s*=)

但是仍然存在问题。 某些浏览器将一些特殊字符转换为空格,因此\ s元字符不足以覆盖所有可能的字符。

例如以下的一些绕过方法:

#适用于除Safari以外的所有浏览器

#只适用IE

在事件名称(例如onload)和等号(=)字符之间或在事件名称之前可用的控制字符列表,

IExplorer = [0x09,0x0B,0x0C,0x20,0x3B]

Chrome = [0x09,0x20,0x28,0x2C,0x3B]

Safari = [0x2C,0x3B]

FireFox = [0x09,0x20,0x28,0x2C,0x3B]

Opera = [0x09,0x20,0x2C,0x3B]

Android = [0x09,0x20,0x28,0x2C,0x3B]

迄今为止,有效防守的正则表达式规则应为:

(?i)([\s\"'`;\/0-9\=\x00\x09\0A\x0B\x0C\0x0D\x3B\x2C\x28\x3B]+on\w+[\s\x00\x09\0A\x0B\x0C\0x0D\x3B\x2C\x28\x3B]*?=)

一些过滤器可能会阻止某些关键字的使用来阻止脚本代码的执行,例如:alert,javascript,eval等。

alert() 可尝试使用一下方法进行绕过

top['ale'+'rt']()

a\u006cert()

alert``

top['a\u006ce'+'rt']``

2. 字符编码

JavaScript允许使用各种字符编码类型,这些类型使我们能够执行代码,而不是被解释为文字形式。

2.1 Unicode

alert 会被拦截

可使用Unicode编码绕过

2.2十进制,八进制,十六进制

则除了Unicode外,我们还可以采用多种编码

同时可使用多种编码

2.3 构造字符串

通常alert关键字被阻止,但是很可能未检测到“ ale” +“ rt”。

JavaScript具有一些可用于创建字符串的函数。

/ale/.source+/rt/.source

String.fromCharCode(97,108,101,114,116)

atob("YWxlcnQ=")

17795081..toString(36)

2.4 伪协议

javascript:不需要事件处理; 因此,我们应该避免使用它。由于伪协议通常是在字符串中引入的,因此我们可以使用之前看到的所有变体。

data="javascript:alert(1)">

除了javascript还有vbscript 、data。

data:[][;base64],

prettyprint lang-js

prettyprint lang-js

vbscript伪协议不是很常见,因为它只能在Internet Explorer上使用。

#适用IE8

#适用IE8

#适用IE Edge

#适用IE Edge

其他绕过

1. 删除HTML标签

安全机制通常选择对潜在的XSS向量进行清理,而不是阻塞整个请求。 这些可能是我们在测试过程中可能遇到的最常见的过滤器。

例如,最常见的是对一些关键字符进行HTML编码,例如 < (<), > (>)等。这并不总是足够的,并且取决于不可信数据在页面的哪一点被注入。

在某些情况下,过滤器可能会删除恶意关键字。 例如,删除

此行为的一个常见错误是该规则仅删除匹配表达式的第一个实例。

ipt>alert(1)

此外,如果过滤器执行递归检查,则应始终检查它是否仍可利用。递归检查可能是按顺序进行的,也许更改插入字符串的顺序可能绕过。

它们以

ipt>alert(1)

2. 转义

这不仅是HTML标记的问题,而且注入点通常位于带引号的字符串内。 通常,过滤器将反斜杠字符(\)放在引号之前,以转义此类字符。

2.1 转义’

还需要转义反斜杠以避免旁路。 例如,假设我们可以在以下代码中控制值randomkey,但是引号已转义:

var key = 'randomkey';

如果我们插入randomkey \'alert(1)而不是randomkey,

这是因为该应用程序将在转换我们的输入时避免使用’, randomkey\\'; alert(1); //

这只会转义反斜杠,从而使我们可以终止字符串并插入alert代码。

String.fromCharCode()可使我们能够从Unicode值序列开始生成字符串。

String.fromCharCode(120,115,9416)

/your string/.source

我们还可以使用unescape方法来转义生成的字符串。 例如,我们可以使用.source技术对字符串进行转义。

unescape(/%78%u0073%73/.source)即使不推荐使用此功能,许多浏览器仍支持该功能。

除此之外,还有decodeURI和encodeURIComponent方法。 在这种情况下,需要对字符进行URL编码,以避免URI格式错误。

decodeURI(/alert(%22xss%22)/.source)

decodeURIComponent(/alert(%22xss%22)/.source)

2.2 转义括号

括号是调用函数和传递参数的基础。 如果一个潜在的过滤器删除了我们插入的payload中的所有括号,我们应该怎么做? 有一种在不带括号的情况下将参数传递给函数的方法。

该技术滥用了作为窗口对象一部分的onerror处理程序,一旦使用throw和分配给该错误处理程序的函数的参数生成了错误,就为该函数分配了要调用的函数。

Other

Input 标签 z-index为-1

z-index 属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。

input 标签 会被 a 标签遮挡 无法触发XSS漏洞

adasdsa

onblur 事件会在对象失去焦点时发生。

payload:

οnblur=alert(/Test/) autofocus

xss绕过字符过滤_XSS过滤器绕过总结相关推荐

  1. xss绕过字符过滤_XSS绕过实战练习

    前言 写这篇博文起源来自于一次网络安全实验课,在实验虚拟环境里有一个xss挑战,估计是搬别人的xss挑战进来,我觉得挺有意思,就记录一下.有些关卡不能再虚拟环境实践,我在自己物理机上找到那个xss挑战 ...

  2. xss绕过字符过滤_xss绕过过滤之方法

    很多网站为了避免XSS的攻击,对用户的输入都采取了过滤,最常见的就是对<>转换成<以及>,经过转换以后<>虽然可在正确显示在页面上,但是已经不能构成代码语句了.这个 ...

  3. xss绕过字符过滤_IE8 xss filter bypass (xss过滤器绕过)

    简要描述: IE 8 XSS 过滤器绕过.感谢@Sogili牛为本绕过通用性实现上提供的tricks. 详细说明: 1. 在IE8中,可以通过 <?import> + 的方式来构成一个XS ...

  4. XSS短字符短域名绕过,XSS相关的知识

    XSS短字符域名绕过 先在phpstudy上搭建一个gamerycms的一个平台,文件可以在github上获得:https://github.com/bensonarts/GalleryCMS 搭建完 ...

  5. java 防XSS过滤处理过滤器

    防止XSS攻击的过滤器 import com.XX.utils.StringUtils;import javax.servlet.*; import javax.servlet.http.HttpSe ...

  6. mysql注入绕过单引号_SQL注入-绕过过滤规则

    过滤规则产生的原因 前两篇举例了SQL注入Get请求/SQL注入Post请求的案例,都是因为程序要接收用户输入的变量或者URL传递的参数,并且参数或变量会被组成 SQL语句的一部分被执行.这些数据我们 ...

  7. 浅谈PHP代码执行中出现过滤限制的绕过执行方法

    本篇文章总结于本人在CTF比赛中碰到的各种代码执行绕过方法 文章目录 代码执行函数 可回调函数 字符串拼接绕过 字符串转义绕过 多次传参绕过 内置函数访问绕过 异或绕过 URL编码取反绕过 代码执行函 ...

  8. SQL注入绕过关键词过滤的小技巧及原理(union select为例)

            本文以联合查询关键字union select为例讲解绕过关键词过滤的一些方法.之所以了解绕过,关键是发现sqlmap有时候真的是不靠谱,只能指定命令跑.有一些简单过滤很容易绕过却不能检 ...

  9. 关于SQL注入,绕过逗号过滤

    关于SQL注入,绕过逗号过滤 前言 题目 测试 解题 1.union联合注入 2.盲注 总结 前言 最近在i春秋遇到一道sqli题目,觉得很有意思,总结一下与大家分享. "百度杯" ...

最新文章

  1. 报错解决:ResourceExhaustedError: OOM when allocating tensor with shape
  2. 转载大神的 Linux查看物理CPU个数、核数、逻辑CPU个数
  3. Rails字符集问题
  4. Paper:GPT-3《 Language Models are Few-Shot Learners》的翻译与解读
  5. SpringBoot 页面跳转后css和js效果都无效了
  6. 让经纬度数据带矢量方向_惊艳!这样处理可得到细至可用于交通模型的路网数据...
  7. 3D坦克大战游戏源码
  8. 有关Botton的用法(二)
  9. 敏捷开发的相关学习文档路径
  10. git 创建远程仓库
  11. 多个折线样式_Python数据可视化实例:关于图表“贵族”折线的增强优化方法
  12. 強化 Python 在 Vim 裡的顏色 ,参考此文终于第一次搞好color schema了,感谢作者,样式好看...
  13. 数控常见的几种国内外数控系统,你都熟悉吗
  14. 灵雀云CTO陈恺:从“鸿沟理论”看云原生,哪些技术能够跨越鸿沟?
  15. 文字降重-临逸版-论文降重
  16. 打开PDF时显示please wait...怎么办?没有安装pdf阅读器经常出现的提示信息
  17. 阿里技面之raft如何选主
  18. 【渝粤题库】陕西师范大学203041 行政法与行政诉讼法学作业
  19. 美国凯斯西储大学计算机硕士专业怎么样,体现优势 收获凯斯西储大学计算机专业offer...
  20. 绝缘栅型n沟道场管_N沟道增强型绝缘栅场效应管的工作原理

热门文章

  1. actionscript代码练习作品
  2. CMD命令行接收用户输入信息
  3. Stanford Machine Learning
  4. SpringBoot报错Unsatisfied dependency expressed through field userMapper和Whitelabel Error Page解决方案
  5. 台湾国立大学郭彦甫Matlab教程笔记(2)
  6. linux平台IO多路复用 select接口使用例子
  7. Spring第二讲--利用组件注解符精简Spring配置文件
  8. 查看程序占用内存_电脑内存不足怎么办
  9. java十进制输出_JAVA输入一个十进制数N,输出r进制的数
  10. python子进程 内存,python中的子进程内存使用情况