2019年9月12日
1.脆弱性の再現
①クラッシュFOUND
②機能が書き換えをスタックする場所を見つけ、次のブレークポイント、再実行し、シングルステップデバッグを抜け穴を見つけるために、
③分析ザ・機能
MSCOMCTLは、機能コードを見て、IDAにドラッグ
④コールスタックトレースバックを表示します。
最初のリターンアドレスのアドレスが上書きされて見つけ、それをカバー方法を確認
脆弱性は、その最初の引数であるポインタトリガー、そのパラメータを参照して、機能のトリガーに脆弱性を探します
関数の入り口、文トリガーにの脆弱性を見つけます
図から分かるように、ローカルにはスタックオーバーフローにつながる、4バイトの変数に大量のデータをコピーし、リターンアドレスをカバーすることは、脆弱性を引き起こす、関数のローカル変数に属します。
2.エクスプロイト
①原則分析
分析の後、脆弱性データを二回呼び出される関数によって渡されました。
最初:最初のファイルを保存したバイト数(から0xC)、それは彼らが等しい場合、その後、アウトバイト数(から0xC)のデータをコピーし、入ってくるパラメータと比較されますを取得します。
第二:最初のデータがパラメータとして抽出されるパラメータは、それらが等しい場合、バイト数がサイズパラメータの値をコピーするために、ファイルの比較から、4バイトのデータを抽出しました。
二回sub_275C876D関数呼び出し
最初のコピー
二回限りファイルが比較値を保存するために使用される(バイトの数が読み取ら)等しい、より大きいまたは4に等しい、抜け穴と非常に良好な用途に結合し、ライン上のみJMP ESP命令
②shellcode
- JMPは、ESP好ましくは内蔵のシステムおよび各種保護、モジュール内のアドレスを見つけていません
私はimmunityDebuggerを選びました!資格MSVBVM60.DLLを探します
JMPは、ESPの読み取り属性の実行可能ならば、モジュール内のアドレスを見つけるだけで0x729a0535を持っています
機能は最終的に、単に彼らがやりたいだけの書き込み、読み取りサイズ、行にシェルコードを追加し、その空のオクテットを8 RETたため、41414141は、ESPのアドレスをJMPに交換しました。
POCファイル