php模板注入漏洞,「代码审计」某JA网站内容管理系统模板注入漏洞

0x00前言

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

0x01 代码审计

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

75e59a80ca7cefaecc76d6091c60e8bf.png

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

fbd8db21857ea2a3cd10c1ae1ac9b8b7.png

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

cbddf0c929f28ee9733974b4a58bd379.png

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

{$=phpinfo()}

a244f9f4e9eb1c40fe96e30af5585c25.png

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

22e585293b677e89e6d302f4061ea936.png

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

4075ec9bc42b87d277a39f78a829fcc0.png

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

fd947249a03d6ac1a840238ec2f43f04.png

546d1375a65f058d0ef3f42df5818a41.png

很明显是从用户地址处传入。那么我们先注册个用户添加用户地址传入我们payload

{$=phpinfo()}

ebf7562fec5172d98d2ca23b5f7d5c27.png

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

221f34d56772cf225f4d0a7aa57d0aad.png

0x02总结

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

看完文章有没有想要自己尝试一下呢!搜索合天网安实验室,get同款实验。通过实验了解服务端模板注入漏洞的危害与利用。

举报/反馈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值