posteriormente o substituirmos pelo endereco do nosso payload do exploit.sploit3.rbputs "A" * 69 + [0xf0daf0da].pack('V') + "\r\n" Ou seja, 69 A's e depois um endereco arbitrario (o pack('V') e apenas uma funcao do Ruby para converter aquele endereco). Reiniciando novamente o programa no debugger no servidor e correndo o exploit na nossa maquina local obtemos o seguinte resultado:Conseguimos assim escrever com sucesso no local exacto onde se encontra o EIP.0x04: onde colocar a payloadAgora que conseguimos controlar a posicao do EIP sera necessario encontrar um local na memoria onde possamos colocar a nossa payload.Os exploits remotos tem esta dificuldade acrescentada: nao sabemos onde na memoria estara o codigo, qual o espaco que temos para o guardar, ja que poderao estar varios processos diferentes dos quais nao temos conhecimento nem quando comecam a executar.Para isso inventou-se uma tecnica que e a de colocar no EIP o endereco de uma instrucao simples que salte para um local de memoria onde realmente possamos escrever.O pessoal da Microsoft pensou em nos e facilitou-nos a vida dado que, embora nao possamos colocar la o salto, podemos ir busca-lo a uma das bibliotecas(.DLL) que estejam a ser executados no topo da memoria (que estao sempre nas mesmas posicoes o que nos facilitam bastante a vida, principalmente nos servidores Windows 2000 em que nao mudam mesmo!).A tecnica sera entao colocar em ESP (que podemos conhecer a posicao exata visto que o enchemos com a nossa string criada pelo metasploit) o nosso codigo da payload e no EIP uma instrucao "JMP ESP" que encontramos a ser executada por uma qualquer library do windows.Reiniciamos o programa e no debugger procuramos pelo opcode que forma"JMP ESP": FF E4. Abrimos o mapa da memoria (Alt+M) e procuramos (Ctrl+L)pelo "FF E4" mas apenas nos enderecos mais altos, onde se encontram as bibliotecas, pois essas nao mudam de sitio nunca (obrigado Microsoft):Podemos ver aqui no endereco : 0x7c2e7993 que temos entao os nossos bytes para o JMP, oferecidos pela ADVAPI32.DLL :)Este sera entao o endereco que colocaremos no EIP para que ele execute o"JMP ESP". Falta-nos entao saber qual sera o endereco exato do ESP para colocarmos ai o nosso payload. Apos a execucao do sploit2.rb obtivemos os seguintes valores para os registos:Como podemos verificar no ESP temos uma representacao ASCII do conteudo do ESP, obrigado Immunity Debugger, que e "c4Ac...", que era uma porcao da string gerada pelo pattern_create.rb do metasploit. Utilizaremos novamente o pattern_offset para saber qual o offset em que se encontram, por exemplo, os quatro bytes "c4Ac":# ./tools/pattern_offset.rb "c4Ac" 1007373 Ou seja, sabemos que o ESP esta na posicao 73 da nossa string. Imaginando que o nosso payload era um simples "INT 3", que a unica coisa que faz e dizer ao debugger para parar ali, ou seja um debugging breakpoint, dado pelo codigo 0xCC podemos gerar o seguinte codigo:sploit4.rbJMP_ESP=[0x7c2e7993 ].pack('V')INT3 = "\xCC"puts "A" * 69 + JMP_ESP + "B"*4 + INT3 +"\r\n"Reiniciamos o programa no debugger, corremos o nosso exploit na nossa maquina e:Isto porque adicionamos 69 A's, chegando a posicao 69 (EIP), colocamos o endereco da instrucao "JMP ESP",