0% found this document useful (0 votes)
64 views27 pages

Web Security Lab: Access Control Exploits

This document discusses a web security lab focused on broken access controls. It defines broken access controls and common exploits. It provides objectives and prerequisites for the lab. It also explains concepts like access control, types of access control, and examples of broken access control vulnerabilities.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
64 views27 pages

Web Security Lab: Access Control Exploits

This document discusses a web security lab focused on broken access controls. It defines broken access controls and common exploits. It provides objectives and prerequisites for the lab. It also explains concepts like access control, types of access control, and examples of broken access control vulnerabilities.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

Web Security Lab

Broken access controls are a type of security vulnerability that


arises when an application or system fails to properly restrict access
to sensitive data or functionality. This vulnerability allows
attackers to gain unauthorized access to resources that should be
restricted, such as user accounts, files, databases, or administrative
functions. Broken access controls can occur due to a variety of
factors, including poor design, configuration errors, or coding
mistakes.

Objectives that the student will learn:

1. Understand what Broken Access Control is and its impact.


2. Identify Broken Access Control vulnerabilities in web
applications.
3. Exploit these vulnerabilities in a controlled environment.
4. Understand and apply measures to mitigate and prevent these
vulnerabilities.

Pre-requisites:

1. Basic understanding of JSON, web applications, and HTTP


protocols.
2. Familiarity with scripting languages such as PHP and
JavaScript.
3. Knowledge of web application security standards and
frameworks such as OWASP Top 10.
4. Basic understanding and usage of a proxy tool like Burp
Suite.

What is Access Control?

Access control is a security mechanism used to control which


users or systems are allowed to access a particular resource or
system. Access control is implemented in computer systems to
ensure that only authorized users have access to resources, such
as files, directories, databases, and web pages. The primary goal
of access control is to protect sensitive data and ensure that it
is only accessible to those who are authorized to access it.
Access control can be implemented in different ways, depending on
the type of resource being protected and the security
requirements of the system. Some common access control mechanisms
include:

1. Discretionary Access Control (DAC): In this type of access


control, the resource owner or administrator determines who
is allowed to access a resource and what actions they are
allowed to perform. DAC is commonly used in operating
systems and file systems. In layman’s terms, imagine a
castle where the king can give keys to his advisors,
allowing them to open any doors they like, whenever they
want. That’s DAC for you. It’s the liberty to control access
to your own resources. The one in charge, like the king of
the castle, can hand out permissions to whomever they
please, dictating who can come in and out.
1. Mandatory Access Control (MAC): In this type of access
control, access to resources is determined by a set of
predefined rules or policies that are enforced by the
system. MAC is commonly used in highly secure environments,
such as government and military systems. In layman’s terms,
picture a fort with an iron-clad security protocol. Only
specific individuals with particular security clearances can
access certain areas, and this is non-negotiable. The high
commander sets the rules, and they are rigorously followed.
That’s how MAC works. It’s like the stern security officer
who allows no exceptions to the rule.
2. Role-Based Access Control (RBAC): In this type of access
control, users are assigned roles that define their level of
access to resources. RBAC is commonly used in enterprise
systems, where users have different levels of authority
based on their job responsibilities. In layman’s terms,
imagine a modern corporation. You have your managers, your
executives, your sales staff, etc. They each have different
access to the building. Some can enter the boardroom, others
can access the sales floor, and so on. That’s the essence of
RBAC - assigning access based on a person’s role within an
organization.

3. Attribute-Based Access Control (ABAC): In this type of


access control, access to resources is determined by a set
of attributes, such as user role, time of day, location, and
device. ABAC is commonly used in cloud environments and web
applications. In layman’s terms, think of a highly advanced
sci-fi security system that scans individuals for certain
attributes. Maybe it checks whether they’re from a
particular planet, whether they’re carrying a specific
device, or if they’re trying to access a resource at a
specific time. That’s ABAC. It’s like the smart, flexible
security of the future.
Implementing access control can help prevent security breaches
and unauthorized access to sensitive data. However, access
control is not foolproof and can be vulnerable to various types
of attacks, such as privilege escalation and broken access
control vulnerabilities. Therefore, it is important to regularly
review and test access control mechanisms to ensure that they are
working as intended.

