###前提・実現したいこと
現在セキュリティの勉強をしており、C言語のスクリプトにある脆弱性(スタックバッファオーバーフロー)を用いてexploitコードを作りたいです。
デバッガであるGDBを用いてC言語スクリプトのアセンブリを分析して、shellコード(こちらは作成済みなので大丈夫です,shellcode.h)を引数として送って実行させ,ルートのシェルを起動させるというexploitコードをC言語で書きたいです。
スタックバッファオーバーフローによってshellコードの先頭アドレスにリターンさせるようにすることで、shellコードを実行させられるということだと思うのですが、
shellコードの先頭アドレスはどうやって求めれば良いのか。
そもそもこの解釈で当たっているのか。
当たっていなければどうやってshellコードを実行させるのか。
ということが知りたいです。
環境はLinuxで、ASLRやSSPなどのセキュリティ機構は特にありません。
言葉足らずの箇所も多々あると思いますので、その都度ご質問いただければと思います。
お手数ですが、よろしくお願いいたします。
###該当のソースコード
以下が脆弱性のあるソースコードtarget.c
こちらは特にいじりません。
c
1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4 5void strcpyn(char *out, int outl, char *in) 6{ 7 int i, len; 8 9 len = strlen(in); 10 if (len > outl) 11 len = outl; 12 13 for (i = 0; i <= len; i++) 14 out[i] = in[i]; 15} 16 17void fuga(char *arg) 18{ 19 char buf[101]; 20 21 strcpyn(buf, sizeof buf, arg); 22} 23 24void hoge(char *argv[]) 25{ 26 fuga(argv[1]); 27} 28 29int main(int argc, char *argv[]) 30{ 31 if (argc != 2) 32 { 33 fprintf(stderr, "target: argc is not 2\n"); 34 exit(EXIT_FAILURE); 35 } 36 hoge(argv); 37 return 0; 38} 39
以下は攻撃に用いるexploitコードの骨組みです。
以下を用いてexploitコードを作りたいです。
こちらが今回いじるコードです。
c
1 2 3#include <stdio.h> 4#include <stdlib.h> 5#include <string.h> 6#include <unistd.h> 7#include "shellcode.h" 8 9#define TARGET "/target" 10 11int main(void) 12{ 13 char *args[3]; 14 char *env[1]; 15 16 args[0] = TARGET; args[1] = "何かしらの値"; args[2] = NULL; 17 env[0] = NULL; 18 19 return 0; 20}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/23 17:35