発生している問題・エラーメッセージ
ctfのpwn問題の入門として勉強するために「セキュリティコンテストチャレンジブック」を参考にきわめて簡単なcプログラムbof3.cを作り、gccでコンパイルしたところ、objdumpによるplt領域のアドレスが400~500程度の数値となってしまいました。
また、fileコマンドでファイルを確認したところexecutableファイルでなくなぜかshared objectファイルになっていました(実行自体は通常通り可能でした)。
インターネットでいくらか調べてみましたがオプションなしでこのようになっている例は見当たりませんでした。
cpawctfのサイトなどからダウンロードしてきたファイルは正しくexecutableとなり、plt領域のアドレスも08048000程度となっていたため、アドレスが小さな(相対?)アドレスとなっているのはこのファイル形式が問題だと推測しているのですが、実際にそうであるのか、またその場合正しくexecutableファイルをc言語ソースから作るためにはどのようにすればいいのか、ご回答いただけると幸いです。
###bof3.c
#include<stdio.h> #include<string.h> char buffer[32]; void vulnerable() { char local[32]; printf("buffer :0x%x\n",&buffer); fgets(local,128,stdin); strcpy(buffer,local); } int main(int argc,char *argv[]) { vulnerable(); return 0; }
試したこと
$sudo sysctl -w kernel.randomize_va_space $gcc -m32 -fno-stack-protector -o bof3 bof3.c $objdump -d -M intel -j .plt --no bof3 00000400 <.plt>: 400: push DWORD PTR [ebx+0x4] 406: jmp DWORD PTR [ebx+0x8] 40c: add BYTE PTR [eax],al ... 00000410 <printf@plt>: 410: jmp DWORD PTR [ebx+0xc] 416: push 0x0 41b: jmp 400 <.plt> (省略) $./bof3 buffer :0x5660e040 AAAA $file bof3 bof3: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=fff7f8ca8657f769a6467cbabcb4a710ad1ebb89, not stripped
###環境
VirtualBox xubuntu18.04.02 64bit/32bitの両方で確認
gcc 7.3.0
回答1件
あなたの回答
tips
プレビュー