有段时间一直热衷于研究各种waf绕过,一般来说,云WAF可以通过找到网站真实IP来绕过,硬件waf也常因为HTTP协议解析差异导致绕过,但是,代码层的防护往往只能从代码逻辑里寻找绕过思路。

在一些网站通常会在公用文件引入全局防护代码,因此,我收集了网络上常见的PHP全局防护代码进行分析。第一次看到safe3的防注入代码,花了不少时间去研究如何绕过,我在笔记里记下了一句话:如果正面怼正则,实在想不到绕过的方式。

直到前几天,我在T00LS论坛里看到有人也问起了同一段防注入代码的绕过方式,在这个帖子的回复了看到了一个绕过姿势。这也正是安全社区最大的魅力,你总会在别人的回复里找到很有意思的思路或技巧。


绕过思路

利用preg_match函数正则匹配的字符串长度限制绕过,PHP5.3之前preg_match函数阈值默认为10w,PHP5.3开始默认值为100w。

测试情况

(1)safe3 防注入代码

<?php//Code By Safe3 ini_set('date.timezone','Asia/Shanghai');function customError($errno, $errstr, $errfile, $errline){    echo "<b>Error number:</b> [$errno],error on line $errline in $errfile<br />";    die();}set_error_handler("customError",E_ERROR);$getfilter="'|select|from|(and|or)\\b.+?(>|<|=|in|like)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";$postfilter="\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";$cookiefilter="\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";function StopAttack($StrFiltKey,$StrFiltValue,$ArrFiltReq){if(is_array($StrFiltValue))    {        $StrFiltValue=implode($StrFiltValue);    }    if (preg_match("/".$ArrFiltReq."/is",$StrFiltValue)==1){        slog("<br><br>操作IP: ".$_SERVER["REMOTE_ADDR"]."<br>操作时间: ".strftime("%Y-%m-%d %H:%M:%S")."<br>操作页面:".$_SERVER["PHP_SELF"]."<br>提交方式: ".$_SERVER["REQUEST_METHOD"]."<br>提交参数: ".$StrFiltKey."<br>提交数据: ".$StrFiltValue);        @header("http/1.1 404 not found");         print "<html><title>404: Not Found</title>";        //slog("<br><br>操作IP: ".$_SERVER["REMOTE_ADDR"]."<br>操作时间: ".strftime("%Y-%m-%d %H:%M:%S")."<br>操作页面:".$_SERVER["PHP_SELF"]."<br>提交方式: ".$_SERVER["REQUEST_METHOD"]."<br>提交参数: ".$StrFiltKey."<br>提交数据: ".$StrFiltValue);        print "<body>Url里含有非法字符串,属于有误操作!... <a href='/'>您还可以返回首页</a></body></html>";  ;exit();    }}//$ArrPGC=array_merge($_GET,$_POST,$_COOKIE);foreach($_GET as $key=>$value){    StopAttack($key,$value,$getfilter);}foreach($_POST as $key=>$value){    StopAttack($key,$value,$postfilter);}foreach($_COOKIE as $key=>$value){    StopAttack($key,$value,$cookiefilter);}function slog($logs){    $toppath=$_SERVER["DOCUMENT_ROOT"]."/log.htm";    $Ts=fopen($toppath,"a+");    fputs($Ts,$logs."\r\n");    fclose($Ts);}?>

(2)构建一个sql注入点

在页面中引入防注入代码:

require_once('360_safe3.php');

当参数中拼接sql语句时,触发关键字正则匹配导致拦截。

(3)绕过姿势

PHP测试版本:5.2.17

当填充字符串超过10w的时候,可以绕过防注入代码,获取数据库信息。

PHP测试版本:5.3.29

当填充字符串超过100w的时候,可以绕过防注入代码,获取数据库信息。

参考文章:

https://www.t00ls.net/viewthread.php?tid=58865

