2014
Jan
19

路径攻击又称为 Directory Transversal,这是个很普遍的攻击方式,一个正常网站都是装在网页伺服器里面,而一个伺服器除了网页会用的 html 之外,还会存著各种资料库,管理员的帐号、密码,若是网站存在路径漏洞,骇客就能透过给予特定的路径,试图去浏览网站储存帐密的档案。

例如我们平常看的网页 URL 是这样

若是我们故意将 URL 改成

那么伺服器是否会将 C:/windows/user.db 这个档案印出来呢? 当然不是这么简单,目前市面上的浏览器以及网页伺服器都会自动阻挡这种攻击。

虽然伺服器已经有了基本的防护,但市面上的程式是由世界各地工程师写的,每个工程师能力不同,有些地方仍然会存在著相关的漏洞,接下来就开始介绍网站常见的路径漏洞。

页面程式档案切换漏洞

上面这个网址是很常见的程式写法,当 page = news 时,网站就会去执行 news.php 这个档案,若是 page = guestbook 时,网站就会去执行 guestbook.php 这个档案。

看起来是一个很正常的逻辑,但是骇客却可以输入 page = ../../data/users.db,如果网站刚好有 data/users.db 这个档案,这样骇客就可以读取资料库里的内容了。

你一定会想说,可是我的网站不会有 data/users.db 这种档案,骇客要怎么知道我的网站资料夹结构会是什么呢? 其实这不是什么大问题,因为大部分人用的网站伺服器都是 apache, IIS, nginx, appserver, xampp 等,而作业系统不是 windows 就是 Linux , Framework 有 wordpress, drupal, CodeIgniter, smarty , cakephp,只要骇客对这些软体有足够的认识,那么骇客就能轻易的猜出系统重要的档案路径。

例如 Linux 系统会将 OS 帐号资料存在 /etc/passwd 这个档案中,所以骇客利用下列这个路径就能取得帐号资料。

Cookie 读取档案

有些网站提供了 theme 的切换功能,也就是让 user 可以将网页切换到不同的 style,如经典风,乡村风等等。

有些工程师为了操作简单,就会使用 Cookie 来记录 User 选择的 theme, 当 theme=classic 时,程式就会载入 classic 风格的档案,当然这样的写法也有一样漏洞。

骇客可以设定 Cookie,将 theme 这个 key 写入 「../../etc/passwd」,就能再度 Hack 成功。

Url Encode & Decode

「/」 这个符号有可能会被程式给过泸掉,如果说我们将 「/」 转成 HEX 编码 「%2f」,就能绕过某些程式检查。

Encode 过后的结果: ../../ => ..%2f..%2f

另一个 Encode 的原因,大部分的浏览器会将 http://xx/a/b/../../../ 转成 http://xx/ ,这样就失去跳上一层目录的功能,所以我们先对 Url 编码,Url 就会变成 http://xx/a/b/..%2f..%2f..%2f ,若是伺服器的 Rewrite Rule 语法写得不好,骇客就有机会能够读取到上一层的目录,或是读取 PHP 程式原始码。

  • windows 的档案目录结尾是使用「\」,与 Linux 系统的 「/」不同,所以 encode 过后的值也不同,「\」 => 「%5C」
urlencode
  1. echo urlencode("/ ");
  2. //输出 = %2F %5C

IIS 伺服器有额外支援 Unicode 的路径,所以可以使用 Unicode encode 「/」 => 「%c1%1c」,「\」=> 「%c0%af


回應 (Leave a comment)