Step-by-Step Guide to Performing a Buffer Overflow Attack with Example

Rishabh Chauhan
5 min readMay 14, 2021

--

Introduction:

In this guide, we’ll skip the theory and dive straight into the practical steps for performing a buffer overflow attack. While there are many resources available online explaining the concept of buffer overflow, this tutorial focuses on the hands-on process you can follow to exploit a buffer overflow vulnerability. This guide is especially useful for anyone preparing for certifications like OSCP.

1. Install Immunity Debugger

Begin by installing Immunity Debugger, a powerful tool used to analyze and exploit vulnerabilities in software applications.

2. Run the Vulnerable Application

Launch the vulnerable application that you intend to test for buffer overflow vulnerabilities.

3. Attach the Application to Immunity Debugger

Next, attach the running application to Immunity Debugger to monitor its behavior.

4. Resume the Process

Initially, the process will be paused in Immunity Debugger. Press F9 to resume the process, allowing the application to run normally.

5. Fuzzing the Application

Now, we will fuzz the application to identify the vulnerability. For this, create a .asx file containing the payload in the format http://PAYLOAD. The buffer overflow exists in the URL parameter within the .asx file. For example, fuzzing the application with 27,000 As may cause it to crash.

6. Finding the Offset

To pinpoint the exact offset where the crash occurs:

  • Use pattern_generate.rb to create a pattern, passing a length of 27,000 to identify the exact offset for crash.
  • Insert the generated pattern into the .asx file in the format http://PATTERN and save it.
  • Load the file into the application and check if it crashes. Note the EIP register address if it does. If not, increase the pattern length and try again until the crash occurs.
  • Once you have the EIP register address, use pattern_offset.rb to find the exact offset. In this example, the crash occurs at an offset of 17,417.

7. Controlling the EIP

To control the EIP:

  • Insert As equal to the offset value (e.g., 17,417) into the payload file.
  • Follow these As with 4 Bs, so the payload looks like http://AAAA...BBBB.
  • Load the file into the application. You should see the EIP overwritten with 42424242 (BBBB).

8. Identifying Bad Characters

Bad characters can break the shellcode, so it’s essential to identify and remove them:

  • Common bad characters include:
  • \x00 (Null)
  • \x0A (Line Feed)
  • \x0D (Carriage Return)
  • \xFF (Form Feed)
  • To find bad characters, append a list of all hex characters after the payload (e.g., http://AAAA…[BAD_CHARACTER_LIST]) and check Immunity Debugger.
  • In Immunity Debugger, click on the ESP register and select “Follow in Dump.”
  • If a character is missing, it’s considered a bad character (e.g., if \x09 is missing, it’s a bad character).
  • Remove the bad character from the list and repeat until all characters are accounted for. In this example, the bad characters are \x00, \x09, and \x0A.

9. Finding the Right Module

To find a suitable module, run the command !mona jmp -r esp. This will list modules that can be used, with preference for those with ASLR=False. In this example, the module with address 0x1003df73 is selected.

10. Testing the Module with a Breakpoint

Set a breakpoint at the selected module’s address (0x1003df73). Navigate to the disassembler, enter the jump address, and press F2 to set the breakpoint. If successful, the breakpoint will be hit, as shown in the debugger.

11. Generating the Payload

Finally, generate the payload using msfvenom to trigger an action, such as opening a calculator. Customize the payload as needed, ensuring that the bad characters are excluded by using the -b option. Convert the jump address to Little Endian format ("\x73\xdf\x03\x10") and include it in the .asx file.

Conclusion:

Load the .asx file into the application to complete the buffer overflow attack. With these steps, you can successfully exploit buffer overflow vulnerabilities in various scenarios, including those you may encounter in certification exams like OSCP.

--

--

Rishabh Chauhan
Rishabh Chauhan

No responses yet