很多大虾都是通过查看程序源代码的方式来发现漏洞的。由于我刚开始学ASP,所以还没有达到这种境界。说来蹊跷,尽管搜索漏洞不方便,但偏偏一些程序的漏洞就让我给挖了出来。本文旨在提醒一些网管和站长,应加强网络安全方面的意识。以前看过一个“动网upfile漏洞利用”的动画教程(大家有兴趣可以到Google里搜索),使我对抓包修改有了初步了解。当时就感觉用途不只是上传那么简单。于是爱死了Winsock Expert,经常有事没事拿着它分析数据包。不经意间,有很大的收获。最近利用它成功地绕过了MD5验证,入侵了某个站点。管理员自掘坟墓图1是笔者入侵过的一个站点。该网站使用的是沸腾3AS流浪尘缘新闻系统(核心:尘缘雅境图文系统)V0.45 Access版build 1程序。这次我抱着帮它检测漏洞的心态,瞧瞧能不能再次入侵成功,并放个页面上去。
图1大家都知道尘缘雅境有个漏洞——Uploadfaceok.asp可以上传ASP木马。管理员似乎知道这里有问题,已经进行了处理。几经查找,默认数据库地址已经不在了。不过转来转去,感觉这个站点有点让人摸不着头脑,就好像有人故意在留后门一样。在浏览信息的时候,发现它用的是ReadNews1.asp 这个文件,并没有用原来的ReadNews.asp,随手输入一个“'”符号(引号不输入),居然存在注入漏洞。tW.WinGwIt.COmhttp://lovefree.org/wenzhang/wenzhang/ReadNews1.asp?NewsID=173是个注入点,但是将文件名改为readnews.asp?newsid=173却被过滤了。很显然,这是管理员修改过文件的什么地方。但肯定是由于不懂注入漏洞,所以看不出来源程序那段防止注入代码的含义,最后自以为是地把原来用来防止注入的部分给去掉了。如此的误操作,就造成了一个漏洞的存在。也就是说尘缘雅境系统本来不存在这个注入点,现在却被无意中制造了一个。注入之后得到的密码,即数据库中的密码值是MD5加密过的,这个“地球人都知道”。怎么办?MD5我破解不了。用Winsock Expert查询关键值MD5破解不开,我就想到了Winsock Expert抓包修改,因为我记得尘缘雅境这个程序在后台管理员修改密码的时候,并没有要求输入原始密码,而默认密码框中的则是原始密码的MD5值。就是说,如果你修改密码,系统就会要求验证旧的密码的MD5值。现在既然拿到了MD5值,那么自然就可以修改密码了。有一点要注意,抓包的时候要看清楚包的内容,看看它除了要验证旧密码的MD5值以外,还会验证什么。我下载了这个版本的程序,准备看看后台有什么可以经过修改拿到WebShell。在本机上打开IIS服务,访问初始化程序的后台页面。后台有个管理员修改密码的地方,我猜想如果程序在修改后台密码的时候使用Cookie验证方式,那么我们就可以直接提交相应的数据包,如果包中内容符合程序要求,程序就会认为合法,则执行修改管理员密码的代码。图2是我在修改密码的时候抓的数据包。主要是想看看修改密码都需要什么信息,需要符合包中哪些内容(我在本机上的IIS服务器IP地址为192.168.32.21)。下面就是需要验证的Cookie内容 :
图2Cookie:ASPSESSIONIDQSTCRBQS=IGCLHDBBPLKKLEAAPKGHCLPH;reglevel=;fullname=%D0%A1%B7%D1; purview=99999;KEY=super;UserName=base;Passwd=279d34fa1dfd71aa这些是需要的信息。我们只要知道有username、Passwd、purview、KEY、fullname这几个值需要验证就行了,下面要想办法让他们符合要求。再看看数据库,它们都在Admin表下,也就是说,我们可以通过注入弄到它们。purview=99999和KEY=super这两个值是说明它们为超级管理员的,不需要变更,最重要的就是剩下的三个值。欺 骗通过NBSI工具注入,得到了Username=admin, Passwd=24a2b13f36f9f99c, fullname=doudou三个值,我们就用这些来欺骗。现在包对应的值有了,包内容如果现在提交,就会出现修改成功,这样能把我在本机的初始尘缘雅境程序密码改掉。但要改的可是被入侵的系统,怎样做到呢?我们知道包内容里面有被修改程序的IP地址,当然也可以改,可是改了以后还要计算并修改包大小值,这样很麻烦。干脆这样,就先欺骗自己的机子,让它以为自己所架设的服务器IP地址就是域名lovefree.org;然后再抓包,让自己的机子认为lovefree.org又指向原来的地方,那么我们就不用再改动包的内容了。下面要做的是让我自己的电脑认为站点http://lovefree.org/wenzhang/wenzhang/在我的IP上,而且对应的路径就是我安装的尘缘雅境初始化程序地址。修改E:\WINDOWS\system32\drivers\etc\下的hosts文件,加一行内容:192.168.32.21 lovefree.org(图3)。
图3然后设置IIS服务器,加上个虚拟目录wenzhang/wenzhang,指向尘缘雅境在自己机子上的目录。好了,现在在浏览器上输入http://lovefree.org/wenzhang/wenzhang就是我机子上的初始尘缘雅境了。这样做的目的是抓到的包可以直接提交给真实的http://lovefree.org/wenzhang/wenzhang地址,为了保证包的大小一样,在我机子上的username=admin、fullname=doudou,也设置得和远程服务器一样(可以在后台改,fullname是管理员的全名)。一切就绪,现在开始再抓一次修改密码的包,为了方便起见,我已经把管理员信息改为username=admin,fullname=doudou了。剩下包里需要修改的信息,就是MD5的密码值,因为MD5加密后都是16位的,不影响包大小。POST /admin/saveedit.asp?id=1 HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,application/msword, application/x-shockwave-flash, */*Referer: http://www.xijing.com.cn/admin/useredit.asp?id=1……Content-Length: 110Connection: Keep-AliveCache-Control: no-cache(下面是Cookie验证内容)Cookie:NB796459377Vote1=1;ASPSESSIONIDQSTCRBQS=MGCLHDBBGDELLJGJGJHGKBML;reglevel=; fullname=doudou; KEY=super; UserName=admin; purview=99999; Passwd=24a2b13f36f9f99c(下面是修改信息)username=admin&passwd=abend&passwd2=abend&fullname=doudou&depid=10&oskey=super&shenhe=1&cmdok=+%D0%DE+%B8%C4+看到了吧,包和真的一样!简直就像从它的服务器上抓来的。这样我们要改的,就只有passwd的MD5值了,就是说,只要这个也匹配,真正的lovefree.org服务器就会认可。改为24a2b13f36f9f99c就是注入得到的密码MD5值。现在把host文件的内容改回来之后,再输入域名lovefree.org就能打开真实地址了。用NC命令提交(图4)。
图4哈哈!“恭喜您!您的资料已经修改成功! 2秒钟后返回上页!”总 结现在密码就是abend。用它来登录后台,到网站属性“上传文件类型:”多加一个ASP,就可以上传ASP木马。其实还有很多程序都存在这样的问题,如果你拿到了某站管理员的MD5值,不妨用这种方法试一下,也许有很大收获!小资料:什么是MD5MD5的全称是Message Digest Algorithm 5(信息摘要算法),在上世纪90年代初由Mit laboratory for computer science和Rsa data security inc及Ronald l. rivest开发出来,经MD2、MD3和MD4发展而来。1991年,在MD4的基础上增加了“安全-带子”(safety-belts)的概念。Rivest开发出技术上更为趋近成熟的MD5算法。虽然MD5比MD4稍微慢一些,但却更为安全。由于MD5算法的使用不需要支付任何版权费用,所以在一般的情况下(非绝密应用领域,但即便是应用在绝密领域内,MD5也不失为一种非常优秀的中间技术),MD5怎么都应该算得上是非常安全的了。MD5的典型应用是对一段信息(message)产生信息摘要(message digest),以防止被篡改。比如,在UNIX下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如下:md5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461这就是tanajiya.tar.gz文件的数字签名。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。MD5还广泛用于加密和解密技术上。比如在UNIX系统中用户的密码就是以MD5(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。正是因为这个原因,现在黑客破解MD5密码,使用最多的一种破译密码的方法就是一种被称为“跑字典”的方法。有两种方法得到字典,一种是日常搜集的用做密码的字符串表,另一种是用排列组合方法生成的,先用MD5程序计算出这些字典项的MD5值,然后再用目标的MD5值在这个字典中检索。我们假设密码的最大长度为8位字节(8 bytes),同时密码只能是字母和数字,共26+26+10=62个字符,排列组合出的字典的项数则是p(62,1)+p(62,2)….+p(62,8),那也已经是一个天文数字了,存储这个字典就需要TB级的磁盘阵列,而且采用这种方法还有一个前提,就是能获得目标账户的密码MD5值的情况下才可以。