前言
最近想提升一下自己的代審能力,雖然之前復現分析了挺多漏洞的,TP,Laravel,Typcho,yii,但一直感覺對程式碼審計能力提升用處不太大,很多時候鏈子和利用點都非常簡單,可是如何發現的這確實一個難題,所以就拿熊海CMS為例,如何自己挖它裡面的漏洞,看看自己能否發現和利用,最後再和網上存在的漏洞進行對比,再看哪裡沒有發現,為什麼沒有發現,希望這也能給才入門程式碼審計的師傅們一點思路吧
審計流程
先看一下入口檔案
index。php
,這個檔案一般會定義很多變數,包含很多路徑,檔案進來,我們只需要注意它和使用者的互動地點,入口檔案一般會先判斷你是否存在安裝鎖或者配置檔案,如果不存在就跳轉到安裝目錄,開始安裝整個網站。然後開啟檔案監控,首先判斷是否存在重灌漏洞,然後再分析目錄結構,大概知道每個資料夾中放的檔案功能是什麼就行了,比如熊海CMS:
然後安裝成功後我習慣先瀏覽下網站的主要功能,大致瞭解這些之後就可以靜下心來看程式碼了
重灌漏洞
重灌漏洞可以以下幾種型別:
自動刪除這個安裝檔案透過生成一個 lock 檔案來判斷程式是否安裝過
根本無驗證安裝完成後不會自動刪除檔案,又不會生成 lock 判斷是否安裝過
安裝
file
直接用
GET
提交
step
繞過,直接進入下一步
變數覆蓋導致重灌可以
GET,POST,COOKIE
任意提交一個變數名
$insLockfile
,給其賦空值,覆蓋掉
$insLockfile
,從而讓
file_exists
為
false
就不會退出
判斷
lock
後,無
exit
判斷是否存在
lock
檔案,如果存在
lock
檔案,就會
header
到
index。php
,但是
header
後並沒有
exit
,所以 並不會退出,類似的還有
javascript
彈個框
解析漏洞在安裝完成後會將
install。php
重新命名為
index。php。bak
,但是由於
Apache
的解析漏洞:如果無法識別到最後一個字尾的話,就會向上解析,那麼就又變成了
php
了,然後結合安裝時的變數覆蓋又成重灌了。
滿足一些條件不會退出的
危害:
因為在安裝時我們可控一些變數,因為沒有
exit
,導致配置資訊沒有過濾地傳入安裝後,從而寫入檔案
getshell
重灌之後修改管理員資訊,進入後臺
getshell
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注入漏洞,但是需要注意的是後面還有一個插入語句:
開始我也卡了一下,因為你只閉合前面,後面是會報錯的:
閉合後面:
還是不行,但是突然想到只需要用報錯注入,讓前面報錯了,後面自然就不用管了:
name=1&mail=1‘) or updatexml(1,concat(0x7e,(select(database())),0x7e),1)#&content=哈哈
往後走還有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
中存在越權漏洞了,:
<?php$user=$_COOKIE[’user‘];if ($user==“”){header(“Location: ?r=login”);exit; }?>
所以只要呼叫了該檔案都存在越權漏洞
後面的話其實就是前面提到過的漏洞了,這裡就不再贅敘了,
總結:
其實這個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/
關注我,持續更新······
私我獲取【
網路安全學習資料·攻略
】