SKF write-ups
Search…
Java - DoS Regex

Running the app Java

First make sure java is installed on your host machine. After installation, we go to the folder of the lab we want to practice. "i.e /skf-labs/XSS, /skf-labs/RFI/" and run the following command:
1
$ ./mvnw spring-boot:run
Copied!
Now that the app is running let's go hacking!

Reconnaissance

Step1

This application is verfying wether the input from the user is a valid email or not, using regex.
If we insert a valid email and verify it clicking on the button "Verify my email", the application will reply with "Matched".
If the email is not in the format [email protected], the app will return "Not Matched"
The application uses regex to identify a valid email. The regex tries to find every possible combinations of a pattern in the text:
1
Pattern pattern = Pattern.compile("^([0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*@{1}([0-9a-zA-Z][-\\w]*[0-9a-zA-Z]\\.)+[a-zA-Z]{2,9})quot;, Pattern.CASE_INSENSITIVE);
Copied!
A username can have one or more - (dash) or . (dot) in the username and/or letters and number. In the domain we could have one or more - (dash) and letters and/or numbers.
In order to identify a possible DoS we can manipulate the input increasing the legth.

Step 2

Let's use Burp to see if we can trigger the app to "think" more than usual when our input increases the size.
We first send a normal request and monitor the response time in ms
If we increase the leght of our payload we can see that the ms increases: from 8ms to 48ms:
1
Something is happening !!!
Copied!
Let's increase the lenght of the payload even more.The response arrives in 3057ms. As we can see the TTR (Time To Respond) is increases exponentially.

Exploitation

We want to exploit this problem to create a DoS (Denial of Service) and make the app unavailable.
We now send a very long string and wait till the app crashes or exhausts all the resources.

Additional sources

Regular expression Denial of Service - ReDoS Software Attack | OWASP
Export as PDF
Copy link
Edit on GitHub