BUUCTF-----[GXYCTF2019]禁止套娃

news/2024/5/19 23:20:34 标签: android, CTF, BUUCTF, php代码审计

题目

目录扫描,扫到.git泄露,使用工具查看到index.php的源码
在这里插入图片描述

在这里插入图片描述

<?php
include "flag.php";
echo "flag在哪里呢?<br>";
if(isset($_GET['exp'])){
    if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) {
        if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) {
            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__);
?>

php代码审计

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

过滤了php伪协议

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

无参执行,如scandir()可以scandir(.)不可以

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

过滤et|na|info|dec|bin|hex|oct|pi|log字符

解决

想要查看当前目录下的文件,scandir(.)括号中必须带点,但是被过滤,所以找输出为点的函数就行

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

输出array,第一个就是点字符,所以在找一个输出array中第一个数值的函数reset()可以,但是被过滤了

.
在这里插入图片描述
OK,找到后带入

?exp=print_r(scandir(current(localeconv())));

在这里插入图片描述

现在求flag.php的值,看到current()函数中相关的函数next():将指针移动到下一个,是否可以利用next()进行读取呢?不行,也需要嵌套,next()是将数组进行移动,对返回值不行,只能另想个办法,flag.php是倒数第二个,如果先将array反向输出,在使用next(),就可以得到flag.php

在这里插入图片描述

print_r(next(array_reverse(scandir(current(localeconv())))));

在这里插入图片描述

只需要将PHP代码读取出来就可以了

highlight_file() 是 PHP 中的一个函数,用于以 HTML 格式高亮显示指定文件的 PHP 代码

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

在这里插入图片描述


http://www.niftyadmin.cn/n/5435471.html

相关文章

TCP-IP 知识汇总

开放式系统互联模型------国际化标准组织ISO提出----协议组&#xff08;协议模型&#xff09; 应用层&#xff1a;接收用户数据&#xff0c;人机交互的接口 表示层&#xff1a;将编码转换为二进制&#xff08;加密、解密&#xff09;---统一格式 会话层&#xff1a;针对传输…

python学习29

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

中间件漏洞(redis)

目录 1.Redis服务器被挖矿案例 2.redis常见用途 3.redis环境配置 4.redis的持久化机制 5.redis动态修改配置 6.webshell提权案例 7.定时任务bash反弹连接提权案例 8.SSH Key提权案例 9.redis安全加固分析 1.Redis服务器被挖矿案例 我没有体验过&#xff0c;那就看看别…

gradle 日常使用和设置代理

gradle --help 查看命令帮助说明 gradle init 创建gradle项目 gradle -v 查看版本 gradle -q tasks --all 列出所有task -q 以 quiet的形式启动 如何执行任务 gradle -q 任务名称{支持驼峰命名法} gradle -x 任务名称 排除某一个任务 常用参数&#xff1a; -b,--build-fi…

C++第六弹---类与对象(三)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、类的6个默认成员函数 2、构造函数 2.1、概念 2.2、特性 3、析构函数 3.1、概念 3.2、特性 3.3、调用顺序 总结 1、类的6个默认成员函数…

golang常用库之-golang常用库之-ladon包 | 基于策略的访问控制

文章目录 golang常用库之-ladon包 | 基于策略的访问控制概念使用策略 条件 Conditions自定义conditionLadon Condition使用示例 持久化访问控制(Warden) 结合 Gin 开发一个简易 ACL 接口参考 golang常用库之-ladon包 | 基于策略的访问控制 https://github.com/ory/ladon Lado…

企业架构设计方法与实践中的架构治理演进、架构评估方法、架构成熟度模型

企业架构设计方法与实践中的架构治理演进、架构评估方法、架构成熟度模型。 架构治理演进: 架构治理是指通过设立和执行一套政策和程序,来管理和控制一个组织的架构活动。架构治理演进是一个持续的过程,需要根据组织的实际情况进行定期审查和调整。 在演进过程中,重点需要…

Discuz! X3.5精品模板下载网站模板utf-8

适合做模板下载网站&#xff0c;模板涵盖广告设计/电商设计/海报/名片/字体/展板/X展架,下载即用,精品优质,海量免费模板网下载下载,专业模板素材网站,让设计变得更简单! 下载地址&#xff1a;Discuz! X3.5精品模板下载网站模板.zip 截图&#xff1a;