许多网站程序在编写时,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码(一般是在浏览器地址栏进行,通过正常的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. 一个不错的图片滑动展示插件 anythingslider

    一个不错的图片http://css-tricks.com/anythingslider-jquery-plugin/ DEMO演示: http://css-tricks.github.io/Anyth ...

  2. gc overhead limit exceeded

    eclipse-- gc overhead limit exceeded 修改内存不足的方法如下: Eclipse报错:gc overhead limit exceeded eclipse 原因是Ec ...

  3. ios实现截屏(转)

    -(UIImage*) makeImage {  UIGraphicsBeginImageContext(self.view.bounds.size);  [self.view.layer rende ...

  4. 转Spring+Hibernate+EHcache配置(二)

    Spring AOP+EHCache简单缓存系统解决方案 需要使用Spring来实现一个Cache简单的解决方案,具体需求如下:使用任意一个现有开源Cache Framework,要求可以Cache系 ...

  5. spoj 416

    又臭又长的烂代码 ...... #include <iostream> #include <cstdio> #include <cstring> #include ...

  6. Akka官方文档翻译:Cluster Specification

    参加了CSDN的一个翻译项目,翻译Akka的文档.CSDN提供的翻译系统不好使,故先排版一下放在博客上. 5.1 集群规范 注意:本文档介绍了集群的设计理念.它分成两部分,第一部分描述了当前已经实现的 ...

  7. Samza在YARN上的启动过程 =》 之二 submitApplication

    首先,来看怎么构造一个org.apache.hadoop.yarn.client.api.YarnClient class ClientHelper(conf: Configuration) exte ...

  8. python的web压力测试工具-pylot安装使用

    http://blog.csdn.net/chenggong2dm/article/details/10106517 pylot是python编写的一款web压力测试工具.使用比较简单.而且测试结果相 ...

  9. C++转换unicode utf-8 gb2312编码

    windows开发环境下用VC++6.0 对unicode .utf-8. gb2312 三种编码格式之间的转换方法: #include <iostream> #include <s ...

  10. C++ 嵌套类使用(三)

    如果嵌套类型和其外部类型之间的关系需要成员可访问性语义,需要使用C++嵌套类,嵌套类型不应针对其声明类型以外的类型执行任务,而C++局部类允许类.结构和接口被分成多个小块儿并存储在不同的源文件中,这样 ...