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


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
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:
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)
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
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
Low
Cao, có thể lấy toàn bộ cookie
Medium
Trung bình
High
Thấp
Last updated
Was this helpful?

