Xss漏洞常见绕过过滤攻击场景

本文详细介绍了XSS漏洞中如何通过字母大小写、ASCII16进制、HTML实体编码、URL编码、Unicode、Base64编码等技巧绕过后台过滤,包括宽字节、反斜线和换行符的运用,以及在实际场景中的应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Xss漏洞常见绕过过滤攻击场景

  1. 字母大小写的运用
    在某些情况下,后台作的过滤非常简单,只对一些特殊的字符串作黑名单过滤,导致可直接通过字母大小写绕过后台的过滤。如下例子
    (1) 在某租房网站上,发布租房信息的地方,插入XSS测试语句。如下图:
    在这里插入图片描述

(3) 脚本执行成功,获取cookie

在这里插入图片描述
在这里插入图片描述

2.+ ascii16进制形式的运用
当定位到输出会出现在HTML标签的属性之中。例如: … ,可尝试通过+ ascii16进制的方式绕过后台的过滤,如下举例:
(1) 如双引号未被过滤,可考虑使用引号结束字符串、引入该标签所支持的事件处理器,如: " οnclick="alert(1).
在这里插入图片描述

Code区域如下:
在这里插入图片描述

此时点击编辑框,alert(1)将会被执行。
(2) 如<>也未过滤,使用引号结束字符串、再结束前面的标签,引入弹框脚本: ">。
(3) 如”< >等都已经被过滤,则以上方法则行不通,如果输出在CSS中,可考虑+ ascii16进制形式的形式,因为CSS里,允许使用转义字符,如下例子:
在这里插入图片描述

由于这里如过滤了expression,可通过用expr\65ssion绕过。如添加以下脚本:expr\65ssion(eval(‘if(!window.x){alert(document.cookie);window.x=1}’))
在这里插入图片描述

效果如下:
在这里插入图片描述

注:基于 css expression 的XSS 已经进入暮年了,只有在IE6,7 下方能触发,受众面小,此处只是作为一个案例来讲。
3.html实体编码的运用
在XSS中html实体编码的应用也是绕过过滤的常用方法,如以下例子,输出点在:
(1) 在某网站可对视频下方的标签进行编辑。
在这里插入图片描述

(2) 测试时发现没有进行转义直接按照html输出到了页面导致标签被浏览器解释
在这里插入图片描述

(3) 添加标签发现前端有20个字符长度限制,后端是60个字节限制。并将所有小写字母替换为大写字母,也做了一些过滤(比如"<script"之类的)但并不全面。
(4) 通过测试发现:<img src="“onerror =SOME_JS_CODE>是有效的,并且onerror =后面的字符一定要是大写。
(5) 由于javascript是大小写敏感的,如果要使用<img src=”“onerror =alert(0)>来验证xss,会被过滤,此时尝试通过html实体编码的方式绕过,利用脚本修改为:<img src=”"onerror =&#97&#108&#101&#114&#116(0)>,结果成功弹框。
在这里插入图片描述

4.html实体编码与URL编码结合运用
(1)对于onxxxx=“[输出]” 和 href=“javascript:[输出]” 来说与 没有太大区别。因为[输出]所在的地方,都是javascript脚本,如比较常见的<HTML标签 onXXXX=“…[输出在这里]…”>与xxxx 。以下例子中,以上2个情况一起出现了。 将以其中一种进行讲解。
在这里插入图片描述

看输出,如下,aaaaaaaa 出现在了2个点。
在这里插入图片描述

(2)以上例子在οnkeydοwn=" [输出]"中,单引号已被过滤,可考虑进行转义为实体字符绕过。
提示:在HTML属性中,会自动对实体字符进行转义。一个简单的比方:
  
是等效的,换言之,只要上面的情况,没有过滤 &,# 等符号,就可以写入任意字符。
看缺陷点的代码,如下:
在这里插入图片描述

JS部分做以下构造,由于’被过滤,可将’写为 ‘。如下:
location.href=’…&searchvalue_yjbg=aaaaaa’+alert(1)+‘’
因为此处会过滤&#,接着把代码转换为 url 的编码。 &-> %26, # -> %23,最后利用脚本如下:
在这里插入图片描述

此时点击页面[GO]按钮触发
在这里插入图片描述

5.宽字节运用
输出在之间很多情况下,都是会过滤特殊字符,根据漏洞的实际情况,可考虑各种绕过,第一种方法,宽字节绕过。详看如下举例:
(1) 通过查看输入位置,考虑闭环前面语句,增加alert(1)弹框,输入脚本:”;alert(1);//。如下图,双引号转义了。
在这里插入图片描述

(2) 遇到这种情况,一般人估计会放弃了,因为此处已考虑了特殊字符过滤了,但观察编码方式,是gbxxxx系列的编码。
在这里插入图片描述

(3) 对于此种编码,靠考虑通过双字节方式绕过过滤,尝试在双引号前面增加一个字符,如:%c0%22;alert(1);
在这里插入图片描述

