こんとろーるしーこんとろーるぶい

週末にカチャカチャッターン!したことを貼り付けていくブログ

RCTF 2018 - git

問題文

My file lost! 
attachment: https://drive.google.com/open?id=1Mo3uN2FV1J-lbqjQZvvXitWagZqjD1Xi 

writeup

問題文で提示されたGoogleドライブのURLからzipをダウンロードして中身を確認。

root@kali:git# ll -a
合計 9
drwxrwxrwx 1 root root    0  5月 19  2018 .
drwxrwxrwx 1 root root    0  5月 19  2018 ..
drwxrwxrwx 1 root root 4096  5月 13 14:04 .git
-rwxrwxrwx 1 root root   11  5月 13 13:54 HelloWorld.txt

root@kali:git# cat HelloWorld.txt 
HelloWorld

問題タイトルのとおり、gitリポジトリからフラグを探す問題のようだ。
gitコマンドを使用してリポジトリ情報を確認する。
一見、Initial Commitしかしておらず、ファイルも1ファイルしか無いように見える。

root@kali:git# git log
commit 22d3349a5c6fe45758daba276108137382a01caa (HEAD -> master, develop)
Author: zsx <zsx@zsxsoft.com>
Date:   Sun May 13 12:54:34 2018 +0800

    Initial Commit

root@kali:git# git ls-files
HelloWorld.txt

root@kali:git# git ls-tree HEAD
100644 blob 3da1ec26e9c8512eae062868a9ff9bae47e5625b    HelloWorld.txt

logs/HEADを見てみると、rebaseをしていた。

root@kali:git# cat .git/logs/HEAD 
0000000000000000000000000000000000000000 22d3349a5c6fe45758daba276108137382a01caa zsx <zsx@zsxsoft.com> 1526187274 +0800  commit (initial): Initial Commit
22d3349a5c6fe45758daba276108137382a01caa 22d3349a5c6fe45758daba276108137382a01caa zsx <zsx@zsxsoft.com> 1526187289 +0800  checkout: moving from master to rctf
22d3349a5c6fe45758daba276108137382a01caa f4d0f6ddf6660f5c9273c84f3de64840a407bef1 zsx <zsx@zsxsoft.com> 1526187319 +0800  commit: Flag
f4d0f6ddf6660f5c9273c84f3de64840a407bef1 f671986f9aaa4fc49d8f3eba916d7947dc9f7e46 zsx <zsx@zsxsoft.com> 1526187331 +0800  commit: Revert
f671986f9aaa4fc49d8f3eba916d7947dc9f7e46 22d3349a5c6fe45758daba276108137382a01caa zsx <zsx@zsxsoft.com> 1526187346 +0800  checkout: moving from rctf to master
22d3349a5c6fe45758daba276108137382a01caa f671986f9aaa4fc49d8f3eba916d7947dc9f7e46 zsx <zsx@zsxsoft.com> 1526187455 +0800  checkout: moving from master to develop
f671986f9aaa4fc49d8f3eba916d7947dc9f7e46 22d3349a5c6fe45758daba276108137382a01caa zsx <zsx@zsxsoft.com> 1526187488 +0800  checkout: moving from develop to master
22d3349a5c6fe45758daba276108137382a01caa f671986f9aaa4fc49d8f3eba916d7947dc9f7e46 zsx <zsx@zsxsoft.com> 1526187817 +0800  checkout: moving from master to develop
f671986f9aaa4fc49d8f3eba916d7947dc9f7e46 22d3349a5c6fe45758daba276108137382a01caa zsx <zsx@zsxsoft.com> 1526187876 +0800  rebase -i (start): checkout 22d3349
22d3349a5c6fe45758daba276108137382a01caa 22d3349a5c6fe45758daba276108137382a01caa zsx <zsx@zsxsoft.com> 1526187876 +0800  rebase -i (finish): returning to refs/heads/develop
22d3349a5c6fe45758daba276108137382a01caa 22d3349a5c6fe45758daba276108137382a01caa zsx <zsx@zsxsoft.com> 1526187889 +0800  checkout: moving from develop to master

強引だが、objects配下を一通り確認する作戦。

root@kali:git# ls -R .git/objects/
.git/objects/:
02  22  3d  82  a9  f4  f6  info  pack

.git/objects/02:
cf5771b4db91f6e4949b428e32374ec6715085

.git/objects/22:
d3349a5c6fe45758daba276108137382a01caa

.git/objects/3d:
a1ec26e9c8512eae062868a9ff9bae47e5625b

.git/objects/82:
a7a337a2cdb9d2b58837b5a858be7ba3fa6779

.git/objects/a9:
a4eab102d1dbd8305e343fc2ba6b2ab18e6eef

.git/objects/f4:
d0f6ddf6660f5c9273c84f3de64840a407bef1

.git/objects/f6:
71986f9aaa4fc49d8f3eba916d7947dc9f7e46

.git/objects/info:

.git/objects/pack:

objectsディレクトリ配下のディレクトリ名+ファイル名が、
gitで管理されているハッシュ値となっているため、git cat-fileで中身を直接表示できる。
とりあえず上から確認すると、さっそくflag.txtの痕跡を発見。

root@kali:git# git cat-file -p 02cf5771b4db91f6e4949b428e32374ec6715085
100644 blob 3da1ec26e9c8512eae062868a9ff9bae47e5625b    HelloWorld.txt
100644 blob 82a7a337a2cdb9d2b58837b5a858be7ba3fa6779    flag.txt

これもgit cat-fileで表示すると、あっさりフラグゲット。

root@kali:git# git cat-file -p 82a7a337a2cdb9d2b58837b5a858be7ba3fa6779
RCTF{gIt_BranCh_aNd_l0g}

別解

22d3349a5c6fe45758daba276108137382a01caa f4d0f6ddf6660f5c9273c84f3de64840a407bef1 zsx <zsx@zsxsoft.com> 1526187319 +0800   commit: Flag

上記のlogs/HEADのコメントより、Flagがcommitされた際のハッシュ値がわかっているので、
この情報を信じてcommit前後のDiffを確認する。

root@kali:git# git diff 22d3349a5c6fe45758daba276108137382a01caa f4d0f6ddf6660f5c9273c84f3de64840a407bef1
diff --git a/flag.txt b/flag.txt
new file mode 100644
index 0000000..82a7a33
--- /dev/null
+++ b/flag.txt
@@ -0,0 +1 @@
+RCTF{gIt_BranCh_aNd_l0g}