質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

2516閲覧

executableファイルが作れない

kurosio

総合スコア13

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2019/03/12 11:11

発生している問題・エラーメッセージ

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/03/12 12:25

なにをもってexecutableファイルかshared objectファイルかを判断してますか?
kurosio

2019/03/12 14:12

単純にfileコマンドの出力をみて、ELF 32-bit LSB executableだった場合はexecutableファイルと、ELF 32-bit LSB shared objectだった場合はshared objectファイルと判断しています。
guest

回答1

0

ベストアンサー

投稿2019/03/13 00:49

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurosio

2019/03/13 00:54

できました! ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問