WSL2のKaliからローカルVMのMetasploitableに接続する

 article  Comments Off on WSL2のKaliからローカルVMのMetasploitableに接続する
Sep 292020
 

WSL2はHyper-Vテクノロジー下で動作するようになりました。

仮想マシンとして動作するようになり、速度も向上、Windowsファイルシステムの呪縛から解き放たれとよいことづくめのように思えますが、同ホスト上のHyper-V仮想マシンと接続できないという問題があります。

WSL2の仮想マシンは独自のHyper-V仮想スイッチ(デフォルトだとvEthernet (WSL))に接続されるためです。
当面の解決方法ですが、Hyper-V仮想マシンもWSL仮想スイッチに接続するか、下記Issueのコメントにあるように仮想スイッチ間の転送を許可することで接続できるようになります。

After converting to WSL2 no longer able to route traffic to other VSwitches on the same host. #4288

Get-NetIPInterface | where {$_.InterfaceAlias -eq 'vEthernet (WSL)' -or $_.InterfaceAlias -eq 'vEthernet (Default Switch)'} | Set-NetIPInterface -Forwarding Enabled

ただ残念ながらホスト再起動でリセットされてしまうようです。Administrator権限での実行が必要なこともあり対応が面倒ですので、よい対策が生まれることを期待したいと思います。

Outlookでメールアイテムを移動するVBAマクロ

 article  Comments Off on Outlookでメールアイテムを移動するVBAマクロ
Jul 122018
 

GmailではIMAPフォルダーとしてラベルが使われています。IMAPフォルダーを削除してもラベルがなくなるだけでメールアイテム自体は消えません。
ですがOffice 365はIMAPフォルダーそのものなので、削除すると中のメールアイテムも消えてしまいます。
Gmailのような処理にしたければ、IMAPフォルダーを削除する前にメールアイテムを移動してやる必要がありますが手作業では面倒です。
そこでOutlookクライアントで一括でメールアーカイブするためのVBAマクロを作ってみました。

以下はInboxからArchiveフォルダにメールアイテムを移動するようになっていますが、mySrcFolderとmyDstFolderで移動元/移動先フォルダーを変更できます。

Sub ArchiveItems()

    Dim myNameSpace As Outlook.NameSpace
    Dim myInbox As Outlook.Folder
    Dim myDstFolder As Outlook.Folder
    Dim mySrcFolder As Outlook.Folder
    Dim myItems As Outlook.Items
    Dim myItem As Object

    Set myNameSpace = Application.GetNamespace("MAPI")
    Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox)
    Set myDstFolder = myInbox.Parent.Folders("Archive")
    Set mySrcFolder = myInbox
    Set myItems = mySrcFolder.Items

    For Each myItem In myItems
        myItem.Move myDstFolder
    Next
    
    MsgBox "Complete!"

End Sub

おまけで現在操作中のフォルダー名を表示するマクロ。

Sub DisplayCurrentFolderName()

    Dim myExplorer As Outlook.Explorer
    Dim myFolder As Outlook.Folder

    Set myExplorer = Application.ActiveExplorer
    Set myFolder = myExplorer.CurrentFolder

    MsgBox myFolder.Name

End Sub

Windows 10でWi-Fiのプロファイル名を変更する

 article  Comments Off on Windows 10でWi-Fiのプロファイル名を変更する
Feb 072018
 

WindowsでのWi-Fi接続プロファイル名はデフォルトでSSID名になるのでいつも変更するようにしています。
Windows 7の頃は右クリックでリネームのような操作ができたものの、Windows 10では同様の操作がおこなえませんでした。

レジストリを漁って直接変更も考えましたが、netshコマンドでプロファイルを再作成してみます。
プロファイル構成をエクスポート、削除、変更したプロファイル名の構成ファイルで再作成、という段取りになります。

エクスポートします。

>netsh wlan export profile name="旧プロファイル名"

インターフェイス プロファイル "旧プロファイル名" がファイル ".\ワイヤレス ネットワーク接続-旧プロファイル名.xml" に保存されました。

プロファイルを一旦削除します。

>netsh wlan delete profile name="旧プロファイル名"
プロファイル "旧プロファイル名" がインターフェイス "ワイヤレス ネットワーク接続" から削除されます。

エクスポートされた構成ファイルをコピーしてプロファイル名を変更します。

>copy "ワイヤレス ネットワーク接続-旧プロファイル名.xml" "ワイヤレス ネットワーク接続-新プロファイル名.xml"
>notepad "ワイヤレス ネットワーク接続-新プロファイル名.xml"

