Skip to content

Instantly share code, notes, and snippets.

@msymt
Last active January 12, 2020 05:10
Show Gist options
  • Save msymt/57e1ae7b625c2434aaefe74a79da5c45 to your computer and use it in GitHub Desktop.
Save msymt/57e1ae7b625c2434aaefe74a79da5c45 to your computer and use it in GitHub Desktop.
関数呼び出しとlibc
00000000004005e0 <printf@plt>:
  4005e0:       ff 25 3a 0a 20 00       jmp    QWORD PTR [rip+0x200a3a]        # 601020 <printf@GLIBC_2.2.5>
  4005e6:       68 01 00 00 00          push   0x1                             # rip+0x200a3a(601020) : 4005e6
  4005eb:       e9 d0 ff ff ff          jmp    4005c0 <.plt>
////
0000000000400782 <main>:
  4007bb:       b8 00 00 00 00          mov    eax,0x0
  4007c0:       e8 1b fe ff ff          call   4005e0 <printf@plt>
  4007c5:       48 8d 45 e0             lea    rax,[rbp-0x20]
  4007c9:       48 89 c7                mov    rdi,rax

最初のprintf関数呼び出し(0x4007c0)の前までは、rip+0x200a3a(601020)には4005e6(push 0x1)が格納。
printfを呼び出すと4005e6以降の処理(push 0x1; jmp 4005c0 <.plt>;)が実行されて、rip+0x200a3a(601020)にlibc内のprintf関数のアドレスが格納される。
そして、4005e0を呼び出すとlibc中のprintf関数に 直接jmp する。
つまり、gotのアドレスを呼び出すには、一度pltを呼び出す必要がある.([2])

printf関数を呼び出したあとで、601020の中身を出力すれば、libc内printf関数のアドレスが得られる

gdb-peda$ b *0x4007c0
Breakpoint 1 at 0x4007c0
gdb-peda$ r
gdb-peda$ x/1xg 0x601020
0x601020:	0x00000000004005e6
gdb-peda$ x/1xg 0x601020
0x601020:	0x00007ffff7a48e80

図示

1回目

00000000004005e0 <printf@plt>:
  4005e0:       ff 25 3a 0a 20 00      -- jmp    QWORD PTR [rip+0x200a3a]        # 601020 <printf@GLIBC_2.2.5>
                                       |
  4005e6:       68 01 00 00 00         -> push   0x1                             # rip+0x200a3a(601020) : 4005e6
  4005eb:       e9 d0 ff ff ff            jmp    4005c0 <.plt>

2回目

00000000004005e0 <printf@plt>:
  4005e0:       ff 25 3a 0a 20 00       jmp    QWORD PTR [rip+0x200a3a]-------># 601020 <printf@GLIBC_2.2.5>
  4005e6:       68 01 00 00 00          push   0x1                             # rip+0x200a3a(601020) : 4005e6
  4005eb:       e9 d0 ff ff ff          jmp    4005c0 <.plt>

参考

[1]Malleus CTF Pwn

[2]https://twitter.com/Nperair/status/1216207177477570560

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment