質問編集履歴
6
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
ret2libc 攻撃を実験してみようと思い、ASLRを無効にして、バッファオーバーフローによりリターンアドレスをsystem()へのアドレスに書き換え、引数を/bin/shにしようとしました。
|
1
|
+
ret2libc 攻撃を実験してみようと思い、SSPとASLRを無効にして、バッファオーバーフローによりリターンアドレスをsystem()へのアドレスに書き換え、引数を/bin/shにしようとしました。
|
2
2
|
しかし、system()アドレスが0x0000......だったため引数を指定できませんでした。
|
3
3
|
実行環境のメモリアドレスは8バイトあるため、全てが0x0000......で表されています。このような場合に、上手くsystem(/bin/sh)を実行する方法を教えて下さい。
|
4
4
|
|
5
説明の補足
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
ret2libc 攻撃を実験してみようと思い、ASLRを無効にして、バッファオーバーフローによりリターンアドレスをsystem()へのアドレスに書き換え、引数を/bin/shにしようとしました。
|
2
2
|
しかし、system()アドレスが0x0000......だったため引数を指定できませんでした。
|
3
3
|
実行環境のメモリアドレスは8バイトあるため、全てが0x0000......で表されています。このような場合に、上手くsystem(/bin/sh)を実行する方法を教えて下さい。
|
4
|
+
|
5
|
+
補足
|
6
|
+
このプログラムを、gdbにおいて、
|
7
|
+
r `perl -e 'print "A"x128,"B"x8,"(system関数のアドレス)","(exit関数のアドレス)",
|
8
|
+
"(環境変数を用いた 文字列/bin/sh へのアドレス)"'`
|
9
|
+
で実行した所、system関数のアドレスが \x--\x.......\x00\x00となってしまうため、strcpyが文字列として認識するのが入力値のsystem関数のアドレスの6バイト目までとなってしまい、system関数の引数部分を書き換えられない、という意味です。うまく伝わればいいのですが・・・
|
10
|
+
また、この実験はCTFに参加してみたく行ったものなので、悪意ある攻撃のためではありません。
|
11
|
+
|
4
12
|
この実験で使用したコードは以下の通りです。
|
5
13
|
```C
|
6
14
|
#include <stdio.h>
|
4
先の編集で貼り付けるコードを間違えていたので、修正しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -4,15 +4,20 @@
|
|
4
4
|
この実験で使用したコードは以下の通りです。
|
5
5
|
```C
|
6
6
|
#include <stdio.h>
|
7
|
+
#include <string.h>
|
7
8
|
|
8
|
-
void
|
9
|
+
void bug(char *arg1){
|
9
|
-
|
10
|
+
char name[128];
|
10
|
-
x++;
|
11
|
-
|
11
|
+
strcpy(name,arg1);
|
12
|
+
printf("Hello %s\n", name);
|
12
13
|
}
|
13
14
|
|
15
|
+
int main(int argc, char **argv){
|
14
|
-
|
16
|
+
if(argc < 2){
|
17
|
+
printf("Usage: %s <your name>\n", argv[0]);
|
15
|
-
|
18
|
+
return 0;
|
19
|
+
}
|
20
|
+
bug(argv[1]);
|
16
21
|
return 0;
|
17
22
|
}
|
18
23
|
|
3
先の編集に伴ってタグを追加しました。
title
CHANGED
File without changes
|
body
CHANGED
File without changes
|
2
質問を補足するためソースコードを追加しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,3 +1,21 @@
|
|
1
1
|
ret2libc 攻撃を実験してみようと思い、ASLRを無効にして、バッファオーバーフローによりリターンアドレスをsystem()へのアドレスに書き換え、引数を/bin/shにしようとしました。
|
2
2
|
しかし、system()アドレスが0x0000......だったため引数を指定できませんでした。
|
3
|
-
実行環境のメモリアドレスは8バイトあるため、全てが0x0000......で表されています。このような場合に、上手くsystem(/bin/sh)を実行する方法を教えて下さい。
|
3
|
+
実行環境のメモリアドレスは8バイトあるため、全てが0x0000......で表されています。このような場合に、上手くsystem(/bin/sh)を実行する方法を教えて下さい。
|
4
|
+
この実験で使用したコードは以下の通りです。
|
5
|
+
```C
|
6
|
+
#include <stdio.h>
|
7
|
+
|
8
|
+
void foo(int x){
|
9
|
+
int y;
|
10
|
+
x++;
|
11
|
+
y = 4;
|
12
|
+
}
|
13
|
+
|
14
|
+
int main(void){
|
15
|
+
foo(2);
|
16
|
+
return 0;
|
17
|
+
}
|
18
|
+
|
19
|
+
|
20
|
+
```
|
21
|
+
ubuntu14.04 64bitで実行しました。
|
1
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
ret2libc 攻撃を実験してみようと思い、ASLRを無効にして、リターンアドレスをsystem()へのアドレスに書き換え、引数を/bin/shにしようとしました。
|
1
|
+
ret2libc 攻撃を実験してみようと思い、ASLRを無効にして、バッファオーバーフローによりリターンアドレスをsystem()へのアドレスに書き換え、引数を/bin/shにしようとしました。
|
2
2
|
しかし、system()アドレスが0x0000......だったため引数を指定できませんでした。
|
3
3
|
実行環境のメモリアドレスは8バイトあるため、全てが0x0000......で表されています。このような場合に、上手くsystem(/bin/sh)を実行する方法を教えて下さい。
|