记录一次ewomail测试
ewomail存在默认密码问题
某些站点可能未修改
admin/ewimail123

然后看了下路由,很有意思,这路由写的颇有几分spring的感觉

后台注入
第一处
由于有没有前台,只能看后台的注入
首先看一下数据库的连接参数
采用PDO连接,并且未禁止多语句查询

存在注入,且是root权限时可直接获取系统权限
基础函数方法分析
接受参数的方法为ipost或者iany或者iget
其中ipost如下
1 | function ipost($key=''){ |
iFilter方法如下
1 | function iFilter($var) |
可以看到,对参数值进行转义,那么就存在一个键key的问题,这类问题,多出于insert和update
全局搜索,数据库update方法
可以看到,第二个参数完全可控时存在key注入
where完全可控的时候,同样存在注入问题

找到下面这处
数组没问题,where的传参存在问题

查看其路由

复现

第二处
数据库删除语句
1 | public function delete($tablename,$where){ |
可以看到不对数组进行处理
查看调用方法
存在多处调用,且id为整形,不受过滤方法的影响

跟进getOne方法
发现对id进行了强转

但是delete语句的id并未强转
所以存在注入
不测试了
第三处

可以发现是拼接在order by后面的,也不需要单引号,可以完成注入
直接目标站测试

数据库也不是root,没法子通过数据库获取shell了
其他
搜索一下其他
- 文件包含
- 代码执行函数
- 命令执行函数
- 模板操作
- 文件上传
- …..
所有的搜完,发现只有一处调用file_put_contents,还是写一个log文件,告辞
多少连个任意文件删除都不行

反序列化->文件删除
后续看了一下,整个代码的流程
通过入口文件index.php,加载run.php

在程序开始之前回显包含模板的操作库

然后Smarty.class.php会自动加载bootstrap.php


最后通过Autoloader.php加载所有类
发现从数据库中获取的数据被反序列化

查找利用链
可惜的断路

跟进yy_pop_parser_stack
挺可惜的是个fwrite,file_put_contents的话直接就写shell了
注:需要yyTraceFILE是一个打开的资源

后续搜了__toString、__get、__set、__call,都没什么可以RCE的
换个入口之后

跟进之后可以任意文件删除

但是实际测试的时候出现问题,smart_Template_cached的值设置不上

换成另外一个upload,尝试通过触发__get获取参数值,均失败
查找,发现没有$cached在类中的定义,就是个固定得
遂放弃吧
失败的poc
1 |
|












