Natas
11->12
level exige que se faça upload de um jpeg, mas não checa se é mesmo um jpeg; dá pra fazer upload de um script php
- O problema é, esse script é sempre renomeado para um string com .jpg no fim; na hora de clicar no link o browser não executa o script
- MAS, a string com o nome final do arquivo está na verdade em um <input> com atributo hidden, dá pra editar e colocar extensão .php
- Com isso dá pra printar a senha em /etc/natas_webpass/natas13
12->13
- Parecido com o anterior, mas ele realmente checa se a imagem é um jpeg
- Ainda dá pra upar um script editando os primeiros bytes do script pra ser igual ao magic number do jpeg
- Pra adicionar bytes num arquivo, o melhor jeito é usar o bvi (binary vi)
13->14
envolve SQL injection; é preciso injetar código SQL (parecido com XSS) no campo username para garantir que a query vai retornar pelo menos uma linha (mysql_num_rows() > 0). O melhor jeito de fazer isso é garantir que a condição da query é sempre true. Para isso, podemos fechar as aspas, colocar OR true e # (comentário).
14->15
SQL injection, LIKE operator, LIKE BINARY (case-sensitive); vide script15
15->16
brutar cada caractere da senha, com grep e regex; vide script16
16->17
parecido com o 16, mas com sql (RLIKE BINARY). Usamos sleep() para saber se o caractere da senha está certo. Vide script17.py
17->18
como o ID máximo de usuário é 640, fizemos um javascript para atualizar o valor do cookie PHPSESSID, para tentar todos os IDs possíveis até chegar no ID do admin. (138?)