Skip to content
GyoiThon edited this page Mar 26, 2019 · 8 revisions

How to

1. シグネチャ(文字列マッチングパターン)を手動で追加する方法

シグネチャはPath「signatures」に格納されている。

root@kali:~/GyoiThon/signatures/ ls
signature_product.txt
signature_default_content.txt
signature_search_query.txt
signature_comment.txt
signature_error.txt
signature_page_type_from_url.txt

signature_product.txt」の追加

このファイルには、Web Crawlingで取得したHTTPレスポンスから製品を特定するシグネチャが定義されている。
新たなシグネチャを追加する場合は、以下の形式に従って追加する。

Format: field1@field2@field3@field4@field5
Type Field# Description Example
必須 1 製品カテゴリ CMS
必須 2 ベンダ名 drupal
必須 3 製品名 drupal
任意 4 このシグネチャに紐付く製品バージョン 8.0
必須 5 製品特定の正規表現 .*(X-Generator: Drupal 8).*

任意のフィールドを使用しない場合は、*を入力すること。

  • Example
CMS@wordpress@wordpress@*@.*(WordPress ([0-9]+[\.0-9]*[\.0-9]*)).*
CMS@drupal@drupal@8.0@.*(X-Generator: Drupal 8).*
Note
正規表現でバージョン情報まで取得する場合は、2つの正規表現グループを記述する必要がある。この時、2つ目の正規表現グループは、バージョン情報のみを取得するために使用される。

signature_default_content.txt

このファイルには、デフォルトコンテンツ探索製品を特定するシグネチャが定義されている。
新たなシグネチャを追加する場合は、以下の形式に従って追加する。

Format: field1@field2@field3@field4@field5@field6@field7@field8
Type Field# Description Example
必須 1 製品カテゴリ CMS
必須 2 ベンダ名 sixapart
必須 3 製品名 movabletype
任意 4 このシグネチャに紐付く製品バージョン *
必須 5 探索Path /readme.html
任意 6 製品確認の正規表現 .*(Movable Type).*
任意 7 製品のバージョン情報を取得する正規表現 (v=([0-9]+[\.0-9]*[\.0-9]*))
必須 8 このPathがログイン画面か否か ログイン画面=1, ログイン画面ではない=0

任意のフィールドを使用しない場合は、*を入力すること。

  • Example
Web@apache@http_server@*@/server-status@*@Version:.*(Apache/([0-9]+[\.0-9]*[\.0-9]*))@0
CMS@sixapart@movabletype@*@/readme.html@.*(Movable Type).*@(v=([0-9]+[\.0-9]*[\.0-9]*))@0
Note
正規表現でバージョン情報まで取得する場合は、2つの正規表現グループを記述する必要がある。この時、2つ目の正規表現グループは、バージョン情報のみを取得するために使用される。
Note
もし「探索Path」の検出のみで製品を確定できない場合は、「製品確認の正規表現」を指定する必要がある。これが指定されている場合、GyoiThonは探索Pathにアクセスして得られたHTTPレスポンスを「製品確認の正規表現」を用いて解析する。HTTPレスポンスに本正規表現がマッチした場合、GyoiThonは該当製品が存在すると判断する。

signature_search_query.txt

このファイルには、Google Custom Search製品を特定するシグネチャが定義されている。
新たなシグネチャを追加する場合は、以下の形式に従って追加する。

Format: field1@field2@field3@field4@field5@field6@field7@field8
Type Field# Description Example
任意 1 製品カテゴリ CMS
任意 2 ベンダ名 sixapart
任意 3 製品名 movabletype
任意 4 このシグネチャに紐付く製品バージョン *
必須 5 Google Custom Searchクエリ inurl:/readme.html
任意 6 製品確認の正規表現 .*(Movable Type).*
任意 7 製品のバージョン情報を取得する正規表現 (v=([0-9]+[\.0-9]*[\.0-9]*))
任意 8 このPathがログイン画面か否か ログイン画面=1, ログイン画面ではない=0

任意のフィールドを使用しない場合は、*を入力すること。

  • Example
Web@apache@http_server@*@inurl:/server-status@*@Version:.*(Apache/([0-9]+[\.0-9]*[\.0-9]*))@0
CMS@sixapart@movabletype@*@inurl:/readme.html@.*(Movable Type).*@(v=([0-9]+[\.0-9]*[\.0-9]*))@0
*@*@*@*@filetype:bak@*@*@0
Note
正規表現でバージョン情報まで取得する場合は、2つの正規表現グループを記述する必要がある。この時、2つ目の正規表現グループは、バージョン情報のみを取得するために使用される。
Note
もし「Google Custom Searchクエリ」のヒットのみで製品を確定できない場合は、「製品確認の正規表現」を指定する必要がある。これが指定されている場合、GyoiThonは「Google Custom Searchクエリ」で得られたURLにアクセスし、HTTPレスポンスを取得する。そして、このHTTPレスポンスを「製品確認の正規表現」で解析し、正規表現がマッチした場合にGyoiThonは該当製品が存在すると判断する。

