动力文章系统任意文件删除漏洞曝光
2008-02-23 06:50:55来源:互联网 阅读 ()
因为自己的网站连续被人恶意侵入了两次,从IIS的日志看出都是“脚本注入”惹的祸,这才开始关注脚本安全起来。前几天朋友让我检测一下他网站的安全情况,于是就试试身手,结果居然发现了关于动力文章系统的安全漏洞。
发现漏洞
朋友使用的是动力文章系统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.有些人首先想到的解决方法可能会是“禁止站外递交“。动力系统的管理员管理页面是有这样功能的,可以把这样的功能加在用户管理页面中,相关分析《黑客防线》前几期已经讲得很清楚了,不再重复。表面上看这种方式可以防止漏洞,其实这种解决方法不是很彻底,我至少有两种方法来重新利用这个漏洞,如捕获、修改、重新发送数据包。
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 "
Uploadfiles=""
else
strRubbishFile=server.MapPath(arrUploadfiles(intTemp))
if fso.FileExists(strRubbishFile) then
fso.DeleteFile(strRubbishFile)
response.write "
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:注意你的密码:哪几类密码最危险
下一篇:网站猎手全自动带你入侵纯脚本系统
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash