SlideShare uma empresa Scribd logo
From SEH Overwrite with Egg Hunter
to get a shell!
$Whoami
Rodolpho Concurde (ROd0X)
 Penetration Tester

Instructor I.T

Consultant of I.S – 16 years

EC-C|EH

Talks at: Hack In The Box, Ekoparty, Arab Security Conference, Red Team Village,
Hacker Halted, Qubit Conference, MorterueloCON, Bsides Athens, Bsides SATX, etc.

Author: Hakin9 Magazine: Stack Overflow and From SEH Overwrite with Egg Hunter to
Get a Shell & Pentest Magazine: Covert Channel, From Fuzzing to Get a Shell and From SEH
Overwrite to Get a Shell.

https://www.linkedin.com/in/rodolphoconcurde

rconcurde@gmail.com
Agenda
●
SEH (Structured Exception Handler);
●
Buffer Overflow;
●
PoC
●
SEH Overwrite;
●
Short JMP;
●
Egg Hunter;
●
Bad Characters;
●
Reverse Shell;
●
Perguntas?
Manipulador de Exceções
Exception Handler é um pedaço de código, de dentro de uma aplicação
que têm o objetivo de tratar qualquer exceção que possa ocorrer
durante a execução do software.
O manipulador de exceções se parece com:
Uma exceção é um evento inesperado (um erro) que ocorre em um
sistema ou programa. Quando ocorre uma exceção, o fluxo normal de
execução do programa é interrompido. É importante que a aplicação
possa "lidar" com a exceção ou erro para continuar executando
normalmente.
Os endereços dos "manipuladores de exceção" são armazenados na
pilha.
O sistema operacional Windows possui um "manipulador" padrão que
captura qualquer exceção que não seja tratada pelo programa.
Quando o Windows lida com uma exceção em um programa, você
normalmente verá a mensagem: "o programa encontrou um problema
e precisa ser fechado".
O SEH funciona em cadeia e está localizado no final da pilha.
No clássico Buffer Overflow (vanilla), o exploit substitui o
endereço de retorno, sem se preocupar em escrever mais bytes na
pilha, mas com a técnica SEH Overwrite é possível obter
mais espaço para o shellcode, para ter um exploit mais estável.
Buffer overflow
Buffer overflow é uma anomalia onde um programa, enquanto
escreve dados para um buffer, ultrapassa o limite do buffer e
sobrescreve locais de memória adjacentes.
Pode ser:
Heap based: local na memória que aloca muita quantidade
de dados e, dinamicamente;
Stack based: aloca um tamanho limitado ou fixo de
dados, como, dados de variáveis ou funções locais.
SEH
P0C
Na máquina do atacante usaremos o Kali Linux (com python 2 ou 2.7)
e o software vulnerável que usaremos será o Easy File Sharing Web
Server 7.2, que está sendo executado no Windos 10 Home Single
Language 22H2/Windows XP Service Pack 3 e pode ser baixado em:
https://www.exploit-db.com/apps/60f3ff1f3cd34dec80fba130ea481f31-efssetup.exe
P0C
Abra o Immunity Debugger, depois abra o software vulnerável, e no
Immunity, click em File menu → Attach.
Escolha o software vulnerável e click em Attach!
Depois click em Play ou pressione F9 para rodar o software vulnerável
dentro do Immunity.
P0C
Nós iniciamos com o código de fuzzing em python.
Este código vai enviar 5000 “A” contra o IP do alvo na porta TCP
80.
P0C
Para ver o SEH chain, nós devemos clicar no menu: View → SEH chain
Como nós vemos na imagem, nós temos
o campo Address e SE handler com o
valor sobrescrito com 41414141, então
clique com o botão direito no 41414141 e
Follow address in stack.
P0C
Na imagem abaixo, nós vemos o Pointer to next SEH record e o valor
SE handler sobrescrito com 41414141, isto significa que funcionou,
nós sobrescrevemos o SEH chain! 8-)
P0C
Agora, nos necessitamos encontrar quantos caracteres são necessários para
sobrescrever o SEH, para obter controle do SEH chain.
Para isto, nós usaremos a ferramenta pattern_create.
No Kali, no diretório: /usr/share/metasploit-framework/tools/exploit → digite:
./pattern_create.rb -l 5000
Pattern_create gerou uma grande quantidade de padronizados caracteres.
Copie estes caracteres gerados, e cole no python exploit script, na variável
crash1.
P0C
Então envie o exploit code contra o alvo como mostra a imagem abaixo.
Clique em View → SEH chain, e como mostra a imagem abaixo nós
temos o Address e SE handler sobrescritos.
P0C
Agora, nós usaremos a ferramenta pattern_offset para encontrar o
offset do SE handler.
No diretório /usr/share/metasploit-framework/tools/exploit, digite como
mostra a imagem abaixo:
./pattern_offset.rb -l 5000 -q 46356646
P0C
Nós encontramos o offset 4065! Isso significa que nós necessitamos de
4065 bytes para sobrescrever o SEH. Na imagem abaixo, nós colocamos
na variável crash1: 4061 * “A” + “B” * 4 + “C” * 4, isto significa que nós
vamos preencher o SEH chain com 4 “B” e 4 “C”.
P0C
Novamente, envie o exploit code contra o alvo como mostra a imagem
abaixo.
Clique em View → SEH chain, depois botão direito em 43434343 e Follow
address in stack, como mostra a imagem abaixo.
P0C
Como mostra a imagem abaixo, nós temos BBBB como
Pointer to next SEH record, e CCCC como SE handler.
P0C
Agora nós necessitamos encontrar no Immunity uma instrução POP POP RETN, essa
instrução vai como mostra a imagem abaixo, fazer um retorno para o Pointer to next SEH
record. The Pointer to next SEH record, nós vamos sobrescrever com um jump para nosso
shellcode para obtermos um reverse shell! 8-)
Dê uma olhada na imagem abaixo!
P0C
Agora nós necessitamos encontrar no Immunity um endereço que tenha a instrução
POP POP RETN, para isso, nós usaremos o mona.py script.
https://raw.githubusercontent.com/corelan/mona/master/mona.py
Você pode fazer o download do mona.py e colar em:
c:Program FilesImmunity IncImmunity DebuggerPyCommands
Digite na barra de comando: !mona seh, aguarde um minito até o Immunity processar tudo.
P0C
Clique em View → Log para ver o log!
Veja a imagem abaixo, “for more pointers,
open seh.txt...”
P0C
Veja o arquivo seh.txt na pasta Immunity Debugger.
Nós usaremos o endereço 0x100103fe, que é um POP esi, POP edi and
RET, com os mecanismos de segurança ASLR, Rebase, SafeSEH as False!
P0C
Agora nós necessitamos encontrar o OPCODE para instrução
JMP SHORT 8, que vai ser nosso jump para nosso shellcode!
Para isso, nós usaremos a ferramenta nasm_shell, como mostra a
imagem abaixo. Digite no diretório:
/usr/share/metasploit-framework/tools/exploit#./nasm_shell.rb
nasm> JMP SHORT 8
E nós temos EB06 como mostra a imagem abaixo.
P0C
Agora, como mostra a imagem abaixo, crie uma variável NSEH e coloque
o valor de SHORT JMP com x90x90, que significa NOP no operation,
NOPs não fazem nada. E variável SEH, com endereço para o
POP POP RETN.
Digite seu exploit code como mostra a imagem abaixo!
P0C
Abra o Immunity novamente, anexe o software vulnerável dentro do
Immunity, e rode o software novamente. Então, clique com o botão direito
sobre o code area, e Go to Expression, como mostra a imagem abaixo.
P0C
Agora, digite o endereço para o POP POP RETN: 100103fe e clique em OK!
P0C
Nós encontramos o endereço para o POP POP RETN; vamos agora,
colocar uma Breakpoint no endereço 100103fe para parar neste endereço;
para isto, clique com o botão direito em 100103fe e clique em Breakpoint
→ Toggle, como mostra imagem abaixo.
P0C
Agora rode o exploit code novamente!
P0C
O software parou o fluxo da execução, como nós podemos ver na imagem
abaixo, nós temos um Access violation; press Shift F7, depois F9 para
continuar!
P0C
Agora, nós paramos em nossa Breakpoint 100103fe que é o inicio de
nosso POP POP RETN.
Press F7 para passar etapa-a-etapa o POP POP RETN!
P0C
Chegando o fluxo do programa em RETN, nós vemos o endereço indicado
na imagem abaixo: Return to 01876fd4
P0C
Este endereço 01876fd6 é nosso JMP SHORT (/x90/x90/xeb/x06), é um
jump para nossos NOPs.
P0C
Nós já sabemos que temos um pequeno espaço para nosso shellcode,
por isso nós usaremos uma técnica chamada “egg hunter”.
Egg hunter é um pequeno pedaço de shellcode que procura por um
shellcode realmente maior que o invasor não conseguiu encaixar no
espaço de buffer disponível, para isso, faça uso deste pequeno pedaço
de shellcode "egg hunter" para redirecionar o fluxo de execução para o
shellcode maior, que estará localizado, obviamente, em um espaço maior.
Comando: !mona help egg
P0C
Comando: !mona egg -t w00t -wow64 win10
P0C – Egg hunter para Windows 10
Agora nós precisamos procurar por bad characters, dependendo
da aplicação, tipo de vulnerabilidade e protocolo em uso, pode ser que
certos caracteres sejam considerados “bad” e, por isso, não deveriam ser
usados no seu buffer ou shellcode.
One exemplo de bad characters is 0x00.
Esse caracter é considerado bad porque um null byte é também usado
para terminar um string copy operation, o que truncaria nosso buffer
sempre que o null byte aparecesse.
Para testar se há mais badchars que podem afetar o software, feche o
software e o Immunity, e reabra o Immunity e anexe o software no
Immunity novamente.
P0C – Bad characters
P0C – Bad characters
Nós vamos enviar a string abaixo dentro de nosso exploit code.
"x01x02x03x04x05x06x07x08x09x0ax0bx0cx0dx0ex0fx10"
"x11x12x13x14x15x16x17x18x19x1ax1bx1cx1dx1ex1fx20"
"x21x22x23x24x25x26x27x28x29x2ax2bx2cx2dx2ex2fx30"
"x31x32x33x34x35x36x37x38x39x3ax3bx3cx3dx3ex3fx40"
"x41x42x43x44x45x46x47x48x49x4ax4bx4cx4dx4ex4fx50"
"x51x52x53x54x55x56x57x58x59x5ax5bx5cx5dx5ex5fx60"
"x61x62x63x64x65x66x67x68x69x6ax6bx6cx6dx6ex6fx70"
"x71x72x73x74x75x76x77x78x79x7ax7bx7cx7dx7ex7fx80"
"x81x82x83x84x85x86x87x88x89x8ax8bx8cx8dx8ex8fx90"
"x91x92x93x94x95x96x97x98x99x9ax9bx9cx9dx9ex9fxa0"
"xa1xa2xa3xa4xa5xa6xa7xa8xa9xaaxabxacxadxaexafxb0"
"xb1xb2xb3xb4xb5xb6xb7xb8xb9xbaxbbxbcxbdxbexbfxc0"
"xc1xc2xc3xc4xc5xc6xc7xc8xc9xcaxcbxccxcdxcexcfxd0"
"xd1xd2xd3xd4xd5xd6xd7xd8xd9xdaxdbxdcxddxdexdfxe0"
"xe1xe2xe3xe4xe5xe6xe7xe8xe9xeaxebxecxedxeexefxf0"
"xf1xf2xf3xf4xf5xf6xf7xf8xf9xfaxfbxfcxfdxfexff"
P0C – Bad characters
Enviando badchars contra o alvo!
P0C
Cole o egg hunter code no exploit code, adicione o payload2 =
badchars, adicione o egg hunter na variável crash1 e adicione
w00tw00t + payload2 na variável payload.
O w00t é uma marcação para encontrar nosso payload2.
P0C – Egg hunter para Windows 10
P0C
Veja, o w00t é um default value para encontrarmos nosso shellcode!
P0C
Envie o exploit code novamente!
P0C
A imagem abaixo, mostra o egg hunter code, e clique com o botão
direito em EDX e Follow in Dump, para mostrar o dump – w00tw00t.
Lembre-se, que w00t é um valor que antecede nosso shellcode.
P0C
JMP EDI, pula do final de nosso código egg hunter para nosso
shellcode maior!
Temos todos os chars enviados, presentes, ou seja, temos ausência de
badchar!
Obs: note que não enviamos o char x00, pois já sabiamos que o mesmo
é um badchar.
P0C
Foi observado que o exploit code é executado perfeitamente no software
vulnerável, concedendo um shell reverso também no Windows 10.
Contudo, ao tentar passar etapa-a-etapa a execução dentro do Egg hunter
no Windows 10, o processo entra em loop e não avança para procurar por
badchars.
Note bem que o exploit em Windows 10 também funciona perfeitamente,
e gera um shell reverso para o atacante, mas a execução do exploit dentro
do Immunity entra em um loop dentro do código do egg hunter.
Devido a este bug entre o debugger e o software anexado, é indicado que
se faça a procura por badchars em outra versão do Windows como,
por exemplo, no Windows XP, como já demonstrado em slides anteriores
nesta mesma apresentação!
OBS: Egg hunter para Windows 10
P0C – Egg hunter para Windows 10
Agora, nós devemos gerar nosso shellcode para ganhar um reverse shell.
Para isto, nós vamos usar a ferramenta msfvenom.
Faça como mostra a imagem abaixo!
P0C
Copie o shellcode gerado pelo msfvenom, e cole no seu exploit code.
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
Reinicie o software vulnerável no Immunity, coloque a respectiva
Breakpoint, e envie o exploit code atualizado contra o alvo.
Exploit code para Windows 10 sendo executado!
P0C
Veja que o código do shellcode gerado pelo msfvenom e inserido no
exploit code é o mesmo do que o código no Immunity!
P0C
Shellcode sendo executado no Immunity, contra o alvo!
P0C
Reverse shell no metasploit framework!
P0C
Reverse shell no metasploit framework!
P0C – Reverse Shell no Windows 10
Perguntas?
Obrigado!
Rodolpho Concurde (ROd0x)
rconcurde@gmail.com
https://www.linkedin.com/in/rodolphoconcurde

