Skip to content

Commit

Permalink
Merge pull request #1 from 01rabbit/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
01rabbit authored Dec 22, 2023
2 parents d5efb26 + b79b465 commit 91351d0
Show file tree
Hide file tree
Showing 2 changed files with 141 additions and 36 deletions.
122 changes: 86 additions & 36 deletions bocchi/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,33 +49,14 @@ def get_timestamp():
# ---------------------------------------------------------------------
def get_menu():
menuText = "## メニュー\n\
### 調査系\n\
- スキャン\n\
- nmapを使用してターゲットを調査します。\n\
- **通常**\n\
- [**IPアドレス**]をスキャンして\n\
- **フルポート**\n\
- [**IPアドレス**]をフルポートスキャンして\n\
- 脆弱性診断\n\
- GVM(Openvas)を使用して脆弱性診断します。\n\
- [**IPアドレス**]を脆弱性診断して\n\n\
### 攻撃系\n\
- 認証試行\n\
- Brutesprayを使用して認証試行をします。\n\
- [**IPアドレス**]を認証試行して\n\n\
### 情報表示\n\
- faradayの表示\n\
- faradayのダッシュボードを表示します。\n\
- [**情報** or **ファラデー** or **faraday**]を表示して\n\
- サービスリストの表示\n\
- 検出したサービスをリストで表示します。\n\
- [**サービス**]を表示して\n\
- 脆弱性リストの表示\n\
- 検出した脆弱性をリストで表示します。\n\
- [**脆弱性**]を表示して\n\
- 脆弱性診断結果の表示\n\
- GVMのダッシュボードを表示します。\n\
- [**脆弱性診断の結果**]を表示して\n\n\
- [**IPアドレス**]を**スキャン**して\n\
- [**IPアドレス**]を**フルポートスキャン**して\n\
- [**IPアドレス**]を**脆弱性診断**して\n\n\
- [**IPアドレス**]を**認証試行**して\n\n\
- [**情報** or **ファラデー** or **faraday**]を表示して\n\
- [**サービス**]を表示して\n\
- [**脆弱性**]を表示して\n\
- [**GVM**]を表示して\n\n\
:warning: トリガーワード(**@bocchi**,**@ぼっち**)の後、半角スペースを入れてから要件をお伝えください。"
return menuText

Expand All @@ -99,6 +80,7 @@ def check_directory(target_ip):
else:
os.makedirs(dir_path) # os.mkdirではなくos.makedirsを使用してサブディレクトリも作成する
return dir_path

