0x0 后台getshell
在includes/cls_template.php fetch函数
可以看到如果$filename以"str:"开头那么就调用_eval()函数执行"str:"后面的代码, 不过在执行之前系统调用fetch_str函数进行字符查找和替换。
_eval():
过滤了php语言的标记。
现在需要查看有哪些代码调用了这个函数,找到了这段代码:wholesale.php
在提交订单的地方看到了代码调用了get_mail_template()获得remind_of_new_order模板的内容,然后放入到fetch中执行,如果可以控制remind_of_new_order模板的内容那就可以让ecshop执行我们的命令了。
在后台可以在模板管理中找到邮件模板,更改remind_of_new_order的内容为"{$phpinfo()'];phpinfo();/*}",然后在调试中可以看到代码被替换成了"<?php echo $this->_var['phpinfo()'];phpinfo();/*']; ?>",代码成功执行。

0x1 前台xss
前台在有些地方过滤不够充分,导致用户可以构造恶意javascript完成对后台管理员的xss攻击。
注册用户以后随便买个东西,收货人信息里电话一栏只有本地的客户端检查,而没有后端过滤,容易招到xss攻击。

0x2 xss+后台getshell
由于没有csrf的防护,因此可以前台xss到后台并让管理员帮我们getshell。
以下是实现getshell的js:
上传这个js的图片并引用或者直接从外部网站引用都可以。为了测试方便,从本地引用

最后提交订单,管理员访问该订单,用户找回密码,就会在根目录生成shell.php,密码207.
管理员访问订单前的找回密码模板:

管理员查看订单

管理员访问订单之后的邮件模板

最后用户前台找回密码,根目录下生成一句话shell.php

0x0 后台getshell
在includes/cls_template.php fetch函数
可以看到如果$filename以"str:"开头那么就调用_eval()函数执行"str:"后面的代码, 不过在执行之前系统调用fetch_str函数进行字符查找和替换。
_eval():
过滤了php语言的标记。
现在需要查看有哪些代码调用了这个函数,找到了这段代码:wholesale.php
在提交订单的地方看到了代码调用了get_mail_template()获得remind_of_new_order模板的内容,然后放入到fetch中执行,如果可以控制remind_of_new_order模板的内容那就可以让ecshop执行我们的命令了。
在后台可以在模板管理中找到邮件模板,更改remind_of_new_order的内容为"{$phpinfo()'];phpinfo();/*}",然后在调试中可以看到代码被替换成了"<?php echo $this->_var['phpinfo()'];phpinfo();/*']; ?>",代码成功执行。

0x1 前台xss
前台在有些地方过滤不够充分,导致用户可以构造恶意javascript完成对后台管理员的xss攻击。
注册用户以后随便买个东西,收货人信息里电话一栏只有本地的客户端检查,而没有后端过滤,容易招到xss攻击。

0x2 xss+后台getshell
由于没有csrf的防护,因此可以前台xss到后台并让管理员帮我们getshell。
以下是实现getshell的js:
上传这个js的图片并引用或者直接从外部网站引用都可以。为了测试方便,从本地引用

最后提交订单,管理员访问该订单,用户找回密码,就会在根目录生成shell.php,密码207.
管理员访问订单前的找回密码模板:

管理员查看订单

管理员访问订单之后的邮件模板

最后用户前台找回密码,根目录下生成一句话shell.php
