廠商phpwind爆高危漏洞,安裝雲鎖可完美防禦!

2021-02-24 雲鎖

廠商phpwind昨日爆一高危漏洞如下:

披露狀態:

2016-02-14: 細節已通知廠商並且等待廠商處理中
2016-02-18: 廠商已經確認,細節僅向廠商公開
2016-02-21: 細節向第三方安全合作夥伴開放(綠盟科技、唐朝安全巡航、無聲信息)
2016-04-13: 細節向核心白帽子及相關領域專家公開
2016-04-23: 細節向普通白帽子公開
2016-05-03: 細節向實習白帽子公開

2016-05-18: 細節向公眾公開

簡要描述:

反序列化漏洞導致代碼執行。
GET型CSRF,直接插入帖子,管理員瀏覽後執行任意代碼。

效果類似: http://www.wooyun.org/bugs/wooyun-2014-064886

詳細說明:

這個洞其實很有意思,最可惜的地方就是其觸發位置在後臺,否則它將是一個絕無僅有的好洞。

0x01 後臺反序列化位置

首先縱覽整個phpwindv9,反序列化的位置很多,但基本都是從資料庫裡取出的,很難完全控制序列化字符串。最後,找到三處:

可惡的是,三處都在後臺的Task模塊下。Task模塊是『任務中心』功能,只有能進入後臺的用戶才可以訪問:

隨便打開一個, src/applications/task/admin/TaskConditionMemberController.php

beforeAction將會在實際執行Action之前執行。這裡$var = unserialize($this->getInput('var'));,從Input中獲取var參數的值,進行反序列化。這個Input可以來自get/post/cookie。我們只要在phpwind裡找到反序列化可以利用的點,就能在這裡觸發反序列化漏洞。

0x02 PwDelayRun類__destruct方法

全局搜一下關鍵詞__destruct,很快找到了PwDelayRun類:

可見__destruct方法,其中遍歷了_callback數組,用call_user_func_array執行任意函數。這裡如果_callback可控,那麼就可以直接執行assert+任意代碼了。原本是一個十分簡單的漏洞,但我們在TaskConditionMemberController::beforeAction::unserialize裡下斷點,執行var_dump(get_declared_classes());exit;,查看當前已經定義的類:

其中並沒有PwDelayRun類。看來在反序列化的時候,並沒有加載這個類,所以我即使構造了利用方法,也『造』不出PwDelayRun對象。那怎麼辦?

0x03 利用spl_autoload包含任意php文件

