Bài viết

TryHackMe - IDOR

🔑 Tìm hiểu cách phát hiện và khai thác các lỗ hổng IDOR trong ứng dụng web

TryHackMe - IDOR

Tìm hiểu cách phát hiện và khai thác các lỗ hổng IDOR trong ứng dụng web, cho phép bạn truy cập vào những dữ liệu mà lẽ ra bạn không được phép xem.

Tryhackme Room Link

IDOR là gì?

IDOR là viết tắt của Insecure Direct Object Reference và là một loại lỗ hổng kiểm soát truy cập.

Loại lỗ hổng này có thể xảy ra khi web server nhận dữ liệu đầu vào do người dùng cung cấp để truy xuất các đối tượng như tệp, dữ liệu hoặc tài liệu. Server đặt quá nhiều niềm tin vào dữ liệu đầu vào và không xác thực ở phía server để kiểm tra xem đối tượng được yêu cầu có thực sự thuộc về người dùng đang yêu cầu nó hay không.

Ví dụ về IDOR

Hãy tưởng tượng bạn vừa đăng ký một dịch vụ trực tuyến và muốn thay đổi thông tin hồ sơ của mình. Liên kết bạn nhấp vào dẫn đến http://online-service.thm/profile?user_id=1305, nơi bạn có thể xem thông tin của mình.

Vì tò mò, bạn thử thay đổi giá trị user_id thành 1000 (http://online-service.thm/profile?user_id=1000), và thật bất ngờ, giờ đây bạn có thể xem thông tin của một người dùng khác. Bạn vừa phát hiện một lỗ hổng IDOR!

Lý tưởng nhất, trang web phải có một bước kiểm tra để xác nhận rằng thông tin người dùng thực sự thuộc về người dùng đang đăng nhập và yêu cầu dữ liệu đó.

Dựa trên những gì đã học ở trên, hãy nhấp vào nút View Site và thử lấy flag bằng cách phát hiện và khai thác một lỗ hổng IDOR.

Chúng ta có thể thấy 4 địa chỉ email.

Hãy tìm xem địa chỉ nào có thể được sử dụng để khai thác lỗ hổng này:

IDOR Example

Hãy thử thay đổi số đơn hàng thành 1000:

IDOR Example 2

Và chúng ta nhận được flag:

IDOR Example 3

Câu hỏi:

Flag từ trang web ví dụ về IDOR là gì?

Câu trả lời:
1
THM{IDOR-VULN-FOUND}

Tìm IDOR trong các ID được mã hóa

ID được mã hóa

Khi truyền dữ liệu từ trang này sang trang khác thông qua dữ liệu POST, query string hoặc cookie, các lập trình viên web thường sẽ mã hóa dữ liệu thô trước. Encoding đảm bảo rằng web server nhận dữ liệu có thể hiểu được nội dung.

Encoding chuyển đổi dữ liệu nhị phân thành một chuỗi ASCII, thường sử dụng các ký tự a-z, A-Z, 0-9 và ký tự = để padding.

Kỹ thuật encoding phổ biến nhất trên web là Base64, và thường khá dễ nhận biết. Bạn có thể sử dụng các trang web như base64encode để giải mã chuỗi, sau đó chỉnh sửa dữ liệu, mã hóa lại bằng base64encode rồi gửi lại web request để xem phản hồi có thay đổi hay không.

Câu trả lời:
1
base64

Tìm IDOR trong các ID được hash

ID được hash

Các ID được hash phức tạp hơn một chút so với ID được mã hóa, nhưng chúng vẫn có thể tuân theo một mẫu có thể dự đoán được, chẳng hạn như phiên bản hash của một giá trị số nguyên.

Ví dụ, số ID 123 sẽ trở thành 202cb962ac59075b964b07152d234b70 nếu sử dụng thuật toán hash MD5.

Bạn nên đưa bất kỳ hash nào tìm được vào một dịch vụ web như crackstation — dịch vụ có cơ sở dữ liệu chứa hàng tỷ kết quả ánh xạ giữa hash và giá trị gốc — để kiểm tra xem có tìm thấy kết quả phù hợp hay không.

Câu trả lời:
1
base64

Tìm IDOR trong các ID không thể dự đoán

ID không thể dự đoán

Nếu không thể xác định ID bằng các phương pháp ở trên, một cách rất hiệu quả để phát hiện IDOR là tạo hai tài khoản rồi hoán đổi các số ID giữa chúng.

Nếu bạn có thể xem nội dung của người dùng khác bằng số ID của họ trong khi vẫn đăng nhập bằng một tài khoản khác, hoặc thậm chí không đăng nhập, thì bạn đã tìm thấy một lỗ hổng IDOR hợp lệ.

Câu trả lời:
1
2

Chúng nằm ở đâu?

Endpoint dễ bị tấn công mà bạn đang nhắm đến không phải lúc nào cũng xuất hiện trong thanh địa chỉ.

Nó có thể là nội dung được trình duyệt tải thông qua một AJAX request, hoặc một endpoint được tham chiếu trong tệp JavaScript.

Đôi khi endpoint có thể chứa một tham số không được tham chiếu, vốn từng được sử dụng trong quá trình phát triển nhưng vô tình được đưa lên môi trường production.

Ví dụ, bạn có thể thấy một request đến /user/details hiển thị thông tin người dùng của mình, được xác thực thông qua session. Tuy nhiên, bằng một kỹ thuật tấn công gọi là parameter mining, bạn phát hiện một tham số có tên user_id, cho phép hiển thị thông tin của người dùng khác, chẳng hạn:

/user/details?user_id=123

Câu trả lời:
1
No answer needed

Ví dụ IDOR thực tế

Bắt đầu bằng cách nhấn nút Start Machine. Sau khi máy khởi động, hãy truy cập trang web trong một tab trình duyệt mới:

https://WEBSITE_IP.p.thmlabs.com

Trước tiên, bạn cần đăng nhập. Để thực hiện việc này, hãy nhấp vào customer’s sectiontạo một tài khoản. Sau khi đăng nhập, hãy nhấp vào tab Your Account.

Phần Your Account cho phép bạn thay đổi các thông tin như tên người dùng, địa chỉ emailmật khẩu. Bạn sẽ nhận thấy các trường username và email đã được điền sẵn bằng thông tin của mình.

Practice 1

Chúng ta sẽ bắt đầu bằng việc điều tra cách thông tin này được điền sẵn.

Nếu mở công cụ dành cho nhà phát triển của trình duyệt, chọn tab Network rồi làm mới trang, bạn sẽ thấy một request đến endpoint có đường dẫn:

/api/v1/customer?id={user_id}

Trang này trả về dữ liệu ở định dạng JSON, bao gồm user ID, username và địa chỉ email.

Từ đường dẫn, chúng ta có thể thấy thông tin người dùng được hiển thị dựa trên tham số id trong query string.

Hãy thử cập nhật username thành một giá trị khác rồi nhấn Update:

Practice 2

Chúng ta có thể nhấp chuột phải và chọn Edit and Resend:

Practice 3

Thay đổi ID thành 1 rồi nhấn Send.

Practice 4

Chúng ta có thể thấy ID đã thay đổi và giờ có thể xem thông tin của người dùng:

Practice 5

Câu trả lời:
1
adam84

Bây giờ, chúng ta thực hiện tương tự với ID 3:

Practice 6

Answer:
1
j@fakemail.thm

Bài viết này được cấp phép bởi tác giả theo giấy phép CC BY 4.0 .