6月 29 05:57:17 * Now talking on #lykeion 6月 29 05:57:24 Defolos_ おはようございます 6月 29 05:57:47 FCSAY こんばわ 6月 29 05:57:50 be-be- こんばんわ 6月 29 05:58:12 satubatu はじめましてこんばんわ。 6月 29 05:58:19 Defolos_ どうもはじめましてー 6月 29 05:58:27 satubatu よろしくおねがいします 6月 29 05:58:37 Defolos_ こちらこそよろしくおねがいします 6月 29 06:02:52 Defolos_ さて、9時ですので、そろそろはじめましょうか 6月 29 06:03:02 FCSAY はい 6月 29 06:03:15 be-be- はいお願いします 6月 29 06:03:19 Defolos_ 皆さん、どうぞよろしくお願いします 6月 29 06:03:32 satubatu よろしくおねがいします 6月 29 06:03:44 FCSAY よろしくお願いします 6月 29 06:04:07 Defolos_ 質問は随時、割り込んでして頂ければと思います 6月 29 06:04:18 Defolos_ それでは、まず資料をお開きください http://ruffnex.oc.to/defolos/exploiting/exploiting_practice/data/exploiting-08.html 6月 29 06:05:23 Defolos_ 今回は第8回ということで、柔軟性を持たせた攻撃手法について学びます 6月 29 06:06:05 Defolos_ 前回攻撃したシステムは、7回の時を思い出して頂ければ分かるとおり 6月 29 06:06:15 Defolos_ 攻撃対象ga 6月 29 06:06:30 Defolos_ スタックポインタの位置を表示してくれてました 6月 29 06:06:52 Defolos_ 資料の問題点のところにもありますが 6月 29 06:07:21 Defolos_ 攻略対象が攻略に必要な情報を全部提示してくれてた分けですね 6月 29 06:07:52 Defolos_ でも普通は、そんな情報を表示してくれるプログラムは無いわけです 6月 29 06:08:28 * minke (~minke@FLH1Adl110.kyt.mesh.ad.jp) has joined #lykeion 6月 29 06:08:39 Defolos_ なので、前回のようにSEIPの場所や戻りアドレスとして書き換えるアドレスを決め打ちするのは現実的ではないです 6月 29 06:08:48 Defolos_ こんばんは、MINKEさん 6月 29 06:09:09 minke こんばんは、遅れました。 6月 29 06:09:15 minke すみません。 6月 29 06:09:17 Defolos_ 資料はhttp://ruffnex.oc.to/defolos/exploiting/exploiting_practice/data/exploiting-08.html です 6月 29 06:09:28 Defolos_ いえいえ、今は問題点の所をやってますので 6月 29 06:09:59 Defolos_ それでは続けますね 6月 29 06:10:02 minke どもですー。 6月 29 06:10:09 satubatu はじめまして^^ 6月 29 06:10:32 minke はじめまして。 6月 29 06:10:58 Defolos_ そこで、もっと柔軟な攻撃手法が必要となります 6月 29 06:11:27 Defolos_ ここで言う柔軟性とは、例えば戻りアドレスとして書き換えるべきアドレスが0x890だったとしても 6月 29 06:12:01 Defolos_ 戻りアドレスに0x800から0x900ぐらいを指定してもうまく行くようなものを指します 6月 29 06:12:40 Defolos_ BOFにおいては、柔軟性を持たせるテクニックとして2つの手法が存在しています 6月 29 06:13:04 Defolos_ 前回決め打ちしたのはSEIPの位置と戻りアドレスでしたよね 6月 29 06:13:24 Defolos_ この2つについて、それぞれ柔軟性を持たせるテクニックがあります 6月 29 06:14:15 Defolos_ 組み合わせることで結構あやふやな数値を指定してもうまく権限を奪えるようになります 6月 29 06:15:05 Defolos_ で、戻りアドレスとして書き換えるべきアドレスを決める時に柔軟性をもたせるテクニックが「NOPスレッド」と呼ばれるテクニックです 6月 29 06:15:52 Defolos_ もう一方のSEIPの場所を予測するときに柔軟性を持たせるのが「RETの連発」と呼ばれます 6月 29 06:16:22 Defolos_ あ、SEIPは関数からの戻りアドレスを保持しておくための領域で 6月 29 06:17:01 Defolos_ seved EIPのことです。EIPの中には次に実行すべきメモリ番地が入ってます 6月 29 06:17:20 Defolos_ ここまでは大丈夫でしょうか? 6月 29 06:17:33 satubatu 大丈夫です 6月 29 06:17:36 FCSAY 大丈夫です 6月 29 06:17:37 minke だいじょうぶです。 6月 29 06:18:19 Defolos_ それでは、次に行きますね 6月 29 06:18:22 be-be- はい大丈夫です 6月 29 06:18:46 Defolos_ これから2津のテクニックを学ぶ分けですが、まずはNOPスレッドから見てみましょう 6月 29 06:19:00 Defolos_ 資料のNOPスレッドのところを御覧ください 6月 29 06:19:31 Defolos_ まずはNOPスレッドって何? というところから説明しましょう 6月 29 06:19:47 Defolos_ NOPは機械語命令で、何もしない命令です 6月 29 06:20:00 Defolos_ NO Operationの略です 6月 29 06:20:45 Defolos_ 何もしないということは存在する価値が無いように一見すると思えますが 6月 29 06:20:57 Defolos_ 実は非常に大切な命令です 6月 29 06:21:44 Defolos_ CPUの実行の同期をとる時とか、早く終った処理の後ろにNOPを置くことで 6月 29 06:21:58 Defolos_ 待ちを作ることができます 6月 29 06:22:29 Defolos_ クラッキング(K)でも結構多用する命令らしいです 6月 29 06:23:18 Defolos_ ソフトウェアのシリアルナンバーを要求する処理部分をこのNOPで埋めて 6月 29 06:23:36 Defolos_ シリアル処理部分を何もさせなくするのに利用するらしいです 6月 29 06:24:27 Defolos_ このように、不可欠な命令でして、今回のテクニックでも非常に有用な命令です 6月 29 06:24:58 Defolos_ ちなみに機械語では0x90がNOPを表します 6月 29 06:25:25 Defolos_ 次の、スレッドというのはソリのことです 6月 29 06:26:13 Defolos_ ソリは犬ゾリとかのソリです 6月 29 06:26:47 Defolos_ なんでソリなんて名前を付けたかは、動作を見てもらえれば御理解頂けると思います 6月 29 06:27:30 Defolos_ で、NOPスレッドとはNOPをたて続けにいっぱい書いたもののことです 6月 29 06:27:44 Defolos_ 資料の図に挙げた例では 6月 29 06:28:27 Defolos_ 0001番地から0006番地までの5つのNOPで構成されたNOPスレッド が示されています 6月 29 06:28:52 Defolos_ それで、なんでこれが有用なのかと言いますと 6月 29 06:29:15 Defolos_ NOPは何もせずにプログラムカウンタの値を増加させます 6月 29 06:29:55 Defolos_ プログラムカウンタとはEIPを一般的に言った言葉で、次に実行すべき命令の所在を格納する場所です 6月 29 06:30:32 Defolos_ 増加させると言うことは、その次に書かれた命令を実行する分けですね 6月 29 06:31:05 Defolos_ 先程の例では0001から実行を始めたとして 6月 29 06:31:17 Defolos_ プログラムカウンタの値は0002になります 6月 29 06:31:30 Defolos_ なので次に0002が実行されるのですが 6月 29 06:31:55 Defolos_ 0002の場所にある命令もNOPなので、ただ単にプログラムカウンタの値が0003になるだけです 6月 29 06:32:29 Defolos_ 次に実行する命令はプログラムカウンタに書かれている0003番地の命令なわけですが、これもまたNOPです 6月 29 06:32:35 Defolos_ このように続いて行きます 6月 29 06:32:56 Defolos_ NOPスレッドの直後に、実行可能な機械語を置いておけば 6月 29 06:33:20 Defolos_ NOPスレッドから流れ込むようにその機械語を実行してくれます 6月 29 06:33:59 Defolos_ 資料の例では0006番地にmov a 10という実行可能な機械語が置かれています 6月 29 06:34:26 Defolos_ 資料では、表記がアセンブリですが、機械語に翻訳していると思ってください 6月 29 06:34:54 Defolos_ こうすると、0005のNOPが実行された時にプログラムカウンタの値が0006になりますので 6月 29 06:35:29 Defolos_ 最後のNOPの次に実行されるのは0006に置かれた「mov a 10」という命令です 6月 29 06:35:55 Defolos_ 普通は「mov a 10」という命令を実行したければ 6月 29 06:36:15 Defolos_ 0006番地を正確にプログラムカウンタ内にいれなければ実行できません 6月 29 06:37:40 Defolos_ でもNOPスレッドを使うと、0001から実行を開始しても、0004から開始しても「mov a 10」を実行できます 6月 29 06:38:09 Defolos_ 上から徐々にNOPが実行されていく様子がソリで滑べっているようなので 6月 29 06:38:17 Defolos_ このテクニックをNOPスレッドと言います 6月 29 06:38:56 Defolos_ このテクニックを使えば、バッファ先頭アドレスの指定に割と適当な値を指定しても 6月 29 06:39:42 Defolos_ NOPスレッドがシェルコードまで滑り込ませてくれます 6月 29 06:39:53 Defolos_ ここまでで質問はありませんでしょうか 6月 29 06:40:06 satubatu 大丈夫です 6月 29 06:40:13 FCSAY 大丈夫です 6月 29 06:40:14 be-be- OKです 6月 29 06:40:18 minke okですよ。 6月 29 06:40:30 Defolos_ はい、それでは次のテクニックに行きますね 6月 29 06:40:46 Defolos_ もう一つのテクニックはRETの連発です 6月 29 06:42:10 Defolos_ 前回はSEIPの場所を正確に割だして、その場所を上書きできる分量の挿入ベクターを押し込みました 6月 29 06:42:40 Defolos_ 例えばBUFFER配列の先頭アドレスから824バイト目にSEIPがあるから、829バイトの挿入ベクターを押し込もう 見たいな感じですね 6月 29 06:43:13 Defolos_ SEIPの場所が正確には分からない時はどうするのかと言いますと 6月 29 06:43:52 Defolos_ RET(戻りアドレスとして書き換えるアドレス)を多めにとってSEIPの場所を上書きします 6月 29 06:44:00 Defolos_ 資料の図では 6月 29 06:44:26 Defolos_ 0003番地にvar2があり 6月 29 06:44:38 Defolos_ 0005番地にSEIPがあります 6月 29 06:45:15 Defolos_ この場合、本来なら0006番地までを上書きすれば良いのですが 6月 29 06:46:08 Defolos_ 000eまでRET(値としては0003)で上書きします 6月 29 06:46:27 Defolos_ 0003番地にはペイロードが入ってるものとしますと 6月 29 06:46:57 Defolos_ いくつかのRETのうち、ひとつは本来のSEIPの場所を上書きできていますので 6月 29 06:47:18 Defolos_ この関数が終る時には0003番地に処理が移ります 6月 29 06:47:34 Defolos_ めでたくペイロードが実行される分けですね 6月 29 06:47:48 Defolos_ ただ問題がありまして 6月 29 06:48:04 Defolos_ SEIPよりも下のメモリ番地を書き換えますので 6月 29 06:48:22 Defolos_ argvとかargcとかの引数が全く使えなくなりまSう 6月 29 06:49:20 Defolos_ ゆえに、argvとかを正確に保持し続けないとプログラムが中断するようなコードの組み方をしている関数には 6月 29 06:49:36 Defolos_ RETの連発は効果がないです 6月 29 06:50:10 Defolos_ この性質をうまく使ったプロテクション技術も存在していますが、それはまたの機会に紹介します 6月 29 06:51:06 Defolos_ RETの連発の方は割と直観的にわかりやすいテクニックと思いますが、 6月 29 06:51:12 Defolos_ これは御理解いただけましたか? 6月 29 06:51:25 minke はいー。 6月 29 06:51:29 FCSAY OKです 6月 29 06:51:30 satubatu 大丈夫です 6月 29 06:51:55 be-be- OKです 6月 29 06:51:57 Defolos_ それでは、次に行きますね「 6月 29 06:52:04 Defolos_ 資料の柔軟性 6月 29 06:52:07 Defolos_ を御覧ください 6月 29 06:52:39 Defolos_ この2つのテクニックを組み合わせますと、かなり柔軟な挿入ベクターができます 6月 29 06:52:54 Defolos_ 資料の絵を御覧ください 6月 29 06:53:26 Defolos_ 色を付けた部分0x04から0x0eの部分が挿入ベクターです 6月 29 06:54:08 Defolos_ この例では、0x04にvar2という配列が割り振られています 6月 29 06:54:35 Defolos_ あ、ちょっとミスがありました。SEIPと書かれてる所は 6月 29 06:54:42 Defolos_ 退避済みスタックポインタでした 6月 29 06:54:59 minke SEIP=戻りアドレスですね。 6月 29 06:55:04 Defolos_ そうです 6月 29 06:55:17 Defolos_ 申し訳ありませんTーT 6月 29 06:55:40 Defolos_ それで、SEIPの場所は0x0bにあります 6月 29 06:56:23 Defolos_ var2の部分に挿入ベクターを押し込め、0x0eまでの領域を上書きします 6月 29 06:56:44 Defolos_ 先頭にはNOPを配置し、その直後にペイロードを配置します 6月 29 06:57:04 Defolos_ 戻りアドレスとしては0x05を指定しています 6月 29 06:57:26 Defolos_ RETの連発のうち、ひとつが0x0bにあるSEIPを上書きしていますので 6月 29 06:57:46 Defolos_ 関数終了時に0x05番地に命令が移ります 6月 29 06:58:28 Defolos_ 0x05番地にはペイロードが存在しないので、普通だと「不正な命令です」とか言われるのですが 6月 29 06:58:39 Defolos_ 今回はNOPスレッドを配置していますので 6月 29 06:58:52 Defolos_ 処理が0x07番地に滑り込みます 6月 29 06:59:06 Defolos_ その結果、ペイロードを実行することができる分けですね 6月 29 06:59:38 Defolos_ 実際の挿入ベクター生成プログラムの例ですが 6月 29 06:59:50 Defolos_ 実は第一回で利用した挿入ベクター生成プログラムは 6月 29 07:00:12 Defolos_ NOPスレッドとRETの連発という2つのテクニックを駆使したものだったのです 6月 29 07:00:38 Defolos_ 第一回の資料を見てもらうと分かるのですが 6月 29 07:00:55 Defolos_ このプログラムは600バイトの領域を確保して 6月 29 07:01:06 Defolos_ 先頭の200バイトをNOPで埋めています 6月 29 07:01:37 Defolos_ 次にシェルコードを配置し、残りの部分をRETの連発に使っています 6月 29 07:02:28 Defolos_ こんな感じで、柔軟性を持たせるテクニックが利用されている分けです 6月 29 07:02:44 Defolos_ それでは、実際に未知のプログラムを攻略してみましょう 6月 29 07:02:59 Defolos_ SSHでサーバにログインください 6月 29 07:03:15 Defolos_ アドレスはglazheim.mydns.jpです 6月 29 07:03:33 Defolos_ 殺伐さんはアカウント名 6月 29 07:03:40 Defolos_ satubatutarouでお作りしています 6月 29 07:03:52 satubatu 了解です。ありがとうございます。 6月 29 07:03:58 Defolos_ パスワードはsasですので、ログイン後すぐ変えてくださいね 6月 29 07:04:48 Defolos_ ドメイン名で入れない時は220.145.22.245を指定してください 6月 29 07:06:12 minke う、パスワード何にしたっけ。。 6月 29 07:06:18 Defolos_ Σ 6月 29 07:06:43 Defolos_ どうしても思い出せなかったら、こちらで初期化します^^; 6月 29 07:07:01 satubatu satubatutarouでは入れないみたいなんですが・・・。 6月 29 07:07:10 minke すみません…お願いしてよろしいですか 6月 29 07:07:15 Defolos_ 了解 6月 29 07:07:45 Defolos_ satubatutarou で入れないでしょうか 6月 29 07:08:03 Defolos_ エラーメッセージとか出てます? 6月 29 07:08:21 Defolos_ MINKE 6月 29 07:08:26 Defolos_ sann 6月 29 07:08:28 satubatu Access deniedです 6月 29 07:08:52 Defolos_ sas ni kaemasita 6月 29 07:10:33 Defolos_ これで 6月 29 07:10:43 Defolos_ ログインできないかな? 6月 29 07:11:00 satubatu はいれました! 6月 29 07:11:08 Defolos_ おお、よかった 6月 29 07:11:21 satubatu どうもです^^ 6月 29 07:11:45 Defolos_ それでは、資料の例題を見てください 6月 29 07:12:18 Defolos_ /home/SAS_Workspace/にex8_bof.exeというファイルがあります 6月 29 07:12:35 Defolos_ このプログラムはBOFの脆弱性を持っています 6月 29 07:12:50 Defolos_ ソースは無いので、 6月 29 07:13:21 Defolos_ バッファのサイズとかを自分で予測する必要がありますが、ロジックは前回の例と変わりはほぼありません 6月 29 07:13:40 Defolos_ これを攻略してROOT権限を取ってみましょう 6月 29 07:14:02 Defolos_ 挿入ベクター生成プログラムには第一回で挙げたものを改良するといいですよ 6月 29 07:14:17 Defolos_ それでは頑張ってみてください 6月 29 07:14:54 Defolos_ ちょっと難しいかも知れませんので、適宜ヒントを出しますね 6月 29 07:22:50 Defolos_ 攻略の目処はたちそうでしょうか? 6月 29 07:26:26 Defolos_ あ、そうそう。ペイロードは自分で作ったペイロードを使用してもらって構いません。 6月 29 07:27:00 Defolos_ 第一回とはシステムが変わってるので、もしかしたら、第一回で紹介したやつは使えないかも知れないです。 6月 29 07:30:37 Defolos_ 第一回で紹介したやつでも動きました。自作のシェルコードが無い方は第一回で紹介したシェルコードをお使いください 6月 29 07:31:51 minke いけましたー 6月 29 07:32:11 Defolos_ おお 6月 29 07:32:15 Defolos_ おめでとうございます 6月 29 07:33:05 minke パラメータは根拠もなく適当にいろいろ試しただけなのですが。 6月 29 07:33:34 Defolos_ はい。こういう何のヒントもない状況では勘とかが結構大切です 6月 29 07:33:43 Defolos_ ちょっとヒントですが、 6月 29 07:34:00 Defolos_ まずは度のぐらいのバッファが確保されているのかを予測する必要があります 6月 29 07:34:40 Defolos_ そんなわけで、挿入ベクターのサイズを徐々に大きくして行って、セグメンテーションフォルトが発生する場所を探します 6月 29 07:35:07 Defolos_ とりあえず、できた方はRETの連発を最小限に抑えるようにしてみてください 6月 29 07:46:28 Defolos_ 皆さん、できそうでしょうか 6月 29 07:46:53 Defolos_ とりあえず、ヒントをもう少し出してみますね 6月 29 07:47:18 Defolos_ 今回は以前より、バッファを多く取るように変更しています 6月 29 07:47:19 satubatu お願いします 6月 29 07:47:41 Defolos_ ですので、挿入ベクターのサイズを大きくする必要があるのはもちろんのこと 6月 29 07:47:57 Defolos_ NOPスレッドのサイズも変更する必要があるのです 6月 29 07:48:27 Defolos_ 前回は200バイトほどのNOPを取っていましたが 6月 29 07:48:40 Defolos_ 今回はもう少し増加させる必要があるのです 6月 29 07:49:06 Defolos_ あるいはoffsetをいじれば200バイトのままでも行けるかも知れません 6月 29 07:49:56 Defolos_ どのぐらいNOPスレッドがいるかは、バッファのサイズとしてどのぐらいの領域を確保しているのか掴むことで大まかな予測ができます 6月 29 07:51:30 minke NOPスレッドのサイズとオフセットはどちらか一方をいじれば十分みたいですね。 6月 29 07:52:01 Defolos_ はい 6月 29 07:52:33 Defolos_ オフセットはRETの値を操作するためのものですので 6月 29 07:52:57 Defolos_ RETの値を200バイトのNOPスレッドのどこかに、うまく変更してやれば 6月 29 07:53:11 Defolos_ ペイロードが起動できます 6月 29 07:53:32 satubatu できました! 6月 29 07:53:38 Defolos_ おめでとうございます! 6月 29 07:53:40 minke おめでとうです! 6月 29 07:53:46 satubatu ありがとうございます^^ 6月 29 07:54:24 minke execする前と後でスタックポインタがどう変わるかって、一般的に何か分かるのですか? 6月 29 07:55:18 Defolos_ EXEC後のスタックポインタの場所を、どうやって予測するか ということですか? 6月 29 07:55:29 minke はい。 6月 29 07:55:52 Defolos_ EXEC後は実は全くわからないのです 6月 29 07:56:02 Defolos_ EXECで呼び出すプログラムに 6月 29 07:56:14 Defolos_ スタックポインタを表示するコードが書かれていれば 6月 29 07:56:27 Defolos_ わかるのですが、それが無ければ全く分かりません 6月 29 07:56:38 minke BOFの脆弱性が main関数直下にあるということが分かっているという前提でもいろいろ変わりうる? 6月 29 07:57:01 Defolos_ はい 6月 29 07:57:30 Defolos_ EXECで呼び出すプログラムは、新たにスタックの領域を確保しますので 6月 29 07:57:40 Defolos_ ただし 6月 29 07:57:54 Defolos_ 今回のようにEXPLOITの中からEXECをすると 6月 29 07:58:32 Defolos_ EXECで呼ばれるプログラムはEXPLOITが使ってるスタックの上に、変数とかRETとかを確保するので 6月 29 07:59:17 Defolos_ EXPLOITの中で表示したスタックポインタから大きくは外れません 6月 29 08:00:14 minke exec元のスタックフレームって、下の方にそのまま残っているのですか? 6月 29 08:00:25 Defolos_ あ、ごめんなさい。 6月 29 08:00:36 Defolos_ EXECは呼び出したら戻らないのが前提なので 6月 29 08:00:53 Defolos_ EXECが使ってたスタック領域を上書きするように確保されちゃいます 6月 29 08:01:10 minke なるほどー。ありがとうございます。 6月 29 08:01:24 Defolos_ いえいえ、分かりにくい説明で申し訳ないです 6月 29 08:03:37 minke だから一般的には、元のスタックポインタからのオフセットとNOPのサイズと連続RETの回数の3つを全部調整する必要があるわけですよね。 6月 29 08:04:19 minke exploitの中からexecする場合には。 6月 29 08:04:53 Defolos_ その通りです。ただ、厳密な数値を打たなくて良いようにNOPスレッドとかを利用しています。 6月 29 08:06:40 Defolos_ FCSAYさん、できそうですか? 6月 29 08:07:29 FCSAY まだかかりそうです…… 6月 29 08:07:47 Defolos_ 了解です 6月 29 08:10:19 minke BOFの脆弱性がmain直下でなく、関数呼び出しを10個ぐらい重ねた深いところにある場合だと戻りアドレスを探すの難しそうですね。 6月 29 08:11:53 Defolos_ そうですね。今回はMAINの中に脆弱性がありましたが、関数を何こも呼び出した所にあるとすると、オフセットとかをうまく調整しないと 6月 29 08:12:06 Defolos_ 難しいですね 6月 29 08:13:43 minke するとやっぱり対象のソースコードが手元にあるとなしでは難しさが全然違いますね。 6月 29 08:14:46 Defolos_ ですねー。ソースがあれば、大体どのぐらい呼び出した所で脆弱性があるとか分かりますので 6月 29 08:16:05 Defolos_ あれれ? 6月 29 08:16:18 Defolos_ なんでFCSAYさんの動かないんだろう/// 6月 29 08:19:49 FCSAY あ、通りました 6月 29 08:19:55 Defolos_ お、おめでとうございます 6月 29 08:20:04 FCSAY ありがとうございます 6月 29 08:20:10 Defolos_ EXECのパスの問題でしたか 6月 29 08:20:53 minke 800だとギリギリ届かないんですね。 6月 29 08:21:02 Defolos_ はい^ー^ 6月 29 08:21:08 Defolos_ 実は今回は 6月 29 08:21:20 Defolos_ バッファを800バイト確保するように変更していました 6月 29 08:21:50 minke SEIPは812バイト目? 6月 29 08:21:50 Defolos_ それで、実際のSEIPはバッファの先頭アドレスから812バイト目の位置にありました 6月 29 08:22:07 minke わーい、あってた 6月 29 08:22:15 Defolos_ あ、MINKEさんおめでとうございます^^ 6月 29 08:22:51 Defolos_ SEIPは4バイトありますので 6月 29 08:23:15 Defolos_ 最小の挿入ベクターのサイズは812+4+1で 6月 29 08:23:23 Defolos_ 817バイトでした 6月 29 08:23:52 Defolos_ これでぴったりSEIPの所まで上書きすることになるのですが 6月 29 08:24:13 Defolos_ 挿入ベクターは900バイトとかでも動いたはずです 6月 29 08:24:40 Defolos_ このように厳密なサイズ指定をしてなくても動くように柔軟性を持たせるのがRETの連発なのです 6月 29 08:25:26 Defolos_ で、今回はNOPスレッドには300ぐらいの大きさを指定しないと 6月 29 08:25:31 Defolos_ ダメだったのです 6月 29 08:26:46 Defolos_ というのも、前回に比べバッファサイズが200バイト大きくなりましたので、NOPスレッドは100バイトぐらい増やす必要がありました 6月 29 08:27:18 Defolos_ ただ、前回のようにターゲットが表示したスタックポインタのアドレスを基に 6月 29 08:27:33 Defolos_ 計算して決め打ちする必要が無くなったということからも 6月 29 08:27:50 Defolos_ 柔軟性が増したなと実感された事と思います 6月 29 08:28:37 Defolos_ 柔軟性を持たせるというのはこんな感じです 6月 29 08:28:47 Defolos_ さて、ちょっとはなしは変わりますが 6月 29 08:29:20 Defolos_ 前回、今回とプログラムを攻略してきて、問題があるというのに気づきませんか? 6月 29 08:29:59 Defolos_ これまでの挿入ベクターのサイズを思い出して欲しいのですが 6月 29 08:30:23 Defolos_ どれも600バイトとか900バイトとか、かなり大きな領域を取ってました 6月 29 08:30:55 Defolos_ これはNOPスレッド、ペイロード、RETを配置するのに大きな領域が必要だったからなのですが 6月 29 08:31:18 Defolos_ もしBOFの存在するバッファが50バイトぐらいだったらどうしましょう 6月 29 08:32:02 Defolos_ NOP、ペイロードを配置したら50バイトぐらいはすぐ無くなってしまいますね 6月 29 08:32:38 Defolos_ NOPを最小限に抑えても、50バイトを越えるペイロードは珍しくないので 6月 29 08:32:52 Defolos_ そのままではペイロードを実行できません。 6月 29 08:33:28 Defolos_ かと言って、せっかくのBOFの脆弱性をあきらめるのはアタッカーとして惜しいです 6月 29 08:34:10 Defolos_ そんなわけで、次週はバッファがかなり小さい場合にどうやって制御をペイロードに移すかを説明したいと思います 6月 29 08:34:24 Defolos_ 今日の実習はここまでです 6月 29 08:34:33 Defolos_ お疲れ様でしたー 6月 29 08:34:43 FCSAY ありがとうございました 6月 29 08:34:46 minke お疲れ様でした。 6月 29 08:34:53 satubatu お疲れ様です 6月 29 08:35:04 Defolos_ 質問とかありませんでしょうか 6月 29 08:35:06 be-be- お疲れ様です。 6月 29 08:35:17 minke あ、そうだ 6月 29 08:35:20 Defolos_ はい 6月 29 08:35:27 minke 資料のfig.8-1なのですが 6月 29 08:35:41 minke argvとargcの位置って、逆だったりしません? 6月 29 08:35:56 minke うろ覚えなんですけど。 6月 29 08:35:58 Defolos_ あ 6月 29 08:36:06 Defolos_ 逆かも 6月 29 08:36:49 minke ひょっとすると処理系ごとに変わったりするのかもしれませんが。 6月 29 08:37:42 Defolos_ x86LINUX 6月 29 08:37:45 Defolos_ では 6月 29 08:37:54 Defolos_ 逆かも知れません、調べておきます 6月 29 08:38:08 minke RETの連発のところのAAだとargcが上になってますね。 6月 29 08:38:51 Defolos_ Σ(ーー;) 6月 29 08:39:21 Defolos_ このあたり、うろ覚えで資料作りました。ごめんなさい 6月 29 08:39:52 minke まぁ今回の話には直接関係ないので大丈夫ですよ。 6月 29 08:40:28 Defolos_ 申し訳ありません。^^; 6月 29 08:40:35 minke いえいえー。 6月 29 08:40:43 Defolos_ ほかにはございませんか? 6月 29 08:41:46 minke あと、「RETで上書き」とか見て 6月 29 08:42:04 minke RET命令のことかと一瞬勘違いしたんですが(^^; 6月 29 08:42:26 minke 戻りアドレスのことを RET って呼ぶの紛らわしいなぁとかちょっと思いましたw 6月 29 08:42:30 Defolos_ あ、RET命令とかも確かにありましたね/// 6月 29 08:42:47 Defolos_ RETURN ADDRESSの略なのですが、確かに紛らわしいかも 6月 29 08:44:09 Defolos_ 実はこの実習の基になってる本の略記にRETとありまして 6月 29 08:44:34 Defolos_ それをそのまま書いたのです。 6月 29 08:45:04 minke そう略す文化があるのかな。 6月 29 08:46:08 Defolos_ このあたりは、「戻りアドレス」とかに変えた方が良さげですね 6月 29 08:46:52 minke そのほうが分かりやすいと思います。 6月 29 08:47:46 Defolos_ なるほど、どうもありがとうございました 6月 29 08:48:00 Defolos_ 今後の資料ではどうにかしておきます 6月 29 08:48:04 minke どうしたしましてー。 6月 29 08:49:20 satubatu すいません基本的なところで質問良いですか? 6月 29 08:49:36 Defolos_ はい 6月 29 08:50:40 satubatu 挿入ベクター生成のなかで作ってるret値なんですが 6月 29 08:50:45 Defolos_ はい 6月 29 08:52:16 satubatu ちょっと良く分かってないので教えていただけると・・・。 6月 29 08:52:44 Defolos_ はい 6月 29 08:53:25 Defolos_ えーと。retと言う変数の中身は戻りアドレスとして書き換える値です 6月 29 08:53:30 satubatu はい 6月 29 08:53:34 Defolos_ 具体的な中身は 6月 29 08:54:01 Defolos_ SP()というアセンブリで取得して来たスタックポインタの値です 6月 29 08:54:18 Defolos_ スタックポインタは現在のスタックの一番上のアドレスです 6月 29 08:54:22 satubatu はい 6月 29 08:54:58 Defolos_ それで、スタックポインタのアドレスをRETにしてるのですが 6月 29 08:55:46 Defolos_ EXECLで呼び出した対象プログラムは、EXPLOITの確保するスタックの場所に上書きするように領域が確保されます 6月 29 08:56:09 satubatu あああ。わかりました。 6月 29 08:56:20 Defolos_ わかりましたか^^ 6月 29 08:56:33 satubatu ありがとうございます^^もやもやがとけました。 6月 29 08:56:47 Defolos_ それは、よかったです。 6月 29 08:57:49 Defolos_ 後は大丈夫でしょうか 6月 29 08:58:41 satubatu こちらは大丈夫です 6月 29 08:58:59 FCSAY 自分も大丈夫です 6月 29 08:59:46 Defolos_ それでは、時間もちょうどいいぐらいになってきましたので、今日はこのあたりでお開きにしましょうか 6月 29 08:59:59 Defolos_ 質問とかがありましたら、SASのサイトの 6月 29 09:00:07 Defolos_ フィードバックに書き込みくださいませ 6月 29 09:00:14 satubatu 了解です 6月 29 09:00:21 satubatu ありがとうございました 6月 29 09:00:25 Defolos_ それでは、また次回お会いしましょう! 6月 29 09:00:30 FCSAY ありがとうございました 6月 29 09:00:35 minke ありがとうございました。