网络上流行的网站系统莫过于新闻、论坛、电子商城以及博客等。这些系统都会要求有设置文字大小、颜色以及插入图片等功能,所以网络上出现了相应的第三方功能组件完成相应的功能,比如上传图片的一些组件,它们的出现为广大程序员提供了很大的方便,所以得到了广泛的应用。本文分析的是eWebEditor在线编辑器,它功能强大、调用方便,是站长建站的好帮手,但是其安全性没得到相应程度的关注,所以导致许多许多网站被黑之后仍然不知道问题出在哪。
1.默认账号密码漏洞
其实使用默认账号密码本身严格来说不算是漏洞,但网络上确确实实有许多系统使用eWebEditor在线编辑器的时候没有修改默认账号密码,难道仅仅因为它只是一个功能组件就忽略其安全因素吗?下载最新版的代码之后里面有说明文件如下:
后台管理地址:http://127.0.0.1/ewebeditor/admin_default.asp
默认登录用户:admin
默认登录密码:admin
那么攻击者如何确定一个网站是否使用了eWebEditor在线编辑器呢?首先是看外观,因为普通的编辑器与eWebEditor在线编辑器功能界面是明显不同的;其次可以看源代码,因为eWebEditor在线编辑器的调用代码也有自己的特征,如果看到<iframe ID='eWebEditor1' src='/edit/ewebeditor.asp?id=content&style=web' frameborder=0 scrolling=no width='550' HEIGHT='350'></iframe> 这样的语句就可以确定使用了该功能组件而且暴露了目录;再者有些网站的目录可以浏览,可以看到有eWebEditor目录,进去之后就可以看到相应的页面,管理登录页面为admin_login.asp。总而言之,一旦找到该系统,攻击者首先就会去用默认账号密码登录,一般来说成功率蛮高的,这里拿某学校毕业设计管理系统抓个图,如图1:
图1 |
2. 默认数据库漏洞
这个后台提供了修改管理员密码功能,如果密码被修改了,我们还可以试着下载默认数据据库db/ewebeditor.mdb,如图2:
图2 |
最新发布版里eWebEditor_System表保存着管理员账号密码信息,不过都用md5加密过,遇到md5加密一般去相应的MD5查询网站查解密结果或者用相应的工具软件进行暴破。
3. 上传文件漏洞
进了后台之后能做什么呢?看左边相应的功能就知道啦,有样式管理、文件管理以及用户名密码修改,黑客感兴趣的当然是拿到网站的webshell权限啦。在该组件处理上传图片功能的upload.asp文件里看到代码如下:
' 任何情况下都不允许上传asp脚本文件
sAllowExt = Replace(UCase(sAllowExt), "ASP", "")
这样的过滤看起来很安全,实际上IIS默认用asp.dll处理的不仅仅有asp还有asa、cer、cdx、htr等等,如图3:
图3 |
所以我们可以上传cer格式的木马。当然在上传之前我们得改一下样式设置,系统自带样式不允许对设置进行修改删除,但允许查看设置!你可以先"拷贝一标准样式"然后对其设置进行修改以达到快速新建样式的目的,在再其中进行设置,在图片类型那里添加一个asa格式,前面用"|"隔开,如图4:
图4 |
提交之后我们点刚才的样式那里预览一下就可以上传格式为asa的木马文件了,上传成功后会在编辑那里显示一个红叉,因为它不是图片嘛,如图5:
图5 |
这时候点击代码切换到代码视图就可以看到刚才你上传的木马地址了,当然也可以去上传文件管理那里看到刚才上传的木马文件了,最后得到webshell,如图6:
图6 |
eWebEditor在线编辑器可以设置上传路径,极大的方便了建站工作者,不过其过滤不严格,导致我们可以利用它浏览整个网站目录或者跳到其它目录并且可以删除服务器文件。漏洞文件admin_style.asp相关代码如下:
If sStyleUploadDir = "" Or Get_TrueLen(sStyleUploadDir) > 50 Then
Go_Error "上传路径不能为空,且不大于50个字符长度!"
End If
If IsSafeStr(sStyleUploadDir) = False Then
Go_Error "上传路径请勿包含特殊字符!"
End If
对上传路径判断了不能为空且不能超过50个长度字符,并且用了IsSafeStr()函数进行检测,IsSafeStr()函数在Include/Startup.asp文件中代码如下:
Function IsSafeStr(str)
Dim s_BadStr, n, i
s_BadStr = "' &<>?%,;:()`~!@#$^*{}[]|+-=" & Chr(34) & Chr(9) & Chr(32)
n = Len(s_BadStr)
IsSafeStr = True
For i = 1 To n
If Instr(str, Mid(s_BadStr, i, 1)) > 0 Then
IsSafeStr = False
Exit Function
End If
Next
End Function
过滤了许多特殊字符,但是没有过滤脚本攻击中经常用到的跳转目录的"../"或者直接转到网站根目录的"/"字符。简单说下利用方法,拷贝一份样式进行设置,将其上传路径设置为"/",如图7:
图7 |
提交之后点上传文件管理选择刚才设置的样式就可以看到网站根目录的文件并且可以删除文件与文件夹了,如图8:
图8 |
再把上传路径修改为../这样子的试下就可以进行目录跳转了,如果你的服务器有这样的漏洞,你说恐怖不恐怖?
5. 后台验证漏洞
该功能组件后台页面都调用Admin_Private.asp进行验证是否是合法访问,代码如下:
If Session("eWebEditor_User") = "" Then
Response.Redirect "admin_login.asp"
Response.End
End If
只是简单的判断了Session("eWebEditor_User")是否为空,为空则返回登录页面,如果该网站在虚拟机上,在另一个网站有一个文件有如下代码:
Session("eWebEditor_User") = "lovexyskyhaha"那么我们访问该文件之后再访问eWebEditor的后台相关页面,我们就是合法用户了,当然可以进行相关的后台操作啊。
漏洞修补
1.针对默认账号密码漏洞当然是修改一下默认的admin账号密码了,后台有这个功能的,就不要偷懒了。
2.针对默认数据库漏洞当然是修改一下默认的数据库名称或者路径,可以考虑防下载处理,另外账号密码不要太简单,防止暴破出来。
3.针对上传漏洞的修补大家很可能是把asp、cer、asa、cdx等通通加进去过滤一番,其实sAllowExt = Replace(UCase(sAllowExt), "ASP", "")这样子过滤我们还可以在上传图片类型里加一个aaspsp格式,这样经过replace函数过滤后的格式正好是asp,其它的同理。另外如果网站支持.NET攻击者也可能上传aspx格式的木马或者支持php的系统上传一个php木马,这个就看具体情况啦,个人认为像这样的上传漏洞如果可能最好严格限定图片上传格式,即限定为只能为哪些格式,而不是单个的过滤asp这些危险的格式;另外最好对上传后生成的图片文件的格式再进行检测,如果非法就进行处理,这个看程序员的个人爱好了。
4.针对上传路径过滤不严漏洞解决方法当然是再过滤一下啊,但是如果在IsSafeStr()函数里把"/"过滤掉了以后上传路径设为UploadFile/也会报错的,所以还是在admin_style.asp文件里判断是否为"/"或者是跳转目录的"../",这样比较保险。
5.用Session验证是很难欺骗的,但在某些条件下也可能被利用,个人认为最好还是用Cookies与Session双重验证,同时限制非法人员直接访问。
网友评论