《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 業界動態 > 湯青松:PHP反序列化漏洞分析實踐

湯青松:PHP反序列化漏洞分析實踐

2019-08-30
關鍵詞: 湯青松 PHP 漏洞分析

1.jpg

湯青松  中公教育高級安全工程師

  今天分享的PHP反序列化也是異樣安全,每一年都會爆發反序列化的問題,PHP反序列化的問題大家會很少聽到或者是沒有聽過,有幾點,首先(英)影響的范圍比較廣泛,PHP反序列化主要是在CMS或者是框架當中去做,影響范圍比較少,它的門檻比較高,關注的人也會比較少一些,在去漏洞第一時間會挖一些(英),應用掃描器掃描或者是常見的邏輯性的漏洞,對于反序列化漏洞一般關注點相對來說比較少,但反序列化漏洞有一個特點,如果利用成功了,它的危害往往是比較大的,可以面面執行,代碼注入等等。

  我今天分享相對來說比較偏一點的話題,今天有點,首先認識漏洞為什么會產生。第二個怎么利用它。第三個拿一個實例講解一下。

  反序列化漏洞有一些同學不是太清楚,和反序列化有什么關系,我相信很多人去淘寶買家具,不會直接把家具給你運過來,會把這些東西打包拆成一塊一塊,序列化的過程也是一樣的,會把一個“類”或者是“數組”變成這么一個串,反序列化會把這個串再反向操作一下,再把它的變量復制過去。

  認識漏洞,這個漏洞相對來說比較偏,首先要知道PHP的對象,模數方法,序列化,反序列化,序列化與魔術方法,以及數據結構。

  先看一個代碼,這是一個非常簡單的小樣代碼,在代碼當中能夠看到一個class,這是對象,各種語言基本上都差不多,運行之后會執行對象里面的某一個方法,魔術方法,它是在我們不去主動調用某一個方法自動去觸發,在PHP反序列化漏洞當中就利用了自動觸發的問題去造成問題,面向對象編程語言會執行它的方法,銷毀一個對象的時候,這些自動觸發的方法可以理解為魔術方法。

  這個代碼當中就是加了下面幾個方法,這三個方法,第一個方法這樣的對象會自動觸發它。第二個就是結束會觸發。第三個把對象當成錯的去觸發,我們先看一下這個會自動觸發方法。

  第二個是手動調用方法,后面把對象作為字符串自動輸出,最后程序要結束,這是運行結果,這是一個反序列化漏洞主要的關鍵點。

  假設還是有一個類,會有兩個變量,這里面會有兩個方法,有了這樣一個對象,把對象兩個變量復制,調用了一下這個方法,這邊會輸出字符串,再把它進行序列化操作,輸出出來,輸出的結果這個是程序當中(英)的值,這是反序列化的數據,把反序列化的數據復制出來,再認識一下反序列的操作,這個代碼當中同樣的代碼不變,下面不去做這個方法,把它的序列化數據放在這里面,反序列化操作一下,得到的還是這樣的類,并且在序列化類的過程當中會把變量給復制進去,這邊并沒有給進行復制操作,依然是零,這邊還是一個空的,當我們執行這個方法我們輸出的結果這個是我們這邊的名字,這是運行結果。

  反序列化操作會做兩個事情,這邊有一個自定義的方法,后邊都是魔術方法,在自動觸發的時候,來認識一下這幾個魔術方法,序列化也會觸發這樣的方法,當我們輸出序列化字符,在這邊進行反序列化操作的時候又會調用這樣的魔術方法,在反序列化漏洞操作的時候,在迂回的不斷嘗試這幾個方法的過程,接下來看一下例子,這是剛才代碼的運行結果,可以看到這邊的魔術方法都是自動執行的,序列化的結構,這里面定了一個數組,數組當中進行了序列化操作,并且把序列化操作的數據給輸出出來了,PHP序列化結構是什么,3是代表數組,有3個數據,ABC,這邊有一個S1,就代表字符串,1是它的長度,內容是A,大概是這樣的結構,這邊還有一些特征,我們一會兒用到對象的時候它可能是O,代表的是對象。

  接下來看一下怎么去利用的,我們在這個代碼當中有兩類,第一個類,第二個類,下面有一行代碼,這行代碼不在這兩個類當中,代碼是有漏洞的,怎么利用,在執行之后前端傳遞了一個(英),通過(英)傳遞了一個數據,這里并沒有進行安全過濾,就把它進行到了反序列化操作,這里就會觸發一個操作,在這個類里會自動觸發這個魔術方法,又會調用自定義方法,這個方法當中又會調用這個對象,這個對象當前類并沒有這樣的對象,它是一個變量,怎么做?我們可以把變量復制為對象,可以把這樣的變量復制為這樣的對象,在這個對象里面又可以把PHP設置為我們想執行的命令,調用這樣的方法就執行了相應的命令,看一下POC,第一步我們在這邊再寫一個POC的代碼,讓程序識別,在這個對象當中把它進行復制,這樣的變量在識別的時候會調用識別方法,自動給變量復制,復制的時候又把下一個對象放進去,下一個對象在方法里面也放了一個(英),這樣的值就是(英),這個變量里面的數據就是一個對象,運行出來之后就會輸出這樣的字符,當把這樣的字符放到前面代碼傳遞過去就會執行相應的操作,把結果放進去,因為會執行(英),再通過反序列化操作就會產生這樣的結果。

  我們看一個實例,這個實例在PHP里面比較流行的博客系統,之前爆發了一個代碼的漏洞,這個漏洞通過反序列化操作的過程,分析一下漏洞的利用過程,我們說到PHP反序列化操作,就是使用反序列化函數,把字符串放進去,當這個函數去調用了,就可能產生反序列化的漏洞,在這個博客當中直接去搜索函數,在安裝的位置這個地方有這樣的一串代碼,這個代碼我們可以看到只做了三個事情,首先從cookie取出數據,通過base64解碼后進行反序列化操作,從前端傳遞出來數據沒有進行安全過濾就放在反序列化操作,就會產生安全問題,有這樣的安全問題最主要是看它能不能利用,如果有一個漏洞,但是這個漏洞并不能進行利用,那就說明沒有什么效果,反序列化操作的時候會調用特征方法,反序列化操作的時候會捋一個對象,會調用反序列化操作方法,會調用一個魔術方法,在進行反序列化漏洞的時候有兩種思路,第一個就是直接利用,只要進行反序列化操作必定會執行這三個方法,這是反序列化的魔術方法以及對象結束的方法,我們就可以搜索全系統當中有哪些位置有這幾個方法,看這三個方法有沒有對它當前類里面的變量進行處理,使用(英)處理當前的變量或者是其他的方法,如果有的話就會有問題,反序列化操作是可以控制某一個類里面的變量數據,在處理變量的時候就會產生相應的問題。

  另外一個就是間接利用,去了一個迷宮,去迷宮有兩種結果,第一種我們直接找到出口。另外一種我們并不能一下子找到出口我們會在里面繞,一直找到出口為止,我們在直接利用的時候不能用,就會對代碼進行跟進,首先會排除這三個方法再去找其他可以間接利用的方法,比如tostring,(英)等方法。

  回到這個代碼當中,這個代碼當中按照直接利用思路會搜索魔術方法,在全局系統里面去搜這幾個,在系統當中就找到了這兩處位置有方法,但是并沒有對變量進行處理,這個位置并不適用,直接利用法把它放棄了,接下來就需要迂回的去看這個系統當中還有沒有其他的安全問題,間接利用我們除了直接利用的那三個魔術方法,跟進代碼看它有沒有把一個對象進行字符串操作,比如他把一個對象進行字符串操作的時候就會去觸發(英)方法,也有可能在調用變量的時候調用到不可訪問的變量,就會觸發另外一個(英)的魔術方法,我們接著對代碼進行審計,在剛才那串代碼的時候看到它下面又把反序列化數據了,里面有兩個變量放在這里面,我們就根據這個方法里面的處理,這里面傳遞了一個(英),首先看這樣一個變量,它確實是把這樣的變量作為字符串處理,假設我們把這樣的變量是作為對象,并沒有進行安全過濾,把它作為對象,就會觸發(英)的魔術方法,什么地方有(英)方法,只要在全局系統當中搜索一下,搜索的時候就搜索(英),搜索有三處進行(英)操作,雖然我們找到了這些方法,但這些方法有沒有對變量進行相應的處理,前面兩處是沒有進行任何處理的,最后一處他是有對對象進行處理,我們繼續跟進,處理的時候并沒有直接對某一個變量進行安全的過濾或者是進行相應的轉換,它是又進行了一次迂回,就像我們去迷宮,迷宮我們找到一個房間,這個房間發現并不是一個出口,還有一條門就繼續跟進這條門,前面直接利用的三個方法就排除了,再加上(英)只找到當前類可以利用的,(英)也排除了,還剩下哪幾個魔術方法可以利用,可能會有set、isset這幾個魔術方法可以被利用,我們的(英)有沒有調用不可訪問的代碼,繼續跟進,這三行代碼需要注意,這三行代碼有什么樣的特點,首先調用了當前變量類里面的變量,反序列化操作是可以知道它的結構,把這樣的變量定義為數組,里面某一個(英)值再給它一個對象,并且這樣的對象是不存在這樣的值。這樣的一個類還要滿足一個條件,這個類必須要有一個(英)魔術方法,繼續接著去迂回,搜索,在這些系統當中有哪些get的魔術方法,全局搜索之后又搜索出三個位置有get的方法,有兩處是沒有意義的,因為并不能調用當前類里面的變量進行處理,因為(英)它有,我們可以看到它這邊又調用了一個get,把變量返回,我們繼續跟進get的方法,跟進之后,我們看看這個代碼,在這個方法里面他有一個案子判斷一下當前類里面的變量是否存在,如果存在的時候就取里面的值,這個變量我們是可以控制的,我們在反序列化操作的時候肯定會把變量設置成這樣的值,我們是可以控制會走這樣的一行代碼,它上面還有一行代碼,這行代碼會判斷當前變量是數組還是字符串,以及進行相應的過濾,這里做了一個安全過濾,這里面就有一處問題了,首先會判斷(英)有沒有(英),(英)是否存在,我們是可以控制這樣類里面的方法值,可以讓它找這里面的方法,使用哪些方法對某一個值進行過濾,既然(英)可以控制,在(英)我們可以填入(英),繼續判斷這個值是數組還是對象,使用不同的方法把(英)對值進行過濾,把這樣的(英)放進去,(英)可以控制,我們可以有一個任意代碼執行的問題,接著根據我們剛才的思路,我們構造一個POC,在構造POC的時候,主要有四點,首先我們可以看到取數據的位置取得(英)數據,取得的是64的數據,POC就輸出一個64的數據,這是最外面的包裝,里面調用了兩個變量,這里就給他兩個變量,在前面有一個方法把某一個變量當做字符串,為了讓它觸發(英)方法,我們就給他放一個對象,當他把數據作為字符串處理就做成(英)方法,這個方法里面有什么?這個是POC,前面調用了一個不存在的方法,這個不存在的方法是有屬性的,調用了這樣的方法我們又給他放入了相應的對象,這個對象就是(英)的對象,主要給它設置兩個值,第一個設置了(英)值,我們想執行某一個函數,是動態的。第二個會獲取變量,前面那個代碼當中調用了變量,把相應的值傳進去,結果就會產生這樣的效果,就是(英)里面/1,就會被執行出來,也就是這樣的POC就構造成功了。

  剛才復盤的時候,這邊取的是(英)64,這邊輸出了64,為了讓它觸發(英)方法,因為這個地方是把它作為字符串處理,我們這個地方放入一個對象就可以調用這里面的方法,在調用(英)方法這里面使用了構造的魔術方法,這些本來應該是字符串的數據,結果又把它放入了另外一個類,在調用這樣數據的時候,結果發現這樣的類是找不到的,這樣的類本來是可以找到的數據,結果忙入這樣的類,這樣的參數反而是私有方法,找不到,又會調用get方法,調用get方法又會觸發構造方法,環環相扣,就執行了(英),傳遞出了一個/1。(速記)


