続・EncodedCommandが渡されたら止める

これの続きです

前回はあれだ、自分以外のユーザーに実行された場合のぼうぎょりょくが0だった
ので調べましたよ、全ユーザに作用する$PROFILE的なのがないかって

あった
Understanding the Six PowerShell Profiles – Hey, Scripting Guy! Blog – Site Home – TechNet Blogs
ありがとうScripting Guyありがとう
6種類もありやがりましたが今回はこの

All Users, All Hosts

にしましょう、問答無用感がたまりません
$PsHome\Profile.ps1ですって、なるほどね!

はい

とりあえず実行してるひとの$PROFILEが存在してたら何もしないことにします
対象はそれ以外のユーザーです
で、EncodedCommandされたら強制的に止めます、確認とかないです
止めたことがわかるようにイベントログに出力するようにしました

なんとなく自前のSourceを使いたかったので登録する処理とか入れちゃったりしてますが

  • 昇格してないシェルだとNew-EventLogできない
  • SourceがないとWrite-EventLogできない

と言った問題もあるのでまぁ適宜環境に合わせて使っていただきたい感じでございます
あとその辺のエラーが出てもちゃんとkillされるはずだけど実験中のエラーメッセージが邪魔だった名残でtrapでcontinueなんぞしています

そんでですね、実際にタスクスケジューラからSYSTEMに

powershell -Command "powershell -EncodedCommand ([Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes((gc 任意のps1ファイルパス) -join [Environment]::NewLine)))"

を実行させてみたらスクリプトが実行されることなくプロセスが終了して、イベントログもばっちり記録されてました
やったね

ちなみにprofile関連のファイルは

  1. $PsHome\Profile.ps1
  2. $PROFILE

の順に実行されてたっぽいですよ
まぁ、そうだよね

広告

続・EncodedCommandが渡されたら止める」への1件のフィードバック

  1. !!!
    素晴らしい。
    $PROFILEにそんな秘密があったなんて。
    Stringオブジェクトにすら、NotePropertyはつくのか、、、。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中