私のケースでは3行目に記載されていました。

<?xml version="1.0"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
	<name>旧プロファイル名</name>
	<SSIDConfig>
		<SSID>
~ 中略 ~
</WLANProfile>

変更した構成ファイルでプロファイルを作成します。

>netsh wlan add profile filename="ワイヤレス ネットワーク接続-新プロファイル名.xml"
プロファイル "新プロファイル名" がインターフェイス "ワイヤレス ネットワーク接続" に追加されます。

以上で完了です。

ちなみに上記手順での変更後のプロファイル名は、レジストリキー \HKLM\SOFTWARE\Microsoft\WcmSvc の CMPOL 記録されていましたが、こちらを直接変更してプロファイル名を変更できるかは定かではありません。

WindowsにAnaconda使わずにJupyter notebookをセットアップ

 article  Comments Off on WindowsにAnaconda使わずにJupyter notebookをセットアップ
Nov 232017
 

Windows環境でのPython + Jupyter notebookはAnacondaで利用する説明が多いように思ったのですが、あえてAnacondaを使わずに導入して、Jupyter notebookのコンテキストメニューをExplorerに表示させるところまでやってみます。

PythonのWindows向けリリースを公式サイトからダウンロードしインストール。
https://www.python.org/downloads/windows/

後述のコンテキストメニュー登録用モジュールに必要なPython for Windows Extensionsをインストール。
以下からPythonのバージョンやプラットフォームにあったものを選択。
https://sourceforge.net/projects/pywin32/

後述のコンテキストメニュー登録用にPython for Window Extensionsが必要なのだけれど、piwin32だけ指定してもインストールできないので、pypiwin32をインストール。

pip install pypiwin32

jupyterをインストール。

pip install jupyter

Windowsコンテキストメニューを登録するためのstart_jupyter_cmをインストール。

pip install start_jupyter_cm

Windowsコンテキストメニューを登録。管理者権限が必要でした。

jupyter_context-menu_add

以上でExplorerコンテキストメニューに「Jupyter notebook here」と「Jupyter qtconsole here」が表示されるようになります。
コンテキストメニューなしで、コマンドラインからjupyter notebookを起動してもいいんですけどね。

Docker for Windowsのインストールに失敗する

 article  Comments Off on Docker for Windowsのインストールに失敗する
Nov 012017
 

インストーラーを実行すると
“Do you want to replace your current version of Docker for Windows with this new one 17.09.0-ce-win33(13620)?”
のダイアログが出てきて、どう答えようがインストールに失敗してしまいます。

確かに昔インストールしてたけど、アンインストール済みで既に残っていないはず。
試しにコマンドラインでインストーラーを実行すると少し詳しくメッセージが出ます。

C:\> "Docker for Windows Installer.exe"
[01:23:00.032] [InstallHandler] Not run as admin, relaunching with UAC prompt
[01:23:02.803] [InstallHandler] No d4w installation found
[01:23:02.803] [InstallHandler] Using embedded package
[01:23:02.897] [InstallWorkflow] Using package: res:d4w
[01:23:02.897] [InstallWorkflow] Downloadingerequisites
[01:23:03.707] [InstallWorkflow] Exracting manifesttion found, prompting user
[01:23:03.756] [InstallWorkflow] Checking prerequisites installation, with special flag
[01:23:03.783] [InstallWorkflow] Msi based installation found, prompting user
[01:23:05.548] [InstallWorkflow] Uninstalling msi based installation, with special flag
[01:23:05.608] [InstallWorkflow] MSI Uninstall failed

参考になったのは以下2件の記事。
Cannot uninstall Docker for Windows
Docker doesn’t upgrade #1043
Process Monitorを使ってインストーラーがアクセスしているHKCR\Installer\UpgradeCodes以下のレジストリを確認したとのこと。

早速SysinternalSuiteのprocmon.exeを使って確認してみます。

FilterでPathにHKCR\Installer\UpgradeCodesを含むものを表示するよう設定。

Addするとこうなります。

インストーラーを実行するとレジストリが表示されます。

確認できたレジストリーキーを削除し、無事インストールできました。

WinNAT定義の強制削除

 article  Comments Off on WinNAT定義の強制削除
Apr 222017
 

Hyver-V仮想マシン用に設定していたWinNATが動作しなくなりました。

PS C:\WINDOWS\system32> Get-NetNat


