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]
-~----------~----~----~----~------~----~------~--~---

Responder a