SQL注入其实很简单,别一不留神就被利用了

SQL注入这个词相信大家应该都不陌生,而且每年都会有这样子的事情发生,下面我先带大家回忆11年两期起比较经典的案例事件:

1、SONY索尼事件
2011年4月,著名的×××组织Anonymous***SONY一个网站,一星期后才被发现7千万的用户个人信息,其中包括姓名、地址、E-mail、出生日期、用户名、密码以及购买记录的数据信息,随后的一些其他服务器也被相继攻破

2、CSDN数据泄露门
2011年底,国内各大网站被爆出“密码泄露门”,最先公布的是著名技术网站CSDN600万账户和密码泄露事件,网站由于存在SQL注入漏洞被×××者利用并下载用户数据库,同时令人不解的是,网站对用户的信息储存竟然是明文

什么是sql注入

SQL注入指的是发生在Web应用对后台数据库查询语句处理存在的安全漏洞,简单的说,就是在输入字符串中嵌入SQL指令,在设计程序中忽略了对特殊字符串的检查,这些嵌入的指令便会被误认为正常的SQL指令,在数据库中执行,因此可以对后台数据库进行查看等工作,甚至破快后台数据库造成严重后果。
目前SQL注入大致分为普通注入和盲注

  • 普通注入:根据后台数据库提示有价值的错误信息进行注入
  • 盲注:有经验的管理员在给出错误页面时,没有提供详细的错误信息。×××者需要运用脚本通过仅有的判断信息(比如时间差)对表中的每一个字段进行探测,从而实现注入的技术。
    (盲注的难度较大,但×××测试中经常会遇到)

SQL注入普遍的思路

  • 发现SQL注入位置
  • 判断后台数据库类型
  • 确定XP_CMDSHELL可执行情况
  • 发现WEB虚拟目录
  • 上传ASP×××
  • 得到管理员权限

SQL注入技术

  • 强制产生错误
  • 采用非主流通道技术
  • 使用特殊的字符
  • 使用条件语句
  • 利用存储过程
  • 避开输入过滤技术
  • 推断技术

普通注入示例

以著名的IBM公司所提供的SQL注入测试平台

我们在这个网站上发现了一个登录的页面,现在我们在表单中的Username中输入“admin‘”,Password中输入一样的字段

点击‘Login’登录按钮后,我们得到了一个报错的页面,根据提示“Syntax error (missing operator) in query expression ‘username = ‘admin‘‘ AND password = ‘admin‘‘‘.”我们可以猜测到大概的SQL语句应该是“select * from [users] where username=? and password=?”

我们返回登录页面在Username和Password中输入“admin‘ or ‘1”然后再点击登录,我们就能意外的进入到登录页面之后了

是不是还是一脸懵,现在我们来解释一下为什么会这样,之所以能够登陆成功,是因为SQL的语句变成一下的语句:
select * from [users] where username= ‘admin‘ or ‘1‘ and password=‘admin‘ or ‘1‘
根据SQL中逻辑运算的优先级,or低于and,最后的or ‘1’永远成立,所以该条件表达式结果为True,此语句同等于下面的这条语句
select * from [users]

SQLmap工具注入示例

这个页面通过了一次提交之后,我们得到了几个信息,一个是提交的地址,还有就是cookie值,我们通过这几个信息使用sqlmap工具项检测一下有没有sql的注入点

从检测的结果中,我们看到了包含错误的SQL注入点,以及UNION查询注入点,此外,还进一步的探测到了数据库的版本是MySQL5.0的,Web应用平台是PHP5.3.2/Apache2.2.14

使用SQLmap的“--dbs”选项,就可以根据所识别的不同数据库管理平台类型来探测包含的数据库名称,除了发现MySQL默认的系统数据库information_schema之外,我们还发现了Web应用的数据库dvwa

使用“-D dvwa --tables”选项指定了数据库,然后获得了此数据库下的所有表,竟然表我们都能看到了,接下来我们来看看表里得到内容吧

加上“-D dvwa --tables -T users --columns --dump”选项前面的-D选项指定数据库,后面-T指定表,最后我们看到了表中的内容,从中我们看到了一个admin的账户,将password放到在线解密MD5的网站上,我们的到密码就是admin,拿着这个账号密码,轻松的进入到后台中

SQL注入如何防范

通过一开始的两起案件和后面我所示范的简单注入,相信大家应该知道SQL的注入该有多危险了吧,下面给大家普及几点防范SQL注入的方法:

输入验证

检查用户输入的合法性,确信输入的内容只包含合法的数据。数据检查应当在客户端和服务器端都执行之所以要执行服务器端验证,是为了弥补客户端验证机制脆弱的安全性。

错误消息处理

防范SQL注入,还要避免出现一些详细的错误消息,因为×××们可以利用这些消息。要使用一种标准的输入确认机制来验证所有的输入数据的长度、类型、语句、企业规则等。

加密处理

将用户登录名称、密码等数据加密保存。加密用户输入的数据,然后再将它与数据库中保存的数据比较,这相当于对用户输入的数据进行了“消毒”处理,用户输入的数据不再对数据库有任何特殊的意义,从而也就防止了×××者注入SQL命令。

存储过程来执行所有的查询

SQL参数的传递方式将防止×××者利用单引号和连字符实施×××。此外,它还使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式×××了。

