0x00 环境准备
eduaskcms官网:https://www.eduaskcms.xin
网站源码版本:eduaskcms-1.0.7
程序源码下载:https://www.eduaskcms.xin/download/show/5.html
默认后台地址:http://127.0.0.1/public/run/user/login.html
默认账号密码:eduask/eduask
测试网站首页:
0x01 代码分析
1、 漏洞文件位置:/eduaskcms/app/home/controller/Feedback.php
2、 public function show()
3、 {
4、 if ($this->request->isPost() /*&& $this->Form->check_token()*/) {
5、
6、 //if(captcha_check(input('post.captcha'))){
7、 $this->Form->data[$this->m]['truename'] = trim($this->Form->data[$this->m]['truename']);
8、 $this->Form->data[$this->m]['mobile'] = trim($this->Form->data[$this->m]['mobile']);
9、 $this->Form->data[$this->m]['title'] = /*$this->Form->data[$this->m]['title'] ? */trim($this->Form->data[$this->m]['title'])/*:menu($this->args['menu_id'],'title')*/;
10、 $this->Form->data[$this->m]['user_id'] = $this->Auth->user('id');
11、 $this->Form->data[$this->m]['ip'] = $this->request->ip();
12、 $this->Form->data[$this->m]['menu_id'] = intval($this->args['menu_id']);
13、
14、 $rslt = $this->mdl->isUpdate(false)->save($this->Form->data[$this->m]);
15、 if ($rslt) {
16、 return $this->message('success','恭喜你!留言成功!');
17、 } else {
18、 $this->assign->error = $this->mdl->getError();
19、 }
20、 //}else{
21、 $this->assign->error[] = '验证码填写错误';
22、 //}
23、 }
这段函数获取参数后,并未对参数进行任何处理,直接保存到数据库中,导致程序在实现上存在存储型XSS跨站脚本漏洞,攻击者通过该漏洞可在页面中插入恶意js代码,获得用户cookie等信息,导致用户被劫持。
0x02 漏洞利用
1、安装完CMS,首页是空白的,需要自己添加测试数据,我们来添加一个留言页面。
2、在首页添加留言,提交xss Payload:
3、当管理员查看后台时,触发js脚本。
0x03 修复建议
1、建议进行全局防护,对部分单点进行过滤;
2、建议对参数做html转义过滤(要过滤的字符包括:单引号、双引号、大于号、小于号,&符号),防止脚本执行。在变量输出时进行HTML ENCODE处理。 PHP应用:可以使用htmlspecialchars对用户参数进行编码 。
最后
欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。