(4) 具体效果,弹框了
在这里插入图片描述

6.反斜线的运用

(2) 分别通过这两个参数增加双引号与反斜杠,发现双引号已被转义,但是反斜杠可正常使用,如下图:
在这里插入图片描述

(3) 此处可以控制的是 aaaa ,又不能用",那么可考虑使用 \,那么就可以抹掉 aaaa 后面的 双引号,如下:
在这里插入图片描述

(4) 但此处由于原来from参数原来的双引号被前面的闭环,导致语法错误,为了保证语句语法的正确性,可把bbb改变为数字,并且后面增加”//”注销后面的语句,如下:
在这里插入图片描述

(5) 但此时会提示错误,因为&符号的优先级高于=,无法进行这种赋值操作,并且由于from未定义,直接和1进行相等判断的话,会报错,错误是:“from”未定义。此方法无法实现。
(6) 可考虑把from定义成函数,在后面增加from函数的定义,这样就可以避免前面的报错,如下:
在这里插入图片描述

(7) 此时发现空格符也被转义了,那么可考虑//的方式绕过过滤,最终ss参数输入:aaa\,from参数输入:=1;alert(1);function//from(){}//,最终代码结构如下:
在这里插入图片描述

(8) 代码正常执行
在这里插入图片描述

7.换行符的运用

(2) 在url中的FilterValueAND参数输入检测字串,检查发现在

(3) 在此处发现<、>、”都已经被过滤,无法利用。再看其它地方,发现在注释的地方也存在输出点:
在这里插入图片描述

(4) 此时是否可以通过换行符,规避//的注销,执行注入语句,此时输入:%0aalert(1);//。代码变化为如下语句
在这里插入图片描述

(5) 脚本被执行,弹框。
8.宽字节、反斜线与换行符结合运用
(1)测试到某连接可存在的注入点,如下:
在这里插入图片描述

(2)根据前面的经验,可通过换行符,对第二处进行xss利用,如下:
在这里插入图片描述

(3)在js中字符串允许下面多行的写法,通过反斜线关联,故以上错误,在aaaa后面加反斜线即可解决。
在这里插入图片描述

(4)通过以上观察反斜线被过滤成了2个\,由于该用例使用的是gb2312编码,在前面提到双字的用法,可在此再次尝试,把其中一个反斜线去掉,构造利用脚本:aaaa%c0%5c%0aalert(1);//
在这里插入图片描述

(5)此时利用成功,弹框。
9.unicode、16进制、8进制编码运用
JS的字符串中的字符可以写为 unicode编码,比如譬如: < 可以表示为 \u003c 或\x3c, > 可以表示为 \u003e或\x3e,如不知道如何转义的,可使用工具进行转换,如gainover工具。那么在某些情况下,可通过unicode编码来绕过xss过滤。如下例子:
(1) 在url中的value参数输入aaaaa,通过检查代码发现其输出的地方,如下:
在这里插入图片描述

(2) 看上面代码中的5处,已通过验证分析只有一处可利用:
在这里插入图片描述

(3) 但此处<, >, " 都被过滤了, 用前面提到的某些技巧,似乎也无法直接XSS。此时在参数里输入反斜线不会被过滤,那么考虑通过unicode编码绕过,构造xss脚本如下:\u003cimg src=1\u0020οnerrοr=alert(1)\u003e
在这里插入图片描述

(4) 从上图可知,还是被转义了,无法利用成功,此时考虑<写为 \x3c, > 同样写为 \x3e,尝试是否可绕过。
在这里插入图片描述

(5) 通过源码分析没有过滤,弹框成功。
在这里插入图片描述

10.URL编码的运用
在某些情况下可通过对某些特殊字符进行URL编码来绕过过滤,如<可写为%3C,>可写为%3E,如下例子:
(1) 在此例子中分别在客户端与服务都对特殊字符如<、>、”进行了过滤,那么首先前端页面输入不包含特殊字符的字串,如下图:
在这里插入图片描述

(2) 再通过burpsuite工具拦截请求报文,将项目名称修改为:
sdfsd %3Cimg%20src=5%20οnerrοr=alert(1)%3E f.如下图:
在这里插入图片描述

(3) 重新发送报文后, 跨站脚本被执行,如下图:
在这里插入图片描述

11.base64编码的运用
(1) 使用到base64编码来进行绕过xss的过滤,一般会存在以下的两种情况:

(2) 在这种情况下 如果过滤了<> ' " javascript 的话 那么xss利用脚本可进行base64编码,尝试绕过,如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c43258bc373d4f2cbd22455f5e4bc14d.png)

(3) 这样当链接点击时页面以html/text的方式解析,然后单点击a链接时 base64的编码就被还原回: ,然后弹框:
在这里插入图片描述

(4) 在iframe里也同样可以使用!仅供参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

紫禁玄科

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值