32ビット・システムにおける関数呼び出し時のスタックの動きについて。こちらの記事でも書いた内容を改めてまとめ直した。 まずは関連用語の覚書 スタック関数の引数、関数内部のローカル変数や戻りアドレスが格納される。LIFO (Last In, First Out 後入れ先出し)。スタック領域はメモリの上位アドレスから下位アドレスに向かって確保されていく。スタック領域はプログラム実行時にコンパイラやOSによって自動的に割り当てられる。 ヒーププログラムの実行中に動的に確保されるメモリ領域。例えばmallocによって動的にメモリ領域を確保する場合は、ヒープ領域上に確保される。ヒープ領域はメモリの下位アドレスから上位アドレスに向かって確保されていく。 EIP次に実行する命令文のアドレスを格納している。命令文が実行されるたび、EIPの値は加算される (どのくらい加算されるかは実行された命令文のサイズによる) ESPスタック・ポインタ。スタック領域のトップに積まれたデータのメモリー・アドレスを格納する。スタックはメモリの上位アドレスから下位アドレスに向かって積み上がっていくので、ESPは最下位のアドレスに格納されたデータを指す。 EBPベース・ポインタ。データの格納領域の基点のメモリー・アドレスを格納する。通常、関数の最初において、EBPにはESPの値が設定される。これは関数の引数とローカル変数を追跡するためである。ローカル変数へのアクセスはEBPからオフセットを引くことによって行われる。関数の引数へのアクセスはEBPにオフセットを加算することによって行われる。※ただし、gccなどのGNUコンパイラは関数の引数・変数へのアクセスにEBPではなく、ESPを用いる。
Windowsの正規機能を悪用した権限昇格のメモ
Windowsの正規機能を悪用した権限昇格のメモ。
[Apache] HTTP POSTのボディ部分をログに出力するには
ApacheでHTTP POSTのボディ部分をログに出力するにはApacheのdumpioというモジュールを有効化する。(公式ドキュメントでは、オーバーヘッドの観点からデバッグ時のみ有効化することを推奨している)基本的にはこちらのサイトを参考にした。
PsKillについてのメモ
PsKillとはWindows Sysinternalsより提供されている、プロセスをkillするためのコマンドライン・ツール。ローカルホストのプロセスだけでなく、リモートホストのプロセスも終了させることができる。
Reverse Shellのメモ
Reverse Shellとは、被害者コンピュータから攻撃者のコンピュータに対してシェルを提供する仕組みのこと。攻撃者コンピュータは被害者コンピュータからの接続を特定のポートで待ち受ける。被害者コンピュータは攻撃者コンピュータの特定のポートに対して接続を行い、シェルを提供する。
Inno Setupのアンパックにはinnounpが便利
Inno Setupのアンパックにはinnounpが便利。本記事投稿時点の最新バージョンは0.49。 innounp.exe -x -d<target dir> <Inno installer binary> 以上。
[CVE-2020-25213] WordPressのFile Managerプラグインの脆弱性 のメモ
WordPressのFile Managerプラグインのリモートコード実行の脆弱性が公表されました。 File Manager バージョン6.8以前を使用していた場合、connector.minimal.phpというファイルに細工したHTTPリクエストを送ると、任意のコマンドを実行される恐れがあるという内容です。 connector.minimal.phpに細工したHTTP POSTリクエストを送って、WebShell等の悪意のあるファイルをサーバーにアップロードするという攻撃が広く確認されています。 この脆弱性はバージョン6.9で修正されています。
今さらWannaCryを解析してみた
WannaCryとは2017年5月頃に確認され、猛威を振ったをランサムウェアです。なぜ今さら取り上げたのかと言うと、先日このWannaCryを目にする機会があったためです。 WannaCryはすでに色々な人や組織が解析記事を書いています。腕試しにWannaCryを解析して、他所の解析記事と解析結果を比較(答え合わせともいう)してみました。 今回自分が解析したサンプルはmssecsvc.exe (MD5ハッシュ値: 478abb44dbba06e87decd2df49f3d986)およびmssecsvc.exeがドロップしたバイナリです。 ※逆アセンブル内の変数名や関数名は一部解析に当たり、わかりやすいようにデフォルトのものから変更しています。
RunOnceキーについてのメモ
RunとRunOnceのレジストリキーは、どちらもユーザーのログイン時に指定されたプログラムや処理を自動実行する。 Runキーに登録された処理は、ユーザーがログインするたびに毎回実行されるが、RunOnceキーに登録された処理は、一度実行されると、キーから処理が削除される。 今回はRunOnceの挙動をテストしてみた。
PsExecについてのメモ
PsExecについて、すでに色々なまとめ記事がありますが、個人的に押さえておきたいポイントだけ、さっとメモ。