回答編集履歴

3

推敲

2019/07/24 19:45

投稿

set0gut1
set0gut1

スコア2413

test CHANGED
@@ -52,8 +52,6 @@
52
52
 
53
53
  上のコードではbarにstrcpyした文字列が入り切らないためfooまで侵食してて挙動が壊れてます。
54
54
 
55
- こういうのが脆弱性を生むことがあるので怖いです。
56
-
57
55
 
58
56
 
59
57
  質問者さんの遭遇した状況でいうと

2

推敲

2019/07/24 19:45

投稿

set0gut1
set0gut1

スコア2413

test CHANGED
@@ -74,7 +74,7 @@
74
74
 
75
75
 
76
76
 
77
- tmpをchar*型変数にして
77
+ 質問者さんのコードへの変更としては、tmpをchar*型変数にして
78
78
 
79
79
 
80
80
 

1

推敲

2019/07/24 19:29

投稿

set0gut1
set0gut1

スコア2413

test CHANGED
@@ -1,4 +1,6 @@
1
1
  strcpyのオーバーフローですね。
2
+
3
+
2
4
 
3
5
  再現コード
4
6
 
@@ -10,25 +12,21 @@
10
12
 
11
13
  #include <string.h>
12
14
 
13
- #include <stdlib.h>
14
-
15
15
 
16
16
 
17
17
  int main(void){
18
18
 
19
- char foo[] = "foo";
19
+ char foo[] = "foo"; // メモリ上の連続した領域に何個か作る
20
20
 
21
21
  char bar[] = "bar";
22
22
 
23
23
  char baz[] = "baz";
24
24
 
25
- char *s[] = { foo, bar, baz };
25
+ char xxx[] = "123456";
26
26
 
27
- char onetwothree[] = "123456789";
27
+ strcpy(bar, xxx);
28
28
 
29
- strcpy(s[1], onetwothree);
30
-
31
- printf("0: %s\n1: %s\n2: %s\n", s[0], s[1], s[2]);
29
+ printf("foo: %s\nbar: %s\nbaz: %s\n", foo, bar, baz);
32
30
 
33
31
  return 0;
34
32
 
@@ -42,17 +40,19 @@
42
40
 
43
41
  ```
44
42
 
45
- 0: 56789
43
+ foo: 56
46
44
 
47
- 1: 123456789
45
+ bar: 123456
48
46
 
49
- 2: baz
47
+ baz: baz
50
48
 
51
49
  ```
52
50
 
53
51
 
54
52
 
55
- 上のコードでは s[1] strcpy した文字列が入り切らないため s[0] まで(更にその外側まで)侵食してて挙動が壊れてます。
53
+ 上のコードではbarにstrcpyした文字列が入り切らないためfooまで侵食してて挙動が壊れてます。
54
+
55
+ こういうのが脆弱性を生むことがあるので怖いです。
56
56
 
57
57
 
58
58
 
@@ -70,17 +70,17 @@
70
70
 
71
71
 
72
72
 
73
- このときに bird の末尾のヌル文字が cat の0文字目を侵食して、空文字列として認識されるようになっているという挙動です。
73
+ このときにbirdの末尾のヌル文字がcatの0文字目を侵食して、空文字列として認識されるようになっているという挙動です。
74
74
 
75
75
 
76
76
 
77
- tmpをポインタ型にして
77
+ tmpをchar*変数にして
78
78
 
79
79
 
80
80
 
81
81
  ```
82
82
 
83
- *tmp="unkooooooo";
83
+ char str[100], *ch, *s[1000], *tmp;
84
84
 
85
85
  ```
86
86
 
@@ -103,5 +103,3 @@
103
103
 
104
104
 
105
105
  この課題については正しい出力をするようになります。
106
-
107
- こういうのが脆弱性の元になるので怖いですね。