Script o herramienta para envio de peticiones

Iniciado por Maxel512, 27 Marzo 2015, 03:14 AM

0 Miembros y 1 Visitante están viendo este tema.

Maxel512

Hola gente. Actualmente he estado testeando con BurpSuite un router y he encontrado una pequeña fuga de información al enviar una petición POST a la puerta de enlace pidiéndole el archivo de configuración, a lo que el mismo accede generosamente a cederlo sin ningún tipo de restricción. Lo que busco ahora es un programa o script configurable para hacer esto un poco mas fácil, y no desplegar todo el BurpSuite, como podria ser un script en Python por ejemplo u otra herramienta ejecutable. Gracias

LaThortilla (Effort)

Código (python) [Seleccionar]
import httplib

def http(host,src,metod):
    conn = httplib.HTTPConnection(host)
    conn.request(metod,src)
    res = conn.getresponse()
    data = res.read()
    print(data)

#test

http('foro.elhacker.net','/modulodelhacker/','POST')


Eso creo que podría servirte ....

Maxel512

#2
CitarFile "/script.py", line 3
   def http(host,src,metod):
   ^
IndentationError: unexpected indent

Esta es lo que deberia poder mandar para repetir la request que hace el navegador al pedir el config al ONT


POST /getpage.gch?pid=101&nextpage=manager_dev_config_t.gch HTTP/1.1
Host: 192.168.1.1
Proxy-Connection: keep-alive
Content-Length: 137
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://192.168.1.1
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryxTKg6mjLA8C7ia3B
DNT: 1
Referer: http://192.168.1.1/getpage.gch?pid=1002&nextpage=manager_dev_config_t.gch
Accept-Encoding: gzip, deflate
Accept-Language: es-ES,es;q=0.8
Cookie: SID=5=YWRtaW44ODdmOTZlNWI2NjNmMDFmZTIwOTExMWNhM2ZkYTdkMg==

------WebKitFormBoundaryxTKg6mjLA8C7ia3B
Content-Disposition: form-data; name="config"


------WebKitFormBoundaryxTKg6mjLA8C7ia3B--


engel lex

#3
"identación" son los espacios a la izquierda de cada funcion, en python son muy importantes porque indican el scope donde estás

(colocaré "·" en lugar de un espacio sean visibles)
Código (python) [Seleccionar]
print "hola mundo"
def funcion():
··print "estoy dentro de la funcion"
print "estoy fuera de la funcion"
··print "soy en error de identacion inesperada ya que no hay nada dentro de que estar"


corrije los espacios ya que son importantes, asegurate que si todos son espacio no hay tabulaciones o viceversa
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Eleкtro

#4
Solo por dar una definición más específica de "Indentación":

La Indentación (o sangría) es una cantidad de espacios en blanco y/o tabulaciones que normalmente suelen estar presente a la izquierda del principio de una linea, ni es más, ni es menos.

Las aplicaciones de la Indentación sirven para darle un formato o estilo propio a cualquier tipo de texto, es una técnica usada de forma universal, en papel, archivos digitales, etc;
también se aplica a lenguajes programación, cuya finalidad normalmente también es la de formatear el texto, el texto del código fuente.

Lo que ocurre es que Python, es un lenguaje muuuuy restrictivo en este asunto (amado y odiado por el mismo motivo), cuya estructura se basa en unas reglas que dependen de un estilo de indentación específico, o dicho de otra forma, la indentación es parte de la sintaxis de Python, cómo en otros lenguajes lo podrían ser el uso de los brackets o corchetes {} y sus reglas, por lo tanto, es obligatorio el uso de la indentación en este lenguaje y además siguiendo unas reglas específicas para dicha indentación.

PD:
Te vendría bien leer las convenciones de indentación en Python:
http://www.python.org/dev/peps/pep-0008/#indentation

TL/DR:
El error de Python (y de otros lenguajes) en mi opinión es el hecho de hacer obligatorio el uso de una característica que es literalmente invisible cómo es la indentación, y eso puede llegar a resultar muy molesto e irritante,
en mi opinión, usar Python solo causa una notable disminuición en el rendimiento del programador (hablando en tiempo de productividad), puesto que, por ejemplo, no es lo mismo tener que ejercer tu mente y tus ojos para estar pendiente del formato de 100 lineas de código e ir comprobando eventualmente que todas las lineas cumplan unas reglas de indentación ...ir contando esos espacios invisibles (puaj), que añadir unos sencillos brackets al principio y al final de esas 100 lineas (por ejemplo) y opcionalmente darle tu estilo de indentación propia para el formato del código,
así que para mi, Python solo es algo negativo en el parogramación, aunque tenga una buena demanda en el mercado y sea multi-plataforma ...eso me resulta irrelevante, sus reglas de Indentación más que una utilidad favorable es la inutilidad más desfavorable tanto para el lenguaje cómo para el programador que use ese lenguaje,
y ojo, yo soy alguien que indento cualquer código que escribo en otros lenguajes, de hecho me gusta hacerlo y soy muy meticuloso en ello ya que siempre me ha gustado intentar hacer las cosas perfectas ...quiero decir lo mejor que pueda, es más, hay algunas IDEs para Python que tienen en cuenta dichas reglas y facilitan la tarea, pero aun así yo jamás me veré ovligado a indentar siguiendo unas estrictas reglas de estructuración impuestas en el lenguaje de programación, por que eso implica muchas cosas negativas de las cuales ya comenté alguna, y a mi personalmente no me apetece volver a pasar por ahí, ya toqué bastante en su día mi odiado y medio olvidado Python.

Algunas personas justifican la obligación de indentación de Python cómo forma de transmitir/instruir buenos hábitos de programación, pero esto en mi opinión es una chorrada inmensa, una especie de manipulación/tergiversación y/o el modo que tienen muchas personas de someterse a la aceptación de un problema que no tiene nada de positivo,
en realidad yo lo veo cómo si a un niño pequeño le gritasen sus padres cada vez que no quiere comer por que la comida que le han preparado no le gusta o por que no tiene hambre o por el motivo que sea, ese niño sabe cómo comer, y ese niño comería si sintiese la necesidad de hacerlo, pero al final el niño acaba comiendo de forma negativa y obligada, para no recibir más gritos.
Lo mismo es Python para mi, un mal "instructor".

De todas formas, al fin y al cabo, es solo una cuestión de gustos.

Saludos!








engel lex

#5
efectivamente aun odio python por eso, si salera una sintaxis de backets sería genial... pero tampoco es tanto asunto como para bajar el rendimiento :P (se podría decir algo similar del ";" en c/c++, ya que el cerca del 20% de los errores en todos los niveles)

algo que simplifica ese asunto es el IDE, que lo hace visual (como sublime) o simplemente te hace las validaciones (como netbenas) y te dice que anda bien y que anda mal...

pero si, es bastante molesto... y una sangría (desconocía que esa era la traducción, gracias!) con tabulación es diferente que con espacios... y se vuelve algunas veces molesto al copiar codigo desde el navegador



Maxel512 sobre lo que tienes que mandar, tendrás que usar los headers para configurar una peticion identica... aunque no debería ser dificil

solo es algo como

Código (python) [Seleccionar]

headers = {
    "User-Agent" : "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36",
    "Referer" : "http://192.168.1.1/getpage.gch?pid=1002&nextpage=manager_dev_config_t.gch"
}


y al conn.request solo le agregas las cabeceras como 3er parametro
Código (python) [Seleccionar]
conn.request(metod,src,headers)

revisa cuales son las cabeceras que envía realmente
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Maxel512

#6
Muchas gracias por las respuestas, que vergüenza que de ahi venga el error xD.

Adicional mente cuando envíe la petición esta ultima cadena de texto debe ir o no me devuelve el archivo


------WebKitFormBoundaryxTKg6mjLA8C7ia3B
Content-Disposition: form-data; name="config"


------WebKitFormBoundaryxTKg6mjLA8C7ia3B--


EDIT

Todo va bien, arme el header, pero la pagina me devuelve el error de que no estoy logeado, me ha de faltar algun dato o algo. Le meti esto


import httplib

def http(host,src,metod,headers):
  conn = httplib.HTTPConnection(host)
  conn.request(metod,src,headers)
  res = conn.getresponse()
  data = res.read()
  print(data)
  headers = {
"Host : 192.168.1.1"
"Proxy-Connection : keep-alive"
"Content-Length : 137"
"Cache-Control : max-age=0"
"Origin : http://192.168.1.1"
"User-Agent" : "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36",
"Referer" : "http://192.168.1.1/getpage.gch?pid=1002&nextpage=manager_dev_config_t.gch"
"Accept-Encoding : gzip, deflate"
"Accept : text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
"Content-Type : multipart/form-data; boundary=----WebKitFormBoundaryxTKg6mjLA8C7ia3B"
"Content-Disposition : form-data; name=config"
"Cookie : SID=5=YWRtaW44ODdmOTZlNWI2NjNmMDFmZTIwOTExMWNhM2ZkYTdkMg=="
}
   
http('192.168.1.1','/getpage.gch?pid=101&nextpage=manager_dev_config_t.gch/','POST','headers')


Esta es la respuesta del ONT


<html>
<head>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache, must-revalidate">
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>F660</title>
<script>
function logout_redirect()
{
alert("Tiempo de espera excedido, por favor vuelva a conectarse.");
document.getElementById("flogout").submit();
}
</script>
</head>
<body>
<form name="flogout" id="flogout" method="post" onsubmit="return false;" action="/" target="_top">
<input type="hidden" name="logout" id="logout" value="1">
<input type="hidden" name="logout_from" id="logout_from" value="login_timeout">
</form>
<script>
logout_redirect();
</script>
</body>
</html>


y asi es como BurpSuite me muestra que se arma el header a la hora de enviar el request, notese que si envio este, si funciona




Adicionalmente me gustaria saber si es posible guardar el attachment, sino me queda todo en texto plano y tendria que copiarlo, y hacer un archivo para el config.

Demos. Si no me queda algo asi culo al aire
HTTP/1.1 200 OK
Server: Mini web server 1.0 ZTE corp 2005.
Content-Type: text/html; charset=UTF-8
Accept-Ranges: bytes
Connection: close
Content-Length: 21728
Content-type: application/octet-stream;
Content-Disposition: attachment; filename=config.bin

™™™™DDDDUUUUªªªª



El DUUUUU es todo el archivo que esta "cifrado" pero aparece con simbolos raros que no deja copiarlos aca.

engel lex

#7
procura usar la etiquetas GeSHi cuando pegues codigo paraque sea más legible
Código (python) [Seleccionar]
Código:
import httplib

def http(host,src,metod,headers):
  conn = httplib.HTTPConnection(host)
  conn.request(metod,src,headers)
  res = conn.getresponse()
  data = res.read()
  print(data)
  headers = {
"Host : 192.168.1.1"
"Proxy-Connection : keep-alive"
"Content-Length : 137"
"Cache-Control : max-age=0"
"Origin : http://192.168.1.1"
"User-Agent" : "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36",
"Referer" : "http://192.168.1.1/getpage.gch?pid=1002&nextpage=manager_dev_config_t.gch"
"Accept-Encoding : gzip, deflate"
"Accept : text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
"Content-Type : multipart/form-data; boundary=----WebKitFormBoundaryxTKg6mjLA8C7ia3B"
"Content-Disposition : form-data; name=config"
"Cookie : SID=5=YWRtaW44ODdmOTZlNWI2NjNmMDFmZTIwOTExMWNhM2ZkYTdkMg=="
}
   
http('192.168.1.1','/getpage.gch?pid=101&nextpage=manager_dev_config_t.gch/','POST','headers')


realmente me sorprendería si el script de python te corre... copiaste mi ejemplo y ni si quiera lo viste...

te voy a copiar una linea de mi ejemplo y una linea tuya para que notes las pequeñas diferencias

mi ejemplo
Código (python) [Seleccionar]
"User-Agent" : "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36",

como tu lo hiciste
Código (python) [Seleccionar]
"Host : 192.168.1.1"

como debería ser lo que hiciste
Código (python) [Seleccionar]
"Host" : "192.168.1.1",

igual revisa el frame con wireshark a ver que tan diferente es
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Maxel512

#8
Si, estaba pensando en usar wireshark para ver en que no coincidían. Si ya arregle eso tambien, tonto yo.

EDIT

Estuve mirando a travez de wireshark y es como que los headers no me los tomara, no los manda. Ademas de que la request tiene que ser del tipo POST using multipart/form-data