【注意】このサイトに記載されていることを他人に試すことは「不正アクセス禁止法」に該当する場合があります。詳しくはこちらから

ハッカーはcommixでコマンド・インジェクション攻撃で脆弱性を発見する(Kali Linux)

ホワイトハッカーの知識座学,Kali Linuxツール,commix

コマンド・インジェクション攻撃に関連するバグやエラー、脆弱性を発見するツールを理解するためにまとめてみました。
このcommixの動作確認は自分のローカルテスト環境で行っています。(VM VirtualBox)

目次

commixとは

Commixは、シンプルな環境で、ウェブ開発者や侵入テスト担当者、さらにはセキュリティ研究者が、コマンド・インジェクション攻撃に関連するバグやエラー、脆弱性を発見する目的でウェブ・アプリケーションをテストするツールです。
※Commix(short for[comm]and[i]njection e[x]ploiter)

このツールを使用することで、特定の脆弱なパラメータや文字列に存在するコマンドインジェクションの脆弱性を容易に発見し、悪用することができるそうです。

コマンド・インジェクションとは、脆弱なアプリケーションを介してホスト・オペレーティング・システム上で任意のコマンドを実行することを目的とした攻撃のことです。
コマンド・インジェクション攻撃は、アプリケーションが安全でないユーザー提供データ(フォーム、クッキー、HTTPヘッダーなど)をシステム・シェルに渡すことで可能になります。この攻撃では、攻撃者が提供したオペレーティングシステムのコマンドが、通常、脆弱なアプリケーションの権限で実行されます。コマンド・インジェクション攻撃は、入力の検証が不十分であることが主な原因で可能となります。

機能

・コマンド・インジェクション攻撃で脆弱性を発見する

ツールの場所

[Applications]→[03-Web Application Analysis]→[commix]

ツールと使用方法

commix [option(s)]

例 commix –url="http://192.168.56.4/bWAPP/commandi.php"
–cookie="PHPSESSID=4bee535e66e90aaffbbd5480e73a8ed4;security_level=0″
–data="target=www.nsa.gov&form=submit"

【実行イメージ】少し端折って整形しています。

※上記の引数はローカル環境内で「bWAPP」サーバーを立ち上げ、「Kali Linux」サーバーでブラウザより「bWAPP」サイトを参照しながら「Burp Suite」ツール立ち上げてパラメーターを取得しました。
実行結果はエラーになっています。調査するのに時間がかかりそうです。

┌──(root__kali)-[/home/kali]
└─# commix --url="http://192.168.56.4/bWAPP/commandi.php" --cookie="PHPSESSID=4bee535e66e90aaffbbd5480e73a8ed4;security_level=0" --data="target=www.nsa.gov&form=submit"

[warning] Python version 3.9.1+ detected. You are advised to use Python version 2.7.x.
__
___ ___ ___ ___ ___ ___ /\_\ __ _
/`___\ / __`\ /' __` __`\ /' __` __`\/\ \ /\ \/'\ v3.1-stable
/\ \__//\ \/\ \/\ \/\ \/\ \/\ \/\ \/\ \ \ \\/> </
\ \____\ \____/\ \_\ \_\ \_\ \_\ \_\ \_\ \_\/\_/\_\ https://commixproject.com
\/____/\/___/ \/_/\/_/\/_/\/_/\/_/\/_/\/_/\//\/_/ (@commixproject)

+--
Automated All-in-One OS Command Injection and Exploitation Tool
Copyright 2014-2020 Anastasios Stasinopoulos (@ancst)
+--

(!) Legal disclaimer: Usage of commix for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program.

