Hình ảnh JPEG được biểu diễn dưới dạng một chuỗi các phân đoạn trong đó mỗi phân đoạn bắt đầu bằng header. Mỗi header bắt đầu bằng một số byte. Payload theo header là khác nhau tùy theo loại header. Các loại điểm đánh dấu JPEG phổ biến như được liệt kê bên dưới:

0xffd8: “Start of Image”,
0xffe0: “Application Default Header”,
0xffdb: “Quantization Table”,
0xffc0: “Start of Frame”,
0xffc4: “Define Huffman Table”,
0xffda: “Start of Scan”,
0xffd9: “End of Image”

Mỗi tệp nhị phân chứa một vài header. Chúng rất quan trọng đối với tệp vì chúng xác định thông tin cụ thể của tệp. Hầu hết các header được theo sau bởi thông tin độ dài. Điều này cho chúng ta biết phân đoạn cụ thể đó dài bao nhiêu.

Phần đầu của header hình ảnh chứa FF D8. Nếu chúng ta không nhìn thấy nó, chúng ta có thể cho rằng đây là một tệp khác. Một điểm đánh dấu quan trọng khác là FF D9 cho biết phần cuối của hình ảnh.

Để làm cho payload trông giống như một tệp JPEG hợp pháp, chúng ta sẽ thêm độ dài của header, header nhận xét, các byte rỗng vào pad và sau đó là vectơ tấn công javascript.

Giả sử vectơ tấn công là một lỗ hổng XSS */=alert(“XSS”)/* Chuyển nó thành hệ thập lục phân sẽ như thế này.

Payload trong hex:


2A 2F 3D 61 6C 65 72 74 28 22 58 53 53 2E 22 29

Chúng ta có thể sử dụng một trình soạn thảo hex để đưa javascript vào metadata của hình ảnh. Điều này hoạt động được vì các trình duyệt diễn giải code khi chúng hiển thị hình ảnh thành HTML.

Mình đã nhận được một image test.jpg và dưới đây là hexdump của test.jpg. Với sự trợ giúp của trình soạn thảo ghex, chúng ta sẽ thay thế một số ký tự hex và lưu chúng.

Không có nhận xét nào:

Được tạo bởi Blogger.