Mais conteúdo relacionado

PPTX
Slide curso metasploit
PDF
Microcontroladores pic
PDF
Vivendo de hacking
PDF
M5-Desenvolvimento-Paginas-Web
PDF
Invasao_e_Correcao_em_Sites.pdf
PDF
Invasão e correção em sites
PDF
Introdução a Exploração de Software
Slide curso metasploit
Microcontroladores pic
Vivendo de hacking
M5-Desenvolvimento-Paginas-Web
Invasao_e_Correcao_em_Sites.pdf
Invasão e correção em sites
Introdução a Exploração de Software

Semelhante a From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf (20)

PDF
Phpjedi 090307090434-phpapp01 2
PDF
PW01 - Introdução a programação em PHPv7
PDF
Workshop - Cotrole sua casa remotamente através da Internet
PDF
15 coisas sobre php para saber antes de morrer
PDF
Configurando aplicações em ambiente RedHat OpenShift através do Eclipse
PDF
Análise de malware com software livre
PPT
Aprendendo a criar plugins para o Wordpress - Richard Barros
PDF
PHP-CLI em 7 passos
PDF
Iniciando com django
PPT
Programação básica de microcontroladores
PPT
Depurando Aplicações PHP com XDebug e FirePHP - SETI 2008
ODP
Depurando Aplicacoes PHP com XDebug e FirePHP II
PDF
POG nunca mais - SOLISC
PPTX
Apresentação 2
PDF
Novidades PHP 7.4 e 8.0!
PDF
[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDB
PDF
Robot Operating System - Iniciação a Robótica
PDF
Programação Segura
PPS
CURSO DE PHP PARA INICIANTES - AULA 1
Phpjedi 090307090434-phpapp01 2
PW01 - Introdução a programação em PHPv7
Workshop - Cotrole sua casa remotamente através da Internet
15 coisas sobre php para saber antes de morrer
Configurando aplicações em ambiente RedHat OpenShift através do Eclipse
Análise de malware com software livre
Aprendendo a criar plugins para o Wordpress - Richard Barros
PHP-CLI em 7 passos
Iniciando com django
Programação básica de microcontroladores
Depurando Aplicações PHP com XDebug e FirePHP - SETI 2008
Depurando Aplicacoes PHP com XDebug e FirePHP II
POG nunca mais - SOLISC
Apresentação 2
Novidades PHP 7.4 e 8.0!
[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDB
Robot Operating System - Iniciação a Robótica
Programação Segura
CURSO DE PHP PARA INICIANTES - AULA 1
Anúncio

Último (11)

PPTX
Utilizando code blockes por andre backes
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
PPTX
Eng. Software - pontos essenciais para o início
PDF
Jira Software projetos completos com scrum
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPT
Conceitos básicos de Redes Neurais Artificiais
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PPTX
Tipos de servidor em redes de computador.pptx
PDF
Manejo integrado de pragas na cultura do algodão
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
Utilizando code blockes por andre backes
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Eng. Software - pontos essenciais para o início
Jira Software projetos completos com scrum
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Conceitos básicos de Redes Neurais Artificiais
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Tipos de servidor em redes de computador.pptx
Manejo integrado de pragas na cultura do algodão
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Viasol Energia Solar -Soluções para geração e economia de energia
Anúncio

From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf

  • 1. From SEH Overwrite with Egg Hunter to get a shell!
  • 2. $Whoami Rodolpho Concurde (ROd0X)  Penetration Tester  Instructor I.T  Consultant of I.S – 16 years  EC-C|EH  Talks at: Hack In The Box, Ekoparty, Arab Security Conference, Red Team Village, Hacker Halted, Qubit Conference, MorterueloCON, Bsides Athens, Bsides SATX, etc.  Author: Hakin9 Magazine: Stack Overflow and From SEH Overwrite with Egg Hunter to Get a Shell & Pentest Magazine: Covert Channel, From Fuzzing to Get a Shell and From SEH Overwrite to Get a Shell.  https://www.linkedin.com/in/rodolphoconcurde  rconcurde@gmail.com
  • 3. Agenda ● SEH (Structured Exception Handler); ● Buffer Overflow; ● PoC ● SEH Overwrite; ● Short JMP; ● Egg Hunter; ● Bad Characters; ● Reverse Shell; ● Perguntas?
  • 4. Manipulador de Exceções Exception Handler é um pedaço de código, de dentro de uma aplicação que têm o objetivo de tratar qualquer exceção que possa ocorrer durante a execução do software. O manipulador de exceções se parece com:
  • 5. Uma exceção é um evento inesperado (um erro) que ocorre em um sistema ou programa. Quando ocorre uma exceção, o fluxo normal de execução do programa é interrompido. É importante que a aplicação possa "lidar" com a exceção ou erro para continuar executando normalmente. Os endereços dos "manipuladores de exceção" são armazenados na pilha. O sistema operacional Windows possui um "manipulador" padrão que captura qualquer exceção que não seja tratada pelo programa. Quando o Windows lida com uma exceção em um programa, você normalmente verá a mensagem: "o programa encontrou um problema e precisa ser fechado".
  • 6. O SEH funciona em cadeia e está localizado no final da pilha. No clássico Buffer Overflow (vanilla), o exploit substitui o endereço de retorno, sem se preocupar em escrever mais bytes na pilha, mas com a técnica SEH Overwrite é possível obter mais espaço para o shellcode, para ter um exploit mais estável.
  • 7. Buffer overflow Buffer overflow é uma anomalia onde um programa, enquanto escreve dados para um buffer, ultrapassa o limite do buffer e sobrescreve locais de memória adjacentes. Pode ser: Heap based: local na memória que aloca muita quantidade de dados e, dinamicamente; Stack based: aloca um tamanho limitado ou fixo de dados, como, dados de variáveis ou funções locais.
  • 8. SEH
  • 9. P0C Na máquina do atacante usaremos o Kali Linux (com python 2 ou 2.7) e o software vulnerável que usaremos será o Easy File Sharing Web Server 7.2, que está sendo executado no Windos 10 Home Single Language 22H2/Windows XP Service Pack 3 e pode ser baixado em: https://www.exploit-db.com/apps/60f3ff1f3cd34dec80fba130ea481f31-efssetup.exe
  • 10. P0C Abra o Immunity Debugger, depois abra o software vulnerável, e no Immunity, click em File menu → Attach. Escolha o software vulnerável e click em Attach! Depois click em Play ou pressione F9 para rodar o software vulnerável dentro do Immunity.
  • 11. P0C Nós iniciamos com o código de fuzzing em python. Este código vai enviar 5000 “A” contra o IP do alvo na porta TCP 80.
  • 12. P0C Para ver o SEH chain, nós devemos clicar no menu: View → SEH chain Como nós vemos na imagem, nós temos o campo Address e SE handler com o valor sobrescrito com 41414141, então clique com o botão direito no 41414141 e Follow address in stack.
  • 13. P0C Na imagem abaixo, nós vemos o Pointer to next SEH record e o valor SE handler sobrescrito com 41414141, isto significa que funcionou, nós sobrescrevemos o SEH chain! 8-)
  • 14. P0C Agora, nos necessitamos encontrar quantos caracteres são necessários para sobrescrever o SEH, para obter controle do SEH chain. Para isto, nós usaremos a ferramenta pattern_create. No Kali, no diretório: /usr/share/metasploit-framework/tools/exploit → digite: ./pattern_create.rb -l 5000 Pattern_create gerou uma grande quantidade de padronizados caracteres. Copie estes caracteres gerados, e cole no python exploit script, na variável crash1.
  • 15. P0C Então envie o exploit code contra o alvo como mostra a imagem abaixo. Clique em View → SEH chain, e como mostra a imagem abaixo nós temos o Address e SE handler sobrescritos.
  • 16. P0C Agora, nós usaremos a ferramenta pattern_offset para encontrar o offset do SE handler. No diretório /usr/share/metasploit-framework/tools/exploit, digite como mostra a imagem abaixo: ./pattern_offset.rb -l 5000 -q 46356646
  • 17. P0C Nós encontramos o offset 4065! Isso significa que nós necessitamos de 4065 bytes para sobrescrever o SEH. Na imagem abaixo, nós colocamos na variável crash1: 4061 * “A” + “B” * 4 + “C” * 4, isto significa que nós vamos preencher o SEH chain com 4 “B” e 4 “C”.
  • 18. P0C Novamente, envie o exploit code contra o alvo como mostra a imagem abaixo. Clique em View → SEH chain, depois botão direito em 43434343 e Follow address in stack, como mostra a imagem abaixo.
  • 19. P0C Como mostra a imagem abaixo, nós temos BBBB como Pointer to next SEH record, e CCCC como SE handler.
  • 20. P0C Agora nós necessitamos encontrar no Immunity uma instrução POP POP RETN, essa instrução vai como mostra a imagem abaixo, fazer um retorno para o Pointer to next SEH record. The Pointer to next SEH record, nós vamos sobrescrever com um jump para nosso shellcode para obtermos um reverse shell! 8-) Dê uma olhada na imagem abaixo!
  • 21. P0C Agora nós necessitamos encontrar no Immunity um endereço que tenha a instrução POP POP RETN, para isso, nós usaremos o mona.py script. https://raw.githubusercontent.com/corelan/mona/master/mona.py Você pode fazer o download do mona.py e colar em: c:Program FilesImmunity IncImmunity DebuggerPyCommands Digite na barra de comando: !mona seh, aguarde um minito até o Immunity processar tudo.
  • 22. P0C Clique em View → Log para ver o log! Veja a imagem abaixo, “for more pointers, open seh.txt...”
  • 23. P0C Veja o arquivo seh.txt na pasta Immunity Debugger. Nós usaremos o endereço 0x100103fe, que é um POP esi, POP edi and RET, com os mecanismos de segurança ASLR, Rebase, SafeSEH as False!
  • 24. P0C Agora nós necessitamos encontrar o OPCODE para instrução JMP SHORT 8, que vai ser nosso jump para nosso shellcode! Para isso, nós usaremos a ferramenta nasm_shell, como mostra a imagem abaixo. Digite no diretório: /usr/share/metasploit-framework/tools/exploit#./nasm_shell.rb nasm> JMP SHORT 8 E nós temos EB06 como mostra a imagem abaixo.
  • 25. P0C Agora, como mostra a imagem abaixo, crie uma variável NSEH e coloque o valor de SHORT JMP com x90x90, que significa NOP no operation, NOPs não fazem nada. E variável SEH, com endereço para o POP POP RETN. Digite seu exploit code como mostra a imagem abaixo!
  • 26. P0C Abra o Immunity novamente, anexe o software vulnerável dentro do Immunity, e rode o software novamente. Então, clique com o botão direito sobre o code area, e Go to Expression, como mostra a imagem abaixo.
  • 27. P0C Agora, digite o endereço para o POP POP RETN: 100103fe e clique em OK!
  • 28. P0C Nós encontramos o endereço para o POP POP RETN; vamos agora, colocar uma Breakpoint no endereço 100103fe para parar neste endereço; para isto, clique com o botão direito em 100103fe e clique em Breakpoint → Toggle, como mostra imagem abaixo.
  • 29. P0C Agora rode o exploit code novamente!
  • 30. P0C O software parou o fluxo da execução, como nós podemos ver na imagem abaixo, nós temos um Access violation; press Shift F7, depois F9 para continuar!
  • 31. P0C Agora, nós paramos em nossa Breakpoint 100103fe que é o inicio de nosso POP POP RETN. Press F7 para passar etapa-a-etapa o POP POP RETN!
  • 32. P0C Chegando o fluxo do programa em RETN, nós vemos o endereço indicado na imagem abaixo: Return to 01876fd4
  • 33. P0C Este endereço 01876fd6 é nosso JMP SHORT (/x90/x90/xeb/x06), é um jump para nossos NOPs.
  • 34. P0C Nós já sabemos que temos um pequeno espaço para nosso shellcode, por isso nós usaremos uma técnica chamada “egg hunter”. Egg hunter é um pequeno pedaço de shellcode que procura por um shellcode realmente maior que o invasor não conseguiu encaixar no espaço de buffer disponível, para isso, faça uso deste pequeno pedaço de shellcode "egg hunter" para redirecionar o fluxo de execução para o shellcode maior, que estará localizado, obviamente, em um espaço maior.
  • 36. Comando: !mona egg -t w00t -wow64 win10 P0C – Egg hunter para Windows 10
  • 37. Agora nós precisamos procurar por bad characters, dependendo da aplicação, tipo de vulnerabilidade e protocolo em uso, pode ser que certos caracteres sejam considerados “bad” e, por isso, não deveriam ser usados no seu buffer ou shellcode. One exemplo de bad characters is 0x00. Esse caracter é considerado bad porque um null byte é também usado para terminar um string copy operation, o que truncaria nosso buffer sempre que o null byte aparecesse. Para testar se há mais badchars que podem afetar o software, feche o software e o Immunity, e reabra o Immunity e anexe o software no Immunity novamente. P0C – Bad characters
  • 38. P0C – Bad characters Nós vamos enviar a string abaixo dentro de nosso exploit code. "x01x02x03x04x05x06x07x08x09x0ax0bx0cx0dx0ex0fx10" "x11x12x13x14x15x16x17x18x19x1ax1bx1cx1dx1ex1fx20" "x21x22x23x24x25x26x27x28x29x2ax2bx2cx2dx2ex2fx30" "x31x32x33x34x35x36x37x38x39x3ax3bx3cx3dx3ex3fx40" "x41x42x43x44x45x46x47x48x49x4ax4bx4cx4dx4ex4fx50" "x51x52x53x54x55x56x57x58x59x5ax5bx5cx5dx5ex5fx60" "x61x62x63x64x65x66x67x68x69x6ax6bx6cx6dx6ex6fx70" "x71x72x73x74x75x76x77x78x79x7ax7bx7cx7dx7ex7fx80" "x81x82x83x84x85x86x87x88x89x8ax8bx8cx8dx8ex8fx90" "x91x92x93x94x95x96x97x98x99x9ax9bx9cx9dx9ex9fxa0" "xa1xa2xa3xa4xa5xa6xa7xa8xa9xaaxabxacxadxaexafxb0" "xb1xb2xb3xb4xb5xb6xb7xb8xb9xbaxbbxbcxbdxbexbfxc0" "xc1xc2xc3xc4xc5xc6xc7xc8xc9xcaxcbxccxcdxcexcfxd0" "xd1xd2xd3xd4xd5xd6xd7xd8xd9xdaxdbxdcxddxdexdfxe0" "xe1xe2xe3xe4xe5xe6xe7xe8xe9xeaxebxecxedxeexefxf0" "xf1xf2xf3xf4xf5xf6xf7xf8xf9xfaxfbxfcxfdxfexff"
  • 39. P0C – Bad characters Enviando badchars contra o alvo!
  • 40. P0C Cole o egg hunter code no exploit code, adicione o payload2 = badchars, adicione o egg hunter na variável crash1 e adicione w00tw00t + payload2 na variável payload. O w00t é uma marcação para encontrar nosso payload2.
  • 41. P0C – Egg hunter para Windows 10
  • 42. P0C Veja, o w00t é um default value para encontrarmos nosso shellcode!
  • 43. P0C Envie o exploit code novamente!
  • 44. P0C A imagem abaixo, mostra o egg hunter code, e clique com o botão direito em EDX e Follow in Dump, para mostrar o dump – w00tw00t. Lembre-se, que w00t é um valor que antecede nosso shellcode.
  • 45. P0C JMP EDI, pula do final de nosso código egg hunter para nosso shellcode maior!
  • 46. Temos todos os chars enviados, presentes, ou seja, temos ausência de badchar! Obs: note que não enviamos o char x00, pois já sabiamos que o mesmo é um badchar. P0C
  • 47. Foi observado que o exploit code é executado perfeitamente no software vulnerável, concedendo um shell reverso também no Windows 10. Contudo, ao tentar passar etapa-a-etapa a execução dentro do Egg hunter no Windows 10, o processo entra em loop e não avança para procurar por badchars. Note bem que o exploit em Windows 10 também funciona perfeitamente, e gera um shell reverso para o atacante, mas a execução do exploit dentro do Immunity entra em um loop dentro do código do egg hunter. Devido a este bug entre o debugger e o software anexado, é indicado que se faça a procura por badchars em outra versão do Windows como, por exemplo, no Windows XP, como já demonstrado em slides anteriores nesta mesma apresentação! OBS: Egg hunter para Windows 10
  • 48. P0C – Egg hunter para Windows 10
  • 49. Agora, nós devemos gerar nosso shellcode para ganhar um reverse shell. Para isto, nós vamos usar a ferramenta msfvenom. Faça como mostra a imagem abaixo! P0C
  • 50. Copie o shellcode gerado pelo msfvenom, e cole no seu exploit code.
  • 52. Reinicie o software vulnerável no Immunity, coloque a respectiva Breakpoint, e envie o exploit code atualizado contra o alvo. Exploit code para Windows 10 sendo executado! P0C
  • 53. Veja que o código do shellcode gerado pelo msfvenom e inserido no exploit code é o mesmo do que o código no Immunity! P0C
  • 54. Shellcode sendo executado no Immunity, contra o alvo! P0C
  • 55. Reverse shell no metasploit framework! P0C
  • 56. Reverse shell no metasploit framework! P0C – Reverse Shell no Windows 10