1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CiscoオンラインコースであるEthical Hacker(倫理的ハッカー)で学んだ内容をまとめてみた(第15回:最終回)

Posted at

導入

本記事は以下記事の続編として10章「ツールとコード分析」を解説します。

本シリーズも本記事で最終回となります。


この記事で得られること

  • エシカルハッカーに求められるスクリプト読解力の実務的意義
  • ペンテスト自動化スクリプトの基本設計と改善ポイント
  • 主要ツール群の体系的整理

⚠️ 注意(必読)

本記事で扱う内容は、悪用した場合、重大な法的リスクを伴います。
許可された演習環境・検証環境でのみ実施してください。
実在組織・個人への攻撃は禁止されています。


はじめに:なぜエシカルハッカーにスクリプト理解が必要なのか

  • マルウェア・エクスプロイトは本質的に「コード」

  • 自動スキャンや既存ツールはブラックボックス化しやすい

  • 実務では以下が頻発する

    • 既存スクリプトの一部修正
    • 出力結果の解釈
    • 自動化コードの安全性・影響範囲の判断

「書ける」より「読めて理解できる」ことが重要です。


1. スクリプト言語に共通する基本構造(10.1章)

1.1 論理構造の共通点

  • ループ(for / while)
  • 条件分岐(if / elif / else)
  • ブール演算(AND / OR / true / false)
  • 文字列・算術演算

言語が違っても制御構造は共通ということです。


1.2 データ構造

  • JSON(REST API・ツール連携の標準)
  • 配列・リスト(複数結果の保持)
  • 辞書(キー=値構造、設定・レスポンス解析)
  • CSV(スキャン結果・ログ出力)
  • ツリー構造(ディレクトリ、DOM、依存関係)

結果をどのような形式で保持しているかは、引数の使い方に結びつくため理解しておく必要があります。


1.3 ライブラリ・関数・クラスの位置づけ

ツール内部で何が起きているかを推測できるようになります。


1.4 学習コンテンツに関する参考リンク

上記に加え、自分でスクリプトを書いたりGitHubやエクスプロイトデータベースでスクリプトを分析することが理解の助けになります。


2. ペンテストで頻出するスクリプト言語の役割整理

2.1 Bash

  • OS操作・ツール連携の接着剤
  • Nmap・enum4linux・grep などと組み合わせ可能
  • 非対話的処理・自動化に最適

参考リンク

Bashチュートリアル
Bashチートシート


2.2 Python

  • API連携・高度なロジック処理
  • JSONやXML解析
  • スキャナ拡張・自作ツールの中心言語

参考リンク

Pythonチュートリアル①
Pythonチュートリアル②


2.3 Ruby

  • Metasploit の実装言語
  • DSL的な書きやすさ
  • エクスプロイトフレームワークとの親和性〇

参考リンク

Rubyチュートリアル①
Rubyチュートリアル②


2.4 PowerShell

  • Windows環境での事実上の標準
  • AD・ファイル操作・リモート実行
  • 攻撃/管理の両面で利用される

learn.microsoft.com にて PowerShell と検索すると、公式ドキュメントを体系的に参照できます。


2.5 JavaScript

  • DOM操作
  • XSSペイロードの読解・挙動理解
  • クライアントサイド挙動理解

参考リンク

JavaScriptチュートリアル①
JavaScriptチュートリアル②


2.6 Perl

  • 旧来のExploitコードに多く見られる
  • レガシーツール解析で遭遇することがある

参考リンク

Perlチュートリアル


3. 実践演習①:エクスプロイトコードの分析

3.1 コマンド・スクリプトの内容を理解する

  • Nmap + NSE スクリプト
nmap -sV --script vulners --script-args mincvss=4 10.6.6.23
  • SQLインジェクション文字列
1' OR 1=1 UNION SELECT user, password FROM users #
  • SMB関連コマンド
nmap --script smb-enum-users.nse -p139,445 10.6.6.23
  • JavaScript(XSS)コード
<script>alert("You have been hacked!")</script>

過去の記事で紹介しておりますので、
わからない方は確認してみてください。


