問題タブ [shellcode]
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 - シェルコードから 128 ビット キーを取得する
シェルコードから 128 ビット キーを取得しようとしています。次のような配列内のCコードとしてシェルコードをコンパイルしました
LinuxでGCCを使用してコンパイルしたとき。コード配列内にあるシェルコードとして、GDBを使用して逆アセンブルした後。
逆アセンブルを見ると、6008fb のループ命令の後に 128bit キーが計算されます。私はGDBにあまり慣れていません。このシェルコードから 128 ビット キーを取得するにはどうすればよいですか? しかし、私はそれを行う方法がわかりません。事前にどうもありがとうございました ...
shellcode - シェルコードの挿入
変数 user="..." を持つ Web サーバーに .cmd ファイルがあり、バッファ オーバーフローに対して脆弱です。ssh または Web 経由で .cmd ファイルを実行できます。今、私はこのシェルコードを持っています:
私の問題は、これがどのように連携するのかわかりません。アセンブラーと C コードが何をするかは知っていますが、実行中の cmd ファイルにコードを挿入するにはどうすればよいですか?
assembly - インライン アセンブリでシェルを起動する
私は学校の課題に取り組んでいますが、完全に困惑しています。教授と TA は何の役にも立たず、彼らが学生に提供するすべての答えは、「探し続ければ答えはそこにあります」というバリエーションにすぎません。このコードを使用してシェルを作成しようとしています:
code[]
オンラインで見つかった他の例(このサイトを含む)と、教授が提供した追加のpdfの例に置き換えようとしました。これらはどれも役に立ちませんでした。gdb を使用して逆アセンブルし、自分code[]
で構築しようとしましたが、それも失敗しました。価値のあることとして、通常のユーザーでは、私のアプリケーションは回線上で segfault((void(*)( ))buf)( );
し、同じ回線上の root ユーザーでは終了する (segfault の通知なし) と言えます。
この割り当てを他にどこで行うべきかわかりません。この簡単な最初のステップを理解するまで、後のバッファ オーバーフロー タスクに取り組むことはできません。どんな助けでも大歓迎です。
編集:言及するのを忘れていました.OSX 10.8.2とVirtualBox経由のUbuntu VMの両方でこれを試しました。OSXでは動作しないと思いますが、必死でした。ha Ubuntu の場合、次のことを行うように求められました。
sudo #sysctl -w kernel.randomize_va_space=0
sudo apt-get install zsh cd/bin sudo rm sh sudo ln -s /bin/zsh /bin/sh
これらのコマンドは、アドレス空間のランダム化を無効にし、zsh をインストールして、/bin/sh にリンクする必要があります。VM でこれらのタスクをすべてエラーなしで完了しました
c - homeowrkとしてのバッファオーバーフロー
まだセキュリティクラスのためにこのバッファオーバーフローのことを学んでいますが、私はこのアプリケーションの脆弱性を悪用しようとしています:
このエクスプロイトアプリケーションの使用:
何らかの理由で、エクスプロイトを実行してbadfileを作成しても、何もプッシュされません。バッファが空であるか、正しく書き込まれていません。私は自分のエラーを見つけることができないようで、たゆまずグーグル検索した後、私は十分な答えを見つけることができませんでした。私が使用したFillBufferCodeの理解から、これはlong_stringを私のバッファーのアドレスで埋め、次にシェルコードをlong_stringの先頭(NOOPスライドのビットの後)に置き、long_stringをバッファーにコピーして戻す必要があります。これやfwriteに問題はありません。提案?
assembly - 負のジャンプのオペコード
戻る必要があるシェルコードを作成しようとしています (負のジャンプ)。2400バイト戻したい。そして、これは私が使用するオペコードです:
これは、最初はnop
-4200 へのジャンプであり、次に近いジャンプです。0xef98 = -4200 (少なくとも私が考えていること)。ただし、デバッガーでは次のようになります。
予想どおり、最初は nop で、次に jmp ですが、ジャンプ先のアドレスは私が期待したものではありません (jmp 02A8EF45
私が考えていたようなものです)。誰かが私が間違ったことを見ることができますか?
assembly - 理論上のスタックのオーバーフロー..およびアセンブリ
aslr のない x86 システムを想定して、次の質問をしたいと思います。
1) 理論によると、スタック オーバーフロー攻撃を実行すると、ebp レジスタが指す値も新しいリターン アドレスで上書きされます。
ここで、呼び出し元の関数に戻ることはないので、前のスタック フレームを復元するために ebp の元の値は必要ありませんが、ebp レジスタは常にどこかを指している必要があります。eipレジスタが新しいシェルコードを指し始めた後、ebpはどのように設定されますか? より具体的には、2 つのアセンブリ命令 (leave-ret) のどれが、ebp を値に復元するさらなるマイクロ命令を誘導しますか?
2) 最後になりましたが、シェルコードがいくつかの値をスタックにプッシュする必要がある場合に、これらの値がシェルコードのどの部分も上書きしないようにするにはどうすればよいでしょうか? 言い換えれば、シェルコードで生成された変数がシェルコードの開始前にのみ配置され、たとえばその間に配置されないことをどのように確認できますか?
よろしくお願いします。
linux - カーネルエクスプロイトシェルコード
これを行う32ビットLinuxのカーネルモードのシェルコードを書きたい:
だから私は次のファイルを作成します:
ここで、0x1234567はprepare_kernel_credのアドレスであり、0x1234568はcommit_credsのアドレスであり、どちらも/ proc/kallsymsから見つかります。
nasm -f elfとobjdump-dを使用してアセンブルし、マシンコードを取得します。
私は次のようなものを手に入れます:
これは機能しません。ただし、2番目のe8 79
代わりにe8 7c
およびの代わりにを使用すると、機能します。この2番目のマシンコードをどこから入手したか(別のファイルにありました)は覚えていませんが、なぜこれが機能するのか、単純にそのように組み立てるのではないのか、非常に興味があります。e8 74
e8 7c
これはどんなタイプCALL
ですか?上に示したように、コードを単純にアセンブルしないのはなぜですか?e8 79
とをCALLに使用すると、おもちゃのエクスプロイトは人工カーネルのバグに対して正常にe8 74
機能しますが、nasm/objdumpからアセンブルされたマシンコードを使用すると失敗します。
c - シェルコードの無限ループ
シェルコードからHelloWorldを表示したいのですが、cコードは単純です。
問題はアセンブリファイルにあるはずです、ここにあります:
コードは正常に機能しますが、「hello shell!」を表示した後は終了しません。それどころか、無限ループのようにこの文を表示し続けます。
security - 「The Art of Exploitation」のバッファ オーバーフローの例が理解できない
私の問題は非常に似ていますが、これと同じではありません。
私は、本の中で exploite_notesearch.c の同じ例を実行しました: Hacking, the Art of Exploitation on my 64-bit OS, Archlinux で動作しません。
上記のリンクから、ほとんどの 64 ビット システムでは動作しないことがわかりました。しかし、プログラムがこれを行う必要がある理由をまだ理解できません: ret = (unsigned int)&i - offset
. ret = (unsigned)shellcode
脆弱なプログラムの戻りアドレスをシェルコードの開始アドレスに置き換えるために、これを行うことができないのはなぜですか?
c - Linuxシェルコード「Hello、World!」
私は次の動作するNASMコードを持っています:
画面に「Hello、World!\n」と出力されます。以前のNASMオブジェクトコードを含む次のCラッパーもあります。
ただし、コードを実行すると、アセンブラコードが実行されていないように見えますが、プログラムは正常に終了します。何か案は?
ありがとう