用户
搜索
  • TA的每日心情
    开心
    2018-10-19 16:14
  • 签到天数: 279 天

    连续签到: 1 天

    [LV.8]以坛为家I

    i春秋作家

    Security Personnel

    Rank: 7Rank: 7Rank: 7

    153

    主题

    1335

    帖子

    2087

    魔法币
    收听
    0
    粉丝
    150
    注册时间
    2015-11-4

    幽默灌水王突出贡献春秋文阁春秋巡逻热心助人奖

    zusheng i春秋作家 Security Personnel 幽默灌水王 突出贡献 春秋文阁 春秋巡逻 热心助人奖 楼主
    发表于 2016-8-21 16:13:42 48100207
    作者:zusheng
    时间:2016年8月8日 11:03:56
    社区:i春秋

    前言

    前面我们学习了如何寻找,确认,利用SQL注入漏洞的技术,本篇文章我将介绍一些更高级的技术,避开过滤,绕开防御。有攻必有防,当然还要来探讨一下SQL注入防御技巧。

    目录


    第五节 避开过滤方法总结
    • 5.1、大小写变种
    • 5.2、URL编码
    • 5.3、SQL注释
    • 5.4、空字节
    • 5.5、二阶SQL注入
    第六节 探讨SQL注入防御技巧
    • 6.1、输入验证
    • 6.2、编码输出





    正文

    • 第五节 避开过滤方法总结

    Web应用为了防御包括SQL注入在内的攻击,常常使用输入过滤器,这些过滤器可以在应用的代码中,也可以通过外部实现,比如Web应用防火墙和入侵防御系统。避开过滤的方法是灵活的,本节我总结了一些常用的技巧。在我们不知道过滤规则的时候可以尝试一下。


    5.1、大小写变种

    这种技巧适用于关键字阻塞过滤器不聪明的时候,我们可以变换关键字字符串中字符的大小写来避开过滤,因为使用不区分大小写的方式处理SQL关键字。
    例如:(下面的代码就是一个简单的关键字阻塞过滤器)
    [PHP] 纯文本查看 复制代码
    function waf($id1){
        if(strstr($id1,'union')){
            echo 'error:lllegal input';
            return;
        }
        return $id1;
    }

    这段代码的缺陷就在strstr()函数是对大小写敏感的,所以我们可以通过大小写变种来绕过。

    I1.gif



    5.2、URL编码

    URL编码用途广泛,可以通过它绕过多种类型的输入过滤器。
    [PHP] 纯文本查看 复制代码
    function waf($id1){
        if(strstr($id1,' ') || strstr($id1,'/**/')){
            echo 'error:lllegal input';
            return;
        }
        return $id1;
    }
    双URL编码有时候会起作用,如果Web应用多次解码,在最后一次解码之前应用其输入过滤器。
    I1.gif
    因为双URL编码,第一次解码%2f%2a进入输入过滤器,所以成功绕过了。当然这个使用前提是后面有一个URL解码。

    5.3、SQL注释

    很多开发人员认为,将输入限制为单个就可以限制sql注入攻击,所以他们往往就只是阻止各种空白符。
    [PHP] 纯文本查看 复制代码
    function waf($id1){
        if(strstr($id1,' ')){
            echo 'error:lllegal input';
            return;
        }
        return $id1;
    }

    但是内联注释不使用空格就可以构造任意复杂的SQL语句。


    I1.gif

    5.4、空字节


    通常的输入过滤器都是在应用程序之外的代码实现的。比如入侵检测系统(IDS),这些系统一般是由原生编程语言开发而成,比如C++,为什么空字节能起作用呢,就是因为在原生变成语言中,根据字符串起始位置到第一个出现空字节的位置来确定字符串长度。所以说空字节就有效的终止了字符串。

    只需要在过滤器阻止的字符串前面提供一个采用URL编码的空字节即可,例如:
    [SQL] 纯文本查看 复制代码
    %00' union select username,password from users where username='admin' -- 



    5.5、二阶SQL注入
    实际上到目前为止,你在网上大部分搜索SQL注入文章 基本都可以归类到"一阶(first-order)"SQL注入中,因为这些例子涉及的事件均发生在单个HTTP请求和响应中,如下所示:



    (1) 攻击者在HTTP请求中提交某种经过构思的输入。

    (2) 应用处理输入,导致攻击者注入的SQL查询被执行。

    (3) 如果可行的话,会在应用对请求的响应中向攻击者返回查询结果。

    另一种不同的SQL注入攻击是"二阶(second-order)"SQL注入,这种攻击的事件时序通常如下所示:

    (1) 攻击者在HTTP请求中提交某种经过构思的输入。

    (2) 应用存储该输入(通常保存在数据库中)以便后面使用并响应请求。

    (3) 攻击者提交第二个(不同的)请求。

    (4) 为处理第二个请求,应用会检索已经存储的输入并处理它,从而导致攻击者注入的SQL查询被执行。

    (5) 如果可行的话,会在应用对第二个请求的响应中向攻击者返回查询结果。

    从字面上来看二阶SQL注入对于新手很难理解,所以我来介绍一个经典的例子帮助大家理解。

    这是一个个人信息应用程序,我们可以更新我们的用户名,也可以查看我们的个人信息。


    第二步查看我们个人信息时的SQL语句:
    [SQL] 纯文本查看 复制代码
    select * from users where username = '$name'

    查询的语句所用到的变量name就是从数据库提取到的我们的用户名,所以我们可以先利用更新我们的用户名功能插入语句进数据库。

    这样查看我们个人信息的时候就成功执行了我们的SQL注入攻击。

    例如:我们在用户名插入
    [SQL] 纯文本查看 复制代码
    zusheng' or  '1'='1

    那么后面我们就执行了语句
    [SQL] 纯文本查看 复制代码
    select * from users where username = 'zusheng' or '1'='1'



    • 第六节 探讨SQL注入防御技巧

    6.1、输入验证

    输入验证是指要验证所有应用程序接收到的输入是否合法。


    有两中不同类型的输入验证方法:白名单和黑名单验证


    白名单验证:比如id值,那么我们判断它是否为数字。


    黑名单验证:使用正则表达式禁止使用某些字符和字符串


    应该尽量使用白名单,对于无法使用白名单的,使用黑名单提供局部限制。


    6.2、编码输出

    我们除了要验证应用程序收到的输入以外,还要对数据进行编码,这样不仅可以防御SQL注入攻击,还能防止出现其他问题,比如XSS。






    结束语

    因为本人技术有限,所以对防御技巧了解并不是深入,希望有更好防御技巧的小伙伴可以分享一下心得,我会将收到的技巧加入本文,提供给更多的小伙伴进行参考,谢谢了。


    系列文章预告及导航

    渗透攻防Web篇-SQL注入攻击初级(状态:已更新)
    • 第一节 注入攻击原理及自己编写注入点
    • 第二节 寻找及确认SQL注入
    渗透攻防Web篇-SQL注入攻击中级(状态:已更新)
    • 第三节 利用SQL注入
    • 第四节 SQL盲注利用


    评分

    参与人数 3魔法币 +110 价值分 +14 收起 理由
    cxf210 + 5 感谢你的分享,i春秋论坛有你更精彩!.
    acecttgd + 5 感谢发布原创作品,i春秋论坛因你更精彩!.
    坏蛋 + 100 + 14 价值分奖励

    查看全部评分

    本帖被以下淘专辑推荐:

    Hacking the earth.My Blog:https://isbase.cc
    坏蛋 管理员 欢迎大家来春秋群找我玩
    来自 10#
    发表于 2016-8-23 09:17:58
    作者
    帖子链接
    评估分数(0-3分)
    原创性
    标题
    排版
    内容要求
    内容深度
    内容趣味性
    点评
    总分
    奖金
    zusheng
    渗透攻防Web篇-SQL注入攻击高级
    评估分数(0-3分)
    2
    2
    3
    2
    2
    3
    防御这块有点少,完善一些更好。
    14
    110元

    欢迎加入i春秋QQ群大家庭,每人只能任选加入一个群哦!
    投稿请加QQ:780876774。

    i春秋—楚:713729706
    i春秋—魏:687133802
    网安交流群:820783253
    使用道具 举报 回复
    对小白来说,看着是挺受用的,不过看到后面还是看得好懵啊。这个应该怎么学习比较好一点呢?
    使用道具 举报 回复
    发表于 2016-11-21 00:24:48
    Holle,everybody! I am AuThor!请大家多多关注,同时也多多关照!(勿喷)
    Holle,everybody! I am AuThor!请大家多多关注,同时也多多关照!(勿喷)
    使用道具 举报 回复
    发表于 2017-2-21 07:32:37
    感谢分享!希望能提供一下server端的源码!!谢谢!!
    使用道具 举报 回复

    回帖是中华传统美德,嗯,一定要发扬光大
    使用道具 举报 回复

    回帖是中华传统美德,嗯,一定要发扬光大
    使用道具 举报 回复
    刚入门SQL注入,感谢楼主的帖子,很实用!
    使用道具 举报 回复
    刚入门SQL注入,感谢楼主的帖子,很实用!
    使用道具 举报 回复
    发表于 2018-11-18 13:44:04

    刚入门SQL注入,感谢楼主的帖子,很实用!
    使用道具 举报 回复
    沙发
    不求甚解觅慧识,繁华落尽见真淳。
    使用道具 举报 回复
    坏蛋 管理员 欢迎大家来春秋群找我玩
    板凳
    发表于 2016-8-21 17:57:42
    光速板凳
    欢迎加入i春秋QQ群大家庭,每人只能任选加入一个群哦!
    投稿请加QQ:780876774。

    i春秋—楚:713729706
    i春秋—魏:687133802
    网安交流群:820783253
    使用道具 举报 回复
    发表于 2016-8-21 18:12:14
    ../.-../---/...-/./-.--/---/..-至死不渝  [ I春秋首席文艺范儿 ]
    使用道具 举报 回复
    发表于 2016-8-21 21:05:21
    使用道具 举报 回复
    发表于 2016-8-21 21:29:13
    哟西哟西思密达,你滴良心大大地好
    就算你是憨豆你也有悲伤的时候。
    Even if you are the bean you also have sad when.
    使用道具 举报 回复
    发表于 2016-8-21 22:44:10
    666666666666
    使用道具 举报 回复
    发表于 2016-8-22 00:39:32
    学习学习
    使用道具 举报 回复
    发表于 2016-8-22 16:36:15
    膜拜大神!!
    使用道具 举报 回复
    发表于 2016-8-23 10:15:45
    66666666666
    使用道具 举报 回复
    发表于 2016-8-24 12:12:01
    找渗透工程师  QQ83725402,联系我,主要是安全方面
    使用道具 举报 回复
    发表于 2016-8-24 13:33:24
    谢谢楼主,谢谢楼主
    使用道具 举报 回复
    发表于 2016-8-24 14:54:02
    健康和快乐就来看看
    使用道具 举报 回复
    发表于 2016-8-24 15:25:49
    收益了,谢谢
    使用道具 举报 回复
    1234下一页
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册