[info] Checking connection to the target URL.
[warning] Potential CAPTCHA protection mechanism detected.
[critical] Unhandled exception occurred in '3.1-stable'. It is recommended to retry your run with the latest (dev) version from official GitHub repository at 'https://github.com/commixproject/commix.git'. If the exception persists, please open a new issue at 'https://github.com/commixproject/commix/issues/new' with the following text and any other information required to reproduce the bug. The developers will try to reproduce the bug, fix it accordingly and get back to you.
Commix version: 3.1-stable
Python version: 3.9.1+
Operating system: posix
Command line: commix.py --url=************************************** --cookie=*********************************************************** --data=*******************************
Traceback (most recent call last):
File "commix.py", line 35, in <module>
main()
File "commix.py", line 30, in main
import src.core.main
File "main.py", line 907, in <module>
main(filename, url)
File "main.py", line 604, in main
controller.do_check(url, filename)
File "controller.py", line 684, in do_check
perform_checks(url,filename)
File "controller.py", line 608, in perform_checks
basic_level_checks()
File "controller.py", line 576, in basic_level_checks
post_request(url, http_request_method, filename, timesec)
File "controller.py", line 554, in post_request
injection_proccess(url, check_parameter, http_request_method, filename, timesec)
File "controller.py", line 144, in injection_proccess
url = heuristic_basic(url, http_request_method)
File "controller.py", line 89, in heuristic_basic
response = requests.get_request_response(request)
File "requests.py", line 250, in get_request_response
headers.check_http_traffic(request)
File "headers.py", line 162, in check_http_traffic
opener.open(request)
File "request.py", line 514, in open
req = meth(req)
File "request.py", line 1277, in do_request_
raise TypeError(msg)
TypeError: POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str.
Do you want to automatically create a new (anonymized) issue with the unhandled exception information at the official Github repository? [y/N] y
Traceback (most recent call last):
File "/usr/share/commix/./commix.py", line 35, in <module>
main()
File "/usr/share/commix/./commix.py", line 30, in main
import src.core.main
File "/usr/share/commix/src/core/main.py", line 907, in <module>
main(filename, url)
File "/usr/share/commix/src/core/main.py", line 604, in main
controller.do_check(url, filename)
File "/usr/share/commix/src/core/injections/controller/controller.py", line 684, in do_check
perform_checks(url,filename)
File "/usr/share/commix/src/core/injections/controller/controller.py", line 608, in perform_checks
basic_level_checks()
File "/usr/share/commix/src/core/injections/controller/controller.py", line 576, in basic_level_checks
post_request(url, http_request_method, filename, timesec)
File "/usr/share/commix/src/core/injections/controller/controller.py", line 554, in post_request
injection_proccess(url, check_parameter, http_request_method, filename, timesec)
File "/usr/share/commix/src/core/injections/controller/controller.py", line 144, in injection_proccess
url = heuristic_basic(url, http_request_method)
File "/usr/share/commix/src/core/injections/controller/controller.py", line 89, in heuristic_basic
response = requests.get_request_response(request)
File "/usr/share/commix/src/core/requests/requests.py", line 250, in get_request_response
headers.check_http_traffic(request)
File "/usr/sshare/commix/src/core/requests/headers.py", line 162, in check_http_traffic
opener.open(request)
File "/usr/lib/python3.9/urllib/request.py", line 514, in open
req = meth(req)
File "/usr/lib/python3.9/urllib/request.py", line 1277, in do_request_
raise TypeError(msg)
TypeError: POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/share/commix/./commix.py", line 48, in <module>
common.unhandled_exception()
File "/usr/share/commix/src/utils/common.py", line 226, in unhandled_exception
create_github_issue(err_msg, exc_msg[:])
File "/usr/share/commix/src/utils/common.py", line 96, in create_github_issue
data = data.encode(json.dumps(data)),
AttributeError: 'dict' object has no attribute 'encode'

オプション(Options)

-h, –help

Show help and exit.
ヘルプを表示して終了します。

General:

These options relate to general matters.
これらのオプションは一般的な問題に関連しています。

-v VERBOSE

Verbosity level (0-4, Default: 0).
詳細レベル(0~4、デフォルト:0)。

–version

