代碼審計入門之BlueCMS v1.6 sp1

2019-05-30 132593人圍觀 ,發現 12 個不明物體 WEB安全

*本文原創作者:ZKAQ聶風,本文屬于FreeBuf原創獎勵計劃,未經許可禁止轉載

0×00 前言

大家好,我是聶風,在此,我做一個簡單的代碼審計文章分享來方便同學們學習。BlueCMS v1.6 sp1一直以來就是PHP代碼審計入門的最佳良品。這次我們就選擇這一個案例進行學習。我先聲明,我的代碼審計方法是針對代碼基礎較為薄弱較薄弱的人群進行代碼審計。

0×01 環境搭建

Phpstudy

BlueCMS v1.6 sp1源碼

代碼審計工具(Seay源代碼審計系統)

0×02 代碼審計過程

拿到一個CMS,有諸多審計方法,我這里的審計方法是黑盒+白盒測試,偏黑盒較多的代碼審計。拿到代碼后我們應該先對其進行功能點的分析,看一看該CMS存在哪些功能,因為我們尋找漏洞,肯定是從網站中的正常功能進行測試,這是黑盒測試的一個方法,挖掘漏洞的核心我認為在于傳參,知道每個傳參的意義是不是就等于知道了代碼會做什么,要做什么呢?

這是我總結的BlueCMS v1.6 sp1的功能點:

5e2bebe9ca4f35ce555a9050c78793e1.png

正常而言,我們先將CMS進行一個安裝,正常而言CMS的源碼放入web目錄下后我們會訪問install目錄,然后進行安裝。安裝完后我們是不是應該以安全工程師的身份去想一想,我們是否能夠再次訪問install目錄,進行重新安裝呢?如果能夠進行重新安裝,是不是就可以將整個網站的數據全部重裝,然后拿到設置新的管理員賬號,然后通過后臺拿到webshell?

然后我們去訪問該頁面,正常,可以重裝:

image.png

于是我們審計出了代碼的第一個問題,可以重復安裝呢!是不是很簡單?

然后我們再來看這個網站,一般而言網站有展示類和功能類:

展示類(比如新聞站、門戶站)

功能類(比如商城、OA、系統)

但是無論是展示類還是功能如果我們可以拿到一個普通用戶的權限是不是更加容易滲透測試?測試的點是不是更多?

那么我們去注冊一個賬戶吧!

image.png

注冊一個賬號,我們想一想,是不是可以嘗試進行一個XSS,我們先注冊一個賬號,然后抓包看看,然后我們輸入了用戶名后,我們發現burp抓了一個包:

image.png

很明顯這個數據包是用來檢測你的用戶名是否有人注冊過,那么我們是不是可以通過爆破user_name傳參進行爆破出用戶名。(爆破出用戶名后爆破密碼更容易)

然后填完所有內容,提交,然后抓到了數據包,我們發現是被提交到user.php:

image.png

然后我們通過代碼審計工具去找那個文件。

在傳參中我們看到了我自己輸入的“賬號|密碼|郵箱|驗證碼”,然后最后出現了一個act傳參,打開這個user.php我們可以看出這個文件有好幾個功能,act就是決定我的數據包是干什么的傳參,于是乎復制這個傳參值去源碼中尋找這個傳參:

image.png

這段源碼就是關于你的注冊,我們可以看到INSERT INTO插入,然后我們看是否存在過濾,很明顯這里沒有過濾,那么我們嘗試進行XSS以及SQL注入。

我們就先看XSS。

先抓包,正常的填寫注冊,然后將數據包攔截(這是為了防止前端檢測)

修改數據包,加入XSS語句,我是在郵件的地方加的。

image.png

成功彈窗:

image.png

事實證明這里存在一個存儲型XSS,然后我們再去看看SQL注入:

image.png

這很明顯是他的SQL語句,然后我們嘗試使用updatexml的報錯。

構建下語句:

' or updatexml(1,concat(0x7e,(SELECT database())),1),1,1)#

然后執行,居然成功執行了。沒有過濾?居然能成功執行,說明單引號沒有起作用,是不是存在魔術引號?試試寬字節!

%df' or updatexml(1,concat(0x7e,(SELECT database())),1),1,1)#

然后成功報錯:

image.png

很明顯這里存在SQL注入,但是這里神奇的很,我這里報錯說語法錯誤,我直接去本地執行卻沒問題!源碼中對報錯做了限制。只能通過盲注來解決,難受!

image.png

我們仔細思考,這里是一個插入語句,那么我們是不是可以嘗試插入多行數據,我們通過語句構建,再建立一個用戶,然后用子查詢填充郵箱處,然后我們登陸這個賬號是不是就可以看到郵箱字段里面的內容,走,說干就干??!

構建語句:

%df',1,1),(100,0x6162717765,md5(123456),(select database()),1,1)#

