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 $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)-[~] └─$ 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 “exportieren” Befehl 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 das “export” 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)-[~] └─$ 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)-[~] └─$ 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.
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.
Die Gesamtzahl der Sprünge beträgt unter Linux 7 und unter Windows 8.
Pingen Sie nun die Domain nextdoorsec.com an
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.
0 Comments