本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲一区二区三区视频| 久久婷婷色综合| 欧美一级日韩一级| 小黄鸭精品密入口导航| 欧美日韩亚洲一区二区三区在线观看 | 久久国产天堂福利天堂| 亚洲高清不卡av| 亚洲男人第一av网站| 一区二区在线观看视频| 亚洲男女毛片无遮挡| 亚洲精品社区| 欧美伊人久久| 亚洲视频免费在线| 欧美日韩中文精品| 国产乱码精品一区二区三区av| 亚洲欧美乱综合| 久久亚洲春色中文字幕久久久| 亚洲精品乱码视频 | 91久久久久久| 91久久精品国产91性色| 亚洲一区二区三区乱码aⅴ| 欧美在线免费视频| 欧美日韩在线一区| 亚洲电影在线播放| 亚洲人成人一区二区在线观看| 国产精品成人免费视频| 亚洲精品男同| 尤物视频一区二区| 欧美~级网站不卡| 99re6这里只有精品| 亚洲精选在线| 国产精品伊人日日| 欧美激情一区二区三级高清视频| 日韩系列在线| 午夜影视日本亚洲欧洲精品| 激情成人av在线| 欧美视频精品在线观看| 久久免费少妇高潮久久精品99| 亚洲精选久久| 欧美在线三级| 影音先锋一区| 久久综合久久综合九色| 久久激情久久| 国产免费一区二区三区香蕉精| 亚洲在线中文字幕| 亚洲一区二区三区三| 国产精品盗摄一区二区三区| 中文国产成人精品久久一| 国产一区二区三区黄| 欧美在线视频a| 亚洲电影网站| 亚洲国产成人av| 久久精品亚洲热| 久久爱www久久做| 亚洲午夜影视影院在线观看| 国产视频一区二区在线观看| 久久er99精品| 亚洲激情图片小说视频| 在线免费高清一区二区三区| 欧美亚洲日本网站| 亚洲国产精品综合| 亚洲欧美日韩精品在线| 国产精品久久97| 日韩一区二区精品葵司在线| 国产日韩欧美在线看| 中国女人久久久| 亚洲大片一区二区三区| 亚洲一区久久久| 国产日韩av在线播放| 亚洲狼人综合| 亚洲卡通欧美制服中文| 久久久久在线观看| 99riav久久精品riav| 欧美一区二区三区在线观看视频| 一本久道久久综合狠狠爱| 激情欧美国产欧美| 国产亚洲日本欧美韩国| 国产精品一区二区视频 | 国产精品一国产精品k频道56| 国产精品日韩专区| 在线日韩欧美| 日韩视频在线免费| 欧美一区二区三区另类 | 久久精品国产77777蜜臀| 亚洲精品小视频| 久久精品色图| 快射av在线播放一区| 亚洲欧美在线免费观看| 久久不射中文字幕| 午夜久久福利| 欧美在线精品一区| 久久精品一区二区三区不卡牛牛| 午夜亚洲一区| 欧美一区二区三区免费看| 午夜久久久久久久久久一区二区| 9色精品在线| 99综合在线| 亚洲免费观看高清在线观看| 国产情侣一区| 久久婷婷激情| 欧美色大人视频| 在线观看亚洲精品| 亚洲国产第一页| 国产日韩精品久久久| 玖玖玖免费嫩草在线影院一区| 亚洲日本va午夜在线影院| 99精品久久免费看蜜臀剧情介绍| 国产一区二区三区的电影 | 亚洲一区二区三区四区五区黄 | 久久久精品网| 亚洲自拍都市欧美小说| 亚洲精品国产拍免费91在线| 欧美激情第五页| 欧美与黑人午夜性猛交久久久| 亚洲国产精品成人| 夜夜嗨av一区二区三区| 欧美激情在线观看| 亚洲一本视频| 午夜伦欧美伦电影理论片| 久久九九有精品国产23| 欧美精品激情在线| 国产综合香蕉五月婷在线| 一区二区三区高清不卡| 欧美综合第一页| 亚洲一区日韩在线| 久久精品成人一区二区三区| 欧美新色视频| 一本久道久久久| 亚洲新中文字幕| 欧美视频在线观看免费网址| 一本久久a久久免费精品不卡| 在线一区二区日韩| 欧美日韩mv| 在线一区欧美| 性做久久久久久| 国产欧美一区二区精品仙草咪 | 亚洲精品欧美激情| 亚洲综合国产激情另类一区| 久久久久久久久久久一区| 欧美美女bbbb| 亚洲第一久久影院| 午夜精品区一区二区三| 日韩视频在线一区二区| 欧美在线中文字幕| 欧美日韩一区二区三区| 国产精品欧美激情| 国产伦理一区| 亚洲韩国一区二区三区| 欧美好骚综合网| 欧美成人免费播放| 噜噜噜91成人网| 男人天堂欧美日韩| 欧美久久一区| 韩国成人福利片在线播放| 日韩网站在线看片你懂的| 一区二区动漫| 黄色av成人| 一区二区三区欧美在线观看| 亚洲精品国产视频| 欧美人在线观看| 日韩视频一区二区三区在线播放免费观看| 99天天综合性| 欧美视频精品在线| 亚洲自拍啪啪| 久久久噜久噜久久综合| 18成人免费观看视频| 亚洲国产精品va在看黑人| 欧美成人午夜激情视频| 亚洲人成小说网站色在线| 一本色道久久88精品综合| 国产精品magnet| 欧美一级专区| 欧美成人亚洲成人| 亚洲人成人99网站| 亚洲小说欧美另类婷婷| 国产麻豆午夜三级精品| 欧美一区二区三区婷婷月色 | 一区二区三区精密机械公司| 亚洲欧美日韩国产综合在线| 国产精品手机在线| 久久精品国产一区二区三| 欧美激情女人20p| 亚洲免费中文| 欧美日本在线播放| 欧美在线免费观看视频| 欧美丰满少妇xxxbbb| 一区二区三区精品| 久久久精品一区| 亚洲免费播放| 久久综合激情| 亚洲一区亚洲二区| 欧美超级免费视 在线| 校园春色综合网| 欧美日韩另类在线| 亚洲高清资源综合久久精品| 欧美视频在线观看视频极品| 亚洲人成在线观看| 国产在线视频欧美一区二区三区| 亚洲色图综合久久| 亚洲福利专区|