#include<stdio.h> #include<string.h> #include<stdlib.h> int main(int argc, char* argv[]){ int i = 0; int x[4] = {0} char text[32] = {0}; strcpy(text, argv[1]); for(i = 0; i < 6; i++) //☆ x[i] = i; printf("x[0] = %d, x[3] = %d, i = %d\n", x[0], x[3], i); return 0; }
-fno-stack-protector
でスタックプロテクタを無効にしました。
segmentation faultです。
なぜでしょうか??
☆マークがついているところが脆弱性です。
スタックオーバーフローを起こして int i = 0; の値を書き換えたいです。
他になんのセキュリティ機能で保護されているのでしょうか??
linux 64bit gccです。
[追記]
ちなみに、strcpy()にも脆弱性が入っているので、
./a.out AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
これもsegmentation faultでした。
[追記2]
算術オーバーフローも別の変数に値が入ってしまうことはあるのでしょうか?
int i = 0;
int gh = 0;
int ff = 0;
int型のmaxの値を超える値を入れます。
warningが出てきます。
warning: overflow in implicit constant conversion
gh = 7483294672645692748739827964726579478927927424252526; ← 算術オーバーフローですよね??
int i と int ff の値は書き換わらないのですが・・・・・・・・
どういうことでしょうか?
回答4件
あなたの回答
tips
プレビュー