martes, 3 de noviembre de 2009

3er encuentro de seguridad informática


GZEEF VEATK DRDLC NLAHE TLZKH YGLPZ TNEBD MSQQD PATGW YHCZC KNQWG MVPBZ OZTAL TVUPV RTMDX EYBDD GOZBJ DTSZC CAEVM UDMEI YLTEZ WDQSN UEYAT GWYHC ZCAAD MFUGL RSDLC PLAPD QWDQN MQQFM GAFLI ZQCGD LZBIQ WHMHM ROCTD MGUNR OZTAW MTRNH CDMST OOMPO UFZBN QFACU TQWLD QZKQQ FMTSV HAZOD PSLVS OCJDQ BZFEW MKEPA N

+


Hay gente que se lo gana de ojo (el wargame)

KZWNT DTRUP CZCCG MLVXZ CSDRG ZJENP DUPLR ETDTZ ZXDRO HMSDM GRGQV EPADD KSGML LTLCZ DFTQK DLLXN HVQLS HEAAW HIDPK HSZPD ZMHTQ ZDMBT GNEZD SGZSN DRCLR WGEUJ ZSZAN EJYJE OBBGZ RRECA DNCZC DKZEO XCCIF HCCDK CSPOJ RKKZC RHCLR WPSGE HRSDN EDIVR CKDBD KQSLU XGQZC DCQCG ZVYAT LRODB KAWUT NVLIJ NUVRJ LGAIV MRNMR ECADN CZLTX ZOAMT TSAZH DLOTE OQHPW LRSZR CCZTP BQYZQ DMVOO WAOTL KZBHQ NLLDC QUDRS NUTPU PSOPK FQZEI LAPEN SNRON TIYDX TCYLD ZKGVP VIOAW NCDQX IDQIA TSZTM HXECA XDCKC DROWS OMIAP ANSHD OPZ


Dragonjar people + ponentes + sniffer

EDNIN QIAEP NMDRC LZAFU GAQZA ZLAYM CLQZB NLOQN PVIEU UNSBM KCZAS ENLUD MSQSZ VROUH RPTDO AYBXE PLMDK DXEYB DCQUT MMHXE WLTOT NZMHY CCTVN MKZOZ KZDRL ACOXH MOZQC EWTDS


-

QDCLX MCTGU NLDPW IPZDE ZADMC DTEYM HTGWN RSRQL ZYJIG YNLDM EIZVP RCSFT MZUCZ APSSB DLDOC RPKTN KTONQ SCNEM HPCYZ ETSWR ZATVG USNRH PDPXT NFPDM SDFEB CXEPS NRQDC LTKTY SBDLD PWEOM TLTLB TDQFO NWBOP VSZLD PTLTT NEVKN LAKAD WCPQJ NRKNU EGMCT QZQDK ZEIZV PDQZB NMRGG FZXDC KHMEN TMEQR ASBDQ DZNMP VIEUL NQHDP TLVSE NHLZM DTABC TMWJG NRPWE CMBOU XTDRD QRTMC TGULD QDHIP ZDANV RDUDP TZASO PKDKZ RRECA DNCZO TDCGN AIGTK JHOZQ FEEIA LGYDR NQKEY BPDQZ ONQDZ PPZIO UQTFZ QYACO PMGZZ RHRVI CIROP MDQDM EILAI CPPBZ RXPOE KCIEH RODQQ CZVPL VVMHU DNYAI HATYZ SNRCG CISAD SDRBN OODQU UGYZO NBQTP VTMQZ TMHME OYDTN KLMSD BWAYL DIPAD MSZOO DXTRH PKZQD NPMTX CQVAI DSKVZ LTEUA NRDUG NEWHA XLBDR OCRPK TQWLD RSTXI CIBOU LRSZM EAOWH OSBDD KLWNO WSENH RDFTT IOISI PMNQL SKCLM CCQSN LAHCS TUELG TDMSD POLDP NBHQZ RDTEA QIEPS NRLHU MZAIO RPBRR DJAMT PNFLK ZRLKS XIHHG YQZLH GNEIH AUPRS DMREC ADNCZ MDVAK EDVDO DZMNU ZVADY JEXBD KUDPE WMKEP ANLZR KNQWG MCAHU NDZCW CNEPK NZKNU PPZUI NLRLR SENTK DSGZS DZNGN PTTVG USNCD OAYQO ANLRN BTTRT TDMKZ LNLTE HZASE NVRZR HUTPV IEULQ ZMOGR DWCAU UTDUZ UPPZH OPHRP TDUAM MCDGZ HRSDO ADWTL GJSQM HEAJM HTPJN MNBKE YLDUP WNBNC GLXCC DQKDK ZRGGF ZXDCK HMENT MEQRA ULOTD CGNZB PRGSC DRHPT PZHDW YZMSD NADKW ATSZR BTCNO WTNOH RCDTP AZKPS KUKZR OGRDW CAUUN QDRRO YLXET VMZBN OEYBP RKVRN ZBEIZ VTSTL ZKHYC DDXDR RHQSD CGLZA EOPLM SDRHI YIAMG USDTM QNZAP BGZHO QDQCF XPRUL NMNOG RZLTL QXTDR HGSEW NSGNT QNDUQ FMPEU ADQHS OONWA OOIHZ XRWMF VSOFL KZRDI UCQSA FUTMB ZCLNI CZCYT MMHXE WQCTG YDRZM VETVI ETLRZ MSGPL ZPMKL RTMMK VPTSO PKDON CCMZA GECSH YZQGV PVIOU HKDRS KLZMZ ORHQS XZTDP NROPV TMZBQ NOMAA UTTBG ZUQFM WAALM NSQQS AIHEU LRSDZ QTLUQ IPTDC DBGPN QDNGK DZKFW NLARH CYKZR ZNEDB PRGZO DQZPD ZDTRC SFNHM VECMH APADX DMEOY BGATT DBNMN ADUXS OHRBN RCSAM GOAVR DPTGE WXGOD SDLZM QEDLT LQZNQ FZPIK ISOTL RMHCG LZAEO PLMSD REOXW IANWZ QZLKE WXGOD SDLZR KGFMH IGUCN KZPOD QCCTV MHYZE IYLTI PADQD RGSFV EBNPB NNALE EQKOE VLNDK SUPIH IUADZ KDKST VDDGI DQZSG NPZJN RBKKC DROYM CTGZS BMHEO DYJES BHDQZ PMZAI RCYRT RRGCC MIOUZ HKZRE OYNTR GUBHZ RVIPV TNWUM HUDNL ZETNV VMBDR NODXD NGUSD RCGBP ZPNUL QODQU OYIHE ZWDQS ZUEYU PNGQZ QSDOA DTDWU PKZNQ KEYBP CKUDR PTGEW KDNIY DRNDP CFMCT TVSDM FCUYV XVGSS BMHEO LTIOG USNMB GSOMQ ETHMB NMUEC DPRRV MDMSG SNWCE UVROD QHIWM HANNT MZRQP TVXOP LRMDS CMPVI ERLQR NMCLP AMXZL KLZKK GYWTS WUZOD QUOYI GEEVM NBHFA PVTLO IHSNH PTPZC AEPNM ZKTEN WCOEP CNONT LLNDR OHCHU DTTTL PEPXT DCHUE CBPIO WQHLH GNOWT LEVMS DMKDZ BRNKJ NMDBG SLZXO RHQZB ZRTLZ JNKUS DQRAO DQVOG SAKNF FEIFM SQSNO ZQCED BPRGU SDQZF OOMRO OVUZM LWCSI HCQZZ RDMGS AIPYR VQDRN XACQP SFLKZ RGGRC IBIGU SZRXQ MPBDD QSNFZ TUAOI HYCSZ RBNPO NIHIP LLAZQ IODCH CJHQK ZRPOX MPBWY QHDQQ N

