攻防世界题目练习——Web引导模式(三)(持续更新)
题目目录
- 1. mfw
- 2. Cat
- 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:攻防世界-mfw-(详细操作)做题笔记
在博客3讲的拼接不是很详细,没太懂这样构造之后在代码中是怎么拼接的,于是看了博客1.
博客1对于拼接的替换构造讲的挺清楚,但是我不理解为什么这个博主构造的拼接内容templates前面为什么会有两个单引号:

于是我又查看了博客2,这个构造的拼接后的内容和我理解的一样:

在博客3的评论区中我了解到,这里的.是链式拼接:

在返回的源码中可以看到flag:

在linux下没法直接看到flag.php的内容,猜测可能是因为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()函数呢,真的迷惑,有没有好心人看到后教教我SOS。
2. Cat
题目:

看了看网页源码没有什么发现,于是抓包查看:

抓包也没有看到什么有用的信息,只看到了是get方式的请求,参数名为 “url” 。尝试了一下也不是sql注入。
看看别人的解析吧,参考博客如下:
[CTF题目总结-web篇]攻防世界:Cat
以及攻防世界里本题的用户darkless的WP
根据几篇题解来看,我们需要转换思路入手,这里要求输入的内容是一个域名,那么此时想到的不应该是普通的sql注入,域名是ip地址的映射,输入ip地址意味着访问的动作,这时应想到的是命令执行。
一个访问ip的命令要可以执行,那么我们输入的这个域名应该是有效的可以访问的。
我先输入了www.baidu.com,无事发生。
WriteUp中发现这里是可以输入ip地址的,于是我又尝试了114.114.114.114。

包丢失但是有回显。
题解里的思路是输入127.0.0.1来进行测试(这是一个需要记住的思路),通过输入127.0.0.1,我们既可以看到回显,又可以看到返回的有用的信息,如下图:

可以看到本题中Submit提交执行的是 ping 命令,并且ping通后返回了一条路径。
因此我们在这里考虑尝试命令拼接执行,但是会发现尝试的拼接符都会被过滤。
然后题解博客里都是用FUZZ来进行测试,根据报文返回长度看哪些字符没被过滤,但是我不知道哪种fuzz工具好用,并且感觉BurpSuite也可以做到这个功能,所以这里我就用BurpSuite爆破一下。
爆破我得录入所有可见的ascii码字符,但网上全是表格,所以写了个脚本T_T:
s = ""
for c in range(32, 127):s += chr(c)s += "\n"
print(s)
'''(空格)
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
'''
把除了字母之外的其他字符复制进去进行爆破:

可以看到这些报文返回长度为458的是没有出现报错,也就是没有被过滤的字符:

然后题解里说注意到了输入的数据采用url编码,但是我真的很迷惑啊,感觉有时候输入的被url编码了有的又没有,啊啊啊啊啊,烦人。
然后就开始用url编码来试探了,就是输入了超过ascii编码的最大值的url编码后,页面就会报错,那就把这个也当作一个试探的小技巧吧。
只能直接在url里输入,不能在提交框里。

