ハッカーはcommixでコマンド・インジェクション攻撃で脆弱性を発見する(Kali Linux)
コマンド・インジェクション攻撃に関連するバグやエラー、脆弱性を発見するツールを理解するためにまとめてみました。
この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ツールはよほどの知識がないと使えないことがわかりました。
簡単には使えないツールです。
もう少し理解を深めて特集を作りたいと思います。