前言
我们在八月的时候就已经陆续收到白帽子提交此框架的相关通用漏洞,我们一直在尝试联系该框架的相关管理人员,经过长时间的尝试联系无果并发现已有相关漏洞被公布出来,经DVP内部讨论决定,将DVP研究员深入挖掘此框架的相关严重漏洞提交至CNVD(国家信息安全漏洞共享平台)并发布此篇文章提醒币圈用户谨慎选择此类交易所。
0x01 漏洞分析
一、SSRF + 任意文件读取 + Getshell
Fuzz后发现这个需要先进行登陆后才能触发的漏洞,但是对于交易所来说这不是问题。程序会自动将读取到的文件保存在 /uploadfile/年月/随机生成的文件名(.) 但不能读取PHP文件。
漏洞地址:/index.php?s=member&c=***&m=*********
POST: file=文件路径
文件保存路径: /uploadfile/年月/随机生成的文件名(.)
文件读取:
绕过限制读取php文件
尝试读取php文件 “提示远程文件扩展名(php)不允许” 失败了。
本着不能读源码的文件读取不是好的文件读取的原则查看了相关源码。
查看源码后发现它取最后一个点后面的内容为扩展名,当扩展名为php的时候结束并提示错误。尴尬的是 白名单 $ext 里面是空的….空的…的.. . 也就是说点后面有任何内容都会导致远程抓取失败…
美滋滋,方法内的两个 if 都支持file:// 协议 于是乎 ?. 或者 #. 就可以绕过限制
SSRF 只需要把file 协议改为http协议就好了,自行发挥。
GetShell需要配合 config/system.php 文件中的 SYS_KEY 密钥进行编码,实现后缀名可控的情况下才可以抓取制定后缀文件。
从代码中可以看到,从 $_POST[url] 中接收参数($p[cdoe] 是外部可控的),通过 explode 函数分割字符串成 $size、$ext、$path 变量。
然后,通过 file_put_contents 函数写文件。
跟进 dr_authcode()(diy/dayrui/helpers/function_helper.php) 函数
发现是一个对字符串加解密的函数,关键的一个常量是 SYS_KEY ,而这个常量可以通过上面的文件读取拿到。
这里为 poscms2e****************************2662。
随后通过设置上传后缀白名单为 1|phtml,|0 进行 DECODE 编码,生成:
`0927itRT2tQykJn/9L5SijMOKtFzwjwxJGWtn6L356Zx/vRkMsXQ`
绝对路径:/uploadfile/年月/随机文件名.phtml
看到有些小伙伴打XSS + CSRF组合拳添加管理员千辛万苦的进后台,只为看用户信息…
不拿shell 看着难受… 于是就想着能不能来个XSS + CSRF 拿个Shell 装个13的,结果一顿操作只发现了一处鸡肋的文件包含能拿shell 为什么说鸡肋?因为有点像Discuz! 后台拿shell,繁琐。
大概操作:
内容 ==》 自定义页面 ==》 高级功能 ==》 模板文件参数
存在任意包含 跳跃五个目录到WEB根目录
然后保存访问 /index.php?c=page&id=你生成的ID
开始以为是代码层被截断了,后来发现是数据库字段就给了30个字符…
好在后台可以执行SQL语句 我们可以更新一下字段 把字节加大
SQL语句
alter table 表前缀_1_page modify column template varchar(100);
再回来重复刚才的操作
不知各位觉不觉得鸡肋… 反正我觉得要操作数据就蛮鸡肋的…
三、彩蛋 前台 SQLi 注入一枚
前台注册登陆后
/index.php?s=member&c=*****&m=*****&*****%22and%20exp(~((select%20*%20from(select%20user())a)))–%20ss–%20DCen&ext=
密码格式md5(md5($password).$salt) // $saLt = 十位随机字母+数字
老哥 有个问题没在你的博客里找到。但是想请教你一下
现在我有一台阿里云服务器,已经关闭了memcached udp服务。为什么还是会受到memcached ddos 攻击呀。用scapy构造ip测试的话,构造是成功的,但是并不会有返回数据。