3.
4.
5.
相关文章:
攻防世界题目练习——Web引导模式(三)(持续更新)
题目目录 1. mfw2. Cat3.4.5. 1. mfw 进去看到网页和页面内容如下: 看到url的参数 ?pageabout ,我以为是文件包含什么的,反复试了几次,想用 …/…/…/…/etc/passwd ,但是发现.似乎被过滤了,实在不知道怎…...
Python制作PDF转Word工具(Tkinter+pdf2docx)
一、效果样式 二、核心点 1. 使用pdf2docx完成PDF转换Word 安装pdf2docx可能会报错,安装完成引入from pdf2docx import Converter运行也可能报错,可以根据报错提示看缺少那些库,先卸载pip uninstall xxx,使用pip install python-docx -i htt…...
有哪些手段可以优化 CSS, 提高性能
CSS优化是Web开发中提高性能和用户体验的关键部分。下面详细解释一些CSS优化的方法,以提高性能: 合并和压缩CSS文件: 合并文件:将多个CSS文件合并成一个,以减少HTTP请求次数。这可以通过构建工具(如Webpack)…...
ARM可用的可信固件项目简介
安全之安全(security)博客目录导读 目录 一、TrustedFirmware-A (TF-A) 二、MCUboot 三、TrustedFirmware-M (TF-M) 四、TF-RMM 五、OP-TEE 六、Mbed TLS 七、Hafnium 八、Trusted Services 九、Open CI 可信固件为Armv8-A、Armv9-A和Armv8-M提供了安全软件的参考实现…...
信创办公–基于WPS的Word最佳实践系列 (图文环绕方式)
信创办公–基于WPS的Word最佳实践系列 (图文环绕方式) 目录 应用背景操作步骤1、 打开布局选项中图文环绕方式的方法2、 图文环绕三大类型 应用背景 在Word中,对文字和图片进行排版时,采用各种不同的图片与文字组合效果能够使页面…...
Naive UI数据表格分页pageCount配置没效果
吐槽:因为naive-ui是基于vue3,所以目前的组件资料是少之又少啊,虽然好用,但感觉没有特别的普及。 背景:记得1年前我第一次碰到了这个问题,在列表里使用:pagination分页,怎么都不显示页码&#…...
Kibana Discover数据查询
步骤1:打开管理页面(Management) 步骤2: 因为前面的章节导入航班数据的时候,自动创建了一个名字叫kibana_sample_data_flights的航班数据索引,如果我们只想搜索kibana_sample_data_flights索引的数据,则不需要通配符&…...
笔记 | 编程经验谈:如何正确的使用内存
笔记 | 编程经验谈:如何正确的使用内存 首先我们要了解内存的分配方式。一般来说,内存的分配方式有三种: 1.从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 2.在栈上创建。在执行函数时,函数内…...
C语言入门-1.1 C语言概述
想要学好一门计算机编程语言,就和谈一个女朋友是一样的,需要对其深入了解。 1、计算机语言 (1)什么是计算机语言? 顾名思义,就是计算机之间交流的语言,就和人一样,咱们都是使用普通…...
周记之学习总结
你在人群中看到的每一个耀眼的女孩,都是踩着刀尖过来的。你如履平地般地舒适坦然,当然不配拥有任何光芒; 10.11-10.12 思来想去还是不舍得,搞了一下这个jwt,看了很多视频和博客,一直没看懂,两…...
程序设计:C++ 一个可以放入共享内存的string模板
共享内存由于是多进程共享的,里面的数据不适合包含指针,因为共享内存在不同进程里的地址并不相同。尽管可以在连接共享内存时指定连接地址,但是,这样做限制太多: 不同硬件、系统这个地址可能不一样,没有通…...
【EI会议征稿】第三届应用力学与先进材料国际学术会议(ICAMAM 2024)
第三届应用力学与先进材料国际学术会议(ICAMAM 2024) 2024 3rd International Conference on Applied Mechanics and Advanced Materials(ICAMAM 2024) 第三届应用力学与先进材料国际学术会议(ICAMAM 2024)…...
Python -- I/O编程
文章目录 一、文件读写1. 读文件2. 二进制文件3. 字符编码4. 写文件 二、StringIO和BytesIO三、操作文件和目录1. 操作系统命令2. 操作文件 四、序列化五、 JSON六、异步IO1. 协程2. asyncioasync/awaitaiohttp 一、文件读写 Python内置了读写文件的函数,用法和C是…...
langchain入门指南和实战
简单介绍 LangChain 是一个开源的语言模型集成框架,旨在简化使用大型语言模型(LLM)创建应用程序的过程。 利用它可以让开发者使用语言模型来实现各种复杂的任务,例如文本到图像的生成、文档问答、聊天机器人、 调用特定的SaaS服务…...
群晖synology DSM 7.2设置钉钉Webhooks通知
现在越来越多的小伙伴都有了自己的Nas系统,为了更加方便的接收Nas的消息,这篇文章带着大家一起配置一个钉钉(机器人)即时消息通知 首先登录钉钉的开放平台:开发者后台统一登录 - 钉钉统一身份认证 1.创建一个机器人&…...
STP生成树协议详解
一、STP作用 如果链路断开或节点故障,那么互联的设备就无法正常通信了,这类网络问题叫做单点故障。没有备份的链路或节点,出现故障会直接断网。如果要提供 724 小时不间断的服务,那就需要在网络中提前部署冗余。避免出现单点故障…...
CentOS 6/7/8 操作系统镜像下载
CentOS Mirrors List 编辑 DownloadAbout About CentOS Frequently Asked Questions (FAQs) Special Interest Groups (SIGs) CentOS Variants Governance Community Contribute Forums Mailing Lists IRC Calendar & IRC Meeting List Planet Submit a Bug Stories Doc…...
中国社科院与美国杜兰大学金融管理硕士---不将就的人生
“万般皆下品,惟有读书高”、“书中自有颜如玉,书中自有黄金屋”,古往今来,读书的好处为人们所重视。从而想拿到学历没有知识的沉淀,没有一定的学识水平,又怎么能拿到含金量颇高的学历呢?退一步…...
教程更新 | 持续开源 RK3568驱动指南-驱动基础进阶篇
《iTOP-RK3568开发板驱动开发指南》手册文档更新,手册内容对应视频教程,后续资料会不断更新,不断完善,帮助用户快速入门,大大提升研发速度。 ✦ 第一篇 驱动基础 第1章 前言 第2章 你好!内核源码 第3章 …...
Jmeter测试关联接口
Jmeter用于接口测试时,后一个接口经常需要用到前一次接口返回的结果,本文主要介绍jmeter通过正则表达式提取器来实现接口关联的方式,可供参考。 一、实例场景: 有如下两个接口,通过正则表达式提取器,将第一…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...
用递归算法解锁「子集」问题 —— LeetCode 78题解析
文章目录 一、题目介绍二、递归思路详解:从决策树开始理解三、解法一:二叉决策树 DFS四、解法二:组合式回溯写法(推荐)五、解法对比 递归算法是编程中一种非常强大且常见的思想,它能够优雅地解决很多复杂的…...