Broken Access Control:

Broken access control vulnerabilities refer to situations where


access control mechanisms fail to enforce proper restrictions on
user access to resources or data. Here are some common exploits
for broken access control and examples:

1. Horizontal privilege escalation occurs when an attacker can


access resources or data belonging to other users with the
same level of access. For example, a user might be able to
access another user’s account by changing the user ID in the
URL.

2. Vertical privilege escalation occurs when an attacker can


access resources or data belonging to users with higher
access levels. For example, a regular user can access
administrative functions by manipulating a hidden form field
or URL parameter.
3. Insufficient access control checks occur when access control
checks are not performed correctly or consistently, allowing
an attacker to bypass them. For example, an application
might allow users to view sensitive data without verifying
their proper permissions.

4. Insecure direct object references occur when an attacker can


access a resource or data by exploiting a weakness in the
application’s access control mechanisms. For example, an
application might use predictable or easily guessable
identifiers for sensitive data, making it easier for an
attacker to access. You may refer to this room in Task #4 to
learn more about this.
These exploits can be prevented by implementing strong access
control mechanisms and regularly reviewing and testing them to
ensure they are functioning as intended.

To focus on learning about the Broken Access Controls, please


click on the Start Machine button located in the upper-right-hand
corner of this task to deploy the virtual machine for this room.
After obtaining the machine’s generated IP address, you can
either use our AttackBox or use your own VM connected to
TryHackMe’s VPN to begin the attack. If you prefer to use the
AttackBox, you can simply click on the Start AttackBox button
located above the room name.

After starting the AttackBox or connecting your attack VM to


TryHackMe’s VPN, you can now start accessing the target website
application by entering [Link] into the browser.

Keep in mind that the machine may take up to 5 minutes to spawn.

Learning Objective:

In this task, our objective is to gain a comprehensive


understanding of the web application’s functionalities. This will
allow us to make the most of the application’s capabilities and
achieve our desired outcomes.

Assessing the Application:


When you browse a web application as a penetration tester,
imagine what the underlying code looks like and what
vulnerabilities come to mind for each functionality, request, and
response.

The web application for this room features a Dashboard, Login,


and Registration form that enables users to access the dashboard
of the website. From a web app pentester standpoint, the
pentester will usually register an account. After the
registration, the pentester will then try to check the login
function for any access control vulnerabilities.

Below are the screenshots of each webpage:

Registration:

Login:
Dashboard:
In order for us to capture the HTTP requests being sent to the
server, we can use OWASP ZAP or Burp Suite Community Edition.

To learn more about the detailed usage of Burp Suite and its
functionalities, you may refer to the Burp Suite Module.
Capturing the HTTP traffic

In order for us to further analyze the requests and responses


being sent and received from the server, we will use
the “Proxy” module of Burp Suite to capture the HTTP traffic that
is being sent to the server. The captured HTTP traffic can be
used with the other modules of Burp Suite.

These can then be manipulated or sent to other tools, such


as “Repeater”, for further processing before being allowed to
continue to their destination.

Below is the captured HTTP traffic that is being sent


to [Link] after login.

Based on the screenshot displayed above, we can observe that upon


completing the login process, the web application will give us a
JSON response that contains the status, message, first_name,
last_name, is_admin, and redirect_link which the server uses to
redirect the user to the [Link] with the parameter “isadmin”
in the URL.

Understanding the content of the HTTP request and response:


 The target web application does not have any implemented
security headers, which indicates that there are no
preventative measures (like a first line of defense) in
place to protect the web application against certain types
of attacks.
 The target web application is running on a Linux operating
system (Debian) and is using Apache web server (Apache/2.4.38).
This information can be useful in identifying potential
security vulnerabilities that may exist in the target web
application.
 The target web application utilizes PHP/8.0.19 as its backend
programming language. This information is important for
understanding the technology stack of the application and
identifying potential security vulnerabilities or
compatibility issues that may arise with other software
components.
 The target web application redirects the user to the
dashboard with a parameter that we can possibly test for
privilege escalation vulnerabilities.
 In the previous task, we learned that the
file [Link] returns a JSON response upon login. The
response contains a redirect_link with a parameter that we
can test for access control vulnerabilities.
 To start testing for this vulnerability, we can intercept
