[RUBY] script para loguearse en una web e ir a una url

Iniciado por ferminako, 30 Octubre 2012, 13:29 PM

0 Miembros y 2 Visitantes están viendo este tema.

ferminako

Buenas a todos, este es mi primer post y sinceramente en temas relacionados con el hacking se muy poco...

Soy programador y me ha surgido la necesidad de ingresar en una url  con login y password y una vez logueado  ir a otra url que desencadena un proceso de actualizacioón.

Dado que necesito automatizarlo en vez de todos los dias ir a mano a la web loguearme y darle al link que lleva a la url que desencadena el proceso de actualización de una bd , necesito un script para ponerlo en una tarea programada en mi servidor.

Lo más parecido que tengo es un escript  en mi servidor corriendo que se conecta a una ftp y  realiza unos uploads...

Podria realizar lo mismo para mi caso con la web?
Si es asi como podria ser?

Gracias a todos!

Eleкtro

Cita de: ferminako en 30 Octubre 2012, 13:29 PM
me ha surgido la necesidad de ingresar en una url  con login y password y una vez logueado ir a otra url

necesito un script para ponerlo en una tarea programada en mi servidor.

Da más datos:

Que SO usa el server, (Por lo de tarea programada entiendo que usas Windows y su programador de tareas, pero por si acaso pregunto)
En que lenguaje lo necesitas (Batch, Bash, vbs, python, etc... ¿o no importa?)

CitarLo más parecido que tengo es un escript en mi servidor corriendo que se conecta a una ftp y realiza unos uploads...
(Si usas windows) ¿Utilizas el comando FTP de Windows para hacer el upload, u otro comando externo? (¿WPut por ejemplo, o cual?)
(Si usas Windows y no usas IExplorer) ¿Te importaría descargar y utilizar comandos externos para abrir el sitio web y loguearte, etc? (De lo contrario, es imposible hacerlo con Batch y/o VBS)

Saludos








ferminako

Buenas tardes, el que tengo de ftp que es un .bat lo tengo sobre un server con linux en un hosting... lo he puesto solo como ejemplo.

En este caso podria ser ahi con linux o en una makina local de mi empresa que  lleva windows server peor no recuerdo la version sorry :S si es necesaria te la miro.

La problematica es tal que tengo que entrar en la web : www.ejemplo.com ahi tengo para loguearme, meto mi id y mi pass eso me lleva a otra pagina por ejemplo www.ejemplo.com/profile y ahi tengo un boton que al pulsarlo ejecuta una actualización de una base de datos con stocks de productos y demás.

Me da iwal en linux en windows y como hacerlo pero  necesito automatizar la tarea ;)

Gracias


Eleкtro

#3
Cita de: ferminako en 30 Octubre 2012, 18:03 PMMe da iwal en linux en windows y como hacerlo

Perfecto, pues he escogido Ruby:

Código (ruby) [Seleccionar]
# -*- coding: UTF-8 -*-

require 'watir-webdriver'

browser = Watir::Browser.new
browser.goto('http://foro.elhacker.net/login.html')
browser.text_field(:name => "user").set "test"
browser.text_field(:name => "passwrd").set "test"
browser.button(:value => "Ingresar").click
# browser.close

__END__


Aquí te dejo el ejemplo compilado para que compruebes si funciona correctamente con tu navegador (El cual no me has especificado): http://exoshare.com/download.php?uid=XD4DTSFN
(Te debería salir la página de login de elhacker.net, con estos datos)



Para que el ejemplo deje de ser un ejemplo obviamente necesito que me proporciones la URL y tus datos de acceso (por privado, claro), y entonces te podré ayudar a hacer el script si no sabes como y de paso compilarlo a EXE para que no tengas que instalar Ruby,
o puedes hacerlo tú mismo instalando Ruby con el ejemplo que te he dado.




Si prefieres hacerlo con Batch, aquí tienes alguna solución que dí hace tiempo:

Tema: Cambiar ip mediante .bat




Si prefieres hacerlo con VBS (Solamente si en el equipo de Windows server tienes IE instalado) tienes ejemplos en Google.


Un saludo








ferminako

#4
buscando budcando he encontrado un script en vbs que me funciona, pero tengo un problema y es que en vez de usar :
     .getElementByID("usuario").value = "xxxx"
necesito usar por name:
    .getElementsByName("clave").value = "...." pero me da error y me dice que no existe .getElementsByName en vbs , cual seria su equivalente???? es que el campo de la clave no tiene id solo name :S y para hacer click en un boton?

Eleкtro

Si eliges hacerlo en VBS no te podré ayudar porque no tengo IE para testear,

En Ruby te lo dí prácticamente hecho, solo hay que cambiar los valores (Y añadir una simple línea para la otra página de la actualización de la BD),
si es por lo de dar tus datos de acceso entonces puedo hacer un EXE que tome los valores desde un archivo de texto y así no tienes que darme nada, no me cuesta nada.
(perdona que insista, solo doy soluciones)

Un saludo





Referencia:
http://msdn.microsoft.com/en-us/library/aa752084%28v=vs.85%29.aspx


Ejemplos:
http://www.computing.net/answers/programming/vbscript-to-launch-a-secure-website-login/20230.html

http://www.tek-tips.com/viewthread.cfm?qid=1167873

http://forums.digitalpoint.com/showthread.php?t=684027

http://www.anwarsayed.com/3/post/2011/7/vbs-script-login-to-website-automatically.html

http://www.computing.net/answers/programming/vb-script-to-login-web-page/22035.html

