
स्टैक, PIE और कैनरी लीक की खोज के लिए स्वचालित फ़ॉर्मेट स्ट्रिंग भेद्यता शोषण उपकरण, %s या %p स्पेसिफ़ायर के माध्यम से फ़्लैग खोज क्षमता के साथ।
.d8888b. 888 888 888 8888888888 .d8888b.
d88P Y88b 888 888 888 888 d88P Y88b
888 888 888 888 888 888 Y88b.
888 888 888 888 8888888 "Y888b.
888 88888 888 888 888 888 "Y88b.
888 888 888 888 888 888 "888
Y88b d88P 888 Y88b. .d88P 888 Y88b d88P
"Y8888P88 88888888 "Y88888P" 888 "Y8888P"
By: DiegoAltF4
GLUFS आपको फ़ॉर्मेट स्ट्रिंग कमजोरियों का उपयोग करके लीक खोजने की कठिन प्रक्रिया को स्वचालित करने की अनुमति देता है। यह आपको स्टैक लीक, पाई लीक और कैनरी लीक खोजने की अनुमति देगा, प्रत्येक मामले में उस पेलोड को इंगित करेगा जो लीक प्रदान करता है। इसके अतिरिक्त, इसमें एक मोड शामिल है जो आपको लीक में "फ़्लैग" स्ट्रिंग खोजने की अनुमति देता है। इस मोड के लिए, %s या %p स्पेसिफ़ायर का उपयोग किया जा सकता है।
इस उदाहरण के लिए, हम पाई और कैनरी लीक प्राप्त करने के लिए GLUFS का उपयोग करने जा रहे हैं।
जिस बाइनरी को हम उदाहरण के रूप में लेंगे, वह TryHackMe रूम pwn101 TryHackMe रूम pwn101 की चुनौती 7 से संबंधित है।
हम बाइनरी को इंगित करने के लिए -b विकल्प, पुनरावृत्ति के प्रारंभिक मान को इंगित करने के लिए -min विकल्प और पुनरावृत्ति के अंतिम मान को इंगित करने के लिए -max विकल्प का उपयोग करेंगे। इसके अलावा, हम कैनरी और पाई के बारे में जानकारी प्राप्त करना चाहते हैं।
./glufs.py -b ./pwn107.pwn107 -min 5 -max 15 --pie --canary

इस उदाहरण के लिए, हम फ़्लैग प्राप्त करने के लिए GLUFS का उपयोग करेंगे।
जिस चुनौती को हम हल करने जा रहे हैं वह है 247CTF प्लेटफ़ॉर्म से Confused environment read।
इस उदाहरण के लिए हम बाइनरी का उपयोग नहीं करेंगे। हमारे पास केवल एक आईपी और पोर्ट है। इसलिए, हम पते को इंगित करने के लिए -ip विकल्प, पोर्ट को इंगित करने के लिए -port विकल्प, और खोजने के लिए फ़्लैग की शुरुआत निर्दिष्ट करने के लिए -flag विकल्प का उपयोग करेंगे। इसके अलावा, चूँकि हमारे पास बाइनरी नहीं है, हमें आर्किटेक्चर इंगित करना होगा, इस स्थिति में, x86-64 (-arch 64)। हम -min के साथ पुनरावृत्ति की शुरुआत और -max के साथ पुनरावृत्ति के अंत को भी इंगित करेंगे। इसके अलावा, हम %p के बजाय %s का उपयोग करने के लिए -s विकल्प का उपयोग करने जा रहे हैं।
./glufs.py -ip 3bcbadabd1a7e914.247ctf.com -port 50387 -flag 247CTF -arch 64 -min 1 -max 200 --s

इस उदाहरण के लिए, हम फ़्लैग प्राप्त करने के लिए GLUFS का उपयोग करेंगे।
जिस चुनौती को हम हल करने जा रहे हैं वह है PicoCTF प्लेटफ़ॉर्म से फ़्लैग लीक।
इस उदाहरण के लिए, हम सर्वर पते को इंगित करने के लिए -ip विकल्प, सर्वर पोर्ट को इंगित करने के लिए -port विकल्प, बाइनरी को इंगित करने के लिए -b, फ़्लैग की शुरुआत को इंगित करने के लिए -flag, और अंत में, हम -min और -max के साथ पुनरावृत्ति की शुरुआत और अंत निर्दिष्ट करते हैं। यदि आप --s विकल्प निर्दिष्ट नहीं करते हैं, तो डिफ़ॉल्ट रूप से %p फ़ॉर्मेट का उपयोग किया जाएगा।
./glufs.py -ip saturn.picoctf.net -port 50563 -b ./vuln -flag picoCTF -min 20 -max 200

git clone https://github.com/Diego-AltF4/GLUFS.git
cd GLUFS/
pip3 install -r requirements.txt
chmod +x ./glufs.py
अपनी बाइनरी/चुनौती के अनुकूल होने के लिए कोड को संशोधित करना बहुत महत्वपूर्ण है। इसके लिए, कोड के दो सीमांकित अनुभाग हैं जिनमें आपको फ़ॉर्मेट स्ट्रिंग का लीक प्राप्त करने के साथ-साथ यह कॉन्फ़िगर करने के लिए बदलाव करने होंगे कि पेलोड कब भेजा जाना चाहिए।
उदाहरण: ऊपर बताई गई picoCTF चुनौती के लिए, निम्नलिखित कॉन्फ़िगरेशन का उपयोग किया जाता है:
#######################################################################
# This is the part that you must modify to fit your binary. #
#######################################################################
p.sendlineafter(b'>>', payload)
p.recvuntil(b'-')
leak = p.recv().strip(b'\n')
#print(leak) ## For debugging errors
#######################################################################
| पैरामीटर | जानकारी |
|---|
| -b | शोषण किए जाने वाले बाइनरी को इंगित करने के लिए इस विकल्प को चुनें। |
| -max | परीक्षण किए जाने वाले अधिकतम मान को इंगित करने के लिए इस विकल्प को चुनें। सीमा: (min, max)। डिफ़ॉल्ट रूप से, max = 40 |
| -min | परीक्षण किए जाने वाले न्यूनतम मान को इंगित करने के लिए इस विकल्प को चुनें। सीमा: (min, max)। डिफ़ॉल्ट रूप से, min = 1 |
| -ip | रिमोट सर्वर का आईपी निर्दिष्ट करने के लिए इस विकल्प को चुनें। |
| -port | रिमोट सर्वर का पोर्ट निर्दिष्ट करने के लिए इस विकल्प को चुनें। |
| -flag | खोजने के लिए फ़्लैग की शुरुआत को इंगित करने के लिए इस विकल्प को चुनें। |
| -arch | आर्किटेक्चर (32 या 64) सेट करने के लिए इस विकल्प को चुनें। |
| --s | %p के बजाय %s का उपयोग करने के लिए इस विकल्प को चुनें। |
| --canary | वह स्थान खोजने के लिए इस विकल्प को चुनें जहाँ कैनरी लीक स्थित है। |
| --leaks | सभी पाए गए लीक को प्रिंट करने के लिए इस विकल्प को चुनें। |
| --pie | वह स्थान खोजने के लिए इस विकल्प को चुनें जहाँ पाई लीक स्थित है। |
| --stack | वह स्थान खोजने के लिए इस विकल्प को चुनें जहाँ स्टैक लीक स्थित है। |
| --v | वर्बोज़ मोड सेट करने के लिए इस विकल्प को चुनें। |