the HTTP response and copy the value of
the redirect_link parameter to our address bar.

 Since the application redirects the user to [Link]
while the JSON response can only be seen by intercepting
using a proxy tool, we can try changing the parameter’s
value from “false” to “true” or vice versa.

 Upon changing the value from false to true, application
redirects us to [Link], which is hidden to a normal user
by default. Below is the HTTP request that is captured using
Burp Suite Proxy.

 Since we have access to [Link] using a low-privilege


account, we might as well check for a vertical privilege
escalation attack.
 Checking the box in the “Admin access” column of the account
you registered and clicking the “Save Changes” button will
give us admin privileges. Which in return enables us to
revoke the access of other admin users.

There are several steps that can be taken to mitigate the risk of
broken access control vulnerabilities in PHP applications:

1. Implement Role-Based Access Control (RBAC): Role-based


access control (RBAC) is a method of regulating access to
computer or network resources based on the roles of
individual users within an enterprise. By defining roles in
an organization and assigning access rights to these roles,
you can control what actions a user can perform on a system.
The provided code snippet illustrates how you can define
roles (such as ‘admin’, ‘editor’, or ‘user’) and the
permissions associated with them. The hasPermission function
checks if a user of a certain role has a specified
permission.

Sample Code

// Define roles and permissions


$roles = [
'admin' => ['create', 'read', 'update', 'delete'],
'editor' => ['create', 'read', 'update'],
'user' => ['read'],
];

// Check user permissions


function hasPermission($userRole, $requiredPermission) {
global $roles;
return in_array($requiredPermission, $roles[$userRole]);
}

// Example usage
if (hasPermission('admin', 'delete')) {
// Allow delete operation
} else {
// Deny delete operation
}

2. Use Parameterized Queries: Parameterized queries are a way


to protect PHP applications from SQL Injection attacks,
where malicious users could potentially gain unauthorized
access to your database. By using placeholders instead of
directly including user input into the SQL query, you can
significantly reduce the risk of SQL Injection attacks. The
provided example demonstrates how a query can be made secure
using prepared statements, which separates SQL syntax from
data and handles user input safely.

Sample Code

// Example of vulnerable query


$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username='$username' AND
password='$password'";

// Example of secure query using prepared statements


