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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
VBA-RunPE — RunPEテクニックのVBA実装、またはアプリケーションホワイトリストを回避する方法。 | Kitploit
ツール/GitHubGitHub/itm4n/vba-runpe
エクスプロイトIDS/IPS回避ポストエクスプロイトペネトレーションテストレッドチーミングペイロード開発Archived
GitHubitm4n/vba-runpe

VBA-RunPE

RunPEテクニックのVBA実装、またはアプリケーションホワイトリストを回避する方法。

リポジトリを見る
81517366年前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

VBA RunPE

説明

VBA で RunPE テクニックをシンプルかつ効果的に実装したものです。このコードを使用すると、Word または Excel のメモリから実行可能ファイルを実行できます。Microsoft Office 2010 以降の 32 ビット版と 64 ビット版の両方に対応しています。

詳細はこちら:
https://itm4n.github.io/vba-runpe-part1/
https://itm4n.github.io/vba-runpe-part2/

Win10_x64_Office2016_x64_PowerShell

使用方法 1 - ディスク上の PE ファイル

  1. コード末尾の Exploit プロシージャで、実行するファイルのパスを設定します。
root@kitploit:~
strSrcFile = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"

/!\ 64 ビット OS で 32 ビット版の Microsoft Office を使用している場合は、32 ビットのバイナリを指定する必要があります。

root@kitploit:~
strSrcFile = "C:\Windows\SysWOW64\cmd.exe"
strSrcFile = "C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe"
  1. コマンドライン引数を指定します(オプション)。
root@kitploit:~
strArguments = "-exec Bypass"

これにより、次のコマンドラインと同等のものが形成されます。

root@kitploit:~
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -exec Bypass
  1. (オプション)実行ログとエラーログを確認するには、表示 > イミディエイトウィンドウ (Ctrl+G) を有効にします。

  2. Exploit マクロを実行してください!

使用方法 2 - 埋め込み PE

  1. pe2vba.py を使用して PE ファイルを VBA に変換します。これにより、マクロに直接埋め込むことができます。
root@kitploit:~
user@host:~/Tools/VBA-RunPE$ ./pe2vba.py meterpreter.exe 
[+] Created file 'meterpreter.exe.vba'.
  1. RunPE.vba 内の次のコードを、前の手順で生成された .vba ファイルの内容に置き換えます。 Python スクリプトは PE を VBA に変換し、RunPE テンプレートを自動的に適用します(手動でコピー&ペーストする必要はありません)。
root@kitploit:~
' ================================================================================
'                                ~~~ EMBEDDED PE ~~~
' ================================================================================

' CODE GENRATED BY PE2VBA
' ===== BEGIN PE2VBA =====
Private Function PE() As String
    Dim strPE As String
    strPE = ""
    PE = strPE
End Function
' ===== END PE2VBA =====
  1. (オプション)実行ログとエラーログを確認するには、表示 > イミディエイトウィンドウ (Ctrl+G) を有効にします。

  2. Exploit マクロを実行してください!

/!\ 埋め込み PE を使用する場合、PE() メソッドが空でない文字列を返すため、マクロは自動的にこのモードに切り替わります。

既知の問題

  • GetThreadContext() がエラーコード 998 で失敗する

このマクロを 64 ビット版の Office から実行すると、このエラーが発生する可能性があります。回避策として、Word オブジェクト参照からではなく、コードを モジュール に移動してみてください。@joeminicucci さん、ヒントをありがとうございます。

root@kitploit:~
================================================================================
[*] Source file: 'C:\Windows\System32\cmd.exe'
[*] Checking source PE...
[*] Creating new process in suspended state...
[*] Retrieving the context of the main thread...
    |__ GetThreadContext() failed (Err: 998)

今のところ、この回避策がなぜ機能するのかわかりません。少し調査しましたが。 このエラーは、64 ビット版で CONTEXT 構造体が適切にアラインされていないことが原因と思われます。構造体のサイズも正しくないことに気付きました([VBA] LenB(CONTEXT) != [C++] sizeof(CONTEXT))が、32 ビット版では問題ありません。GetThreadContext() が正常に戻るようにする動作する解決策はありますが、実行の後半で別の部分が壊れてしまいます。

2019-12-15 編集: 64 ビット版の CONTEXT 構造体の定義は確かに間違っていましたが、これを修正してもバグは直りませんでした。そこで、64 ビット版の回避策を実装しました。GetThreadContext() と SetThreadContext() 関数の CONTEXT 構造体引数を、同じサイズの Byte 配列に置き換えました。

2019-12-17 編集: ついに問題が見つかりました。最初の推測は正しく、CONTEXT 構造体はメモリ上で 16 バイト境界にアラインされている必要があります。これは C では構造体の定義に align(16) を使用することで制御できますが、VBA では制御できません。そのため、GetThreadContext() と SetThreadContext() は「ランダムに」失敗する可能性があります。一方、Byte 配列は常に 16 バイト境界にアラインされているように見えるため、この回避策は有効ですが、VBA インタプリタ/コンパイラをリバースエンジニアリングして確認しない限り、保証はありません。

  • LongPtr - ユーザー定義型が定義されていません

このエラーが発生した場合、Office の古いバージョン(<=2007)からマクロを実行していることを意味します。LongPtr 型は VBA7(Office 2010)で、64 ビット Windows API のサポートとともに導入されました。これは、アーキテクチャ(32 ビット/64 ビット)を気にせずにポインタを扱うのに非常に便利です。

回避策として、すべての LongPtr を Long(32 ビット)または LongLong(64 ビット)に置き換えることができます。お好みのテキストエディタで Ctrl+H を使用してください。

クレジット

@hasherezade - 完全な RunPE 実装 (https://github.com/hasherezade/)

@Zer0Mem0ry - 32 ビット RunPE を C++ で記述 (https://github.com/Zer0Mem0ry/RunPE)

@DidierStevens - VBA への PE 埋め込み

その他

テスト

このコードは以下のプラットフォームでテストされました:

  • Windows 7 Pro 32 ビット + Office 2010 32 ビット
  • Windows 7 Pro 64 ビット + Office 2016 32 ビット
  • Windows 2008 R2 64 ビット + Office 2010 64 ビット
  • Windows 10 Pro 64 ビット + Office 2016 64 ビット

補足

Win32 と VBA の型対応表:

(*) LongPtr は「動的」型で、Office 32 ビットでは 4 バイト、Office 64 ビットでは 8 バイトです。 https://msdn.microsoft.com/fr-fr/library/office/ee691831(v=office.14).aspx

ツールをダウンロード
C++VBAアーキテクチャ
BYTEByte32 & 64
WORDInteger32 & 64
DWORD, ULONG, LONGLong32 & 64
DWORD64LongLong64
HANDLELongPtr(*)32 & 64
LPSTRString32 & 64
LPBYTELongPtr(*)32 & 64