Broken authentication

Thu thập đường dẫn của admin

Trong kết quả thu thập được, các endpoint có status code 301 (Moved permanently) đều không có quyền access với credential: bee - bug tức status code 403 Forbidden

⇒ Khả năng cao chúng đều thuộc admin site

BWAPP

Broken Auth. - Forgotten Function (Easy)

Ta có logic code như sau:

Ta có thể thấy được nếu ta có/biết được email trong database users thì ta sẽ nhận được secret của user đó

Dưới góc nhìn của lab thì no impact hoặc hơi ngớ ngẩn. Nhưng thử tưởng tượng rằng nếu hacker có được danh sách email sau đó bruteforce thì tất cả secret sẽ bị lộ ngay

Broken Auth. - Forgotten Function (Medium)

Khi nhập 1 valid email hợp lệ trong users database ta sẽ nhận được secret được gửi qua mail kiểu như sau:

Phân tích đoạn code có thể thấy rằng đoạn code trên kín kẽ và không xuất hiện vuln nào tại Web Application.

Nhưng có 2 vấn đề chính:

  • 1: Từ chức năng trên, ta có thể bruteforce xem email nào đang tồn tại, email nào không tồn tại trên hệ thống

  • 2 là việc webserver này chứa 1 SMTP server --> attacker có thể enumerate hoặc giả mạo để gửi đến email của những người dùng hợp lệ ở bên trên --> Phishing

  • 3 hoặc là high tech hơn là Packet sniffing trên SMTP protocol port 25 (Không áp dụng đối với bài này vì wireshark không bắt được packet nào đi từ webapp sang smtp server)

Broken Auth. - Forgotten Function (High)

Tương tự trên, khác là bây giờ WebApp send reset code đến email

Phần reset code được sinh ra như sau:

Và phần link được sinh ra như sau:

Sau đó mail nhận được 1 link reset dựa vào secret tại endpoint: /bWAPP/secret_change.php

Ta có thể thấy rằng mọi value đều được validate an toàn trước khi đem đi query

⇒ Nên tại đây có thể thấy rằng không có vuln nào được xác nhận dựa theo code mà chỉ tồn tại các rủi ro liên quan đến người dùng, giống với mức Medium, attacker có thể giả mạo bằng 1 site khác để steal secret chẳng hạn....

Insecure Login Form (All-level)

Để tránh lan man thì ta sẽ làm tổng thể 1 lượt cả 3 level

Low

Ta có thể thấy nó hardcode ngay trong source --> lộ lọt credential

Medium

Trong phần Source code, ta thấy rằng có 1 đoạn cipher chỉ ra rằng đó là secret

⇒ Secret là: hulk smash!

High

Tại level high thì mật khẩu và password được lộ trong phần hint:

Nên có thể đoán login và password là 1 trong các từ được nhắc đến trong remember

Kết quả cho ta thấy rằng điều đó hoàn toàn đúng.

Kết luận:

Ta nên cẩn thận với các credential, không nên public hoặc hardcode nó ngay trên source code nếu không sẽ dễ dàng bị lấy/đoán ra bởi attacker

Broken Auth. - Logout Management (All-level)

Low

Ta sẽ được 1 cửa sổ logout như sau

Khi logout ta sẽ được chuyển hướng đến endpoint: /bWAPP/ba_logout_1.php

Sau đó redirect đến login.php

Mặc dù set rất nhiều cookie thành null nhưng lại không set cookie session (PHPSESSID) về null khiến cho phiên login vẫn còn tồn tại đến khi hết hạn

Medium

Tại level này chương trình sử dụng 1 hàm session_detroy() để xóa nhưng:

Nó sẽ xóa file session (empty file) mà không unset session cookie

size: 98 -> 0

Vậy nên cách này cũng không xóa hoàn toàn cookie nên các trang web được duplicate lên nếu đã đăng nhập rồi thì hoàn toàn vẫn có thể hoạt động bình thường hoặc nó sẽ không logout ngay.

High

Khác với medium, high có thêm 1 đoạn code sau:

