攻防世界题目练习——Web引导模式(三)(持续更新)

题目目录

    • 1. mfw
    • 2.
    • 3.
    • 4.
    • 5.

1. mfw

进去看到网页和页面内容如下:
在这里插入图片描述
看到url的参数 ?page=about ,我以为是文件包含什么的,反复试了几次,想用 …/…/…/…/etc/passwd ,但是发现.似乎被过滤了,实在不知道怎么做了,于是找了几篇解题博客:
攻防世界-mfw-(详细操作)做题笔记
攻防世界----mfw
看了博客才知道,存在一种git源码泄露漏洞,相关知识见博客:WEB安全-常见源码泄露 | wh1te。

git源码泄露是:
当在一个空目录执行 git init 时,Git 会创建一个 .git 目录。 这个目录包含所有的 Git 存储和操作的对象。
利用方式:
github上的githack可以把整个.git备份的文件下载下来。它能解析 .git/index 文件,并找到工程中所有的:文件名和文件 sha1,然后去 .git/objects/ 文件夹下下载对应的文件,通过 zlib 解压文件,按原始的目录结构写入源代码。
于是用url/.git访问,可以看到显示了许多文件,可能是源代码文件。
在这里插入图片描述
看了几个目录没有看到flag相关的。
博客说用githacker下载文件,于是我按照博客攻防世界-mfw-(详细操作)做题笔记中使用githacker下载文件时的路径在我的kali中找githacker,没找到,于是参考别的博客去下载githack:
GitHack在kali Linux环境下的下载与安装
下载完成后,因为看到前面的参考博客里是用的__init__.py文件来下载,于是在我下载的githacker-master的目录下的lib目录中找到了这个文件,按照那篇博客上的命令还是没法下载。想到那篇教下载的博客上最后的步骤:

python2 GitHack.py http://challenge-efb678740fb6553d.sandbox.ctfhub.com:10800/.git

用的是python2 GitHack.py url/.git,于是用这个命令尝试,终于成功了,下载存放的位置在GitHacker-master的dist目录下,为了方便我把文件夹更名为了GitHack,如下图:
在这里插入图片描述
可以看到里面有一个文件flag.php,打开看里面什么都没看到。里面唯一有有价值信息的就是index.php文件(和templates文件夹在同一目录下,上图未展示),打开查看如下:
在这里插入图片描述
可以看到红框框出的部分是两个assert断言,其中第一个的注释"I heard ‘…’ is dangerous!",以及assert中将 ‘$file’ 和 ‘…’ 做匹配,可以解释我在一开始发现的.被过滤掉了的情况,第二个assert是判断文件是否存在。

我们直接访问flag.php的话是可以访问的,但是没有内容显示。
在这里插入图片描述
我们要绕过第一个assert的判断。
在源码中可以看到如下:

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

将$file的值代入进去就是:

assert("strpos('templates/$page.php', '..') === false") or die("Detected hacking attempt!");

我们需要让后面和 '…'进行比较的部分失效,就需要用到 // 将后面的内容注释掉,并用')来与strpos()函数的前半部分('templates/进行闭合。
这里我将几篇参考博客结合起来看:
博客1:攻防世界----mfw
博客2:【攻防世界】十八、mfw
在博客3讲的拼接不是很详细,没太懂这样构造之后在代码中是怎么拼接的,于是看了博客1.
博客1对于拼接的替换构造讲的挺清楚,但是我不理解为什么这个博主构造的拼接内容templates前面为什么会有两个单引号:
在这里插入图片描述

于是我又查看了博客2,这个构造的拼接后的内容和我理解的一样:
在这里插入图片描述

在博客3的评论区中我了解到,这里的.是链式拼接:
在这里插入图片描述

在返回的源码中可以看到flag:
在这里插入图片描述

在linux下没法直接看到flag.的内容,猜测可能是因为php文件有些内容要在网页中才能显示?
在这里插入图片描述

再来尝试一下用or system('cat templates/flag.php');//,发现用or system只显示了一次flag,如下图:
在这里插入图片描述