Código (vb) [Seleccionar]
DIM IE
DIM ipf

Set IE = CreateObject("InternetExplorer.Application")
IE.navigate "http://zip4.usps.com/zip4/citytown.jsp"
IE.Visible = True

While IE.Busy
     WScript.Sleep 50
Wend

Set ipf = IE.document.all.getElementByID("city")
ipf.Value = "redmond" 'fill in the text box
Set ipf = IE.document.all.state
ipf.Value = "WA" 'fill in the text box
Set ipf = IE.document.all.Submit
ipf.Click    'click the submit button
'IE.Quit











Eleкtro

Cita de: ferminako en 31 Octubre 2012, 10:14 AM
necesito usar por name:
   .getElementsByName("clave").value = "...." pero me da error y me dice que no existe

getelementsbyname es un método solo del objeto "document" así que debes usarlo así:
Código (vb) [Seleccionar]
document.getElementsByName('nombre')

De todas formas como ya te digo no tengo IE para testear, prueba este otro:
Código (VB) [Seleccionar]
.getElementsByTagName('nombre')

Cita de: ferminako en 31 Octubre 2012, 10:14 AM
y para hacer click en un boton?
Mira el code VBS de ejemplo que puse más arriba, ahi lo tienes.








ferminako

Justamente estaba probando con esos comando pero ninguno es valido :( juuu

Pero weno seria posible que desarrollaras en ruby y luego compilaras un .exe  que se alimentase de un txt o cualquier sistema de fichero donde pueda poner
1º La url a la que debe ingresar el navegador
2ºid o name del txt del user y el contenido
3º id o name del txt del pass y el contenido(en este caso es name porque no tiene id... :( sino lo haria en vbs)
4ºenviar el form bien metiendo el id del boton que lo envia o con el name del formulario y hacer submit
5ºClick en el boton que realiza la accion

Gracia suna vez mas elektro!!!

overxfl0w13

Urllib de python te puede venir muy bien para eso, busca información en google es muy simple :)
[/url]

Eleкtro

#9
Si no te he entendí mal después del primer click te redirige a una página donde tienes que hacer otro click en un botón, osea, 2 botones en total, ¿no?

A ver si te sirve:

Navegante.rb
MEJORADO
Código (ruby) [Seleccionar]
# -*- coding: UTF-8 -*-

require 'watir-webdriver'

if not ARGV.empty? then FILE = ARGV[0] else FILE = 'C:\Windows\Login.txt' end

File.open(FILE, 'r+').each_line do |line|
   if line['URL'] then $URL = line.split('=').last.chomp end
   if line['USER_TYPE'] then $USER_TYPE = line.split('=').last.chomp.to_sym end
   if line['USER_NAME'] then $USER_NAME = line.split('=').last.chomp end
   if line['USER_TEXT']  then $USER_TEXT = line.split('=').last.chomp end
   if line['PASS_TYPE'] then $PASS_TYPE = line.split('=').last.chomp.to_sym end
   if line['PASS_NAME'] then $PASS_NAME = line.split('=').last.chomp end
   if line['PASS_TEXT']  then $PASS_TEXT  = line.split('=').last.chomp end
   if line['BUTTON1_TYPE']  then $BUTTON1_TYPE  = line.split('=').last.chomp.to_sym end    
   if line['BUTTON1_NAME'] then $BUTTON1_NAME = line.split('=').last.chomp end
   if line['BUTTON2_TYPE']  then $BUTTON2_TYPE  = line.split('=').last.chomp.to_sym end    
   if line['BUTTON2_NAME'] then $BUTTON2_NAME = line.split('=').last.chomp end
end

print "

INFO:

[+] URL:
   #{$URL}

[+] Usuario:
   Atributo = #{$USER_TYPE}
   Nombre   = #{$USER_NAME}
   Texto    = #{$USER_TEXT}

[+] Contraseña:
   Atributo = #{$PASS_TYPE}
   Nombre   = #{$PASS_NAME}
   Texto    = #{$PASS_TEXT}

[+] Botón 1:
   Atributo = #{$BUTTON1_TYPE}
   Nombre   = #{$BUTTON1_NAME}

[+] Botón 2:
   Atributo = #{$BUTTON2_TYPE}
   Nombre   = #{$BUTTON2_NAME}

"

browser = Watir::Browser.new
browser.goto($URL)
browser.text_field($USER_TYPE => $USER_NAME).set $USER_TEXT
browser.text_field($PASS_TYPE => $PASS_NAME).set $PASS_TEXT
browser.button($BUTTON1_TYPE=> $BUTTON1_NAME).click
browser.button($BUTTON2_TYPE=> $BUTTON2_NAME).click
#browser.close




login.txt
MEJORADO
# Valores para XXXX_TYPE: id, title, name, tag_name, value, index, text, etc...
# Importante: No dejar espacios en las líneas entre el caracter "="

URL=http://foro.elhacker.net/login.html

USER_TYPE=name
USER_NAME=user
USER_TEXT=test

PASS_TYPE=name
PASS_NAME=passwrd
PASS_TEXT=test

BUTTON1_TYPE=tag_name
BUTTON1_NAME=Ingresar

BUTTON2_TYPE=tag_name
BUTTON2_NAME=By Elektro H@cker


PD: Guarda el "Login.txt" en la ruta "C:\Windows\Login.txt" o pásale el argumento al script desde la consola así:
navegante.exe "C:\carpeta\mis _datos_de_acceso.txt"

Ejecutable: http://exoshare.com/download.php?uid=0BHKQ263
MEJORADO