科技行者

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

知识库

知识库 安全导航

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

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

  • 扫一扫
    分享文章到微信

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

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

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

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

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

例如,攻击者可能利用下面的信息在应用程序中注册:

Username:admin''—

Password:password

应用程序正确过滤了单引号,返回了一个类似这样的insert语句:

insert into users values(123,''admin''''—'',''password'',0xffff)

我们假设应用程序允许用户修改自己的密码。这个ASP脚本程序首先保证用户设置新密码前拥有正确的旧密码。代码如下:

username = escape( Request.form("username") );

oldpassword = escape( Request.form("oldpassword") );

newpassword = escape( Request.form("newpassword") );

var rso = Server.CreateObject("ADODB.Recordset");

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

rso.open( sql, cn );

if (rso.EOF)

{

设置新密码的代码如下:

sql = "update users set password = ''" + newpassword + "'' where username = ''" + rso("username") + "''"

rso("username")为登陆查询中返回的用户名

当username为admin''—时,查询语句为:

update users set password = ''password'' where username=''admin''—''

这样攻击者可以通过注册一个admin''—的用户来根据自己的想法来设置admin的密码。

这是一个非常严重的问题,目前在大型的应用程序中试图去过滤数据。最好的解决方法是拒绝非法输入,这胜于简单地努力去修改它。这有时会导致一个问题,非法的字符在那里是必要的,例如在用户名中包含''符号,例如

O''Brien

从一个安全的观点来看,最好的解答是但引号不允许存在是一个简单的事实。如果这是无法接受的话,他们仍然要被过滤;在这种情况下,保证所有进入SQL查询的数据都是正确的是最好的方法。

如果攻击者不使用任何应用程序莫名其妙地往系统中插入数据,这种方式的攻击也是可能的。应用程序可能有email接口,或者可能在数据库中可以存储错误日志,这样攻击者可以努力控制它。验证所有数据,包括数据库中已经存在的数据始终是个好的方法。确认函数将被简单地调用,例如:

if(not isValid("email",request.querystring("email"))) then

response.end

或者类似的方法。

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

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

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