2016-09-25 21 views
3

次のコードで脆弱性を発見しようとしていますが、バッファオーバーフローで悪用される可能性があると推測していますが、残念ながらどこから始めるべきかわかりません。バッファオーバーフローについての演習

#include <stdio.h> 
#include <stdlib.h> 

#define TABLELEN 7 
int table[] = {2, 3, 5, 7, 11, 13, 17}; 

void loadTable(int *hashtable) { 
int i; 
for (i = 0; i < TABLELEN; i++) { 
hashtable[i] = table[i]; 
    } 
} 

int main(int argc, char *argv[]) 
{ 
int array[8]; 
int index; 
int value; 
if (argc < 3) { 
    fprintf(stderr, "Not enough args\n"); 
    return -1; 
} 
loadTable(array); 
index = (int) strtol(argv[1], NULL, 10); 
value = (int) strtoul(argv[2], NULL, 16); 
printf("Updating table value at index %d with %d: previous value was %d\n", 
index, value, array[index]); 
array[index] = value; 
printf("The updated table is:\n"); 
for (index = 0; index < TABLELEN; index++) { 
    printf("%d: %d\n", index, array[index]); 
} 
    return 0; 
} 

私は、配列サイズが8であるが、7つの要素だけが宣言されている部分を悪用する方法を見つけようとしています。私は正確な解決策を探していませんが、どんな助けも高く評価されています

+0

これを使用する前に 'index'の値をチェックしないので、予期しない位置に' value'を書き込んでスタックを破壊することができます。 [スタックベースのバッファオーバーフローに関する記事はこちら](https://en.wikipedia.org/wiki/Stack_buffer_overflow) –

答えて

1

この場合、indexの値がlongに変換されたことを確認しないので、バッファオーバーフローが発生する可能性があります。その後、次の文を使用します。

array[index] = value; 

をしかし、あなたはとしてarrayを宣言している:あなたのarray'sインデックスは0から開始し、7に達することを意味し

int array[8]; 

。したがって、index7より大きい場合は、バッファオーバーフローが発生する可能性があります。

関連する問題