boa marcelao! resolvi olhar essa parada depois q vc postou aqui... e eh bem mais simples do q imagina kra...
2009/8/18 Marcelo Andrade <[email protected]>: > > 2009/8/14 Jean Cardoso <[email protected]>: >> >> Olha, e não é que funciona mesmo? >> >> Testei aqui em casa, e realmente ele consegue obter privilégios de root. >> Muito bom para estudos, já que o exploit está com o código fonte. >> Acho que é algo bastante grave, tendo em vista o resultado que poderia >> ser catastrófico se alguém conseguir acesso ao shell de algum servidor... > > > Curioso que o targz vem com um filme em avi. E > o script, em certa altura, faz > > cat tzameti.avi >> ./exploit > ./exploit > > Achei incrível isso! Primeiro me espantei. Depois, > fiquei pensando se não poderia ser qualquer coisa > no lugar do vídeo, só tipo pra dar um vazamento de > memória ou coisa assim. > > De qualquer maneira, sem dúvida é bom pra estudar! > > Atenciosamente. > > -- > MARCELO DE F. ANDRADE > Belem, PA, Amazonia, Brazil > Linux User #221105 > > http://mfandrade.wordpress.com > > > > vamos lah: 1) de uma olhada no tamanho do video: ls -l tzameti.avi -rw-r--r-- 1 bode users 4171600 2009-08-12 23:46 tzameti.avi reparou? sao 4171600 bytes... 2) note que na linha 50, agente tem isso aqui: #define VIDEO_SIZE 4171600 o mesmo tamanho do video... igual acima... hardcoded num definezao... 3) abra o script "wunderbar_emporium.sh" na linha 19 e na linha 29, temos exatamente o q vc disse: cat tzameti.avi >> ./exploit ou seja, ele simplesmente concatena o video ao final do executavel gerado com o processo de compilaçao... nada demais... ele soh concatena msm... nao tem vazamento de memoria... tb achei estranho isso, por isso fiquei curioso e fui ver os fontes da parada pra entender qual era a moral... vamos ver q eh bem mais simples do que pensamos e nao tem segredo.... =D 4) abra o arquivo exploit.c: repare nesse trecho de codigo (a começar pela linha 92): file = fopen("/proc/self/exe", "r"); fseek(file, -VIDEO_SIZE, SEEK_END); fread(buf, VIDEO_SIZE, 1, file); fclose(file) * esse "arquivo": /proc/self/exe eh simplesmente o executavel que esta rodando atualmente... um "atalho"... pra fazer um teste, faça o seguinte: ls -l /proc/self/exe lrwxrwxrwx 1 bode users 0 2009-08-18 21:15 /proc/self/exe -> /bin/ls deu pra ver neh, eu acionei o 'ls', e em cima disso, o "link" "/proc/self/exe" apontou pro binario do ls... dinamicamente... e me deu o caminho do bicho... ** note tb, q ele da um fseek, capturando os dados para um buffer, que se inicia do final do executavel menos o tamanho do video ateh sua posiçao final (isso pq ele abriu o executavel a partir de seu final, entao, se ele quer pegar o video, e ele tah anexado no final do executavel, ele tem q voltar, em bytes, o tamanho exato do video...) 5) a partir da linha 97 do exploit.c: if ((in = mkstemp(template)) < 0) return; write(in, buf, VIDEO_SIZE); close(in); *ele basicamente cria o arquivo temporario, gravando os dados no path "/tmp/video.XXXXXX"... **mas o pq disso? simples... uma vez compilado, esse executavel ainda guarda o video dentro de si msm... eh uma forma de fazer com q o video exista sem precisar do arquivo .avi... concatena ele dentro do binario q vai "tocar o terror", assim ele vai poder ser distribuido, rodar, e se o cara tiver mplayer instalado, ele ainda vai dar azia rodando o video, como vamos ver... 6) a partir da linha 103, do exploit.c: snprintf(syspath, sizeof(syspath)-1, "CACA_DRIVER=ncurses mplayer -ao oss -vo caca %s", template); system(syspath); unlink(template); ele simplesmente lança o video, e destroi o arquivo temporario "/tmp/video.XXXXXX" depois de tudo... 7) agora... pq essa *&$%"(* funciona, se tem raio de um video no final do executavel? *agente sabe o seguinte: quem rodar o programa nao vai nem querer saber o q existe no final do arquivo, uma vez q no codigo de maquina existe uma instruçao que determina o final do executavel... entao ele nunca vai dar zica no video... vc poderia meter lixo no final do executavel q nao iria acontecer nd demais... nao se iria nem sonhar q existe algo a mais no final do executavel... agora vai botar 1 bytezinho lah no meio do binariozao pra ver o q acontece?! huauhauhauha dai sim a zica do pantano acontece... []'s! t++! obs.: a questao levantada foi massa heim! -- Rafael de Paula Herrera http://sirboderafael.wordpress.com #444395 --~--~---------~--~----~------------~-------~--~----~ GUS-BR - Grupo de Usuários de Slackware Brasil http://www.slackwarebrasil.org/ http://groups.google.com/group/slack-users-br Antes de perguntar: http://www.istf.com.br/perguntas/ Para sair da lista envie um e-mail para: [email protected] -~----------~----~----~----~------~----~------~--~---

