【网络安全】xhCMS代码审计思路
前言
最近想提升一下自己的代審能力,雖然之前復現分析了挺多漏洞的,TP,Laravel,Typcho,yii,但一直感覺對代碼審計能力提升用處不太大,很多時候鏈子和利用點都非常簡單,可是如何發現的這確實一個難題,所以就拿熊海CMS為例,如何自己挖它里面的漏洞,看看自己能否發現和利用,最后在和網上存在的漏洞進行對比,再看哪里沒有發現,為什么沒有發現,希望這也能給才入門代碼審計的師傅們一點思路吧
【資料】
審計流程
先看一下入口文件index.php,這個文件一般會定義很多變量,包含很多路徑,文件進來,我們只需要注意它和用戶的交互的點,入口文件一般會先判斷你是否存在安裝鎖或者配置文件,如果不存在就跳轉到安裝目錄,開始安裝整個網站。然后打開文件監控,首先判斷是否存在重裝漏洞,然后再分析目錄結構,大概知道每個文件夾中放的文件功能是什么就行了,比如熊海CMS:
然后安裝成功后我習慣先瀏覽下網站的主要功能,大致了解這些之后就可以靜下心來看代碼了
重裝漏洞
重裝漏洞可以以下幾種類型:
自動刪除這個安裝文件
通過生成一個 lock 文件來判斷程序是否安裝過
根本無驗證
安裝完成后不會自動刪除文件,又不會生成 lock 判斷是否安裝過
安裝file
直接用GET提交step繞過,直接進入下一步
變量覆蓋導致重裝
可以GET,POST,COOKIE任意提交一個變量名insLockfile,給其賦空值,覆蓋掉insLockfile,給其賦空值,覆蓋掉insLockfile,給其賦空值,覆蓋掉insLockfile,從而讓file_exists為false就不會退出
判斷lock后,無exit
判斷是否存在lock文件,如果存在lock文件,就會header到index.php,但是header后并沒有exit,所以
并不會退出,類似的還有javascript彈個框
解析漏洞
在安裝完成后會將install.php
重命名為index.php.bak,但是由于Apache的解析漏洞:如果無法識別到最后一個后綴的話,就會向上解析,那么就又變成了php了,然后結合安裝時的變量覆蓋又成重裝了。
滿足一些條件不會退出的
危害:
install/index.php:
并沒有發現存在重裝漏洞
SQL注入漏洞1
首先就要去查看數據庫使用的編碼方式,如果是GBK則可能造成寬字節注入,從而直接繞過addslashes這類函數,然后去有對數據庫操作的地方查看傳入數據是否可控,我們可以注意下,在注入前是否對參數進行了解碼,如果進行了解碼,可以二次編碼注入,在熊海CMS安裝的時候就發現它有寫入管理員信息的操作,而且是在安裝前的操作,并沒有對參數進行任何過濾,
insatll\index.php:
而且它是有報錯輸出的,所以可以報錯注入:
然后就是安裝之后了,
文件包含漏洞
首先就從網站入口跟進,發現是一個單入口模式:
這里就存在文件包含漏洞,只是說暫時還沒有發現危險文件能夠利用,看道這里那就聯想到能不能把后面的php后綴截斷,然后去上傳一個圖片馬來包含呢,或者是否存在一個文件寫入的點來利用呢,可是我試了一下第一個思路,好像并沒有成功,但是存在疑惑,因為在PHP<5.3.4的時候,我們是可以利用%00來截斷后綴的,但是當我本地將版本調低到5.3.29,按理說是可以截斷后綴從而包含任意文件,但是卻出了問題,我先在根目錄寫了一個phpinfo,
這樣是可以的,但是:
這樣缺不行,然后我又使用長度截斷也未成功
然后就跟進files文件夾下的頁面文件,首先就是files/index.php,里面很多都是echo數據庫里面的信息,但是我們并不可控,因為里面引進了template里面的文件,所以也先看一下,發現里面有沒有能利用的,查看fiels/list.php,看起來存在SQL注入漏洞,但是存在addslashes函數,無法注入,然后繼續審計,直到看到fiels/download.php的時候,發現了一個XSS漏洞,然后fiels/list.php同理
反射型XSS漏洞1
XSS也分為反射型、存儲型以及DOM型,當我們想挖掘反射型XSS漏洞時,需要重點關注程序的輸出,比如echo/print等,當程序直接將未經過濾的用戶輸入輸出除了,就會造成反射型XSS。
而存儲型XSS是由于網站將用戶輸入存儲進數據庫中,當用戶再次瀏覽某頁面時,從數據庫中獲取之前的輸入并輸出,如果在輸入->數據庫這塊過程中沒有進行實體化編碼以及輸出->頁面的過程中沒進行實體化編碼,則很容易產生存儲型XSS。所以對于這類XSS,重點關注insert,查找insert表內數據的輸出位。
fiels/download.php:
直接echo可控變量,所以存在XSS漏洞,
然后繼續往后看,點擊下載會跳轉到files/content.php,跟進,發現存在SQL注入漏洞,
SQL注入漏洞2
files/content.php:
這里的原因就是沒有使用單引號閉合用戶可控變量,導致繞過addslashes函數,
繼續跟進,發現調用files/submit.php提交評論,
跟進files/submit.php,
都可控,且未經過addslashes函數,
很明顯的一個SQL注入漏洞,但是需要注意的是后面還有一個插入語句:
開始我也卡了一下,因為你只閉合前面,后面是會報錯的:
閉合后面:
還是不行,但是突然想到只需要用報錯注入,讓前面報錯了,后面自然就不用管了:
往后走還有SQL注入,
后面相同利用的地方就不贅敘了,因為發現這里有可控數據插入數據庫的操作,那是否存在存儲型XSS呢?
存儲型XSS1
分析已經在上面的流程分析了
在files/content.php,我們能提交昵稱、郵箱、網址、評論內容,但是在files/submit.php中,
他過濾了$content的HTML代碼,所以不能利用,而且在顯示評論和留言的地方有昵稱,所以我們只能利用昵稱處進行存儲XSS
還有一個files/contact.php,存在和files/content.php一樣的留言框,大概看了下代碼,也是存在存儲型XSS
最后還有一個files/software.php文件,在下載的時候會跳轉到該界面,
又存在明顯的SQL注入漏洞,
這里就不再重復講述了
審計到這里差不多前端的代碼就審完了,漏洞就SQL注入漏洞和XSS漏洞,然后就是去審計后臺的代碼了
首先對于后臺代碼,我會先查看是否存在越權漏洞,是否存在CSRF漏洞,然后登錄后臺,尋找PHP文件寫入,尋找命令執行,
首先查看login.php,
又是重復的SQL注入,后面就不重復這些漏洞了,在審計代碼的時候,并未發現admin/login.php存在什么越權漏洞,但是后面查看存在漏洞的時候,他卻存在這個漏洞,因為在成功登錄上admin賬號后,他是存在一個user的cookie的,但是退出之后又沒有了,所以他就是通過cookie中的user值來判斷登錄是否成功的,所以只需要偽造一個cookie即可:
成功越權登錄
然后就是./inc/checklogin.php中存在越權漏洞了,:
所以只要調用了該文件都存在越權漏洞
后面的話其實就是前面提到過的漏洞了,這里就不再贅敘了,
總結
其實這個CMS很簡單,我主要想講的并不是這個CMS如何審計,而是一個思路,希望能幫到剛入門代審的師傅們,其實很多漏洞,利用點都很簡單,難的就是去發現它的思路
參考:
https://threezh1.com/2019/05/18/PHP%E4%BB%A3%E7%A0%81%E5%AE%A1%E8%AE%A1%E4%B9%8B%E9%87%8D%E8%A3%85%E6%BC%8F%E6%B4%9E/
關注我,持續更新······
私我獲取【網絡安全學習資料·攻略】
總結
以上是生活随笔為你收集整理的【网络安全】xhCMS代码审计思路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【网络安全】Penelope:一款功能强
- 下一篇: 【Web安全】php://filter