在Joomla那個反序列化漏洞( https://**.**.**.**/PENETRATION/joomla-unserialize-code-execute-vulnerability.html )裡,提到了一個方法。因為Joomla內的spl_autoload會根據類名自動加載文件,所以當時構造了一個JSimplepieFactory類對象,而factory.php中包含了import目標類的方法:

所以成功反序列化了simplepie類。回到Phpwind。同道理,我們在Phpwind中看看哪些文件包含了PwDelayRun:

靜態包含PwDelayRun的就只有PwConfigService類。我在剛才獲得的類裡看看,不幸的是,PwConfigService也沒有加載。繼續查找PwConfigService,並沒有靜態加載這個類的方法:

所以我們這個鏈就斷了。但利用spl_autoload這個思路不能斷,我們思考一下,現代php框架中必然存在autoload,在反序列化的過程中發現了不存在的類『PwDelayRun』,就會直接傳入註冊好的spl_autoload函數中。我在 /wind/Wind.php 中,可以找到spl_autoload_register函數的調用:

將Wind::autoload註冊為自動加載函數。跟進Wind::autoLoad

autoLoad第二個參數是沒有值的,所以這裡,最後會走到這一步:include $className . '.' . self::$_extensions;。看到include我就有點激動,但靜下心想一下發現還是有問題的。因為這裡的className是沒有路徑的,而PwDelayRun類在src/library/utility/PwDelayRun.php文件中,我需要傳入路徑才可以包含到這個類。雖然類名不能包含特殊字符,但其實類名中是可以包含\的:

這涉及到php中的命名空間的知識。學過新型框架的同學肯定對命名空間十分熟悉,所以我沒必要多介紹。命名空間中可以包含\,而在windows下,\也可以作為路徑的分隔符。(由此可見,這個漏洞僅限於Windows伺服器)所以這裡,我可以將類名設置為src\library\utility\PwDelayRun(其實就是src\library\utility命名空間下的PwDelayRun類),最後在Wind::autoload裡進行包含 include src\library\utility\PwDelayRun.php

0x04 利用數組+命名空間加載相同名字的類

還有一個問題,我們這裡將類名設置為src\library\utility\PwDelayRun,而:整個phpwind全局是沒有使用命名空間的,也就是默認命名空間為\,但現在的PwDelayRun類所在的命名空間為src\library\utility。

這樣,即使我包含了src\library\utility\PwDelayRun.php文件,反序列化的時候是實例化的src\library\utility\PwDelayRun類。但phpwind的命名空間是\,上下文存在的類是\PwDelayRun類,還是無法正常進行(因為找不到src\library\utility\PwDelayRun類)。

我想了一下,其實也好辦,只要變通一下。我們只要生成src\library\utility\PwDelayRun類和\PwDelayRun類兩個對象,放在一個數組中,在反序列化前者的過程中include目標文件,在反序列化後者的過程中拿到PwDelayRun對象。我構造了一個POC:

執行test1.php即可拿到POC對象。

將這個字符串傳入var參數,結果……

啥事也沒發生……這是什麼情況?

0x05 利用stdClass代替數組繞過限制

我們回看TaskConditionMember類,看看反序列化的那個beforeAction函數:

後面有個判斷is_array,是它在搗鬼。如果var是數組的話,就設置到output裡。所以,最後該對象並沒有銷毀,沒有銷毀那麼實際上就沒有調用__destruct函數,所以也無法執行任意代碼了。要讓is_array返回false,只需序列化一個非數組對象即可。其實在php源碼層,對象是用數組來模擬的,我們只需要用一個對象代替數組即可。php最簡單的對象就是stdClass,我將POC改為如下即可:

生成序列化字符串:

傳入var參數:

萬事大吉,成功!管理員只需擁有後臺『論壇任務』功能,即可直接執行任意代碼。

0x06 前臺利用CSRF起飛

這個漏洞本是一個利用技巧很妙的漏洞,但最關鍵的問題是其出現在後臺,利用門檻太高。但這個漏洞又有一個特點,那就是其為GET方法,只需要一個URL即可觸發。所以,我們可以用類似Discuz這個漏洞的方法: http://**.**.**.**/bugs/wooyun-2014-064886 ,將URL插入前臺帖子的圖片中:

結果……phpwind給我把&都轉義了,無法正常執行。不過沒關係,只要我寫一個302跳轉,跳轉到目標URL即可:

將這個php作為圖片地址寫入帖子:

管理員瀏覽:

獲得webshell:

漏洞證明:


漏洞來源:phith0n@烏雲

安裝雲鎖,完美防禦上述漏洞!


相關焦點

  • Mac高危漏洞:電腦格式化後還可被駭客控制
    點擊「IDC圈」可快速關注~根據OSX保安專家Pedro Vilaca的發現,一個針對舊款Mac
  • 智能家居:看得到的安全感,從不「鎖」門開始!
    是因為優選君家裡最近安裝了這款神器:德施曼小嘀T86雲智能鎖小嘀APP,由你自由定義:使用小嘀APP可完成所有設置,遠方的朋友突然來拜訪,也可以使用小嘀APP遠程一次性秘鑰開門,甚至可以設置某時段某指紋可開鎖功能,安全係數直接翻倍!
  • 好消息:有鎖機可完美解鎖,蘋果突然放水!
    ,一種是有ID激活鎖,這種機子正常來歷不明的機子,機子被鎖定了,用戶無法正常使用,除非解掉設備上ID鎖,如果是自己的機子,有發票,保修卡等可以打4006668800要求蘋果官方協助解鎖。另一種是網絡鎖,有網絡鎖的機子是國外運營商專供版,所以也叫「運營商鎖」、「網絡鎖」。原則上只能使用這家運營商的卡和套餐,如果這種機子要使用其它的手機卡,就需要解鎖,本文所說的有鎖機指的就是這一種。與無鎖的iPhone相比,有鎖的iPhone一般都需要安裝破解卡貼,而且更換SIM卡時需要重新解鎖,如果不小心電腦刷機恢復出廠並抹掉的時候,也有「變磚」風險。
  • 殺軟已是擺設:Win10可放心玩?
    這年頭,你還會為PC安裝殺毒軟體嗎?
  • 速升級:聯想筆記本爆指紋系統漏洞
    聯想修正了一個指紋管理系統中的影響了十幾個運行 Windows 7、8和 8.1 OS的筆記本電腦的硬編碼的密碼漏洞。
  • 蘋果聖誕禮物:有鎖iPhone 秒變無鎖!
    ICCID 黑解漏洞又出現了!!!
  • 窗戶防盜釘(鎖)等便民安防設施推廣安裝開始啦!
    東平警方啟動開展窗戶防盜釘(鎖)等便民安防設施推廣安裝活動 本報訊(通訊員 杜星)為了增強社區治安防控,減少入室盜竊案件發生,東平縣公安局召開會議,從即日起至12月31日,在全縣範圍內啟動開展窗戶防盜釘(鎖)等便民安防設施推廣安裝活動。
  • iPhone驚爆史上最大安全漏洞!專家:這14款手機快換掉~
    >今年9月份,iphone11系列新品首發,坡島的蘋果粉連夜大排長龍,只為體驗、入手這款被網上吹爆的機型。點擊可查看詳情如今,一條重磅消息傳到新加坡:iphone被曝硬體漏洞,且無法被ios更新修復,多款系列都將被影響。這究竟是咋回事呢?
  • 頭條編輯室|脫歐大臣可能要離職;數百萬汽車存在安全漏洞,廉價小工具就可破解電子鎖
    該報聲稱,頂級汽車製造商已經發現了一個主要的安全漏洞,根據這個漏洞,竊賊可以方便地破解電子鎖系統,而不引發警報。《每日郵報》稱,大眾汽車在2013年曾贏得一項高級法院禁令,禁止將這些電子鎖的細節向大眾披露,以免被破解,但仍有數百萬輛汽車處於危險之中。該公司還表示,寶馬已經承認,只要藉助一些廉價和容易獲得的小工具,就可以破解其安全系統。
  • 蘋果已哭瞎:疑似ios8.4.1-9.1-9.2越獄已完成,半完美越獄工具已發布
    大家都知道,小智在前段時間已經報導過國外黑客團隊早就完美越獄了ios9.1-9.2,但是由於是安全公司發布了100萬美元的漏洞任務,所以這個漏洞和越獄工具是不可能免費拿出來造福大家的。但是有一個細節,請大家注意,那就是這個黑客團隊使用的是在線瀏覽器漏洞來完成越獄的,而今天放出的這個越獄工具也是用的這個辦法。說到這裡,大家是不是越來越有興趣了呢?
  • 再給你微信漏洞,你敢去炸群嗎?
    昨天有一個漏洞,刷微信朋友圈Xss,今天都封號了,今天 我們再給你一個漏洞,你敢去炸群嗎?
  • 科普 | 「裸聊」詐騙,軟體不能隨便安裝!
    好友通過後,美女單刀直入,二話不說就邀請我安裝一款不知名的直播軟體,許諾只要在直播間點讚,就可以一對一視頻裸聊。火速安裝後,我發現該直播軟體無法正常使用,便立即將軟體卸載。雖然未能直播點讚,但美女仍然答應了裸聊。打開視頻,美女做起了大尺度動作,我也麻溜脫了個精光……然而三分鐘後,視頻驟然中斷。
  • 漏洞|小學生幾十秒破解ofo共享單車密碼鎖
    共享單車為人們出行帶來了便利,但在便利的同時,居然有人利用共享單車的漏洞,用非正當手段開鎖騎行,不禁令人唏噓。       視頻中,小男孩不到一分鐘就解開了密碼鎖「破解」小黃車密碼後,騎車滿大街溜達,看到一位路人想騎車時,一位小朋友還「熱心」幫助她開鎖。其中一位小朋友還表示,那些不會開車鎖又不會騎車的小孩,還會對這些單車搞破壞。
  • 真是這把鎖惹的禍嗎?
    據中國青年網消息,2017年3月26日,上海一個未滿12歲的男孩解開了一輛無人管理的ofo共享單車機械鎖,在騎行路上與上海弘茂汽車租賃有限公司的客車相撞,被卷進車底最終導致死亡。原告律師張黔林指出,究其事故原因,受害人不足12周歲,而ofo小黃車對投放於公共開放場所的車輛疏於看管,該自行車車輛之上也無任何警示受害人不得騎行的提示;且該車輛上安裝的機械鎖,存在重大安全隱患:用戶還車時並不需要上鎖,只需在App上點擊「結束行程」即可;其次,即使還車上鎖,也會有不少用戶未將密碼打亂,一按即開;即使密碼被打亂,網絡上也流傳共享單車聽聲解鎖秘訣。
  • PokemonGo:版本更新,水節活動結束,閃光鯉魚王依然可抓!
    這次水節活動,大量的湧現了完美度100的乘龍,鯉魚王,傑尼龜,小鋸鱷等水系精靈,簡直是抓到手軟啊。最為突出的要屬鯉魚王了,幾乎到處都刷新,之前只在水邊刷新,活動期間他已經逆天的上陸地了!我粗劣的計算了一下,只算完美度100的鯉魚王,活動期間大概是平時的8-10倍的樣子,相信也有不少小夥伴抓到閃光了吧!沒抓的繼續努力咯。
  • Python詞雲:Windows安裝Wordcloud報錯解決辦法
    看到別人畫的很漂亮的詞雲想自己動手來一個