多通宵写文章,额不会编了
前言
Web shell是攻击者使用的恶意脚本,目的是升级和维持对已经受损的 Web 应用程序的持久访问。Web shell本身不能攻击或利用远程漏洞,所以它总是攻击的第二步(这个阶段也称为post-exploitation)。
攻击者可以利用常见的网页漏洞,如SQL 注入、远程文件包含 (RFI),甚至使用跨站点脚本 (XSS)作为社会工程攻击的一部分,以获得文件上传功能并传输恶意文件文件。常用功能包括但不限于shell命令执行(访问cmd/命令行)、代码执行、数据库枚举、文件管理等。
Web shell 可以用多种网络语言编写,例如,PHP web shell 很常见。无论您的系统是基于自定义软件还是基于通用内容管理系统(例如带插件的 WordPress),它们都会影响您。Web shell 也可能不会被防病毒或反恶意软件检测到,因为它们不使用典型的可执行文件类型。同时,它们很容易为公众所用,例如,通过几个 GitHub 项目。
在这个简短的系列中,我们想向您详细解释 web shell 的工作原理(使用 PHP shell 示例)以及如何检测 web shell 和保护您的资产。
持久远程访问
Web shell 脚本通常包含一个后门,它允许攻击者随时远程访问并可能控制面向 Internet 的服务器。这将为攻击者省去每次需要访问受感染服务器时都必须利用漏洞的不便。
攻击者也可能选择自己修复漏洞,以确保没有其他人会利用该漏洞。通过这种方式,攻击者可以保持低调并避免与管理员进行任何交互,同时仍然获得相同的结果。
特权升级
除非服务器配置错误,否则 web shell 将以 web 服务器软件用户权限运行,这些权限是(或者至少应该是)有限的。使用 web shell,攻击者可以尝试通过利用系统上的本地漏洞来执行权限升级攻击,以获得 root 权限,在 Linux 和其他基于 UNIX 的操作系统中,root 权限是超级用户。
通过访问根帐户,攻击者基本上可以在系统上执行任何操作,包括管理本地文件、安装软件、更改权限、添加和删除用户、窃取密码、阅读电子邮件等等。
发动攻击
Web shell 可用于在网络内部或外部进行旋转。攻击者可能想要监视(嗅探)系统上的网络流量,扫描内部网络以发现活动主机并枚举网络中的防火墙和路由器。
此过程可能需要数天,甚至数月,主要是因为攻击者通常寻求保持低调并尽可能不引起注意。一旦攻击者拥有持久访问权限,他们就可以耐心地采取行动。
受感染的系统还可用于攻击或扫描位于网络外部的目标。这为攻击者增加了一层额外的匿名性,因为他们使用第 3 方系统发起攻击。更进一步的做法是通过多个系统进行枢轴(隧道),从而几乎不可能将攻击追溯到其源头。
僵尸
Web shell 的另一个用途是使服务器成为僵尸网络的一部分。僵尸网络是一个由攻击者控制的受感染系统组成的网络,可以自己使用或出租给其他犯罪分子。Web shell 或后门连接到命令和控制 (C&C) 服务器,它可以从该服务器获取有关执行指令的命令。
此设置通常用于需要大量带宽的分布式拒绝服务 (DDoS) 攻击。在这种情况下,攻击者对破坏或窃取部署了 web shell 的系统的任何东西没有任何兴趣。相反,他们只会使用它的资源。
Web Shells 101 使用 PHP(Web Shells 第 2 部分)
几乎所有您能想到的网络编程语言都存在网络外壳。我们选择专注于 PHP,因为它是 Web 上使用最广泛的编程语言。
PHP web shell 只是使用内置的 PHP 函数来执行命令。以下是一些最常用的用于在 PHP 中执行 shell 命令的函数。
系统
该system()函数接受命令作为参数并输出结果。
Microsoft Windows 机器上的以下示例将运行dir命令以返回执行 PHP 文件的目录的目录列表。
<?php
// Return the listing of the directory where the file runs (Windows)
system("dir");
?>
--> Volume in drive C has no label.
Volume Serial Number is A08E