閉合原本的語句,然后再插入一條數據,然后執行,成功執行了??!

image.png

數據被插入了,走,登陸賬號:

image.png

很明顯,庫名在郵箱處顯示了,與似乎我們可以通過這樣的方法利用這個點??!

我們結束了注冊功能在看看登錄功能,登錄處會不會存在SQL注入?

老樣子,登錄,然后抓包看傳參到那個文件:

image.png

還是那個文件,就是act變為了index_login:

image.png

登錄還定義了函數,右鍵函數追蹤一下:

image.png

還是老樣子,沒有任何過濾,那么試試萬能密碼吧:

payload:%df’) or 1=1#

萬能密碼成功登錄。

萬能密碼就是存在POST類型的SQL注入,可以嘗試使用SQLMAP。

我是跑數據包,在pwd字段。

image.png

image.png

然后登錄后修改資料處也存在SQL注入和XSS。

然后我們看到了別人的文章,我們看到我們可以評論:

image.png

然后果斷評論,我嘗試了不登錄也是可以評論,然后我們抓包看看吧!

image.png

去看看這個文件:

image.png

這里似乎有一個過濾。

Htmlspecialchars會將尖括號轉化為HTML實體,那么不能出現尖括號。

然后呢這里我們來玩一個騷套路,我們看到傳參里面有ip對嗎?

留言記錄IP這個是留言系統中經常存在的套路。那我們看到了他實際上插入了ip的值是特意拼接是,是由這個自定義函數設定getip()。

走,我們去找找這個函數的定義:

image.png

找到了定義的函數,這里有一個getenv,實際上就是獲取系統的環境變量。

第一個HTTP_CLIENT_IP這個環境變量沒有成標準,很多服務器完全沒法獲取。

第二個X-Forwarded-For這個東西可以通過HTTP請求頭來修改。

那么問題來了!

我們似乎可以控制請求頭中的X-Forwarded-For控制ip的傳參,ip的傳參會直接被拼湊到SQL語句,走!我們SQL注入去(類似的問題挺多的,黑盒白盒我都遇到過)。

設置X-Forwarded-For為1′#。

然后直接報錯了:

image.png

因為這個不是輸入,連寬字節都省了,如果這里沒有寬字節注入就可以這樣來注入:

image.png

里面還有些SQL注入和XSS的漏洞我就不一一列舉了。

我們看一點不一樣的,在后臺我看到了可以備份數據庫: 

image.png

image.png

發現他是按照日期生成備份文件,我們嘗試爆破地址:

image.png

然后成功訪問,里面有管理員賬號密碼(密碼就是MD5,解密下就行)。 

我們再來講一個更有深度的漏洞–文件包含。

還記得前面看了好幾次的user.php嗎?

通過全局尋找include,我發現里面有一些有趣的東西:

image.png

我們可以通過傳參pay來控制包含的文件。

我們先嘗試正常操作讓act傳參pay,然后我發現這個傳參是在充值中心的購買充值卡的地方的選擇支付方式:

image.png

image.png

然后我們先在網站根目錄留一個1.txt,內容寫:

<?php phpinfo();?>

然后嘗試拼接。

通過../跳轉到上層目錄,但是我們發現這個語句后面有一個index.php的拼接。那該怎么辦呢?在這里我們可以嘗試一個字符串截斷的方法(Windows的路徑不能超過256個字符)。

那么我們是不是可以嘗試在傳參的后面加點進行階段,因為點最后會被windows給處理掉,但是填充了點之后,只會保留包含前面的1.txt,在傳參后的index.php因為路徑超過256個字符后的東西都會被舍棄,于是乎我們直接傳參后加256個點就可以截斷了。 

Payload:    
pay=../../1.txt................................................................................................................................................................................................................................................................

image.png

那么我們該如何利用,看看有沒有地方可以上傳,找到頭像上傳,然后上傳圖片馬:

image.png

然后包含這個文件就行:

image.png

0×03 總結

其實該CMS所存在的漏洞不僅僅只有這些,我文章中的這些也只是一個拋磚引玉,只是說出一個更適合代碼基礎薄弱的同學進行代碼審計的方法,如果我文章中有什么寫的可以再改進的地方,可以隨時聯系我!謝謝大家花費了時間來讀在下的粗鄙小文,謝謝大家。

*本文原創作者:ZKAQ聶風,本文屬于FreeBuf原創獎勵計劃,未經許可禁止轉載

這些評論亮了

  • 補丁君 (4級) Love&Peace 回復
    fb老是把圖片壓縮,也不帶放大,代碼都看不清楚 玩個錘子
    )8( 亮了
發表評論

已有 12 條評論

取消
Loading...

這家伙太懶,還未填寫個人描述!

1 文章數 5 評論數

特別推薦

推薦關注

填寫個人信息

姓名
電話
郵箱
公司
行業
職位
css.php jizzz