我是怎样进入chinalinux站点的+技术解释
鬼仔注:前段时间看过,当时想发却没发,今天又看到了。
by Big Rabbit
大家都知道,中国有个最大的操作系统软件生产厂家,那就是 chinalinux。很多人都想试图进入其主站点 http://www.chinalinux.com,因为那将是对自己的一个挑战。终於有一天成功的进入了其主站,在此写出我的过程,以及对常见web服务的安全模型的理解,对此的一些总结等,希望大家能够从中得到自己的理解。
首先,那当然得介绍介绍这chinalinux站点的一些情况吧。http://www.chinalinux.com是使用自己开发的一个由linux升级得来的中文操作系统,而web服务也是采用自己的产品ccs。这ccs安装、使用非常方便,也很容易配置管理,所以很多管理员都喜欢使用这个产品。
为了要能进入这样的站点,那当然就得熟悉ccs这个web服务系统了。根据这个系统的一些基本服务特性,以及一些权限配置,简单总结後有三点。
一、ccs系统提供外界可以访问系统一部分目录文件的服务
二、ccs提供虚拟目录配置,每个虚拟目录可以对应一定的权限
三、ccs系统文件类型配置,可以配置不同的文件类型,提供直接在服务端运行和返回客户端运行两种方式
通过上面的了解,我总结出了ccs的一个安全模型,那就是ccs是一个外挂式的有权限限制的web系统。怎么来理解这“外挂”呢?因为大家熟悉操作系统的都知道,操作系统本身对一些对象有权限控制,而这ccs系统的权限控制不是依靠操作系统本身的这些功能,而是依靠自己的一些检测。最重要的一点,操作系统对对象权限的分配都附在对象本身身上,而ccs的是把所有对象的权限分配记在ccs系统上面。
这点有什么区别呢,操作系统处理的时候每个真实对象有一个档案,而每个对象可能有些别名,这样访问这些别名的时候我们不用关心它到底是别名还是真名,只要最终对应到那个唯一的档案就能正确的得到权限分配。打个形象点的比喻,月底发工资,操作系统把每个人建立了一个唯一的档案,这些档案里面记录有这个人的工资,而这个人可能叫小张也叫张三,那么发工资的时候不用管他叫小张还是张三,最终是找到了他的工资表也就正确的发放了他的工资。而对於ccs系统来说,因为它没有这样一张工资表,它就是根据人名来确定工资,所以它就必须考虑每个人所有的名字才能正确的发放工资。所以根据这个基本的特点,总结出了安全编写ccs系统应该注意的四点:
1、 ccs系统提供的服务应该做chroot限制
2、 ccs系统应该能识别一个真实目录对应的所有目录名
3、 ccs系统应该能识别一个真实文件对应的所有文件名
4、 ccs系统的调用接口应该完全按照接口意思实现
这几点,每点都可以写出一大篇文章了,因为这篇文章不是写这些,所以也就只写这点提纲式的东西吧。不光是CCS系统需要注意上面4点,其它的WEB服务器差不多同样需要考虑这样4点。
根据这些认识以及对一些原来公布漏洞的理解,很快就发现了大量的漏洞,在此总结出来原因:编写CCS系统的人员没有建立一个安全模型,对安全没有深刻的认识,所以在系统实现上就没有系统的、全面的对权限做检测,只是编写人员想到一条做一条,因为没有明确提出这些安全上的要求,这些检测也往往是很容易逃避的,所以造成这么多的漏洞。
说了这么多,还没有正式提到漏洞,那就马上来了。根据上面的第1条,显然CCS系统应该检测用户请求中的“/../”,这点不知道现在还有多少WEB有这样低级的严重的不可饶恕的错误。CCS系统低版本就有这样的漏洞,但现在显然没有了,它会先检测这样的请求,做出正确的处理。但是因为没有这样明确的安全模型,所以错误又出来了。为了对多语言以及一些传输设备的支持,CCS系统支持一种unicode的传输编码格式,而经过这样的解码後,请求的字符已经发生变化,显然根据上面安全模型的提出的“外挂式”特徵,这权限检测不能依靠解码前的检测,需要再次检测,而CCS根本就没意思到这些,所以我们可以轻易突破所有这些限制了。
於是试了其主站http://www.chinalinux.com果然有此漏洞,不过没法利用干什么事,因为其主站虚拟目录对应的一个可执行/csapi目录是作了chroot限制,也就是通过这个虚拟目录,往上级目录返回最终也到不了系统的根“/”,当然也就不能执行系统/bin/目录里面的东西了,也不能得到/etc/目录里面的密码文件,而那些缺省安装没有做chroot限制的可执行虚拟目录却被删除。好不容易找到一个漏洞却不能利用。
不过後来偶然一天访问到其一个分站点http://support.chinalinux.com,於是偷偷的试了一下其缺省安装的可执行虚拟目录/chinaadc,就是在浏览器里面输入了http://support.chinalinux.com/chinaadc/,乖乖,返回的是“HTTP 错误 403 – 禁止访问”而不是此目录不存在的“HTTP 404 – 无法找到文件”错误。大家都知道这个目录是没有做chroot限制的,可以成功的返回到系统的根“/”,再进入系统目录“/bin/”,执行下面的shell程序“sh”了。当然也就用此sh查看了一些web目录结构。
http://support.chinalinux.com/chinaadc/..%c0%af../..%c0%af../bin/sh.elf?ls+/http
就可以看到web目录所在东西了,很高兴的看到了此目录里面有一些脚本“.sh”文件。
对於这些脚本文件,CCS系统又有漏洞,那就是上面第4条的一个漏洞。在作接口的时候,接口实现程序一定得完全按照接口意思实现,这点CCS系统出了更是无数的漏洞。而因为CCS是相对操作系统後出来的了,它在调用操作系统调用的时候,当然就不能要求操作系统来满足它的要求了,这些调用本身处於比CCS系统低的层次,也不应该去满足CCS的特殊要求,所以CCS必须明白一些操作系统调用有什么特殊的地方。这在chinalinux系统实现加载程序的调用上,为了支持长文件名、文件名里面的空格等,可以在加载的文件名前後加上“””号,chinalinux加载程序就是用“””来匹配到底加载的是哪个文件。而又一点,如果检测到是加载“.sh”的脚本文件,就自动的调用shell程序“sh”去解释,而这调用也饶过了chroot使得不能访问“/”以及系统目录的限制。在调用“sh”的时候,操作系统会把这个脚本文件以及脚本文件的参数统一作为参数加载。大家都知道shell程序“sh”本身支持命令连接符、管道等,所以我们可以在参数里面加上命令连接符和我们要执行的命令。所以CCS在加载程序的时候就必须应该明白操作系统chinalinux加载程序的这些特性,从而实现相应的检测。
对於上面看到的web目录结构,以及里面的那些“.sh”脚本文件,我大胆的猜测其主站http://www.chinalinux.com可能也存在。虽然CCS系统不准直接加载“.sh”的脚本文件,但是我们可以通过使用“””的办法使得实际加载的不是CCS系统需要的“.elf”格式文件。
http://www.chinalinux.com/csapi/..%c0%afhttp/china.sh”+.elf?”+&+ls+/bin
成功的突破了chroot对根“/”的限制,查看到了系统目录,也可以完全控制主站了。当然这些不是目的,我们也不希望这样的站点有任何的被修改,後来其站点终於也打上了相应的补丁。
後来有人用unicode漏洞破了chinalinux一个废弃不用的分站点,改了一个页面并且大肆宣扬,这完全没有必要。我们需要的是通过这些方法得到我们考虑问题的思路、方法等,而不是去破坏。
最後再次总结:
一、编写WEB服务安全模型建立的必要性
二、站点安全配置往往因为一点小小的错误,使得全线崩溃
希望我们的程序员在编写安全程序的时候,也要多考虑考虑我们怎么能够更好的编写安全的程序。
写这个的时候隐含了很多信息.
chinalinux=microsoft
ccs=iis
chinaadc=msadc
csapi=isapi
.sh=.bat
.elf=.exe
其实就是unicode漏洞拿下了 http://support.microsoft.com/msadc,因为此站点有/msadc可执行虚拟目录,而此目录和系统目录在同一个驱动器. 但主站http://www.chinalinux.com/isapi的可执行目录不在系统盘,unicode漏洞不能调用到系统目录的 cmd.exe.但通过http://support.mscrosoft.com/msadc获得了站点的目录结构及文件列表,找到里面的.bat文件了.再估计主站也有同样的.bat文件,又通过另一个漏洞,调用.bat文件,这样自动调用cmd.exe,就不存在cmd.exe路径问题,再通过另一个漏洞,执行了命令.
通过3个未公开漏洞,以及一个分站点获取信息,顺利拿下主站点.