Tag 5 OSCP | Die Bash-Umgebung

Reading Time: ( Word Count: )

December 10, 2020
Nextdoorsec-course

Was ist “Bash”?

Hier ist eine kurze Geschichte für Sie.

Wenn ein Computer hochfährt, erkennt ein Kernel (egal ob Linux, BSD, Mach oder Windows NT) die gesamte physische Hardware und ermöglicht es den einzelnen Komponenten, miteinander zu kommunizieren und von einer Basissoftware gesteuert zu werden. Die grundlegendsten Anweisungen eines Computers sorgen einfach dafür, dass er eingeschaltet und in einem sicheren Zustand bleibt: regelmäßige Aktivierung der Lüfter, um eine Überhitzung zu verhindern, Verwendung von Subsystemen zur Überwachung des Festplattenspeichers oder zum “Lauschen” auf neu angeschlossene Geräte usw. Wenn das alles wäre, was Computer können, wären sie ungefähr so interessant wie ein Umluftofen.

Informatiker haben dies schon früh erkannt, so dass
entwickelten sie
a
Shell
für Unix-Computer, die außerhalb des Kernels arbeiten (oder
um
der Kernel, wie eine Hülle in der Natur) und ermöglicht es den Menschen, mit dem Computer zu interagieren, wann immer sie es wollen. Das war eine aufregende Entwicklung zu einer Zeit, als die Menschen Eingabe von Lochkarten in Computer um ihnen zu sagen, was sie tun sollen. Von allen verfügbaren Shells ist die Bash eine der beliebtesten, leistungsfähigsten und freundlichsten.
Von https://opensource.com/resources/what-bash

Bash ermöglicht es uns, komplexe Befehle auszuführen und verschiedene Aufgaben von einem Terminalfenster aus zu erledigen. Es enthält nützliche Funktionen sowohl aus dem
KornShell
(ksh) und
C-Shell
(csh).
Ich verwende die Z-Shell (zsh), eine erweiterte Version der Bash, die standardmäßig mit der Version 2020.4 von Kali Linux geliefert wird.

Umgebungsvariablen

Was eine Umgebungsvariable ist, habe ich bereits kurz am
Tag 2
einfach mal schnell nachsehen. Wenn wir also ein Terminalfenster öffnen einen neuen Bash-Prozess, der über seine eigenen Umgebungsvariablenhat, wird initialisiert.

Mithilfe von Umgebungsvariablen erfahren Programme, in welchem Verzeichnis sie Dateien installieren, wo sie temporäre Dateien speichern und wo sie Einstellungen für Benutzerprofile finden können.

Einige andere nützliche Umgebungsvariablen sind USER, PWD und HOME, die die Werte des Benutzernamens, des aktuellen Arbeitsverzeichnisses bzw. des Heimatverzeichnisses des aktuellen Terminalbenutzers enthalten:

┌──(kali㉿kali)-[~] └─$ echo $USER kali
┌──(kali㉿kali)-[~] └─$ echo $PWD /home/kali
┌──(kali㉿kali)-[~] └─$ echo $HOME /home/kali

Eine Umgebungsvariable kann mit der Option export Befehl. Wenn wir zum Beispiel ein Ziel scannen und die IP-Adresse des Systems nicht wiederholt eingeben wollen, können wir ihr schnell eine Umgebungsvariable zuweisen und diese stattdessen verwenden.

Nehmen wir für dieses Beispiel unsere lokale IPv4-Adresse aus dem Befehl“ifconfig“.

┌──(kali㉿kali)-[~] └─$ export target=192.168.117.128
┌──(kali㉿kali)-[~] └─$ ping -c 4 $Ziel PING 192.168.117.128 (192.168.117.128) 56(84) Bytes an Daten. 64 Bytes von 192.168.117.128: icmp_seq=1 ttl=64 time=0.022 ms 64 Bytes von 192.168.117.128: icmp_seq=2 ttl=64 time=0.047 ms 64 Bytes von 192.168.117.128: icmp_seq=3 ttl=64 time=0.038 ms 64 Bytes von 192.168.117.128: icmp_seq=4 ttl=64 time=0.027 ms --- 192.168.117.128 Ping-Statistik --- 4 gesendete Pakete, 4 empfangene, 0% Paketverlust, Zeit 3076ms rtt min/avg/max/mdev = 0,022/0,033/0,047/0,009 ms