Điều này sẽ xóa sạch sẽ cả cookie session trên browser thay vì chỉ xóa dữ liệu tại file như các medium

Kết luận

Ta sẽ có bảng sau để phân tích về các mức độ session cleaning của challenge

Mức độ
Session Variables
Session File

Low (0)

Không xóa

Không xóa

Medium (1)

Không xóa

Xóa

High (2)

Xóa hoàn toàn

Xóa

Broken Auth. - Password Attacks (All-level)

Low

Đối với level này, ta có thể dễ dàng bruteforce password mà không gặp bất cứ khó khăn gì (wordlist expected 😄)

Như vậy với credential là bee/bug thì ta sẽ nhận được noti rằng đăng nhập thành công

Medium

Đối với medium, WebApp đã thêm 1 lớp bảo vệ đó là salt có độ dài 6 byte. Mỗi lần login sẽ tạo ra 1 salt khác nhau

Cách thức hash được sinh ra:

Tính bảo mật của thuật toán trên là rất tốt, việc exploit thuật toán trên là khó có thể

Nhưng salt được hardcode và trả về (hidden trong form field) nên ta có thể dựa vào đó để lấy nó trước khi bruteforce mỗi lần bằng cách dùng BurpSuite Macro

⇒ Kết quả thành công cho ta thấy việc exploit hoàn toàn có thể diễn ra như bình thường nếu ta sử dụng phương pháp này cho cửa sổ login. Nó sẽ không hạn chế được việc bruteforce

High

Tương tự cách sinh hash của mức medium, nó chỉ biến tấu rằng đây là 1 captcha và cần phải nhập captcha. Cách này vẫn có thể bypass nếu ta có 1 công cụ detect được chữ dựa trên hình ảnh cung cấp bởi endpoint captcha.php

Và cách này an toàn hơn rất nhiều khi mà response trả về không chứa salt được hardcode mà được embed vào trong ảnh

Kết luận

Ta sẽ có bảng đánh giá sau:

Level
Kỹ thuật
Bypass

Low

Ít

Chắc chắn

Medium

Nhiều

Chắc chắn

High

Rất nhiều

Có thể có/không (tùy vào phương pháp captcha)

Broken Auth. - Weak Passwords (All-level)

Level
Password
Độ dài
Nhóm ký tự
Time to bruteforce

Low

test

4 bytes

1 (chữ thường)

Nhanh

Medium

test123

7 bytes

2 (chữ thường + số)

Lâu hơn chút

High

Test123

7 bytes

3 (chữ thường + chữ hoa + số)

Lâu nhất nhưng chưa tối ưu

Mật khẩu mạnh nhất là mật khẩu có trên 6 bytes, trong đó 6 bytes đó chứa 4 nhóm kí tự:

  • Chữ thường

  • Chữ in hoa

  • Số

  • Các kí tự đặc biệt

Session Mgmt. - Administrative Portals

Low

Ta có thể thấy rằng ta không có quyền admin để vào admin portals nhưng có 1 query (biến) được phơi ra chỉ ra rằng admin đang được set value là 0 nên nếu set là 1 ta sẽ trở thành admin

Medium

Tiếp theo, thay vì biến admin được đặt ở query thì bây giờ nó đã được chuyển vào Cookie

Đổi giá trị thành 1 ta sẽ unlock được admin portal:

High

Thay vì dùng cookie như trước, thì bây giờ nó chuyển sang dùng session (tức là phần session được lưu trên server)

Như vậy ngoại trừ việc server bị kiểm soát bởi attacker thì việc lưu trữ bằng session là phương pháp tối ưu và an toàn nhất

Kết luận

Level
Đánh giá

Low

Weak

Medium

Weak

High

An toàn nhất trong hầu hết trường hợp

Session Mgmt. - Cookies (HTTPOnly)

Low

Medium

High

Kết luận

Level
Mức độ tấn công

Low

Cao, có thể lấy toàn bộ cookie

Medium

Trung bình

High

Thấp

Last updated

Was this helpful?