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

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

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

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

2, 测试是否使用了Ajax。

3, 找到check页面。

4, 在check页面里的提交用户名参数那里,给用户名做下手脚然后在地址栏重新提交。

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

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

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

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两个类都继承了类(这个漏洞),虽然他们都重写了“验证的过程”

Ajax时代 SQL注入依然是隐患的更多相关文章

  1. php CI框架中URL特殊字符处理与SQL注入隐患

    php CI框架中URL特殊字符处理与SQL注入隐患 php CI框架中URL特殊字符有很多是不支持的,导致像c++,括号这些常用的分类,字符都无法正常显示很头痛,而在配置里增加单引号' 反斜杠\ 这 ...

  2. 跨域、sql注入、xss攻击

    这几天遇到这三个问题,现在简单的记录下来. 1.跨域 如我服务器的域名是www.test1.com,我在另一个服务器www.test2.com通过ajax访问www.test1.com的数据时,就引起 ...

  3. 开发反模式 - SQL注入

    一.目标:编写SQL动态查询 SQL常常和程序代码一起使用.我们通常所说的SQL动态查询,是指将程序中的变量和基本SQL语句拼接成一个完整的查询语句. string sql = SELECT * FR ...

  4. 【转载】以Java的视角来聊聊SQL注入

    以Java的视角来聊聊SQL注入 原创 2017-08-08 javatiku Java面试那些事儿 在大二就接触过sql注入,之前一直在学习windows逆向技术,认为web安全以后不是自己的从业方 ...

  5. sql注入、csrf

    ◎sql注入产生的原因?又如何防御sql注入? SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用 ...

  6. Java学习之路- SQL注入

    用户名: __________ 密码:——————— 假如没有使用预处理的Statement 对象 拼接字符串查数据库的话,易收到sql注入攻击: 例如说 : mysql 中   #代表的是单行注释 ...

  7. PHP查询登录中的sql注入

    ---------------------------------------------------------------------------------------------------- ...

  8. 关于SQL注入,你应该知道的那些事

    戴上你的黑帽,现在我们来学习一些关于SQL注入真正有趣的东西.请记住,你们都好好地用这些将要看到的东西,好吗? SQL注入攻击因如下几点而是一种特别有趣的冒险: 1.因为能自动规范输入的框架出现,写出 ...

  9. Web安全篇之SQL注入攻击

    在网上找了一篇关于sql注入的解释文章,还有很多技术,走马观花吧 文章来源:http://www.2cto.com/article/201310/250877.html ps:直接copy,格式有点问 ...

随机推荐

  1. WPF中的多点触摸事件

    UIElement在WPF4下添加了很多支持多点触摸的事件,通过它们可以在硬件支持的情况下处理多点触摸,以下通过代码来说明通过处理这些事件,我们可以做些什么: 一.触摸相关的多种事件,跟鼠标事件是对应 ...

  2. 1090. Highest Price in Supply Chain (25)

    时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A supply chain is a network of r ...

  3. mysql ab 压力测试的解读(转)

    本文转自:http://www.cnblogs.com/lemtree/articles/1676641.html. 就是APACHE自带的测试工具AB(apache benchmark).在APAC ...

  4. Flashback删除(闪回删除)

    oracle 9i以前,当drop一个表时,到该表的所有引用都会从数据字典中删除. oracle 10g及以后,当drop一个表时,数据库根本没有删除表,而只是重命名了并放入了回收站.即当发出drop ...

  5. 如何将无线路由器作为交换机,将光猫(路由器A)分出来的一条网线接到自家另一台路由器B上,最大化利用网络资源

    从隔壁邻居只接了一条网线过来,由于无线网络的距离有限,不能覆盖到家里任何角落,然而,我又想家里一台台式电脑和无线设备都能够连接wifi进行上网。 摸索了一个上午,知道将家里的无线路由器B当作一个无线A ...

  6. C# Windows - TextBox 控件

    .NET Framework内置了两个基本控件来提取用户输入的文本: TextBox和RichTextBox.这两个控件都派生于基类TextBoxBase,而TextBoxBase派生于Control ...

  7. 在PyCharm里配置SubVersion

    1.如果PyCharm不支持svn ,那么下载svn命令行安装包,下载地址:http://sourceforge.net/projects/win32svn/ 例如:安装到 D:\software\s ...

  8. php数组内容分页的例子(转)

    php数组内容分页代码 时间:2016-03-04 23:46:34来源:网络 导读:php数组内容分页代码,当前页如果大于总页数,当前页为最后一页,分页显示时,应该从多少条信息开始读取数据.   p ...

  9. Samba出现“您可能没有权限使用网络资源”解决方法

    我最近在Centos6.3上搭建Samba系统,按照配置都已经配置好了,当就是没法在win7下访问,老是弹出以下弹出框: 后来我在网上找资料发现有SELinux这么个东西,然后我就按照配置该了一下就成 ...

  10. mysql 增加删除用户

    mysql 增加用户 (注意:因为MYSQL环境中的命令,所以后面都带一个分号作为命令结束符) 格式:grant select on 数据库.* to 用户名@登录主机 identified by ' ...