博客1对于这个的解释是这样的,但我还是没看懂为什么:
在这里插入图片描述
但是我仍然有个疑问,在page=').system('cat templates/flag.php');//拼接之后,assert的")也被注释掉了,这样为什么可以正常执行后面的system命令呢。
所以我想试试page=')) or system('cat templates/flag.php');//,用两个括号,把assert也闭合掉看看。
失败了,不行诶,有点没搞懂。

又仔细看了看博客1,说的是 “利用assert()函数执行cat ./template/flag.php获得flag” 。但是注释符不是会把后面的内容全部注释掉吗,这样的话怎么利用assert()函数呢,真的迷惑,后面再好好思考一下吧。

2.

3.

4.

5.

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

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

相关文章

SpringCloud学习笔记-Nacos服务分级存储模型

Nacos服务分级存储模型 一级是服务,例如userservice二级是集群,例如杭州或上海三级是实例,例如杭州机房的某台部署了userservice的服务器 微服务互相访问时,应该尽可能访问同集群实例,因为本地访问速度更快。当本集…

Pygame中将鼠标形状设置为图片2-1

在Pygame中利用Sprite类的派生类将鼠标形状设置为图片,其原理就是将Sprite类的派生类对应图片的位置设置为鼠标的当前位置即可。其效果如图1所示。 图1 将鼠标设置为图片 从图1可以看出,鼠标的形状变为红色的,该红色的随着鼠标的移动而移动&…

前后端数据导入导出Excel

