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.
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

Semelhante a From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf

Stack based overflow
Stack based overflowStack based overflow
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
PrinceGuru MS
 
PW01 - Introdução a programação em PHPv7
PW01 - Introdução a programação em PHPv7PW01 - Introdução a programação em PHPv7
PW01 - Introdução a programação em PHPv7
Silvano Oliveira
 
Workshop - Cotrole sua casa remotamente através da Internet
Workshop - Cotrole sua casa remotamente através da InternetWorkshop - Cotrole sua casa remotamente através da Internet
Workshop - Cotrole sua casa remotamente através da Internet
Fabio Souza
 
15 coisas sobre php para saber antes de morrer
15 coisas sobre php para saber antes de morrer15 coisas sobre php para saber antes de morrer
15 coisas sobre php para saber antes de morrer
Michele Silva
 
Configurando aplicações em ambiente RedHat OpenShift através do Eclipse
Configurando aplicações em ambiente RedHat OpenShift através do EclipseConfigurando aplicações em ambiente RedHat OpenShift através do Eclipse
Configurando aplicações em ambiente RedHat OpenShift através do Eclipse
Alberlan Barros
 
Análise de malware com software livre
Análise de malware com software livreAnálise de malware com software livre
Análise de malware com software livre
Diego Santos
 
Aprendendo a criar plugins para o Wordpress - Richard Barros
Aprendendo a criar plugins para o Wordpress - Richard BarrosAprendendo a criar plugins para o Wordpress - Richard Barros
Aprendendo a criar plugins para o Wordpress - Richard Barros
Richard Barros
 
PHP-CLI em 7 passos
PHP-CLI em 7 passosPHP-CLI em 7 passos
PHP-CLI em 7 passos
Henrique Moody
 
Iniciando com django
Iniciando com djangoIniciando com django
Iniciando com django
Marcelo Santos
 
Programação básica de microcontroladores
Programação básica de microcontroladoresProgramação básica de microcontroladores
Programação básica de microcontroladores
Danilo Morais Pagano
 
Depurando Aplicações PHP com XDebug e FirePHP - SETI 2008
Depurando Aplicações PHP com XDebug e FirePHP - SETI 2008Depurando Aplicações PHP com XDebug e FirePHP - SETI 2008
Depurando Aplicações PHP com XDebug e FirePHP - SETI 2008
Jefferson Girão
 
Depurando Aplicacoes PHP com XDebug e FirePHP II
Depurando Aplicacoes PHP com XDebug e FirePHP IIDepurando Aplicacoes PHP com XDebug e FirePHP II
Depurando Aplicacoes PHP com XDebug e FirePHP II
Jefferson Girão
 
POG nunca mais - SOLISC
POG nunca mais - SOLISCPOG nunca mais - SOLISC
POG nunca mais - SOLISC
Paulino Michelazzo
 
Apresentação 2
Apresentação 2Apresentação 2
Apresentação 2
Anderson Luís Furlan
 
Novidades PHP 7.4 e 8.0!
Novidades PHP 7.4 e 8.0!Novidades PHP 7.4 e 8.0!
Novidades PHP 7.4 e 8.0!
Marcos Marcolin
 
[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDB
[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDB[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDB
[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDB
Vinicius de Sá
 
Robot Operating System - Iniciação a Robótica
Robot Operating System - Iniciação a RobóticaRobot Operating System - Iniciação a Robótica
Robot Operating System - Iniciação a Robótica
Francisco Soares Lima Filho
 
Programação Segura
Programação SeguraProgramação Segura
Programação Segura
Rafael Moreira
 
CURSO DE PHP PARA INICIANTES - AULA 1
CURSO DE PHP PARA INICIANTES - AULA 1CURSO DE PHP PARA INICIANTES - AULA 1
CURSO DE PHP PARA INICIANTES - AULA 1
Norivan Oliveira
 

Semelhante a From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf (20)

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

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.
  • 51.
  • 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