Wat is “Bash”?
Hier is een kort verhaal voor je.
Wanneer een computer opstart, herkent een kernel (of het nu Linux, BSD, Mach of Windows NT is) alle fysieke hardware en zorgt ervoor dat elk onderdeel met elkaar kan praten en kan worden geregeld door wat basissoftware. De meest basale set instructies van een computer zorgt er gewoon voor dat hij aan staat en in een veilige staat blijft: ventilatoren worden regelmatig geactiveerd om oververhitting te voorkomen, subsystemen worden gebruikt om schijfruimte te controleren of te “luisteren” naar nieuw aangesloten apparaten, enzovoort. Als dit alles was wat computers deden, zouden ze net zo interessant zijn als een heteluchtoven.
Computerwetenschappers zagen dit al vroeg in, dus
ze ontwikkelden
a
shell
voor Unix-computers die buiten de kernel werken (of
rond
de kernel, zoals een schelp in de natuur) en stelt mensen in staat om met de computer te communiceren wanneer ze maar willen. Het was een opwindende ontwikkeling in een tijd waarin mensen ponskaarten in computers invoeren om hen te vertellen wat ze moeten doen. Van alle beschikbare shells is Bash een van de populairste, krachtigste en vriendelijkste.
Van https://opensource.com/resources/what-bash
Bash stelt ons in staat om complexe commando’s uit te voeren en verschillende taken uit te voeren vanuit een terminalvenster. Het bevat nuttige functies van zowel de
KornShell
(ksh) en
C-shell
(csh).
Ik draai Z-shell (zsh); het is gewoon een uitgebreide versie van Bash, die standaard wordt meegeleverd met de 2020.4 versie van Kali Linux.
Omgevingsvariabelen
Ik heb al kort besproken wat een omgevingsvariabele is op
Dag 2
Controleer het snel. Dus als we een terminalvenster openen een nieuw Bash-proces, dat zijn eigen omgevingsvariabelenwordt geïnitialiseerd.
Omgevingsvariabelen laten programma’s weten in welke map ze bestanden moeten installeren, waar ze tijdelijke bestanden moeten opslaan en waar ze gebruikersprofielinstellingen kunnen vinden.
Enkele andere nuttige omgevingsvariabelen zijn USER, PWD en HOME, die respectievelijk de gebruikersnaam, huidige werkmap en thuismap van de huidige terminalgebruiker bevatten:
┌──(kali㉿kali)-[~] └─$ echo $PWD /home/kali
┌──(kali㉿kali)-[~] └─$ echo $HOME /home/kali
Een omgevingsvariabele kan worden gedefinieerd met de “export” commando. Als we bijvoorbeeld een doel scannen en niet herhaaldelijk het IP-adres van het systeem willen intypen, kunnen we snel een omgevingsvariabele toewijzen en die in plaats daarvan gebruiken.
Laten we voor dit voorbeeld ons lokale IPv4-adres nemen van het“ifconfig” commando.
┌──(kali㉿kali)-[~] └─$ ping -c 4 $target PING 192.168.117.128 (192.168.117.128) 56(84) bytes aan gegevens. 64 bytes van 192.168.117.128: icmp_seq=1 ttl=64 time=0.022 ms 64 bytes van 192.168.117.128: icmp_seq=2 ttl=64 time=0.047 ms 64 bytes van 192.168.117.128: icmp_seq=3 ttl=64 time=0.038 ms 64 bytes van 192.168.117.128: icmp_seq=4 ttl=64 time=0.027 ms --- 192.168.117.128 ping-statistieken --- 4 pakketten verzonden, 4 ontvangen, 0% pakketverlies, tijd 3076ms rtt min/avg/max/mdev = 0,022/0,033/0,047/0,009 ms
Ping (latentie) is de tijd die een kleine gegevensset nodig heeft om van uw apparaat naar een ander apparaat en weer terug naar jouw apparaat, en het wordt gemeten in milliseconden (ms).
Als we“-c 4” niet zouden toevoegen, wat voor de“telling” van pings is, zou het standaard eindeloos blijven pingen in een Linux omgeving.
Subprocessen
De “export” commando maakt de variabele toegankelijk voor alle subprocessen die we zouden kunnen spawnen vanuit onze huidige Bash-instantie. Dit betekent dat de variabele wordt opgenomen in het subproces wanneer het wordt gedefinieerd door “exporteren”.
Echter, alsals we een omgevingsvariabele instellen zonder de “exporteren” commando, zal deze alleen beschikbaar zijn in het huidige shell proces en NIET gedupliceerd worden.
We zullen de $$ variabele gebruiken om het proces ID van de huidige shell instantie weer te geven om er zeker van te zijn dat we inderdaad commando’s in twee verschillende shells geven.
Te “bash” commando is om een nieuw Bash proces te initialiseren en wanneer we “verlaten“, gaan we terug naar het vorige bash proces.
┌──(kali㉿kali)-[~] └─$ localvar="Lokale var"
┌──(kali㉿kali)-[~] └─$ echo $localvar Lokale var
┌──(kali㉿kali)-[~] └─$ bash
┌──(kali㉿kali)-[~] └─$ echo $$ 77821
┌──(kali㉿kali)-[~] └─$ echo $var
Hierboven hebben we een lokale omgevingsvariabele aangemaakt met de naam “localvar”, we echoën het om te zien of het werkt. Vervolgens een nieuw bash proces geïnitialiseerd,“$$” ge-echood om er zeker van te zijn dat het inderdaad een nieuw proces is. Daarna echode ik de eerder aangemaakte lokale omgevingsvariabele “localvar” opnieuw, om te zien of deze is opgenomen in het nieuwe bash-proces en er wordt geen uitvoer gegenereerd. Je kunt “exit” en het commando opnieuw uitvoeren om te zien wat er gebeurt.
Laten we hetzelfde testen met de opdracht“export” toegevoegd.
┌──(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
Om de andere omgevingsvariabelen te zien die standaard in Kali Linux zijn gedefinieerd, voer je“env” uit.
Bonus
Hier is een interessant bericht dat ik onlangs vond over het detecteren van het besturingssysteem met alleen het ping-commando . Hoewel het naar mijn mening niet zo nauwkeurig is.
We voeren eerst het“traceroute” commando uit (wordt niet standaard meegeleverd, voer gewoon“apt install traceroute” uit), gevolgd door de doelbestemming om de hops tussen deze twee te bepalen.
We gebruiken de extra optie“-I” (hoofdletter van i) om ICMP ECHO te sturen voor sondes, zoals in Windows.
Linux gebruikt standaard UDP-pakketten en om de een of andere reden worden die geblokkeerd door de firewall. We hebben echter alleen het aantal hops nodig.
Het totale aantal hops is 7 voor Linux en 8 voor Windows.
Ping nu het domein nextdoorsec.com
Windows:
>ping -n 2 nextdoorsec.com Pinging nextdoorsec.com [172 .67.181.144] met 32 bytes aan data: Antwoord van 172.67.181.144: bytes=32 time=17ms TTL=57 Antwoord van 172.67.181.144: bytes=32 time=19ms TTL=57
De TTL-waarde bij pingen op Linux is 128 en 57 op Windows. Ik weet niet zeker waarom ik hier twee verschillende waarden krijg, maar het komt waarschijnlijk door de gebruikte protocollen tijdens het pingen of misschien speelt de firewall me parten. Je kunt me hieronder laten weten of je erachter bent gekomen waarom.
Nadat we de som van TTL-waarde en aantal hops hebben gemaakt, kunnen we het besturingssysteem definiëren:
Linux: (7 + 128 = 135), dit resultaat zegt niet veel, maar als we alleen naar de TTL-waarde kijken, zegt ons resultaat Linux.
Windows: (8 + 57 = 65), deze concludeert ook niet veel, maar het ligt in de buurt van Windows’s TTL van 64.
Hier is een korte versie van standaard TTL-waarden:
Apparaat / OS | TTL |
*nix (Linux/Unix) | 64 |
Windows | 128 |
Solaris/AIX | 254 |
Vertrouw daarom niet op deze techniek. Ik zal betere manieren behandelen om het besturingssysteem van ons doelwit te achterhalen. Ik wilde gewoon iets praktisch hebben voor deze blogpost.
0 Comments