Phần 6: Tìm hiểu về CRLF Injection
Bài đăng này đã không được cập nhật trong 5 năm
Mô tả:
Đầu tiên các bạn cần biết CRLF
là viết tắt của Carriage Return
và Line Feed
, CR
và LF
là các ký tự điều khiển, được mã hóa tương ứng 0x0D (13 trong hệ thập phân) và 0x0A (10 trong hệ thập phân).
Chúng được sử dụng để đánh dấu ngắt dòng trong tệp văn bản. Windows sử dụng hai ký tự chuỗi CR
LF
còn Unix chỉ sử dụng LF
và MacOS cũ (pre-OSX MacIntosh) đã sử dụng CR
. còn CRLF Injection
là một lỗ hổng có thể xảy ra khi người lập trình không kiểm tra kĩ càng dữ liệu người dùng đẩy lên và cho phép người dùng chèn cả các kí tự CR
và LF
này vào.
Ví dụ
- Twitter HTTP Response Splitting
- Difficulty: High
- Url: https://twitter.com/i/safety/report_story
- Report Link: https://hackerone.com/reports/52042 1
- Date Reported: April 21, 2015
- Bounty Paid: $3,500
- Description:
-
Vào tháng 4 năm 2015, người dùng
@filedescriptor
đã phản hổi về một lỗ hổng bảo mật trên Twitter cho phép tin tặc có thể tùy tiện đặtcookie
bằng cách chỉnh sửa thêm thông tin vào mộtHTTP request
. -
Về cơ bản, yêu cầu đến
url
:https://twitter.com/i/safety/report_story
(Đây là một chức năng của twitter cho phép người dùng báo cáo về một quảng cáo không phù hợp) cần một tham số gọi làreported_tweet_id
, Trong phải hồi, Twitter cũng trả về 1cookie
bao gồm tham số giống vớireported_tweet_id
trongHTTP request
. Trong thử nghiệm của anh ấy, anh ấy đã nhận ra rằng các kí tựCR
vàLF
đã không được kiểm tra kĩ.LF
được thay thế bằng kí tựspace
cònCR
có thể trả trong lỗi 400 củaHTTP
(Bad Request Error). -
Bằng kinh nghiệm của mình, anh ta biết được rằng Firefox trước đây từng có 1 lỗ hổng trong việc
encoding
. Thay vì mã hóa các kí tự không hợp lệ khi setcookies
thì nó lại loại bỏ các kí tự này. Kết quả là firefox chỉ cho phép nhận các kí tự trong 1 phạm vi nhất định. Anh ta đã thử nghiệm 1 cách tương tự với twiter, anh ta sử dụng ký tựUnicode å ̃ (U + 560A)
kết thúc bằng%0A
. Và kết quả là tham số này đã được truyền vàoURL
nghĩa làURL
đã được mã hóa bằng UTF-8. Kết quả làå
đã trở thành%E5%98%8A
. -
Bây giờ, gửi giá trị này lên,
@filedescriptor
nhận ra rằng Twitter sẽ phát hiện bất kì kí tự có thể gây hại, bà nó sẽ giải mã các giá trị trở lại thành giá trị Unicode56 0A
và xóa kí tự không hợp lệ56
. Chính điều này đã để lại các kí tựLF
(line feed)0A
như là minh họa sau: -
Làm tương tự anh ấy đã có thể vượt qua được kiểm tra
%E5%98%8A%E5%98%8DSet-Cookie:%20test
, và kết quả là%0A
và%0D
đã có trongheader
củacoockie
. -
Bây giờ ta có thể thấy rằng tấn công CLRF rất nguy hiểm, nhất là khi mà chúng còn cho phép thực hiện cả tấn công XSS kèm theo. Trong trường hợp này các bộ lọc của Twitter đã bị bỏ qua. Tin tặc có thể phân tách phản hổi và thực thi XSS để đánh cắp
cookie
của người dùng. Tại đâyURL
bị chia thành nhiều dòng để định dạng:https://twitter.com/login?redirect_after_login= https://twitter.com:21/%E5%98%8A%E5%98%8Dcontent-type:text/html%E5%98%8A%E5%98%8D location:%E5%98%8A%E5%98%8D%E5%98%8A%E5%98%8D%E5%98%BCsvg/onload=alert%28innerHTML%2\ 9%E5%98%BE
-
Chú ý rằng các giá trị được giải mã:
%E5%98%8A => 56 0A => %0A %E5%98%8D => 56 0D => %0D %E5%98%BC => 56 3C => %3C %E5%98%BE => 56 3E => %3E
-
Thay thế và bỏ các mã hóa ta thấy
URL
thực chất là:https://twitter.com/login?redirect_after_login=https://twitter.com:21/ content-type:text/html location: <svg/onload=alert(innerHTML)>
Như bạn có thể thấy:
- Kí tự ngắt dòng cho phép tạo ra được
header
mới chả về với mã JavaScript có thể được thực thisvg/onload=alert(innerHTML)
. Người dùng có thể bị đánh cắp phiên đăng nhập mà không nghi ngờ vì các thông tin ngạy cảm được đưa vào phầnHeader
ngay sau vị trí bịinjection
.
-
Chú ý:
Kĩ năng tìm kiếm các lỗ hổng cần phải có sự kết hợp giữa kĩ năng và khả năng quan sát. Như ở trường hợp này hacker
đã dưa vào một lỗi của firefox trước đó để anh ta test với twitter đề có thể chèn mã độc vào URL
. Khi mà bạn đang tìm kiếm các lỗ hổng như thế này thì luôn cần thinkout of the box
và thử gửi các giá trị đã được mã hóa và xem xét việc xử lý các kí tự này của server. Chúc các bạn thành công hack facebook
All rights reserved