4. 実践演習②:自動化スクリプトの設計と改善(Bash例)

ペンテストを効率的に行うためには自動化スクリプトを利用することも重要です。
ここでは簡単なスクリプトを例にやり方を学びます。

4.1 単純な自動化から始める

簡易なスクリプトから作成します。
テキストエディタを開き以下の通り入力します。

#!/bin/bash
# Check if IP of target is entered
if [ -z "$1" ] #入力オプションの$1が存在するかどうかで分岐。-zは$1がnullの場合trueを返す。
then
	echo "Correct usage is ./recon.sh <IP>"
	exit 1
else
	echo "Target IP $1"
fi

何かしら引数を与えればその値が表示されるスクリプトです。引数がない場合には引数を入力するようなメッセージを表示します。

recon.shというファイル名で保存し実際に動くかテストします。

┌──(kali㉿Kali)-[~]
└─$ chmod +x recon.sh

┌──(kali㉿Kali)-[~]
└─$ ./recon.sh 10.6.6.23
Target IP 10.6.6.23

┌──(kali㉿Kali)-[~]
└─$ ./recon.sh 
Correct usage is ./recon.sh <IP>

問題なく動作したため、ターゲットIPに値が入っている場合にはnmapを実行するようなスクリプトに修正します。

#!/bin/bash
# Check if IP of target is entered
if [ -z "$1" ]
then
	echo "Correct usage is ./recon.sh <IP>"
	exit 1
else
	echo "Target IP $1"
	echo "Running Nmap…"
	# Run Nmap scan on target and save results to file
	nmap -sV $1 > scan_results.txt
	echo "Scan complete – results written to scan_results.txt"
fi

引数が入力されている場合にはnmap -sVを実行しその結果をscan_results.txtに保存します。
※引数に関する詳細な条件を設定していないので、IPアドレスでなくても任意の文字列で本スクリプトは実行されてしまいます。

再びrecon.shを実行します。

┌──(kali㉿Kali)-[~]
└─$ ./recon.sh 10.6.6.23
Target IP 10.6.6.23
Running Nmap…
Scan complete – results written to scan_results.txt

┌──(kali㉿Kali)-[~]
└─$ cat scan_results.txt 
Starting Nmap 7.94 ( https://nmap.org ) at 2025-11-30 02:01 UTC
Nmap scan report for gravemind.vm (10.6.6.23)
Host is up (0.000094s latency).
Not shown: 994 closed tcp ports (conn-refused)
PORT    STATE SERVICE     VERSION
21/tcp  open  ftp         vsftpd 3.0.3
22/tcp  open  ssh         OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
53/tcp  open  domain      ISC BIND 9.11.5-P4-5.1+deb10u5 (Debian Linux)
80/tcp  open  http        nginx 1.14.2                                                                             
139/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)                                              
445/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)                                              
Service Info: Host: GRAVEMIND; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel                                    
                                                                                                                   
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .                     
Nmap done: 1 IP address (1 host up) scanned in 11.26 seconds                                                       
                                                                                                                   
┌──(kali㉿Kali)-[~]                                                                                                
└─$                         

開放されているポートが確認できます。


4.2 条件分岐による追加処理

先ほどのスクリプトにおいて、
ポート445(SMB over TCPの標準ポート)がopenの場合のみenum4linuxを実行するようなスクリプトに変更します。

#!/bin/bash
# Check if IP of target is entered
if [ -z "$1" ]
then
	echo "Correct usage is ./recon.sh <IP>"
	exit 1
else
	echo "Target IP $1"
	echo "Running Nmap…"
	# Run Nmap scan on target and save results to file
	nmap -sV $1 > scan_results.txt
	echo "Scan complete – results written to scan_results.txt"
	# If the Samba port 445 is found and open, run enum4linux.
	if grep 445 scan_results.txt | grep -iq open
	then
		enum4linux -U -S $1 >> scan_results.txt
		echo "Samba found. Enumeration complete."
		echo "Results added to scan_results.txt."
		echo "To view the results, cat the file."
	else
		echo "Open SMB share ports not found."
	fi
