NSSCTF | [SWPUCTF 2021 新生赛]babyrce

打开题目,显示了一个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 脚本主要执行以下操作:

  1. error_reporting(0);关闭了所有错误报告。这意味着脚本中的任何错误,程序将不会显示错误消息。

  2. 使用 highlight_file(__FILE__); 方法会输出当前脚本文件的内容,并且会突出显示语法结构。这个 __FILE__ 是魔术常量,表示当前脚本的绝对路径。

  3. 再次通过 error_reporting(0); 关闭所有错误报告。

  4. 检查 $_GET['url'] 参数是否被设置。这可能是一个从 URL 查询字符串获取的参数。

  5. 如果 $_GET['url'] 参数被设置,那么就将其值赋给 $ip 变量。

  6. preg_match("/ /", $ip) 会检查 $ip 变量的值中是否存在一个空格。如果存在空格,die('nonono'); 函数将停止脚本执行,并输出消息 'nonono'。

  7. shell_exec($ip); 函数通过 shell 命令执行 $ip 变量的值并返回输出。这是一个非常危险的行为,因为它允许任何人通过 URL 查询参数运行任意的 shell 命令。这可能会导致严重的安全问题。

  8. 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

本题完。

  • 25
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值