解决ASP图像上传漏洞
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
常听说的asp上传漏洞,即是将一些木马文件修改后缀名(修改为图像文件后缀),进行上传。[br][br]针对此情况使用下列函数进行辨别:[br]
[img]http://mawendong.cn/images/code.gif[/img] 程序代码 <%[br]'******************************************************************[br]'checkfiletype 函数用来检查文件是否为图片文件[br]'参数filename是本地文件的路径[br]'如果是文件jpeg,gif,bmp,png图片中的一种,函数返回true,否则返回false[br]'******************************************************************[br][br]const adtypebinary=1[br][br]dim jpg(1):jpg(0)=cbyte(&hff):jpg(1)=cbyte(&hd8)[br]dim bmp(1):bmp(0)=cbyte(&h42):bmp(1)=cbyte(&h4d)[br]dim png(3):png(0)=cbyte(&h89):png(1)=cbyte(&h50):png(2)=cbyte(&h4e):png(3)=cbyte(&h47)[br]dim gif(5):gif(0)=cbyte(&h47):gif(1)=cbyte(&h49):gif(2)=cbyte(&h46):gif(3)=cbyte(&h39):gif(4)=cbyte(&h38):gif(5)=cbyte(&h61)[br][br]function checkfiletype(filename)[br] on error resume next[br] checkfiletype=false[br] dim fstream,fileext,stamp,i[br] fileext=mid(filename,instrrev(filename,".")+1)[br] set fstream=server.createobject("adodb.stream")[br] fstream.open[br] fstream.type=adtypebinary[br] fstream.loadfromfile filename[br] fstream.position=0[br] select case fileext[br] case "jpg","jpeg"[br] stamp=fstream.read(2)[br] for i=0 to 1[br] if ascb(midb(stamp,i+1,1))=jpg(i) then checkfiletype=true else checkfiletype=false[br] next[br] case "gif"[br] stamp=fstream.read(6)[br] for i=0 to 5[br] if ascb(midb(stamp,i+1,1))=gif(i) then checkfiletype=true else checkfiletype=false[br] next[br] case "png"[br] stamp=fstream.read(4)[br] for i=0 to 3[br] if ascb(midb(stamp,i+1,1))=png(i) then checkfiletype=true else checkfiletype=false[br] next[br] case "bmp"[br] stamp=fstream.read(2)[br] for i=0 to 1[br] if ascb(midb(stamp,i+1,1))=bmp(i) then checkfiletype=true else checkfiletype=false[br] next[br] end select[br] fstream.close[br] set fseteam=nothing[br] if err.number<>0 then checkfiletype=false[br]end function[br]%>[br][br]那么在应用的时候 [br]checkfiletype(server.mappath("cnbruce.jpg"))[br]或者[br]checkfiletype("f:/web/164/images/cnbruce.jpg"))[br][br]反正即是检测验证本地物理地址的图像文件类型,返回 true 或 false值[br][br]所以这个情况应用在图像上传中,目前的办法是先允许该“伪图像”文件的上传,接着使用以上的自定义函数判断该文件是否符合图像的规范,若是木马伪装的图像文件则fso删除之,比如:[br]file.saveas server.mappath(filename) '保存文件[br]if not checkfiletype(server.mappath(filename)) then[br]response.write "错误的图像格式"[br]set fso = createobject("scripting.filesystemobject")[br]set ficn = fso.getfile(server.mappath(filename))[br]ficn.delete[br]set ficn=nothing[br]set fso=nothing[br]response.end[br]end if[br][br]则是先将文件上传,接着立马使用自定义函数判断文件图像类型的吻合性,fso做出删除该文件的操作。[br][br]asp上传漏洞还利用"\0"对filepath进行手脚操作[br]针对这样的情况可使用如下函数:[br] [img]http://mawendong.cn/images/code.gif[/img] 程序代码 function truestr(filetrue)[br] str_len=len(filetrue)[br] pos=instr(filetrue,chr(0))[br] if pos=0 or pos=str_len then[br] truestr=true[br] else[br] truestr=false[br] end if[br]end function[br][br][br]接着就可判断后再做文件的上传[br][br]if truestr(filename)=false then[br]response.write "非法文件"[br]response.end[br]end if[br][br]file.saveas server.mappath(filename) 该文章在 2010/7/3 13:26:31 编辑过 |
关键字查询
相关文章
正在查询... |