sekai013's blog

JavaScriptとかを勉強する

KSNCTF #12 Hypertext Preprocessor

問題

ksnctf - 12 Hypertext Preprocessor

考えたこと

意味はわからんけど意味有りげなタイトルはググれと習ったのでまずタイトルでググると、Hypertext Preprocessor っていうのは PHP のことらしい。カッコイイ。
ハイパーテキストプリプロセッサ書けますって言ってみたい。

問題のページを開くと時限爆弾的なのが出てくる。ソースを見ると <title>Clock</title> って書いてあるけど数字は動いてない。
Unix time 的な何かの基準の時間とか?そもそも時間かどうかも怪しい。

と思ったけど更新したら数字変わった。

[更新前]2012:1823:20:15:03:28:21:08:21:42:07:36:10
[更新後]2012:1823:20:15:03:28:21:09:56:54:55:13:38

2012:1823:YY:YY:MM:DD:HH:mm:SS:...

くらいな気はするけど 2012:1823 というのはわからない。でも2012はなんとなく2012年な気がした。

CGI版PHPにリモートからスクリプト実行を許す脆弱性(CVE-2012-1823) | 徳丸浩の日記

まあタイトル見た感じ99%これという感じがする。
CGI 環境で PHP 動かしてると任意のスクリプトを外部から実行されるとかいうヤバそうな脆弱性
OS コマンドインジェクションとかいうのを本で読んだけどそれっぽい。

= を含まないクエリをコマンドライン引数として認識される。例えば ?-s とかいうクエリを投げると -s オプションを渡すことができてソースが見れるらしい。やってみたらソース見れた。

<?php // 主要部分抜粋
    //  Flag is in this directory.

    date_default_timezone_set('UTC');
    
    $t = '2012:1823:20:';
    $t .= date('y:m:d:H:i:s');
    for($i=0;$i<4;$i++)
        $t .= sprintf(':%02d',mt_rand(0,59));
?>

このディレクトリ内のファイルから旗を見つけないといけない。

指定できるのは -s だけじゃなくて、 -d オプションで php.ini (PHP の設定ファイル) の設定を指定できる(らしい)。こわい。

allow_url_include=On
auto_prepend_file=php://input

php.ini をこういう設定にしておくと POST パラメータとして送信した内容を PHP ファイルとして実行できる(らしい)。コード書いた。

https://github.com/sekai013/ksnctf/blob/master/hypertext_preprocessor/hypertext.rb

実行したら旗取れた。

思ったこととか

Login のときもだけどこういう深刻な脆弱性をつくときはおおっという感じになる。

PHP とか PerlCGI脆弱性の話聞いたことあるけど聞いたことあるだけだし、 PHP は3秒くらいしか見たことないし、 Perl は全くわからない。
見たやつをちょっとずつ覚えていけばいいか。