当前位置: 首页 > news >正文

攻防世界题目练习——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.

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

相关文章:

  • Python制作PDF转Word工具(Tkinter+pdf2docx)
  • 有哪些手段可以优化 CSS, 提高性能
  • ARM可用的可信固件项目简介
  • 信创办公–基于WPS的Word最佳实践系列 (图文环绕方式)
  • Naive UI数据表格分页pageCount配置没效果
  • Kibana Discover数据查询
  • 笔记 | 编程经验谈:如何正确的使用内存
  • C语言入门-1.1 C语言概述
  • 周记之学习总结
  • 程序设计:C++ 一个可以放入共享内存的string模板
  • 【EI会议征稿】第三届应用力学与先进材料国际学术会议(ICAMAM 2024)
  • Python -- I/O编程
  • langchain入门指南和实战
  • 群晖synology DSM 7.2设置钉钉Webhooks通知
  • STP生成树协议详解
  • CentOS 6/7/8 操作系统镜像下载
  • 中国社科院与美国杜兰大学金融管理硕士---不将就的人生
  • 教程更新 | 持续开源 RK3568驱动指南-驱动基础进阶篇
  • Jmeter测试关联接口
  • C++之基于Winsock2封装UDPServer与UDPClient
  • 为什么说指针是c语言的灵魂?
  • 性能测试jmeter命令行运行+html测试报告解读
  • Service Mesh和Kubernetes:加强微服务的通信与安全性
  • 『吴秋霖赠书活动 | 第三期』《Python asyncio并发编程》
  • 数字孪生在工厂领域的应用和优势
  • 如何写代码实现VRP问题中车辆容量限制及时间窗要求(python)
  • C语言求解汉诺塔问题
  • 安装LSF
  • 百度的新想象力在哪?
  • Linux使用rpm包安装mysql5.7