teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

6

変更

2019/05/06 10:27

投稿

konataro
konataro

スコア37

title CHANGED
File without changes
body CHANGED
@@ -98,7 +98,7 @@
98
98
   
99
99
   
100
100
   
101
- 下記コードのように関数で分けるとEIPが取得可能です。
101
+ 下記コードのように関数で分けるとEIPが取得可能です。(引数からstrcpyで書き込み)
102
102
  ```C
103
103
  #include<stdio.h>
104
104
  #include<stdlib.h>

5

コード編集

2019/05/06 10:27

投稿

konataro
konataro

スコア37

title CHANGED
File without changes
body CHANGED
@@ -111,9 +111,7 @@
111
111
  strcpy(fname, str[1]);
112
112
  }
113
113
 
114
- int main(int argc, char *argv[]){
114
+ int main(int argc, char *argv[]){
115
- char name[10];
116
-
117
115
  if(argc != 2){
118
116
  printf("Usage: %s name\n", argv[0]);
119
117
  exit(1);

4

関数で分けた場合のコードを載せる

2019/05/06 10:22

投稿

konataro
konataro

スコア37

title CHANGED
File without changes
body CHANGED
@@ -94,4 +94,32 @@
94
94
   
95
95
 
96
96
  SIGSEGVが受信されてストップしたときの画像です。
97
- ![![イメージ説明](b46fbcc94465d7f9c389a1172dae567d.png)]
97
+ ![![イメージ説明](b46fbcc94465d7f9c389a1172dae567d.png)]
98
+  
99
+  
100
+  
101
+ 下記コードのように関数で分けるとEIPが取得可能です。
102
+ ```C
103
+ #include<stdio.h>
104
+ #include<stdlib.h>
105
+ #include<string.h>
106
+
107
+ void func(char **str)
108
+ {
109
+ char fname[10];
110
+ printf("%s",str[1]);
111
+ strcpy(fname, str[1]);
112
+ }
113
+
114
+ int main(int argc, char *argv[]){
115
+ char name[10];
116
+
117
+ if(argc != 2){
118
+ printf("Usage: %s name\n", argv[0]);
119
+ exit(1);
120
+ }
121
+ func(argv);
122
+ return 0;
123
+ }
124
+
125
+ ```

3

コマンド部分変更

2019/05/06 10:19

投稿

konataro
konataro

スコア37

title CHANGED
File without changes
body CHANGED
@@ -23,7 +23,11 @@
23
23
 
24
24
  gcc -m32 -fno-stack-protector bof.c
25
25
  gdb a.out
26
+ gdb-peda$ r
27
+ Starting program: bof3
28
+ buffer 0x56559060
26
- gdb-peda$ run $(python -c 'print "A"*26')
29
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
30
+
27
31
  ```
28
32
   
29
33
  gdbでのdisassemble結果

2

検証環境といろいろ追加

2019/05/06 08:14

投稿

konataro
konataro

スコア37

title CHANGED
File without changes
body CHANGED
@@ -69,4 +69,25 @@
69
69
  0x5655622d <+116>: lea esp,[ecx-0x4] <= この部分でespに[ecx - 0x4](0x4141413d)がロードされる 
70
70
  0x56556230 <+119>: ret
71
71
 
72
- ```
72
+ ```
73
+  
74
+ ----追記----
75
+  
76
+ 検証環境
77
+ ```
78
+ uname -a
79
+ Linux kali 4.19.0-kali4-amd64 #1 SMP Debian 4.19.28-2kali1 (2019-03-18) x86_64 GNU/Linux
80
+
81
+ gcc --version
82
+ gcc (Debian 8.3.0-6) 8.3.0
83
+
84
+ gdb --version
85
+ GNU gdb (Debian 8.2.1-2) 8.2.1
86
+
87
+ ```
88
+ gdbには[gdb-peda](https://github.com/longld/peda)を入れて使用しています。
89
+  
90
+  
91
+
92
+ SIGSEGVが受信されてストップしたときの画像です。
93
+ ![![イメージ説明](b46fbcc94465d7f9c389a1172dae567d.png)]

1

4バイトになってなかったのでちょいたし

2019/05/06 08:11

投稿

konataro
konataro

スコア37

title CHANGED
File without changes
body CHANGED
@@ -63,10 +63,10 @@
63
63
  0x5655621f <+102>: add esp,0x10
64
64
  0x56556222 <+105>: mov eax,0x0
65
65
  0x56556227 <+110>: lea esp,[ebp-0x8]
66
- 0x5655622a <+113>: pop ecx <= この部分でecxに0x414141が入る
66
+ 0x5655622a <+113>: pop ecx <= この部分でecxに0x41414141が入る
67
67
  0x5655622b <+114>: pop ebx
68
68
  0x5655622c <+115>: pop ebp
69
- 0x5655622d <+116>: lea esp,[ecx-0x4] <= この部分でespに[ecx - 0x4](0x41413d)がロードされる 
69
+ 0x5655622d <+116>: lea esp,[ecx-0x4] <= この部分でespに[ecx - 0x4](0x4141413d)がロードされる 
70
70
  0x56556230 <+119>: ret
71
71
 
72
72
  ```