记录一次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 |
|