[Vulhub](WooYun-2016-199433)phpmyadmin反序列化漏洞
0x00 預備知識
什么是序列化
- 序列化 (serialize)是將對象的狀態信息轉換為可以存儲或傳輸的形式的過程。在序列化期間,對象將其當前狀態寫入到臨時或持久性存儲區。以后,可以通過從存儲區中讀取或反序列化對象的狀態,重新創建該對象。【將狀態信息保存為字符串】
- 簡單的理解:將PHP中 對象、類、數組、變量、匿名函數等,轉化為字符串,方便保存到數據庫或者文件中
- 當在php中創建了一個對象后,可以通過serialize()把這個對象轉變成一個字符串,保存對象的值方便之后的傳遞與使用。
什么是反序列化
- 序列化就是將對象的狀態信息轉為字符串儲存起來,那么反序列化就是再將這個狀態信息拿出來使用。(重新再轉化為對象或者其他的)【將字符串轉化為狀態信息】
- 與 serialize() 對應的,unserialize()可以從已存儲的表示中創建PHP的值
反序列化漏洞
- 本質上serialize()和unserialize()在PHP內部實現上是沒有漏洞的,漏洞的主要產生是由于應用程序在處理對象、魔術函數以及序列化相關問題的時候導致的。
- 當傳給 unserialize() 的參數可控時,那么用戶就可以注入精心構造的payload。當進行反序列化的時候就有可能會觸發對象中的一些魔術方法,造成意想不到的危害。
魔術方法
php中有一類特殊的方法叫“Magic function”(魔術方法), 這里我們著重關注一下幾個:
- __construct():當對象創建(new)時會自動調用。但在unserialize()時是不會自動調用的。(構造函數)
- __destruct():當對象被銷毀時會自動調用。(析構函數)
- __wakeup():如前所提,unserialize()時會自動調用。
- __toString():方法用于一個類被當成字符串時應怎樣回應。例如 echo $obj;應該顯示些什么。
0x01 環境搭建
漏洞環境:https://vulhub.org/#/environments/phpmyadmin/WooYun-2016-199433/
啟動環境
- 1
查看當前運行漏洞環境
- 1
本地訪問沒問題,環境搭建成功(因為沒有連接到數據庫,我們將得到一個錯誤。但此漏洞與數據庫無關,因此請忽略)
0x02 影響范圍
phpmyadmin 2.8.0.3
0x03 漏洞成因
通過 exec 命令對指定的容器執行 bash然后查看源碼:
sudo docker exec -it 53b9559d9612 /bin/bash- 1
也可以下載到本地查看,更方便:
- 1
查看存在漏洞的文件代碼 /scripts/setup.php
發現當configuration傳參存在且action傳參不為’clear’時,將傳入的connfiguration給反序列化;而setup.php中又引入了common.lib.php,接下來查看common.lib.php:
common.lib.php中又引入了Config.class.php,接下來看Config.class.php:
Config.class.php中含有__wakeup()魔術方法,因此可以構造序列化參數,其中又調用了load()方法,接下來繼續看load方法:
整體思路就是:
- 1
0x04 漏洞復現
構造payload修改source的值后得到的序列化值作為configuration的傳參,就可以輸出任意文件內容
poc:
- 1
注意需要滿足兩個條件:1. POST請求方法;2. action的傳參不為clear:
復現結束后別忘了關閉docker容器:
- 1
經過分析這個漏洞是不能讀取php文件的,而因為又了eval()函數,相當于任意文件包含了。getshell需要包含上傳的木馬文件,也可以包含日志。但docker環境中并未開啟日志功能,也沒有上傳點,因此getshell比較困難。
在Ubuntu下一般不允許root權限運行,無法讀取access.log。在windows下幾乎所有瀏覽器和python模塊都會將特殊字符編碼進行轉換,getshell就更困難了,只能用socket去構造shell,參考下面這篇文章:
https://docs.ioin.in/writeup/www.mottoin.com/4cb63e7c-9151-42da-a5bd-e6e29e7ff2f8/index.html(pma任意文件包含導致代碼執行)
參考鏈接:
https://docs.ioin.in/writeup/www.mottoin.com/4cb63e7c-9151-42da-a5bd-e6e29e7ff2f8/index.html(pma任意文件包含導致代碼執行)
https://www.cnblogs.com/ichunqiu/p/10484832.html(PHP反序列化漏洞利用總結)
總結
以上是生活随笔為你收集整理的[Vulhub](WooYun-2016-199433)phpmyadmin反序列化漏洞的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: routersploit简单实例
- 下一篇: 查看目标主机安装的杀毒软件