• 浪牛三刀   2015/9/4 0:00:00
  • 网站常见漏洞之-SQL注入原理以及如何避免注入
  • 关键字: SQL注入 网站漏洞 DDOS攻击
  • SQL注入:到底什么时候会用到SQL呢?回答是访问数据库的时候,也就是说SQL注入-->直接威胁到了数据源,呵呵,数据库都收到了威胁,网站还能正常现实么?


    所谓SQL注入,就是通过把SQL命令插入到Web 表单 提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。 [1] 比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到 SQL注入式攻击 .


    根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。基于此,SQL注入的产生原因通常表现在以下几方面:①不当的类型处理;②不安全的 数据 库配置;③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。


    注入方法:


    1.猜表名,列名等


    先猜表名
    And (Select count(*) from 表名)0
    猜列名
    And (Select count(列名) from 表名)0
    或者也可以这样
    and exists (select * from 表名)
    and exists (select 列名 from 表名)
    返回正确的,那么写的表名或列名就是正确


    2.后台身份验证绕过漏洞
    验证绕过漏洞就是'or'='or'后台绕过漏洞,利用的就是AND和OR的运算规则,从而造成后台脚本逻辑性错误
    例如管理员的账号密码都是admin,那么再比如后台的数据库查询语句是

    1
    2
    3
    user=request("user")
    passwd=request("passwd")
    sql='select admin from adminbate where user='&'''&user&'''&' and passwd='&'''&passwd&'''


    那么我使用'or 'a'='a来做用户名密码的话,那么查询就变成了

    1
    select admin from adminbate where user=''or 'a'='a' and passwd=''or 'a'='a'


    这样的话,根据运算规则,这里一共有4个查询语句,那么查询结果就是 假or真and假or真,先算and 再算or,最终结果为真,这样就可以进到后台了


    如何预防 呢?归纳一下,主要有以下几点:


    1.永远不要信任用户的输入。对用户的输入进行校验,可以通过 正则表达式 ,或限制长度;对单引号和
    双"-"进行转换等。
    2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用 存储过程 进行数据查询存取。
    3.永远不要使用 管理员 权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
    4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
    5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的 错误信息 对原始错误信息进行包装
    6.sql注入的检测方法一般采取辅助 软件 或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思 网站安全 平台检测工具。MDCSOFT SCAN等。采用 MDCSOFT-IPS 可以有效的防御SQL注入,XSS攻击等。
    等待试验........