var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-333696-1']); _gaq.push(['_trackPageview']); _gaq.push(['_trackPageLoadTime']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();
  • 2010年09月02日

    预防SQL注入(4)

    分类:

    微软SQL Server SQL 注入PHP+MySQL环境下SQL Injection攻防总结

     

    PHP SQL Injection中提及若干预防原则:

    1.    从不以超级用户或数据库拥有者连接数据库。总以最小权限用户连接。

    2.    检查用户输入是否是想要的数据类型。

    3.    如果应用程序等待数据输入,则考虑验证它是数据。

    4.    把用户提供的每个非数字值加引号转义。

    5.    不打印出任何数据库信息,尤其是schema

    6.    你可以使用存储过程或预定义游标以抽象数据库访问。

    7.    启用数据库查询日志。

     

    Asp.Net则有How To: Protect From SQL Injection in ASP.NETGuard Against SQL Injection Attacks

     

    Java则有Preventing SQL Injection in Java

  • 2010年09月01日

    预防SQL注入(3)

    分类:

    对传入的用户输入的参数进行检查,至少用存储过程+参数验证,更好微软SQL Server和则分别用T-SQL和带authid语句的PL/SQL(参考How to write SQL injection-proof PL/SQL)。微软SQL ServerMySQL对应枚举语句EXEC sp_helptext SP_StoredProcedure;SHOW procedure STATUS;/SHOW CREATE procedure sp_name;

     

    开源软件Yasca/Pixy(作用PHP 4/AppCodeScan/LAPSE(作用Java/SWAAT/Microsoft Source Code Analyzer for SQL Injection(作用ASP)/ CAT.NET x86,x64可用做静态源码安全审查。商用的则有IBM Rational AppScan Source Edition/Fortify 360 Source Code Analyzer/CodeSecure

     

    Stacked Queries(在一个事务中执行多于一个的查询)

    微软SQL Server中的xp_cmdshell,如http://www.victim.com/products.asp=id=1;exec+master..xp_cmdshell+'dir',支持情况详见cheatsheet

     

    数据库版本查询

     

     

    枚举数据库

    微软SQL Server存放于master..sysdatabases表中,MySQL则是information_schema详见cheatsheet,Oracle则是user_tables/all_tables

  • 2010年08月20日

    预防SQL注入(1)

    分类:

    这些漏洞主要公开在两处站点:最主要的在美国政府支持站点Common Vulnerabilities and Exposures(CVE)搜索关键字SQL injection,列出5260SQL注入漏洞;另一个在站点Exploit Database的分栏Web Application Exploits内。

     

    SQL Injection Attacks and Defense(电子版)中对此做了介绍。

    SQL拼接

    http://www.victim.com/products.php?val=100’ OR ‘1’=’1

    构建的查询:SELECT *FROM ProductsTbl WHERE Price < '100.00' OR '1'='1' ORDER BY ProductDescription;

    select * from tbUser where name='admin' or 1=1 --' and password='11'

    SQL中“--”为注释

     

    动态SQL语句

    query = "SELECT * FROM table WHERE field = '" +request.getParameter("input") + "'";

    构建的查询:SELECT * FROM TABLE WHERE FIELD = 'input'

    需要先对input进行验证和编码:

    1.不正确处理转义字符(Escape Characters)

    SQL认为单引号(')内是数据,是代码和数据的分隔符,于是可以在URL或网页/应用程序提交区域输入它以判断是否存在SQL注入漏洞。Oracle中转义字符有空白字符( )、双管道字符(||)、逗号(,)、点号(.)(*/)和双引号(")

    2.不正确处理类型

    数据不应该被引用符号包裹。MySQL有函数LOAD_FILE,这时如果构建查询:SELECT * FROM TABLE WHERE USERID = 1 UNION ALL SELECT LOAD_FILE('/etc/passwd')--,而执行此查询的用户对文件/etc/passwd有权限,这时就会产生漏洞,此外MySQL还有函数SELECT INTO OUTFILE也能。

    3.不正确处理查询集

    攻击者可以操控HTTP请求并且替换用户名、密码等字段。如

    $SQL = "SELECT $_GET["column1"], $_GET["column2"], $_GET["column3"] FROM $_GET["table"]";

    http://www.victim.com/user_details.php?table=users&column1=user&column2=password&column3=Super_priv请求。

    4.不正确错误处理

    出错时显示内部错误,如数据库转储(主要用作数据库备份)和错误代码

    5.不正确多重提交

    白名单验证许可字符输入,黑名单验证恶意字符输入,有时开发人员会忘记验证。如两个表单,每个表单会有各自的验证项,攻击者可以输入http://www.victim.com/form.php?form=form2&param='绕过第一个表单此时开发人员以为无需再在第二个表单验证第一个表单项了。

     

    不安全的数据库配置

    1.微软SQL Server非著名用户saMySQL"root"和匿名用户,Oracle默认用户SYSSYSTEMDBSNMOOUTLN

    2.数据库服务应以非权限用户运行,创建SELECT,INSERT, UPDATE, DELETE, EXECUTE和类似权限用户具有单一和最小化权限。元数据能帮助攻击者知晓是否还有其他数据库或者数据表,如MySQL Server保存在INFORMATION_SCHEMA虚数据库中,它可以通过SHOW DATABASESSHOW TABLES访问;微软SQL Server INFORMATION_SCHEMA 系统数据库(sysobjects, sysindexkeys, sysindexes, syscolumns, systypes) 系统存储过程,SQL Server 2005引入了一些叫"sys.*"的目录(catalog)视图能限制权限用户访问的对象;Oracle提供了不少全局内建视图以访问元数据(ALL_TABLES, ALL_TAB_COLUMNS等等),这些视图都能被当前用户访问。

  • 2010年08月18日

    三款MySQL管理工具简介

    分类:

    虽然MySQL Workbench取代了MySQL GUI Tools但《MySQL Admin Cookbook》(电子版)还是认为老版本工具更好。

     

    商用软件有Navicat PremiumSQLyog,这两个工具有个千秋,但使用后感觉还是SQLyog更强大点,其中SQLyog HTTP Tunneling是一项不得不说的亮点:照文IIS上安装PHP(2)设置好全局FastCGI handler mapping for PHP之后,新建一个PHP站点,为运行SQLyog HTTP Tunneling,把SQLyogTunnel.php放入PHP站点所在物理路径下,如照文Using SQLyog with HTTP Tunneling中图2的地址改成http://localhost:81/SQLyogTunnel.php,就可以通过这个webservice对需要的mysql数据库进行操作。

     

    MySQL参考手册可以找到较全的MySQL语法和调优知识。

  • 2008年11月17日

    SQL开发辅助工具

    分类:

    SoftTreeSQL Assistant,支持Oracle, SQL Server, DB2, Sybase, MS Access, PostgreSQLMySQL

     

    Red GateSQL Prompt仅支持MS SQL Server,它对SQL Server功能支持比上个工具更好。