# ---------------------------------------------------------------------
# answer
# ---------------------------------------------------------------------
Expand Down Expand Up @@ -130,7 +112,7 @@ def perform_full_port_scan(ipaddr, posted_user):
"""
# フルポートスキャンの開始連絡
messages = f"nmapで{ipaddr}のフルポートスキャンを開始します。\nしばらくお待ちください:coffee:"
send_message_to_user(posted_user=posted_user, msg=messages)
send_message_to_user(posted_user, messages)

# nmapコマンドの作成
resultsPath = check_directory(ipaddr)
Expand Down Expand Up @@ -313,6 +295,39 @@ def perform_brutespray_attack(ipaddr, posted_user):
# エラーメッセージを通知
send_message_to_user(posted_user, messages)

# ---------------------------------------------------------------------
# perform_all_attacks
# ---------------------------------------------------------------------
def perform_all_attacks(ipaddr, posted_user):
"""
フルポートスキャンを実行し、
GVM(Openvas)を使用して脆弱性診断を実行し、
Brutesprayを使用して認証攻撃を実行し、
結果をMattermostに通知するメソッド。
Parameters:
ipaddr (str): 攻撃対象のIPアドレス
posted_user (str): Mattermostへの通知時に使用するユーザー情報
Returns:
str: 全ての調査、攻撃の結果メッセージ
"""
# 全ての調査及び攻撃の開始連絡
messages = f"{ipaddr}に対して全ての調査及び攻撃を開始します。"
send_message_to_user(posted_user, messages)

# フルポートスキャンの実行
perform_full_port_scan(ipaddr, posted_user)

# 脆弱性診断の実行
perform_vulnerability_scan_with_gvm(ipaddr, posted_user)

# 認証試行の実行
perform_brutespray_attack(ipaddr, posted_user)

messages = "全ての調査及び攻撃を終了します。"
send_message_to_user(posted_user, messages)

# ---------------------------------------------------------------------
# analyze_scan_logs
# ---------------------------------------------------------------------
Expand Down Expand Up @@ -361,29 +376,43 @@ def analyze_scan_logs(log_file_path, target_ip):

return suggestion_message.strip()

# ---------------------------------------------------------------------
# show_full_port_scan
# ---------------------------------------------------------------------
def show_full_port_scan():
messages = "\
フルポートスキャンでは以下のコマンドを実行します。\n\
Nmapを使用して**フルポートスキャン**を対象IPアドレスに行います。\n\
以下のコマンドを実行します。\n\
`nmap -vv --reason -Pn -T4 -sV -sC --version-all -A -p- --osscan-guess --script=vuln -oA IPAddress`"
return messages

# ---------------------------------------------------------------------
# show_standard_scan
# ---------------------------------------------------------------------
def show_standard_scan():
messages = "\
スキャンでは以下のコマンドを実行します。\n\
Nmapを使用して**スキャン**を対象IPアドレスに行います。\n\
以下のコマンドを実行します。\n\
`nmap -vv --reason -Pn -T4 -sV -sC --version-all -A --osscan-guess --script=vuln -oA IPAddress`"
return messages

# ---------------------------------------------------------------------
# show_vulnerability_scan_with_gvm
# ---------------------------------------------------------------------
def show_vulnerability_scan_with_gvm():
messages = "\
脆弱性診断は`GreenboneVulnerabilityManagement`を`gvm-cli`を使用して以下の要領で実行します。\n\
脆弱性診断は**GreenboneVulnerabilityManagement**を`gvm-cli`を使用して以下の要領で実行します。\n\
1. ターゲットの作成\n\
2. タスクの作成\n\
3. タスクの実行"
return messages

# ---------------------------------------------------------------------
# show_brutespray_attack
# ---------------------------------------------------------------------
def show_brutespray_attack():
messages = "\
認証試行は以下の要領で実行します\n\
認証試行は**Brutespray**を使用して以下の要領で実行します\n\
1. Nmapを使用してサービスバージョンを取得\n\
`nmap -vv -Pn -T4 -sV -oG IPAddress`\n\
2. Brutesprayで認証攻撃を実行\n\
Expand Down Expand Up @@ -426,7 +455,10 @@ def bot_reply():
elif "認証試行" in userOrder:
# Brutesprayで認証攻撃
askForBruteAttackConfirmation(posted_user, ipaddr)
elif ("やる" in userOrder and "事" in userOrder) or ("する" in userOrder and "事" in userOrder):
elif "全部実行" in userOrder:
# 全部実行
askForAllAttacks(posted_user, ipaddr)
elif ("やる" in userOrder and "事" in userOrder) or ("する" in userOrder and "事" in userOrder) or "調査状況" in userOrder:
send_message_to_user(posted_user,analyze_scan_logs(log_file, ipaddr))
else:
send_message_to_user(posted_user, f"{ipaddr}に対して何をするか命じてください。")
Expand All @@ -440,7 +472,7 @@ def bot_reply():
elif "サービス" in userOrder:
# サービスをリストで表示
send_message_to_user(posted_user,fc.show_service_list_in_faraday())
elif "脆弱性診断" in userOrder or "gvm" in userOrder or "GVM" in userOrder:
elif "gvm" in userOrder or "GVM" in userOrder:
# GVMのダッシュボードを表示
send_message_to_user(posted_user,gc.show_gvm())
elif "脆弱性" in userOrder:
Expand All @@ -453,9 +485,9 @@ def bot_reply():
send_message_to_user(posted_user,get_menu())
elif "教える" in userOrder:
if "スキャン" in userOrder:
send_message_to_user(posted_user, show_full_port_scan())
if "フルポートスキャン" in userOrder:
send_message_to_user(posted_user, show_standard_scan())
if "フルポートスキャン" in userOrder:
send_message_to_user(posted_user, show_full_port_scan())
if "脆弱性診断" in userOrder:
send_message_to_user(posted_user, show_vulnerability_scan_with_gvm())
if "認証試行" in userOrder:
Expand Down Expand Up @@ -540,6 +572,24 @@ def brute_attack():
}
return jsonify(response)

@app.route('/actions/all_attacks', methods=['POST'])
def all_attacks():
data = request.get_json()
text = data.get("context", {}).get("text", "")
if not text:
return jsonify({"ephemeral_text": "Invalid request. Context['text'] is not found."})
posted_usr,ipaddr = text.split(",")
thread = threading.Thread(target=perform_all_attacks, args=(ipaddr, posted_usr))
thread.start()

response = {
"update": {
"props": {}
},
"ephemeral_text": f"{posted_usr}により全部実行が承認されました。"
}
return jsonify(response)

@app.route('/actions/reject', methods=['POST'])
def reject():
response = {
Expand Down
55 changes: 55 additions & 0 deletions bocchi/matterCommunicator.py
Original file line number Diff line number Diff line change
Expand Up @@ -268,3 +268,58 @@ def askForBruteAttackConfirmation(posted_usr,ipaddr):
data = json.dumps(reply_data)
)
return reply_request

# ---------------------------------------------------------------------
# askForAllAttacks
# ---------------------------------------------------------------------
def askForAllAttacks(posted_usr,ipaddr):
"""
Mattermostに対してフルポートスキャン、脆弱性診断、ブルートフォース攻撃の承認メッセージを送信し、ボタンのアクションに応じた処理を行うメソッド。
Parameters:
posted_usr (str): メッセージを投稿したユーザーのID
ipaddr (str): 攻撃対象のIPアドレス
Returns:
requests.Response: Mattermostへのリクエストのレスポンス
"""
reply_headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + BOT_TOKEN,
}

reply_data = {
"response_type": "in_channel",
"channel_id": CHANNEL_ID,
"message": f"@{posted_usr} BOCCHI reply message. :wave:",
"props": {

"attachments": [{
"title": "フルポートスキャン、脆弱性診断及び、認証試行の実施",
"text": "この行為は法律に抵触する可能性があります。管理者から許可を得た端末や自身の端末に対して使用してください。\n認証試行を承認しますか?",
"actions": [{
# Acceptボタン
"name": "Accept",
"integration": {
"url": f"{BOCCHI_SERVER}/actions/all_attacks?token={BOT_TOKEN}",
"context": {
"text": posted_usr +","+ ipaddr
}
}
}, {
# Rejectボタン
"name": "Reject",
"style": "danger",
"integration": {
"url": f"{BOCCHI_SERVER}/actions/reject?token={BOT_TOKEN}"
}
}]
}]
}
}
reply_request = requests.post(
MM_API_ADDRESS,
headers = reply_headers,
data = json.dumps(reply_data)
)
return reply_request

0 comments on commit 91351d0

Please sign in to comment.