fi

scan_results.txtから「445」の文字列が含まれる行を抽出し、
そこから「open」の文字が含まれるかどうかを判定します。
条件に合致する場合のみenum4linuxを実行します。
※バージョン番号などで「445」の文字列が関係ない結果に含まれる場合もあり厳密な判定ロジックではありません。簡易な実装例と理解してください。

recon.shで確認した結果は以下の通りです。

実行ログ
┌──(kali㉿Kali)-[~]                                                                                                
└─$ ./recon.sh 10.6.6.23                                                                                          
Target IP 10.6.6.23                                                                                                
Running Nmap…                                                                                                      
Scan complete – results written to scan_results.txt                                                                
Samba found. Enumeration complete.
Results added to scan_results.txt.
To view the results, cat the file.

┌──(kali㉿Kali)-[~]
└─$ cat scan_results.txt                                                                                            
Starting Nmap 7.94 ( https://nmap.org ) at 2025-11-30 02:11 UTC
Nmap scan report for gravemind.vm (10.6.6.23)
Host is up (0.000093s latency).
Not shown: 994 closed tcp ports (conn-refused)
PORT    STATE SERVICE     VERSION
21/tcp  open  ftp         vsftpd 3.0.3
22/tcp  open  ssh         OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
53/tcp  open  domain      ISC BIND 9.11.5-P4-5.1+deb10u5 (Debian Linux)
80/tcp  open  http        nginx 1.14.2
139/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
Service Info: Host: GRAVEMIND; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.20 seconds
Starting enum4linux v0.9.1 ( http://labs.portcullis.co.uk/application/enum4linux/ ) on Sun Nov 30 02:11:23 2025

 =========================================( Target Information )=========================================
                                                                                                                    
Target ........... 10.6.6.23                                                                                        
RID Range ........ 500-550,1000-1050
Username ......... ''
Password ......... ''
Known Usernames .. administrator, guest, krbtgt, domain admins, root, bin, none


 =============================( Enumerating Workgroup/Domain on 10.6.6.23 )=============================
                                                                                                                    
                                                                                                                    
[E] Can't find workgroup/domain                                                                                     
                                                                                                                    
                                                                                                                    

 =====================================( Session Check on 10.6.6.23 )=====================================
                                                                                                                    
                                                                                                                    
[+] Server 10.6.6.23 allows sessions using username '', password ''                                                 
                                                                                                                    
                                                                                                                    
 ==================================( Getting domain SID for 10.6.6.23 )==================================
                                                                                                                    
Domain Name: WORKGROUP                                                                                              
Domain Sid: (NULL SID)

[+] Can't determine if host is part of domain or part of a workgroup                                                
                                                                                                                    
                                                                                                                    
 =========================================( Users on 10.6.6.23 )=========================================
                                                                                                                    
index: 0x1 RID: 0x3e8 acb: 0x00000015 Account: masterchief      Name:   Desc:                                       
index: 0x2 RID: 0x3e9 acb: 0x00000015 Account: arbiter  Name:   Desc: 

user:[masterchief] rid:[0x3e8]
user:[arbiter] rid:[0x3e9]

 ===================================( Share Enumeration on 10.6.6.23 )===================================
                                                                                                                    
                                                                                                                    
        Sharename       Type      Comment
        ---------       ----      -------
        homes           Disk      All home directories
        workfiles       Disk      Confidential Workfiles
        print$          Disk      Printer Drivers
        IPC$            IPC       IPC Service (Samba 4.9.5-Debian)
Reconnecting with SMB1 for workgroup listing.

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------

[+] Attempting to map shares on 10.6.6.23                                                                           
                                                                                                                    
                                                                                                                    
[E] Can't understand response:                                                                                      
                                                                                                                    
tree connect failed: NT_STATUS_BAD_NETWORK_NAME                                                                     
//10.6.6.23/homes       Mapping: N/A Listing: N/A Writing: N/A
//10.6.6.23/workfiles   Mapping: OK Listing: OK Writing: N/A
//10.6.6.23/print$      Mapping: OK Listing: OK Writing: N/A

[E] Can't understand response:                                                                                      
                                                                                                                    
NT_STATUS_OBJECT_NAME_NOT_FOUND listing \*                                                                          
//10.6.6.23/IPC$        Mapping: N/A Listing: N/A Writing: N/A
enum4linux complete on Sun Nov 30 02:11:34 2025

4.3 複数ターゲットへの拡張

本節ではスクリプト化は行いませんが、複数ターゲットへの実行方法を解説します。

テキストに対象となるIPアドレスのリストを作成します。

10.6.6.11
10.6.6.12
10.6.6.13
10.6.6.14
10.6.6.23

to_scan.txtという名前で保存し、
nmapコマンドで呼び出します。

┌──(kali㉿Kali)-[~]
└─$ nmap -sn -iL to_scan.txt 
Starting Nmap 7.94 ( https://nmap.org ) at 2025-11-30 02:19 UTC
Nmap scan report for webgoat.vm (10.6.6.11)
Host is up (0.00010s latency).
Nmap scan report for juice-shop.vm (10.6.6.12)
Host is up (0.00033s latency).
Nmap scan report for dvwa.vm (10.6.6.13)
Host is up (0.00024s latency).
Nmap scan report for mutillidae.vm (10.6.6.14)
Host is up (0.00021s latency).
Nmap scan report for gravemind.vm (10.6.6.23)
Host is up (0.00017s latency).
Nmap done: 5 IP addresses (5 hosts up) scanned in 0.00 seconds

スクリプトの引数をテキストとする場合、
テキストの中身をスクリプト内で表示してその値を1行ずつ読み取るような改修をすれば、
自動化が可能だと考えられます。


5. 様々なテストツールの全体像整理と理解(10.2章)

5.0 実行環境


5.1 受動偵察ツール(OSINT)

  • DNS系(nslookup / host / dig)
  • Whois
  • FOCA / ExifTool
    • メタデータ分析のツール
  • theHarvester
    • DNS列挙ツール
  • Shodan / Censys
    • インターネット上のデバイスを見つけられるサイト
  • Maltego / recon-ng
    • 情報収集自動化ツール

関連記事:


5.2 能動偵察

  • Nmap / Zenmap
    • 汎用的偵察ツール
  • Enum4linux
    • SMB偵察ツール

関連記事:


6. 脆弱性スキャン・資格情報攻撃ツール

6.1 脆弱性スキャンツール

関連記事:


6.2 資格情報攻撃ツール

関連記事:


7. 永続化ツール・セキュリティ回避ツール・エクスプロイトフレームワーク

7.1 永続化ツール

  • RDP / VNC / Appleリモートデスクトップ
    • リモートアクセスプロトコル
  • Netcat
    • シェルツール
  • PowerShell / PowerSploit / Empire
    • PowerShellツール

関連記事:


7.2 セキュリティ回避ツール・技術

  • Veli
    • Metasploitと利用するフレームワーク
  • Tor
    • 匿名ブラウジング
  • Proxychains
    • TCP制御ツール
  • 暗号化
  • DNSトンネリング
    • DNSパケットに機密データを埋め込む
    • 参考ユーティリティ

7.3 エクスプロイトフレームワーク

関連記事:


8. その他関連ツール

8.1 逆コンパイル、逆アセンブリ、デバッグツール


8.2 フォレンジックツール

参考:ツールリスト
https://github.com/The-Art-of-Hacking/art-of-hacking/tree/master/dfir


8.3 ファジングツール


8.4 無線関連ツール

関連記事:


8.5 ステガノグラフィーツール

関連記事:


8.6 クラウドツール

関連記事:


まとめ

  • スクリプトは攻撃者専用技術ではない
  • 自動化の裏側を理解することで、結果に責任を持てる
  • 様々なツールを実際に触ることで知識を深められる

📍 その他連絡事項
タイトルだけでCEHのどの内容を扱っているのかわかりにくいため、
第1回~第15回までの簡単なインデックスを別途記事で作成予定です。

活用いただければ幸いです。


1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?