...

WWZLZ KDNQG BNGZE EXCRH QAHDL OQIYB TRPLS BQDQQ FMSEU KDKNR VIPUE OUXTD UHUIE IQAUB RHSHQ WPJTN OVCNZ COIYQ HTTHC NQBQN PTSAA KDIZV UQFMA ETLON QSGAU WCAVO ZMBKC RLUTN VLDRT MCPPZ HOPHB NMTPP PZUIN ZXRZC OIYXD RNVSZ MSQSF ARHCY KZRDU TLJPN QYHDM SCDLA SEGZZ ENQOA JTDPT PLDQN SUPUT PTLFT MSHUP MHTQL RTMSG MLZTA NKDRD FWRTL PDKUE NQLVI NIBUE ONROT GDPVE EPZZQ PTGSB CTLQZ AZBJW PDGAA OVMHS NTIKI RIPZN MSDOA DQCTG YDRZM VEDGC AFPDO TDFEY MVATX TDWWZ TTMCE RLCZF NIAJU TTQKN KNFCP LZPQW LRTRB JACTP SULBN MUKEC BPNEH RHDMJ OHBDS AZHMN KXIOI GTQKN DRNOE DMVUC WQDFT PTLVS OGZZD QZNAZ ZXEPA ZBHMS UPATL GKDAZ CCRLM HTGLW ONRKT ZZDET HPTDD NPMTX CQUND RSCBL XGERH QZCNR ACIPL IVCHE DTEYB TXZEK NBNPO NMCEN LQDMB WEYBG OFLGZ BJGRD WGGCU HYZCQ PZZAA OPRLZ TPIGM GSKKZ CBTCN OWAOX PDMKZ NIDBP PGURC DSQDZ AAOUL ROZNN EDYJE JHXSQ ZDAUI CDQLM DKLWN OWSEN HRDFT TIOIS PQYPT DSTAP VPXZE DRSZD IPVFU GEWWR DRRPA TNVLB NLNWN APDNG MQDZB MECZT CQUNB HCQPP ZDEUA NXRDI UCWFU GPMSD QPEEB XEPLL TBGQS ZBGOU WDQEH NEDLT SGNTQ HCCDC WSAPK NONQC HNWCM CFNQZ BVIGQ SAFFC HROWE DBDSC CHZIZ TAYCT SVYNO ZRVEC UXNGS DUDMV OJUTS GNTOQ DIUYB PNFVO NQPWE LFMXZ EWZWW ZNZTD CQUNB ZOGRZ TDQWL ODMRC BLMGA SBDWW WJAMT PBCKD LZRKA OWGPK KNMNO WDPMC TGUCD QRWSN PPRNH RUHOC SLZER GZDMS ZEIZV TSGZB TBGGM FKWAU JNRZR AFTVP LOLMS DMQCZ VRLWU ZCZMQ QFQTR QHONR SCRAM GOGZS NXBCS TATGW YNPTD CMFKW AUWDQ RNPAD LTLCB CHSNT IZTTS RHRNK NOIDU DENWQ NAKGM LIFUG ZONQP WEPAI OPVRD LNFEC LTANN TMZEQ RXIHE TPZKN LKSXW XNXPS ZQZWN NWCFG YDMBH CNEMS EDYZR HKSUP ADLQO ZAKDR OCBJG WZXMN SGNPZ JNVYZ CTBVO CXDRO HREZL QSZAF UGZDZ MOQRX IHEZW DQSNU STMAM GURZI DPOWT TGCHK OAKKC ZVDSG JTLOK GNWWH ODQDS HUQSO MGECS HYZQG SLLXF WZHMC DEOYW RIOPD MSNPO WWRRK AHBNZ NSZTD ORPMN PTGED MIIRV CDBNU ADATD GIDMS DPECM CCWLM SZXEU LLGAT SNRNA TEWIB ATJGZ NZPAW QOATI HDMTU TPLTS OLDMS HGNOM CXZEZ WWWNO SMAEF VONQK KSEIH CQSNL AHCNL AEETV MNKNE OYWRA GUODQ RQNLX TRQSZ HLOTE DQCQW LLDCH QECIF UGUNP TDTAP AIATH GPTDP OBCTR CKHBS ZTLLA RHCYK ZROQR PTBOV PUNPT GFFMG ANHRB GZTLL AEATL BZMOT EAIGA FHROD QQSPB TROPM ZAZPC ZVKIT AHDMC QEYBP LNLQD RCGIX XGOXP RZBHP YZKGE QXTDD MVEYL TLOLM RZIGD PAJSE OZQKZ UYPZP ANNNB NLQQF MTSQZ PTDRG DTKTN ULQGZ BMECA COJHB DMLCG TICOU VMSZM QCZUD SGJQD DRQNA MGSQU ZRBNO NPANC QYQHD MVEDK DNEVM NBHOI PVIOU XTDRZ DEYIE LKJZQ DSECC MDQWL DKLDP SLRTE THDRD XNONW BPCYS NBNOP WMIAO LMSDO GRZKG EQXTD MNGRL VXENT NLDMV OYQTL NBFZQ OCRLP PCGYK NRZDE CQVUC SKDOZ UAIFM DGSBT ZKGSA MGADH LTBGQ MDXJE USNBN MQCSI REOBB GNSKE XXDEP SNRSH GMAWH DGCZM CZNOD KGPEW TKZXC NEQRP WSZXO DPSBC TRWPC NAZLO CMPLO LMSDG CBTIR RGJHC NOGRZ AXGQC HDMCQ LZUXS OVKDX DPDZT DMKZL NDREU NPPNF VKNLH UMZGT SGNQT ONSUP ATMWL RSQZK NEMGN CJHNM ZNMPV IEEVL NTMIR FXDDG PMUDR VIRIR IPJNK NLDIL VPNQA DQLHP AXIHQ WLRHD MFOZB GOKUS DMSQF LTAIF VONQQ GPCMH EPAZQ KNSUP VDHCF DMDRV EAIHX ZEOQN LGTTU JCJHR BNRCS XWIIX PKTRH QNJLT CGWBH NMAOG QPJGZ NKNOQ RPTLA TNZLD RQLZX DRXLQ ODQUO YIHCQ SNLAH CNLAX MRSDL DMVAY LDUPJ SEPTG HPDXS VVXPT DJEEM CIFVK ZNOQR ECCIF HCCDS QCLZS EHVQL ZQGMZ BPEPS NRGHV BAMGO RLMRR DTQFM PLIBH DMCGC ZTDMD PZDRB CPLHS EOVMS ZQWNN BUANL RSHKQ DPNRO PFZKN BQNNT JAPUN DRSCM ZAEAT HDRZR EODIH IOWQN UHUAN QCARA HSTCG SLKII VBCDR MQSPT DQWLE TDOGR ZPPCG YUHZI CRLUJ CJHRO DQUOY IHCQU KZDRR ECICZ CKDDM BQNEZ PRULB NMTPD PAPFQ ABMHB QCZVJ NPPUD KHPTP ZTSCU SDXSG RXQCA TJDQQ ZPDZM AEXLM SNBQN FVJLV YZEZR VMTVX WCYFZ LDNIE MCOGZ ZKFNO UJJXE PCHRS NCHDQ WAAXT DODPS LZAON HOQWH OAGMO QWLZM TMEIP VJNYH QFZLG DPMHT GLRSH KQ

