Trong bài này, mình sẽ hướng dẫn từng bước cho các bạn, tức là từ việc tải firmware mẫu và sau đó phân tích nó để tìm câu trả lời. Bạn có thể cùng theo dõi và trả lời câu hỏi tại đây.
Tham gia kênh Telegram của AnonyViet 👉 Link 👈 |
Chuẩn bị
Điều đầu tiên và quan trọng nhất là tìm một router firmware cần được phân tích. Trong trường hợp này, chúng ta đã được cung cấp mục tiêu nên mình sẽ tải firmware về máy Linux.
Chúng ta cần tải firmware V2 của Linksys WRT1900ACS. Bạn có thể tải firmware này tại đây.
Sau khi tải xuống, bạn có thể chạy lệnh ‘file’ để tìm kiếm các thông tin cơ bản của tệp.
Chúng ta có thể thấy rằng đây là ‘u-boot legacy uImage’ và là firmware của Router Linksys WRT1900ACS dựa trên Linux/ARM.
Bây giờ chúng ta đã hoàn tất việc thu thập thông tin cơ bản vào giai đoạn chuẩn bị – Cho phép. điều tra phần sụn.
Bắt đầu điều tra
Một công cụ quan trọng ở đây là lệnh ‘string’. Nó cung cấp cho chúng ta tất cả thông tin chuỗi cơ bản (được công nhận bằng tiếng Anh) mà nó có thể tìm thấy trong mã nhị phân của tệp. Chạy lệnh và xem những gì chúng ta có thể tìm thấy nào.
Có một số lượng cực lớn các chuỗi được tìm thấy ở đây, bạn cần lưu chúng vào một tệp văn bản để phân tích dễ dàng hơn.
Sử dụng lệnh less để xem vài dòng đầu tiên của file.
Dòng đầu tiên cần được chú ý vì nó cung cấp cho chúng ta thông tin về firmware này và router mà nó được tạo ra. Bây giờ chúng ta sẽ tìm hệ điều hành. Chúng ta có thể in toàn bộ tệp và tìm kiếm bằng lệnh ‘grep’.
Dựa vào kết quả trên thì chúng ta chắc chắn là hệ điều hành Linux. Chúng ta có thể thấy trong ảnh ở trên có một số thư mục được liệt kê.
Bây giờ chúng ta đã có một cái nhìn tổng quan. Chúng ta cần giải nén firmware. Để giải nén firmware, mình sẽ sử dụng “BinWalk”.
Chúng ta gặp lỗi và binwalk không thể giải nén file system. Điều này là do binwalk không hỗ trợ JFFS2. Đầu tiên chúng ta cần thiết lập nó. Thực hiện những lệnh sau:
sudo pip install cstruct git clone https://github.com/sviehb/jefferson cd jefferson python setup.py install
Sau khi cài đặt thành công, hãy chạy lại binwalk và bây giờ chúng ta có thể thấy rằng binwalk đã xác định file system là JFFS2.
Bây giờ chúng ta có rất nhiều thông tin liên quan đến firmware. Kích thước tiêu đề, kích thước hình ảnh, kiểm tra CRC, ngày tạo gần đây nhất, chi tiết hệ điều hành, CPU mà nó chạy trên đó,…
Binwalk tạo một thư mục riêng cho dữ liệu mà nó trích xuất.
Chúng ta có thể thấy rằng có một tệp hiển thị filesystem JFFS2 và tệp kia là tệp gzip. Chạy tệp sẽ xuất ra 6870 và không có dữ liệu nào khác. Điều này có nghĩa là binwalk đã hiểu sai dữ liệu, chúng ta có thể chạy lại binwalk trên tệp để tìm kiếm các khả năng khác để thử và trích xuất dữ liệu theo đúng định dạng.
Chúng ta có thể thấy rằng tệp này chứa một bản sao của một nhân Linux thực; binwalk cũng cho chúng ta thấy phiên bản mà kernel này hoạt động. Chúng ta cũng có thể thấy một số dữ liệu nén LZMA và một số dữ liệu lưu trữ cpio.
Bước tiếp theo là mounting firmaware để phân tích kỹ hơn phần này.
Mounting
Đầu tiên, chúng ta cần tạo một “Block Device”. Nó có thể được thực hiện bằng cách sử dụng lệnh:
mknod /dev/mtdblock0 b 31 0
Sau đó, chúng ta cần tạo một thư mục để đẩy filesystem của mình đến đó bằng lệnh:
mkdir /mnt/jffs2_file/
Firmware yêu cầu một số mô-đun kernel. Vì vậy, chúng ta cần tải tất cả chúng để đảm bảo rằng filesystem được hoạt động tốt. Bạn có thể sử dụng các lệnh sau:
modprobe jffs2
modprobe mtdram
modprobe mtdblock
Bây giờ chúng ta cần ghi image vào “Block Device” và nó có thể được thực hiện bằng lệnh:
dd if=/root/Router/600000.jffs2 of=/dev/mtdblock0
Tiếp theo, chúng ta cần mount filesystem bằng lệnh:
mount -t jffs2 /dev/mtdblock0 /mnt/jffs2_file/
Cuối cùng, chúng ta sẽ truy cập vào filesystem được mount bằng lệnh:
cd /mnt/jffs2_file/
Sau khi tất cả hoàn thành, thực hiện lệnh ls để hiển thị các thư mục. Chúng ta vừa mount firmware này vào local :v.
Khi liệt kê tất cả các tệp, chúng ta có thể thấy rằng một số tệp đang được liên kết tượng trưng với các vị trí khác. Về bản chất, một số tệp có ‘shortcuts’ đến những tệp khác ở nơi khác trên file system.
Ngoài ra, chúng ta có thể thấy rằng có ba thư mục mẹ được liên kết với thư mục /tmp/. Chúng ta cũng có thể thấy thư mục /www/, đây là nơi dữ liệu ứng dụng web sẽ được lưu trữ.
Hãy xem trong thư mục bin:
Chúng ta có thể thấy rằng cơ sở dữ liệu là “sqlite3”.
Bây giờ chúng ta hãy xem những gì bên trong thư mục etc.
Có rất nhiều tệp cấu hình ở đây, cùng với rất nhiều dữ liệu. Hãy xem qua tệp thebuilddate. Mình tự hỏi tệp này có thể làm gì ???
Ở đây cũng có các khóa RSA và chúng ta có thể thấy rằng máy chủ SSH đang được sử dụng ở đây là “dropbear”.
Thú vị thật, có những dữ liệu của máy chủ trung gian cũng được hiển thị ở đây. Kiểm tra thêm cho thấy đây là của Cisco.
Hãy xem các file service khác để biết càng nhiều thông tin liên quan đến các giao thức được sử dụng và số cổng được chỉ định của chúng.
Có một tệp khác được gọi là “system_defaults” chứa tất cả các cài đặt mặc định cho router.
Có một tệp chứa phiên bản firmware.
Có một thư mục tên là JNAP chứa các tập lệnh lua. Các tập lệnh này được sử dụng để điều khiển mạng.
Đây là bản tóm tắt rất nhanh về phân tích firmware của router. Ngoài ra, bạn cũng có thể xem thêm các phòng để tập hack trên tryhackme tại đây.
có cách upload shell hay backdoor vô router ko ad?