瑞星卡卡安全论坛技术交流区系统软件 动力文章系统 任意文件删除漏洞曝光

1   1  /  1  页   跳转

动力文章系统 任意文件删除漏洞曝光

动力文章系统 任意文件删除漏洞曝光

前段时间,朋友让我检测一下他网站的安全情况,于是就试试身手,结果居然发现了关于动力文章系统的安全漏洞。 不知道现在有没有补上,但我还是把这篇文章放上来吧!


发现漏洞


朋友使用的是动力文章系统3.51版,找来找去也没有发现有哪个地方存在“注入点”,以前发现的打印页面的注入漏洞也被补上了,因为打了最新的安全补丁,也就不存在上传扩展名为CER类的ASP木马的可能了。说实在的,我是很佩服Webboy的水平,我就没办法写出这样优秀的网站管理系统,呵呵。


找不到注入点,就只能去找找有没有逻辑错误了。无法上传文件就试着下载文件,无法获取管理权,就试试去删除文件。我在本机上安装了同样版本动力文章系统,思路换了好几个方向,还好,发现漏洞了。存在问题的文件是User_ArticleSave.asp。


1.分析:动力文章系统有个很好的功能,在线编辑文章时可以上传文件(图片),插入文件(图片),在保存文章时,系统将检测那些已经上传的文件是否使用,如果发现某一文件名并没有出现在文章内容中,也没有被设为首页图片,就自动删除文件。这样能够保证网站的Uploadfiles目录中不会存在垃圾文件。这些文件名就存放在Uploadfiles这个隐藏的对象中。


2.疑问:如果我们手工在Uploadfiles中填入网站内某一重要的文件名,如:首页文件“/Index.asp”(使用相对网站根目录的绝对路径),递交表单时,系统检测到“/Index.asp” 并没有出现在文章内容中,也没有被设为首页图片,岂不是也会自动删除Index.asp文件?


漏洞测试


马上在本机上进行测试,成功!接下来去下载3.6版本的动力系统(最新版本),同样成功!可以说这个漏洞存在目前动力的所有系统!因为动易系统时采用安装组件的方式,感到有点烦,就没有继续测试,理论上肯定也是成功的,有兴趣的朋友可以试试。


漏洞利用过程:


(1)把添加文章的页面保存在本地;

(2)修改页面中的表单递交地址,如将“document.myform.action='User_ArticleSave.asp'”中的“User_ArticleSave.asp”改为“http://127.0.0.1/User_ArticleSave.asp(“127.0.0.1”要改为测试网站的真实网址)“,并把“”中的“hidden”改为“text”。

(3)随便填写一些必要的文字,在出现的Uploadfiles对象中填入你要删除的文件的绝对路径,如“/index.asp”。

(4)递交表单。


这里有几点需要注意的:你必须要有一个可以发表文章的账户,一般使用动力文章系统的网站都开放用户注册的;并非只有这个文件存在漏洞,其它如上传资源之类的页面也存在同样漏洞。


防范措施


防护的措施有以下几种,大家可以选择适合自己的方式:


1.关闭“删除无用的上传文件”功能,把User_ArticleSave.asp文件中的相应语句删除或用“’”注释,这样有点消极。

2.有些人首先想到的解决方法可能会是“禁止站外递交“。动力系统的管理员管理页面是有这样功能的,可以把这样的功能加在用户管理页面中,相关分析《黑客防线》前几期已经讲得很清楚了,不再重复。表面上看这种方式可以防止漏洞,其实这种解决方法不是很彻底,我至少有两种方法来重新利用这个漏洞,如捕获、修改、重新发送数据包。
最后编辑2006-12-13 09:47:15
分享到:
gototop
 

--------------------------------------------------------------------------------

3.等待Webboy的补丁,我这里先写一段代码让大家先凑合着用:

'删除无用的上传文件

if ObjInstalled=True and Uploadfiles<>"" then

dim fso,strRubbishFile

Set fso = Server.CreateObject("Scripting.FileSystemObject")

if instr(Uploadfiles,"|")>1 then

dim arrUploadfiles,intTemp

arrUploadfiles=split(Uploadfiles,"|")

Uploadfiles=""

for intTemp=0 to ubound(arrUploadfiles)

if instr(Content,arrUploadfiles(intTemp))<=0 and arrUploadfiles(intTemp)<>DefaultPicUrl then

if ucase(left(arrUploadfiles(intTemp),len(SaveUpFilesPath)))<>ucase(SaveUpFilesPath) or instr(arrUploadfiles(intTemp),"../")>0 then

response.write "


" & arrUploadfiles(intTemp) & "包含非法字符,已被清除!"
Uploadfiles=""

else

strRubbishFile=server.MapPath(arrUploadfiles(intTemp))

if fso.FileExists(strRubbishFile) then

fso.DeleteFile(strRubbishFile)

response.write "


" & arrUploadfiles(intTemp) & "在文章中没有用到,也没有被设为首页图片,所以已经被删除!"
end if

end if

else

if intTemp=0 then

Uploadfiles=arrUploadfiles(intTemp)

else

Uploadfiles=Uploadfiles & "|" & arrUploadfiles(intTemp)

end if

end if

next

else

if instr(Content,Uploadfiles)<=0 and Uploadfiles<>DefaultPicUrl then

if ucase(left(Uploadfiles,len(SaveUpFilesPath)))<>ucase(SaveUpFilesPath) or instr(Uploadfiles,"../")>0 then

response.write "


" & Uploadfiles & "包含非法字符,已被清除!"
Uploadfiles=""

else

strRubbishFile=server.MapPath(Uploadfiles)

if fso.FileExists(strRubbishFile) then

fso.DeleteFile(strRubbishFile)

response.write "


" & Uploadfiles & "在文章中没有用到,也没有被设为首页图片,所以已经被删除!"
end if

Uploadfiles=""

end if

end if

set fso=nothing

end If

'结束


4.其实以上的方法都不能从根本上解决这个漏洞,最好的方式就是换一种方式编程来实现“删除没有用到的文件”这一功能,比如采用Session来记录上传文件名等等。


目前动力文章系统是使用范围最广的免费代码之一,并且有好多系统模仿了动力系统的这一功能(比如我,呵呵)。利用该漏洞是十分狠毒的,真正的损人不利己,因为被这样删除的文件可不是能在“回收站”中找回来的!公开这个漏洞的目的只是希望每个程序员在编写脚本的时候能够多想想安全,不要出现类似的问题。


gototop
 
1   1  /  1  页   跳转
页面顶部
Powered by Discuz!NT