科技行者

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

知识库

知识库 安全导航

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

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

  • 扫一扫
    分享文章到微信

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

一些数据库服务器返回的错误信息中包含了一部分格式错误消息,你可以通过分析这些片断来构造你提交的INJECTION语句,有些你提交的字符串会返回有用的信息,有的却不会,这主要是以来于web应用程序中SQL查询语句是如何设计的.

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

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

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

3.4. SQL服务器存储过程利用

3.4.1 存储过程基础

4. 一个完整安装的MSSQL服务器有上千的存储过程。如果你能在一个后台使用mssql的网页应用程序得到SQL注入,你能使用这些存储过程完成一些非凡的成果。我将讨论很少的特殊的过程。取决于网页程序使用数据库的用户,只有一些可以工作,并不是所有的用户都可以利用。第一件事你应该知道存储过程注入不能通过存储过程的返回值来确定你的注入是否成功.取决于你想完成什么,你可能不需要得到数据。你可以找到返回给你的数据的其他意义。存储过程注入比一般的查询注入要容易些,存储过程的注入的弱点利用看起来象这样。

simplequoted.asp?city=seattle';EXEC master.dbo.xp_cmdshell 'cmd.exe dir c:'

注意,

Notice how a valid argument is supplied at the beginning and followed by a quote and the final argument to the stored procedure has no closing quote. This will satisfy the syntax requirements inherent in most quoted vulnerabilities. You may also have to deal with parentheses, additional WHERE statements, etc.但是在这以后将不需要担心列和数据的类型的匹配。这个可能弱点的输出象程序无法返回错误信息一样。我最喜欢存储过程。

5. 3.4.2. xp_cmdshell

xp_cmdshell {'command_string'} [, no_output]

master.dbo.xp_cmdshell是存储过程的圣杯,它带来了一个问题,能够调用命令行的数据库用户的和他的运行权限,这个并不可用除非这个网页程序使用的数据库用户是SA. 运行级别为6

sp_makewebtask [@outputfile =] 'outputfile', [@query =] 'query'

6. 另外一个好的调用对象是master.dbo.sp_makewebtask,象你所看的,它是一个本地的输出文件和一个SQL statement。sp_makewebtask可以查询并建立一个包含输出的网页。注意你可以象使用一个UNC路径名一样使用一个本地输出。这个意思就是这个输出文件可以放有在任何一台连在Internet并且有个可写的SMB共享(SMB请求不需要任何的身份验证)。如果有一个防火墙限制了服务器对Internet,试着把输出文件放在网页目录下(你要知道或者猜测网页的目录)。同样值得注意的是引用查询可能是 包括执行其他的存储过程。Making "EXEC xp_cmdshell 'dir c:'" 这个查询将在网页中给出"dir c:"的输出。当你进行嵌套引用的时候,记得单独的引用和双引号.

4.1数据处理

所有的客户端数据可以被恶意的提交的字符或字符串清除。这些可能在所有的应用程序做到,不仅仅是使用SQL查询的。Stripping quotes or putting backslashes in front of them is nowhere near enough.最好的过滤数据的方式是不用规则的表达方式,使它只包括你所想要的字符类型。举个例子,下边的regxp将只能返回字母和数字,尽可能的过滤象s/[^0-9a-zA-Z]//g 这样的特殊字符。可能的时候尽量使用数字,在这以后只使用数字和字母。如果你需要包括各种各样的标志或标点。确信完全的把它们转换成html标记,像“"e;" or ">”。例如,一个用户提交了一个email地址只允许使用数字和字母还有"@", "_", "." 和"-"。仅仅只有这些字符可以转换成html标记。

4.2. 编写安全的web程序

这里同样有很少的特殊的sql注入规则。First, prepend and append a quote to all user input。

尽管数据使数字。其次,限制网页应用程序的数据库用户在数据库里的权限。不要给这个用户访问所有的存储过程的权利如果这个用户只需要访问一些预定义的。 这部分包括了所有在sql注入中有用的系统表,你可以在google上搜索到每一个的表的列的定义

5.1. MS SQL Server

  Sysobjects 
    syscolumns

5.2. MS Access Server

  MSysACEs 

  MSysObjects 

  MSysQueries 

  MSysRelationships 

  5.3. Oracle 

  SYS.USER_OBJECTS 

  SYS.TAB SYS.USER_TABLES 

  SYS.USER_VIEWS SYS.ALL_TABLE 

  S SYS.USER_TAB_COLUMNS 

  SYS.USER_CONSTRAINTS SYS.USER_TRIGGERS 

  SYS.USER_CATALOG
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

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

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