RESUMEN

DKGVP VIOGZ STUND UPVDD GZCDD KRUYB DDGCH RSZFE RMCET HQTMO WNEWS EGUBT DMVRZ XPRCW DQRNP ADYJE KUHBH ZPEYM AMWUC NCDNA DMVUT PCZCX SUTMG EPJNM NBGRD MTNVY DRHDN EGMCT QWZQZ DUEEQ EOFLO AKHEO QCCCK VMZOD TOPVI OPJDR PTGPL APCQU KZRNV RLAEE TZNMZ RSUPG PPCZZ QNMGS LATTC WZROQ KMPZX ZCZPT DOCSL KDNNH RODQU OYIHQ WLSQZ ACJLV TNULB TQHVY CMHEC YBGHM IXYCC CCCZZ DWKSE QGEUL DROZE IZXPR CUNRN STODX PRCSN RPTGQ FMGEO VRRTA KRFVE OEVDK MHXEW XPRCS NRPTG LLZTF GYDMB HCHLK TMWJG NRZQS PAIAR VQETD TAOMA PCZXP TDTEX WHQWL BNKNO BTIPL EHMBD TPNTD TLCZZ KFMFA

people ..., si señores, el del lado izq es un sniffer ...

RDTQF MCIPN TMZHP SEQIU EPMNQ FCNTH PCKUR DZSTE GMPRG HKHYZ TUYMK EPANB NMWNL TRAPJ DLZRC LEWDV CTNRZ DUTLZ ROPKD MZCQS LZTPG AHQXQ GPPBX RNVLH RLQUD IRHKU ZIZOQ NPAEA CSNGZ BGNXI HCGYB ZZQIE YBXNC FAQZR KLWWW AELMP TDGSE IBOUL RODQC NOWTN VVMBD RRDEW SONVP TDCKG ZMHSK UZMHL QDPWU EPKDQ ODTOD QERGZ DMSZT OEZDP WUSNC DXIDB PNQUD VAHGP ZZFUG ANCNR NODZT SOLMD RPWEW MWADS ZAZMF EWWBA THUHK KQSZL TLGCD MSNAN LLXEU LZSQD XILLT CKYKN PTGNZ TTGWZ SNNKQ QFMSE HPMHS HXAXM CTGKD ADQCM PRDRC YTMRZ NUOWE ATHSN CZGSL OTNVL PTDST AMIYA FLENQ LCIYL TPGUC HDMVE BCTCT LDDMK CLTJT RVHCC DKCIY NDROH BHMXS UPATF QYLZO QQFPA XOPHK LDMVE OMUOT TZZTS QDTLP CVHDM DRVAD ZTAU


martes, 29 de septiembre de 2009

How to reset an ALOM on a SUN Fire


Este posts es una nota mental y una respuesta a mi mismo, les cuento un poco la historia.

Tengo un servidor SunFire v245, nada del otro mundo, pero una buena maquina para experimentar cosas relacionadas con los procesadores sparc. El asunto es que esta maquina la instalé con solaris 10 y obviamente puse una contraseña de root tan fuerte que la olvidé.

Tambien jugando un poco con la ALOM, le puse contraseña al usuario admin y tambien la olvidé.

La maquina no tiene teclado sparc, tampoco tiene tarjeta de video y tiene 2 discos de 70GB, uno de ellos con /dev/null.

La pregunta que hice en algun momento era, como hago para entrar nuevamente al sistema operativo?, como recupero la contraseña de la ALOM?.

La ALOM para que se hagan la idea, es un software instalado en un chip (entonces es un firmware) que permite administrar remotamente el servidor, pero esta administración no es lo que se imaginan. Dentro de las caracteristicas estan por ejemplo:

  • Poder ejecutar rutinas de chequeos de hardware (POSTS)

  • Habilitar conectividad por red, por una tarjeta independiente a las de 1Gpbs disponibles

  • Habilitar acceso por serial, telnet o ssh y tener un CLI para ejecutar los comandos

  • Hablitar un sistema de registros o alertas a servidores SYSLOG o habilitarle la posibilidad de enviar estos registros por correo electrónico.
