これは実際にはctfゲームです。 hackcenter.comのEnigma 2017の練習我々はext3から削除されたファイルを回復する必要があります。私はフォローしていますこのチュートリアル。
アイノードは1036です。 istat はグループ 0 を提供します。
fsstat undelete.img
Group: 0:
Inode Range: 1 - 1280
...
Inode Table: 24 - 183
...
これから、ノードテーブルのサイズは160ブロックで、それぞれ8つのinodeがあります。 Inode 1036はブロック153にあり、4番目の項目です。
これが確認されました
debugfs -R 'imap <1036>' undelete.img
debugfs 1.43.4 (31-Jan-2017)
Inode 1036 is part of block group 0
located at block 153, offset 0x0180
jls undelete.img | grep 153$
46: Unallocated FS Block 2153
206: Unallocated FS Block 153
214: Unallocated FS Block 153
224: Unallocated FS Block 153
680: Unallocated FS Block 4153
jcat undelete.img 8 206 | dd bs=128 skip=3 count=1 | xxd
1+0 records in
1+0 records out
00000000: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000060: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
128 bytes copied, 0,00719467 s, 17,8 kB/s
jcat undelete.img 8 214 | dd bs=128 skip=3 count=1 | xxd
1+0 records in
1+0 records out
00000000: a481 0000 2000 0000 4d70 8b58 4d70 8b58 .... ...Mp.XMp.X
00000010: 4d70 8b58 0000 0000 0000 0100 0200 0000 Mp.X............
00000020: 0000 0000 0100 0000 ef08 0000 0000 0000 ................
00000030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000060: 0000 0000 17ea 60e7 0000 0000 0000 0000 ......`.........
00000070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
128 bytes copied, 0,00714798 s, 17,9 kB/s
jcat undelete.img 8 224 | dd bs=128 skip=3 count=1 | xxd
1+0 records in
1+0 records out
00000000: a481 0000 0000 0000 4d70 8b58 4d70 8b58 ........Mp.XMp.X
00000010: 4d70 8b58 4d70 8b58 0000 0000 0000 0000 Mp.XMp.X........
00000020: 0000 0000 0100 0000 0000 0000 0000 0000 ................
00000030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000060: 0000 0000 17ea 60e7 0000 0000 0000 0000 ......`.........
128 bytes copied, 0,00556548 s, 23,0 kB/s
00000070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
私が得る唯一の直接ブロックポインタは0x8ef
offsetです40
。ブロックサイズはとして報告されますfsstat
。しかし、
dd bs=1024 skip=2287 count=1 if=undelete.img | xxd
ただ0を与えます。
私は何が間違っているのかわかりません。
答え1
もしファイルシステムイメージのURLを言及していませんでしたが、hackcenter.comに登録した後に見つけることは難しくありません。 (ここではURLを繰り返しません)。
盲目的にレシピに従うのではなく、イメージを見て何を期待するのか見てみましょう。fls
などの名前を持つファイルが複数あることがわかりますがfiller-0
、以降は 1 つのファイルが削除されました。filler-1
filler-1023
key
提出物を探しています
jls undelete.img | grep Commit
...
228: Unallocated Commit Block (seq: 9, sec: 1485533263.2387673088)
...
これが9
最後のコミットであることがわかりました。コミット前に何が起こったのか見てみましょう。 (ブロック番号をコメントアウトしました。)
205: Unallocated FS Block 3112
206: Unallocated FS Block 153 # our inode
207: Unallocated FS Block 3113 # data
208: Unallocated FS Block 3114 # data
209: Unallocated FS Block 3115 # data
210: Unallocated Commit Block (seq: 7, sec: 1485533262.1970733056)
211: Unallocated Descriptor Block (seq: 8)
212: Unallocated FS Block 23 # inode bitmap
213: Unallocated FS Block 2 # group desc
214: Unallocated FS Block 153 # our inode blk
215: Unallocated FS Block 24 # first inode blk
216: Unallocated FS Block 5118
217: Unallocated FS Block 22 # data bitmap
218: Unallocated FS Block 3116 # data
219: Unallocated Commit Block (seq: 8, sec: 1485533262.2227109888)
220: Unallocated Descriptor Block (seq: 9)
221: Unallocated FS Block 5118
222: Unallocated FS Block 24 # first inode blk
223: Unallocated FS Block 1 # super blk
224: Unallocated FS Block 153 # our inode blk
225: Unallocated FS Block 22 # data bitmap
226: Unallocated FS Block 2 # group desc
227: Unallocated FS Block 23 # inode bitmap
228: Unallocated Commit Block (seq: 9, sec: 1485533263.2387673088)
229: Unallocated FS Block Unknown
したがって、コミット#7では、inodeブロックと3つのデータブロックが書き込まれます。コミット#8では、いくつかのinode割り当てとタッチが行われ、個々のデータブロックが記録されます。コミット#9ではほとんど同じですが、データブロックは書き込まれません。
filler
したがって、コミット#7では最後のファイルが作成され、コミット#8ではファイルが作成され記録key
され、コミット#9では再び削除されると推測されます。
それでは、ログ内のinodeブロック153のコピーを見てみましょう。 224(削除後のinode)と206(生成前のinode)には、直接ブロックポインタの空のリストがあります。 214を見ると、何が起こっているのかわかりませんが、次のような結果が得られます。
$ jcat undelete.img 8 214 | dd bs=128 skip=3 count=1 | xxd
00000000: a481 0000 2000 0000 4e70 8b58 4e70 8b58 .... ...Np.XNp.X
00000010: 4e70 8b58 0000 0000 0000 0100 0200 0000 Np.X............
00000020: 0000 0000 0100 0000 2c0c 0000 0000 0000 ........,.......
00000030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000060: 0000 0000 8682 a674 0000 0000 0000 0000 .......t........
00000070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
したがって、の即時ブロックリストには、以前に推測したように、またはにブロックが0x28
あります。0x0c2c
3116
いくつかの点を見て、私たちが離脱していないことを確認しましょう。
$ fcat filler-1022 undelete.img
f1755813fae6d0f542f962f50ff37184
$ dd if=undelete.img bs=1024 skip=3114 count=1 2> /dev/null ; echo
f1755813fae6d0f542f962f50ff37184
$ fcat filler-1023 undelete.img
aa08cba3462555833ffed443474bd133
$ dd if=undelete.img bs=1024 skip=3115 count=1 2> /dev/null ; echo
aa08cba3462555833ffed443474bd133
はい、推測通り、これは書かれたデータですfiller
。それでは、ブロックには何が含まれますか3116
?結果はゼロです。これは、ブロックが更新されなかったことを意味します。しかし、私たちの雑誌にはコピーがあります。両方のfiller
ファイルの場合:
$ jcat undelete.img 208
f1755813fae6d0f542f962f50ff37184
$ jcat undelete.img 209
aa08cba3462555833ffed443474bd133
これで、キーを見つけるのは簡単です(明らかな理由から、公にこれを行うことはありません)。