一段困扰许久的防注入代码相关推荐

  1. 数据库安全小白紧急求助论坛大神,困扰许久

    数据库安全小白紧急求助论坛大神,困扰许久 mircosoft SQL server 2008 R2怎样才能逃过甚至杜绝外来IP不断尝试SA密码? 求助各位论坛大神,封闭1433端口,设置数据库访问策略 ...

  2. 防注入php 留言板代码,简单的 php 防注入代码

    简明现代魔法 -> PHP服务器脚本 -> 简单的 php 防注入代码 简单的 php 防注入代码 2010-04-10 介绍两种方法吧,首先请把以下代码保存为safe.php放在网站根目 ...

  3. PHP之SQL防注入代码,PHP防XSS 防SQL注入的代码

    360提示XSS漏洞?这个XSS漏洞很不好修复.....如果是PHP程序的话,可以用下面的代码来过滤... PHP防XSS 防SQL注入的代码 class protection{public stat ...

  4. 360 safe3.php源码,360提供的Php防注入代码

    360提供的Php防注入代码 //Code By Safe3 function customError($errno, $errstr, $errfile, $errline) { echo &quo ...

  5. 困扰许久的文泉驿显示慢问题终于解决了

    前言:很久没写了.5月忙着申请Google Summer of Code,六月忙着申请实习,现在忙着实习,果然,blog只有闲着的时候才能写-- 现在在 北京千橡实习中,做ATL/WTL,一切都还算顺 ...

  6. 一个困扰许久的Word嵌入文档问题(求助)

    最近碰到个Word问题,研究了很久,一直没能解决,看各位读者朋友,能不能提供一些更好的解决方案. 软件信息:Microsoft Word 2016(正式版) (1)操作 将某个word或者excel文 ...

  7. 纯属巧合,解决了一个困扰许久的问题,关于网卡设置时提示“系统找不到指定文件”。

    两年前arp病毒泛滥,我就装了一个arp防火墙,,,结果导致系统出问题不能正常使用,自动卸载无效换成手动卸载. 之后就出现头痛的问题-- 不能设置网卡,包括DNS.IP地址.掩码.网关以及是否自动获取 ...

  8. 困扰许久的Kafka Rebalance问题

    前提 本文的分析基于kafka 0.9版本的client, 0.10.1.0中已经修改心跳线程为后台线程,并支持设置max.poll.records,参见ChangeLog. 使用场景 Kafka是一 ...

  9. JS和C#分别防注入代码

    防范的时候需要对用户的输入进行检查.特别是一些特殊字符,比如单引号,双引号,分号,逗号,冒号,连接号等进行转换或者过滤. 如果你的查询语句是select * from admin where user ...

最新文章

  1. Java基础学习总结(11)——重载与重写
  2. IoC~MVC3+EF+Autofac实现松耦合的系统架构 [转载]
  3. BZOJ 3884 上帝与集合的正确用法 (欧拉定理)
  4. 无线网卡掉线解决办法
  5. 出现次数最多的数-CCF模拟
  6. python 零代码快速开发平台_现在低代码开发平台和零代码平台区别是什么?
  7. React中的组件通信——父传子、子传父、Context
  8. 霍金承认有鬼神,为什么霍金和牛顿这些人最后都信神
  9. 他一口气写出了这7k字的红黑树总结!看过的都说好!!|文末送书
  10. 光靠勤奋和努力是远远不够的
  11. 蚂蚁、字节、拼多多,你的简历能通过几家?
  12. JAVA仿微博系统(JAVA毕业设计含源码和运行教程)
  13. MathJax 支持的 Latex 符号总结(集合运算)
  14. 学习Gluster创建不同卷,设置NFS挂载
  15. java入职写不出代码_各位程序员是怎么度过看懂代码但写不出来的时期?
  16. NYOJ - 597
  17. 网页默认打印:fixed布局的内容会在每页打印,遮挡其他内容
  18. AJAX-客户端服务器端通信
  19. 视频显示输出接口总结
  20. NIPS最佳,惊人的天赋与无人察觉的缺陷并存,GPT-3的未来有多少种可能......

热门文章

  1. 【CXY】JAVA基础 之 Collection
  2. 5月17号,记住这一天
  3. 华为手机无线投屏到win10笔记本电脑
  4. 9 mybatis中使用Java8的日期LocalDate、LocalTime、LocalDateTime
  5. mini-vue之组件的实现和渲染流程 以及局部和全局组件建立的联系
  6. 洛谷P4683 [IOI2008] Type Printer 题解
  7. 无线AP概念功率mW、灵敏度dBm、增益dBi
  8. 阿里云域名使用cloudflare的DNS解析隐藏真实IP
  9. 憨批的语义分割重制版2——语义分割评价指标mIOU的计算
  10. PAT 甲级1116 1117 1118 1119 解题报告