Lo interesante de la ALOM es que estará disponible con solo conectar el cable de potencia, no es necesario prender el equipo y menos arrancar un sistema operativo para que funcione. Otra particularidad es que estando en el shell de un sistema operativo solaris por ejemplo y presionando los caracteres correctos (#.) podemos cambiar al modo ALOM y viceversa (esto es mentira, pero me da pereza buscar las teclas).

En fin, la ALOM tiene muchas funcionalidades, pero como mencionaba al principio, por seguridad tiene un sistema de user,password para validar el acceso y una vez esta configurado es necesario entrar al sistema operativo solaris para poder cambiar estas claves.

¿Como hacemos entonces?

Despues de leer e intentar soluciones, logré recuperarla con una mezcla de cosas:

1. Primero necesitaba arrancar el servidor desde un LiveCD.

Pero la maquina estaba configurada para arrancar por discos siempre, por lo que no me era posible. La solución entonces fue sacar los discos duros, encender la maquina (con el cable serial conectado a TTYB y usando putty-->serial), despues de hacer el POST e intentar arrancar por los discos sin éxito, la maquina se tira a un prompt "ok>", desde este prompt puedo hacer cosas básicas, como por ejemplo decirle que arranque desde el CDROM.

setenv boot cdrom o algo similar, se puede usar help para ver los comandos disponibles.

2. Al poder arrancar del CDROM/DVD lo que necesitaba era un LIVECD que cargue un sistema tipo Unix, no tenia a la mano los CDS de Solaris/Sparc, pero creo que eran la solución directa. Lo que hice fue cargar OpenBSD/Sparc y llegar hasta el menú de instalación inicial y luego insertar los discos (en caliente) y luego salirme al shell de OpenBSD.

Desde allí monté (mount blah blah blah) las particiones del solaris que estaba disponible y de esta forma pude entrar al contenido del disco, ahora que?

3. Se pueden hacer varias cosas, pero como lo que quiero hacer es reinstalar el sistema operativo solaris, entonces borré el /etc/shadow. Jaja, tambien pude haber creado un usuario con privilegios de root con una contraseña conocida, o pude haber modificado solo el campo de la contraseña para el root en el archivo /etc/shadow, etc, etc.. pero no!, Yo queria borrar el shadow. (No lo hagan en casa a menos que quieran aprender a solucionar problemas)

4. Con el /etc/shadow eliminado reinicié la maquina, con los dos discos conectados, entre en el prompt "ok>", le dije que arrancara de discos y esperé ...

En la secuencia de booteo de solaris, no encuentra el /etc/shadow e inmediatamente me tira al shell de root (un bug de seguridad?, LOL), pero el sistema se monta en solo lectura. Así que no es que pueda hacer mucho, pero si puedo ejecutar los comandos necesarios para revivir la ALOM.

bash-3.00# pwd
/usr/platform/SUNW,Sun-Fire-V245/sbin
bash-3.00# ls
eeprom fruadm prtdiag scadm trapstat
bash-3.00#./scadm userpassword admin
contraseña: nonroot
ota es: nonroot
bash-3.00#

5. Solo nos queda probar, pasandonos al modo ALOM (#.) e ingresando la clave nonroot para el usuario admin. (Ojo, siempre despues del reset, la clave será nonroot :p)

Copyright 2007 Sun Microsystems, Inc. All rights reserved.
Use is subject to license terms.
Sun(tm) Advanced Lights Out Manager 1.6.6 (unknown)
Please login: admin
Please Enter password: *******
y>
y> help
Available commands
------------------
poweron [-c] {FRU}
poweroff [-y] [-f]
removefru [-y] {FRU}
reset [-y] [-x] [-c]
break [-y] [-c]
bootmode [normal|reset_nvram|diag|skip_
diag|bootscript="string"]
console [-f]
consolehistory [-b lines|-e lines|-v] [-g lines] [-p|boot|run]
dumpconfig [-t] -s -f
showlogs [-b lines|-e lines] [-g lines] [-v] [-p logtype[r|p]]
setlocator [on|off]
showlocator
showenvironment
setfru -c
showfru [-g lines] [-s|-d] [FRU]
showplatform [-v]
setkeyswitch [-y] [normal|stby|diag|locked]
showkeyswitch
showsc [-v] [param]
shownetwork [-v]
setsc [-r [y]] [param] [value]
ssh-keygen {-l|-r} -t {rsa|dsa}
restartssh [-y]
setupsc
showdate
setdate [[mmdd]HHMM | mmddHHMM[cc]yy][.SS]
resetsc [-y]
restoreconfig [-t] [-x] [-y] -s -f
flashupdate -s -f [-v]
setdefaults [-y] [-a]
useradd
userdel [-y]
usershow [username]
userpassword
userperm [c][u][a][r]
password
showusers [-g lines]
logout
help [command]
y>

Y listo!, ahora solo queda reparar o reinstalar el solaris. ;)

Salud!

domingo, 23 de agosto de 2009

Campus party valencia 2009

El evento campus party se realizó este año en la ciudad de las artes y las ciencias, un lugar muy bonito, guardando las proporciones es un parque explora + maloka, pero mas grande :p



Esta vez estuve apoyando nuevamente al equipo de tecnología de futura networks, apoyando el montaje y soporte de la red durante la semana de campus. Allí pude conversar con algunos desarrolladores de OSSIM (ahora Alien Vault), pude asistir a algunas conferencias y talleres, también conocer algunos proyectos interesantes de los campuseros españoles, etc.




Le dije a klondike y xisco (sí el del final del video es él) que lo saludaría en mi post, ya que nos estuvo apoyando durante toda la campus en algunas labores administrativas, esta persona se encargó de montar el servidor DC (nota: no hace parte de futura, ni de campus party, solo es un campusero aficionado :). Muchas gracias.



En la campus española se vive lo mismo que en una colombiana, solo que aún no hemos importado algunas cosas (esperemos que no lo hagamos). Como por ejemplo:



Un saludo para todos los del equipo de tecnología de campus party y para el resto de personas que hacen que este evento pueda ser una realidad (son muchisimas), esperemos que nos podamos seguir viendo por temporadas ;)


De la campus quedó mucho material audiovisual interesante, les dejo el link a continuación:
(vale la pena!)
http://www.youtube.com/view_play_list?p=DBE02456F86696E5

Algunos videos :

El Cosmonauta.es



Alien Vault.com



Libertad de Telefonica.org


sábado, 22 de agosto de 2009

How to PASS wargame CP 2009: BINARIES

Por fin!, última entrada de las soluciones a los retos de seguridad de la CP 2009 Valencia.

// RETO 1 //

Como se puede ver en la imagen, se da un enlace a un archivo .class, el cual lo podemos entender como un archivo compilado de java, así que este programa se podrá ejecutar con la maquina virtual de java, pero no tendremos acceso a su código fuente, o sí?

Lo primero que intentamos es usar strings para darnos una idea del software:

nonroot@plasma:/tmp$ strings OhHai.class
Me,
, I KILL YOU!!!
console
()Ljava/io/Console;
So ... WTF are you? ->
java/io/Console
readLine
9(Ljava/lang/String;ÄLjava/lang/Object;)Ljava/lang/String;
equals
(Ljava/lang/Object;)Z
Hoooray!! Your pass is "
args
ÄLjava/lang/String;
hidden
whoami
clue
line
SourceFile
OhHai.java
éN-+
Esto me da varias pistas, pero nada tangible, ejecutemos el software:

Uhmm, al parecer el programa espera algo que aún no sabemos. En este punto pensamos que estamos en los ejercicios de binarios, cracking o ingeniería inversa, como les quieras llamar. Entonces en la mayoría de los casos tendremos que decompilar, desensamblar y debugguear todo lo que se aparezca.

El procedimiento entonces es usar un desensamblador de archivos .class para tratar de conseguir los .java (código fuente). Después de reblujar todo Internet, concluimos que el mejor es este programa multiplataforma.

Como pueden ver, al abrir el archivo .class, obtenemos el archivo en código fuente tan limpio como si lo acabaran de programar ;)

Que hacemos entonces?, tenemos dos opciones:

1. Le hacemos un seguimiento al programa e intentamos entender lo que hace para así deducir que debemos ingresar en los parámetros de ejecución.

2. Buscamos las líneas donde se compare lo que ingresamos y lo que el programa calcula e imprimimos el resultado, para esto hay que volver a compilar el .java modificado ;).

Las últimas líneas del código me muestran un condicional de algo, que hacemos entonces?, pues quitamos el condicional y ensamblamos nuevamente.


sin el condicional el programa queda así:

De esta forma el programa imprimirá SI o SI, la respuesta ;)
Aquí vemos el resultado:


Conclusiones:

1. Cualquier cosa que se pueda compilar, se puede decompilar, cualquier ensamblador, tiene su desensamblador, ten esto presente.

2. Si eres programador de java y estas pensando que entonces tus .class son vulnerables, la verdad es que TAMBIÉN son vulnerables, la recomendación es que cuando programes validaciones (de lo que sea) no las metas dentro de los mismos ficheros compilados, porque alguien sabrá como sacarlas de allí. Existen suficientes recursos en Internet donde te enseñan un poco de seguridad en la programación en CUALQUIER LENGUAJE.

3. Este es un reto básico de ingeniería inversa, como siempre, si tenemos la herramienta adecuada y conocemos la ruta, no hay nada que hacer.

//FIN RETO 1//

Esto se puso bueno ...

// RETO 2 //
Al ingresar al servidor SSH (un linux), encontrábamos un fichero binario.
Este fichero binario al ejecutarlo me pedía un nombre y luego me decía:

root@plasma:/tmp# date
Fri Jul 31 22:45:05 COT 2009
root@plasma:/tmp# ./reto2
Por favor, dime tu nombre: nando
Lo siento nando No te dare el token hasta el 10-08-2009
root@plasma:/tmp#

Esto nos dice varias cosas:

1. Es un programa que tiene que ver con el tiempo (funciones de tiempo), también la imagen de la presentación del reto apoya esto.

2. El password seria mostrado si pasaba esa fecha.

Que podemos hacer entonces?, lo que primero se nos ocurre es intentar cambiar la fecha del sistema, pero obtenemos un mensaje:

Técnica no valida!!

Y si le cambiamos el nombre al programa:

Técnica no valida!!

Y si lo copiamos por ssh a otra maquina e intentamos ejecutarlo?

Técnica no valida!!

Y si intentamos abrirlo con gdb, el debugguer de linux?

Técnica no valida!!

Y si intentamos debuguearlo con la técnica ptrace?

Técnica no valida!!

Y si intentamos causarle un overflow en la entrada del nombre?
Y si le pasamos el comando string?
Y si nos retiramos del juego? :P


Después de probar unas cuantas técnicas, nos damos cuenta que el binario esta muy protegido y que lo mejor es NO moverlo del sistema, entonces como hacer para explotarlo?

Hacemos memoria y recordamos una vieja, pero efectiva técnica donde podemos hacer un mapeo en memoria de ciertas funciones y luego obligamos al programa objetivo a que use estas funciones en reemplazo de las originales de librerias .h.

Esta técnica se conoce como la de LD_PRELOAD, puedes ver un ejemplo aqui. Los ejemplos mas comunes en Internet son ataques a la función time(), que para nuestra suerte es la que esta usando este programa (o al menos eso creemos).

Entonces hay dos formas de atacar el programa:

1. la dificil, es hacer todo el procedimiento que equivale a programar una función time() ficticia, luego crear una libreria dinamica .so, luego exportar la variable LD_PRELOAD y luego ejecutar el programa.

2. Usar una herramienta que haga eso por nosotros :)

Seleccionamos la opción 2 (por pereza) y descargamos esta libreria la cual promete hacer todo lo que necesitamos. El modo de uso se encuentra en el sitio web, entonces solo tenemos que hacer un "make" y listo, a usarla.

¿Bonito no?, lo que hicimos fue hacer un FAKE de la rutina del tiempo para hacerle creer que estabamos 15 días mas adelante, pueden ver tambien que la fecha real del sistema no se altera, solamente se suplanta en tiempo de ejecución del programa objetivo ;)

Un aplauzo para libfaketime! (PLAP, PLAP, PLAP!)

Conclusiones:

1. Este nivel es un clásico del hacking ;). gracias.

2. Interesante conocer todas las protecciones que usaron para los binarios, para evitar desensamblados, debugging y otro monton de cosas que a uno se le pudieran ocurrir.

3. Al estar tan limitados en los aspectos de reversing con el ejecutable objetivo, no quedaba otro remedio que buscar la técnica que ellos estaban esperando.

4. Un muy buen reto, pero si quieres entender el ataque de LD_PRELOAD es mejor que te crees las librerías a mano y ensayes no solo con la time(), si no con la chown(), chmod() y cualquier otra que se te atraviese, explota, explota, explota!!!!.

// FIN RETO 2 //

I need medic, Requesting backup, I'm going for the bug ...

// RETO 3 //

Cuando entramos al servidor ssh (linux) para este nivel, encontramos un escenario similar al anterior, un binario, estamos dentro de un chroot de ssh, el binario tiene mil protecciones y bueno ...

¿Que hacemos entonces?

Después de intentar algunas cosas, buscar posibles ataques por format string, vemos que no es por ahí el asunto. Entonces debe ser un ataque clasico de overflow o no?

Para poder llevar a cabo un ataque de *overflow clásico, el sistema no debe tener randomizado el stack (sysctl kernel.randomize_va_space=0) y se deben haber deshabilitado las protecciones en el momento de compilación de la aplicación (gcc -fno-stack-protector). Vamos a suponer así es.

Podemos ver en los permisos que el binario tiene el bit suid:
nonroot@plasma:/tmp$ ls -la echo
-rwsr-xr-x 1 root root 9472 2000-08-22 09:44 echo
Entonces buscaremos atacar el software con un stack overflow, intentemos el viejo truco del perl.

Podemos ver que el programa se revienta después de 504 caracteres, eso nos da una pista para poderlo explotar. Se supone que unos cuantos bytes mas adelante podemos sobreescribir el EIP y apuntarlo a donde queramos.

Pongamos un shellcode en memoria e intentemos pegarle:


Con ese programa put.c (si el de aleph), podemos ubicar un shellcode en memoria, a esto se le conoce como huevo.

Con este otro programa find.c, podemos encontrar la dirección de memoria donde se encuentra el huevo, aqui vemos que nos retorna 0xbffff866.

Intentemos pegarle al shellcode:


!! EFECTIVO !!


Lo que hacemos es meterle 504 bytes al buffer y los 4 restantes que sobreescriben EIP son los bytes de la dirección en memoria de nuestro huevo. Para el ataque hay que tener en cuenta que se deben poner los bytes en orden inverso para que nuestro procesador los entienda correctamente.

Despues de explotar este binario lo que podiamos hacer era leer un fichero que tenia como propietario otro usuario (sin permisos de lectura para el jugador del reto = campus02) y listo, con eso pasabamos el nivel.

Conclusiones:

1. Un ejercicio de stackoverflow sencillo.

2. Creo que son las mismas protecciones usadas en el binario anterior, buena por esa!.

3. Los BOFs nunca pasaran de moda, siguen allí, ¿sigues programandolos? (alguien seguirá explotandolos)

//FIN RETO 3 //
Queda uno ...

// RETO 4 //

jueves, 20 de agosto de 2009

How to PASS wargame CP 2009: CRYPTO

Aquí va la tercera entrega de soluciones del wargame realizado en campus party valencia:


// RETO 1 //


Al seguir el enlace llamado Bases, nos descargamos un PDF que tiene las bases del concurso. ¿Que hacemos entonces?

1. Podemos buscar en el código fuente del sitio, mirar posibles scripts, etc, pero no vemos nada.

2. El enunciado dice que "en las nuestras hay un par de sorpresas", eso dice algo como que en las reglas hay un par de cosas que nos interesan, pero si leemos las reglas del archivo pdf y las comparamos con las reglas del archivo de presentación del wargame, vemos que son las mismas.
Y no hay nada raro en ellas.

3. Abandonamos el juego !

4. Tengo una teoría sobre los wargames, cada vez que se monta uno, los creadores intentaran hacer niveles que se relacionen con ellos de alguna forma, con sus blogs, con sus herramientas, con sus investigaciones, de todas formas algo que se busca publicando un reto es que se conozca mas acerca de quien lo esta realizando y sobre las cosas que tiene para mostrar ;)

Así que siguiendo esto nos vamos a buscar las palabras pdf, mezcladas con security by default. Lo hacemos de esta forma:

El primer documento que aparece es una entrada de hace algún tiempo donde nos hablan de un modulo de perl muy interesante, será esto lo que hicieron?, A que si!.
La forma mas fácil de tenerlo es bajando el fuente, lo descomprimimos, le damos

root@plasma:/tmp/Fuse-PDF-0.09# perl Makefile.PL
y luego

root@plasma:/tmp/Fuse-PDF-0.09# make

y listo, ahora lo usamos con nuestro pdf.

Fácil no?, si conoces la herramienta y sabes como hacerlo, todo es tan fácil :p

Si quieres saber mas sobre el filesystem que se usa para montar temporalmente el PDF, entonces lee por aquí.


Conclusiones:

1. Referenciate siempre en lo que quieren los creadores del wargame, ya lo tienes claro?