Ping (Latenzzeit) ist die Zeit, die ein kleiner Datensatz braucht, um von Ihrem Gerät zu einem anderen Gerät übertragen zu werden anderen Gerät und wieder zurück zu Ihrem Gerät, und sie wird in Millisekunden (ms) gemessen.

Wenn wir nicht“-c 4” einfügen, das für die“Anzahl” der Pings steht, würde es in einer Linux-Umgebung standardmäßig endlos weiterpingen.

Teilprozesse

Die exportierenBefehl macht die Variable zugänglich für alle Unterprozesse, die wir von unserem aktuellen Bash-Instanz. Das bedeutet, dass die Variable in den Unterprozess aufgenommen wird, wenn sie durch “export” definiert wird.

AllerdingsWenn wir eine Umgebungsvariable ohne dasexport” Befehl, wird sie nur im aktuellen Shell-Prozess verfügbar sein und NICHT dupliziert werden.

Wir werden die $$-Variable verwenden, um die Prozess-ID der aktuellen Shell-Instanz anzuzeigen, um sicherzustellen, dass wir tatsächlich Befehle in zwei verschiedenen Shells erteilen.

TDie “bash“Befehl dient zur Initialisierung eines neuen Bash-Prozesses und wenn wir “exit“, kehren wir zum vorherigen Bash-Prozess zurück.

┌──(kali㉿kali)-[~] └─$ echo $$ 77589
┌──(kali㉿kali)-[~] └─$ localvar="Local Var"
┌──(kali㉿kali)-[~] └─$ echo $localvar Local Var
┌──(kali㉿kali)-[~] └─$ bash
┌──(kali㉿kali)-[~] └─$ echo $$ 77821
┌──(kali㉿kali)-[~] └─$ echo $var

 

Oben haben wir eine lokale Umgebungsvariable mit dem Namen “localvar” erstellt, die wir mit einem Echo versehen haben , um zu sehen, ob sie funktioniert. Dann einen neuen Bash-Prozess initialisiert, echoed“$$“, um sicherzustellen, dass es tatsächlich ein neuer Prozess ist. Danach habe ich die zuvor erstellte lokale Umgebungsvariable “localvar” erneut mit einem Echo versehen, um zu sehen, ob sie im neuen Bash-Prozess enthalten ist und keine Ausgabe erzeugt wird. Sie können “exit” und den Befehl erneut ausführen, um zu sehen, was passiert.

 

Testen wir dasselbe mit dem zusätzlichen Befehl“export“.

┌──(kali㉿kali)-[~] └─$ echo $$ 75574
┌──(kali㉿kali)-[~] └─$ export globalvar="Global Var"
┌──(kali㉿kali)-[~] └─$ echo $globalvar Global Var
┌──(kali㉿kali)-[~] └─$ bash
┌──(kali㉿kali)-[~] └─$ echo $$ 77981
┌──(kali㉿kali)-[~] └─$ echo $globalvar Global Var

 

Um die anderen Umgebungsvariablen anzuzeigen, die standardmäßig in Kali Linux definiert sind, führen Sie“env” aus.

┌──(kali㉿kali)-[~] └─$ env SHELL=/usr/bin/zsh SUDO_GID=0 SPRACHE= LESS_TERMCAP_se= LESS_TERMCAP_so= SUDO_COMMAND=/usr/bin/su SUDO_USER=root PWD=/home/kali ...

 

Bonus

Hier ist ein interessanter Beitrag, den ich vor kurzem gefunden habe, über das Erkennen des Betriebssystems nur mit dem Ping-Befehl . Obwohl es meiner Meinung nach nicht so genau ist.

Zuerst führen wir den Befehl“traceroute” aus (ist nicht standardmäßig vorhanden, führen Sie einfach“apt install traceroute” aus), gefolgt von dem Zielort, um die Hops zwischen diesen beiden zu bestimmen.

