-
CSRF漏洞挖掘需要确认以下信息:
- 目标表单是否有有效的token随机串
- 目标表单是否有验证码
- 目标是否判断了Referer来源
- 根目录下 crossdoman.xml的
allow-access-from domain
是否是通配符 - 目标JSON是否可以自定义callback等
-
界面劫持漏洞挖掘需要确认以下信息:
- 目标HTTP响应头是否设置了X-Frame-Options字段
- 目标是否有javascript的Frame Busting机制
- 用iframe嵌入目标网站试试,若成功,则说明存在漏洞
-
针对URL,可以利用的输入点是
id=1
,输出点主要有:- HTML标签之间,如:
<body>[输出]</body>
- HTML标签之内,如:
<input type='text' value='[输出]'
- 成为javascript代码的值,如:
<script>a='[输出]'</script>
- 成为css代码的值,如:
<style>body{font-size:[输出]px}</style>
- HTML标签之间,如:
-
HTML形式的编码
- 进制编码:
&#xH
(十六进制格式)、&#D
(十进制),最后的分号可以不要 - HTML实体编码,如空格为等
- 进制编码:
-
在js执行之前,HTML形式的编码会自动解码。具体参见书本 P138
-
具备 HtmlEncode 功能的标签
<body>
<script>function $(id){return document.getElementById(id);}</script>
<input
type='button' value='btn1'
onclick="$('i1').innerHTML='<img onerror=alert(1) />';alert($('i1').innerHTML)" />
<input
type='button' value='btn2'
onclick="$('i2').innerHTML='<img onerror=alert(1) />';alert($('i2').innerHTML)" />
<textarea id='i1'>3333</textarea>
<div id="i2"></div>
</body>
<!-- btn1 结果 为 <img onerror=alert(1)/> -->
<!-- btn2 结果 为 <img onerror=alert(1)/>; -->
通过返回结果可以看出区别,因为textarea
不解析html,类似的标签还有 <title></title>
、<iframe></iframe>
、<noscript></noscript>
、<noframes></noframes>
;另外还有 xmp
和 plaintext
注意以下返回区别:
var textarea = document.createElement('textarea');
textarea.innerHTML='<div>innerText</div>';
console.log(textarea.innerHTML)
// <div>innerText</div> (chro