目次
とある日
これはCTFでPwnの問題を解くための学習記録である。
Pwn
難しい。
Reversing
Pwnの前段階としてファイル解析を行うためのコマンド。
fileコマンド
file - ファイルタイプを判定する
[root@e2234e5cf739 cpawctf]# ll total 1580 -rwxr-xr-x 1 root root 8520 Jul 4 05:45 a.out -rwxr-xr-x 1 root root 878136 Jul 3 02:18 cat.png drwxr-xr-x 11 root root 4096 Jul 4 03:51 Configurations2 -rw-r--r-- 1 root root 13264 Oct 16 2015 content.xml -rwxr-xr-x 1 root root 318 Jul 4 05:42 crypto100.c -rwxrwxrwx 1 root root 99 Jul 4 06:02 cry.sh -rw-r--r-- 1 root root 1457 Jul 4 06:02 cry.txt -rw-r--r-- 1 root root 4702 Jul 3 06:30 download.php?param=342992e2fd4444a0d16539bd997b6307 -rw-r--r-- 1 root root 4702 Jul 3 06:31 download.php?param=342992e2fd4444a0d16539bd997b6307.1 -rw-r--r-- 1 tcpdump tcpdump 247630 Jul 4 03:07 dumplog -rwxr-xr-x 1 root root 8556 Jul 3 06:31 exec_me -rwxr-xr-x 1 root root 247630 Jul 4 02:57 http_traffic.pcap drwxr-xr-x 2 root root 4096 Jul 4 03:51 META-INF -rw-r--r-- 1 root root 1067 Oct 16 2015 meta.xml -rw-r--r-- 1 root root 43 Oct 16 2015 mimetype -rwxr-xr-x 1 root root 46197 Jul 4 03:27 misc100 -rwxr-xr-x 1 root root 21697 Jul 4 03:49 misc100.zip -rwxr-xr-x 1 root root 198 Jul 3 07:10 network10.pcap -rwxr-xr-x 1 root root 27136 Jul 3 06:54 open_me.docs -rwxr-xr-x 1 root root 7422 Jul 4 06:05 rev100 -rw-r--r-- 1 root root 9113 Oct 16 2015 settings.xml -rw-r--r-- 1 root root 13529 Oct 16 2015 styles.xml -rw-r--r-- 1 root root 34 Jul 3 07:40 t drwxr-xr-x 2 root root 4096 Jul 4 03:51 Thumbnails [root@e2234e5cf739 cpawctf]# file t t: ASCII text [root@e2234e5cf739 cpawctf]# file a.out a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0ba91807874f1aeea549062b0142cafe66d7c7d7, not stripped [root@e2234e5cf739 cpawctf]#
【file】Linuxでファイルの種類を取得するコマンド | UX MILK
stringsコマンド
strings - ファイル中の表示可能な文字列を表示する
GNU strings は、与えられたそれぞれの file から表示可能なキャラクタの列を表示する。デフォルトでは 4 文字以上の長 さのものを、可能な限り表示するが、この長さは以下で説明するオプションに よって変更可能である。ファイルがオブジェクトファイルの場合のデフォルト では、初期化・ロードされたセクションからの文字だけを表示する。他のファ イルについては、ファイル全体から文字列を探し、表示する。
strings は主としてテキストファイル以外のファイル内容を判断するために用いられる。
[root@e2234e5cf739 cpawctf]# strings t d9edff99746401bd077afa92860f83de3 [root@e2234e5cf739 cpawctf]# strings a.out /lib64/ld-linux-x86-64.so.2 libc.so.6 putchar printf strlen atoi __libc_start_main __gmon_start__ GLIBC_2.2.5 UH-P UH-P []A\A]A^A_ cpaw{ ;*3$" GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-44) crtstuff.c __JCR_LIST__ deregister_tm_clones __do_global_dtors_aux completed.6355 __do_global_dtors_aux_fini_array_entry frame_dummy __frame_dummy_init_array_entry crypto100.c __FRAME_END__ __JCR_END__ __init_array_end _DYNAMIC __init_array_start __GNU_EH_FRAME_HDR _GLOBAL_OFFSET_TABLE_ __libc_csu_fini putchar@@GLIBC_2.2.5 _edata strlen@@GLIBC_2.2.5 printf@@GLIBC_2.2.5 __libc_start_main@@GLIBC_2.2.5 __data_start __gmon_start__ __dso_handle _IO_stdin_used __libc_csu_init __bss_start main atoi@@GLIBC_2.2.5 __TMC_END__ .symtab .strtab .shstrtab .interp .note.ABI-tag .note.gnu.build-id .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .text .fini .rodata .eh_frame_hdr .eh_frame .init_array .fini_array .jcr .dynamic .got .got.plt .data .bss .comment [root@e2234e5cf739 cpawctf]#
【 strings 】コマンド――バイナリファイルの可読部分を表示する:Linux基本コマンドTips(92) - @IT
objdumpコマンド
objdump - オブジェクトファイルの情報を表示する
objdump は指定されたひとつ以上のオブジェクトファイルについて、その情報を表示す る。オプションで表示する情報の種類を指定できる。この情報はコンパイルツー ルに関する作業をしているプログラマーにとってもっとも有益であろう。逆に 単に自分のプログラムをコンパイルして実行させているだけの場合にはあまり 役に立たないかもしれない。
objfile は調べるオブジェクトファイルである。書庫 (archive) を指定した場合には、 objdump は書庫のメンバーであるオブジェクトファイルそれぞれについての情報を表示 する。
[root@e2234e5cf739 cpawctf]# objdump -d a.out a.out: file format elf64-x86-64 Disassembly of section .init: 0000000000400490 <_init>: 400490: 48 83 ec 08 sub $0x8,%rsp 400494: 48 8b 05 5d 0b 20 00 mov 0x200b5d(%rip),%rax # 600ff8 <__gmon_start__> 40049b: 48 85 c0 test %rax,%rax 40049e: 74 05 je 4004a5 <_init+0x15> 4004a0: e8 5b 00 00 00 callq 400500 <__gmon_start__@plt> 4004a5: 48 83 c4 08 add $0x8,%rsp 4004a9: c3 retq Disassembly of section .plt: 00000000004004b0 <.plt>: 4004b0: ff 35 52 0b 20 00 pushq 0x200b52(%rip) # 601008 <_GLOBAL_OFFSET_TABLE_+0x8> 4004b6: ff 25 54 0b 20 00 jmpq *0x200b54(%rip) # 601010 <_GLOBAL_OFFSET_TABLE_+0x10> 4004bc: 0f 1f 40 00 nopl 0x0(%rax) 00000000004004c0 <putchar@plt>: 4004c0: ff 25 52 0b 20 00 jmpq *0x200b52(%rip) # 601018 <putchar@GLIBC_2.2.5> 4004c6: 68 00 00 00 00 pushq $0x0 4004cb: e9 e0 ff ff ff jmpq 4004b0 <.plt> 00000000004004d0 <strlen@plt>: 4004d0: ff 25 4a 0b 20 00 jmpq *0x200b4a(%rip) # 601020 <strlen@GLIBC_2.2.5> 4004d6: 68 01 00 00 00 pushq $0x1 4004db: e9 d0 ff ff ff jmpq 4004b0 <.plt> 00000000004004e0 <printf@plt>: 4004e0: ff 25 42 0b 20 00 jmpq *0x200b42(%rip) # 601028 <printf@GLIBC_2.2.5> 4004e6: 68 02 00 00 00 pushq $0x2 4004eb: e9 c0 ff ff ff jmpq 4004b0 <.plt> 00000000004004f0 <__libc_start_main@plt>: 4004f0: ff 25 3a 0b 20 00 jmpq *0x200b3a(%rip) # 601030 <__libc_start_main@GLIBC_2.2.5> 4004f6: 68 03 00 00 00 pushq $0x3 4004fb: e9 b0 ff ff ff jmpq 4004b0 <.plt> 0000000000400500 <__gmon_start__@plt>: 400500: ff 25 32 0b 20 00 jmpq *0x200b32(%rip) # 601038 <__gmon_start__> 400506: 68 04 00 00 00 pushq $0x4 40050b: e9 a0 ff ff ff jmpq 4004b0 <.plt> 0000000000400510 <atoi@plt>: 400510: ff 25 2a 0b 20 00 jmpq *0x200b2a(%rip) # 601040 <atoi@GLIBC_2.2.5> 400516: 68 05 00 00 00 pushq $0x5 40051b: e9 90 ff ff ff jmpq 4004b0 <.plt> Disassembly of section .text: 0000000000400520 <_start>: 400520: 31 ed xor %ebp,%ebp 400522: 49 89 d1 mov %rdx,%r9 400525: 5e pop %rsi 400526: 48 89 e2 mov %rsp,%rdx 400529: 48 83 e4 f0 and $0xfffffffffffffff0,%rsp 40052d: 50 push %rax 40052e: 54 push %rsp 40052f: 49 c7 c0 40 07 40 00 mov $0x400740,%r8 400536: 48 c7 c1 d0 06 40 00 mov $0x4006d0,%rcx 40053d: 48 c7 c7 0d 06 40 00 mov $0x40060d,%rdi 400544: e8 a7 ff ff ff callq 4004f0 <__libc_start_main@plt> 400549: f4 hlt 40054a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0000000000400550 <deregister_tm_clones>: 400550: b8 57 10 60 00 mov $0x601057,%eax 400555: 55 push %rbp 400556: 48 2d 50 10 60 00 sub $0x601050,%rax 40055c: 48 83 f8 0e cmp $0xe,%rax 400560: 48 89 e5 mov %rsp,%rbp 400563: 77 02 ja 400567 <deregister_tm_clones+0x17> 400565: 5d pop %rbp 400566: c3 retq 400567: b8 00 00 00 00 mov $0x0,%eax 40056c: 48 85 c0 test %rax,%rax 40056f: 74 f4 je 400565 <deregister_tm_clones+0x15> 400571: 5d pop %rbp 400572: bf 50 10 60 00 mov $0x601050,%edi 400577: ff e0 jmpq *%rax 400579: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) 0000000000400580 <register_tm_clones>: 400580: b8 50 10 60 00 mov $0x601050,%eax 400585: 55 push %rbp 400586: 48 2d 50 10 60 00 sub $0x601050,%rax 40058c: 48 c1 f8 03 sar $0x3,%rax 400590: 48 89 e5 mov %rsp,%rbp 400593: 48 89 c2 mov %rax,%rdx 400596: 48 c1 ea 3f shr $0x3f,%rdx 40059a: 48 01 d0 add %rdx,%rax 40059d: 48 d1 f8 sar %rax 4005a0: 75 02 jne 4005a4 <register_tm_clones+0x24> 4005a2: 5d pop %rbp 4005a3: c3 retq 4005a4: ba 00 00 00 00 mov $0x0,%edx 4005a9: 48 85 d2 test %rdx,%rdx 4005ac: 74 f4 je 4005a2 <register_tm_clones+0x22> 4005ae: 5d pop %rbp 4005af: 48 89 c6 mov %rax,%rsi 4005b2: bf 50 10 60 00 mov $0x601050,%edi 4005b7: ff e2 jmpq *%rdx 4005b9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) 00000000004005c0 <__do_global_dtors_aux>: 4005c0: 80 3d 85 0a 20 00 00 cmpb $0x0,0x200a85(%rip) # 60104c <_edata> 4005c7: 75 11 jne 4005da <__do_global_dtors_aux+0x1a> 4005c9: 55 push %rbp 4005ca: 48 89 e5 mov %rsp,%rbp 4005cd: e8 7e ff ff ff callq 400550 <deregister_tm_clones> 4005d2: 5d pop %rbp 4005d3: c6 05 72 0a 20 00 01 movb $0x1,0x200a72(%rip) # 60104c <_edata> 4005da: f3 c3 repz retq 4005dc: 0f 1f 40 00 nopl 0x0(%rax) 00000000004005e0 <frame_dummy>: 4005e0: 48 83 3d 38 08 20 00 cmpq $0x0,0x200838(%rip) # 600e20 <__JCR_END__> 4005e7: 00 4005e8: 74 1e je 400608 <frame_dummy+0x28> 4005ea: b8 00 00 00 00 mov $0x0,%eax 4005ef: 48 85 c0 test %rax,%rax 4005f2: 74 14 je 400608 <frame_dummy+0x28> 4005f4: 55 push %rbp 4005f5: bf 20 0e 60 00 mov $0x600e20,%edi 4005fa: 48 89 e5 mov %rsp,%rbp 4005fd: ff d0 callq *%rax 4005ff: 5d pop %rbp 400600: e9 7b ff ff ff jmpq 400580 <register_tm_clones> 400605: 0f 1f 00 nopl (%rax) 400608: e9 73 ff ff ff jmpq 400580 <register_tm_clones> 000000000040060d <main>: 40060d: 55 push %rbp 40060e: 48 89 e5 mov %rsp,%rbp 400611: 53 push %rbx 400612: 48 83 ec 38 sub $0x38,%rsp 400616: 89 7d cc mov %edi,-0x34(%rbp) 400619: 48 89 75 c0 mov %rsi,-0x40(%rbp) 40061d: 48 8b 45 c0 mov -0x40(%rbp),%rax 400621: 48 83 c0 10 add $0x10,%rax 400625: 48 8b 00 mov (%rax),%rax 400628: 48 89 c7 mov %rax,%rdi 40062b: e8 e0 fe ff ff callq 400510 <atoi@plt> 400630: 89 45 e4 mov %eax,-0x1c(%rbp) 400633: 48 8b 45 c0 mov -0x40(%rbp),%rax 400637: 48 8b 40 08 mov 0x8(%rax),%rax 40063b: 48 89 45 d8 mov %rax,-0x28(%rbp) 40063f: bf 60 07 40 00 mov $0x400760,%edi 400644: b8 00 00 00 00 mov $0x0,%eax 400649: e8 92 fe ff ff callq 4004e0 <printf@plt> 40064e: 8b 45 e4 mov -0x1c(%rbp),%eax 400651: 83 e8 01 sub $0x1,%eax 400654: 89 45 ec mov %eax,-0x14(%rbp) 400657: eb 3e jmp 400697 <main+0x8a> 400659: 8b 45 ec mov -0x14(%rbp),%eax 40065c: 89 45 e8 mov %eax,-0x18(%rbp) 40065f: eb 1e jmp 40067f <main+0x72> 400661: 8b 45 e8 mov -0x18(%rbp),%eax 400664: 48 63 d0 movslq %eax,%rdx 400667: 48 8b 45 d8 mov -0x28(%rbp),%rax 40066b: 48 01 d0 add %rdx,%rax 40066e: 0f b6 00 movzbl (%rax),%eax 400671: 0f be c0 movsbl %al,%eax 400674: 89 c7 mov %eax,%edi 400676: e8 45 fe ff ff callq 4004c0 <putchar@plt> 40067b: 83 6d e8 01 subl $0x1,-0x18(%rbp) 40067f: 8b 45 e4 mov -0x1c(%rbp),%eax 400682: 8b 55 ec mov -0x14(%rbp),%edx 400685: 29 c2 sub %eax,%edx 400687: 89 d0 mov %edx,%eax 400689: 83 c0 01 add $0x1,%eax 40068c: 3b 45 e8 cmp -0x18(%rbp),%eax 40068f: 7e d0 jle 400661 <main+0x54> 400691: 8b 45 e4 mov -0x1c(%rbp),%eax 400694: 01 45 ec add %eax,-0x14(%rbp) 400697: 8b 45 ec mov -0x14(%rbp),%eax 40069a: 48 63 d8 movslq %eax,%rbx 40069d: 48 8b 45 d8 mov -0x28(%rbp),%rax 4006a1: 48 89 c7 mov %rax,%rdi 4006a4: e8 27 fe ff ff callq 4004d0 <strlen@plt> 4006a9: 48 39 c3 cmp %rax,%rbx 4006ac: 76 ab jbe 400659 <main+0x4c> 4006ae: bf 7d 00 00 00 mov $0x7d,%edi 4006b3: e8 08 fe ff ff callq 4004c0 <putchar@plt> 4006b8: b8 00 00 00 00 mov $0x0,%eax 4006bd: 48 83 c4 38 add $0x38,%rsp 4006c1: 5b pop %rbx 4006c2: 5d pop %rbp 4006c3: c3 retq 4006c4: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 4006cb: 00 00 00 4006ce: 66 90 xchg %ax,%ax 00000000004006d0 <__libc_csu_init>: 4006d0: 41 57 push %r15 4006d2: 41 89 ff mov %edi,%r15d 4006d5: 41 56 push %r14 4006d7: 49 89 f6 mov %rsi,%r14 4006da: 41 55 push %r13 4006dc: 49 89 d5 mov %rdx,%r13 4006df: 41 54 push %r12 4006e1: 4c 8d 25 28 07 20 00 lea 0x200728(%rip),%r12 # 600e10 <__frame_dummy_init_array_entry> 4006e8: 55 push %rbp 4006e9: 48 8d 2d 28 07 20 00 lea 0x200728(%rip),%rbp # 600e18 <__init_array_end> 4006f0: 53 push %rbx 4006f1: 4c 29 e5 sub %r12,%rbp 4006f4: 31 db xor %ebx,%ebx 4006f6: 48 c1 fd 03 sar $0x3,%rbp 4006fa: 48 83 ec 08 sub $0x8,%rsp 4006fe: e8 8d fd ff ff callq 400490 <_init> 400703: 48 85 ed test %rbp,%rbp 400706: 74 1e je 400726 <__libc_csu_init+0x56> 400708: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 40070f: 00 400710: 4c 89 ea mov %r13,%rdx 400713: 4c 89 f6 mov %r14,%rsi 400716: 44 89 ff mov %r15d,%edi 400719: 41 ff 14 dc callq *(%r12,%rbx,8) 40071d: 48 83 c3 01 add $0x1,%rbx 400721: 48 39 eb cmp %rbp,%rbx 400724: 75 ea jne 400710 <__libc_csu_init+0x40> 400726: 48 83 c4 08 add $0x8,%rsp 40072a: 5b pop %rbx 40072b: 5d pop %rbp 40072c: 41 5c pop %r12 40072e: 41 5d pop %r13 400730: 41 5e pop %r14 400732: 41 5f pop %r15 400734: c3 retq 400735: 90 nop 400736: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 40073d: 00 00 00 0000000000400740 <__libc_csu_fini>: 400740: f3 c3 repz retq Disassembly of section .fini: 0000000000400744 <_fini>: 400744: 48 83 ec 08 sub $0x8,%rsp 400748: 48 83 c4 08 add $0x8,%rsp 40074c: c3 retq [root@e2234e5cf739 cpawctf]#
ELF実行ファイルをobjdumpでCのソースコード付きで逆アセンブルする方法 - C言語入門
objdump コマンド – オブジェクトファイルの情報を表示する | Linuxコマンド.NET
〆
Pwnを解いたときの快感を味わいたい。