Wir werden die zusätzliche Option“-I” (Großbuchstabe von i) verwenden, um ICMP ECHO für Sonden zu senden, wie unter Windows.
Linux verwendet standardmäßig UDP-Pakete, und aus irgendeinem Grund werden diese von der Firewall blockiert. Wir benötigen jedoch nur die Anzahl der Sprünge.

┌──(kali㉿kali)-[~] └─$ sudo traceroute -I nextdoorsec.com traceroute zu nextdoorsec.com (104.28.29.172), maximal 30 Hops, 60-Byte-Pakete 1 192.168.117.2 (192.168.117.2) 0,192 ms 0,092 ms 0,173 ms 2 * * * 3 * * * 4 * * * 5 * * * 6 * * * 7 * 104.28.29.172 (104.28.29.172) 30.179 ms 30.228 ms

 

Die Gesamtzahl der Sprünge beträgt unter Linux 7 und unter Windows 8.

Pingen Sie nun die Domain nextdoorsec.com an

┌──(kali㉿kali)-[~] └─$ ping -c 2 nextdoorsec.com PING nextdoorsec.com (104.28.29.172) 56(84) Bytes an Daten. 64 Bytes von 104.28.29.172 (104.28.29.172): icmp_seq=1 ttl=128 time=28.6 ms 64 Bytes von 104.28.29.172 (104.28.29.172): icmp_seq=2 ttl=128 time=41.0 ms

Fenster:
>ping -n 2 nextdoorsec.com Pinging nextdoorsec.com [172 .67.181.144] mit 32 Bytes an Daten: Antwort von 172.67.181.144: bytes=32 time=17ms TTL=57 Antwort von 172.67.181.144: bytes=32 time=19ms TTL=57

 

Der TTL-Wert beträgt unter Linux 128 und unter Windows 57. Ich bin mir nicht sicher, warum ich hier zwei verschiedene Werte erhalte, aber wahrscheinlich liegt es an den Protokollen, die beim Anpingen verwendet werden, oder vielleicht spielt mir die Firewall einen Streich. Sie können mir unten mitteilen, ob Sie den Grund dafür herausgefunden haben.

Nachdem wir die Summe aus TTL-Wert und Anzahl der Sprünge gebildet haben, können wir das Betriebssystem festlegen:

Linux: (7 + 128 = 135), dieses Ergebnis sagt nicht viel aus, aber wenn wir nur den TTL-Wert betrachten, sagt unser Ergebnis Linux.
Windows
: (8 + 57 = 65), auch dieses Ergebnis ist nicht sehr aussagekräftig, liegt aber nahe am TTL-Wert von Windows von 64.

Hier ist eine Kurzfassung der Standard-TTL-Werte:

Gerät/Betriebssystem TTL
*nix (Linux/Unix) 64
Windows 128
Solaris/AIX 254

 

Verlassen Sie sich daher nicht auf diese Technik. Ich werde auf bessere Möglichkeiten eingehen, das Betriebssystem unseres Ziels herauszufinden. Ich wollte nur etwas Praktisches für diesen Blogpost haben.

Aydan Arabadzha

Aydan Arabadzha

Author

Aydan, a cybersecurity ace and AI visionary, thrives on the frontlines of offensive security. His passion birthed NextdoorSec, a groundbreaking cybersecurity firm. A relentless pioneer, Aydan is persistently pushing boundaries, shaping the future of the digital world one byte at a time.

Other interesting articles

Automated vs Manual Penetration Testing

Automated vs Manual Penetration Testing

Pentesting is largely divided into two methodologies: Automated vs Manual Penetration Testing. Both have ...
8 Steps in Penetration Testing You Should Know

8 Steps in Penetration Testing You Should Know

Mastering the art of penetration testing has become a critical ability for security experts to combat cyber ...
Spear Phishing vs Whaling: What is the Difference

Spear Phishing vs Whaling: What is the Difference

Spear phishing is a particularly devious type of phishing assault in which the individual targeted plays a ...
0 Comments

Submit a Comment

Your email address will not be published. Required fields are marked *