0x1
这个漏洞只影响5.8.1 预发布版本
下载链接:https://github.com/dedecms/DedeCMS/archive/refs/tags/v5.8.1.zip
验证版本:http://127.0.0.1/DedeCMS-5.8.1/data/admin/ver.txt
先看一下它的poc跟着走一下代码
POC:
1 | GET /plus/flink.php?dopost=save&c=id HTTP/1.1 |
bp抓包,修改一下,传给phpstorm
跳到ShowMsg函数里面
gourl传入的是-1
所以这里会从HTTP_REFERER里获取gourl,POC这里是<?php “system”($c);die;/*
然后gourl会嵌入到$func变量里,$func变量又会拼接到$msg遍历里面,最后,由DedeTemplate()类里的LoadString()方法和Display()来处理$msg变量,接下来看LoadSting()和Display()
DedeTemplate()类在include/dedetemplate.class.php文件里,372行处是LoadString()函数,
函数把$this->sourceString设置为了传入的msg,然后cachedir值为/data/tplcache,然后在本地目录找到了这个文件,打开它,发现location这个地方还是<?php “system”($c);die;/*
继续看代码,走完$this->ParseTemplate();这一步,this->sourceString里的location还是
Referer: <?php “system”($c);die;/*。
然后走display,display里有一步WriteCach(),跟进
进入到WriteCache()后,我这里的走向和参考博客里不一样,我这里if判断为false,直接跳出来了,但是不走if里面的代码,最后也能出来结果,有点迷惑,