【代码审计】WDJA1.5.2 网站内容管理系统 模板注入漏洞–Hack之路

WDJA1.5.2 网站内容管理系统 模板注入漏洞

0x00 前言

一直对模板注入漏洞懵懵懂懂,直到最近在某 gayhub 上瞎逛碰到一个 cms,再一番操作之后找到了一个前台 getshell 的漏洞。由于相关要求,这里隐去这个 cms 的全称,就分享漏洞发掘的思路。

0x01 代码审计

我们全局搜索 eval(可以发现有一个地方使用了 eval,可以大胆猜测这个模板引擎是使用 eval去实现。我们跟进 ii_eval() 函数。

【代码审计】WDJA1.5.2 网站内容管理系统 模板注入漏洞--Hack之路

可以见到函数的 $strers 可控,我们继续跟进 ii_eval() 看谁对他进行了调用

【代码审计】WDJA1.5.2 网站内容管理系统 模板注入漏洞--Hack之路

全局搜索发现就只有一个地方对他进行了调用那就是 ii_creplace() 函数

【代码审计】WDJA1.5.2 网站内容管理系统 模板注入漏洞--Hack之路

我们跟进 ii_creplace() 可以看到,$strers 可控但是他必须传入一个与 ({\$=(.[^\}]*)}) 这个正则匹配的字符串才能传入到 iieval(), 这里我们就可以得知要想执行代码必须符合类似下面的格式:
{$=phpinfo()}

【代码审计】WDJA1.5.2 网站内容管理系统 模板注入漏洞--Hack之路

那么我们继续跟进 ii_creplace() 函数看谁对他进行了调用,找了很多但是都对函数中的 $ 进行了转义,但是在 passport\address\common\incfiles\manage_config.inc.php 中的xxx_cms_admin_manage_list() 并未做任何过滤。我们继续跟进。

【代码审计】WDJA1.5.2 网站内容管理系统 模板注入漏洞--Hack之路

我们发现 \passport\address\manage.php 对passport\address\common\incfiles\manage_config.inc.php 进行了包含并调用了xx_cms_admin_manage_action(), 而它调用了 xx_cms_admin_manage_list(), 那么很明显我们只需将符合 {\$=(.[^\}]*)} 正则的 payload 传入即可导致 getshell

【代码审计】WDJA1.5.2 网站内容管理系统 模板注入漏洞--Hack之路

那么从哪传入呢,我们直接把 xxx_cms_admin_manage_list() 中的 sql 语句打印出来即可知道。

【代码审计】WDJA1.5.2 网站内容管理系统 模板注入漏洞--Hack之路

【代码审计】WDJA1.5.2 网站内容管理系统 模板注入漏洞--Hack之路

很明显是从用户地址处传入。那么我们先注册个用户添加用户地址传入我们 payload:{$=phpinfo()}

【代码审计】WDJA1.5.2 网站内容管理系统 模板注入漏洞--Hack之路

再次刷新页面已经显示 phpinfo,说明 getshell 成功。

【代码审计】WDJA1.5.2 网站内容管理系统 模板注入漏洞--Hack之路

0x02 总结

其实纵观代码,这个 cms 的开发人员是有考虑过代码注入的问题,但是其对传入的内容并没有做全局过滤,而是每个点做过滤。这样难免会造成遗漏过滤的情况,当然这个 cms 的 sql 注入防护也是采取每个变量前套上一个转义函数,但是在后续的版本开发中难免也会有开发人员遗漏,这里不做深究了

网站地址:https://www.hackzl.cn;发布者:hack之路,转转请注明出处:https://www.hackzl.cn/index.php/2020/10/14/%e3%80%90%e4%bb%a3%e7%a0%81%e5%ae%a1%e8%ae%a1%e3%80%91wdja1-5-2-%e7%bd%91%e7%ab%99%e5%86%85%e5%ae%b9%e7%ae%a1%e7%90%86%e7%b3%bb%e7%bb%9f-%e6%a8%a1%e6%9d%bf%e6%b3%a8%e5%85%a5%e6%bc%8f%e6%b4%9e-hack/

发表评论

邮箱地址不会被公开。 必填项已用*标注