今日はなにの日。

気になったこと勉強になったことのメモ。

今日は、Pwnを解くための道のり一日目の日。

目次

とある日

これはCTFでPwnの問題を解くための学習記録である。

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を解いたときの快感を味わいたい。