2006-11-28

SQL概述及在网络安全中的应用(上)

来源: 赛迪 作者:yuanye 评论 0 条
 

假如strUsername和strPassword变量可以包含任何你要的字符,你可以修改当前的SQL查询结构,那样即使你不知道有效的用户名和密码,你仍何以得到一个有效的name,它是如何实现的呢?让我们假设用户像下面那样填充了一个登陆表单:

  Login: ' OR ''=' 

  Password: ' OR ''='

这将给SQLQuery以下值:

SELECT Username FROM Users WHERE Username = '' OR ''='' AND Password = '' OR ''=''

请求并不把用户提交的数据与现存的Users表单做比较,而是直接比较''和'',显然它总是返回true,(注重nothing和null是有区别的)由于WHERE语句中的所有验证条件都符合了,用户名将使用表单中搜索到的第一行中的那个,接着用户名将被传递给变量strAuthCheck,这样我们的效力就得以保证。使用single result cycling技术,也有可能使用另外一行的数据,这将在以后讨论。

3.2 SELECT

对于另一些情况而言,你必须根据查询那些有缺陷的web程序返回的结果,来判定和调整你提交的SQL查询字符串,以便搞定服务器.

3.2.1 直接利用单引号

你将面临的第一个错误是语句结构错误.一个结构错误表明SQL查询的语句结构存在缺陷.首先你应该明白,在没有编码引号的情况下, 插入脚本攻击是否可以成功.

直接SQL注射的时候,无论你提交什么语句都会被不加任何改变地应用于SQL查询中.试着提交参数的时候,先输入合法的值,然后在其后添加一个空格和一个OR,假如服务器产生了错误,那么直接SQL注射是可能的.提交的值可以是任何WHERE子句中用到的值,例如:

  SQLString = "SELECT FirstName, LastName,

     Title FROM Employees WHERE Employee = " & intEmployeeID

或者是紧跟于一个SQL要害字,例如表名或者表里的栏目名,比如

  SQLString = "SELECT FirstName, LastName, 

   Title FROM Employees ORDER BY " & strColumn

所有其他的例子都是引号注射,在一个存在引号插入漏洞的程序里面, 任何一个你提交的参数,系统都会在前面和后面添加一个引号,就像这样:

  SQLString = "SELECT FirstName, LastName, 

   Title FROM Employees WHERE EmployeeID = '" & strCity & "'"

为了能(break out)打破这引号,并伪造一个正确的查询,在你的SQL注射字符串中的SQL要害字之前必须包含一个单引号,而且在WHERE子句的后面也需要加上一个单引号.现在我们来谈谈"欺骗"的问题.是的,SQL SERVER会忽视在";--"后面的任何东西,但是只有MS的SQL SERVER会这样做.我们最好学习如何处理这个问题,这样我们在面对Oracle,DB/2,MySQL 和他种类的数据库服务器的时候就知道怎么做了.
共4页: 上一页 [1] [2] 3 [4] 下一页

(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:利用Xdebug和Komodo调试PHP应用程序  
下一篇:SQL注入奇招致胜 Union查询轻松看电影
    评论加载中…
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号