用户
搜索

该用户从未签到

i春秋-呆萌菜鸟

Rank: 1

2

主题

3

帖子

42

魔法币
收听
0
粉丝
0
注册时间
2018-11-4
发表于 2020-11-2 14:01:51 58456

WDJA CMS 1.5.2模板注入漏洞

漏洞发掘分析

前言

这是年初无聊在家审的一个小众的CMS,漏洞官方已经修复,现在分享出来给大家,希望一起共同学习和进步。

代码审计

漏洞文件:\common\incfiles\function.inc.php
  • 全局搜索中发现这个cms的模板引擎是使用eval来实现的。

img

  • 我们 跟进ii_eval()函数。非常这里$strers可控疑似存在代码执行。我们在继续跟进ii_eval()看谁调用了他。

img

漏洞文件:\common\incfiles\function.inc.php
  • 只有一个地方对他进行了调用,他是ii_creplace()函数

img

  • 我们看ii_creplace()代码,$strers可控,但是它必须匹配({\$=(.[^\}]*)})这个正则类似于下面:
{$=phpinfo()}

img

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

img

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

img

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

img

img

  • 很明显是从用户地址中获取。

image-20191221234802438

Getshell

  • 先注册一个会员
http://www.域名.com/passport/?type=register
  • 在添加地址出写入要注入的命令,确认添加地址即可。
http://www.域名.com/passport/address/index.php?type=list

img

img

  • getshell exp,同样方法在地址出写入下面代码即可在passport\address路径下生成一个shell.php

http://goodcheerleung.gitee.io/blog/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20201102133040.png

img

img

评分

参与人数 1魔法币 +3 收起 理由
lase + 3

查看全部评分

学习了,感谢分享
使用道具 举报 回复
发表于 2020-11-3 20:46:55
Gq师傅tql
使用道具 举报 回复
发表于 2020-11-3 20:54:49
学到了学到了,dalao tql
使用道具 举报 回复
发表于 2020-11-3 21:09:42
学习了,感谢分享!
使用道具 举报 回复
发表于 2020-11-17 16:22:03
nb啊师傅
使用道具 举报 回复
发新帖
您需要登录后才可以回帖 登录 | 立即注册