一:导入 Excel有读取也便有写出,Hutool针对将数据写出到Excel做了封装。 原理 Hutool将Excel写出封装为ExcelWriter,原理为包装了Workbook对象,每次调用merge(合并单元格)或者write(写出数据&…

激发创意,打造震撼视觉效果——Adobe After Effects 2024(Ae2024)全新来袭!

想要创造独特的、令人惊叹的视觉效果吗?不要犹豫,现在就升级到全新的Adobe After Effects 2024(Ae2024)!作为业界领先的动态图形和视觉效果软件,Ae2024将为您的创作带来前所未有的火花。 Ae2024拥有强大的…

GPT实战系列-ChatGLM2部署Ubuntu+Cuda11+显存24G实战方案

GPT实战系列-ChatGLM2部署UbuntuCuda11显存24G实战方案 自从chatGPT掀起的AI大模型热潮以来,国内大模型研究和开源活动,进展也如火如荼。模型越来越大,如何在小显存部署和使用大模型? 本实战专栏将评估一系列的开源模型&#xf…

处理ElementUI组件默认样式多次重复问题

问题截图: 解决办法: 在postcss.config.js文件里添加配置项: module.exports {plugins: {autoprefixer: {},cssnano: {} //添加这行代码}, } 处理结果: github issues: https://github.com/ElemeFE/element/is…

【LeetCode高频SQL50题-基础版】打卡第6天:第31~35题

文章目录 【LeetCode高频SQL50题-基础版】打卡第6天:第31~35题⛅前言员工的直属部门🔒题目🔑题解 判断三角形🔒题目🔑题解 连续出现的数字🔒题目🔑题解 指定日期的产品价格🔒题目&am…

让ChatGPT等模型学会自主思考!开创性技术“自主认知”框架

ChatGPT、百度文心一言、Bard等大语言模型展现出了超强的创造能力,加速了生成式AI的应用进程。但AI模型只能基于训练数据执行各种任务,无法像人类一样利用生活知识、过往经验用于复杂的推理和决策。 例如,在玩游戏时,人类可以利用…

01Maven的工作机制: Maven作为依赖管理工具以及Maven作为构建管理工具

Maven的特点及其应用 Maven是Apache软件基金会组织维护的一款专门为Java项目提供构建和依赖管理支持的工具 Maven作为依赖管理工具 管理jar包的规模: 随着我们使用的框架数量越来越多以及框架的封装程度也越来越高,项目中使用的jar包也就越来越多 Maven工程中依…

Qt QMovie和QLabel配合播放GIF表情包

文章目录 效果演示main函数创建MoviePlayer对象头文件movieplayer.h源文件movieplayer.cpp代码解释在Qt框架中,QMovie是用于处理动画和视频的类。所有源码已在本篇文章公布。 效果演示 main函数创建MoviePlayer对象 #include <QApplication>#include "movie

至强服务器BIOS/UEFI驱动开发笔记

至强服务器BIOS/UEFI驱动开发笔记 驱动开发基础Hello UEFI Driver 项目选择项目位置初始化驱动代码文件结构驱动程序入口和基本功能导入AMI工程AMI平台Hello UEFI Driver 编译问题测试结果打印设备列表继续开发`HelloWorldSupported`函数依赖配置使用脚本编译编译测试此DXE驱动…

RCNN系列网络的理解

R-CNN 作者 &#xff1a; Ross Girshick FAST R-CNN 作者 &#xff1a; Ross Girshick FASTER R-CNN 作者 &#xff1a; Jian Sun MASK R-CNN 作者 &#xff1a;kaiming he 一…

kong 和konga网关部署及使用

Kong是一款基于OpenResty&#xff08;Nginx Lua模块&#xff09;编写的高可用、易扩展的&#xff0c;由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的&#xff0c;能提供易于使用的RESTful API来操作和配置API管理系统&#xff0c;…

使用XLua在Unity中获取lua全局变量和函数

1、Lua脚本 入口脚本 print("OK") --也会执行重定向 require("Test") 测试脚本 print("TestScript") testNum 1 testBool true testFloat 1.2 testStr "123"function testFun()print("无参无返回") endfunction te…

Android Framework通信:Handler

文章目录 前言一、Handler源码分析1、创建Handler2、发送消息3、取消息4、消息处理5、线程切换的方法&#xff08;Handler异步消息处理机制流程&#xff09;handler.sendMessage()handler.post()View.post()Activity中的runOnUiThread() 二、Handler高频面试题1、为什么要有Han…

React TreeSelect设置默认展开项的方法

需要实现TreeSelect组件的onTreeExpand、treeExpandedKeys方法。 代码样例如下&#xff1a; 1.TreeSelect标签部分 render() {const {codeselect} this.props;const {treeExpandedKeys} this.state ................<TreeSelectshowSearch{false}dropdownStyle{{ maxHei…

Java架构师缓存架构设计解决方案

目录 1 缓存常见的三大问题1.1 缓存雪崩1.2 缓存穿透1.3 缓存击穿2 缓存key的生成策略3 热点数据集中失效的问题4 如何提高缓存的命中率5 缓存和数据库双写不一致的问题6 如何对缓存数据进行分片想学习架构师构建流程请跳转:Java架构师系统架构设计 1 缓存常见的三大问题 缓…

分布式事务协调中间件---seata快速入门

分布式事务 Seata&#xff0c;之前叫做Fescar&#xff0c;是一个开源的分布式事务解决方案&#xff0c;它主要致力于提供高效和简单的分布式事务服务。Seata主要用于解决微服务架构下的数据一致性问题。 Seata 的基本原理是基于两阶段提交 (2PC) 以及三阶段提交 (3PC)&#xff…

私域社群团购直播活动报名小程序开发

新零售SaaS系统&#xff0c;一款超级好用的私域社交团购小程序。支持团购、直播&#xff0c;有统计、收款、发货等功能。直播配合开团转化率更高&#xff0c;一款真正的私域卖货神器。 社交化电商用户踊跃参与&#xff1a;在卖货的同时&#xff0c;体现众多消费者的参与动态更…

C语言---预处理详解

1.预定义符号 在C语言中有一些内置的预定义符号 __FILE__ __LINE__ __DATE__ __TIME__ __STDC__//进行编译的源文件 //文件当前的行号 //文件被编译的日期 //文件被编译的时间 //如果编译器遵循ANSI C&#xff0c;其值为1&#xff0c;否则未定义 编译器在__STDC__报错,说明,v…