Access Control Writeup

PortSwigger

Author:

  • Pham Quoc Trung

Used Tools:

  • BurpSuite

Problem Solving:

Lab: Unprotected admin functionality

Description:

This lab has an unprotected admin panel.

Solve the lab by deleting the user carlos.

Solution:

Thử truy cập vào /robots.txt, mình nhìn thấy một đường link dẫn tới trang admin

Truy cập vào /administrator-panel và mình đã và được giao diện trang quản trị

Tiến hành xóa user carlos và mình đã hoàn thành bài lab

Lab: Unprotected admin functionality with unpredictable URL

Description:

This lab has an unprotected admin panel. It's located at an unpredictable location, but the location is disclosed somewhere in the application.

Solve the lab by accessing the admin panel, and using it to delete the user carlos.

Solution:

Với lab này thì ở trong file robots.txt không có gì thú vị cả

Mình thử ấn Ctrl + U để xem mã nguồn front-end của trang web thì thấy có một đoạn Javascript khá hay

Ở đây đoạn code này check xem user hiện tại có phải là admin hay không. Nếu có thì nó sẽ hiện ra một thẻ a link tới đường dẫn /admin-5duoht. Mình sẽ thử truy cập tới trang này coi sao

Và đây chính là trang quản trị của admin luôn. Tiến hành xóa user carlos đi và mình đã hoàn thành bài lab

Lab: User role controlled by request parameter

Descrition:

This lab has an admin panel at /admin, which identifies administrators using a forgeable cookie.

Solve the lab by accessing the admin panel and using it to delete the user carlos.

You can log in to your own account using the following credentials: wiener:peter

Solution:

Do ở đây đề bài đã cho biết sẵn link tới admin panel nên mình sẽ thử truy cập luôn. Tuy nhiên đây là giao diện của nó

Mình thử đăng nhập bằng wiener:peter coi sao. Khi nhìn vào request login, mình thấy có giá trị Admin=false ở trong cookie

Vậy là khi login cookie của chúng ta sẽ có thêm giá trị Admin để trang web có thể xác định được xem ta có quyền admin để truy cập /admin hay không. Mình sẽ sử dụng extension EditThisCookie để sửa giá trị false thành true coi sao

Lưu cookie và load lại trang web. Mình đã vào được trang quản trị

Tiến hành delete user carlos để hoàn thành bài lab

Lab: User role can be modified in user profile

Description:

This lab has an admin panel at /admin. It's only accessible to logged-in users with a roleid of 2.

Solve the lab by accessing the admin panel and using it to delete the user carlos.

You can log in to your own account using the following credentials: wiener:peter

Tương tự như bài trước, ta cần phải làm gì đó ở tài khoản để có quyền administrator thì mới được vào trang /admin . Lần này thì trong cookie không có gì đặc biệt cả. Ở trong trang profile thì mình thấy có chức năng đổi email

Mình thử đổi email sang một email bất kì và xem request response trả về

Ở đây mình thấy response trả về có một trường là roleid được đặt là 1. Nhìn lại đề bài thì có thể biết được rằng nếu roleid = 2 thì ta sẽ có được quyền administrator. Mình sẽ thử lấy trường roleid và cho vào request coi sao

Vậy là mình đã có được roleid=2. Thử truy cập vào trang quản trị

Vậy là ta đã bypass thành công. Tiến hành xóa user carlos để hoàn thành bài lab

Lab: URL-based access control can be circumvented

Description:

This website has an unauthenticated admin panel at /admin, but a front-end system has been configured to block external access to that path. However, the back-end application is built on a framework that supports the X-Original-URL header.

To solve the lab, access the admin panel and delete the user carlos.

Solution:

Với lab này, khi mình ấn vào Admin panel\text{Admin panel} thì chỉ có một thông báo như này

Mình thử intercept để bắt request khi truy cập tới trang admin

Dựa trên đề bài, có vẻ ứng dụng web này đã chặn các truy cập từ bên ngoài tới /admin , tuy nhiên thì X-Original-URL header lại được hỗ trợ. Đây là một non-standard HTTP Header cho phép chứa URL yêu cầu ban đầu phòng khi ứng dụng web chuyển hướng URL hay chặn truy cập URL. Mình sẽ thử sử dụng để xem có thể bypass được không

Forward đi và mình đã vào được trang quản trị

Giờ chỉ cần xóa user carlos đi để hoàn thành bài lab thôi

