科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道SQL概述及在网络安全中的应用(上)(3)

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

有些网络数据库没有过滤客户提供的数据中可能有害的字符,SQL注射就是利用插入有害字符进行攻击的技术。

作者:yuanye 来源:赛迪网技术社区 2007年9月7日

关键字: 安全 数据库 SQL Server SQL Server 各版本

  • 评论
  • 分享微博
  • 分享邮件
 

当一个用户提交了一个用户名和密码后,查询(query)将搜索Users表单来看是否其中有一行中所包含的用户名和密码与用户提供的相同,如果找到了那么一行,则用户名被储存到变量strAuthCheck中,同时说明该用户应该被鉴定,如果没有找到那么一行,则strAuthCheck变量保持为空,同时该用户不被鉴定。

如果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
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章