下载最新版的dedeCMS,链接https://updatenew.dedecms.com/base-v57/package/DedeCMS-V5.7.109-UTF8.zip
直接使用php_study搭建即可:
登录后台:
一眼看到最左边那个模板编辑功能:
找到个标签管理的功能,可以直接编辑php文件,这不直接rce了:
尝试编辑一下,果然,他是防了一手的,直接不做修改保存它的源文件都保存不了:
抓包查看它修改代码的功能是在哪里实现的:
跟一下这个/dede/tpl.php,打断点调试:
可以看到,filename和content的值就是数据包中传的值:
首先正则匹配匹配了文件名中的.,所以路径穿越应该是穿越不了了:
将文件内容中的注释替换成空:
然后匹配了一堆不允许的函数名或者关键字:
这个如果经常玩ctf就知道很好绕过,使用(s.y.s.t.e.m)这样的格式来调用函数即可,将content更换成(s.y.s.t.e.m)来看是否能绕过该正则:
后面还有各种奇奇怪怪的正则,第一个正则#[$][_0-9a-z]+[\s]*[(][\s\S]*[)][\s]*[;]#iU
是可以匹配以 $ 或字母开头,后面跟着任意数量的数字、字母或下划线的函数名,后面紧跟着一个左括号和任意数量的参数,最后以分号结束的函数调用语句。把system函数的参数给它加上看看能不能绕过:
直接就过了:
下面的正则#[@][$][_0-9a-z]+[\s]*[(][\s\S]*[)]#iU
是匹配以@开头的php函数调用语句,我们的payload不包含@所以可以直接绕过:
最后一个正则#[\
][\s\S]*[`]#i`匹配用反引号包裹的字符串:
很明显我们可以直接绕过进入到文件保存的环节,到这里我们就绕过了所有对文件内容的正则匹配:
最后一个对文件名的正则判断修改的文件名是否以.lib.php结尾,这个无关紧要,能编辑以php结尾的文件就行:
到这里我们的恶意文件就直接写入啦:
include目录是不需要鉴权即可访问的,所以前台可以直接访问该文件,/include/taglib/flinktype.lib.php,报了一堆warning,但是代码成功执行了:
第一次觉得ctf学的东西在代码审计的时候还是有那么一丢丢的用的。
不过该漏洞是在后台,dedecms的后台不太好找,所以有点鸡肋,但也算rce了。