首先我们先了解一下什么是webshell
WebShell 应急响应是指在发现系统中存在 WebShell 后,迅速采取一系列措施来识别、隔离、清除威胁,并恢复系统安全的过程。WebShell 是一种恶意脚本,通常由攻击者上传到 Web 服务器上,用于远程控制服务器、执行命令、窃取数据或进一步渗透网络。
WebShell 的特点
-
隐蔽性:WebShell 通常伪装成正常的 Web 文件(如 PHP、ASP、JSP 文件),以避免被管理员发现。
-
远程控制:攻击者可以通过 Web 浏览器或工具远程访问 WebShell,执行命令或操作文件。
-
持久性:WebShell 通常会被设置为在服务器重启后仍然存在,以便攻击者可以长期控制服务器。
WebShell 应急响应的步骤
-
确认 WebShell 的存在
-
使用安全工具(如杀毒软件、Web 应用防火墙)扫描 Web 目录,查找可疑文件。
-
检查 Web 服务器的访问日志,寻找异常请求或文件上传记录。
-
-
隔离受感染的系统
-
将受感染的服务器从网络中隔离,防止攻击者进一步渗透或扩散威胁。
-
如果无法立即隔离,可以暂时关闭 Web 服务或限制访问。
-
-
分析 WebShell
-
检查 WebShell 文件的创建时间、修改时间和访问时间,确定攻击的时间线。
-
分析 WebShell 的功能,了解攻击者可能执行的操作。
-
-
清除 WebShell
-
删除 WebShell 文件,并确保服务器上没有其他恶意文件。
-
检查系统配置文件(如
.htaccess
、web.config
),确保没有被篡改。
-
-
修复漏洞
-
确定攻击者是如何上传 WebShell 的,修复相关的漏洞(如文件上传漏洞、SQL 注入漏洞)。
-
更新 Web 应用程序和服务器软件,确保没有已知的安全漏洞。
-
-
恢复系统
-
从备份中恢复受影响的文件,确保系统恢复到安全状态。
-
重新启动 Web 服务,并监控系统以确保没有异常活动。
-
-
加强安全措施
-
实施更强的访问控制策略,限制对 Web 目录的写入权限。
-
定期扫描 Web 目录,查找可疑文件。
-
使用 Web 应用防火墙(WAF)来检测和阻止恶意请求。
-
了解了什么是webshell后我们直接来看题目
解题方法
1.1 静态检测
我们可以通过查找特定后缀的文件来进行初步排查,例如:.asp
、.php
、.jsp
、.aspx
等。然后,进一步在这些文件中搜索特定的特征码或危险函数,例如 exec()
、eval()
、system()
等。
优点:这种方法快速且方便,对于已知的 WebShell 检测准确率较高,且部署简单,只需一个脚本即可完成。
缺点:存在较高的漏报率和误报率,无法检测到零日漏洞(0day)类型的 WebShell,且容易被攻击者绕过。
1.2 动态检测
WebShell 在执行时会表现出一些动态特征。我们可以将这些特有的 HTTP 请求和响应特征加入入侵检测系统(IDS)中,以检测所有的 HTTP 请求。例如,如果 WebShell 执行系统命令,通常会启动特定的进程,如在 Linux 下启动 bash
,在 Windows 下启动 cmd
。
1.3 日志检测
使用 WebShell 通常不会在系统日志中留下记录,但会在网站的 Web 日志中留下访问数据和提交记录。通过分析大量的日志文件,可以建立请求模型来检测异常行为。例如,如果一个通常只有 GET 请求的页面突然出现了 POST 请求并且返回代码为 200,这可能是 WebShell 活动的迹象。
2.工具排查
这里就不展示了,因为在比赛中会有断网的现象(当然也可以用D盾就是了)。
想了解的可以直接看玄机靶场-应急响应webshell查杀_哔哩哔哩_bilibili
第一题
开启环境后,用xhell连接
web题目一般都在/var/www/html中
我们直接进去看看
上面说了webshell一般文件类似,所以我们可以直接查看php文件
查看html目录下的的php并没有发现答案,那么就只能在html的子目录下,这里用find定位一下php文件的位置
find ./ type f -name "*.php"
可以看到很多的PHP文件,我们总不能一个一个去看吧
所以我们了解一下可疑函数
可疑函数调用
-
WebShell 通常会使用一些危险的函数来执行系统命令或代码,如:
-
PHP:
eval()
,system()
,exec()
,shell_exec()
,passthru()
,assert()
,base64_decode()
-
ASP:
Execute()
,Eval()
,CreateObject()
-
JSP:
Runtime.getRuntime().exec()
-
编码和解码
-
WebShell 经常使用编码和解码技术来隐藏其真实意图,如 Base64 编码:
-
示例:
eval(base64_decode('encoded_string'));
-
文件操作
-
WebShell 可能会包含文件操作函数,用于读取、写入或修改文件:
-
PHP:
fopen()
,fwrite()
,file_get_contents()
,file_put_contents()
-
ASP:
FileSystemObject
-
网络操作
-
WebShell 可能会包含网络操作函数,用于与远程服务器通信:
-
PHP:
fsockopen()
,curl_exec()
,file_get_contents('http://...')
-
ASP:
WinHttp.WinHttpRequest
-
定位可疑文件
我们可以尝试定位一些特殊的后缀文件,例如:.asp
, .php
, .jsp
, .aspx
。
命令列如:
find /var/www/html -type f -name "*.jsp" | xargs grep "exec("
find /var/www/html -type f -name "*.php" | xargs grep "eval("
find /var/www/html -type f -name "*.asp" | xargs grep "execute("
find /var/www/html -type f -name "*.aspx" | xargs grep "eval("
由于我们前面已经查找知道了这题是php文件,那么只用php的命令就好了
find /var/www/html -type f -name "*.php" | xargs grep "eval("
查找前要先退到root的根目录下
我们直接去查看这三个文件就好了
这里就找到了第一题的答案
flag{027ccd04-5065-48b6-a32d-77c704a5e26d}
第二题
这里看到工具的shell
我们就去分析一下gz.php的代码
-
@session_start();
:启动会话,用于在脚本中启用会话管理。 -
@set_time_limit(0);
:设置脚本的最大执行时间为无限制,防止脚本因执行时间过长而被终止。 -
@error_reporting(0);
:关闭错误报告,避免在脚本执行过程中显示错误信息。 -
function encode($D, $K) {...}
:定义一个名为encode
的函数,接受两个参数$D
和$K
。该函数可能用于对数据进行加密或解密,通常使用异或操作或其他简单的加密算法。 -
$payloadName
、$key
和$data
:定义变量用于存储会话变量名、密钥和从php://input
流中读取的数据。 -
if ($data != false) {...}
:检查是否成功从php://input
读取数据,如果读取成功则执行后续代码。 -
if (isset($_SESSION[$payloadName])) {...}
:检查会话变量$payloadName
是否已设置。 -
if (strpos($payload, "getBasicsInfo") == false) {...}
:检查$payload
变量中是否包含字符串"getBasicsInfo"
。 -
eval($payload);
:如果$payload
包含"getBasicsInfo"
字符串,则执行$payload
中的 PHP 代码。 -
echo encode(@run($data), $key);
:如果$data
包含"getBasicsInfo"
字符串,则执行@run($data)
函数,并将结果编码后输出。
看下来只有前三句比较不一样,查了资料后发现是哥斯拉
哥斯拉病毒是一种Java后门木马,通常用于攻击并控制Web服务器。特征就包括:
- @session_start(); - 开启一个会话。
- @set_time_limit(0); - 设置脚本执行时间为无限。
- @error_reporting(0); - 关闭所有错误报告。
所以我们找到它的github地址进行MD5加密即可;
https://github.com/BeichenDream/Godzilla
第二题的答案就出来了
flag{39392DE3218C333F794BEFEF07AC9257}
第三题
既然说黑客隐藏shell了,那我们肯定需要用到命令ls -la进行查找
ls -la
是一个非常有用的命令,可以帮助您查看当前目录下的所有文件和目录的详细信息,包括权限、所有者、大小和修改时间等。通过这个命令,您可以更好地管理和监控文件系统中的内容。
做第一题的时候,我们查看到了三个可疑文件,gz.php不是隐藏的就排除掉了
在查找.Mysqli.php时发现ls查看不了,只有用ls -la 才看到
题目说了要MD5加密
/var/www/html/include/Db/.Mysqli.php
用MD5加密后得到第三题的答案
flag{AEBAC0E58CD6C5FAD1695EE4D1AC1919}
第四题
什么是不死马
不死马(也称为“不死后门”或“持久化后门”)是一种恶意软件或攻击技术,旨在确保攻击者即使在系统重启或管理员采取某些清理措施后,仍然能够保持对受感染系统的访问权限。这种技术通常用于维持对目标系统的长期控制,即使系统管理员尝试清除恶意软件或修复漏洞。
不死马的特点
-
持久性:不死马通过多种机制确保在系统重启后仍能重新激活。
-
隐蔽性:不死马通常会隐藏自己的存在,避免被管理员或安全工具检测到。
-
多样性:不死马可以通过多种方式实现持久化,例如修改系统启动项、注册表、计划任务等。
常见的不死马技术
-
修改启动项:
-
在 Linux 系统中,修改
/etc/rc.local
或/etc/init.d/
中的脚本。 -
在 Windows 系统中,修改注册表启动项(如
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
)。
-
-
创建计划任务:
-
在 Windows 系统中,创建计划任务以定期执行恶意代码。
-
在 Linux 系统中,使用
cron
任务来实现类似的功能。
-
-
隐藏文件或进程:
-
使用 rootkit 技术隐藏恶意文件或进程,使其不易被检测到。
-
-
利用合法服务:
-
将恶意代码注入到合法的系统服务或进程中,利用这些服务的自动启动特性来实现持久化。
-
-
修改系统二进制文件:
-
替换或修改系统的关键二进制文件(如
ls
、ps
等),使其在运行时加载恶意代码。
-
检测和清除不死马
-
使用安全工具:
-
使用反病毒软件或 rootkit 检测工具(如
chkrootkit
、rkhunter
)扫描系统。
-
-
检查启动项和计划任务:
-
在 Linux 系统中,检查
/etc/rc.local
、/etc/init.d/
和cron
任务。 -
在 Windows 系统中,检查注册表启动项和计划任务。
-
-
监控系统日志:
-
检查系统日志(如tail -f /var/log/apache2/access.log tail -f /var/log/nginx/access.log)以发现异常活动。
-
-
文件完整性检查:
-
使用工具(如
tripwire
)检查系统文件的完整性,发现被修改的文件。
-
我们到日志中去看看
我们看一下access.log文件
cat access.log
这里看到top.php有危险函数
继续往下看可以看到这个文件的路径
这里解释一下phpinfo()
phpinfo()
是 PHP 中的一个内置函数,用于输出关于 PHP 配置的详细信息。这个函数会生成一个包含大量信息的 HTML 页面,显示 PHP 的版本、加载的扩展、服务器信息、环境变量、PHP 配置选项(php.ini
设置)等。
phpinfo()
输出的信息通常包括以下部分:
-
PHP 版本:当前 PHP 的版本号。
-
服务器信息:Web 服务器(如 Apache、Nginx)的版本和配置。
-
PHP 环境:PHP 的环境变量(如
$_SERVER
、$_ENV
)。 -
PHP 配置:
php.ini
文件中的配置选项。 -
加载的扩展:当前 PHP 环境中加载的所有扩展模块。
-
HTTP 头信息:请求的 HTTP 头信息。
-
PHP 许可证信息:PHP 的许可证信息
phpinfo()
会暴露大量关于服务器和 PHP 配置的信息,可能会被攻击者利用。因此,在生产环境中应避免公开 phpinfo()
的输出。
这里我们去查看一下top.php文件看我们的推测有没有问题
看到跟我们猜的没错,这也是不死马的格式
我们拿到路径用MD5加密一下
/var/www/html/wap/top.php
加密后就得到第四题的答案
flag{EEFF2EABFD9B7A6D26FC1A53D3F7D1DE}