最近、暇なのでセキュリティ監査の練習をしようと思いました。
ずっと H サイトの運営モデルに興味があったので、H サイトのプログラムを対象にしました。
このような動画サイトのソースコードで有名なものは実際にはほとんどありません。以前はアップルとオーシャンもありましたが、今は国内での違法コピー対策で(地下に)移行したようです。だから、私は久草しか知りません。
正直言って、以前は久草も動画サイトのプログラムだと思っていましたが、巧妙に利用されているだけだと思いました。しかし、初めて公式のフォーラムを開いた時に驚きました。
公然とした ghs
(この画像は公式のテンプレートです)
どうでもいい、ソースコードをダウンロードして監査を始めましょう。
最新バージョンをダウンロードしました。
│─adminx //バックエンドディレクトリ
│─assets //バックエンドのスタイルシート
│─class //バックエンドのカテゴリ
│─Jccms_json //データの保存場所
│─JCSQL //ビデオデータ
│─lib //データモジュール
│─static //プレーヤーファイル
│─template //テンプレート
│─index.php //エントリーファイル
(公式の構造説明)
ソースコードを手に入れて、phpstudy に入れてみましたが、インストールディレクトリが見つかりませんでした。説明を見てみると、実際にはインストールする必要がないようです。これには疑問がわきました。インストールしないと、データはどこに保存されているのでしょうか?
ホームページに直接アクセスしてみると、ビデオなどが表示されることがわかりました。おそらくリモートから直接取得しているのでしょう(これにより、ビデオの保存問題も解決しました。小さな映画サイトがすべてのファイルをローカルに保存するわけがありません)。
それでは始めましょう。
まず、Seay Audit を使用して自動監査を行います。予め設定されたルールに従って、何も見逃さないはずです。
まずは脆弱性を見つける必要があります。だから、まずはフロントエンドの脆弱性を探しましょう。このウェブサイトの性質から考えると、インタラクションはあまりないと思いますので、直接インジェクションを探しましょう。しばらく探してみると、このプログラム全体が SQL インジェクションに対して無防備であることがわかりました。
しかし、見つけた時にユーザー認証の方法を発見しました。
JCSQL/Admin/Security/AdminUser.php
このファイルにはユーザーのアカウントとパスワードが保存されており、データベースの役割を果たしています。テキスト形式で保存されているため、SQL インジェクションのリスクはありませんし、PHP 形式で存在するため、ダウンロードされることもありません。すばらしいですね。
次に、3 行目を見てみましょう。IP フィルタリングという名前です。
バックエンドにはこの機能があります。
では問題です。情報を変更すると、実際にはテキストが読み書きされます。そして、テキストは PHP 形式で保存されます。したがって、適切なペイロードを挿入すると、任意のファイルの読み書きが直接行われます。さて、もう一度見てみましょう。IPPASS の値
いいですね、直接文字列が書き込まれています。他のセキュリティ関数はフィルタリングされていません。このプログラム自体にはフィルタリング関数があります。
クラシックな防御
(他にも何か関数があるような気がしますが、記事を書く時に見つけられませんでした)
では、この任意のファイルの読み書きの脆弱性を利用してみましょう。目標は AdminUser.php ファイルです。まず、ブラウザでアクセスしてみて、403 などが表示されるかどうか確認しましょう。アクセス後、空白が表示される場合、任意のユーザーがアクセスできることを意味しますが、表示されるコンテンツはありません(コードは 3 行しかないので、表示するものはありません)。
バックエンドに戻り、ホワイトリストに私たちのペイロードを入力します。
コードの元の形式と組み合わせると、最初のシングルクォートを閉じ、私たちのコードを挿入し、後ろのシングルクォートと括弧を閉じる必要があります。
大まかに言えば、このような形式になります:');payload; //'127.0.0.1
例えば、ファイルに書き込みたい場合:
');$myfile = fopen ("1.txt", "w") ;$txt = "奥里给";fwrite ($myfile, $txt); //'127.0.0.1
書き込みが完了したら、AdminUser.php にアクセスしてコードを実行します。その後、同じディレクトリにある 1.txt にアクセスして「奥力给」を確認できます。
基本的にはこれで終わりです。この CMS は非常に小さく、構造がシンプルで巧妙なため、面白いことはありません。
最後に、リフレクション XSS を 1 つ紹介します。
自動監査で 3 つの XSS の疑わしいポイントが見つかりました。
最初のものを見てみましょう。
script の src に GET パラメータの Play が直接出力されていることがわかります。
同じように構築すればいいので、直接ペイロードを作成します。方法はたくさんあります。
このファイルにアクセスする際には、XXXX.PHP?Paly=payload というパラメータを追加するだけです。