现在很多人在入侵的过程中基本都是通过SQL注入来完成的,但是有多少人知道为什么会有这样的注入漏洞呢?有的会随口说着对于字符的过滤不严造成的。但是事实是这样吗?我们学这些,不仅要知其然,更要知其所以然!理论联系实际,才能对我们技术的提高有所帮助。

工具/原料

  • SQL注入工具

步骤/方法

    1. 1

      SQL 注入,由于程序在实际使用中,为了管理庞大的数据信息,就会使用到数据库。数据库可以方便程序对所有数据信息进行统一的存储和分类组织,便于查询更新。用 户在使用程序时,程序可以自动通过对数据库的查询,将所获得的信息按照一定格式反馈给用户,同时用户也是通过交互式的对话框提交给程序数据,从而使程序按 照用户想要的信息进行查询,反馈给用户想要的信息。
      对于程序这种数据库操作,先来看一段代码:
      strKeyword = Request ["keyword"];
      sqlQuery = "SELECT * FROM Aritcles WHERE Keywords LIKE '%" +strKeyword + "%'";

      段代码的主要目的是按照用户提交的关键字Keyword,对软件连接数据库中的文件进行搜索,找出所有包含用户关键字的文章来。假设此时,我们提交给软件
      “hack”这个数据,这时,“hack”这个关键字就会被传递给Keyword关键变量。接下来看看代码的执行情况,keyword获得数据
      “hack”后,被赋值给strKeyword变量,然后strKeyword变量被放入查询语句,此时的查询语句表现为:"SELECT * FROM
      Aritcles WHERE Keywords LIKE
      '%hack%'",这个查询语句的意思就是从数据库Aritcles表中查询出所有包含“hack”这个关键字的文章。注意“hack”这个单词是我们
      提交给程序的,因此可以对其随意修改的。于是,可以这样修改,把它变为“hack'; DROP TABLE Aritcles; --”。
      现在
      看看程序会怎样处理这个外部关键字数据。首先,查询语句变成了:“SELECT * FROM Aritcles WHERE Keywords
      LIKE '%hack%'; DROP TABLE Aritcles; --”,我们知道DROP
      TABLE语句是在数据库操作中删除一个指定的表的意思,现在那个查询语句的意思就变了,以中间的分号为标志,分成两个部分,首先还是正常的查出所有包含
      hack关键字的文章。但是接下来……
      由于程序使用的数据库是微软的SQL
      SERVER,该数据库支持多命令语句执行,这些数据库操作的命令语句都是由分号分隔开,然后依次执行的。这里的“DROP TABLE
      Aritcles; --”是一个完全合法的命令语句,“--”符号是SQL
      SERVER数据库特有注释标识,数据库不执行任何命令。这样,当这段查询语句执行时,就会去执行一个删除Aritcles表的数据库命令。
      像这样,通过控制传递给程序数据库操作语句的关键变量来获得恶意控制程序数据库,从而获取有用信息或者制造恶意破坏的,甚至是控制用户计算机系统的漏洞,就称之为“SQL注入漏洞”。
      SQL注入漏洞完全是利用了将包含了某种目的的SQL语句,通过关键变量插入到程序中正常的数据库操作语句里。程序一旦发生注入漏洞,就会引发一系列安全隐患。
      SQL注入漏洞是不分语言的,无论用什么语言开发的程序,只要涉及对数据库的操作,都可能存在SQL注入漏洞。虽然有时会因为编写语言的要求,或者程序设置环境的不同,导致SQL注入漏洞很难被常用的方法利用,但是总可以找到突破的方法。

    2. 2

      下面以网站程序为例,看一看SQL注入漏洞最经常被利用的地方,也是危害最大的地方。

      知道对于一个网站来说,可以说数据库存放着网站所有的信息,WEB应用程序完全是凭借数据库中的信息进行正常的运行的。一个网站程序中,最关键的一个部分
      就是对用户的合法性的判断,也就是看访问它的用户是不是一个注册的用户。这个时候,就会要求输入用户名和密码,然后根据输入的信息查询数据库,判断是否存
      在用户,并检查密码是不是一致,如果一致则承认合法用户,否则将给予非法提示。下面看一段常常出现在论坛程序中的用户认证程序代码:
      (1)admin1 = trim(request("name"))
      (2)password1 = trim(request("password"))
      (3)Set rs = Server.CreateObject ("ADODB.Recordset")
      (4)sql = "select * from userlogin where name='"&admin1&"' and password='"&password1&"'"
      (5)rs.Open sql,conn,1,1
      (6)if rs.eof and rs.bof then
      (7)response.write"<SCRIPT language=JavaScript>alert('用户名或密码不正确!')"
      (8)response.write"javascript:history.go(-1)</SCRIPT>"
      (9)response.end
      (10)else
      (11)session("name")=rs("name")
      (12)session("password")=rs("password")
      (13)response.Redirect("default.asp")
      (14)end if
      这段程序的第1和第2行分别通过Request对象获得用户名和密码,第3行是建立一个数据库操作集对象,第4行就是将用户名以及密码同时作为查询条件放入到userlogin表中进行查询,第5到第14行就是根据查询结果进行判断,弹出警告窗口,或者重定向网页。

      设数据库中有个用户guest,密码123456,那么该用户登录时,认证代码中的第4行则变为:sql = "select * from
      userlogin where name='guest' and
      password='123456'",这是一个合法查询语句,所以用户能正常登录,反之则登录不了。
      看起来这是一个比较严格的认证代码,但是事实呢?
      现在,我们用户名提交“'or 1='1”,密码也是一样,同样也会成为合法用户,这是为什么?

      我们提交表单后,代码通过Request对象获得提交的用户名'or 1='1以及密码'or
      1='1后,直接将这些数据放入了第4行的查询语句中,于是变成了这样:sql = "select * from userlogin where
      name=''or 1='1' and password=''or
      1='1'"。我们先看1='1',这个绝对永远为真,如果你说假,那么你回小学学数学吧,学好再来看吧,呵呵~注意在大马前面还有一个or,这代表者
      1='1'是作为一个条件选择语句放入数据库查询的,这样无论查询语句中的用户名和密码是否正确,都会因为or后面的1='1'代码,导致查询语句返回值
      永远为真,这样就是绕过了看似严格的用户认证,获得了合法的权限。

