Icecream HackMyVM (Easy - Linux)
Escaneo de puertos
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn <IP>nmap -sCV -p<PORTS> <IP>Info:
Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-14 03:29 EDT
Nmap scan report for 192.168.5.57
Host is up (0.0011s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u3 (protocol 2.0)
| ssh-hostkey:
| 256 68:94:ca:2f:f7:62:45:56:a4:67:84:59:1b:fe:e9:bc (ECDSA)
|_ 256 3b:79:1a:21:81:af:75:c2:c1:2e:4e:f5:a3:9c:c9:e3 (ED25519)
80/tcp open http nginx 1.22.1
|_http-server-header: nginx/1.22.1
|_http-title: 403 Forbidden
139/tcp open netbios-ssn Samba smbd 4
445/tcp open netbios-ssn Samba smbd 4
9000/tcp open cslistener?
| fingerprint-strings:
| FourOhFourRequest:
| HTTP/1.1 404 Not Found
| Server: Unit/1.33.0
| Date: Mon, 14 Jul 2025 07:29:15 GMT
| Content-Type: application/json
| Content-Length: 40
| Connection: close
| "error": "Value doesn't exist."
| GetRequest:
| HTTP/1.1 200 OK
| Server: Unit/1.33.0
| Date: Mon, 14 Jul 2025 07:29:14 GMT
| Content-Type: application/json
| Content-Length: 1042
| Connection: close
| "certificates": {},
| "js_modules": {},
| "config": {
| "listeners": {},
| "routes": [],
| "applications": {}
| "status": {
| "modules": {
| "python": {
| "version": "3.11.2",
| "lib": "/usr/lib/unit/modules/python3.11.unit.so"
| "php": {
| "version": "8.2.18",
| "lib": "/usr/lib/unit/modules/php.unit.so"
| "perl": {
| "version": "5.36.0",
| "lib": "/usr/lib/unit/modules/perl.unit.so"
| "ruby": {
| "version": "3.1.2",
| "lib": "/usr/lib/unit/modules/ruby.unit.so"
| "java": {
| "version": "17.0.11",
| "lib": "/usr/lib/unit/modules/java17.unit.so"
| "wasm": {
| "version": "0.1",
| "lib": "/usr/lib/unit/modules/wasm.unit.so"
| HTTPOptions:
| HTTP/1.1 405 Method Not Allowed
| Server: Unit/1.33.0
| Date: Mon, 14 Jul 2025 07:29:14 GMT
| Content-Type: application/json
| Content-Length: 35
| Connection: close
|_ "error": "Invalid method."
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at
https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port9000-TCP:V=7.95%I=7%D=7/14%Time=6874B1CA%P=x86_64-pc-linux-gnu%r(Ge
SF:tRequest,4A8,"HTTP/1\.1\x20200\x20OK\r\nServer:\x20Unit/1\.33\.0\r\nDat
SF:e:\x20Mon,\x2014\x20Jul\x202025\x2007:29:14\x20GMT\r\nContent-Type:\x20
SF:application/json\r\nContent-Length:\x201042\r\nConnection:\x20close\r\n
SF:\r\n{\r\n\t\"certificates\":\x20{},\r\n\t\"js_modules\":\x20{},\r\n\t\"
SF:config\":\x20{\r\n\t\t\"listeners\":\x20{},\r\n\t\t\"routes\":\x20[\],
SF:\r\n\t\t\"applications\":\x20{}\r\n\t},\r\n\r\n\t\"status\":\x20{\r\n\t
SF:\t\"modules\":\x20{\r\n\t\t\t\"python\":\x20{\r\n\t\t\t\t\"version\":\x
SF:20\"3\.11\.2\",\r\n\t\t\t\t\"lib\":\x20\"/usr/lib/unit/modules/python3\
SF:.11\.unit\.so\"\r\n\t\t\t},\r\n\r\n\t\t\t\"php\":\x20{\r\n\t\t\t\t\"ver
SF:sion\":\x20\"8\.2\.18\",\r\n\t\t\t\t\"lib\":\x20\"/usr/lib/unit/modules
SF:/php\.unit\.so\"\r\n\t\t\t},\r\n\r\n\t\t\t\"perl\":\x20{\r\n\t\t\t\t\"v
SF:ersion\":\x20\"5\.36\.0\",\r\n\t\t\t\t\"lib\":\x20\"/usr/lib/unit/modul
SF:es/perl\.unit\.so\"\r\n\t\t\t},\r\n\r\n\t\t\t\"ruby\":\x20{\r\n\t\t\t\t
SF:\"version\":\x20\"3\.1\.2\",\r\n\t\t\t\t\"lib\":\x20\"/usr/lib/unit/mod
SF:ules/ruby\.unit\.so\"\r\n\t\t\t},\r\n\r\n\t\t\t\"java\":\x20{\r\n\t\t\t
SF:\t\"version\":\x20\"17\.0\.11\",\r\n\t\t\t\t\"lib\":\x20\"/usr/lib/unit
SF:/modules/java17\.unit\.so\"\r\n\t\t\t},\r\n\r\n\t\t\t\"wasm\":\x20{\r\n
SF:\t\t\t\t\"version\":\x20\"0\.1\",\r\n\t\t\t\t\"lib\":\x20\"/usr/lib/uni
SF:t/modules/wasm\.unit\.so\"\r\n\t\t\t},\r\n\r\n\t\t")%r(HTTPOptions,C7,"
SF:HTTP/1\.1\x20405\x20Method\x20Not\x20Allowed\r\nServer:\x20Unit/1\.33\.
SF:0\r\nDate:\x20Mon,\x2014\x20Jul\x202025\x2007:29:14\x20GMT\r\nContent-T
SF:ype:\x20application/json\r\nContent-Length:\x2035\r\nConnection:\x20clo
SF:se\r\n\r\n{\r\n\t\"error\":\x20\"Invalid\x20method\.\"\r\n}\r\n")%r(Fou
SF:rOhFourRequest,C3,"HTTP/1\.1\x20404\x20Not\x20Found\r\nServer:\x20Unit/
SF:1\.33\.0\r\nDate:\x20Mon,\x2014\x20Jul\x202025\x2007:29:15\x20GMT\r\nCo
SF:ntent-Type:\x20application/json\r\nContent-Length:\x2040\r\nConnection:
SF:\x20close\r\n\r\n{\r\n\t\"error\":\x20\"Value\x20doesn't\x20exist\.\"\r
SF:\n}\r\n");
MAC Address: 08:00:27:A5:90:78 (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
|_nbstat: NetBIOS name: ICECREAM, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb2-time:
| date: 2025-07-14T07:29:15
|_ start_date: N/A
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.36 secondsVeremos varias cosas interesantes pero entre ellas el puerto 9000 y el servidor SMB, pero de momento vamos a centrarnos en el servidor SMB a ver si nos podemos conectar de forma anonima.
SMB
Info:
Veremos que podemos listarlo de forma anonima, por lo que vamos a conectarnos al recurso compartido mas interesante llamado icecream que es el que no viene por defecto.
Info:
Veremos que ha funcionado, si listamos no vemos nada interesante y si nos metemos en el puerto 80 veremos un 403 Forbbiden por lo que no podremos hacer gran cosa, vamos a probar a subir un archivo al servidor SMB e intentar verlo desde el puerto 80 a ver si se comparte los archivos, por lo que vamos hacer lo siguiente.
test.txt
Ahora desde el servidor SMB hacemos esto.
Y con el curl vamos a ver si se esta compartiendo dicho archivo.
Info:
Veremos que esta funcionando, por lo que vamos a crear un archivo PHP para generarnos una reverse shell de esta forma.
Escalate user www-data
shell.php
Ahora realizaremos el mismo proceso que antes, vamos a subir dicho archivo a SMB de esta forma:
Una vez subido desde el host vamos a ponernos a la escucha:
Ahora vamos a visitar dicho archivo desde el navegador de esta forma:
Ahora si volvemos a donde tenemos la escucha veremos lo siguiente:
Veremos que ha funcionado, por lo que vamos a sanitizar la shell.
Sanitización de shell (TTY)
Escalate user ice
Despues de buscar un rato, si vemos los procesos que estan pasando por dentro con un script llamado pspy64 esta en GitHub podremos ver los procesos de la maquina victima de linux, por lo que nos lo pasaremos de esta forma:
host
victima
Una vez que nos lo hayamos pasado lo ejecutaremos:
Info:
Por lo que vemos en esta linea:
Se esta ejecutando le binario unitd en el puerto 9000 bajo el usuario ice por lo que si conseguimos realizar una reverse shell en dicho puerto podremos obtener acceso como dicho usuario.
Si entramos en el puerto 9000 veremos cosas en JSON por lo que nos podremos montar una configuracion en JSON para subirla por POST con curl y que obtenga la reverse shell que tenemos en /tmp.
rev.sh
Lo guardamos en /tmp el archivo, le damos permisos de ejecuccion:
Ahora desde nuestro host vamos a crear el archivo de configuracion que nos va a proporcionar la shell.
config.json
Ahora nos pondremos a la escucha antes de subirlo.
Vamos a subir el archivo de configuracion de esta forma:
Una vez echo esto si volvemos a donde tenemos la escucha veremos lo siguiente:
Veremos que ha funcioando, por lo que sanitizaremos la shell.
Sanitización de shell (TTY)
Por lo que leeremos la flag del usuario.
user.txt
Escalate Privileges
Si hacemos sudo -l veremos lo siguiente:
Vemos que podemos ejecutar el binario ums2net como el usuario root, por lo que haremos lo siguiente.
Con esto podremos escribir archivos en el sistema como root, por lo que vamos añadirnos en el archivo sudoers.
Con esto nos quedaremos a la escucha, en otra terminal dentro de la maquina victima, aprovechemos que tenemos la shell del usuario www-data y vamos a volcar dicho archivo sudoers nuestro modificado mediante el puerto que tenemos escuchando como root por lo que va a sobreescribirlo con lo nuestro.
Una vez echo esto, le daremos a Ctrl+C para dejarlo ya, ya que con haberlo ejecutado ya lo habremos volcado, si nos volvemos a donde tenemos la escucha de root del usuario ice veremos esto:
Con esto vemos que se ha pasado el archivo de forma correcta, por lo que si hacemos sudo -l veremos lo siguiente:
Vemos que ha funcionado por lo que haremos lo siguiente para ser root.
Info:
Con esto ya seremos el usuario root, por lo que leeremos la flag de root.
root.txt
Last updated