ret2libc 攻撃を実験してみようと思い、SSPとASLRを無効にして、バッファオーバーフローによりリターンアドレスをsystem()へのアドレスに書き換え、引数を/bin/shにしようとしました。
しかし、system()アドレスが0x0000......だったため引数を指定できませんでした。
実行環境のメモリアドレスは8バイトあるため、全てが0x0000......で表されています。このような場合に、上手くsystem(/bin/sh)を実行する方法を教えて下さい。
補足
このプログラムを、gdbにおいて、
r perl -e 'print "A"x128,"B"x8,"(system関数のアドレス)","(exit関数のアドレス)", "(環境変数を用いた 文字列/bin/sh へのアドレス)"'
で実行した所、system関数のアドレスが \x--\x.......\x00\x00となってしまうため、strcpyが文字列として認識するのが入力値のsystem関数のアドレスの6バイト目までとなってしまい、system関数の引数部分を書き換えられない、という意味です。うまく伝わればいいのですが・・・
また、この実験はCTFに参加してみたく行ったものなので、悪意ある攻撃のためではありません。
この実験で使用したコードは以下の通りです。
C
1#include <stdio.h> 2#include <string.h> 3 4void bug(char *arg1){ 5 char name[128]; 6 strcpy(name,arg1); 7 printf("Hello %s\n", name); 8} 9 10int main(int argc, char **argv){ 11 if(argc < 2){ 12 printf("Usage: %s <your name>\n", argv[0]); 13 return 0; 14 } 15 bug(argv[1]); 16 return 0; 17} 18 19
ubuntu14.04 64bitで実行しました。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/25 11:45
2019/01/25 13:05
2019/02/22 12:28