信息来源:
http://www.77169.com/Article/Cla ... 200409/11650_1.html
值得一提的是,上面那个网站是 中国 XX 开发XX,1个专业的VB编程站点。狂晕的是,他们论坛还在用着Dvbbs Version 6.0.0 ,如果我没估计错误的话,应该论坛还存在着漏洞,晚上测试下。
晚上测试结果:论坛同样存在上传漏洞,原因是6。0的上传文件中:
filename=formPath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt
formPath没有做挂虑,这样如果自己构造数据包 formPath=UploadFile/shell.asp'\0 ',那么后面的字符将多余,原因事 计算机 遇到'\0'字符,认为字符串结束了
我下了个该自由动力,测试了下,果然如此。
后来又想,动力3.51会不会同样存在该漏洞呢?查看了下Upfile_Soft.asp代码,结果是一样存在上传漏洞。
为了证明结论正确性,我在搜索引擎里找了下,结果MyPower Ver3.51 站点出来一大堆,随便找了个测试,下面是详细过程,为了避免不必要麻烦,已经屏蔽图片中的网址,请读者见谅:
用到的工具:WinSock Expert 、UltraEdit、NC和ASP后门
1,注册用户名 test111,进入 个人信息控制面板
此主题相关图片如下:
此主题相关图片如下:
2,开启WinSock Expert 监视,并且随便上传个ASP后门,结果是“无法上传,…”,预料中的事,没关系:
此主题相关图片如下:
3,将WinSock Expert 捕获的数据,复制到文本文件,并且用UltraEdit修改其中的关键代码:filename="C:\test\webshell.asp" ,webshell.asp后加:1个空格及.rm,然后修改16进制的20为00,Content-Length 长度增加4。
5,上传马成功,得到了个webshell:
此主题相关图片如下:
此主题相关图片如下:
此主题相关图片如下:
最后说明下,本人没有破坏该网站的任何数据,并且测试完后,删除了全部木马,同时告诉了他们网站管理员。
修补此漏洞方法:
一,见dispbbs.asp?boardid=34&star=1&replyid=46493&id=55222&skin=0&page=1
此方法使得用户上传的文件全部按照程序自动命名。
修改Upfile_Soft.asp 代码 ,找到
if FoundErr<>true then
FileName=SavePath & ofile.FileName
If IsObjInstalled("Scripting.FileSystemObject") Then
dim fso
set fso=CreateObject("Scripting.FileSystemObject")
if fso.FileExists(Server.mappath(FileName)) then
randomize
ranNum=int(900*rnd)+100
filename=
end if
set fso=nothing
end if
ofile.SaveToFile Server.mappath(FileName) '保存文件
改为
if FoundErr<>true then
randomize
ranNum=int(900*rnd)+100
filename=SavePath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt
ofile.SaveToFile Server.mappath(FileName) '保存文件
即可解决。(此修改由网友coolsun提供)。
也就是删除如下内容:
FileName=SavePath & ofile.FileName
If IsObjInstalled("Scripting.FileSystemObject") Then
dim fso
set fso=CreateObject("Scripting.FileSystemObject")
if fso.FileExists(Server.mappath(FileName)) then
(有人提出是否安全了,本人没有对此进行测试,但从代码上分析,不再从本地获取文件名,而是按时间加随机数生成文件名,应该补上了漏洞)
二,我自己写了个过滤文件名的函数,测试可以防止上面的漏洞攻击,请高手看看有没有什么问题:
此方法可以保留用户上传的文件名。
Upfile_Soft.asp 找到
FileName=SavePath & ofile.FileName
下增加:
'检查文件中是否含有非法字符
FileName=ChkFileName(FileName)
然后在文件最尾部
%>
上增加:
'作 用:检查文件中是否含有非法字符,防止用户构造数据欺骗计算机
Function ChkFileName(FileName)
If IsEmpty(FileName) Then Exit Function
FileName = Lcase(FileName)
If Instr(FileName,".") <> InstrRev(FileName,".") Then
msg="这种文件类型不允许上传!\n\n只允许上传这几种文件类型:" & UpFileType
FoundErr=true
strJS="<SCRIPT language=javascript>" & vbcrlf
strJS=strJS & "alert('" & msg & "');" & vbcrlf
strJS=strJS & "history.go(-1);" & vbcrlf
strJS=strJS & "</script>" & vbcrlf
Response.Write strJS
Response.End
End If
ChkFileName = Replace(FileName,Chr(0),"")
End Function
%>
测试结果图:
此主题相关图片如下: