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}