日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

[Vulhub](WooYun-2016-199433)phpmyadmin反序列化漏洞

發布時間:2023/12/2 php 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Vulhub](WooYun-2016-199433)phpmyadmin反序列化漏洞 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0x00 預備知識

什么是序列化

  • 序列化 (serialize)是將對象的狀態信息轉換為可以存儲或傳輸的形式的過程。在序列化期間,對象將其當前狀態寫入到臨時或持久性存儲區。以后,可以通過從存儲區中讀取或反序列化對象的狀態,重新創建該對象?!緦顟B信息保存為字符串】
  • 簡單的理解:將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/
啟動環境

sudo docker-compose up
  • 1


查看當前運行漏洞環境

sudo docker ps
  • 1


本地訪問沒問題,環境搭建成功(因為沒有連接到數據庫,我們將得到一個錯誤。但此漏洞與數據庫無關,因此請忽略)


0x02 影響范圍

phpmyadmin 2.8.0.3


0x03 漏洞成因

通過 exec 命令對指定的容器執行 bash然后查看源碼:

sudo docker exec -it 53b9559d9612 /bin/bash
  • 1


也可以下載到本地查看,更方便:

sudo docker cp 53b9559d9612:/var/www/html/libraries /home/vulhub/pma
  • 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方法:

整體思路就是:

setup.php -> common.lib.php -> Config.class.php -> __wakeup() -> load() -> eval();
  • 1

0x04 漏洞復現

構造payload修改source的值后得到的序列化值作為configuration的傳參,就可以輸出任意文件內容
poc:

configuration=O:10:"PMA_Config":1:{s:6:"source",s:11:"/etc/passwd";}&action=test
  • 1

注意需要滿足兩個條件:1. POST請求方法;2. action的傳參不為clear:

復現結束后別忘了關閉docker容器:

docker-compose down
  • 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反序列化漏洞的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。