Access Control Writeup
PortSwigger
Last updated
PortSwigger
Last updated
Pham Quoc Trung
BurpSuite
This lab has an unprotected admin panel.
Solve the lab by deleting the user carlos
.
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
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
.
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
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
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
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
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
.
Với lab này, khi mình ấn vào 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
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.
Ở 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 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
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
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
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
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
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
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
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
Với bài này thì khi đăng nhập mình thấy có mục password
trong trang đã đượ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 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 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
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.
Ở bài này mình thấy có chức năng là . Đâ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 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
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.
Ở đâ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 hoặc , hệ thống sẽ bắt ta phải xác nhận
Đây là request khi ấn
Đề 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 . 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
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.
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 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:
Log in using the admin credentials.
Browse to the admin panel, promote
carlos
, and send the HTTP request to Burp Repeater.Open a private/incognito browser window, and log in with the non-admin credentials.
Browse to
/admin-roles?username=carlos&action=upgrade
and observe that the request is treated as unauthorized due to the absent Referer header.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.