質問編集履歴
6
変更
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
コード編集
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
関数で分けた場合のコードを載せる
title
CHANGED
File without changes
|
body
CHANGED
@@ -94,4 +94,32 @@
|
|
94
94
|
|
95
95
|
|
96
96
|
SIGSEGVが受信されてストップしたときの画像です。
|
97
|
-
]
|
97
|
+
]
|
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
コマンド部分変更
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
|
-
|
29
|
+
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
30
|
+
|
27
31
|
```
|
28
32
|
|
29
33
|
gdbでのdisassemble結果
|
2
検証環境といろいろ追加
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
|
+
]
|
1
4バイトになってなかったのでちょいたし
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に
|
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](
|
69
|
+
0x5655622d <+116>: lea esp,[ecx-0x4] <= この部分でespに[ecx - 0x4](0x4141413d)がロードされる
|
70
70
|
0x56556230 <+119>: ret
|
71
71
|
|
72
72
|
```
|