$username = $_POST['username'];
$password = $_POST['password'];
$stmt = $pdo->prepare("SELECT * FROM users WHERE username=? AND
password=?");
$stmt->execute([$username, $password]);
$user = $stmt->fetch();

3. Proper Session Management: Proper session management ensures


that authenticated users have timely and appropriate access
to resources, thereby reducing the risk of unauthorized
access to sensitive information. Session management includes
using secure cookies, setting session timeouts, and limiting
the number of active sessions a user can have. The code
snippet shows how to initialize a session, set session
variables and check for session validity by looking at the
last activity time.

Sample Code

// Start session
session_start();

// Set session variables


$_SESSION['user_id'] = $user_id;
$_SESSION['last_activity'] = time();
// Check if session is still valid
if (isset($_SESSION['last_activity']) && (time() -
$_SESSION['last_activity'] > 1800)) {
// Session has expired
session_unset();
session_destroy();
}

4. Use Secure Coding Practices: Secure coding practices involve


methods to prevent the introduction of security
vulnerabilities. Developers should sanitize and validate
user input to prevent malicious data from causing harm and
avoid using insecure functions or libraries. The given
example shows how to sanitize user input using
PHP’s filter_input function and demonstrates how to securely
hash a password using password_hash instead of an insecure
function like md5.

Sample Code

// Validate user input


$username = filter_input(INPUT_POST, 'username',
FILTER_SANITIZE_STRING);
$password = filter_input(INPUT_POST, 'password',
FILTER_SANITIZE_STRING);

// Avoid insecure functions


// Example of vulnerable code using md5
$password = md5($password);
// Example of secure code using password_hash
$password = password_hash($password, PASSWORD_DEFAULT);

Broken access control is a security vulnerability that occurs


when a system fails to properly enforce access controls, which
can result in unauthorized users gaining access to sensitive
information or performing actions they are not authorized to do.
Horizontal privilege escalation occurs when a user is able to
access data or perform actions that they are not authorized to do
within their own privilege level. This can be dangerous because
it can allow an attacker who has already gained access to the
system to move laterally through the network and access
additional resources or sensitive data.

Vertical privilege escalation occurs when a user is able to gain


access to data or perform actions that are reserved for users
with higher privilege levels, such as system administrators. This
can be even more dangerous because it can allow an attacker to
gain full control of the system and potentially take over the
entire network.

The impact of these types of privilege escalation can vary


depending on the specific system and the level of access that is
gained. However, in general, the consequences can include
unauthorized access to sensitive information, data loss or theft,
disruption of critical systems or services, and even complete
network compromise. Therefore, it is important to implement
strong access controls and regularly monitor for any signs of
unauthorized access or activity.

Here are some references that you can give to PHP developers to
help them implement these mitigation strategies:

1. OWASP PHP Configuration Cheat Sheet


2. PHP The Right Way: Security
3. Secure Coding in PHP

Common questions

Powered by AI

Horizontal privilege escalation occurs when a user accesses data or performs actions meant for their own access level but not specifically granted to them, such as accessing another user's account. Vertical privilege escalation involves obtaining access to higher privilege functions or data, such as administrative privileges. Horizontal escalation allows lateral movement within similar privilege levels, while vertical escalation can lead to full system control. Both types compromise data and system integrity, posing significant security risks .

Discretionary Access Control (DAC) allows resource owners to determine access permissions, often used in file systems. Mandatory Access Control (MAC) uses system-enforced rules or policies, ideal for high-security environments. Role-Based Access Control (RBAC) assigns access based on user roles, suitable for enterprise systems. Attribute-Based Access Control (ABAC) applies rules based on attributes like user role, location, and time, providing flexibility and customization. Each enhances security by restricting data access based on defined criteria, though they vary in flexibility and scope of control .

Secure session management mitigates unauthorized access by ensuring authenticated users are the ones accessing resources. Essential practices include using secure cookies, session timeouts, and limiting the number of active sessions. Regular checks for session validity, such as verifying the last activity time, help prevent session hijacking and unauthorized access to sensitive information .

Secure coding practices such as input validation, proper error handling, and use of security frameworks ensure robust access controls by preventing code that could be exploited. Validating data inputs and guarding against injection attacks reduces the chances of bypassing access policies. Additionally, using established frameworks and libraries helps ensure best practices are followed, minimizing security flaws .

RBAC enhances security by restricting actions based on defined user roles, reducing the risk of unauthorized actions. By defining roles and associated permissions, organizations can control access granularly. However, RBAC's effectiveness is limited by its complexity in managing roles and permissions as organizations scale, potentially leading to oversight in role assignments or misconfigurations .

Broken access control vulnerabilities occur due to poor design, configuration errors, or coding mistakes that fail to properly restrict access to sensitive data or functionality. These vulnerabilities allow attackers to gain unauthorized access to resources such as user accounts, files, databases, or administrative functions, leading to potential security breaches. The impact includes unauthorized access to sensitive information, data loss or theft, and disruption of critical systems .

Insufficient security headers leave web applications vulnerable to attacks by not providing the initial defense measures needed to prevent common exploits such as cross-site scripting or clickjacking. These gaps can contribute to broken access control as well, enabling attackers to manipulate HTTP requests to gain unauthorized access, exposing sensitive resources .

Parameterized queries prevent SQL injection by using placeholders instead of directly incorporating user inputs into SQL statements. This separation ensures inputs are treated as data rather than executable queries. Unlike traditional query methods, parameterized queries effectively escape inputs, eliminating injection points and thus preventing attackers from executing arbitrary SQL commands .

Failure to manage broken access control can result in unauthorized access to sensitive information, loss or theft of data, and potential system compromise. This can lead to financial losses, reputational damage, and legal liabilities. In severe cases, it might enable attackers to gain full control over organizational resources, disrupting operations and potentially leading to widespread system outages .

Penetration testers can identify broken access control by intercepting and analyzing HTTP requests and responses using tools like Burp Suite or OWASP ZAP. Techniques include manipulating URL parameters, testing hidden fields, and observing endpoint responses for unauthorized data access. Testers can also attempt privilege escalation scenarios by modifying parameters to check for unauthenticated access to restricted areas .

You might also like