問題タブ [aslr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - ASLR を使用してランダムな匿名マッピング アドレスを取得する
最新の Ubuntu 16.04 x86_64 システムで実行されている次のコードを検討してください。
その出力は次のようになります。
ゼロのアドレス ヒントを提供し、ASLR をグローバルに有効にしてここでランダム アドレスを取得していれば、私は予想していたでしょう。
ランダムなアドレスで匿名共有メモリを mmap() することは可能ですか?
c - C におけるアドレス空間レイアウトのランダム化と構造
私はこの構造を持っています:
arg1
プログラムに渡すと、コードの一部で、方向$title+52
にいくつかの文字が追加されるため、author
値が上書きされることがわかっているとしましょう(バッファオーバーフロー)。
次に、バイナリに ASLR を追加します。このようにランダムな方向もあるので、先ほど説明したバッファオーバーフローはありえなかったと思います。
これは本当ですか?または、ASLR を追加しても、構造体メンバーの方向が一緒になり、バッファー オーバーフローが発生する可能性がありますか?
gdb - GDB で ASLR を有効にする
GDB がデバッグするアプリケーションの ASLR を無効にしていることは知っています。GDB内でASLRを有効にする方法はありますか? ASLR を有効にした場合にのみ再現できるバグがあります。
ありがとう、
android - Android:実行時に KASLR を検証する方法はありますか
Androidターゲットで実行時にKASLRが有効になっているかどうかを確認する方法があるかどうかを知りたいです。
/proc/sys/kernel/randomize_va_space を値 2 (ユーザー空間アプリの完全なランダム化) に対してチェックすることで、ASLR を検証できることを私は知っています。
設定しました
ボードの defconfig ファイルで。
ここで、実行時に検証したいと思います。
Android P ではカーネル バージョン 4.14 を使用しています。
カーネルコマンドライン引数に関して、ubuntuで同じことをチェックするところを見てきました。
BoardConfig.mk の Android のコマンド ライン引数にこのオプションが表示されません。
linker - 各セクションを独自のセグメントに配置する
私は、アドレス空間レイアウトのランダム化に関連するものを調査しており、デフォルトのld
リンカー スクリプトが通常グループ化するさまざまなセクションを、それぞれ独自のセグメントに配置しようとしています。
デフォルトのld
リンカ スクリプトは次のとおりです。具体的には、.data.rel.ro.*
それぞれに独自のセグメントを与えることを検討しているセクションです。これは可能ですか?また、Linux を使用していない場合ld
、他のシステムでも可能ですか?
c - execle コマンドからの C プログラム環境のベース アドレスは?
私は本「ハッキング:悪用の芸術」を読んでいますexploit_notesearch_env.c
が、関数で悪用されるプログラムを呼び出すことにより、バッファオーバーフローの悪用を試みていexecle()
ます。そうすれば、悪用されるプログラムの唯一の環境変数はシェルコードになります。
私の問題は、シェルコード環境変数のアドレスを把握できないことです。この本は、ベースアドレスは0xbffffffa
シェルコードのサイズとプログラム名の長さをそこから差し引いて、シェルコードアドレスを取得すると述べています。
これは、プログラムexploit_notesearch_env.c
を呼び出すコードです。notesearch
ちなみに、この本では 32 ビット Linux ディストリビューションを使用していますが、私は Kali Linux 2019.4 64 ビット バージョンを使用しており、これが問題の原因である可能性があります。
シェルコードはすでに 64 ビットに調整されており、プログラムは正しくバッファをオーバーフローしますが、アドレスが間違っています。
本の住所の正しい代用を知っている人はいます0xbffffffa
か?
c - プログラムの最大スタック サイズは定数値ですか?
Linux バージョン 5.0.0-29-generic で実行しており、最大スタック サイズは 8192K バイトです。常に 8192 KB ですか?
私はこのコードを実行しましたが、50% の確率でしかセグ フォールトしませんでした。
windows - ASLR がファイルのアセンブリ コードのメモリ アドレスを変更するロジックはどれですか?
OllyDbg を使用して exe ファイルにパッチを適用しており、この方法MOV EAX, DWORD PTR DS:[00DE3DA0]
で 2 つの場所で特定のメモリ アドレスにアクセスしています。最初の場所は、ファイルの途中で置き換えた命令であり、もう 1 つは、新しい命令に使用できるいくつかの空のスペースがあった最下部にあります。私の問題は、ASLR が発生した後/Windows の再起動後、新しいアドレス レイアウトに従って下の命令のメモリ アドレスが変更されないため、読み取りが正しくないことですが、他の場所ではアドレスが自動的に正しい値に設定されます。 1 つは ASLR によるもので、私のコードは常にそこで動作します。また、私の最新の観察では、置き換えている命令に DS のような他のメモリ アドレスへの読み取り/書き込みが含まれている場合にのみ、このメモリの再生成がコードに発生するということですDS:[xxxxxxxx]
。
ASLR がアドレスの再生成を決定するロジックについての情報を探しています。一番下のコードを上記のように再生成することは可能ですか?
buffer-overflow - NOP スレッドを使用して ASLR をバイパスする方法
NOPスレッドでASLRをバイパスしようとしています。vuln() のアセンブリは次のとおりです。申し訳ありませんが、ソース コードはありません。
バイナリは 32 ビットで、スタックは実行可能であるため、NOP スレッドを使用することにしました。私のペイロードは次のとおりです。
私の理解が正しければ、エクスプロイトを何度も実行すると、リターン アドレスが NOP スレッドのどこかを指している可能性があり、プロセッサがシェルコードを実行する可能性があります。
ただし、返信先住所を概算する方法がわかりません。バイナリで gdb を試してみると、元の戻りアドレスが 0xfc3fc758 であることがわかるので、その値を使用します。ペイロードをバイナリにフィードすると、SIGSEGV で終了します。
いくつかのデバッグの後、vuln() が戻ったときに segfault がスローされることがわかったので、何が起こるかを確認するためだけにジャンク バイトをフィードしてみました。パディングが 152 バイトを超えるとセグメンテーション違反が発生することが判明しましたが、その理由はわかりません。アセンブリはバッファーが ebp-0x9c で始まることを示しているため、160 バイトは正しいに違いないと思います。
では、NOP スレッドを正しく使用していますか? また、返信先住所を概算するにはどうすればよいですか?
linux - ASLR を使用してスタック アドレスをヒープ アドレスから (またはその逆に) 推測できますか?
Linuxカーネルは1つの大きな範囲を割り当て、この範囲の開始/終了アドレスでヒープとスタックを反対方向に成長させますか?独立?