freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

    常见SQL注入方法整理系列-初始篇
    2017-08-31 00:22:13

    前面介绍了MSSQL、MYSQL以及ORACLE的一些涉及安全体系的基本知识,且当作知识的积累或者温故吧。本篇主要介绍这三种数据库的攻击手法,力求形成一套攻击流程,当然流程是死的,在真实的攻击环境中还是需要发挥聪明才智的,所以也且当作参考笔记吧。

    发现SQL注入漏洞

    万事开头难,SQL注入攻击同样如此。给定一个WEB站点URL,发现该站点SQL注入漏洞最快的方法莫过于使用扫描工具,最有效的我自认为是查看应用程序源代码。然而工具往往不是万能的,查看源代码寻找注入漏洞的机会通常也是没有的,所以此时手工探测注入漏洞就显得格外重要了。

    经典方法

    相信听说过SQL注入攻击的,都知道最经典的探测方法。这里假设存在一个GET请求的连接http://www.sqltest.com/sql.php?id=1,则经典的做法如下:

    http://www.sqltest.com/sql.php?id=1and 1=1

    http://www.sqltest.com/sql.php?id=1and 1=2

    如果and 1=1页面响应与正常请求一样,and 1=2页面返回异常信息出错,OK,基本可以断定存在SQL注入漏洞。

    利用字符串连接符号

    SQL Server、ORACLE以及MYSQL的字符串连接符各不相同,利用这一点不同可以用来识别各自的SQL注入漏洞。向Web服务器发送下面两个请求:

    http://www.sqltest.com/sql.php?name=jack

    http://www.sqltest.com/sql.php?name=ja’+’ck

    如果两个请求结果相同,则很可能存在SQL注入漏洞,且数据库为SQL Server。同理:

    http://www.sqltest.com/sql.php?name=jack

    http://www.sqltest.com/sql.php?name=ja’||’ck

    http://www.sqltest.com/sql.php?name=jack

    http://www.sqltest.com/sql.php?name=ja’‘ck

    两个请求结果相同,则可能存在SQL注入漏洞,且数据库为ORACLE与MYSQL。

    数据库错误

    通过发送意外的数据产生数据库异常错误来寻找SQL注入漏洞,WEB产生数据库错误有很大的可能存在数据库错误。

    最简单的方法是发送一个单引号,如下:

    http://www.sqltest.com/sql.php?id=1’

    WEB服务器利用用户的输入构造一条SQL查询语句,由于引号的存在导致SQL语法错误,服务器返回语法错误信息,根据这条信息我们就有很大可能判定存在SQL注入漏洞。

    既然这里发送的请求包含意外的数据,那么这种数据如何构造,如何发送呢?在构造意外数据前有必要了解一下WEB环境的客户端/服务器架构。浏览器(客户端)向服务器发送请求并等待响应。服务器接收请求产生响应,并返回客户端。很明显,双方必须存在某种方式的约定,这就是HTTP协议。

    HTTP协议定义了很多客户端发送数据的方式,本手册我们只关注两种最有用也是最常见的方式:GET和POST。所以制造意外数据就是修改在GET和POST请求中提交的数据。如果浏览器禁止修改数据或者对输入的数据的大小有限制怎么办?遇见这种情况我们只需要通过一个代理服务器来解决就可以了,比如安装一下Fidler工具,利用代理工具除了修改GET和POST数据外,还可以修改一些隐藏域或者Cookie的值,这些地方也经常存在SQL注入漏洞。

    异常数据产生的异常响应被服务器返回后要及时捕获。产生的数据库错误信息是我们判断SQL注入漏洞的根据,这里对常见的数据库错误不详细说明,遇到具体情况具体分析,至于利用数据库错误的攻击手法,后面会有介绍。

    补充说明

    其实发现SQL注入漏洞的过程就是不断修改自己提交的数据,探测其是否能够在服务器上执行,这也是SQL注入攻击的本质。其实经典方法,字符串连接符号都是如此,不过对返回的结果需要我们判断一下。这里补充一些符号、关键字,这些符号、关键字都可以用于判断SQL注入漏洞,至于怎么探测,就需要点聪明才智了。

    [关键字]

    and;or;having;group by;order by;is;in;between and;not;like;regexp;

    [符号]

    <=>;<=;!<;!=;!>;=;<>;>=;^=;>>;<<;<;>;+;-;*;/;%;&;|;^;~;!;&&;||;

    这些关键字未区分数据库,有选择使用。如mysql中可以这样使用:

    http://www.sqltest.com/sql.php?id=1&& 2|1;

    如果页面返回正常,那么有很大可能存在SQL注入漏洞。


    本文作者:, 转载请注明来自FreeBuf.COM

    # 渗透测试 # SQL注入 # 信息安全工程师 # 小白
    被以下专辑收录,发现更多精彩内容
    + 收入我的专辑
    评论 按时间排序

    登录/注册后在FreeBuf发布内容哦

    相关推荐
    • 0 文章数
    • 0 评论数
    • 0 关注者
    登录 / 注册后在FreeBuf发布内容哦
    收入专辑