2. Casi todo wargame se orienta a usar una herramienta o explotar una vulnerabilidad, debes tener presente toda la gama de posibles herramientas y de ataques para saber cual seleccionar en el momento adecuado, desafortunadamente no hay un truco para eso, creo que todos los que hayamos jugado en muchos wargames (desde hackerzone ...), coincidimos en que esto se le conoce como:
EXPERIENCIA

Y la única forma de obtener esa experiencia es jugando!, tal cual como en los videojuegos :p

-x* Odio a los que me matan jugando UT :( -x*

3. No conocía este paquete de perl, me parece muy interesante, leeré mas sobre este.

// FIN RETO 1 //

vamola, vamola ...

// RETO 2 //

Así comienza el ejercicio, sin muchas palabras, solo un MD5 muy evidente.

Del código fuente de la página vemos que el fondo es una simple imagen que se repite, además encontramos el MD5 en texto plano.

Intentamos romper el MD5?
Ignoreme!

Ok sigamos, concentremonos en la imagen.

Este recuadro y los cuadritos en las esquinas me hacen pensar que esta imagen es un código QR, si quieres crear códigos QR puedes entrar en este sitio. ¿Que hacemos entonces?, podemos buscar una lista de posibles lectores QR, pero la mas efectiva es bajarse este código opensource que se compila muy fácil.

Vemos que el decodificador QR nos entrega un texto que parece ser base64 , si lo descodificamos obtenemos otro texto que parece tener párrafos y que además usa puntuación, lo que me hace pensar que el texto sigue cifrado con algún tipo de corrimiento o sustitución.

Para analizar el texto podemos hacerlo a fuerza bruta o usar una excelente herramienta de criptografía que nos permite estudiar un poco sobre el tema, analizar textos y usar los algoritmos mas comunes de cifrado simétrico y asimétrico.

Con esta herramienta podemos intentar hacer un análisis de sustitución y nos dirá que el texto esta en ingles e intentará crear un mapa de sustitución que es bastante acertado, luego a mano podremos cambiar los caracteres restantes hasta obtener el texto completo.

Luego este texto lo podemos buscar en Internet y adivinen que encontraremos?, la referencia a un post de SBD donde hablan de un método de captcha muy popular en esos días.

La solución entonces era el titulo de dicho post, que buen reto !

Conclusiones:

1. La verdad es que descifrar texto no es una tarea muy simple, pero si contamos con las herramientas indicadas nos ahorraremos mucho tiempo.

2. Debes tener una novia al lado (o conectada) para que te inspire a la hora de resolver estos ejercicios, thx triz :P

3. Hay que leer mas sobre QR, al parecer por estos lados aún no es un tema común, revisen el listado que les dejé para que estudien también!

// FIN RETO 2 //

aquí vamos otra vez ...

// RETO 3 //

Al seguir el link ...


Este nivel aún no se como se pasa, tengo la teoría, lo que esta en el twitter son textos en base64, si los descodificamos tenemos mensajes cifrados en RC4, que se supone que hay que hacer entonces?, un ataque de fuerza bruta (otra vez :( ) contra el mensaje hasta que rompamos la clave con la que fue cifrado. En las pistas que nos dan los creadores del reto, dice que se rompe con una palabra que esta en su sitio web ...

Ni idea de como pasar este nivel, alguien se anima?

El link donde están los textos cifrados es este: http://twitter.com/Ninja_Assasin.

Conclusiones:

1. Odio la fuerza bruta !!!

2. Odio la fuerza bruta !!!

3. La criptografía fuerte es fuerza bruta, la odio !!!

Update (24 de agosto): vierito5, me cuenta que la palabra que le hace falta a mi diccionario es "wargames", no puedo creer que no se me ocurriera. En el dicionario sacado del sitio, tenia la palabra "wargame", todo por una s, lol.

Lo que habia hecho era programar un bruteforce para RC4, lo probe con la palabra y funcionó:


Con eso queda resuelto el reto, gracias vierito5 ;)

// FIN RETO 3 //

un suspiro y seguimos ...
// RETO 4 //


En este reto nos preguntan si tenemos el certificado del campurriano, y recordamos que en el primer reto encontramos un archivo llamado ficticio.p12, esa extensión al igual que esta, nos habla de un estándar PKCS el cual nos permite definir un container con información privada y protegido con una clave simétrica. La clave simétrica se usa para proteger el acceso a los certificados digitales del usuario.

Estos archivos los podemos pasar a diferentes aplicaciones como navegadores y dispositivos que requieran acceso a sistemas protegidos comúnmente por SSL.

En el escenario de este reto, tenemos un servidor web apache, configurado con certificados digitales autofirmados y el reto entonces consiste en encontrar la clave que me permite abrir el container .p12 para sacar los certificados digitales del usuario y poderlos agregar a un navegador para que el servidor web me permita acceder al contenido que protege.

En resumen, crackear el certificado .p12.

Para hacer esto debemos tener el archivo .p12 (ya lo tenemos), debemos tener un software de crackeo y además un diccionario que funcione (fuerza bruta otra vez).

En el web site de sbd recomiendan usar una herramienta llamada brute12, pero la verdad la probé en linux emulada con wine y en windows de todas las formas posibles y no funciona. Si quieres crearte tus propios archivos .p12 para hacer pruebas, puedes seguir la documentación que aparece en este link.

La forma de pasar este nivel ya explicada se basa en un diccionario mágico generado de la página de campus con el que se puede hacer lo siguiente:

1. Crear un mini script que invoque directamente a openssl y le pase como parámetro una posible clave de una lista y trate de abrir el archivo .p12, si la clave es correcta entonces el script parará y me pedira la clave con la que quiero exportar el certificado .pem.

root@plasma:~/ssl# cat script
for i in `cat dict.txt`
do
echo $i
openssl pkcs12 -in $1 -passin pass:$i -out nando.pem
done
root@plasma:~/ssl#
2. Ejecutarlo y esperar la respuesta:
root@plasma:~/ssl# sh script ficticio.p12
Esta
Mac verify error: invalid password?
es
Mac verify error: invalid password?
la
Mac verify error: invalid password?
versión
Mac verify error: invalid password?
html
Mac verify error: invalid password?
del
...
hubiesen
Mac verify error: invalid password?
finalizado
MAC verified OK
Enter PEM pass phrase:
En el punto donde se detiene el script leemos la clave correcta con la que se abre el container.
Esta forma funciona si no conseguimos un cracker de archivos .p12, pero Lorenzo Martinez muy amablemente creó una herramienta de crackeo llamada brute12unx, basada en brute12, que funciona muy bien. Esta herramienta es un sencillo script en perl que lee palabras de un diccionario y ataca la apertura del archivo en cuestión.

Un ejemplo? :
root@plasma:~/ssl# perl brute12unx.pl -p ficticio.p12 -d dict.txt
Certificate Cracker PKCS12 for UNIX 03/08/2009 (http://www.lorenzomartinez.es/projs/brute12unx)
By Lorenzo Martinez (lorenzo@lorenzomartinez.es)
Based on idea: brute12 (http://www.security-projects.com/?Brute12)
Password is: finalizado
Start time: 2009-08-21 16:25:09
End time: 2009-08-21 16:25:13
Abriendo este container ya podiamos cargar los certificados digitales en el navegador y el servidor web objetivo nos dejaria entrar, que encontrariamos?, segun dicen los amigos de sbd una imagen a la cual habia que pasarle un software de esteganografía para sacar otra imagen que tenia la clave, no tengo la imagen, pero si usan por ejemplo la herramienta openstego podran evidenciar lo fácil que es esconder imagenes, musica, etc, dentro de otras imagenes, musica, etc . Si hace una busqueda en los repositorios de los sistemas linux, podran encontrar otras tantas herramientas.
root@plasma:~# apt-cache search stegano
outguess - Universal Steganographic tool
python-stepic - Python Steganography in Images
samhain - Data integrity and host intrusion alert system
snowdrop - plain text watermarking and watermark recovery
steghide - A steganography hiding tool
root@plasma:~#
Conclusiones:

1. Este era un ejercicio interesante, sin embargo ya teniamos todo lo que necesitabamos excepto por supuesto el diccionario correcto. Todos estos ejercicios se volvieron de fuerza bruta, si tienes el archivo y tienes la herramienta, solo basta conseguir el diccionario adecuado y tener mucha paciencia. En fin, tendré que mejorar mi capacidad de deducción referente a que diccionarios usar :P

2. Cuando NO hay herramientas de crackeo automatizadas, siempre podras usar las herramientas que se usan en un sistema de forma convencional, sin embargo los tiempos de crackeo van a ser muy diferentes y en la mayoria de los casos sera un proceso mas lento. Lo ideal es programar las herramientas de crackeo en lenguajes muy rápidos (como C o ensamblador) y obviamente para eso vas a necesitar un set de librerias con los estandares y protocolos que quieras atacar, pero creo que todo esta casi hecho y si no, a programar!!!

Un ejemplo de los tiempos de mi script vs el brute12unx:

El script:
Mac verify error: invalid password?
finalizado
MAC verified OK
Enter PEM pass phrase:
real 0m10.651s
user 0m8.169s
sys 0m1.880s
brute12unx:
Password is: finalizado
Start time: 2009-08-21 16:38:13
End time: 2009-08-21 16:38:17

real 0m3.575s
user 0m3.544s
sys 0m0.028s
Esto lo calculé con el comando time de un sistema linux.

3. Puedes jugar con openssl y hacer muchas cosas mas que intentar crackear archivos .p12 :P


// FIN RETO 4 //


miércoles, 19 de agosto de 2009

How to PASS wargame CP 2009: WEB SECURITY

Hola a todos!, continuamos con las soluciones de los niveles relacionados con el tema de seguridad en web.

// RETO 1 //

Cuando le hacemos click en el link de login obtenemos:


Vemos un sistema de autenticación normal, usuario y clave, sin embargo mas abajo tenemos un link de recuperar contraseña. De la experiencia y visitando uno que otro sistema, me he dado cuenta que aveces los desarrolladores ponen mucho énfasis en proteger sus sistemas de autenticación, pero se descuidan con los sistemas secundarios, como los recuperadores de contraseñas, inscripción de usuarios y cosas así. La seguridad tendría que abarcar cada posible entrada de usuario.

Cual atacarías primero?, la entrada principal o el sistema de recuperación de contraseñas?.

Nos hacen una pregunta personal del usuario, así que debemos conocer un poco mas del usuario para poder tener esos datos. Que tal si lo buscamos en google?

En google no vemos nada, en otros buscadores tampoco, intentamos visualizar el sitio, pero no hay nada, intentamos pruebas básicas de sql injection y nada ...

Bueno, después de pensarlo con mas calma leemos nuevamente y nos dicen que este sujeto usa mucho las redes sociales, así que tendrá que ser un usuario activo de tuenti, facebook, twitter, identi.ca, etc, etc. Lo que hacemos entonces es buscar su nombre de usuario en cada una de estas redes y adivinen donde lo encontramos?

En los microposts podemos leer la respuesta a la pregunta secreta: R5CopaTurbo.

Y con esta clave obtenemos la contraseña del usuario que nos esta pidiendo el nivel

Y listo, pasamos el nivel!, fácil eh?, como siempre!, después de hacerlo se da uno cuenta que era hasta fácil, pero la verdad perdí mucho tiempo buscando al campurriano!!!!

Conclusiones:

1. Un nivel bueno para ser el primero de esta serie.

2. La moraleja es: ¿ Que tantas cosas dices en tus blogs, wikis y redes sociales?, ¿Que tanto "material" hay disponible sobre tí para perfilar un ataque a un recordatorio de contraseñas?.

3. ¿Se asustó?, go and chage it!

4. Un sitio de busqueda de nicks registrados en diferentes servicios muy interesante.


// FIN RETO 1 //

Vamos ...

// RETO 2 //

Vemos otro sistema de autenticación ...


Intentamos usuarios y claves al azar y no pasa nada, luego observamos el código fuente y descubrimos que hay un archivo llamado login.swf.

Debes concluir al igual que yo, que el sistema de validación lo hace un archivo de flash. :p

Que hacemos entonces?

Lo primero es descargar el archivo y lo segundo tratar de abrirlo (desemsamblarlo) para ver que tiene por dentro.

root@plasma:~/Desktop# apt-cache search flasm
flasm - assembler and disassembler for Flash (SWF) bytecode
root@plasma:~/Desktop# apt-get install flasm
Reading package lists... Done
Building dependency tree
Reading state information... Done
Desensamblamos y leemos la salida:

root@plasma:~/Desktop# flasm -d login.swf > salida
Leyendo el desensamblado que es una locura, encontramos en las primeras líneas referencias a MD5.
frame 0
constants 'str', '', 'j', 'hex_chr', 'charAt', 'nblk', 'length', 'blks', 'Array', 'i', 'charCodeAt', 'addme', 'rol', 'bitAND', 'bitOR', 'cmn', 'bitXOR', 'x', 'str2blks_MD5', 'a',$
function2 bitOR (r:4='a', r:3='b') ()
Esto me hace pensar que el archivo puede tener una validación donde la contraseña este almacenada en MD5. Entonces la buscamos en el archivo completo (strings -32 salida).

De esa forma encontramos algo que parece un MD5, y como lo crackeamos?, lo primero es intentar con los sitios de crackeo online: 9f29db7287469c5f9520a1f8ddf946f2

  • http://passcracking.com/
  • http://www.md5crack.com/

Y bueno, encontramos la clave perdida. Y cual es el usuario?, pues como en el enunciado nos dicen que campurriano es el administrador, entonces pruebo con el usuario campurriano y con el usuario admin y sus combinaciones. Ahí termina el nivel ;)

Conclusiones:
1. Deben existir mejores herramientas de desensamblado en .swf, pero flasm fue lo primero que vi.

2. Si deseas asegurar una aplicación programada en flash, entonces usa criptografía fuerte, de modo que no sea vulnerable a desensamblados.

3. Los crackeadores de passwords online son la primera opción a usar cuando requerimos algo rápido. Si pagas por una subscripción seguro que rompes lo que sea :p

// FIN RETO 2 //

go ahead!

// RETO 3 //

De nuevo ...

El código fuente de la página luce muy simple, que hacemos?

Después de desesperarnos un poco podemos plantear diferentes vectores de ataque:

1. hacer fuerza bruta tratando de encontrar archivos o directorios mal ubicado
2. hacer fuzzing para tratar de descubrir problemas en los scripts o en el sitio en general
3. pedir auxilio en el foro, en listas, leer sobre vulnerabilidades web, etc.
4. abandonar el reto :p

Lo que yo hice fue continuar probando posibles entradas maliciosas, hasta que con el símbolo ", saco un error.

El error dice algo acerca de XML y estamos hablando de seguridad en WEB, por lo que me oriento a pensar en un problema de XPATH Injection, la cual esta clasificada como una vulnerabilidad web hace mucho tiempo al igual que los SQL Injection y derivados.

Con esta ruta clara, buscamos información de como inyectarle algo para que nos deje validar.
Podemos intentar algo como:

usuario: xxx" or "1"="1
password: xxx" or "1"="1
Esto efectivamente nos deja pasar y entramos a "un sistema de blogs?" algo simple.

Sigo explorando por todos lados y encuentro algunos scripts de php (ensenia.php, postz.php), pero no logro encontrar cual es la respuesta, será que tengo que inyectar xpath para sacar mas información?, pero ya entre al sistema, para que quiero inyectar mas ...

En fin, después de buscar mucho por ese lado y de leer un poco sobre simplexml (producto del error) decido inventar nombres y rutas a donde se encuentren posibles archivos xml.

  • scripts/
  • archivos/
  • files/
  • includes/
  • xml/
  • bd/
  • inc/
De todas estas pruebas me llevo una sorpresa, el directorio xml responde con l siguiente:

El mensaje de advertencia deja mucho que pensar, es una autenticación básica de apache y me esta diciendo que por allí no es, será?. Obviamente intento unas cuantas claves pero no funcionan, en este punto uno puede pensar en un ataque de fuerza bruta contra un sistema de autenticación básica. Bueno, ve a por el!.



El mismo problema de siempre cuando hacemos ataques de fuerza bruta, el tiempo, el tiempo.
Aunque hay un problema mucho peor, no tener afinadas las herramientas. ¿Confias en que tus herramientas realmente hacen lo que dicen?, funcionan?, me he encontrado con herramientas que dan muchos falsos positivos y otras aún peor que bajo mucho stress no se comportan adecuadamente, tengan mucho cuidado con eso ...

Bueno ya empece a desesperarme, busquemos en otros niveles, alguna pista algo interesante ...

Mirando otros niveles me puedo dar cuenta que es necesario conectarse a un servidor ssh, allí me dan el usuario y la clave para conectarme.

usuario: campus01, clave: blah
usuario: campus02, clave: blahz

Uhmm esa clave porque?, sera de blah, blah, blah (cuando una persona habla mucho?), lo que hago entonces es buscar esa palabra en la lista de palabras que tengo llamada all, que en un post anterior dije de donde bajarla.

De la búsqueda encuentro palabras como:
root@plasma:/tmp# grep blah all
bablah
blah
blahlaut
blah
...
Lo que hago es empezar a probar usuarios y claves "custom", pruebo con nombres como: Campu_rriano, admin, administrador, sbd, campus, campus01, campus02, campusxx, mezclandolos con claves con estas claves: blah, blahz, blahs, blashy, etc.

Al tener un diccionario custom, puedo usar una herramienta de fuerza bruta probada y recontraprobada o si tengo mucho tiempo, lo hago a mano!.

Al final y con mucha suerte logro encontrar que la combinación:

usuario: blah
clave: blah

!FUNCIONA!

Pero bueno, al entrar no encuentro nada, es simplemente una página web vacía que no tiene código oculto ni nada, y entonces?.

De aquí podemos analizar varias cosas:

1. Quizás sea un despiste (honeypot :p) para que creamos que hay algo importante en este directorio, así que estaríamos perdiendo las horas de pruebas que hemos realizado hasta el momento.

2. Puede ser que se aseguraron de proteger el directorio porque hay archivos importantes que no estan listados, pero que existen, esto es muy probable.

Que hacemos entonces?, nuevamente empezamos a probar nombres y posibles rutas, que tal si probamos con archivos .inc, .php, .xml, .css ??

Basandonos en los nombres de los scripts que hemos visto, en la salida de los .css que hemos encontrado, después de intentar un buen rato encontramos que hay un archivo llamado posts.xml, ese archivo al ser .xml se visualiza como un archivo de texto plano en el navegador
y puedo observar su contenido:


En el comentario estaba la clave que me pasaría de nivel y listo, después de mucha fuerza bruta y de reintentar y reintentar pudimos encontrar la clave correcta.

Conclusiones:

1. Es importante que piensen que en un wargame debemos usar herramientas que realmente sepamos lo que hacen, que estén comprobadas y que las hayamos afinado para lo que vayamos a realizar. Para esto es clave primero hacer unos "pilotos de ataque", para comprobar su efectividad. de lo contrario nos harán perder el doble del tiempo, ademas de hacernos abandonar la ruta correcta.

2. Los ejercicios de fuerza bruta son desesperantes.

3. Yo creo que el nivel lo pase de una forma que no era, porque encontrar a fuerza bruta la autenticación blah, blah, me permitió pasar también una parte del próximo nivel y leyendo la explicación de la gente de sbd, no creo que el asunto fuera por este lado, pero vale no?

4. Si esta no era la ruta que ellos esperaban, entonces como se supone que podía leer un archivo .xml, inyectando con xpath?, si alguien tiene la solución por favor que la publique.
(update 1 - 20 agosto/2009) Listo ya la tengo, supuestamente usando este tool.

5. Estuvo muy interesante este nivel. thx sbd.

// FIN RETO 3 //

Y para finalizar ...
// RETO 4 //

Lo primero con lo que nos encontramos es con un sistema de validación, otra vez, pero como dije antes, adivinen cual es el usuario y la clave? (blah:blah)

Una vez adentro leemos otra historia mas acerca de Campu_rriano y seguimos el link que nos indican:

De este error podemos ver que el sistema esta esperando que ingresemos un parámetro id, en el script login.php. Al hacer algunas pruebas cambiando el valor del id, nos damos cuenta que el ejercicio posiblemente es de sql injection puesto que obtengo resultados diferentes a medida que cambio parámetros o uso la instrucción SELECT, UNION, etc.

El sistema por defecto muestra un nombre y un usuario, pero suponemos que en las tablas de "mysql?" debe haber un campo de password, pero que el script login.php no lo muestra porque solo saca las posiciones de usuario y nombre. Como le hacemos cambiar de parecer?

Pues lo obligamos a que nos muestre el otro campo haciendo un SELECT incorrecto que no retorne nada y haciendo un UNION que retorne lo que quiero:

id=400' UNION SELECT 1,2

Así en vez de mostrarnos el nombre y el usuario, nos mostraria el usuario y el password, realmente nada raro, solo un ataque de sql injection y volviendo a leer el enunciado entonces nos damos cuenta que es un ataque de sql injection a ciegas ;), posiblemente el bug se encuentre con una herramienta automatizada, pero no vale la pena usarla, ya que el mismo reto nos dice cual es la variable a inyectar. El password mostrado nos dejaba pasar el nivel.

Conclusiones:

1. Un reto fácil porque ya tenia el usuario de la autenticación básica.

2. SQL injection siempre estará de moda en los wargames, hasta que aparezca algo mas entretenido.

3. No me toco cambiar todas las peticiones GET por PUT o algo similar, puesto que me autentique correctamente en el formulario, esto fue una ventaja, ademas me ahorro la ruta de ir a configurar un proxy para que cambiara el método de petición.

4. Nos leemos en la proxyma entrada. Comentarios / Sugerencias, en el link de abajo :p

// FIN RETO 4 //

Entradas populares