简单分析什么是SQL注入漏洞的更多相关文章

  1. 浅谈SQL注入漏洞以及防范策略

    --HeShiwei 2014-5-15 什么是SQL注入 SQL注入,指的是用户通过向登录框输入恶意字符,利用代码的字符串拼接漏洞进行网站注入攻击,最终导致整个网站用户表信息泄露的攻击方式.黑客就是 ...

  2. 什么是简单的分析SQL注入漏洞

    如今非常多人在入侵的过程中基本都是通过SQL注入来完毕的,可是有多少人知道为什么会有这种注入漏洞呢?有的会随口说着对于字符的过滤不严造成的. 可是事实是这样吗?我们学这些.不仅要知其然.更要知其所以然 ...

  3. DM企业建站系统v201710 sql注入漏洞分析 | 新版v201712依旧存在sql注入

    0x00 前言 本来呢,这套CMS都不想审的了.下载下来打开一看,各种debug注释,排版烂的不行. 贴几个页面看看 感觉像是新手练手的,没有审下去的欲望了. 但想了想,我tm就是新手啊,然后就继续看 ...

  4. Vtiger CRM 几处SQL注入漏洞分析,测试工程师可借鉴

    本文由云+社区发表 0x00 前言 干白盒审计有小半年了,大部分是业务上的代码,逻辑的复杂度和功能模块结构都比较简单,干久了收获也就一般,有机会接触一个成熟的产品(vtiger CRM)进行白盒审计, ...

  5. [代码审计]DM企业建站系统v201710 sql注入漏洞分析 | 新版v201712依旧存在sql注入

    0x00 前言 本来呢,这套CMS都不想审的了.下载下来打开一看,各种debug注释,排版烂的不行. 贴几个页面看看 感觉像是新手练手的,没有审下去的欲望了. 但想了想,我tm就是新手啊,然后就继续看 ...

  6. Joomla CMS 3.2-3.4.4 SQL注入 漏洞分析

    RickGray · 2015/10/26 11:24 昨日,Joomla CMS发布新版本3.4.5,该版本修复了一个高危的SQL注入漏洞,3.2至3.4.4版本都受到影响.攻击者通过该漏洞可以直接 ...

  7. PHPCMS \phpcms\modules\member\index.php 用户登陆SQL注入漏洞分析

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述2. 漏洞触发条件 0x1: POC http://localhost/p ...

  8. 【代码审计】五指CMS_v4.1.0 copyfrom.php 页面存在SQL注入漏洞分析

      0x00 环境准备 五指CMS官网:https://www.wuzhicms.com/ 网站源码版本:五指CMS v4.1.0 UTF-8 开源版 程序源码下载:https://www.wuzhi ...

  9. 【代码审计】五指CMS_v4.1.0 后台存在SQL注入漏洞分析

      0x00 环境准备 五指CMS官网:https://www.wuzhicms.com/ 网站源码版本:五指CMS v4.1.0 UTF-8 开源版 程序源码下载:https://www.wuzhi ...

