安基網 首頁 安全 攻防案例 查看內容

某CMS的代碼審計:越權到后臺getshell

2019-12-4 13:00| 投稿: xiaotiger |來自: 互聯網


免責聲明:本站系公益性非盈利IT技術普及網,本文由投稿者轉載自互聯網的公開文章,文末均已注明出處,其內容和圖片版權歸原網站或作者所有,文中所述不代表本站觀點,若有無意侵權或轉載不當之處請從網站右下角聯系我們處理,謝謝合作!

摘要: 學習CTF這么久還沒真正意義上審計過一款cms,這次決定花點時間去審計一款cms作為代碼審計提升的跳板。由于相關要求,這里就省去cms全名了,主要分享一下學習思路。代碼審計安裝漏洞其實一般代碼審計都是從安裝文件開始審計,一般 ...

零基礎黑客教程,黑客圈新聞,安全面試經驗

關注 公眾號:掌控安全EDU

前言

學習CTF這么久還沒真正意義上審計過一款cms,這次決定花點時間去審計一款cms作為代碼審計提升的跳板。由于相關要求,這里就省去cms全名了,主要分享一下學習思路。

代碼審計

安裝漏洞

其實一般代碼審計都是從安裝文件開始審計,一般安裝腳本主要存在如下漏洞:

  • 無驗證功能,任意重裝覆蓋
  • 表單不做過濾寫入config.php導致getshell
  • $_GET['step']跳過限制步驟


漏洞文件:install.php

首先我們直奔第一個點能否任意重裝,我們可以看到必須常量DEL_INSTALLER為1的時候才會觸發刪除install.php,那么我們追蹤DEL_INSTALLER看看



這里可以看到DEL_INSTALLER默認值就是0,所以一般情況下這里是可以任意重裝的,我們從黑盒的測試也可以印證這一點。同時表單也做了過濾所以這里也沒有后面兩種情況。



越權漏洞


在安裝完畢后打開config.php看到兩個比較奇怪的常量定義:AUTH_KEY和AUTH_COOKIE_NAME從名字來看這連個常量肯定是有一定聯系的。如下圖:


我們在抓包時候發現了AUTH_COOKIE_NAME這個常量,說明這是一個cookie名。我們繼續再代碼中追蹤這個常量。


我們可以看到在登錄驗證cookie中使用了這個常量,我們追蹤一下cookie值是如何構造的


這里可以看到,調用了emHash這個類方法,并且這里使用了AUTH_KEY這個常量,這里說明這兩個常量是有聯系的。我們在繼續追蹤hash_hmac()到底使用key做了什么。



這里對傳入的$key也就是AUTH_KEY進行了md5加密到一個二進制字符串中而后分割為64個字節與一個字符*64次的字符串進行異或最后得到兩個字符串$ipad,$opad最后再將他們打包拼接用md5加密返回給上級調用。我們再回到上級。



我們知道generateAuthCookie方法中的 $key、$hash是由AUTH_KEY加密而成。最終的cookie是由$user_login 、 $expiration $hash拼接而成,而$expiration是cookie的生存時間,$user_login是用戶名。這里可以得知$key、$user_login、$expiration都是固定的那么只要知道AUTH_KEY就有偽造cookie造成越權的可能。


例如我們準備兩個靶機,一個靶機登陸,獲取這個靶機的cookie即可越權登陸另外一個靶機。前提是兩個靶機的AUTH_KEY得一致。這里有點雞肋但是還是有利用的可能。我們將兩個靶機的cookie拿出來比較確實是一樣的。



后臺getshell(一)


其實上訴兩個漏洞已經能夠讓我們進入后臺了,現在的任務就是如何Getshell了。這里我隨便看了一下發現后臺有設置上傳附件后綴的功能。



但是測試發現,加入php后綴你發現會將phpt替換為X,從源碼中可有很直觀看到這點。



此時我注意到了備份功能,這個后綴是保存在數據庫中的,既然我不能直接將后綴寫入數據庫,那么我能不能通過數據備份恢復的方法寫入數據庫呢。


這里直接備份所有表,下載下來然后找到寫入后綴的語句,加上php,如下





導入備份后發現設置中的上傳后綴有php



直接在文章發表出上傳PHP文件即可getshell



后臺getshell(二)


我們還發現這個cms中上傳插件的地方可以上傳zip,這里我們想如果在插件中插入一句話木馬是不是也能getshell?我們找到插件上傳的腳本,發現使用了一個叫emUnzip的函數。



我們繼續追蹤這個函數,發現這個解壓函數是使用ZipArchive()類來實現解壓縮的。我們可以看到代碼755行中獲取了壓縮包的內部目錄/文件的名稱 ,并將其分割為數組將第一個元素賦值給了$dir,我們看到switch中plugin選項,這里又將獲取的第一個文件夾名稱賦值給$plugin_name,使用getFromName方法獲取了壓縮包是否存在$dir . $plugin_name . '.php'這個文件。


綜上這里就是檢測壓縮包中文件夾里面是否存在一個與文件夾名稱一致的PHP文件,最后在再壓。這里也沒對文件進行其他校驗操作。因此我們只要再構造 文件夾名和文件名相同的內容的壓縮包,同時由上方代碼也可以知道,文件將會被解壓到 /content/plugins/a/a.php(文件夾名稱a)



構建壓縮包上傳插件:



總結

這次代碼審計也是十分傳統地從安裝文件入手,黑盒結合白盒測試的方法進行審計?偟膩碚f作者有一點安全意識在輸入時候對php進行過濾,但是如果服務器是iis可以解析asp但是這里并沒有對asp進行過濾,并且如果服務器解析phtml這些后綴在附件上傳處同樣可以getshell?偟膩碚f在開發時候上傳部分應當鎖死不應讓用戶可控

點擊了解更多,即可領取安全黑客教程



小編推薦:欲學習電腦技術、系統維護、網絡管理、編程開發和安全攻防等高端IT技術,請 點擊這里 注冊賬號,公開課頻道價值萬元IT培訓教程免費學,讓您少走彎路、事半功倍,好工作升職加薪!

本文出自:https://www.toutiao.com/a6766431962384056844/

免責聲明:本站系公益性非盈利IT技術普及網,本文由投稿者轉載自互聯網的公開文章,文末均已注明出處,其內容和圖片版權歸原網站或作者所有,文中所述不代表本站觀點,若有無意侵權或轉載不當之處請從網站右下角聯系我們處理,謝謝合作!


鮮花

握手

雷人

路過

雞蛋

相關閱讀

最新評論

 最新
返回頂部
洗衣店赚钱联系澳洁 幸运赛马app官方下载 云顶李逵劈鱼下载 850棋牌游戏? 黑龙江11选5开奖手机版 管家婆马报彩图大全 850棋牌游戏官方下载安装 北京快中彩基本走势带坐标连线 欧冠联赛直播 北京pk拾赛车交流群 天天爰海南麻将安卓版