問題タブ [stack-smash]
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 - スタック破壊が検出されました。C プログラミング
私はCプログラムを実行しようとしています。うまくいくように見えますが、最後に次のように表示されます。
スタック破壊が検出されました
これはコードです:
なぜこれが起こっているのか誰にも分かりますか?私はGoogleで多くの調査を行いましたが、私が試したすべての可能な答えはうまくいきませんでした. どんな助けでも本当に役に立ちます。
皆さん、ありがとうございました!!
c - C関数の呼び出し後にスタックスマッシングが検出されました
私には意味のない問題が発生しました。だからここに行きます:
ファイルに単語が出現する回数をカウントする関数があるため、この関数は整数(int)を返します。したがって、別の関数では「カウンター」を使用します。なんらかの理由で、検出されたエラーを破壊するスタックの起動を開始することにしました。私はそれをプログラム全体で2週間テストしていましたが、完璧に機能しました。今、私はそのエラーを受け取りますが、それは本当に意味がありません。世界で何が起こっているのですか?そして、エラーはすぐそこにあります。関数がカウンターを持って戻った後、スタックスマッシングで検出されたエラーを起動します。
編集:検索を続けますが、int関数を返すときにスタックスマッシング検出エラーが発生します。何か案は?そのコードを取り出してもクラッシュしません。本当にわからない
なにか提案を?
ありがとう...
linux - スタックスマッシュテスト環境
virtualbox でバッファ オーバーフロー攻撃をテストしようとしていますが、さまざまなディストリビューションのすべてのセキュリティ機能のために、過去数週間苦労しています。
オンラインでチュートリアルを段階的に実行しようとしましたが、うまくいきませんでした。
すべてのセキュリティ機能を無効にしようとするのではなく、古い Linux ディストリビューションを入手しようとしましたが、それらのほとんどには gcc が付属しておらず、現在、機能するリポジトリがありません。
さまざまなセキュリティ機能を無効にするすべてのコマンドを含む、Ubuntu 10.10(私もダウンロードしました)で段階的に進んでいるYouTubeビデオを見つけましたが、うまくいきませんでした。セグメンテーション違反は発生しましたが、「不正な命令」は発生しませんでした。
gcc (または完全なリポジトリを備えた巨大な DVD ISO の 1 つ) が付属しているので、この保護なしでダウンロードできる古い Linux ディストリビューションはありますか?
c - Debian 2.6 で動作しないバッファ オーバーフローの例
バッファの悪用の例を作成しようとしています ( http://insecure.org/stf/smashstack.htmlの example3.c)) Debian Lenny 2.6 バージョンで動作します。gcc のバージョンと OS のバージョンが Aleph One で使用されているものとは異なることはわかっています。-fno-stack-protector および sysctl -w kernel.randomize_va_space=0 引数を使用してスタック保護メカニズムを無効にしました。私のセットアップと Aleph One の違いを説明するために、次の 2 つのパラメーターを導入しました。offset1 -> buffer1 変数から戻りアドレスまでのオフセットと、offset2 -> ステートメントをスキップするためにジャンプするバイト数。アセンブリ コードを解析してこれらのパラメーターを把握しようとしましたが、うまくいきませんでした。そこで、基本的に (1-60) のオフセット 1 とオフセット 2 の値を同時に指定してバッファー オーバーフロー プログラムを実行するシェル スクリプトを作成しました。しかし、驚いたことに、私はまだこのプログラムを破ることができません。誰かが私を同じように導くことができれば、それは素晴らしいことです。検討のためにコードとアセンブリ出力を添付しました。本当に長い投稿で申し訳ありません:)
ありがとう。
c - sudo としてのみ実行される C バッファー内の命令
Aleph One の記事Smashing the Stack for Fun and Profit で説明されているように、私はバッファ オーバーフロー攻撃に取り組んでいます。
この記事で提案されているように、悪意のあるコード (シェルコード) を環境変数 ($EGG) に植え付けるプログラム (shellcode.c) を作成しました。その後、攻撃したいプログラム (vulnerable.c) に $EGG が引数として渡され、そのプログラムのバッファがオーバーフローし、シェルコードが実行されます。
これはバッファがどのように見えるかです -
[NNNNNNNNNN...NNNNNNSSSSSSSS...SSSSSSSRRRRR...RRRRRR]
ここで、N は NOP 命令 ( NOP sledを参照)、S はシェルコード、R はアドレス (命令ポインターがコード セグメントから上記のスタック バッファーにジャンプして命令の実行を開始するバッファーにアドレスを返す) です。
通常のユーザーとして shellcode.c と脆弱な.c の実行可能ファイルを実行すると、次の問題に直面します。命令ポインターがバッファーにリダイレクトされ、命令に遭遇すると、セグメンテーション違反が発生します。ただし、プログラムを sudo として実行すると、バッファ内の命令は問題なく実行され、バッファ内の後続のシェルコードが正常に実行され、ルート ターミナルが起動され、エクスプロイトが完了します。なぜこれが起こっているのか、誰かが光を当てることができますか?
次の保護を無効にしました - Stack Smashing Protection、ASLRおよびLinux の NX (eXecute Disable Bit)。
gcc 4.4.3 (ターゲット: i486-linux-gnu) を使用してコンパイルし、カーネル 2.6.32 を実行する Ubuntu 10.04 (Lucid Lynx) で実行しています。
以下は私の2つのプログラムです:
脆弱な.c
shellcode.c
c - スタックスマッシングを使用して命令をスキップする
スタックスマッシングによってリターンアドレスを変更して、命令をスキップしようとしています。次のコードは、メインのa ++をスキップし、「13」の出力を出力します。このコードを32ビットのIntelマシンで実行しました。
bufの開始アドレスから24バイトの変位でリターンアドレスが格納される理由がわかりません。別の32ビットIntelマシンで同じコードを実行しようとしましたが、24バイトではなく20バイトの変位を使用する必要がありました。私は次の図に私の理解を入れました。「?」で表されるギャップを何が埋めているのかわかりません。図では。gccはカナリアの値をそこに入れますか、それとも何かが足りませんか?
図へのリンク:http ://www.cse.iitb.ac.in/~shashankr/stack.png
スタックexample3.cの混乱を壊すことは同じ質問をしましたが、一般的に変位の理由を説明することができませんでした。
次の図は、関数にブレークポイントを配置することによって取得されたスタックを示しています。
(出典:www.cse.iitb.ac.inのshashankr)
以下は、mainとfunのアセンブリコードです。
c - int ポインターを反復処理するとスタックが破壊される
私は C にかなり慣れていないので、EV_KEY イベントを処理するすべてのイベント ハンドラーを開き、それらのファイル記述子のリストを (まだ開いている間に) 表示するユーティリティを作成しようとしています。ファイル記述子をループしようとすると、スタックエラーが発生します。問題の原因を見つけるために、gcc の -Wall フラグを使用して各 C ファイルをコンパイルしようとしましたが、役に立ちませんでした。これが私のコードです:
get_key_handlers() 関数を呼び出すコードは次のとおりです。
最後に、コンパイルとリンクのために実行しているコマンドと、プログラムの実行時出力を次に示します。
これを理解するのを手伝ってくれてありがとう。アドバイスや批評を送っていただければ幸いです。
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に問題はありません。提案?