### 简要描述: 青果教务系统的SQL注入漏洞,无需任何条件!真正的教务杀手,获取教师、管理用户密码,查看妹子信息不是梦!你想改成绩吗?答:你想多了,不作死就不会死。 ### 详细说明: 青果教务系统有一个WebService接口,默认路径:/webs/sysdata.asmx。 通过对这个服务页面数个接口的审计,发现其中某接口存在SQL注入。 /webs/sysdata.asmx提供的几个接口如下: [<img src="https://images.seebug.org/upload/201506/29003405bc265ed98b70e5f291d3131458e08f38.jpg" alt="1.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/29003405bc265ed98b70e5f291d3131458e08f38.jpg) 一、获得schoolcode 首先我对GetMenuInfo这个接口比较感兴趣。原因很简单,在几个接口中,它要求的参数是最少的,这就方便了后面的分析。 [<img src="https://images.seebug.org/upload/201506/290036518c982a17dfe695bd96053361796c6622.jpg" alt="2.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/290036518c982a17dfe695bd96053361796c6622.jpg) 那么UserType、param这两个参数究竟是什么呢? [<img src="https://images.seebug.org/upload/201506/29003951d3d44bafa55d27f65090e21808e36469.jpg" alt="3.jpg" width="600"...
### 简要描述: 青果教务系统的SQL注入漏洞,无需任何条件!真正的教务杀手,获取教师、管理用户密码,查看妹子信息不是梦!你想改成绩吗?答:你想多了,不作死就不会死。 ### 详细说明: 青果教务系统有一个WebService接口,默认路径:/webs/sysdata.asmx。 通过对这个服务页面数个接口的审计,发现其中某接口存在SQL注入。 /webs/sysdata.asmx提供的几个接口如下: [<img src="https://images.seebug.org/upload/201506/29003405bc265ed98b70e5f291d3131458e08f38.jpg" alt="1.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/29003405bc265ed98b70e5f291d3131458e08f38.jpg) 一、获得schoolcode 首先我对GetMenuInfo这个接口比较感兴趣。原因很简单,在几个接口中,它要求的参数是最少的,这就方便了后面的分析。 [<img src="https://images.seebug.org/upload/201506/290036518c982a17dfe695bd96053361796c6622.jpg" alt="2.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/290036518c982a17dfe695bd96053361796c6622.jpg) 那么UserType、param这两个参数究竟是什么呢? [<img src="https://images.seebug.org/upload/201506/29003951d3d44bafa55d27f65090e21808e36469.jpg" alt="3.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/29003951d3d44bafa55d27f65090e21808e36469.jpg) 从反编译的代码中可以看到,param这个参数是输入的UserType和schoolcode拼接成一个新字串的Md5经过 ``` str.Substring(0, 3) + str.Substring(4, 8) + str.Substring(13, str.Length - 13); ``` 这样新的拼接得来的。 那么schoolcode又是什么呢?经过跟踪得到schoolcode是从配置文件中获取的。后来经过分析得知,这个从配置文件中获取的schoolcode其实就是该院校的院校代码!(配置文件路径默认为/_data/WebSysConfig.config) [<img src="https://images.seebug.org/upload/201506/2900523806a42992bb65ed8c7319dc793a3035ed.jpg" alt="4.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/2900523806a42992bb65ed8c7319dc793a3035ed.jpg) 经过百度得知大部分高校的院校代码:http://wenku.baidu.com/link?url=vwXFaqL70D8IDjayMLVo2SnddQyoRNIy2c0odLaGem8gxXKy2xS3BtglpW6srWueZnppjbrrcl_o3yUCjiCyQbOu1Y-EhzKFATNZLYn-GO3 [<img src="https://images.seebug.org/upload/201506/29005322d0dcbb8bc0b798450987847f1b9bbfee.jpg" alt="5.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/29005322d0dcbb8bc0b798450987847f1b9bbfee.jpg) 这样一来就好办了,大部分高校的院校代码都是已知的,当然不知道代码的,我写了个暴破的py脚本尝试(10000-15000)之间的院校代码。其原理是这样的,固定UserType为ADM000,当md5(ADM000+院校代码)经过 ``` str.Substring(0, 3) + str.Substring(4, 8) + str.Substring(13, str.Length - 13); ``` 这样的处理后正确时,返回的数据包中便会含有关键字A0101。(暴破schoolcode用的python代码附在后面的测试代码中) [<img src="https://images.seebug.org/upload/201506/290105210f31cde65e2afb42444e523a82114de1.jpg" alt="6.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/290105210f31cde65e2afb42444e523a82114de1.jpg) [<img src="https://images.seebug.org/upload/201506/29013908dc58d1178d0b51347641a75b5381c0d3.jpg" alt="test.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/29013908dc58d1178d0b51347641a75b5381c0d3.jpg) 输入参数可自由控制,本来很开心,以为可以这个注入点跑数据的,可实际情况却是让人悲伤的。细心的看官看了上面的图片后可能已经看到了: ``` if (UserType.Length > 6) { UserType = UserType.Substring(0, 6); } string strsql = "select distinct menucode,menuname,isnull(linkfile,'') as linkfile from TW_SysMenuInfo ,( select a.menucode as menuid from TW_SysMenuInfo a,TW_SysGroupRight b where b.groupcode='" + UserType + "' and CHARINDEX(a.menucode+';',isnull(convert(varchar(2400),b.OptMenu),''))>0 ) as c where isnull(state,'')='1' and (menucode=menuid or menucode=left(menuid,3) or menucode=left(menuid,5)) Order By menucode "; return base2.GetDs(strsql); ``` UserType虽是可控的,然而当UserType长度大于6时,后面的部分便被删除掉了。所以实际上这个注入点就变成不可用的了(当然用来跑schoolcode还是非常有用的)。 二、另一个粗暴的注入点 既然上面那个接口无路可走了,那就换个接口再看呗。接下来我将注意力放到了getLessonSchedule这个接口上。原因嘛,很简单:既然程序员很会“过滤”,那就来个参数多的,说不定有没有过滤的参数呢。 不多说看图,3个参数长度被限制,而另几个并没有限制参数长度!经过查看后面的代码可知userId这个参数带入了查询且未限制长度!尝试构造下查询参数试试呗(一些基本的判断略) [<img src="https://images.seebug.org/upload/201506/290126598224f6cd6f3619f7071f2c0925c65eb3.jpg" alt="9.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/290126598224f6cd6f3619f7071f2c0925c65eb3.jpg) [<img src="https://images.seebug.org/upload/201506/290128547634829d8cde5eded1886ba387f07191.jpg" alt="10.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/290128547634829d8cde5eded1886ba387f07191.jpg) 到这里已经成功利用了这个注入点! 三、sqlmap大法 为了可以方便快速地获取数据,我写了一个专用的tamper脚本(代码附在下面的测试代码中),用来跑数据。测试截图:(测试参数: ``` -r C:/Kingo.txt --tamper kingobypass.py --technique=U --dbms=mssqlserver --union-cols="4" --prefix="'" --suffix=";--</userId>|n| <optPassWord xsi:type=\"xsd:string\">test</optPassWord>|n| <param xsi:type=\"xsd:string\">KingoAutoInjection</param>" ``` ) 新疆大学(学校代码:10755) [<img src="https://images.seebug.org/upload/201506/29013450ef782e63fa3edfd611263eb0d3a83bed.jpg" alt="11.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/29013450ef782e63fa3edfd611263eb0d3a83bed.jpg) [<img src="https://images.seebug.org/upload/201506/290136060ab9393b984061f03f090b8ed520745b.jpg" alt="12.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/290136060ab9393b984061f03f090b8ed520745b.jpg) 中原工学院(学校代码:10465) [<img src="https://images.seebug.org/upload/201506/29015016a32607745da995c719b85f1a5f5073f7.jpg" alt="13.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/29015016a32607745da995c719b85f1a5f5073f7.jpg) [<img src="https://images.seebug.org/upload/201506/29015240d0ea754f2604f4735110c944dab42fee.jpg" alt="14.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/29015240d0ea754f2604f4735110c944dab42fee.jpg) 厦门软件职业技术学院(学校代码:14059) [<img src="https://images.seebug.org/upload/201506/2902113558fb11b0e3e1c8adeb8f8895c3fedf8f.jpg" alt="15.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/2902113558fb11b0e3e1c8adeb8f8895c3fedf8f.jpg) [<img src="https://images.seebug.org/upload/201506/290211461e7f96e209b1c03f661ee49282a07c72.jpg" alt="16.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/290211461e7f96e209b1c03f661ee49282a07c72.jpg) ``` 如需要更多测试成功案例,可联系我 ``` ### 漏洞证明: 新疆大学(学校代码:10755) [<img src="https://images.seebug.org/upload/201506/29013450ef782e63fa3edfd611263eb0d3a83bed.jpg" alt="11.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/29013450ef782e63fa3edfd611263eb0d3a83bed.jpg) [<img src="https://images.seebug.org/upload/201506/290136060ab9393b984061f03f090b8ed520745b.jpg" alt="12.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/290136060ab9393b984061f03f090b8ed520745b.jpg) 中原工学院(学校代码:10465) [<img src="https://images.seebug.org/upload/201506/29015016a32607745da995c719b85f1a5f5073f7.jpg" alt="13.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/29015016a32607745da995c719b85f1a5f5073f7.jpg) [<img src="https://images.seebug.org/upload/201506/29015240d0ea754f2604f4735110c944dab42fee.jpg" alt="14.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/29015240d0ea754f2604f4735110c944dab42fee.jpg) 厦门软件职业技术学院(学校代码:14059) [<img src="https://images.seebug.org/upload/201506/2902113558fb11b0e3e1c8adeb8f8895c3fedf8f.jpg" alt="15.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/2902113558fb11b0e3e1c8adeb8f8895c3fedf8f.jpg) [<img src="https://images.seebug.org/upload/201506/290211461e7f96e209b1c03f661ee49282a07c72.jpg" alt="16.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/290211461e7f96e209b1c03f661ee49282a07c72.jpg)