科技行者

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

知识库

知识库 安全导航

至顶网软件频道[Sql server]应用程序中的高级SQL注入(11)

[Sql server]应用程序中的高级SQL注入(11)

  • 扫一扫
    分享文章到微信

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

SQL是一种用于关系数据库的结构化查询语言。它分为许多种,但大多数都松散地基于美国国家标准化组织最新的标准SQL-92。

作者:aspcool 来源:aspcool 2007年9月15日

关键字: 注入 数据库 SQL Server SQL Server 各版本

  • 评论
  • 分享微博
  • 分享邮件
长度限制]

为了给攻击者更多的困难,有时输入数据的长度是被限制的。当这个阻碍了攻击时,一个小的SQL可以造成很严重的危害。例如:

Username:'';shutdown—

这样只用12个输入字符就将停止SQL SERVER实例。另一个例子是:

drop table <tablename>

如果限定长度是在过滤字符串后应用将会引发另一个问题。假设用户名被限定16个字符,密码也被限定16个字符,那么下面的用户名和密码结合将会执行上面提到的shutdown命令:

Username:aaaaaaaaaaaaaaa''

Password:''; shutdown—

原因是应用程序尝试去过滤用户名最后的单引号,但是字符串被切断成16个字符,删除了过滤后的一个单引号。这样的结果就是如果密码字段以单引号开始,它可以包含一些SQL语句。既然这样查询看上去是:

select * from users where username=''aaaaaaaaaaaaaaa'''' and password='''''';shutdown—

实际上,查询中的用户名已经变为:

aaaaaaaaaaaaaaa'' and password=''

因此最后的SQL语句会被执行。

[审计]

SQL SERVER包含了丰富的允许记录数据库中的各种事件的审计接口,它包含在sp_traceXXX类的函数中。特别有意思的是能够记录所有SQL语句,然后在服务器上执行的T-SQL的事件。如果这种审计是被激活的,我们讨论的所有注入的SQL查询都将被记录在数据库中,一个熟练的数据库管理员将能够知道发生了什么事。不幸地,如果攻击者追加以下字符串:

Sp_password

到一个Transact-SQL语句中,这个审计机制记录日志如下:

--''sp_password'' was found in the text of this event.

-- The text has been replaced with this comment for security reasons.

这种行为发生在所有的T-SQL日记记录中,即使''sp_password''发生在一个注释中。这个过程打算通过sp_password隐藏用户的密码,但这对于一个攻击者来说是非常有用的方法。

因此,为了隐藏所有注入,攻击者需要简单地在''—''注释字符后追加sp_password,例如:

Username:admin''—sp_password

事实上一些被执行的SQL将被记录,但是查询本身将顺利地从日志中消失。

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

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

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