目录
1.URL 编码 "javascript:alert(1)"
2.HTML字符实体编码 &#;"javascript" 和 URL 编码 "alert(2)"
3.URL 编码 ":" 就是%3a
4.HTML字符实体编码 < 和 >
5.HTML字符实体编码 < 和 >
6.<script>alert(6)</script>
7. HTML字符实体编码 " ' " (单引号)
8.Unicode编码 " ' " (单引号)
9.HTML字符实体编码 alert(9);
补充:在HTML中有五类元素:
五类元素的区别如下:
10.Unicode 编码 alert
编辑11.Unicode 编码 alert(11)
12.Unicode 编码 alert(12)
13.Unicode 编码 " ' " (单引号)
编辑14.Unicode 编码换行符(0x0A)
15.实体编码,先解码
1.URL 编码 "javascript:alert(1)"
<a href="%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29">aaa</a>
a标签可以触发JS代码
a标签里面的百分号加16进制像是一个urlcode的编码,这个编码放在href里面就是一个超链接,那我们就可以给他一个网址让它呈现出来
<a href="https://www.baidu.com">aaaa</a>,
但是它是执行不了的,因为他不认识Javascript编码协议,所以不执行
2.HTML字符实体编码 &#;"javascript" 和 URL 编码 "alert(2)"
<a href="javascript:%61%6c%65%72%74%28%32%29">
HTML编码解析在前,然后再去解析URLcode编码这样就人事Javascript所以可以执行;而第一个不认识JS这个协议所以就不会执行成功
3.URL 编码 ":" 就是%3a
<a href="javascript%3aalert(3)"></a>
在href里面有一位编码都不可以所以不执行,除非先解码
4.HTML字符实体编码 < 和 >
<div><img src=x οnerrοr=alert(4)></div>
<img src="1" οnerrοr="alert(1)">
当我们进入数据状态中的字符引用时,的确可以将编码进行解码,但不会进去标签开始状态
HML看到只要有字符引用,这里是&就把他当作是一个普通的字符串,它可以显示但不执行
div标签没有执行可以看到
5.HTML字符实体编码 < 和 >
<textarea><script>alert(5)</script></textarea>
虽然进行了解码但是还是执行不成功
在HTML解析器下只要遇到<textarea>和<title>就会把它里面的所有内容都认为是普通文本,所以不成功
6.<textarea><script>alert(6)</script></textarea>
这个没有编码还是执行不了为什么?
<script>内容被认为是一个普通的字符串所以不执行
7. HTML字符实体编码 " ' " (单引号)
<button οnclick="confirm('7');">Button</button>
执行成功了
8.Unicode编码 " ' " (单引号)
<button οnclick="confirm('8\u0027);">Button</button>
JS中严格区分大小写,不能编码符号,这里的8都编码了符合所以不执行
实际看来这个是执行不了的
9.HTML字符实体编码 alert(9);
<script>alert(9);</script>
<script>是原始文本元素,可以容纳文本,所以它把里面内容当成一个文本没有进行实体解码,但是JS有不认识这个&符合,所以执行不了
补充:在HTML中有五类元素:
-
空元素(Void elements),如<area>, ,<base>等等
-
原始文本元素(Raw text elements),有<script>和<style>
-
RCDATA元素(RCDATA elements),有<textarea>和<title>
4.外部元素(Foreign elements),例如MathML命名空间或者SVG命名空间的元素
5.基本元素(Normal elements),即除了以上4种元素以外的元素
五类元素的区别如下:
-
空元素,不能容纳任何内容(因为它们没有闭合标签,没有内容能够放在开始标签和闭合标签中间)。
-
原始文本元素,可以容纳文本。
-
RCDATA元素,可以容纳文本和字符引用。
-
外部元素,可以容纳文本、字符引用、CDATA段、其他元素和注释
-
基本元素,可以容纳文本、字符引用、其他元素和注释
10.Unicode 编码 alert
<script>\u0061\u006c\u0065\u0072\u0074(10);</script>
没有编码符合支持unicode所以成功
11.Unicode 编码 alert(11)
<script>\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0031\u0029</script>
用来编码符合,编码了括号所以不执行
12.Unicode 编码 alert(12)
<script>\u0061\u006c\u0065\u0072\u0074(\u0031\u0032)</script>
没有用编码符合他把12重新解码后,JS认为他是一个字符串,但是有没有' '单引号共和" "双引号的包裹,JS就认为是语法错误
13.Unicode 编码 " ' " (单引号)
<script>alert('13\u0027)</script>
用了编码符合)不执行
14.Unicode 编码换行符(0x0A)
<script>alert('14\u000a')</script>
HTML支持换行,所以执行
15.实体编码,先解码
<a href="javascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(15)">15</a>
先是实体编码解码,再是urlcode解码,最后是unicode解码成alert(15),所以他可以执行成功