N1CTF - funning eating cms Writeup
"a strange online reservation system for restaurants,please hacking it"
Ao entrar ir para o link, ele nos entregava a seguinte pagina:
fazendo o login somos redirecionados para outra pagina:
Aqui conseguimos ver aquilo que seria a primeira vulnerabilidade encontrada, um LFI no user.php?page=
.
Ok, o arquivo guest
não nos deu muitas informações, então, fui atrás de outros arquivos:
Agora sim, a partir desse código, ja conseguimos ir para outros arquivos que não estavam a nossa vista...
Neste arquivo function.php
, é bom destacar algumas coisas que estão sendo feitas:
temos dois tipos de filtros bloqueando algumas palavras, como manage
, flag
e ffffllllaaaaggg
, logo não conseguimos acessar esses arquivos pelo lfi casual.
Fazendo pequenos testes para ver se conseguimos algo, tivemos uma boa resposta no arquivo info
:
Achamos um hint do qual ja sabemos que existe...
Bem, já conseguimos tudo aquilo que queriamos, agora, precisamos avançar na procura e achar um bypass para acessar arquivos que foram bloqueados em um primeiro momento.
O filtro da url está sendo feito com o auxilio da função parse_url
e parse_str
, porém, esta função tem uma fraqueza, quando adicionamos barras a mais("/") na url, conseguimos fazer com que a função não faça o parsing correto e, portanto, não lê a url inteira:
Encotramos mais um arquivo que não estava em nossa vista, buscando ele no lfi e vendo seu conteudo, vemos que ele está fazendo o include
de um template. Logo, isso quer dizer que o arquivo é algo manipulavel pelo usuario...
Entrando na página, temos um formulário para enviar arquivos.
Verificando o código que já haviamos obtido, não vi nenhuma entrada para arquivos, então, abri a source e encontrei o arquivo upllloadddd.php
.
Fazendo uma pequena análise em cima do código, conseguiamos destacar duas coisas para o bypass:
1.
Ele está usando a função system
com uma concatenação sem filtros, isso nós da a possibilidade de uma RCE.
2.
Ele está verificando a extensão do nosso arquivo, logo, precisamos de uma forma de enviar uma extensão.
A forma mais fácil que eu pensei bypassar, foi usando um comentario #
e passando a extensão logo em seguida:
Após algumas tentativas procurando em todos esses arquivos listados, pensei que talvez a flag estivesse no banco de dados, então, fui atrás do conteúdo do arquivo config.php
.
Usei as credenciais do mysql
do arquivo config.php
para logar no mysql
e dumpar o conteúdo do banco de dados...
Encontrei muitos users e nada de flag, então, pensei no óbvio, procurar a flag no sistema.
encontramos o arquivo da flag (flag_233333):)
.
Então, me deparei que não podiamos usar "/"... :P
Mas não importa, podemos usar o cd...