压在透明的玻璃上c-国产精品国产一级A片精品免费-国产精品视频网-成人黄网站18秘 免费看|www.tcsft.com

漏洞挖掘分析:QCMS V2.0命令執(zhí)行與暴絕對路徑漏洞

  QCMS是一款小型的網(wǎng)站管理系統(tǒng)。擁有多種結(jié)構(gòu)類型,包括:ASP+ACCESS、ASP+SQL、PHP+MYSQL。今天叫兄弟們一起挖掘QCMS的漏洞,與大家分享挖洞的全過程。

  把源碼down下來,本地先搭建了一個環(huán)境。各種掃描,各種fuzzer,各種模糊測試之后發(fā)現(xiàn)apache錯誤日志里面有如下信息:

  PHP Warning:  mkdir() [<a href='function.mkdir'>function.mkdir</a>]: Invalid argument in D:\WWW\system\controller\home.php on line 36

  在systemcontrollerhome.php文件的36行有創(chuàng)建目錄的mkdir函數(shù)

  而$path這個變量是由$thumb傳遞過來的,那么我們向上追蹤$thumb變量。

  我們發(fā)現(xiàn)$thumb初始值為空字符串。而給$thumb賦值是通過$url_arr這個數(shù)組。

  而$url_arr這個數(shù)組又是通過explode函數(shù)生成的。其實(shí)真正的漏洞成因就在

  $url_arr = explode('_', substr($url, 1, -4));

  Explode函數(shù)根據(jù)_將原始的URI分割為數(shù)組,存放到$url_arr中。

  接下來把$url_arr[1]的第一個元素向后截取作為圖片的寬度;

  把$url_arr[2]的第一個元素向后截取作為圖片的高度;

  接下來再判斷$url_arr[3]是否為空,并賦值給$noWaterMark.

  也就是說,我們得用_來分割url,而且讓$url_arr的長度必須大于2。否則直接404并且退出程序。

  我們23行下面設(shè)置個斷點(diǎn),并且把$url_arr打印出來。

  發(fā)現(xiàn)當(dāng)我提交http://localhost:8088/11_11_11_11

  的時候,程序可以直接繞過19行的if判斷,向下走。

  但是直接這樣提交并沒有創(chuàng)建文件夾,是因?yàn)?path = dirname($thumb);這個函數(shù)并沒有給$path賦值,我們打印下$path的值,看下是多少。

  發(fā)現(xiàn)此時的$path是一個.,那么$thumb的值是多少呢?

  我們發(fā)現(xiàn)$thumb的值是11_w1_h1_11。我們來看下dirname這個函數(shù)。

  發(fā)現(xiàn)該函數(shù)返回去掉文件名后的目錄名。OK,那么我們提交這樣的URL看看:http://localhost:8088/11_11_11__11/www

  我們?nèi)∠麆h掉剛才添加的var_dump這些代碼。直接訪問這個URL發(fā)現(xiàn)文件夾創(chuàng)建成功。

  大家可以可能會問為什么還有一個404頁面。OK,我們接著往下看代碼。

  目錄創(chuàng)建完之后,會盤對$filename這個變量是否是一個文件。我們打印下這個文件名。

  我們會發(fā)現(xiàn),這個文件名是用$url_arr的下標(biāo)為0的元素加上文件的后綴名組裝的。

  這真是一個神奇的組裝。大家看我怎么拼接。

  我提交如下url:

  http://localhost:8088/index_11_11__11/.php

  就組裝成了首頁的index.php

  我提交http://localhost:8088/lib/config/config_11_11__11/.php

  那么就組裝成了數(shù)據(jù)庫的配置文件.

  這時候$filename就是一個文件名.就繞過了

  開始執(zhí)行下面的生成縮略圖的操作.

  接下來程序會判斷圖片的大小是否在程序預(yù)定義的$size_arr這個數(shù)組中。

  如果不在,那么抱歉,404.我們先打印下原來的圖片大小。

  發(fā)現(xiàn)圖片大小為1,1 。不在預(yù)定義的數(shù)組中,那么就不會向下執(zhí)行。怎么繞過呢?修改圖片大小。我們提交如下url

  http://localhost:8088/lib/config/config_150_150__11/.php

  成功繞過。開始執(zhí)行exec生成縮略圖的操作。和readfile讀取文件的操作。

  exec('convert -resize "'.$width.'x&'.$height.'>" '.$filename.' '.$thumb.'');

  而convert-resize 這個命令是linux下生成縮略圖的命令。要使用這個命令,必須先安裝ImageMagick。于是我又搭建了一個LAMP環(huán)境。yum -y install ImageMagick

  安裝了下ImageMagick

  然后生成了下縮略圖

  convert -resize "100×100>"  /var/www/html/qcms/upload/static/upload/source/20141101/5.png  /var/www/html/qcms/upload/static/upload/source/20141101/6.png

  這條命令就是把5.png 縮放為100×100的6.png。

  而我提交http://localhost:8088/lib/config/config_150_150__11/.php

  那么就試圖把lib/config/config.php這個文件生成lib/config/config_w50_h50.php

  把lib/config/config_w50_h50.php 當(dāng)成lib/config/config.php的縮略圖。

  但是一個php文件當(dāng)作圖片生成另一個縮略圖文件就會失敗。因此再去讀取那個縮略圖文件時就會讀取失敗。因?yàn)槲募淮嬖凇T诨鸷驴赡軙﹫D片因存在錯誤而無法顯示。

  而在IE下有可能就會暴出絕對路徑

  我感覺exec('convert -resize " '.$width.''.$height.'>" '.$filename.''.$thumb.''); 和readfile($thumb); 這兩處應(yīng)該還有更多的利用價值。希望大家一起研究下。

 

上一篇:智能無懼挑戰(zhàn) 山石網(wǎng)科轟動RSA2015

下一篇:程序員發(fā)現(xiàn)疑似蘋果官方網(wǎng)絡(luò)爬蟲活動蹤跡