Dag 5 OSCP | De Bash Omgeving

Reading Time: ( Word Count: )

December 10, 2020
Nextdoorsec-course

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 $USER kali
┌──(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)-[~] └─$ export target=192.168.117.128
┌──(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 exportcommando 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 deexporteren” 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)-[~] └─$ echo $$ 77589
┌──(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)-[~] └─$ 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

 

Om de andere omgevingsvariabelen te zien die standaard in Kali Linux zijn gedefinieerd, voer je“env” uit.

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

 

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.

┌──(kali㉿kali)-[~] └─$ sudo traceroute -I nextdoorsec.com traceroute naar nextdoorsec.com (104.28.29.172), max. 30 hops, pakketten van 60 bytes 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

 

Het totale aantal hops is 7 voor Linux en 8 voor Windows.

Ping nu het domein nextdoorsec.com

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

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.

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 *