「網路安全」xhCMS程式碼審計思路

「網路安全」xhCMS程式碼審計思路

前言

最近想提升一下自己的代審能力,雖然之前復現分析了挺多漏洞的,TP,Laravel,Typcho,yii,但一直感覺對程式碼審計能力提升用處不太大,很多時候鏈子和利用點都非常簡單,可是如何發現的這確實一個難題,所以就拿熊海CMS為例,如何自己挖它裡面的漏洞,看看自己能否發現和利用,最後再和網上存在的漏洞進行對比,再看哪裡沒有發現,為什麼沒有發現,希望這也能給才入門程式碼審計的師傅們一點思路吧

審計流程

先看一下入口檔案

index。php

,這個檔案一般會定義很多變數,包含很多路徑,檔案進來,我們只需要注意它和使用者的互動地點,入口檔案一般會先判斷你是否存在安裝鎖或者配置檔案,如果不存在就跳轉到安裝目錄,開始安裝整個網站。然後開啟檔案監控,首先判斷是否存在重灌漏洞,然後再分析目錄結構,大概知道每個資料夾中放的檔案功能是什麼就行了,比如熊海CMS:

「網路安全」xhCMS程式碼審計思路

然後安裝成功後我習慣先瀏覽下網站的主要功能,大致瞭解這些之後就可以靜下心來看程式碼了

重灌漏洞

重灌漏洞可以以下幾種型別:

自動刪除這個安裝檔案透過生成一個 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

「網路安全」xhCMS程式碼審計思路

並沒有發現存在重灌漏洞

SQL注入漏洞1

首先就要去檢視資料庫使用的編碼方式,如果是GBK則可能造成寬位元組注入,從而直接繞過

addslashes

這類函式,然後去有對資料庫操作的地方檢視傳入資料是否可控,我們可以注意下,在注入前是否對引數進行了解碼,如果進行了解碼,可以二次編碼注入,在熊海CMS安裝的時候就發現它有寫入管理員資訊的操作,而且是在安裝前的操作,並沒有對引數進行任何過濾,

insatll\index。php

「網路安全」xhCMS程式碼審計思路

「網路安全」xhCMS程式碼審計思路

而且它是有報錯輸出的,所以可以報錯注入:

「網路安全」xhCMS程式碼審計思路

然後就是安裝之後了,

檔案包含漏洞

首先就從網站入口跟進,發現是一個單入口模式:

「網路安全」xhCMS程式碼審計思路

這裡就存在檔案包含漏洞,只是說暫時還沒有發現危險檔案能夠利用,看到這裡那就聯想到能不能把後面的

php

字尾截斷,然後去上傳一個圖片馬來包含呢,或者是否存在一個檔案寫入的點來利用呢,可是我試了一下第一個思路,好像並沒有成功,但是存在疑惑,因為在PHP<5。3。4的時候,我們是可以利用

%00

來截斷後綴的,但是當我本地將版本調低到

5。3。29

,按理說是可以截斷後綴從而包含任意檔案,但是卻出了問題,我先在根目錄寫了一個

phpinfo

「網路安全」xhCMS程式碼審計思路

這樣是可以的,但是:

「網路安全」xhCMS程式碼審計思路

這樣卻不行,然後我又使用長度截斷也未成功

然後就跟進

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

「網路安全」xhCMS程式碼審計思路

直接

echo

可控變數,所以存在XSS漏洞,

「網路安全」xhCMS程式碼審計思路

然後繼續往後看,點選下載會跳轉到

files/content。php

,跟進,發現存在SQL注入漏洞,

SQL注入漏洞2

files/content。php

這裡的原因就是沒有使用單引號閉合使用者可控變數,導致繞過

addslashes

函式,

「網路安全」xhCMS程式碼審計思路

「網路安全」xhCMS程式碼審計思路

繼續跟進,發現呼叫

files/submit。php

提交評論,

「網路安全」xhCMS程式碼審計思路

跟進

files/submit。php

「網路安全」xhCMS程式碼審計思路

都可控,且未經過

addslashes

函式,

「網路安全」xhCMS程式碼審計思路

很明顯的一個SQL注入漏洞,但是需要注意的是後面還有一個插入語句:

「網路安全」xhCMS程式碼審計思路

開始我也卡了一下,因為你只閉合前面,後面是會報錯的:

「網路安全」xhCMS程式碼審計思路

閉合後面:

「網路安全」xhCMS程式碼審計思路

還是不行,但是突然想到只需要用報錯注入,讓前面報錯了,後面自然就不用管了:

name=1&mail=1‘) or updatexml(1,concat(0x7e,(select(database())),0x7e),1)#&content=哈哈

「網路安全」xhCMS程式碼審計思路

往後走還有SQL注入,

「網路安全」xhCMS程式碼審計思路

後面相同利用的地方就不贅敘了,因為發現這裡有可控資料插入資料庫的操作,那是否存在儲存型XSS呢?

儲存型XSS1

分析已經在上面的流程分析了

files/content。php

,我們能提交暱稱、郵箱、網址、評論內容,但是在

files/submit。php

中,

「網路安全」xhCMS程式碼審計思路

他過濾了

$content

的HTML程式碼,所以不能利用,而且在顯示評論和留言的地方有暱稱,所以我們只能利用暱稱處進行儲存XSS

還有一個

files/contact。php

,存在和

files/content。php

一樣的留言框,大概看了下程式碼,也是存在儲存型XSS

「網路安全」xhCMS程式碼審計思路

最後還有一個

files/software。php

檔案,在下載的時候會跳轉到該介面,

又存在明顯的SQL注入漏洞,

「網路安全」xhCMS程式碼審計思路

這裡就不再重複講述了

審計到這裡差不多前端的程式碼就審完了,漏洞就SQL注入漏洞和XSS漏洞,然後就是去審計後臺的程式碼了

首先對於後臺程式碼,我會先檢視是否存在越權漏洞,是否存在CSRF漏洞,然後登入後臺,尋找PHP檔案寫入,尋找命令執行,

首先檢視

login。php

「網路安全」xhCMS程式碼審計思路

又是重複的SQL注入,後面就不重複這些漏洞了,在審計程式碼的時候,並未發現

admin/login。php

存在什麼越權漏洞,但是後面檢視存在漏洞的時候,他卻存在這個漏洞,因為在成功登入上

admin

賬號後,他是存在一個

user

cookie

的,但是退出之後又沒有了,所以他就是透過

cookie

中的

user

值來判斷登入是否成功的,所以只需要偽造一個

cookie

即可:

成功越權登入

「網路安全」xhCMS程式碼審計思路

然後就是

。/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/

關注我,持續更新······

私我獲取【

網路安全學習資料·攻略