Name                             : MyNATnetwork
ExternalIPInterfaceAddressPrefix :
InternalIPInterfaceAddressPrefix : 192.168.0.0/24
IcmpQueryTimeout                 : 30
TcpEstablishedConnectionTimeout  : 1800
TcpTransientConnectionTimeout    : 120
TcpFilteringBehavior             : AddressDependentFiltering
UdpFilteringBehavior             : AddressDependentFiltering
UdpIdleSessionTimeout            : 120
UdpInboundRefresh                : False
Store                            : Local
Active                           : False



PS C:\WINDOWS\system32> 

最後のActive:Falseになっているのが怪しいのですが、Trueにしようと思ってもSet-NetNatコマンドレットにはそのようなオプションはありません。
作り直そうと思っても、削除時にエラーになってしまいます。

PS C:\WINDOWS\system32> Get-NetNat|Remove-NetNat

確認
この操作を実行しますか?
対象 MyNATnetwork の PolicyStore Local に対して操作 Delete を実行しています
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): Y
Remove-NetNat : 要求された操作がサポートされていません。
発生場所 行:1 文字:12
+ Get-NetNat|Remove-NetNat
+            ~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (MSFT_NetNat (In...yNATnetwork;0"):root/StandardCimv2/MSFT_NetNat) [Remove-NetNat]、CimException
    + FullyQualifiedErrorId : Windows System Error 50,Remove-NetNat

PS C:\WINDOWS\system32> 

なんとも方法がわからず途方に暮れていたら以下の記事に同じような事象がありました。
Set up a Hyper-V Virtual Switch using a NAT Network | Thomas Maurer
ちょっとコメントがつぶれていますが、以下のレジストリキーを削除したとのこと。
HKLM\System\CurrentControlSet\Control\NSI\{eb004a20-…..7759bc}\6\

今のままでは他に情報もないので、以下のキーをバックアップして削除してみたところ、Get-NetNatでエントリーが出現しなくなりました。
HKLM\SYSTEM\CurrentControlSet\Control\Nsi\{eb004a20-9b1a-11d4-9123-0050047759bc}\6

PS C:\WINDOWS\system32> Get-NetNat

うーん、これで大丈夫なのかわかりませんが、とりあえずNew-NetNatでの再作成は成功したので暫く経過観察します。

PS C:\WINDOWS\system32> New-NetNat -Name MyNATnetwork -InternalIPInterfaceAddressPrefix 192.168.0.0/24


Name                             : MyNATnetwork
ExternalIPInterfaceAddressPrefix :
InternalIPInterfaceAddressPrefix : 192.168.0.0/24
IcmpQueryTimeout                 : 30
TcpEstablishedConnectionTimeout  : 1800
TcpTransientConnectionTimeout    : 120
TcpFilteringBehavior             : AddressDependentFiltering
UdpFilteringBehavior             : AddressDependentFiltering
UdpIdleSessionTimeout            : 120
UdpInboundRefresh                : False
Store                            : Local
Active                           : True



PS C:\WINDOWS\system32>

ちゃんとActive:Trueになってるし。

Window XPのRRAS設定(Filter&NAT)

 article  Comments Off on Window XPのRRAS設定(Filter&NAT)
Apr 202011
 

Windows XPで動かすcoLinuxをNATで使いたいのですが、Windows Firewall/Internet Connection Sharing (ICS)ではNATで使用できる内部ネットワークアドレスに制限があります(192.168.0.0/24固定)。
Routing and Remote Access(RRAS)でもNATはできるのですが、ICSのFirewallと共存することはできません。

結局、NATとパケットフィルタリング両方にRRASを使うようにしているので、そちらの設定メモです。

ICSのサービスを止めてRRASサービスを有効にします。

C:\>net stop sharedaccess
C:\>net start remoteaccess

netshのrouting ipコンテキストでフィルタを設定します。

C:\>netsh
netsh>routing ip
netsh routing ip>set filter "Cable" input drop
OK

netsh routing ip>add filter "Cable" input 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 tcp-est 0 0
OK

netsh routing ip>add filter "Cable" input 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 udp 53 0
OK

netsh routing ip>add filter "Cable" input 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 udp 123 0
OK

netsh routing ip>add filter "Cable" input 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 icmp any any
OK

netsh routing ip>

設定したフィルタの確認。

netsh routing ip>show filter "Cable"

インターフェイス Cable のフィルタ情報
------------------------------------------------------------------

フラグメント チェックは 無効 です。

フィルタの種類        : INPUT
既定の操作            : DROP

    Src Addr       Src Mask         Dst Addr       Dst Mask      Proto  Src Port  Dst Port
------------------------------------------------------------------------------------------
        0.0.0.0         0.0.0.0         0.0.0.0         0.0.0.0 TCP-EST       0       0
        0.0.0.0         0.0.0.0         0.0.0.0         0.0.0.0    UDP      53       0
        0.0.0.0         0.0.0.0         0.0.0.0         0.0.0.0    UDP     123       0
        0.0.0.0         0.0.0.0         0.0.0.0         0.0.0.0   ICMP       0       0
出力フィルタが構成されていません。
デマンド ダイヤル フィルタが構成されていません。

netsh routing ip>

続いてNAT設定。coLinuxでインストールしたTapインターフェースをPrivate、Cableインターフェースをfullに設定します。

netsh routing ip>nat
netsh routing ip nat>install

netsh routing ip nat>add interface "Cable" full

netsh routing ip nat>add interface "Tap" private

netsh routing ip nat>

NAT設定内容の確認。

netsh routing ip nat>show interface

NAT Cable の構成
---------------------------
モード            : アドレスおよびポートの変換


NAT Tap の構成
---------------------------
モード            : プライベート インターフェイス


netsh routing ip nat>

最後にDNS Proxyを設定して終了。

netsh routing ip nat>dnsproxy
netsh routing ip dnsproxy>install
netsh routing ip dnsproxy>exit


C:\>

PPP Adapterに対するRRASのフィルタはデフォルトDROPらしい

 article  Comments Off on PPP Adapterに対するRRASのフィルタはデフォルトDROPらしい
Apr 102011
 

私はWindows XPのFirewall機能に、標準的なICS(Windows Firewall/Internet Connection Sharing (ICS))ではなくRRAS(Routing and Remote Access)を使っています。
ICSではNATで利用するIPアドレスに制限がある(192.168.0.0/24固定)ことや、RRASのほうがルーター等N/W機器の一般的なフィルタに近い感覚で設定できることが理由です(個々のプログラムレベルでの通信許可はできなくなるので、ウィルスやマルウェア対策面では不安が残りますが)。

で、RRASでは「ローカルエリア接続」等の各N/Wインターフェースに対してデフォルトポリシーを許可ルールを設定しますが、PPP Adapterに関してはこちらに一覧が出現しません。

C:\>netsh routing ip show filter
Input           Output          Demand-dial     Frag. Check     Interface
---------       ----------      -------------   --------------  ----------------
0   (FORWARD)   0   (FORWARD)   0   (FORWARD)   無効            ループバック
0   (FORWARD)   0   (FORWARD)   0   (FORWARD)   無効            内部
0   (FORWARD)   0   (FORWARD)   0   (FORWARD)   無効            VMnet8
0   (FORWARD)   0   (FORWARD)   0   (FORWARD)   無効            VMnet1
0   (FORWARD)   0   (FORWARD)   0   (FORWARD)   無効            Cable
0   (FORWARD)   0   (FORWARD)   0   (FORWARD)   無効            WiFi
0   (FORWARD)   0   (FORWARD)   0   (FORWARD)   無効            Tap


C:\>

※普段はInputをDROPにしてますが、テストのためFORWARDに変更しています

デフォルトはFORWARDなのかDROPなのか、リモートからnmapで確認してみました。結論からいうとRRASサービスを有効にしただけでPPP Adapterに対してはDROPの動作になるようです。

RRAS停止状態(net stop remoteaccess)

debian1:~# nmap 183.72.42.159

Starting Nmap 5.21 ( http://nmap.org ) at 2011-04-10 01:35 JST
Nmap scan report for u542159.xgsfmg18.imtp.tachikawa.mopera.net (183.72.42.159)
Host is up (0.15s latency).
Not shown: 988 closed ports
PORT      STATE    SERVICE
135/tcp   filtered msrpc
139/tcp   filtered netbios-ssn
161/tcp   filtered snmp
445/tcp   filtered microsoft-ds
902/tcp   open     iss-realsecure
912/tcp   open     unknown
2049/tcp  filtered nfs
2869/tcp  open     unknown
8222/tcp  open     unknown
8333/tcp  open     unknown
12345/tcp filtered netbus
31038/tcp open     unknown

Nmap done: 1 IP address (1 host up) scanned in 10.16 seconds
debian1:~#

RRAS開始状態(net start remoteaccess)

debian1:~# nmap 183.72.42.159

Starting Nmap 5.21 ( http://nmap.org ) at 2011-04-10 01:37 JST
Note: Host seems down. If it is really up, but blocking our ping probes, try -PN
Nmap done: 1 IP address (0 hosts up) scanned in 3.08 seconds
debian1:~#

Windowsのnotepadを別プログラムに置き換える

 article  Comments Off on Windowsのnotepadを別プログラムに置き換える
Apr 042011
 

レジストリにImage File Execution Optionsなんてものがあるのですね。

実際の手順

  1. レジストリHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options以下に置き換えたいプログラムの実行ファイル名でキーを作成する(notepadの場合はnotepad.exe)
  2. Debuggerの名前でREG_SZを作成し、文字列に置き換えたいプログラムを指定する

64ビットの場合のレジストリキーはHKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Optionsになるとのこと。

Notepad2で置き換え後にメモ帳を起動すると、Commnad Lineは以下のようになっていました(Process Explorerで確認)。
"C:\Program Files\Notepad2\Notepad2.exe" /z "C:\Windows\System32\notepad.exe"

どのテキストエディタにでも置き換えられるかというとそんなことはなく、置き換え前の実行イメージファイル名が引数として渡されることになるので(デバッグ用ですから)、それを無視できる動作が必要になります。Notepad2の場合”/z”オプションで後ろの引数を無視するようになっています。

Notepad2のページによると、SysinternalsのProcess Explorerがタスクマネージャを置き換える際も同様の手法を用いているとのことです。
試してみたところ、確かにHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution\taskmgr.exeのDebuggerにProcess Explorerが設定されました。
物理的に実行イメージを置き換えるんだろうかと思ってたのですが、そんなことはなかったのですね。

NTFSで1フォルダに大量のファイルを書き込む

 article  Comments Off on NTFSで1フォルダに大量のファイルを書き込む
Oct 172010
 

NTFSファイルシステムで1フォルダに大量のファイルを書き込む場合、8.3形式ファイル名の生成がボトルネックになると聞いたので実験。

こちらの情報によると「300,000ファイル以上」との記述があるので、1フォルダに500,000ファイルを作成する場合の処理時間をWindows XPで測定してみる。8.3形式ファイル名の有効化、無効化には、fsutils behaviorコマンドを使う。

測定結果はこちら。

ファイル数 処理時間(秒)
disable8dot3 = 0 disable8dot3 = 1
10000 7 5
20000 15 10
30000 49 16
40000 82 21
50000 286 26
60000 766 31
70000 1590 35
80000 2716 40
90000 4090 45
100000 5792 50
110000 6192 54
120000 6596 59
130000 8475 64
140000 10604 69
150000 13985 74
160000 18066 78
170000 22742 83
180000 27976 88
190000 33826 92
200000 97
210000 103
220000 108
230000 113
240000 118
250000 122
260000 128
270000 132
280000 138
290000 142
300000 146
310000 151
320000 156
330000 161
340000 166
350000 170
360000 176
370000 180
380000 186
390000 193
400000 198
410000 204
420000 208
430000 213
440000 218
450000 223
460000 229
470000 233
480000 238
490000 243
500000 248

8.3形式ファイル名が有効な状態では、190,000ファイル作成までにトータルで9時間以上を要する(途中で測定中止)。最初の10,000ファイルは7秒なのに、ファイル数が増えるに従い処理時間が増えて、180,000からの10,000ファイルでは97分という状態になる。
しかし8.3形式ファイル名を無効にした状態では、コンスタントに5秒前後で10,000ファイルを書き出すことができるようになった。

測定に使用したスクリプトはこちら。”TXT” + 6桁の数値 + “.txt”という形式でひたすらファイルを作成していく。

Option Explicit

Dim fileObj
Dim outFile
Dim outCount, maxCount, repCount
Dim startedTime, elapsedTime
Dim fileName

maxCount = 500000
repCount = 10000

Set fileObj = CreateObject("Scripting.FileSystemObject")

startedTime = Now()

For outCount = 1 To maxCount Step 1
	fileName = "TXT" & Right("000000" & outCount,6) & ".txt"
	Set outFile = fileObj.CreateTextFile(fileName)
	outFile.Close()
	If (outCount Mod repCount) = 0 Then
		elapsedTime = DateDiff("s",startedTime,Now())
		WScript.Echo outCount & "," &elapsedTime
	End If
	Set outFile = Nothing
Next

Set fileObj = Nothing