原文地址:http://blog.51cto.com/13444271/2126594

时间: 2024-09-27 19:14:04

SQL注入其实很简单,别一不留神就被利用了的相关文章

SQL注入语句 (很全)

1.返回的是连接的数据库名and db_name()>02.作用是获取连接用户名and user>03.将数据库备份到Web目录下面;backup database 数据库名 to disk='c:\inetpub\wwwroot\1.db';--4.显示SQL系统版本and 1=(select @@VERSION) 或and 1=convert(int,@@version)--5.判断xp_cmdshell扩展存储过程是否存在and 1=(SELECT count(*) FROM maste

简单SQL注入试探

DVWA--简单SQL注入小记 前不久刚开始接触SQL注入,今天来记录一些最近的一些收获和一些SQL注入方面的知识. 主要是基于DVWA这个开源的平台来进行练习. 废话不多说开始解题. 从简单的SQL injection入手 Level:low 登陆后选择SQL injection 一开始看到一个普通的界面,输入ID进行查询.我们可以先进行简单的测试. 输入 1 and 1=1 和 1 or 1=1 发现搜索的结果是一样的. 于是我们猜测判断类型可能是字符串(后通过源码可查看到,事实也正如此)

SQL注入-攻入Apple ID钓鱼网站实录

之前写的一篇利用SQL注入方式攻击钓鱼网站的文章,现在在博客园再分享一下. 下午,朋友发了一条朋友圈,内容大概这样: 大体就是她的iPhone丢了,收到了钓鱼短信,多么熟悉的套路,如下: 还好她比较机智,发现是个钓鱼网站,地址如下: http://www.apple-icloudid.com.cn 当时看到这件事后,想到之前有巨巨顺势搞定钓鱼网站,所以我也想小试牛刀一下,看看能否攻入钓鱼网站后台. 在试了几轮PHP常见后台地址后,比如/admin,/index.php/admin,均未奏效,索性

深入浅出SQL注入

原文:深入浅出SQL注入 之前在做学生信息管理系统和机房收费系统的时候,对于SQL注入的问题已经是司空见惯,但是并没有真正的地形象生动的理解SQL注入到底是什么玩意儿.直到这次做牛腩才在牛老师的举例之下,明白了原来SQL注入是真的很危险啊. 问题提出: 我们先来构造一个简单的添加新闻类别的程序,在动态网页上添加一个TextBox控件,一个Button控件,一个GridView控件.布局如下图所示: 然后为控件编写代码如下: 先来看SQLHelper类中用来执行sql语句的函数 <span sty

如何防止SQL注入 http://zhangzhaoaaa.iteye.com/blog/1975932

如何防止SQL注入 博客分类: 技术转载数据库 转自:http://021.net/vpsfaq/152.html -----解决方案-------------------------------------------------------- 过滤URL中的一些特殊字符,动态SQL语句使用PrepareStatement.. ------解决方案-------------------------------------------------------- 注入的方式就是在查询条件里加入SQ

转:PHP中防止SQL注入的方法

[一.在服务器端配置] 安全,PHP代码编写是一方面,PHP的配置更是非常关键. 我们php手手工安装的,php的默认配置文件在 /usr/local/apache2/conf/php.ini,我们最主要就是要配置php.ini中的内容,让我们执行 php能够更安全.整个PHP中的安全设置主要是为了防止phpshell和SQL Injection的攻击,一下我们慢慢探讨.我们先使用任何编辑工具打开 /etc/local/apache2/conf/php.ini,如果你是采用其他方式安装,配置文件

SQLServer应用程序的高级Sql注入

[概 要] 这篇文章讨论常用的"sql注入"技术的细节,应用于流行的Ms IIS/ASP/SQL-Server平台.这里探讨有关这种攻击各种可以注入程序访问数据和数据库防范的方法.这篇文章面向两种读者:一是基于数据库web程序开发人员和审核各种web程序的安全专家. [介 绍] 结构化查询语言(SQL)是一种用来和数据库交 互的文本语言SQL语言多种多样,大多的方言版本都共同宽松地遵循SQL-92标准(最新的ANSI标准[译者注:目前最新的是SQL-99]).SQL 运行的典型的操作是

防止SQL注入攻击

SQL注入攻击的危害性很大.在讲解其防止办法之前,数据库管理员有必要先了解一下其攻击的原理.这有利于管理员采取有针对性的防治措施. 一. SQL注入攻击的简单示例. statement := "SELECT * FROM Users WHERE Value= " + a_variable + " 上面这条语句是很普通的一条SQL语句,他主要实现的功能就是让用户输入一个员工编号然后查询处这个员工的信息.但是若这条语句被不法攻击者改装过后,就可能成为破坏数据的黑手.如攻击者在输入

MySQL防范SQL注入风险

0.导读 在MySQL里,如何识别并且避免发生SQL注入风险 1.关于SQL注入 互联网很危险,信息及数据安全很重要,SQL注入是最常见的入侵手段之一,其技术门槛低.成本低.收益大,颇受各层次的黑客们所青睐. 一般来说,SQL注入的手法是利用各种机会将恶意SQL代码添加到程序参数中,并最终被服务器端执行,造成不良后果. 例如,我们访问接口 http://imysql.com/user.php?userid=123 来根据userid获取用户信息,假设程序中是这么处理的: $sql = “SELE