Oops có vẻ URL để xóa user cũng bị chặn. Thử nhìn request trên BurpSuite

Mình sẽ lại sửa lại như sau

Forward đi và mình nhận được lỗi sau

Đây là do request xóa của mình đã thực thi thành công nên chương trình tự động redirect lại về /admin . Thử vào trang chủ và mình thấy bài lab đã được hoàn thành

Lab: Method-based access control can be circumvented

Description:

This lab implements access controls based partly on the HTTP method of requests. You can familiarize yourself with the admin panel by logging in using the credentials administrator:admin.

To solve the lab, log in using the credentials wiener:peter and exploit the flawed access controls to promote yourself to become an administrator.

Solution:

Ở lab này thì đề bài đã cho chúng ta sẵn username và password của admin. Sau khi đăng nhập thì mình thấy có một function để tăng hoặc hạ cấp user

Thử tăng và hạ để xem request nó như nào. Đây là request để tăng cấp

Với hạ cấp thì chỉ cần thay action thành "downgrade". Để hoàn thành bài lab này thì chúng ta cần phải chạy được request này nhưng dưới quyền của user wiener . Mình sẽ thử đăng nhập vào wiener sau đó điền session của nó vào request trên và đây là kết quả

Ở đây mình thấy chương trình đã trả về lỗi Unauthorized\text{Unauthorized} do chương trình đã check xem mình có phải là admin hay không. Dựa trên đề bài rằng chương trình sẽ check dựa trên HTTP Method, mình thử thay HTTP Method từ POST sang GET xem có bypass được việc check này hay không

Response trả về 302, có vẻ là đã thành công. Quay lại trình duyệt và mình thấy bài lab đã được hoàn thành

Lab: User ID controlled by request parameter

Description:

This lab has a horizontal privilege escalation vulnerability on the user account page.

To solve the lab, obtain the API key for the user carlos and submit it as the solution.

You can log in to your own account using the following credentials: wiener:peter

Solution:

Mục tiêu của bài này là lấy được API Key của user carlos . Thử đăng nhập vào user wiener với password là peter để xem API Key có ở đâu. Giao diện sau khi đăng nhập

Có thể thấy trong đường dẫn /myaccount?id=wiener mình thấy được API Key của user wiener . Thử sửa id thành carlos , mình thấy được trang account của carlos

Vậy là mình đã có được API Key của carlos . Giờ chỉ cần submit solution để hoàn thành bài lab thôi

Lab: User ID controlled by request parameter, with unpredictable user IDs

Description:

This lab has a horizontal privilege escalation vulnerability on the user account page, but identifies users with GUIDs.

To solve the lab, find the GUID for carlos, then submit his API key as the solution.

You can log in to your own account using the following credentials: wiener:peter

Solution:

Vẫn tương tự như bài trước, tuy nhiên lần này id không chứa username nữa mà là một chuỗi khá lằng nhằng

Làm sao ta có thể biết được chuỗi tương ứng với user carlos là gì nhỉ? Mình thử mò ở ngoài trang chủ thì thấy có một bài viết do carlos là tác giả

Nhấp vào tên carlos, mình ra được một trang chứa các bài viết của tác giả carlos

Và đường link dẫn tới trang này có dạng /blogs?userId=795f6d54-7313-40cd-b5ba-c2ec620078aa có thể chính là id của user carlos . Mình thử lấy id này điền vào request ban đầu coi sao

Và mình đã vào được trang account của user carlos , cũng như thấy được API Key. Submit solution và mình sẽ hoàn thành được bài lab này

Lab: User ID controlled by request parameter with data leakage in redirect

Description:

This lab contains an access control vulnerability where sensitive information is leaked in the body of a redirect response.

To solve the lab, obtain the API key for the user carlos and submit it as the solution.

You can log in to your own account using the following credentials: wiener:peter

Solution:

Tương tự các lab trước, sau khi đăng nhập thì mình thu được request như này

id ở đây thậm chí còn là username luôn. Mình thử thay bằng carlos và đây là kết quả

Thử nộp API Key và mình hoàn thành luôn bài lab

Ủa rồi khác gì hai bài trên nhỉ :v

Lab: User ID controlled by request parameter with password disclosure

Description:

This lab has user account page that contains the current user's existing password, prefilled in a masked input.

To solve the lab, retrieve the administrator's password, then use it to delete the user carlos.

You can log in to your own account using the following credentials: wiener:peter

Solution:

