科技行者

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

知识库

知识库 安全导航

至顶网软件频道SQL Server应用程序高级SQL注入(上)(3)

SQL Server应用程序高级SQL注入(上)(3)

  • 扫一扫
    分享文章到微信

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

SQL是一种用于关系数据库的结构化查询语言。它分为许多种,但大多数都松散地基于美国国家标准化组织最新的标准SQL-92。典型的执行语句是query,它能够收集比较有达标性的记录并返回一个单一的结果集。

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

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

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

出现问题的地方是process_lgin.asp中产生查询语句的部分:

Var sql="select * from users where username='"+username+"' and password='"+password+"'";

如果用户输入的信息如下:

Username:';drop table users— 
Password:

数据库中表users将被删除,拒绝任何用户进入应用程序。'—'符号在Transact-SQL中表示忽略'—'以后的语句,';'符号表示一个查询的结束和另一个查询的开始。'—'位于username字段中是必须的,它为了使这个特殊的查询终止,并且不返回错误。

攻击者可以只需提供他们知道的用户名,就可以以任何用户登陆,使用如下输入:

Username:admin'—

攻击者可以使用users表中第一个用户,输入如下:

Username:' or 1=1—

更特别地,攻击者可以使用完全虚构的用户登陆,输入如下:

Username:' union select 1,'fictional_user','some_password',1—

这种结果的原因是应用程序相信攻击者指定的是从数据库中返回结果的一部分。

通过错误消息获得信息

这个几乎是David Litchfield首先发现的,并且通过作者渗透测试的;后来David写了一份文档,后来作者参考了这份文档。这些解释讨论了‘错误消息‘潜在的机制,使读者能够完全地了解它,潜在地引发他们的能力。

为了操作数据库中的数据,攻击者必须确定某些数据库和某些表的结构。例如我们可以使用如下语句创建user表:

以下为引用的内容:

Create talbe users( 
Id int, 
Username varchar(255), 
Password varchar(255), 
Privs int 
)

然后将下面的用户插入到users表中:

以下为引用的内容:

Insert into users values(0,'admin','r00tr0x!',0xffff) 
Insert into users values(0,'guest','guest',0x0000) 
Insert into users values(0,'chris','password',0x00ff) 
Insert into users values(0,'fred','sesame',0x00ff)
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

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

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