mfw-攻防世界

题目

 

 点击about发现Git感觉是Git泄露

直接访问.git

 本来用githack去扒源码但是成功了没文件一脸懵,

后面换一个工具githacker注意二个之间有区别

githack和githacker

 

然后去结果里查看文件

 

发现flag文件但是

没什么用

 <?php
// TODO
// $FLAG = '';
?>

然后查看index.php文件

 

<?php

if (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!");

?>
<!DOCTYPE html>
<html>
        <head>
                <meta charset="utf-8">
                <meta http-equiv="X-UA-Compatible" content="IE=edge">
                <meta name="viewport" content="width=device-width, initial-scale=1">

                <title>My PHP Website</title>

                <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" />
        </head>
        <body>
                <nav class="navbar navbar-inverse navbar-fixed-top">
                        <div class="container">
                        <div class="navbar-header">
                                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
                                <span class="sr-only">Toggle navigation</span>
                                <span class="icon-bar"></span>
                                <span class="icon-bar"></span>
                                <span class="icon-bar"></span>
                                </button>
                                <a class="navbar-brand" href="#">Project name</a>
                        </div>
                        <div id="navbar" class="collapse navbar-collapse">
                                <ul class="nav navbar-nav">
                                <li <?php if ($page == "home") { ?>class="active"<?php } ?>><a href="?page=home">Home</a></li>
                                <li <?php if ($page == "about") { ?>class="active"<?php } ?>><a href="?page=about">About</a></li>
                                <li <?php if ($page == "contact") { ?>class="active"<?php } ?>><a href="?page=contact">Contact</a></li>
                                                <!--<li <?php if ($page == "flag") { ?>class="active"<?php } ?>><a href="?page=flag">My secrets</a></li> -->
                                </ul>
                        </div>
                    </div>
                </nav>

                <div class="container" style="margin-top: 50px">
                        <?php
                                require_once $file;
                        ?>

                </div>

                <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js" />
                <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js" />
        </body>
</html>

 

代码审计启动主要的是下面的php代码,再下面是html没什么看的

<?php

if (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!");

?>
 

if (isset($_GET['page'])) { 

这行检查是否通过 GET 方法从 URL 中接收到了名为 'page' 的参数。 

isset() 是 PHP 中的一个内置函数,用于检测变量是否已设置并且非 NULL。如果变量存在并且不为 NULL,则 isset() 返回 true,否则返回 false

这个函数在 PHP 编程中非常有用,特别是当你需要检查一个变量是否已经赋值或者是否已经通过表单、GET 或 POST 请求等方式设置时。

 $page = $_GET['page'];

 如果 'page' 参数存在,则将其值赋给 $page 变量

} else {

$page = "home"; 

 如果 'page' 参数不存在,将 $page 变量的值设置为 "home"

$file = "templates/" . $page . ".php";

这行创建了一个字符串 $file,它由 "templates/"、$page 变量的值和 ".php" 组成。这表示它将根据 $page 的值来确定要加载哪个模板文件。

// I heard '..' is dangerous! 

这是一个注释,提醒开发者 '..' 在文件路径中可能是危险的,因为它可能允许目录遍历攻击。 

assert("strpos('$file', '..') === false") or die("Detected hacking attempt!"); 

 这行使用 assert 函数来检查 $file 字符串中是否包含 '..'。如果包含,strpos 函数会返回该子串的位置,否则返回 false。如果返回的位置不是 false,则 assert 函数会失败,并执行 or 后面的 die 函数,输出 "Detected hacking attempt!" 并终止脚本执行。

在 PHP 中,assert() 函数用于在代码中执行断言。断言是一种编程约定,用于验证某个条件是否为真。如果条件为真,则 assert() 函数不会有任何效果;如果条件为假,则 assert() 会根据当前的断言处理方式(可以通过 assert_options() 设置)来执行不同的操作,这通常包括显示一个警告或错误消息,甚至终止脚本的执行。

assert() 函数通常用于开发和调试阶段,以确保代码按预期运行。在生产环境中,为了提高性能,通常会将断言禁用,因为每次断言都需要检查一个条件,这可能会带来额外的开销。

在 PHP 中,strpos() 函数用于查找一个字符串在另一个字符串中首次出现的位置。如果找到该字符串,它会返回该字符串在另一个字符串中第一次出现的位置(基于 0 的索引),如果没有找到,则返回 false

语法

strpos(string $haystack, mixed $needle, int $offset = 0): int|false 

  • $haystack 是要被搜索的字符串。
  • $needle 是需要查找的字符串或字符。
  • $offset (可选参数)指定从哪里开始搜索

// TODO: Make this look nice 

这是一个注释,表示接下来的代码可能需要优化或改进,使其看起来更整洁或更易于理解。 

assert("file_exists('$file')") or die("That file doesn't exist!"); 

这行使用 assert 函数来检查 $file 指定的文件是否存在。file_exists 函数会检查文件或目录是否存在。如果不存在,assert 函数会失败,并执行 or 后面的 die 函数,输出 "That file doesn't exist!" 并终止脚本执行

在 PHP 中,file_exists() 函数用于检查一个文件或目录是否存在。如果文件或目录存在,函数返回 true,否则返回 false

语法

 file_exists(string $filename): bool

其中 $filename 是要检查的文件或目录的路径。

使用 file_exists() 可以帮助开发者在尝试读取、写入或执行文件之前确认文件或目录是否确实存在,从而避免因为文件不存在而导致的错误或异常。

 

assert函数的命令执行漏洞原理:当assert()内的参数为字符串是,那个字符串会被当成php函数执行

php语句结尾需要有分号

构造playload

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

访问 

 

源代码中发现flag

 

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

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

相关文章

QCC发射(TX SOURCE)USB发射A2DP音乐,实现MIC声音到主机

之前写过 CSR8670/8675 发射&#xff08;TX SOURCE&#xff09;USB发射A2DP音乐&#xff0c;实现MIC声音到主机的文章&#xff0c;目前把该方案移植到QCC方案&#xff08;QCC3040 QCC3056&#xff09;。 因 CSR8670/8675成本比较贵&#xff0c;现在移植到QCC平台。 由于众多游…

Pytorch for training1——read data/image

blog torch.utils.data.Dataset create dataset with class torch.utils.data.Dataset automaticly import torch from torch.utils.data import Datasetclass MyDataset(Dataset):def __init__(self, data):self.data datadef __getitem__(self, index):# 根据索引获取样本…

华为OD面试手撕算法-合并排序数组

题目描述 本题是leetcode一道简单题&#xff1a;合并两个有序数组&#xff0c;但是对于时间和空间复杂度面试官明确给出了限制。 // 给定两个排序后的数组 A 和 B&#xff0c;其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法&#xff0c;将 B 合并入 A 并排序。 // 初始化…

对 NGINX、Kong 和 Amazon 的 API 管理解决方案进行基准测试:它们能否交付实时 API?

原文作者&#xff1a;Alessandro Fael Garcia of F5 原文链接&#xff1a;对 NGINX、Kong 和 Amazon 的 API 管理解决方案进行基准测试&#xff1a;它们能否交付实时 API&#xff1f; 转载来源&#xff1a;NGINX 开源社区 NGINX 唯一中文官方社区 &#xff0c;尽在 nginx.org.c…

HAL STM32 硬件I2C方式读取AS5600磁编码器获取角度例程

HAL STM32 硬件I2C方式读取AS5600磁编码器获取角度例程 &#x1f4cd;相关篇《STM32 软件I2C方式读取AS5600磁编码器获取角度例程》 ✨stm32使用硬件I2C去读取角度数据&#xff0c;通过STM32CubeMX工具配置工程&#xff0c;读取角度数据&#xff0c;只需要调用一个函数&#xf…

使用 RisingWave、NATS JetStream 和 Superset 进行实时物联网监控

在物联网&#xff08;IoT&#xff09;背景下&#xff0c;处理实时数据会遇到一些特定的障碍&#xff0c;如边缘计算资源不足、网络条件限制、扩展性存在问题、设备间有多样性差异。要克服这些挑战&#xff0c;需要高效的边缘计算技术、强大的安全措施、标准化协议、可扩展的管理…

接口自动化框架搭建(六):多进程执行

1&#xff0c;背景目的 当测试用例太多之后&#xff0c;想缩短执行时间&#xff0c;就需要多线程或者多进程执行。 多线程执行&#xff1a; 每条测试用例是独立的&#xff0c;测试用例之间的参数不能共同使用 采坑举例&#xff1a;接口自动化中请求头是公共参数&#xff0c;…

WebGIS 地铁交通线网 | 图扑数字孪生

数字孪生技术在地铁线网的管理和运维中的应用是一个前沿且迅速发展的领域。随着物联网、大数据、云计算以及人工智能技术的发展&#xff0c;地铁线网数字孪生在智能交通和智慧城市建设中的作用日益凸显。 图扑软件基于 HTML5 的 2D、3D 图形渲染引擎&#xff0c;结合 GIS 地图…

人人都离不开的算法:AI 时代的生存指南

文章目录 一、算法在生活中的“无处不在”二、算法在工作学习中的“智慧助力”三、算法在社会发展中的“驱动力量”四、算法带来的“双刃剑”效应五、应对算法挑战的策略《人人都离不开的算法——图解算法应用》编辑推荐1、通俗易懂2、技术科普3、贴近时代、贴近生活4、启发思考…

基于DWT(离散小波变换)的图像加密水印算法,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

华尔街基金经理为什么开始押注MVP币了?

目前&#xff0c;市场非常流行一种新兴的上市策略。 依靠正在被市场认可并有明显增长动力的 Meme 币&#xff0c;并围绕它构建一个社区&#xff0c;继而完成整个生态&#xff0c;最终&#xff0c;将由一系列产品完成生态的繁荣。 通过启动一个与热门 Meme 币原生集成的项目&a…

The Google File System [SOSP‘03] 论文阅读笔记

原论文&#xff1a;The Google File System 1. Introduction 组件故障是常态而非例外 因此&#xff0c;我们需要持续监控、错误检测、容错和自动恢复&#xff01; 按照传统标准&#xff0c;文件数量巨大大多数文件都是通过添加新数据而不是覆盖现有数据来改变的&#xff0c;因…

大数据实验统计-1、Hadoop安装及使用;2、HDFS编程实践;3、HBase编程实践;4、MapReduce编程实践

大数据实验统计 1、Hadoop安装及使用&#xff1b; 一&#xff0e;实验内容 Hadoop安装使用&#xff1a; 1&#xff09;在PC机上以伪分布式模式安装Hadoop&#xff1b; 2&#xff09;访问Web界面查看Hadoop信息。 二&#xff0e;实验目的 1、熟悉Hadoop的安装流程。 2、…

Mybatis plue(二) 核心功能

核心功能 P5 条件构造器 mybatisplus支持各种复杂的where条件&#xff0c;可以满足日常开发的所有需求 wrapper就是条件构造器,wrapper就是顶层的&#xff0c; 示例&#xff1a; 查询出名字带0&#xff0c;存款大于等于1000的人的id,username,info,balance字段 Testvoid te…

简单的安全密码生成器PwGen

什么是 PwGen &#xff1f; PwGen 是一个简单的 Docker Web 应用程序&#xff0c;旨在生成具有可自定义选项的安全密码或密码短语。用户可以选择生成具有特定标准的随机密码或由随机单词组成的密码。其他功能包括在密码中包含大写字母、数字和特殊字符的选项&#xff0c;或者将…

如何在比特币上验证ZK Proofs

1. 引言 前序博客有&#xff1a; 基于BitVM的乐观 BTC bridgeBitVM&#xff1a;Bitcoin的链下合约Bitcoin Bridge&#xff1a;治愈还是诅咒&#xff1f;BitVM2&#xff1a;比特币上的无需许可验证以比特币脚本来实现SNARK VerifierClementine&#xff1a;Citrea的基于BitVM的…

【性能测试】接口测试各知识第1篇:接口测试,学习目标【附代码文档】

接口测试完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;接口测试&#xff0c;学习目标学习目标,2. 接口测试课程大纲,3. 接口学完样品,4. 学完课程,学到什么,5. 参考:,1. 理解接口的概念。学习目标&#xff0c;RESTFUL1. 理解接口的概念,2.什么是接口测试…

Day65-企业级防火墙iptables精讲1

Day65-企业级防火墙iptables精讲1 补充&#xff1a;1.什么是防火墙&#xff1f;2.防火墙种类2.1 商用防火墙介绍2.2 Linux下防火墙介绍 3.选择何种防火墙&#xff1f;4.企业级架构最佳防火墙场景5.学好iptables的技术栈基础6.Iptables是什么&#xff1f;7.Iptables企业常用场景…

C++的并发世界(三)——线程对象生命周期

0.案例代码 先看下面一个例子&#xff1a; #include <iostream> #include <thread>void ThreadMain() {std::cout << "begin sub thread:" << std::this_thread::get_id()<<std::endl;for (int i 0; i < 10; i){std::cout <&…

海豚调度任务类型Apache SeaTunnel部署指南

Apache DolphinScheduler已支持Apache SeaTunnel任务类型&#xff0c;本文介绍了SeaTunnel任务类型如何创建&#xff0c;任务参数&#xff0c;以及任务样例。 一、Apache SeaTunnel SeaTunnel 任务类型&#xff0c;用于创建并执行 SeaTunnel 类型任务。worker 执行该任务的时…