Show version number and exit.
バージョン番号を表示して終了します。

–output-dir=OUT..

Set custom output directory path.
カスタム出力ディレクトリパスを設定します。

-s SESSION_FILE

Load session from a stored (.sqlite) file.
保存された(.sqlite)ファイルからセッションをロードします。

–flush-session

Flush session files for current target.
現在のターゲットのセッションファイルをフラッシュします。

–ignore-session

Ignore results stored in session file.
セッションファイルに保存されている結果を無視します。

-t TRAFFIC_FILE

Log all HTTP traffic into a textual file.
すべてのHTTPトラフィックをテキストファイルに記録します。

–batch

Never ask for user input, use the default behaviour.
ユーザー入力を求めないでください。デフォルトの動作を使用してください。

–encoding=ENCOD..

Force character encoding used for data retrieval (e.g.GBK).
データ取得に使用される文字エンコードを強制します(例:GBK)。

–charset=CHARSET

Time-related injection charset (e.g."0123456789abcdef")
時間に関連するインジェクション文字セット(例: “0123456789abcdef")

–check-internet

Check internet connection before assessing the target.
ターゲットを評価する前に、インターネット接続を確認してください。

Target:

This options has to be provided, to define the target URL.
ターゲットURLを定義するには、このオプションを指定する必要があります。

-u URL, –url=URL

Target URL.
ターゲットURL。

–url-reload

Reload target URL after command execution.
コマンド実行後にターゲットURLをリロードします。

-l LOGFILE

Parse target from HTTP proxy log file.
HTTPプロキシログファイルからターゲットを解析します。

-m BULKFILE

Scan multiple targets given in a textual file.
テキストファイルで指定された複数のターゲットをスキャンします。

-r REQUESTFILE

Load HTTP request from a file.
ファイルからHTTPリクエストをロードします。

–crawl=CRAWLDEPTH

Crawl the website starting from the target URL (1-2,Default: 0).
ターゲットURL(1-2、デフォルト:0)からWebサイトをクロールします。

-x SITEMAP_URL

Parse target(s) from remote sitemap(.xml) file.
リモートサイトマップ(.xml)ファイルからターゲットを解析します。

Request:

These options can be used to specify how to connect to the target URL.
これらのオプションを使用して、ターゲットURLへの接続方法を指定できます。

-d DATA, –data=..

Data string to be sent through POST.
POSTを介して送信されるデータ文字列。

–host=HOST

HTTP Host header.
HTTPホストヘッダー。

–referer=REFERER

HTTP Referer header.
HTTPリファラーヘッダー。

–user-agent=AGENT

HTTP User-Agent header.
HTTPUser-Agentヘッダー。

–random-agent

Use a randomly selected HTTP User-Agent header.
ランダムに選択されたHTTPUser-Agentヘッダーを使用します。

–param-del=PDEL

Set character for splitting parameter values.
パラメータ値を分割するための文字を設定します。

–cookie=COOKIE

HTTP Cookie header.
HTTPCookieヘッダー。

–cookie-del=CDEL

Set character for splitting cookie values.
Cookieの値を分割するための文字を設定します。

-H HEADER, –hea..

Extra header (e.g. 'X-Forwarded-For: 127.0.0.1’).
追加のヘッダー(例: 'X-Forwarded-For:127.0.0.1’)。

–headers=HEADERS

Extra headers (e.g. 'Accept-Language: fr\nETag: 123’).
追加のヘッダー(例: 'Accept-Language:fr \ nETag:123’)。

–proxy=PROXY

Use a proxy to connect to the target URL.
プロキシを使用してターゲットURLに接続します。

–tor

Use the Tor network.
Torネットワークを使用します。

–tor-port=TOR_P..

Set Tor proxy port (Default: 8118).
Torプロキシポートを設定します(デフォルト:8118)。

–tor-check

Check to see if Tor is used properly.
Torが正しく使用されているか確認してください。

–auth-url=AUTH_..

Login panel URL.
ログインパネルのURL。

–auth-data=AUTH..

Login parameters and data.
ログインパラメータとデータ。

–auth-type=AUTH..

HTTP authentication type (e.g. 'Basic’ or 'Digest’).
HTTP認証タイプ(例:「基本」または「ダイジェスト」)。

–auth-cred=AUTH..

HTTP authentication credentials (e.g. 'admin:admin’).
HTTP認証クレデンシャル(例:「admin:admin」)。

–ignore-code=IG..

Ignore (problematic) HTTP error code (e.g. 401).
(問題のある)HTTPエラーコード(例:401)を無視します。

–force-ssl

Force usage of SSL/HTTPS.
SSL / HTTPSの使用を強制します。

–ignore-redirects

Ignore redirection attempts.
リダイレクトの試みは無視してください。

–retries=RETRIES

Retries when the connection timeouts (Default: 3).
接続がタイムアウトしたときに再試行します(デフォルト:3)。

Enumeration:

These options can be used to enumerate the target host.
これらのオプションを使用して、ターゲットホストを列挙できます。

–all

Retrieve everything.
すべてを取得します。

–current-user

Retrieve current user name.
現在のユーザー名を取得します。

–hostname

Retrieve current hostname.
現在のホスト名を取得します。

–is-root

Check if the current user have root privileges.
現在のユーザーがroot権限を持っているかどうかを確認してください。

–is-admin

Check if the current user have admin privileges.
現在のユーザーが管理者権限を持っているかどうかを確認してください。

–sys-info

Retrieve system information.
システム情報を取得します。

–users

Retrieve system users.
システムユーザーを取得します。

–passwords

Retrieve system users password hashes.
システムユーザーのパスワードハッシュを取得します。

–privileges

Retrieve system users privileges.
システムユーザーの権限を取得します。

–ps-version

Retrieve PowerShell’s version number.
PowerShellのバージョン番号を取得します。

File access:

These options can be used to access files on the target host.
これらのオプションを使用して、ターゲットホスト上のファイルにアクセスできます。

–file-read=FILE..

Read a file from the target host.
ターゲットホストからファイルを読み取ります。

–file-write=FIL..

Write to a file on the target host.
ターゲットホスト上のファイルに書き込みます。

–file-upload=FI..

Upload a file on the target host.
ターゲットホストにファイルをアップロードします。

–file-dest=FILE..

Host’s absolute filepath to write and/or upload to.
書き込みやアップロードを行うホストの絶対ファイルパス。

Modules:

These options can be used increase the detection and/or injection capabilities.
これらのオプションを使用すると、検出および/または注入機能を向上させることができます。

–icmp-exfil=IP_..

The 'ICMP exfiltration’ injection module.(e.g. 'ip_src=192.168.178.1,ip_dst=192.168.178.3’).
「ICMP exfiltration」インジェクションモジュールです(例:「ip_src=192.168.178.1,ip_dst=192.168.178.3」)。

–dns-server=DNS..

The 'DNS exfiltration’ injection module.(Domain name used for DNS exfiltration attack).
「DNSエクスフィルトレーション」インジェクションモジュールです。(DNSエクスフィルトレーション攻撃になりますドメイン名)。

–shellshock

The 'shellshock’ injection module.
「シェルショック」注入モジュール。

Injection:

These options can be used to specify which parameters to inject and to provide custom injection payloads.
これらのオプションを使用して、注入するパラメーターを指定し、カスタム注入ペイロードを提供できます。

-p TEST_PARAMETER

Testable parameter(s).
テスト可能なパラメータ。

–skip=SKIP_PARA..

Skip testing for given parameter(s).
指定されたパラメーターのテストをスキップします。

–suffix=SUFFIX

Injection payload suffix string.
インジェクションペイロードのサフィックス文字列。

–prefix=PREFIX

Injection payload prefix string.
インジェクションペイロードプレフィックス文字列。

–technique=TECH

Specify injection technique(s) to use.
使用する注入手法を指定します。

–skip-technique..

Specify injection technique(s) to skip.
スキップする注入手法を指定します。

–maxlen=MAXLEN

Set the max length of output for time-related injection techniques (Default: 10000 chars).
時間関連のインジェクション手法の出力の最大長を設定します(デフォルト:10000文字)。

–delay=DELAY

Seconds to delay between each HTTP request.
各HTTPリクエスト間の遅延秒数。

–time-sec=TIMESEC

Seconds to delay the OS response (Default 1).
OSの応答を遅らせる秒数(デフォルトは1)。

–tmp-path=TMP_P..

Set the absolute path of web server’s temp directory.
Webサーバーの一時ディレクトリの絶対パスを設定します。

–web-root=WEB_R..

Set the web server document root directory (e.g.’/var/www’).
Webサーバーのドキュメントルートディレクトリ(例:「/ var / www」)を設定します。

–alter-shell=AL..

Use an alternative os-shell (e.g. 'Python’).
別のOSシェル(例:「Python」)を使用します。

–os-cmd=OS_CMD

Execute a single operating system command.
単一のオペレーティングシステムコマンドを実行します。

–os=OS

Force back-end operating system (e.g. 'Windows’ or 'Unix’).
バックエンドオペレーティングシステムを強制します(例:「Windows」または「Unix」)。

–tamper=TAMPER

Use given script(s) for tampering injection data.
インジェクションデータを改ざんするために、指定されたスクリプトを使用します。

–msf-path=MSF_P..

Set a local path where metasploit is installed.
metasploitがインストールされているローカルパスを設定します。

–backticks

Use backticks instead of “$()", for commands substitution.
コマンド置換には、「$()」の代わりにバッククォートを使用します。

Detection:

These options can be used to customize the detection phase.
これらのオプションを使用して、検出フェーズをカスタマイズできます。

–level=LEVEL

Level of tests to perform (1-3, Default: 1).
実行するテストのレベル(1~3、デフォルト:1)。

–skip-calc

Skip the mathematic calculation during the detection phase.
検出フェーズでは数学計算をスキップします。

–skip-empty

Skip testing the parameter(s) with empty value(s).
空の値でパラメーターのテストをスキップします。

–failed-tries=F..

Set a number of failed injection tries, in file-based technique.
ファイルベースの手法で、失敗した注入試行の数を設定します。

Miscellaneous:

–dependencies

Check for third-party (non-core) dependencies.
サードパーティ(コア以外)の依存関係を確認します。

–list-tampers

Display list of available tamper scripts
利用可能な改ざんスクリプトのリストを表示する

–purge

Safely remove all content from commix data directory.
commixデータディレクトリからすべてのコンテンツを安全に削除します。

–skip-waf

Skip heuristic detection of WAF/IPS/IDS protection.
WAF / IPS / IDS保護のヒューリスティック検出をスキップします。

–mobile

Imitate smartphone through HTTP User-Agent header.
HTTPUser-Agentヘッダーを介してスマートフォンを模倣します。

–offline

Work in offline mode.
オフラインモードで作業します。

–wizard

Simple wizard interface for beginner users.
初心者ユーザー向けのシンプルなウィザードインターフェイス。

–disable-coloring

Disable console output coloring.
コンソール出力の色付けを無効にします。

 

commixツールのまとめ

commixツールには免責事項があり

事前の相互同意なしにターゲットを攻撃するためにcommixを使用することは違法です。 適用されるすべての地域、州、および連邦の法律に従うことは、エンドユーザーの責任です。 開発者は、このプログラムによって引き起こされた誤用または損害について責任を負わず、責任を負いません。

と書かれていました。

十分注意して使う必要があります。

しかし、commixツールはよほどの知識がないと使えないことがわかりました。
簡単には使えないツールです。

もう少し理解を深めて特集を作りたいと思います。