感觉自己代码审计的能力不太行,于是下载了一个cms来锻炼下自己的代码审计功底,这篇文章记录一下这个dedecms代码执行的漏洞
织梦内容管理系统(Dedecms)是一款PHP开源网站管理系统。Dedecms V5.7 SP2版本中的tpl.php中存在代码执行漏洞,可以通过该漏洞在增加新标签中上传木马,获取webshell。该漏洞利用需要登录后台,并且后台的账户权限是管理员权限。
1.下载好源码后放到wwwroot目录下,将网站的目录指向修改一下,我是将目录指向了uploads
目录,安装的时候在后面输入install
即可按照步骤操作。
2.在windows下使用phpstudy来搭建,下载好源码之后将源码放在www
目录下,然后访问ip/dedecms/uploads/install
然后就可以按照步骤来安装dedecms。这里就不再演示了。
这个漏洞是属于后台漏洞,我们必须知道的是后台管理员的密码,这里是自己搭建的,所以账号和密码都是知道的,所以直接登录进后台。dedecms的默认后台地址是dede。所以我们可以直接登录。
我们要先获取token值,在tpl.php代码中我们可以看到,只有在upload那里可以得到token,这个在下面的漏洞分析中会具体分析。我们先来访问tpl.php?action=upload
来获取token。
然后访问
访问
http://ip/dede/tpl.php?filename=secquan.lib.php&action=savetagfile&content=<?php phpinfo();?>&token=55ab8c3e67797476fac5a53259f700b6[URL地址+token值自行更换]
然后访问 /include/taglib/secquan.lib.php
读取得到phpinfo
直奔主题,找到tpl.php
的代码,进行代码审计。我们先来看tpl.php
的代码都写了什么。
这段代码就是我们访问tpl.php?action=upload
之后的页面,我们可以看到我们在这个页面可以获取到token,我们应该都知道token能用来绕过csrf
,所以我在tpl.php
又搜了下csrf
看到了下面的代码。
分析下这段代码,首先a也就是我标的第一行,定义了一个savetagfile
的函数,判断参数是否为savetagfile
,如果等于就进行下一步。标注的第二个点就是csrf_check
也就是我们的token用来绕过的地方。第三处是一个正则,意思是判断filename参数是否匹配正则表达式的条件,不匹配就不允许修改操作的进行。第四处把$content里面的内容写入到相对用的路径里。
通过分析这段代码我们可以知道除了对文件名做了简单的过滤和一个csrf防护之外,并没有其他的保护,所以我们可以任意写入代码。
我们可以访问tpl.php?action=upload
来获取token
我对tpl.php
的代码进行了分析,可以得到我要上传的的参数有action,token,filename,content
这里的content和filename又是我们可控的。所以由此可以构造payload。
构造payload:
http://ip/dede/tpl.php?filename=secquan.lib.php&action=savetagfile&content=<?php phpinfo();?>&token=55ab8c3e67797476fac5a53259f700b6[URL地址+token值自行更换]
成功写入。
然后在访问:/include/taglib/secquan.lib.php
即可的到phpinfo
写入一句话木马,然后使用菜刀连接即可