INE Advanced Injection Attacks Course File
INE Advanced Injection Attacks Course File
Course Overview
Alexis Ahmed
Offensive Security/Red Team Instructor @INE
Red Team Lead @HackerSploit
Key Concepts
+ SQL Injection Essentials: Learn to identify and execute common techniques like Error-based, Union-
based, and Boolean-based SQL Injection, along with strategies to prevent them.
+ Attack Automation: Master the use of tools like SQLMap to automate the detection and exploitation
of SQL Injection vulnerabilities.
+ Advanced SQL Injection: Identify and exploit advanced SQL Injection techniques like OOB and and
Second-order SQLi.
+ NoSQL Injection: Learn how to identify and exploit NoSQL Injection vulnerabilities in databases like
MongoDB.
+ LDAP Injection: Learn how Lightweight Directory Access Protocol (LDAP) systems are exploited
through injection attacks.
+ ORM Injection: Exploit weaknesses in ORM-generated queries to manipulate application behavior.
+ XXE Injection: Develop a comprehensive understanding of XML External Entity (XXE) injection.
+ Familiarity with the
OWASP Top 10 & OWASP
WSTG
+ Experience in using web
proxies like Burp & ZAP
PREREQUISITES + Knowledge of the different
types of SQLi vulnerabilities
+ Experience in identifying
and exploiting SQLi
vulnerabilities.
LET’S GO!
Introduction to Advanced
Injection Attacks
What Are Injection Attacks?
Injection attacks occur when an application improperly processes untrusted
input, allowing an attacker to inject malicious code or commands into the
application’s execution flow.
LDAP Injection
Manipulates LDAP queries to bypass authentication or retrieve
unauthorized directory information.
Impact: Access to sensitive directory data, system compromise.
ORM Injection
Exploits object-relational mapping (ORM) frameworks by injecting
malicious queries in code.
Impact: Unauthorized data access, corruption, or disclosure.
Prevalence of Injection Attacks
OWASP Top 10 Ranking Real-World Impact
One of the top ranked vulnerabilities in the OWASP Top 10 for TalkTalk (2015): SQL Injection led to the exposure of
several years. (#1 in 2017 and #3 in 2021) 157k customer records.
Injection vulnerabilities are highly prevalent and continue to pose Equifax (2017): Vulnerabilities, including SQL
significant risks to applications worldwide. Injection, contributed to a breach compromising 147
million records.
Prevalence
Injection flaws affect applications across industries: e-commerce, finance,
healthcare, and more.
Prevalence in APIs: Injection vulnerabilities are also common in RESTful
and SOAP APIs.
Exploitation at Scale
Automated tools like SQLMap make it easier for attackers to identify and
exploit injection flaws at scale.
The simplicity and power of injection attacks make them a primary attack
vector.
Our Approach
Introduction To SQL
Injection
Introduction to SQL Injection
● SQL injection (SQLi) is a web application injection vulnerability that
occurs when an attacker injects malicious SQL statements into an
application's input fields.
● This occurs when a web application does not properly validate user
input, allowing an attacker to inject SQL code/queries that can
manipulate the database or gain access to sensitive information.
● For example, suppose a website has a login form that accepts a
username and password. If the website does not properly validate the
user's input, an attacker could enter a malicious SQL statement into the
username field that would allow them to bypass the login process and
gain access to the website's database.
Introduction to SQL Injection
● SQL injection attacks can have serious consequences, including the theft
of sensitive data, unauthorized access to sensitive systems, and even full
system compromise.
● Complex web applications generally use a database for storing data,
user credentials or statistics.
● Content Management Systems (CMSs), as well as simple web pages,
can connect to relational databases such as MySQL, MSSQL, SQL Server,
Oracle, PostgreSQL, and others.
● To interact with databases, entities such as systems operators,
programmers, applications and web applications use the Structured
Query Language (SQL).
History of SQL Injection Attacks
● The term "SQL injection" was coined by Jeff Forristal, also known as
"Rain Forest Puppy", in a paper he presented at the DefCon 8 conference
in 2000.
● Forristal was one of the first security researchers to publicly document
the SQL injection vulnerability and explain how it could be exploited to
gain unauthorized access to databases and sensitive information.
● SQL injection attacks have been around since the early days of web
applications and database-driven websites.
History of SQL Injection Attacks
● SQL injection attacks have been around since the early days of web
applications and database-driven websites. Here's a brief history of
notable SQL injection attacks:
○ In 1998, an attacker known as "Rain Forest Puppy" used SQL injection to gain access to
a U.S. Department of Energy computer network.
○ In 2000, the first publicized SQL injection attack occurred when a hacker used SQL
injection to steal credit card data from the website of e-tailer CD Universe.
○ In 2002, a group of Russian hackers known as "The Helldiggers" used SQL injection to
gain access to the database of the United Nations, resulting in the theft of sensitive
information.
○ In 2012, the LinkedIn data breach occurred, in which attackers used SQL injection to
steal 6.5 million user passwords.
○ In 2015, the Ashley Madison data breach occurred, in which attackers used SQL
injection to steal sensitive user data from the infidelity dating site.
SQL Injection Impact
● Confidentiality - Since SQL databases generally hold sensitive data, loss
of confidentiality is a frequent problem with SQL Injection vulnerabilities.
● Integrity - Just as it may be possible to read sensitive information, it is
also possible to make changes or even delete this information with a
SQL Injection attack.
● Authentication - If poor SQL commands are used to check user names
and passwords, it may be possible to connect to a system as another
user with no previous knowledge of the password.
● Availability - SQL injection attacks can affect the availability of a web
application and database and could take the website down due to
loss/damage of data.
SQL Injection Consequences
● Sensitive data exposure/data breaches - SQL injection attacks can result
in unauthorized access to sensitive data stored in a database. Attackers
may be able to view or steal confidential information, such as customer
data, financial information, and intellectual property.
● Data manipulation - Attackers may be able to modify or delete data
stored in a database, potentially causing data loss or corruption.
● Code execution - If a database user has administrative privileges, an
attacker can gain access to the target system using malicious code.
● Business disruption - Successful SQL injection attacks can lead to
business disruption, as organizations work to restore services and
prevent further attacks.
Demo: SQL Injection Risks
Types of SQL Injection
Vulnerabilities
SQL Injection Types & Subtypes
SQL Injection
Error Based SQLi Union Based SQLi Boolean Based SQLi Time Based SQLi
In-Band SQL Injection
● In-band SQL injection is the most common type of SQL injection attack. It
occurs when an attacker uses the same communication channel to send
the attack and receive the results.
● In other words, the attacker injects malicious SQL code into the web
application and receives the results of the attack through the same
channel used to submit the code.
● In-band SQL injection attacks are dangerous because they can be used
to steal sensitive information, modify or delete data, or take over the
entire web application or even the entire server.
In-Band SQL Injection
During an in-band SQLi attack the penetration tester
finds a way to ask the the web application for desired
information.
Web Application
1
User accounts:
2 admin, john, mike
In-Band SQL Injection Subtypes
● In-band SQL injection can be further divided into two
subtypes/exploitation techniques:
○ Error-based SQL injection: In error-based SQL injection, the attacker injects
SQL code that causes the web application to generate an error message. The
error message can contain valuable information about the database schema
or the contents of the database itself, which the attacker can use to further
exploit the vulnerability.
○ Union-based SQL injection: In union-based SQL injection, the attacker uses
the UNION operator to combine the results of two or more SQL queries into
a single result set. By manipulating the injected SQL code, the attacker can
extract data from the database that they are not authorized to access.
Error Based SQL Injection
During an Error-Based SQL injection attack, the
penetration tester tries to force the DBMS to output an
error message and then uses that information to
perform data exfiltration.
Web Application
1
2 ERROR MESSAGE
Blind SQL Injection
● Blind SQL Injection is a type of SQL Injection attack where an attacker
can exploit a vulnerability in a web application that does not directly
reveal information about the database or the results of the injected SQL
query.
● In this type of attack, the attacker injects malicious SQL code into the
application's input field, but the application does not return any useful
information or error messages to the attacker in the response.
● The attacker typically uses various techniques to infer information about
the database, such as time delays or Boolean logic.
● The attacker may inject SQL code that causes the application to delay for
a specified amount of time, depending on the result of a query.
Blind SQL Injection Subtypes
● Blind SQL injection can be further divided into two subtypes/exploitation
techniques:
○ Boolean-based SQL Injection: In this type of attack, the attacker exploits the
application's response to boolean conditions to infer information about the
database. The attacker sends a malicious SQL query to the application and
evaluates the response based on whether the query executed successfully or
failed.
○ Time-based Blind Injection: In this type of attack, the attacker exploits the
application's response time to infer information about the database. The
attacker sends a malicious SQL query to the application and measures the
time it takes for the application to respond.
Blind SQL Injection (Boolean-based)
An attacker might send a query that asks whether a particular username
exists in the database, and the application's response will either be true
or false. By asking a series of questions and analyzing the responses, the
attacker can slowly build up a picture of the database schema and
contents. Web Application
1
2 TRUE/FALS
E
Out-of-Band SQL Injection
● Out-of-band SQL Injection is the least common type of SQL injection
attack. It involves an attacker exploiting a vulnerability in a web
application to extract data from a database using a different channel,
other than the web application itself.
● Unlike in-band SQL Injection, where the attacker can observe the result
of the injected SQL query in the application's response, out-of-band SQL
Injection does not require the attacker to receive any response from the
application.
● The attacker can use various techniques to extract data from the
database, such as sending HTTP requests to an external server
controlled by the attacker or using DNS queries to extract data.
Out-of-Band SQL Injection
An Out-Of-Band attack is classified by having two different communication
channels, one to launch the attack and the other to gather the results. For example,
the attack channel could be a web request, and the data gathering channel could
be monitoring HTTP/DNS requests made to a service you control.
Web Application
1
Attacker SQLi Payload
Web Server
Database
SQL Query
Interne
t
Response sent back via
alternate communication
2 channel
Hunting for SQL Injection
Vulnerabilities
Finding SQL Injection Vulnerabilities
● In order to exploit a SQL injection vulnerability, you first have to identify
an injection point within the web application, after which, you can craft a
SQL query/payload that can be injected in an injectable parameter.
● The most straightforward way to find SQL injection vulnerabilities within
a web application is to probe its inputs with special characters that are
known to cause the SQL query to be syntactically invalid therefore
forcing the web application to return an error.
Note: Not all the inputs in a web application interact with the database. It
is therefore recommended to perform reconnaissance on the web
application and categorize the different input parameters.
Common Injectable Fields
● SQL injection vulnerabilities can exist in various input fields within an
application. Here are some common examples of injectable fields where
SQL injection vulnerabilities can be found:
○ Login forms: The username and password fields in a login form are common
targets for SQL injection attacks. If the application does not properly validate
or sanitize the input, an attacker may be able to manipulate the SQL query
used for authentication.
○ Search boxes: Input fields used for searching within an application are
potential targets for SQL injection. If the search query is directly incorporated
into a SQL statement without proper validation, an attacker can inject
malicious SQL code to manipulate the query and potentially access
unauthorized data.
Common Injectable Fields
○ URL parameters: Web applications often use URL parameters to pass data
between pages. If the application uses these parameters directly in
constructing SQL queries without proper validation and sanitization, it can be
susceptible to SQL injection attacks.
○ Form fields: Any input fields in forms, such as registration forms, contact
forms, or comment fields, can be vulnerable to SQL injection if the input is
not properly validated and sanitized before being used in SQL queries.
○ Hidden fields: Hidden fields in HTML forms can also be susceptible to SQL
injection attacks if the data from these fields is directly incorporated into SQL
queries without proper validation.
○ Cookies: In some cases, cookies containing user data or session information
may be used in SQL queries. If the application does not validate or sanitize
the cookie data properly, it can lead to SQL injection vulnerabilities.
Finding SQL Injection Vulnerabilities
Identifying SQL injection vulnerabilities typically involves a combination of
manual testing and automated scanning. Here are some methods to help
identify SQL injection vulnerabilities:
Manual Testing
● Manual testing with malicious input: Try injecting SQL statements or
special characters into input fields such as login forms, search boxes, or
URL parameters. Look for unexpected behavior, error messages, or any
indications that the input is being interpreted as SQL code.
● Error-based testing: Submitting intentionally malformed input to trigger
SQL errors can reveal underlying database errors or SQL statements
being executed.
Finding SQL Injection Vulnerabilities
● Union-based testing: Injecting UNION SELECT statements into input
fields can help determine if the application is vulnerable to SQL injection
by retrieving data from other tables or databases.
● Boolean-based testing: Manipulating the application's response based
on Boolean conditions can help determine if the application is
vulnerable. For example, injecting ' OR '1'='1 in a login form to bypass
authentication.
● Time-based testing: Injecting time-delayed SQL queries can reveal if the
application is vulnerable to time-based blind SQL injection by observing
delays in the server response.
Finding SQL Injection Vulnerabilities
● Input validation and sanitization: Review the application's code and
check if proper input validation and sanitization techniques are
implemented. Look for instances where user input is directly
concatenated into SQL queries without proper sanitization or prepared
statements.
Automated Testing
● Automated vulnerability scanners: Utilize automated tools such as
SQLMap, OWASP ZAP, or Burp Suite to scan for SQL injection
vulnerabilities. These tools can help automate the process of identifying
and exploiting SQL injection vulnerabilities in web applications.
SQL Injection Testing
● Testing an application input for SQL injection will typically involve trying
to inject:
Note: Always test one injection at a time! Otherwise, you will not be able
to identify which injection vector/payload is successful.
Integer Based Injection
● Integer based parameter injection - In some cases, SQL queries will
treat the injectable parameter as an integer depending on the data type.
URL — http://site.com/user.php?id=1
AND 1 - True
AND 0 - False
AND true - True
And false - false
1-false - Returns 1 if vulnerable
1-true - Returns 0 if vulnerable
1*56 - Returns 56 if vulnerable
1*56 - Returns 1 if not vulnerable
String Based Injection
● String based parameter injection - In some cases, the SQL queries will
treat the injectable parameter as a string.
URL — http://site.com/user.php?id=alexis
If the application does not handle the single quote character in the input
correctly, an attacker can inject a single quote to terminate the string literal
and add their malicious SQL code. Here's an example of an attack payload:
' OR '1'='1'; --
Exploiting The Single Quote (‘)
● The modified query would become:
● In this example, the single quote ' is injected before the payload ' OR
'1'='1'; --. The purpose of the injected single quote is to close the string
literal that encompasses the username input field.
● Then, the attacker's injected SQL code ' OR '1'='1'; -- causes the
condition '1'='1' to evaluate to true, effectively bypassing the
authentication mechanism.
Database Fingerprinting
● Every DBMS/RDBMS responds to incorrect/erroneous SQL queries with
different error messages.
You have an error in your SQL syntax. Check the manual that corresponds
to your MySQL server version for the right syntax to use near [query
snippet]
Common SQLi Payloads
' ‘ or ‘1’=‘1 --
-- or #
'' ‘ or (‘1’=‘1’ -–
' OR '1
` Admin’ –-
' OR 1 -- -
`` Admin’ #
" OR "" = "
, ‘ having 1=1 -–
" OR 1 = 1 -- -
" ‘ or b=b -–
' OR '' = '
"" ‘ or 1=1#
'='
/ ‘ or 2 > 1 -–
'LIKE'
// ‘ or test=test-–
'=0--+
\ ‘) or ‘1’=‘1 -–
OR 1=1
\\ ‘ or 10-5=5 -–
' OR 'x'='x
; ‘ or sqltest=sql+test-–
' AND id IS NULL; --
' or " ‘’ or a=a –
Admin’--
Database Specific SQLi Payloads
--MySQL
' OR '1'='1’ #
Cheat Sheets
● https://github.com/payloadbox/sql-injection-payload-list
● https://portswigger.net/web-security/sql-injection/cheat-sheet
OWASP
● OWASP WSTG: https://owasp.org/www-project-web-security-
testing-guide/
Finding SQL Injection Vulnerabilities
Manually
Demo: Finding SQL Injection
Vulnerabilities Manually
Exploiting Error-Based SQL
Injection Vulnerabilities
SQL Injection Types & Subtypes
SQL Injection
Error Based SQLi Union Based SQLi Boolean Based SQLi Time Based SQLi
In-Band SQL Injection
● In-band SQL injection is the most common type of SQL injection attack. It
occurs when an attacker uses the same communication channel to send
the attack and receive the results.
● In other words, the attacker injects malicious SQL code into the web
application and receives the results of the attack through the same
channel used to submit the code.
● In-band SQL injection attacks are dangerous because they can be used
to steal sensitive information, modify or delete data, or take over the
entire web application or even the entire server.
In-Band SQL Injection
During an in-band SQLi attack the penetration tester
finds a way to ask the the web application for desired
information.
Web Application
1
User accounts:
2 admin, john, mike
Error-Based SQL Injection
● Error-based SQL injection is a technique used by attackers to exploit SQL
injection vulnerabilities in web applications.
● It relies on intentionally causing database errors and using the error
messages returned by the database to extract information or gain
unauthorized access to the application's database.
● The error message can contain valuable information about the database
schema or the contents of the database itself, which the attacker can use
to further exploit the vulnerability.
● Identifying error-based SQL injection vulnerabilities involves testing the
web application to determine if it is susceptible to this type of attack.
Error-Based SQL Injection
Methodology
● Identify a vulnerable parameter: Find a parameter in the web application
that is vulnerable to SQL injection, typically through user input fields,
URL parameters, or form inputs.
● Inject malicious SQL code: Craft a payload that includes SQL statements
designed to trigger a database error. This can involve appending invalid
SQL syntax or manipulating existing queries.
● Observe error messages: Submit the payload to the vulnerable
parameter and observe the error message returned by the database. The
error message can provide valuable information about the structure and
content of the database.
Error-Based SQL Injection
Methodology
● Extract data: Modify the payload to extract specific information from the
database by leveraging the error messages. This can include retrieving
usernames, passwords, or other sensitive data stored in the database.
● Exploit the vulnerability: Exploit the information gathered through error-
based SQL injection to further exploit the application, gain unauthorized
access, or perform other malicious actions.
Error Based SQL Injection
During an Error-Based SQL injection attack, the
penetration tester tries to force the DBMS to output an
error message and then uses that information to
perform data exfiltration.
Web Application
1
2 ERROR MESSAGE
Demo: Exploiting Error-Based SQL
Injection Vulnerabilities
Exploiting Union-Based SQL
Injection Vulnerabilities
SQL Injection Types & Subtypes
SQL Injection
Error Based SQLi Union Based SQLi Boolean Based SQLi Time Based SQLi
Union-Based SQL Injection
● Union-based SQL injection is a type of SQL injection attack that exploits
the ability to use the UNION operator in SQL queries.
● It occurs when an application fails to properly validate or sanitize user
input and allows an attacker to inject malicious SQL code into the query.
● The UNION operator is used in SQL to combine the results of two or
more SELECT statements into a single result set.
● It requires that the number of columns and their data types match in the
SELECT statements being combined.
● In a union-based SQL injection attack, the attacker injects additional
SELECT statements through the vulnerable input to retrieve data from
other database tables or to extract sensitive information.
Union-Based SQL Injection
Here's an example to illustrate the concept. Consider the following
vulnerable code snippet:
SELECT id, name FROM users WHERE id = '<user_input>'
The injected payload modifies the original query to retrieve the credit card
numbers along with a custom value ('hack') from the credit_cards table. The
double dash at the end is used to comment out the remaining part of the
original query.
Union-Based SQL Injection
If the application is vulnerable to union-based SQL injection, the modified
query would become:
The database would then execute this modified query, and the result would
include the credit card numbers alongside the original user data. The attacker
can subsequently extract this sensitive information.
Union-Based SQL Injection
Methodology
● Identify user inputs: Determine the inputs on the application that are
used in database queries. These inputs can include URL parameters,
form fields, cookies, or any other user-controllable data.
● Test inputs for vulnerability: Inject a simple payload, such as a single
quote (') or a double quote ("). If the application produces an error or
exhibits unexpected behavior, it might indicate a potential SQL injection
vulnerability.
● Identify vulnerable injection points: Manipulate the injected payload to
check if the application responds differently based on the injected data.
You can try injecting various payloads like UNION SELECT statements or
boolean conditions (e.g., ' OR '1'='1) to see if the application behaves
differently based on the response.
Union-Based SQL Injection
Methodology
● Confirm the presence of a vulnerability: Once you have identified a
potential injection point, you need to confirm if it is vulnerable to Union-
based SQL injection. To do this, you can inject a UNION SELECT
statement and observe the application's response. If the response
includes additional columns or unexpected data, it is likely vulnerable to
Union-based SQL injection.
● Enumerate the database: Exploit the Union-based SQL injection
vulnerability to enumerate the database structure. Inject UNION SELECT
statements with appropriate column names and table names to retrieve
information about the database schema, tables, and columns. You can
use techniques like ORDER BY or LIMIT clauses to retrieve specific
information.
Demo: Exploiting Union-Based
SQL Injection Vulnerabilities
Exploiting Boolean-Based SQL
Injection Vulnerabilities
Demo: Exploiting Boolean-Based
SQL Injection Vulnerabilities
Exploiting Time-Based SQL
Injection Vulnerabilities
SQL Injection Types & Subtypes
SQL Injection
Error Based SQLi Union Based SQLi Boolean Based SQLi Time Based SQLi
Time-Based SQL Injection
● Time-based SQL injection is a technique used to exploit vulnerabilities in
a web application's database layer by manipulating the SQL queries to
introduce delays.
● This type of attack relies on the ability to inject malicious SQL code that
causes the application to pause or delay its response, revealing
information about the database structure or data.
● The basic idea behind time-based SQL injection is to inject SQL
statements that force the application to wait for a certain period of time
before responding. The attacker can then infer information about the
database by measuring the delay in the application's response.
Time-Based SQL Injection
Here's an example of a time-based SQL injection attack:
Assume we have a vulnerable login form where a user provides their
username and password, and the application performs a SQL query to
validate the credentials:
SELECT * FROM users WHERE username = '[username]' AND password =
'[password]';
An attacker can exploit this vulnerability by injecting malicious SQL code that
introduces a delay. For example, the attacker might provide the following
input as the username:
7 - Advanced Testing
● Test for Out-of-Band (OOB) SQL Injection using DNS or HTTP
callbacks (e.g., Burp Collaborator).
● Look for second-order vulnerabilities by injecting payloads that are
executed in later queries.
8- Automated Testing
● Use tools like SQLMap, Burp Suite, or OWASP ZAP to perform
automated scans.
● Confirm findings manually to avoid false positives.
SQLi Checklist
Step Description Example
Identify Input Points Locate all inputs that interact with the database. Form fields, URL parameters, cookies.
Basic Payload Testing Test for basic SQL Injection payloads. ' OR '1'='1 --
Error-Based Testing Inject payloads to cause SQL errors and observe responses. ' OR SLEEP(5) --
Boolean-Based Testing Test responses with true/false conditions. ' AND 1=1 --, ' AND 1=2 --
Time-Based Testing Test for delays to identify blind SQL Injection. ' OR IF(1=1, SLEEP(5), 0) --
Union-Based Testing Test for column count and data extraction using UNION. UNION SELECT NULL --, UNION SELECT 1,2--
OOB Testing Use out-of-band techniques to trigger DNS/HTTP callbacks. Burp Collaborator, dnslog.cn
Second-Order Testing Test for stored SQL Injection triggered in later queries. Inject payloads into persistent fields.
Tool-Based Scanning Use automated tools to test for SQL Injection. SQLMap, OWASP ZAP
SQLMap Essentials
SQLMap
What is SQLMap? Links & Resources
SQLMap is an open-source tool that automates the process
of detecting and exploiting SQL Injection vulnerabilities in SQLMap Official Website:
https://sqlmap.org/
web applications.
SQLMap GitHub:
What is it used for? https://github.com/sqlmap
● Automates and simplifies the identification and project/sqlmap
exploitation of SQL Injection vulnerabilities.
● Provides an efficient, automated solution for extracting
data from vulnerable applications.
● Supports fine-grained and nuanced techniques or
queries allowing penetration testers to perform in-
depth database assessments and exfiltration of data.
SQLMap
Supported Databases
● Relational Databases: MySQL, PostgreSQL, Microsoft SQL Server, Oracle, SQLite,
and MariaDB.
● NoSQL Databases: Some experimental support for MongoDB and CouchDB.
Key Features
● Automatic detection of SQL Injection types (error-based, time-based, Boolean-
based, UNION-based, etc.).
● Advanced fingerprinting to identify the target DBMS.
● Exploitation features: data extraction, command execution, privilege escalation,
and database takeover.
● Compatibility with GET, POST, and HTTP headers for injection testing.
SQLMap
SQLMap can be used to both detect and exploit SQL injection vulnerabilities.
When performing a pentest It is strongly recommended that you test your injections
manually first, after which, you can extend your testing with SQLMap
If you go fully automatic, SQLMap could choose to use an inefficient exploitation strategy or
even crash the remote service!
Always begin with identifying an SQLi vulnerability manually first, then verify the presence
and type of vulnerability with SQLMap. SQLMap will tell you more about a SQLi
vulnerability when used this way.
How SQLMap Works
SQLMap automates the testing and exploitation of SQL Injection vulnerabilities by injecting
payloads into input points, analyzing responses, and leveraging discovered vulnerabilities to
extract data or perform advanced exploitation.
SQLMap’s Workflow
1 - Identify Injection Points
SQLMap scans the target URL or parameters to find where SQL Injection might be possible.
sqlmap -u "http://example.com/login.php?id=1"
What Happens: SQLMap sends test payloads like ' OR '1'='1 and analyzes the
response to detect potential SQL Injection.
How SQLMap Works
2 - Fingerprint/Identify the Database
SQLMap identifies the DBMS in use to tailor its attack methods.
OUTPUT
[INFO] The back-end DBMS is MySQL (version: 5.7)
How SQLMap Works
3 - Inject Payloads to Confirm Vulnerability
SQLMap tests for different types of SQL Injection (e.g., error-based, time-
based, Boolean-based).
OUTPUT
Available databases:
[1] information_schema
[2] users_db
How SQLMap Works
5 - Advanced Exploitation
SQLMap can escalate attacks to gain OS-level access or execute commands.
What Happens: SQLMap launches an OS shell if the vulnerability allows for command
execution.
SQLMap Basic Syntax
SQLMap Basic Syntax
The basic structure of an SQLMap command is:
SQLMap needs to know the vulnerable URL and the parameter to test for a SQLi.
However, It could even go fully automatic without providing any specific
parameter to test.
sqlmap -u "http://example.com/product.php?id=1"
SQLMap Basic Syntax
Specifying HTTP Methods and Data
Scenario: Targeting a login form that sends POST requests and includes form data in
the body.
What Happens: SQLMap tests the POST parameters (username and password) for
vulnerabilities.
Database Enumeration
Extracting the Database Banner
The very first step of most SQLi attack involves grabbing the database banner.
By using the --banner switch, you can retrieve the database banner; this is
extremely helpful both to test your injection and to have a proof of the exploitability of
the vulnerability to include in your report.
OUTPUT
Available databases:
[1] information_schema
[2] users_db
Database Enumeration
Retrieve Database Information
Command to List Tables in a Database:
OUTPUT
Tables in users_db:
[1] user_credentials
[2] user_profiles
Database Enumeration
Retrieve Database Information
Command to List Tables and columns in a Database:
Dumping Columns
sqlmap -u <target> -D <database> -T <table> -C <columns
list> --dump <other options>
Database Enumeration
Retrieve Database Information
Dump specific table data:
OUTPUT
Dumping table 'user_credentials':
+------------+----------+
| username | password |
+------------+----------+
| admin | pass123 |
| user1 | secret42 |
+------------+----------+
Custom Authentication Methods
Authentication and Custom Headers
Scenario: Test applications requiring login credentials or headers.
What Happens: SQLMap uses the session cookie to authenticate and proceed with
testing.
Summary of Common Options
Option Description
-D, -T, -C DBMS database, table(s), or column(s) to enumerate (NOTE: These are separate options)
SQLMap Advanced Usage
Technique Options
Specifying SQLi Techniques
The --technique option allows you to specify which SQL Injection techniques SQLMap should use
during its tests.
By default, SQLMap attempts all techniques in sequence. However, if you want to focus on specific
techniques for efficiency or targeting, you can use this option.
S Stacked Queries Executes multiple SQL statements in one query (if supported).
What Happens: SQLMap sends payloads like ' AND 1=1 -- (true) and ' AND 1=2
-- (false) to determine if the application evaluates conditions based on input.
Technique Options
Example: Error-Based
What Happens: SQLMap injects payloads that trigger error messages, such as:
Levels:
● 1 (Default): Minimal and basic testing, limited to GET/POST parameters.
● 2: Includes HTTP headers, such as cookies and user-agent strings.
● 3: Tests additional parameters like referers, custom headers, and other
possible injection points.
Detection Options
The --level option (Examples)
Level 1 (Default): Only the id parameter in the URL is tested.
sqlmap -u "http://example.com/product.php?id=1" --level=1
Level 2: SQLMap also tests headers like Cookie, User-Agent, and Referer
sqlmap -u "http://example.com/product.php?id=1" --level=2
Levels:
● 1 (Default): Low risk. Only non-destructive tests are performed.
● 2: Medium risk. Includes queries that could introduce minor server
impacts.
● 3: High risk. Includes potentially disruptive actions like stacked queries or
time-intensive operations.
Detection Options
The --risk option (Examples)
Level 1 (Default): SQLMap runs non-intrusive payloads like Boolean-based tests or simple UNION
queries.
sqlmap -u "http://example.com/product.php?id=1" --risk=1
Level 2: SQLMap adds moderately intrusive tests, such as time-based payloads or larger UNION
queries.
sqlmap -u "http://example.com/product.php?id=1" --risk=2
Level 3: SQLMap executes high-risk payloads, including stacked queries and resource-intensive
time-based injections.
sqlmap -u "http://example.com/product.php?id=1" --risk=3
Detection Options
Combining --level and --risk options (Examples)
You can use both options together to fine-tune SQLMap’s testing scope and intensity.
What Happens:
● SQLMap tests all possible injection points, including headers, cookies, and
additional parameters.
● It executes high-risk payloads like stacked queries, which may alter the database
or stress the server.
Considerations
The --risk parameter lets you fine-tune how dangerous your injections can be.
Use this parameter when needed only after carefully studying the web application
you are testing!
Generally speaking, launching SQLMap with both a high level and risk and letting
it automatically test for injection points is very unprofessional and will probably
generate issues to your client's infrastructure!
Using Intercepted Requests
Using Intercepted
Requests
Another way to use
SQLMap is by saving a
request intercepted with
Burp Proxy to a file.
Using Intercepted Requests
Using Intercepted Requests
After saving an intercepted request, SQLMap allows you to specify it as a scan
option:
http://example.com/product.php?id=1
Attack Flow
1 - Set Up a DNS Server
The attacker uses a service like dnslog.cn or a custom DNS server to monitor incoming DNS queries.
2 - Payload Injection
The attacker injects the following payload in the id parameter:
This payload uses the LOAD_FILE function (MySQL) to force the database to resolve the attacker-
controlled domain attacker.dnslog.cn.
DNS-Based OOB SQL Injection
3 - Database Processing
The database executes the query and attempts to access the domain attacker.dnslog.cn.
Query: attacker.dnslog.cn
DNS-Based OOB SQL Injection
HTTP-Based OOB SQL Injection
HTTP-Based OOB SQL Injection
Scenario: A website has a vulnerable search parameter in its POST request:
POST /search
Content-Type: application/x-www-form-urlencoded
search=keyword
Attack Flow
1 - Set Up an HTTP Server
The attacker uses a service like Burp Collaborator or Ngrok to host an HTTP endpoint for capturing
callbacks.
HTTP-Based OOB SQL Injection
2 - Payload Injection
The attacker injects the following payload in the search parameter:
This payload uses the xp_cmdshell function (MSSQL) to send a request to the attacker's server,
including database version information in the query string.
3 - Database Processing
The database executes the payload, sending an HTTP request to http://attacker.com.
HTTP-Based OOB SQL Injection
4 - Capturing the Request
The attacker observes the HTTP request in their server logs:
The exploitation occurs in real-time during the initial interaction, allowing the attacker
to observe the application's response and adjust their payloads dynamically.
This direct feedback loop is a hallmark of first-order SQL Injection, making it distinct from
delayed or stored attack types like second-order SQL Injection.
First-Order SQLi Example
1. The attacker submits or injects a
malicious payload into a vulnerable
application input point (injection
point).
In the following slides, we’ll explore how this scenario unfolds and examine a
typical use case.
Second-Order SQL Injection
What is Second-Order SQL Injection?
Instead, it is stored in the database and executed later when a different query
or functionality of the application processes it.
This type of attack exploits scenarios where user inputs are sanitized
during the initial query but are later used unsanitized in a subsequent
database operation.
Second-Order SQL Injection
1. The attacker submits his malicious request.
2 - Triggering Phase
At a later point, the application retrieves the stored data and uses it in another database
query without proper sanitization.
The malicious payload is executed during this secondary operation.
3 - Impact
Data leakage, privilege escalation, or system compromise can occur, depending on the
query’s purpose.
Example of a Second-Order SQL
Injection Attack
Second-Order SQLi Example
Scenario: A web application has a registration feature that stores user information in a
database. Later, an admin panel fetches user details for display or validation.
1 - Vulnerable Workflow
The application sanitizes inputs during registration (e.g., escapes special characters).
However, the application retrieves and concatenates the stored user input unsafely in subsequent
queries.
2 - Payload Injection
The attacker registers an account with a malicious username:
The registration form sanitizes the input and stores it as a string in the database.
Second-Order SQLi Example
3 - Triggering Phase
When an admin views the user details in the admin panel, the application concatenates
the stored username into a new query without proper sanitization:
SELECT * FROM users WHERE username = ''); DROP TABLE users; --';
if (result) {
// Login successful
} else {
// Login failed
}
NoSQL Injection Example
● In this example, the application constructs a MongoDB query using user-
supplied values for the username and password fields. If an attacker
intentionally provides a specially crafted value, they could potentially
exploit a NoSQL injection vulnerability.
● For instance, an attacker might enter the following value as the
username parameter:
You can learn more about NoSQL Injection and find additional payloads here:
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/NoSQL%
20Injection
Demo: MongoDB NoSQL
Injection
NoSQL Injection: Authentication
Bypass
Lab Demo: NoSQL Injection:
Authentication Bypass
Introduction to LDAP
What is LDAP?
The Lightweight Directory Access Protocol (LDAP) is a protocol used to
modify and query directory services over TCP/IP.
3269 Global Catalog LDAPS Global Catalog over secure LDAP (SSL/TLS).
How Web Apps Use LDAP
Web applications use LDAP to:
● Authenticate Users: Validate usernames and passwords against directory
entries.
● Authorize Access: Check user roles and permissions for specific resources.
● Query Directory Data: Retrieve user or organizational information from the
directory.
Entries:
● These are individual records that represent objects, such as users, groups, or
devices.
● They are defined by a unique Distinguished Name (DN), which specifies the
entry's position in the tree.
Example:
cn (common name): John Doe
mail: [email protected]
LDAP Directory Tree Example
Root
dc=example,dc=com
├── ou=Users
│ ├── cn=John Doe Entries
OUs
│ ├── cn=Jane Smith
└── ou=Groups
├── cn=Admins
├── cn=Developers
LDAP Directory Structure
Before we move on to explore LDAP syntax and it’s capabilities, let’s take
a closer look at directory databases which are inherent component of
LDAP implementations.
LDAP Protocol Role: LDAP defines how directory data is accessed and managed (e.g., querying, adding,
modifying entries).
- It works with the hierarchical structure but does not dictate or enforce the specific organization of the
directory.
Directory Services Role: The structure itself is defined and maintained by the directory service (e.g.,
Microsoft Active Directory, OpenLDAP).
- It is organized as a Directory Information Tree (DIT), where entries are arranged hierarchically.
Hierarchy Example: The hierarchical structure (e.g., dc=example,dc=com) is created and managed by
the directory service, while the LDAP protocol provides the means to interact with it.
LDIF Format
Objects in directory databases accessed via LDAP are stored in LDIF.
The LDAP Data Interchange Format (LDIF) is a standard plain-text format used to
represent directory entries or perform directory operations (e.g., adding, modifying,
or deleting entries).
A directory database can support LDIF by defining its assumptions in a LDIF file. It
can be a plaintext file simply containing directory data representation as well as
LDAP commands. They are also used to read, write, and update data in a directory.
Sample LDIF File
Lines 1-3: We are defining the top-level domain "org".
(|(sn=a*)(cn=b*))
(& (objectclass=printer)(type=Canon*))
As a result, if any Canon printers are available, icons of these printers are
shown to the client. Otherwise, no icon is present. This is an exemplary
true/false situation.
Examples
Bypassing Authentication
Typical LDAP Query for Authentication ({username} and {password} are user inputs.)
(&(uid={username})(password={password}))
If user input is not sanitized, an attacker can inject the following as the username:
*)(uid=*)
Resulting query:
(&(uid=*)(uid=*)(password={password}))
*)(objectClass=*)
Resulting query:
(&(uid=*)(objectClass=*)(password={password}))
(&(uid={username})(password={password}))
Attacker Input:
● Username: *)(uid=*)
● Password: anything
How *) Works in LDAP Injection
Payloads
Authentication Bypass Example
Resulting query
(&(uid=*)(uid=*)(password=anything))
The *) ends the uid={username} filter early and adds a new wildcard filter (uid=*),
causing the query to match all users, bypassing authentication.
Lab Demo: LDAP Injection
Introduction to Object-Relational
Mapping (ORM)
Object-Relational Mapping (ORM)
Enhance Security
● ORM frameworks often include mechanisms like parameterized queries, which help
mitigate vulnerabilities like SQL Injection.
Commonly Used ORM Frameworks
ORM Framework Language Description
SQLAlchemy Python Versatile and widely used ORM, supports advanced queries and raw SQL.
Hibernate Java The most popular ORM for Java, with extensive features and JPA integration.
Entity Framework .NET Microsoft’s official ORM, fully integrated into the .NET ecosystem.
Django ORM Python Built-in ORM for Django, focusing on simplicity and ease of use.
Eloquent ORM PHP Laravel’s intuitive ORM, emphasizing simplicity and developer productivity.
How is ORM Used in Web Apps?
Simplified Database Access
● ORM frameworks provide an API to interact with the database using methods and
objects, reducing the need for manual SQL.
● Example frameworks: SQLAlchemy (Python), Hibernate (Java), Active Record (Ruby on
Rails).
Advantages of ORM
● Reduces boilerplate code.
● Provides database-agnostic query support.
● Improves maintainability by centralizing database logic.
How ORM Works
Entity-to-Table Mapping
Each class in the application corresponds to a database table.
Each attribute of the class represents a column in the table.
The goal is to highlight how ORM abstracts SQL queries and allows
developers to work with data using object-oriented principles.
ORM in Action
Without ORM (Raw SQL):
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(String, nullable=False)
email = Column(String, nullable=False)
engine = create_engine('sqlite:///example.db')
Session = sessionmaker(bind=engine)
session = Session()
engine = create_engine('sqlite:///example.db')
Session = sessionmaker(bind=engine)
session = Session()
Example:
User.query.filter(f"username = '{username}' AND password =
'{password}'").all()
What Causes ORM Injection
Vulnerabilities?
Use of Raw SQL in ORM
Many ORM frameworks allow developers to write raw SQL for complex queries. If raw
SQL includes unsanitized user input, it becomes vulnerable.
Developer Misuse
Developers may inadvertently bypass ORM safeguards or misuse query-building
features, leading to vulnerabilities.
ORM Injection Example
ORM Injection Example
Scenario: An application uses an ORM to authenticate users by verifying their
username and password.
Vulnerable Code:
username = request.args.get('username')
password = request.args.get('password')
# Vulnerable query
user = User.query.filter(f"username = '{username}' AND
password = '{password}'").all()
ORM Injection Example
Attacker’s Payload:
● Username: admin' OR '1'='1
● Password: (any value)
The condition OR '1'='1' always evaluates to true, allowing the attacker to bypass
authentication and log in as the first user in the database.
Introduction to XML
What is XML?
XML (eXtensible Markup Language) is a markup language used to structure,
store, and transport data in a readable and platform-independent format.
It defines a set of rules for encoding documents in a format that is both human-
readable and machine-readable.
XML plays an important role in many different IT systems and is often used for
distributing data over the Internet.
Despite the arrival of "newer" data structure format languages, such as YAML and
JSON, the eXtensible Markup Language remains both alive and a prevalent
alternative for exchanging data over the internet.
What is XML?
XML is a markup language just like HTML, with some differences;
➔ XML was designed to transport data and HTML was designed to display/render
data.
➔ XML tags are not predefined like HTML tags.
XML has many practical use cases in web applications. These typically include PDF,
RSS, OOXML (.docx, .pptx, etc.), SVG, and finally networking protocols, such as
XMLRPC, SOAP, WebDAV and so many others.
In this section of the course, we are going to explore the primary attack techniques
against XML data structures. More specifically, we’ll explore the primary injection-
based XML vulnerabilities like XML TAG Injection and XML External Entities.
How XML Works
Data Representation
➔ XML organizes data hierarchically in a tree structure.
➔ Each piece of data is enclosed in tags that describe its meaning.
Use Cases
➔ Data storage and transport (e.g., between systems or applications).
➔ Configuration files for software.
➔ Web services communication (e.g., SOAP).
Processing
➔ Applications parse XML using an XML parser.
➔ The parsed data is used for operations like database updates, rendering content, or
communication between systems.
XML Tree Structure
XML documents form a tree structure that starts at "the root" and branches to "the leaves".
https://www.w3schools.com/xml/xml_tree.asp
XML Tree Structure
XML Tree Structure <?xml version="1.0" encoding="UTF-8"?>
<bookstore>
The prolog defines the XML version and the <book category="cooking">
character encoding. <title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
The next line is the root element of the <price>30.00</price>
document: <bookstore> </book>
<book category="children">
<title lang="en">Harry Potter</title>
The next line starts a <book> element. <author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
The <book> elements have 4 child elements: </book>
<book category="web">
<title>, <author>, <year>, <price>. <title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
https://www.w3schools.com/xml/xml_tree.asp
XML Syntax
Start and End Tags
➔ Every element has an opening and closing tag.
<name>John Doe</name>
Attributes
➔ Elements can have attributes for metadata.
An XML element is everything from (including) the element's start tag to (including) the element's end tag.
An element can contain: Text, Attributes, other elements or a mix of the aforementioned.
XML Syntax
Nesting
➔ Elements can be nested to represent hierarchical data.
<user>
<name>John Doe</name>
<email>[email protected]</email>
</user>
Root Element
➔ XML documents must have a single root element that encapsulates all other elements.
<data>
<user>John Doe</user>
</data>
XML Syntax Considerations
➔ XML documents must contain one root element that is the parent of all other
elements.
➔ XML Prolog: The XML prolog is optional. If it exists, it must come first in the
document.
<?xml version="1.0" encoding="UTF-8"?>
➔ XML tags are case sensitive. The tag <Letter> is different from the tag
<letter>.
➔ In XML, it is illegal to omit the closing tag. All elements must have a closing
tag.
Well Formed XML
Technically, XML is derived from the SGML standard and is the same standard on
which HTML* is based, however, with a lightweight implementation. This means that
some SGML-based features, such as unclosed end-closed tags, etc. are not
implemented.
Nevertheless, there is a Document Type Definition (DTD) that is used to define the
legal building blocks of an XML document. These blocks are as follows:
What is an XML DTD (Document Type
Definition)?
An XML document with correct syntax is called "Well Formed" and an XML
document validated against a DTD is both "Well Formed" and "Valid".
An XML DTD (Document Type Definition) defines the structure, elements, and
attributes of an XML document.
Example of XML Injection: A vulnerable application parses XML input from the user:
<user>
<username>admin</username>
<password>password123</password>
</user>
Key Characteristics
Example of XML Injection: An attacker injects a payload:
<user>
<username>admin</username>
<password>' OR '1'='1</password>
</user>
XML Data Manipulation Altering XML data to manipulate application behavior. Data tampering, bypassing authentication.
XML Tag Injection Injecting new or modified XML tags into the document. Privilege escalation, XML parsing issues.
XPath Injection Injecting malicious XPath expressions. Unauthorized data access, authentication bypass.
XML External Entity (XXE) Exploiting external entities in XML processing. File disclosure, SSRF, DoS.
Billion Laughs Attack Recursive entities causing resource exhaustion. Denial of Service (DoS).
XML Attribute Injection Injecting or manipulating attributes in XML. Privilege escalation, data tampering.
XML Schema Poisoning Manipulating XML schemas for malicious purposes. Validation bypass, injection of unexpected data.
XML Bombs Large or deeply nested XML documents to overload servers. Denial of Service (DoS).
XInclude Injection Including malicious external content in XML. File inclusion, sensitive information disclosure.
XML Content Manipulation Injecting malicious content to disrupt or exploit application logic. Application misbehavior, logic exploitation.
XML Tag Injection
XML Tag Injection
XML Tag Injection is a specific type of XML Injection where the attacker adds or
modifies XML tags in the input. It focuses on manipulating the structure of the XML
document by injecting new or unexpected tags.
Key Characteristics:
➔ Focuses on injecting tags rather than data or attributes.
➔ Often used to modify the XML document structure, disrupt parsing, or trigger
unexpected behavior in the application.
Example #1 - XML Tag Injection
An attacker injects:
<user>
<username>admin</username>
<role><admin/></role>
</user>
The injected <admin/> tag could trick the application into assigning the attacker
administrative privileges.
Example #2 - XML Tag Injection
If either updating his profile or <?xml version="1.0"?>
<users>
during the registration process,
<user>
Joe is able to inject some XML
metacharacters within the <username>admin</username>
document. <password>secretpassword</passwor
d>
Then, if the application fails to <group>admin</group>
</user>
contextually validate data, it is <user>
vulnerable to XML Injection. <username>joe</username>
<password>joespassword</password>
Metacharacters: ' " < > & <group>users</group>
</user>
</users>
Example #2 - XML Tag Injection
In order to test the application <?xml version="1.0"?>
<users>
against XML Injection, we have
<user>
to inject metacharacters,
attempting to break some of <username>admin</username>
the structures. <password>secretpassword</passwor
d>
This will result in throwing <group>admin</group>
</user>
exceptions during XML <user>
parsing. <username>joe</username>
<password>joespassword</password>
<group>users</group>
</user>
</users>
Testing for XML Injection
Testing XML Injection – Single/Double
Quotes
Single and Double quotes are used to define an attribute value in
the tag:
&EntityName;
XXE (XML External Entity) is a vulnerability that occurs when an XML parser
processes external entities referenced in an XML document. This can lead to:
There are two kinds of External Entities: Private and Public. The differences
between the two are based upon the usage.
Let's take a look at some useful techniques that can be used to test/attack
XML parsers and inject XML External Entities.
Resource Inclusion
The first example of XXE exploitation is resource inclusion. In this
scenario, the attacker uploads/crafts a malicious XML file.
Course Summary
Key Concepts - Recap
+ SQL Injection Essentials: Learn to identify and execute common techniques like Error-based, Union-
based, and Boolean-based SQL Injection, along with strategies to prevent them.
+ Attack Automation: Master the use of tools like SQLMap to automate the detection and exploitation
of SQL Injection vulnerabilities.
+ Advanced SQL Injection: Identify and exploit advanced SQL Injection techniques like OOB and and
Second-order SQLi.
+ NoSQL Injection: Learn how to identify and exploit NoSQL Injection vulnerabilities in databases like
MongoDB.
+ LDAP Injection: Learn how Lightweight Directory Access Protocol (LDAP) systems are exploited
through injection attacks.
+ ORM Injection: Exploit weaknesses in ORM-generated queries to manipulate application behavior.
+ XXE Injection: Develop a comprehensive understanding of XML External Entity (XXE) injection.
Real-World Applications
+ Formative: The techniques covered in this course form the core of a
professional web application penetration tester’s repertoire, equipping you
with the skills to identify critical vulnerabilities like SQL Injection, which is a
perennial OWASP Top 10 threat.
+ Staying Current: This course addresses the growing growing popularity and
adoption of non-relational databases by equipping you with the skills to test
NoSQL databases.
+ Advanced Techniques: This course equips you with an understanding of
modern, complex, multi-stage exploitation techniques like OOB and second-
order attacks.
+ Diverse & Comprehensive: This course reflects the diversity of modern
application architectures, equipping you with the skills to exploit secure
directory services and application frameworks.
Next Steps
+ Apply the concepts learned by engaging in Capture the Flag (CTF)
challenges, bug bounty programs, or simulated environments INE Sonar.
+ Explore the latest OWASP guides, especially those focused on injection-
based attacks, to stay up-to-date on best practices and new
vulnerabilities.
+ Explore advanced injection vulnerabilities like SSI, XPath Injection and
Format String Injection.
+ Start applying your skills to bug bounty programs such as HackerOne,
Bugcrowd, read reports and practice creating detailed reports,
documenting your findings, and proposing actionable remediation steps
for authentication and session management flaws.
THANKS FOR
WATCHING!
EXPERTS AT MAKING YOU AN EXPERT