查看: 9060|回复: 0

安全测试之SQL注入

[复制链接]
  • TA的每日心情
    开心
    2015-9-8 13:06
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2012-8-4 12:30:18 | 显示全部楼层 |阅读模式
    安全性测试是指机密的数据确保其机密性以及用户只能在其被授权的范围进行操作的这样一个过程

    例如:
             a 机密内容不暴露给不被授权的个人或用户实体
             b 用户不能单方面有权限屏蔽掉网站的某一功能

    安全性测试有哪些方面?

    SQL Injection( SQL 注入)

    Cross-site script(XSS)  (跨站点脚本攻击)

    CSRF   (跨站点伪造请求)

    URL跳转

    Directory Traversal   (目录遍历)

    Email Header Injection   (邮件标头注入)

    exposed error messages(错误信息)


    SQL Injection应该称为SQL指令植入式攻击,它是描述一个利用写入特殊SQL程序码攻击应用程序的动作.

    用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入.

    如何判断sql注入存在的情况

    通常情况下,SQL注入一般存在于带有参数传递的URL页面
        例如:HTTP://xxx.xxx.xxx/abc.asp?id=XX

    有时一个动态网页中可能只有一个参数,有时可能有N个参数,有时是整型参数,有时是字符串型参数,不能一概而论。总之只要是带有参数的动态网页且此网页访问了数据库,那么就有可能存在SQL注入。
         例如: 搜索页面
                      登录页面
                      提交评论页面等等.


    判断过程:

    带有参数传递的URL:
    http://aipai.163.com/s/trade/orderDetail/?orderId=183004
    提交查询的数据库SQL为:
    select * from order where id=183004.
    测试SQL注入是否存在方法:
    1、附加一个单引号  : ’http://...ail.htm?oid=183004
    查询的SQL:select * from orders where id=183004’运行异常
    2、附加 “and 1=1”http://...ail.htm?oid=183004and 1=1,
    查询的SQL: select * from orders where id=183004and 1=1  运行正常
    3、附加“and 1=2” http://...ail.htm?oid=183004and1=2,
    查询的SQL: select * from orders where id=183004and 1=2 运行异常
    如果以上三步骤全面满足,那么一定存在SQL注入漏洞。

    如何进行sql注入的测试?

    对于未明显标识在URL中传递参数的,可以通过查看HTML源代码中
    的"FORM"标签来辨别是否还有参数传递.

    注:在<FORM>和</FORM>的标签中间的每一个参数传递都有可能被利用.
    <form action=“http://www.baidu.com" method="get">
    <div>
    <lab<input type="text" name="yourname" value=""/>
    el>用户名</label>
    <label>密码</label>
    <input type="password" name="yourpwd" value=""/>
    <input type="submit" value="提交">
    </div>
    </form>
    常用的SQL注入语句

    根据实际情况,SQL注 入请求可以使用以下语句:

    返回的是连接的数据库名 and db_name()>0
    作用是获取连接用户名 and user>0
    将数据库备份到Web目录下面 ;backup database 数据库名 to disk='c:\inetpub\wwwroot\1.db';--
    显示SQL系统版本 and 1=(select @@VERSION) 或and 1=convert(int,@@version)—
    ' or 1=1- -
    " or 1=1- -
    or 1=1- -
    ' or 'a'='a
    " or "a"="a
    ') or ('a'='a

    如何防止SQL注入?

    从应用程序的角度来讲,我们要做以下三项工作:
    1、转义敏感字符及字符串,SQL的敏感字符包括:
    “exec”,”xp_”,”sp_”,”declare”,”Union”,”cmd”,”+”,”//”,”..”,”;”,”‘”,”--”,”%”,”0x”,”><=!-*/()|”,和”空格”).
    2、屏蔽出错信息:阻止攻击者知道攻击的结果
    3、在服务端正式处理之前提交数据的合法 性(数据类型,数据长度,敏感字符的校验)

    从测试人员的角度来讲,在程序开发前(即需求阶段),我们就应该有意识的将安全性检
    查应用到需求测试中,例如对一个表单需求进行检查时,我们一般检验以下 几项安全
    性问题:
    1、需求中应说明表单中某一FIELD的类型,长度,以及取值范围(主要作用就是禁止输入敏感字符)
    2、需求中应说明如果超出表单规定的类型,长度,以及取值范围的,应用程序应给出不
    包含任何代码或数据库信息的错误提示.
    当然在执行测试的过程中,我们也需求对上述两项内容进行测试.


    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    指导单位

    江苏省公安厅

    江苏省通信管理局

    浙江省台州刑侦支队

    DEFCON GROUP 86025

    旗下站点

    邮箱系统

    应急响应中心

    红盟安全

    联系我们

    官方QQ群:112851260

    官方邮箱:security#ihonker.org(#改成@)

    官方核心成员

    Archiver|手机版|小黑屋| ( 苏ICP备2021031567号 )

    GMT+8, 2024-5-15 09:23 , Processed in 0.026216 second(s), 11 queries , Gzip On, MemCache On.

    Powered by ihonker.com

    Copyright © 2015-现在.

  • 返回顶部