XSS各种过滤手段,如何绕过写payload-学习笔记

XSS简介

XSS全称是Cross Site Scripting即跨站脚本,当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,意思就是说可以任意执行js代码,包括js的而已代码

如何进行payload的构造

我们知道xss漏洞不会这么简单的被你发现,通常来说开发者都会对用户输入的东西进行过滤,比如简单的就是 将<script> <ifraname>还有< 等进行过滤,用户输入的时候就可以防止js命令随意的执行,但是我们知道这种方法并不是绝对安全的,我们可以通过其他标签来构造payload,在ctf比赛中非常喜欢考察。

事件过滤

比如

onafterprint
onbeforeprint
onbeforeunload
onerror
onhaschange
onload
onmessage
onoffline
ononline
onpagehide
onpageshow
onpopstate

一些常见的fuzz,我们在渗透测试中可以进行输入测试,对它进行fuzz测试

测试到没有进行过滤的事件,那么我们可以用来构造payload

  <a href="javascript:alert('xss')">点我</a>

这样我们点击的时候就会弹出XSS标签等

敏感关键词(字符串过滤)

关键字过滤大部分是针对敏感变量或函数而进行的,如cookie、eval等,这部分的过滤可通过字符串拼接、编码解码等方法进行绕过。

字符串拼接与混淆

在Javascript中可以通过调用 数组来执行xss命令,比如

window['alert'](/xss/)

我们还可以使用base64编码,比如我们将alert转成base它照样可以运行,因为调用了atob函数

window[atob['YWxlcnQ=']](/xss/)

将base64转换为原来的,输出的那么就是 alert

编码解码

xss漏洞中常见的编码方式

HTML进制编码:十进制(&#97)、十六进制

css进制编码: 兼容HTML中的进制表现形式,十进制、十六进制

Javascript进制编码:八进制、十六进制、Unicode编、ASCII

url编码:%61(包含%什么的,我们常在url栏可以看到)

JSFUCK编码

过滤“.”

在Javascript中使用with 可以设置变量的作用域,利用此特征可以对“.”进行过滤

with(document)alert(cookie);

过滤“()”

使用 throw 等关键字对传递的参数进行过滤,如

window.onerror=alert;throw 1;

空格过滤

在标签可以使用 0x09、0x10、0x12、0x13、0x0a 等代替空格进行过滤

https://xxx.com/xss.php?text=<img0x09src=javascript:alert('xss')>

SVG标签

svg标签和语句遵循的规则是直接继承xml而不是html,区别在于svg内部的script标签中允许在部分进制或编码后的字符(比如实体编码)

字符串集编码导致绕过

当字符集编码存在问题时常常会导致一些出乎意料的绕过。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值