Tình cờ vào 1 ngày đầu đông, tôi nhận được lời mời vô cùng thú vị từ đồng nghiệp “hack con cam này cho a, 10 cốc chè nhé!”.
Và với 1 người ham hố ăn vặt như mình đây thì ko thể từ chối, dù sao cũng khá lâu rồi từ ngày blog này lên sóng mà chưa có bài kỹ thuật nào của mình!
Con camera này được 1 bạn thực tập chỗ tôi mang lên cho ae chọc ngoáy, được đặt mua từ taobao.com.
Mình có loay hoay hơn nửa ngày mà ko biết nhãn mác nó thuộc nhà sản xuất nào nữa ?!
Chỉ biết nó sử dụng app tên là “LiveYes” để control (https://play.google.com/store/apps/details?id=com.mgis.viewer&hl=en).
Kết nối nó vào mạng LAN và scan port 1 vòng thì có kết quả như sau:
Discovered open port 23/tcp on 192.168.137.109
Discovered open port 80/tcp on 192.168.137.109
Discovered open port 6688/tcp on 192.168.137.109
Discovered open port 1300/tcp on 192.168.137.109
Discovered open port 843/tcp on 192.168.137.109
Discovered open port 6980/tcp on 192.168.137.109
Discovered open port 9369/tcp on 192.168.137.109
Discovered open port 1234/tcp on 192.168.137.109
Discovered open port 8699/tcp on 192.168.137.109
Discovered open port 8554/tcp on 192.168.137.109
Ngoài port 23 và 80 ra thì có khá là nhiều port lạ, ko rõ được dùng vào chức năng gì nữa.
Do không biết nhà sản xuất là bên nào nên không thể tìm đc firmware gốc của camera này, mình đã nghĩ đến trường hợp bóc ra để dump firmware từ chip.
Chỉ có điều ko phải đồ của mình nên cũng hơi ngại, đành tìm cách khác thay thế vậy.
Sau đó mình chuyển hướng qua phân tích cái app LiveYes kia xem có dấu vết gì không.
Lòng vòng 1 lúc rồi cũng đã thấy thứ cần thấy, upgrade url của dòng camera này:
“https://update.ichano.cn/avsversion/%s/%s/AvsVersion.html”
Và tiếp tục lần mò bla bla, cuối cùng cũng đã có được firmware:
“https://update.ichano.cn/avsversion/yangge/AJ0186/Flash.img”
Như những thao tác đối với việc phân tích firmware thông thường, đầu tiên là thử binwalk xem file có gì nào:
Tách hết những file có thể tách trong file này bằng cách dùng “binwalk -e Flash.img”, file extract được lưu vào folder “_Flash.img.extracted”
Ta được những file như sau:
Như trong hình có thể thấy, những filesystem cần quan tâm là:
- 350000.jffs2
- 3D0000.cramfs
Đối với file jffs2 thì đã được extract ra tại folder “jffs2-root”, còn file cramfs thì mình ko hiểu tại sao binwalk không auto extract fs dùm:
Thôi thì đành tự mount file và extract ra vậy,
Kiểm tra file cramfs:
Mount file với kiểu fs “cramfs”:
Việc cần làm bây giờ là đọc code của đống này và tìm lỗi hoai ~~.
.
.
Sau khi lòng vòng tầm 15p, mình nhận ra có gì sai sai.
Đây không phải là filesystem của linux, có quá nhiều thứ bị thiếu, ex: /etc, /usr …
Vậy thì nó đâu rồi?
Xem xét lại đống file vừa được binwalk extract, có 1 file mà mình chưa động tới:
binwalk thử file này:
Và phát hiện ra đây mới chính là rootfs của thiết bị.
Sử dụng binwalk để extract rootfs ra:
File rootfs.cpio chính là rootfs của thiết bị:
Extract file này ra cũng đơn giản thôi:
Và ta đã có được rootfs hoàn chỉnh:
Việc tiếp theo là RE các service của thiết bị và tìm lỗi để khai thác.
Do hơi dài dòng nên mình sẽ viết tiếp vào phần sau của bài này!
Cảm ơn các bạn đã theo dõi!
p/s: thực ra là author bận về đi học 🙁
Trung tâm An toàn thông tin