极客谷杯2021 EZDEDE
2021-10-23   # CTF

EZDEDE

打开是一个dedecms5.7sp2 的安装界面,安装完成后只有一个重新安装的按钮,所以问题应该是出现在安装的这部分。
在dedecms 5.7sp1 里有一个 DedeCMS 5.7 sp1远程文件包含漏洞(CVE-2015-4553)
https://www.cnblogs.com/yuzly/p/11332644.html
看了一下漏洞分析
在 install/index.php 这里有个变量覆盖。
8ab4e70b83649937b0f481098353ec15.png

接着在 step 11这里可以通过变量覆盖 $updateHost$install_demo_name去获取远程文件并写入。
这里 $updatehost 是写在 ../data/admin/config_update.php里的
这里因为fopen中的参数是w所以我们可以通过 fwrite($fp,$sql_content))../data/admin/config_update.php 文件内容覆盖。
这样我们就可以设置 $updatehost 为我们自己构造的地址,从而控制写入的内容。
b0cff7b3a1c745629c0824d220e37b17.png

但是在sp2 版本里这些变量全都变成了静态变量,变量覆盖倒是还存在。
2e2c5e3abf2703dbca6789593daf89e3.png

审计了一会发现安装模块的地方有个覆盖文件的地方。
5ab98dd7f8b92799e33f2f7b40a4c03b.png

在设置数据库的地方可以通过恶意 mysql 服务端去读文件。读了一下 /readflag /flag /flag.txt /start.sh /flag.sh 发现都没有读到。读了源码发现题目把 step 11 这部分代码删了,其实不用删也行。

又找了下其他有写文件操作的地方,第一处和第二处这里是把数据库和一些基本配置写入到配置文件,参数都被 ' 包裹,而在变量覆盖的地方会对参数用 addslashes 函数处理,所以不能闭合逃逸。

0283c397c918f9b02582601e2de20cb0.png
211982ec28e8c2024096fa3ecb37d6b1.png

这部分是用我们的参数是通过 " 包裹的,这里可以直接通过"${phpinfo()}"执行。
42c5f295abe1b091806d098e0a2fe40d.png

在第四步的地方构造两个参数modules[0]=${phpinfo()}&moduleCacheFile=1.php
208a69b5d693a5e2b39b0e5659de577f.png
debug 看参数到这都是正常的

2b550ecec4f19b3eaf7ff2b62176b2f3.png
这里好像没有创建文件的权限,得找一个存在的文件
payload

1
modules[0]=${phpinfo()}&moduleCacheFile=../data/admin/config_update.php&step=4&dbtype=mysql&dbhost=localhost%3A8889&dbuser=root&dbpwd=root%40123&dbprefix=dede_&dbname=dedecmsv57utf8sp1112&dblang=utf8&adminuser=admin&adminpwd=admin&cookieencode=tuDGaS1FQgW7KL1r1l6C20s3GMGg&webname=%E6%88%91%E7%9A%84%E7%BD%91%E7%AB%99&adminmail=admin%40dedecms.com&baseurl=http%3A%2F%2Fhost-web&cmspath=

写入成功。
ccfbdd30167f56f0258abd917c47f738.png
2579bd7e1c4e417264e9c90bbea923ee.png