Assemble your way to the flag (50pts)
2 days, 53 minutes, 46 seconds remainingMy friend was trying out assembly for the first time, he has no clue what he's doing, help him out and procure your reward in the form of a flag :)
fileコマンドでファイルタイプを確認します。Linux用の64bit実行ファイルです。
$ file questionquestion: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=8fab56740532448fb41c467bd5e093f74a0e6994, not stripped
実行してみます。メッセージが表示されてプログラムが終了します。
動作を確認するために、objdumpで逆アセンブルします。$ ./questionLook for something else....
0x6b0~0x6c1で0x50と0x2dのxorをとってスタックにつんでいます。次に0x6c2~0x6d3で0xc1と0xb8のxorをとってスタックにつんでいます。このような処理が0x8cbまで続き、0x8ccで0x560の関数をcallしています。$ objdump -s -D question >aaa.txt
00000000000006a0 <main>:6a0: push %rbp6a1: mov %rsp,%rbp6a4: lea 0x2b9(%rip),%rdi # 964 Look for something else....6ab: mov $0x0,%eax6b0: mov $0x50,%rax6b7: mov $0x2d,%rbx6be: xor %rbx,%rax6c1: push %rax6c2: mov $0xc1,%rax6c9: mov $0xb8,%rbx6d0: xor %rbx,%rax6d3: push %rax
(略)8a8: mov $0xbe,%rax8af: mov $0xdd,%rbx8b6: xor %rbx,%rax8b9: push %rax8ba: mov $0xac,%rax8c1: mov $0xdc,%rbx8c8: xor %rbx,%rax8cb: push %rax8cc: callq 560 <_init+0x30>
それではgdbで0x8ccにブレークポイントを設定してスタックを表示してみます。次のように出力されます。
したがって、フラグは、gdb-peda$ x/30ws 0x7fffffffdb200x7fffffffdb20: U"p"0x7fffffffdb28: U"c"0x7fffffffdb30: U"t"0x7fffffffdb38: U"f"0x7fffffffdb40: U"{"0x7fffffffdb48: U"l"0x7fffffffdb50: U"3"0x7fffffffdb58: U"g"0x7fffffffdb60: U"e"0x7fffffffdb68: U"N"0x7fffffffdb70: U"d"0x7fffffffdb78: U"s"0x7fffffffdb80: U"_"0x7fffffffdb88: U"c"0x7fffffffdb90: U"0"0x7fffffffdb98: U"d"0x7fffffffdba0: U"3"0x7fffffffdba8: U"_"0x7fffffffdbb0: U"1"0x7fffffffdbb8: U"n"0x7fffffffdbc0: U"_"0x7fffffffdbc8: U"4"0x7fffffffdbd0: U"S"0x7fffffffdbd8: U"s"0x7fffffffdbe0: U"3"0x7fffffffdbe8: U"m"0x7fffffffdbf0: U"b"0x7fffffffdbf8: U"1"0x7fffffffdc00: U"y"0x7fffffffdc08: U"}"
pctf{l3geNds_c0d3_1n_4Ss3mb1y}