今天放假閑著無(wú)事就找了個(gè)cms來(lái)挖挖漏洞,挖到的漏洞比較簡(jiǎn)單,適合新手入門(mén),所以本篇文章就記錄一下這幾個(gè)漏洞的審計(jì)過(guò)程,以及如何從新手的角度去挖到cms一些常見(jiàn)的漏洞,如果是大佬就可以繞道了。
本文涉及相關(guān)實(shí)驗(yàn):任意文件下載漏洞的代碼審計(jì) (通過(guò)本節(jié)的學(xué)習(xí),了解文件下載漏洞的原理,通過(guò)代碼審計(jì)掌握文件下載漏洞產(chǎn)生的原因以及修復(fù)方法。)
一般來(lái)說(shuō)我們可以到谷歌百度等引擎找到cms的官網(wǎng)下載源碼,或者碼云,然后在本地用phpstudy搭建起來(lái)環(huán)境
我們?cè)谶@里下載cms的源碼,下載之后怎么在本地搭建呢
我們打開(kāi)phpstudy-》其他選項(xiàng)菜單-》站點(diǎn)域名管理里
把網(wǎng)站目錄填寫(xiě)你下載源碼的路徑就好了,然后進(jìn)hosts添加域名
然后不出意外就可以訪問(wèn)了
在白盒代碼審計(jì)的時(shí)候你可能會(huì)需要到斷點(diǎn)調(diào)試,這個(gè)時(shí)候就需要用到xdebug
,這里我個(gè)人用的是vscode
編輯器,當(dāng)然你用phpstorm
也是可以的,配置過(guò)程如下
首先在vscode
的應(yīng)用商店下載php debug
插件
在php.ini
添加
[XDebug]
xdebug.profiler_output_dir ="D:\phpStudy\PHPTutorial\tmp\xdebug"
xdebug.trace_output_dir ="D:\phpStudy\PHPTutorial\tmp\xdebug"
zend_extension="D:\phpStudy\PHPTutorial\php\php-7.1.13-nts\ext\php_xdebug.dll"
xdebug.remote_enable = on
xdebug.remote_autostart = on
在文件-》首選項(xiàng)-》設(shè)置-》用戶-》擴(kuò)展-》settings.json
{
"php.validate.executablePath": "D:/phpStudy/PHPTutorial/php/php-7.1.13-nts/php.exe",
"editor.mouseWheelZoom": true,
"php.executablePath": "D:/phpStudy/PHPTutorial/php/php-7.1.13-nts/php.exe",
"workbench.editorAssociations": [
{
"viewType": "jupyter.notebook.ipynb",
"filenamePattern": "*.ipynb"
}
],
"explorer.confirmDelete": false
}
launch.json
添加
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9000
},
]
}
上面一些路徑自行更改一下,然后我們新建一個(gè)1.php
打個(gè)斷點(diǎn),然后訪問(wèn)http://127.0.0.1/1.php
,如果出現(xiàn)如下,就說(shuō)明xdebug
環(huán)境就成功搭建了
通常來(lái)說(shuō),漏洞等級(jí)評(píng)級(jí)高的就是可以rce
的高危漏洞,而想要rce
最常見(jiàn)的就是文件上傳
找文件上傳漏洞的話,有兩種思路,分別為黑盒和白盒,對(duì)新手來(lái)說(shuō)代碼功底不強(qiáng)的話,黑盒應(yīng)該是會(huì)比較簡(jiǎn)單的,這里分別從兩個(gè)不同的角度來(lái)尋找漏洞
一般來(lái)說(shuō)網(wǎng)站的后臺(tái)很多地方都是可以文件上傳的,我們進(jìn)入后臺(tái)之后可以尋找諸如文章發(fā)布處,修改頭像處,附件,插件管理等地方,特別是像在文章發(fā)布處有這種富文本編輯器的地方往往會(huì)有上傳圖片和上傳附件的功能
我們拿剛剛搭建好的cms
,進(jìn)入后臺(tái)之后在發(fā)布文章處找到有可以上傳圖片的地方
我們隨便上傳一個(gè)1.php
,發(fā)現(xiàn)提示上傳圖片發(fā)生錯(cuò)誤,應(yīng)該是被過(guò)濾了
但不確定是不是前端過(guò)濾還是后端過(guò)濾,我們先上傳1.jpg
,抓包改一下
發(fā)現(xiàn)上傳成功,原來(lái)只是前端過(guò)濾,蕪湖這不起飛,我們?cè)僭L問(wèn)一下我們上傳的文件
發(fā)現(xiàn)已經(jīng)成功getshell
這里的過(guò)濾比較簡(jiǎn)單,新手可以學(xué)一下各種繞過(guò)的技巧:https://xz.aliyun.com/t/6692
那么除了發(fā)布文章處,我們還可以在上傳圖片這些地方入手
我們?cè)谖⑿判〕绦蜻@里的基本設(shè)置處看到有個(gè)首頁(yè)分享封面
和上面一樣,只是前端做了過(guò)濾,我們抓包改文件即可
但是這里的話只是提示上傳成功,沒(méi)有回顯出來(lái)文件的名字,我們可以在本地文件處看看到底上傳了什么東西
發(fā)現(xiàn)上傳了wx_share_cover.php
,這個(gè)文件的名字是固定的,于是我們?cè)L問(wèn)試試看
發(fā)現(xiàn)也已經(jīng)成功getshell
對(duì)于初學(xué)者而言,找漏洞不能只看黑盒,也要基于白盒審計(jì)進(jìn)行,所謂白盒審計(jì)可以簡(jiǎn)單地理解為就是看著代碼找漏洞
我們知道php
文件上傳的函數(shù)是move_uploaded_file()
,或者一般來(lái)說(shuō)上傳的方法名是有upload
關(guān)鍵字的,我們可以全局搜索他們定位到上傳功能的代碼里面
我們找到相應(yīng)的代碼塊如下
可以看到validate
的check
就是這里的過(guò)濾,我們用上面的方法繞過(guò)即可,如果想清楚的跟蹤進(jìn)這個(gè)函數(shù)就可以在這里打個(gè)斷點(diǎn),然后分析
當(dāng)然白盒尋找rce
漏洞,我們還可以找找file_put_content
等可以直接寫(xiě)文件的函數(shù)
通常我們找文件刪除漏洞的話,可以全局搜索unlink
函數(shù)
這里的代碼功能比較簡(jiǎn)單,正如注釋所說(shuō)的刪除目錄下面的所有文件,但不刪除目錄
我們可以看到$directory
是我們可控的,而且沒(méi)用做任何的過(guò)濾,說(shuō)不定就可以穿越目錄從而任意刪除文件了,我們先手動(dòng)加一個(gè)var_dump(scandir("."));
來(lái)觀察一下這里所處的位置
可以看到現(xiàn)在是在public
的目錄下,那我們就在上一層目錄隨便新建一個(gè)目錄,里面隨便新建幾個(gè)文件試試看
我們輸入
http://www.test123.com/system/dir/del?directory=../123
可以發(fā)現(xiàn)txt
文件都被刪除了,但是文件夾沒(méi)有被刪除
因?yàn)檫@個(gè)功能不能刪除目錄,只能刪除目錄的文件,如果我們還想刪412315
里面的文件就可以輸入
http://www.test123.com/system/dir/del?directory=../123/412315
這里和第一處差不多,但是功能有點(diǎn)不一樣,這里是可以把整個(gè)目錄刪除了,我們輸入如下就可以刪除整個(gè)123
目錄了
http://www.test123.com/system/dir/delDir?directory=../123
既然前面已經(jīng)挖到了文件上傳漏洞,這個(gè)cms
又是thinkphp6.0
的版本,我們可以再找一下有沒(méi)有可以觸發(fā)phar
函數(shù)的漏洞
突然看到我們前面的任意文件刪除漏洞處,不正是有個(gè)is_dir
函數(shù)嗎,而且又是可以控制的,真是踏破鐵鞋無(wú)覓處得來(lái)全不費(fèi)功夫
我們先用網(wǎng)上公開(kāi)的反序列化鏈生成test.jpg
,然后利用上面的任意文件刪除漏洞上傳,上傳到這個(gè)位置
{"code":1,"msg":"上傳成功","url":["http:\/\/www.test123.com\/uploads\/postImages\/20210404\\3c5ea1104433e1cb734be47ab8377a11.jpg"]}
我們?cè)儆?/span>phar
協(xié)議去觸發(fā)這個(gè)文件即可rce
http://www.test123.com/system/dir/del?directory=phar://uploads/postImages/20210404/3c5ea1104433e1cb734be47ab8377a11.jpg
除了上面那個(gè)任意文件刪除處的is_dir
,我們可以再找找還有沒(méi)有其他地方能夠觸發(fā)的,隨手一找又發(fā)現(xiàn)兩處
這還只是單單用is_dir
函數(shù),沒(méi)算上其他的就已經(jīng)那么多了,這個(gè) cms 真是"漏洞百出"
本文的漏洞已提交至 cnvd 平臺(tái),作為新手找一些少人用的 cms 挖上面幾種漏洞還是比較容易的
聯(lián)系客服