Với bài này thì khi đăng nhập mình thấy có mục password trong trang My account\text{My account} đã được fill sẵn các kí tự nào đó

Thử inspect và chuyển kiểu input thành text mình thấy được đây chính là password của người dùng hiện tại

Chuyển vào BurpSuite để dễ dàng thao tác và quan sát hơn

Mục tiêu của chúng ta là tìm ra password của administrator. Mình chưa biết user của administrator là gì nên mình sẽ thử mò. Mình sẽ thử sửa id thành administrator để xem có xem được trang My account\text{My account} không

Có vẻ là được. Mình đã lấy được password của user administrator và có vẻ user này sẽ có quyền quản trị. Thử đăng nhập và đây là giao diện trang cá nhân của người dùng này

Thử vào Admin panel\text{Admin panel} và mình đã truy cập được vào trang quản trị của hệ thống

Giờ chỉ cần xóa user carlos đi là ta sẽ hoàn thành bài lab

Lab: Insecure direct object references

Description:

This lab stores user chat logs directly on the server's file system, and retrieves them using static URLs.

Solve the lab by finding the password for the user carlos, and logging into their account.

Solution:

Ở bài này mình thấy có chức năng là Live chat\text{Live chat}. Đây là giao diện của nó

Sau một hồi chat thì mình thấy không có gì thú vị cả. Tuy nhiên khi mình ấn vào View transcript\text{View transcript} thì thấy chương trình down về 1 file tên là 2.txt. Và cứ mỗi lần mình ấn thì nó lại tăng thành 3, 4, 5,... Vây thì cái số 1 đâu nhỉ? Hẳn là nó phải chứa nội dung gì hay ho. Mình thử tìm request tải file trong BurpSuite và sửa thành 1.txt

Ở đây mình thấy được một đoạn chat có sự xuất hiện của password. Thử đăng nhập vào user carlos bằng password là yf72jfp74ftsr9fhrsx0 và mình đã hoàn thành bài lab

Lab: Multi-step process with no access control on one step

Description:

This lab has an admin panel with a flawed multi-step process for changing a user's role. You can familiarize yourself with the admin panel by logging in using the credentials administrator:admin.

To solve the lab, log in using the credentials wiener:peter and exploit the flawed access control to promote yourself to become an administrator.

Solution:

Ở đây, mình thử đăng nhập vào trang quản trị sử dụng thông tin được cho trong đề bài. Đây là giao diện của nó

Mỗi khi ấn Upgrade user \text{Upgrade user} hoặc Downgrade user \text{Downgrade user} , hệ thống sẽ bắt ta phải xác nhận

Đây là request khi ấn Upgrade user \text{Upgrade user}

Đề bài yêu cầu ta phải tự tăng cấp bản thân khi đang dùng user wiener . Mình sẽ thử đăng nập vào user wiener để lấy cookie rồi điền vào request trên coi sao

Hệ thống trả về lỗi Unauthorized \text{Unauthorized} . Có vẻ là do mình chưa xác nhận upgrade. Mình sẽ dùng request có được sau khi mình ấn Yes ở trên

Response trả về 302, có vẻ là đã thành công. Thử quay lại trình duyệt và mình thấy bài lab đã được hoàn thành

Lab: Referer-based access control

Description:

This lab controls access to certain admin functionality based on the Referer header. You can familiarize yourself with the admin panel by logging in using the credentials administrator:admin.

To solve the lab, log in using the credentials wiener:peter and exploit the flawed access controls to promote yourself to become an administrator.

Solution:

Bài này thì cũng tương tự bài trước. Đây là giao diện trang quản trị

Tuy nhiên, khi mình ấn Upgrade user\text{Upgrade user} thì thực thi được luôn chứ không cần phải xác nhận. Đây là request gửi đi lúc upgrade

Mình sẽ sửa username thành wiener và dùng cookie của wiener để chạy nó xem sao

Và mình hoàn thành bài lab luôn ơ :v

Intended Solution:

  1. Log in using the admin credentials.

  2. Browse to the admin panel, promote carlos, and send the HTTP request to Burp Repeater.

  3. Open a private/incognito browser window, and log in with the non-admin credentials.

  4. Browse to /admin-roles?username=carlos&action=upgrade and observe that the request is treated as unauthorized due to the absent Referer header.

  5. Copy the non-admin user's session cookie into the existing Burp Repeater request, change the username to yours, and replay it.

© 2024,Pham Quoc Trung. All rights reserved.

Last updated