随机推荐

  1. 在Eclipse中使用Propertites Editor插件来解决property文件中文显示乱码

    在一般情况下,propertites文件在eclipse中的显示中文一直显示乱码,想要解决这个问题,需要通过在eclipse中安装一个Propertites Editor插件来进行解决. 在Eclip ...

  2. AngularJS 基础

    1. AngularJs 是一个JS 框架,是一种基于MVC的设计模式 2. script 需引用 <script src="angular.min.js">,安装包 ...

  3. redis 资料链接

    redis 资料链接  http://blog.nosqlfan.com/html/3537.html

  4. 原码 & 反码 & 补码 & 详解

    本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...

  5. 提升SQL Server速度整理索引碎片

    转载:http://wenku.baidu.com/view/f64c8a707fd5360cba1adbea.html SQL Server2005索引碎片分析和解决方法   毫无疑问,给表添加索引 ...

  6. java 页面换行处理

    在taxtarea中输入的文本.如果含有回车或空格.在界面上显示的时候则不哪么正常.回车消失了,空格变短了. 如何解决这个问题呢.有2种方法. 1.使用<pre>标签 w3c对pre元素是 ...

  7. 原 Linux搭建SVN 服务器

    原 Linux搭建SVN 服务器 发表于1年前(2014-08-05 17:55)   阅读(12257) | 评论(3) 31人收藏此文章, 我要收藏 赞3 摘要 Linux搭建SVN 服务器 目录 ...

  8. ZOJ 3778 Talented Chef(找规律,模拟计算,11届ACM省赛,简单)

    题目链接 2014年浙江省赛C题,当时觉得难,现在想想这题真水.. 找规律: 若   最大的那个步骤数*m-总和>=0,那么答案就是 最大的那个步骤数 . 否则  就要另加上不够的数量,具体看代 ...

  9. SPOJ 3643 /BNUOJ 21860 Traffic Network

    题意:现在已有m条单向路,问在给你的k条双向路中选择一条,使得s到t的距离最短 思路:设双向路两端点为a,b;长度为c. s到t的有三种情况: 1:原本s到t的路径 2:从s到a,a到b,b再到t的路 ...

  10. Linux开机启动流程

    开机过程指的是从打开计算机电源直到LINUX显示用户登录画面的全过程:       1)加载BIOS       2)读取MBR       3)Boot Loader       4)加载内核    ...