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 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?)