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...