Ajax时代 SQL注入依然是隐患

许多网站程序在编写时,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户能够提交一段数据库查询代码(通常是在浏览器地址栏进行,经过正常的www端口访问),根据程序返回的结果,得到某些想得知的数据,这就是所谓的SQL Injection,即SQL注入。html

    SQL注入经过网页对网站数据库进行修改。它可以直接在数据库中添加具备管理员权限的用户,从而最终得到系统管理员权限。黑客能够利用得到的管理员权限任意得到网站上的文件或者在网页上加挂木马和各类恶意程序,对网站和访问该网站的网友都带来巨大危害。web

在咱们的实际生活中,寻找“ajax+sql注入”的例子并不困难,并且其寻找过程也很简单,只需通过如下五个步骤便可:ajax

    1, 搜索“用户注册”,搜索出来的记录一个一个打开。sql

    2, 测试是否使用了Ajax。数据库

    3, 找到check页面。浏览器

    4, 在check页面里的提交用户名参数那里,给用户名作下手脚而后在地址栏从新提交。安全

    5, 若是发现500错误(web服务器默认错误—服务器内部错误),就说明他存在注入漏洞。服务器

    按照上面的步骤,居然发现了某大型IT网站的注入漏洞!步骤写的简单,具体的方法也有取巧的部分,首先打开找到的网页(固然是用户注册页面),输入会员名称。继续输入密码,弹出消息框:异步

 

Ajax的做用就在于“不刷新的状况下,异步传输数据,通过服务器处理后,获得返回信息,提示给用户”。看到这个消息框,我第一个想到的就是Ajax。前面说过,在检测的时候,能够取巧,取巧的地方就在过程当中最复杂的地方“翻看源代码”。若是每一个网页都看看源代码,而后找js写的方法(函数),再经过方法(函数)找check页面,那还不把人累死。因而我想到了“WinSock Expert v0.6 beta1”,这个工具能够截取应用程序经过tcp或udp传输的数据,浏览器访问网站的数据固然可以截获:jsp

    1, 关闭全部的浏览器,而后打开一个浏览器访问“用户注册页面”,即上一个截图给出的页面。这样作是为了在选择进程时,只能看到一个IE进程。

    2, 先不要输入用户名,打开“WinSock Expert v0.6 beta1”。单击:

 

 

    3, 能够看到全部当前运行的进程,选中浏览器“IEXOLORE.EXE”。选择右下角的“open” :

 

 

    4, 这个界面就是截获数据的界面,并且如今已经开始截获数据,因此不要再去访问任何页面。

    5, 回到浏览器页面,输入用户名“fdsa”(随便找个必定能被人使用的,好比admin也能够)后把光标移到密码输入框。弹出本文第一个图片所示消息框“对不起,此用户已经被人使用”,不要点肯定。

    6, 再回到“WinSock Expert v0.6 beta1”工具界面看到有三条数据:

 

 

    7, 第一个和最后一个,不去管它,由于它们没有访问页面。单看第2条数据。ID是指序号;status指状态,这里三条都是发送的数据(send);packetshex是发送数据的16进制编码,看不懂不须要看;packets text就是咱们可以看懂的东西了;address固然是服务器ip地址。

    8, 选中第二条数据,由于这条数据的第一行显示“GET /checkuser2”,表示数据是以“GET”形式提交给服务器,也就是说这条信息是IE刚才提交的数据,因此咱们查看它。

 

 

9, 选中后就能在软件最下面的地方看到数据。复制出来解释给你们:

 

 

    详细参数请参照HTTP头的文章,这里只解释能用到的:

    第一行是IE访问的页面“/checkuser2.jsp?checkemail=fdsa”,以及IE是以GET形式提交的数据,刚输入的用户名“fdsa”。

    10, 打开http://pass.****.com.cn/checkuser2.jsp?checkemail=fdsa,弹出消息框。

    11, 果真能够在这里提交参数,把“fdsa”替换为“fdsa’”提交:

 

 


    12, 500错误页面,存在SQL注入!

    看似很麻烦,有12步,可是比找代码要简单的多,直接获取了check页面,和参数。

    分析服务器返回页面的代码:

 

 

    既然肯定存在注入漏洞,就要找他页面上的Ajax,以便分析出结后写文章用。查找注册页面上的“会员名”,查看输入框代码:

 

 调用了RegCheckUserExist2方法,搜索方法找不到记录。说明是包含了js文件,搜索“<script>”,获取js文件:

 

 

    注意我描红的地方,RegCheckUserExist2方法在/js/chkcus.js文件里,代码:

 

 

    Form是在调用RegCheckUserExist2时传入的参数,整个流程以下:

 

 

    由于提交是在一个隐藏的iframe(宽和高都是0),因此咱们看不到页面刷新,是个伪Ajax。可是其效果和Ajax同样,都是在用户不知道的状况下给服务器提交,只是Ajax是异步的,在提交验证的时候用户感受不到,而这里是同步的,用户要等待返回结果后,才能进行下一步操做。即便这里用了Ajax,仍然会存在sql注入漏洞,缘由是问题出在服务器的验证这里。我本来打算写的“ajax可能引起的注入漏洞”和这里所具有的环境基本类似。这有点相似于面向对象里的继承,一个父类存在漏洞,伪Ajax和Ajax两个类都继承了类(这个漏洞),虽然他们都重写了“验证的过程”

相关文章
相关标签/搜索