signature_comment.txt

このファイルには、不要なコメントを特定するシグネチャが定義されている。
新たなシグネチャを追加する場合は、以下の形式に従って追加する。

Format: field1
Type Field# Description
必須 1 不要なコメントを特定する正規表現
  • Example
(user\s*=|[\"']user[\"']\s*:|user_id\s*=|[\"']user_id[\"']\s*:|id\s*=|[\"']id[\"']\s*:)
(select\s+[\s\r\n\w\d,\"']*\s+from)

signature_error.txt

このファイルには、不要なデバッグメッセージを特定するシグネチャが定義されている。
新たなシグネチャを追加する場合は、以下の形式に従って追加する。

Format: field1
Type Field# Description
必須 1 不要なデバッグメッセージを特定する正規表現
  • Example
(ORA-[0-9a-zA-Z\.])
(fail|error|notice|parse|warning|fatal)[^\n]*line[^\n]*[0-9]+

signature_page_type_from_url.txt

このファイルには、URLの文字列を基に画面種別を特定するシグネチャが定義されている。
新たなシグネチャを追加する場合は、以下の形式に従って追加する。

Format: field1@field2
Type Field# Description
必須 1 画面種別
必須 2 画面種別を特定する正規表現
  • Example
Login@.*(login|log_in|logon|log_on|signin|sign_in).*
Note
上述したベンダ名製品名は、必ずCPE形式に準拠すること(CPE形式のベンダ名・製品名でNVDからCVE番号を検索するため)。

2. 学習データを手動で追加する方法

機械学習のための学習データはPath「modules/train_data/」に格納されている。

root@kali:~/GyoiThon/modules/train_data/ ls
train_cms_in.txt
train_page_type.txt

train_cms_in.txt

このファイルには、機械学習で製品を推定する学習データが定義されている。
新たな学習データを追加する場合は、以下の形式に従って追加する。

Format: field1@field2@field3@field4
Type Field# Description Example
必須 1 ベンダ名 joomla
必須 2 製品名 joomla\!
任意 3 この学習データに紐付く製品バージョン *
必須 4 正規表現で記述した製品の特徴量 (Set-Cookie: [a-z0-9]{32}=.*);

任意のフィールドを使用しない場合は、*を入力すること。

  • Example
joomla@joomla\!@*@(Set-Cookie: [a-z0-9]{32}=.*);
joomla@joomla\!@*@(Set-Cookie: .*=[a-z0-9]{26,32});
heartcore@heartcore@*@(Set-Cookie:.*=[A-Z0-9]{32});.*
heartcore@heartcore@*@(<meta name=["']author["'] content=["']{2}).*
Note
上述したベンダ名製品名は、必ずCPE形式に準拠すること(CPE形式のベンダ名・製品名でNVDからCVE番号を検索するため)。

train_page_type.txt

このファイルには、機械学習で画面種別を特定する学習データが定義されている。
新たな学習データを追加する場合は、以下の形式に従って追加する。

Format: field1@field2
Type Field# Description
必須 1 画面種別
必須 2 正規表現で記述した製品の特徴量
  • Example
Login@.*(<input.*type=[\"']text[\"'].*name=[\"']user|uid|username|user_name|name[\"']).*>
Login@.*(<input.*type=[\"']password[\"']).*>

3. MetasploitのExploitモジュールオプションを編集する方法

GyoiThonがExploitを実行する場合、通常はデフォルトのExploitモジュールオプションを使用する。
もしオプションの値を変更したい場合は、「exploit_tree.json」ファイルの「user_specify」項目に任意の値を設定する。

root@kali:~/GyoiThon/modules/data/ ls
exploit_tree.json
root@kali:~/GyoiThon/modules/data/ vim exploit_tree.json

...snip...

"unix/webapp/joomla_media_upload_exec": {
    "targets": {
        "0": [
            "generic/custom",
            "generic/shell_bind_tcp",
            "generic/shell_reverse_tcp",

...snip...

        "TARGETURI": {
            "type": "string",
            "required": true,
            "advanced": false,
            "evasion": false,
            "desc": "The base path to Joomla",
            "default": "/joomla",
            "user_specify": "/my_original_dir/"
        },

上記の例は、Exploitモジュール「exploit/unix/webapp/joomla_media_upload_exec」のオプション項目「TARGETURI」を、「/joomla」から「/my_original_dir/」に変更した様子を示している。

4. Proxy経由で対象サーバにアクセスする方法

GyoiThonは対象サーバにProxyサーバ経由でアクセスすることが可能である。
Proxyを使用する場合は、config.iniの以下の項目を変更する。

Category Parameter Description
Common proxy Proxyサーバ情報を「scheme://host:port」形式で記述する (ex: http://proxy-example:8083)。
proxy_user Proxy認証が必要な場合、認証用のユーザIDを記述する。
proxy_pass Proxy認証が必要な場合、認証用のパスワードを記述する。
Note
現在、GyoiThonはBasic認証にのみ対応している。
Clone this wiki locally