LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

解决ASP图像上传漏洞

admin
2010年7月3日 13:26 本文热度 6560

常听说的asp上传漏洞,即是将一些木马文件修改后缀名(修改为图像文件后缀),进行上传。

针对此情况使用下列函数进行辨别:

'******************************************************************

'checkfiletype 函数用来检查文件是否为图片文件

'参数filename是本地文件的路径

'如果是文件jpeg,gif,bmp,png图片中的一种,函数返回true,否则返回false

'******************************************************************

const adtypebinary=1


dim jpg(1):jpg(0)=cbyte(&hff):jpg(1)=cbyte(&hd8)

dim bmp(1):bmp(0)=cbyte(&h42):bmp(1)=cbyte(&h4d)

dim png(3):png(0)=cbyte(&h89):png(1)=cbyte(&h50):png(2)=cbyte(&h4e):png(3)=cbyte(&h47)

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)


function checkfiletype(filename)

on error resume next

checkfiletype=false

dim fstream,fileext,stamp,i

fileext=mid(filename,instrrev(filename,".")+1)

set fstream=server.createobject("adodb.stream")

fstream.open

fstream.type=adtypebinary

fstream.loadfromfile filename

fstream.position=0

select case fileext

case "jpg","jpeg"

stamp=fstream.read(2)

for i=0 to 1

if ascb(midb(stamp,i+1,1))=jpg(i) then checkfiletype=true else checkfiletype=false

next

case "gif"

stamp=fstream.read(6)

for i=0 to 5

if ascb(midb(stamp,i+1,1))=gif(i) then checkfiletype=true else checkfiletype=false

next

case "png"

stamp=fstream.read(4)

for i=0 to 3

if ascb(midb(stamp,i+1,1))=png(i) then checkfiletype=true else checkfiletype=false

next

case "bmp"

stamp=fstream.read(2)

for i=0 to 1

if ascb(midb(stamp,i+1,1))=bmp(i) then checkfiletype=true else checkfiletype=false

next

end select

fstream.close

set fseteam=nothing

if err.number<>0 then checkfiletype=false

end function

那么在应用的时候

checkfiletype(server.mappath("cnbruce.jpg"))

或者

checkfiletype("f:/web/164/images/cnbruce.jpg"))

反正即是检测验证本地物理地址的图像文件类型,返回 true 或 false值


所以这个情况应用在图像上传中,目前的办法是先允许该“伪图像”文件的上传,接着使用以上的自定义函数判断该文件是否符合图像的规范,若是木马伪装的图像文件则fso删除之,比如:

file.saveas server.mappath(filename) '保存文件

if not checkfiletype(server.mappath(filename)) then

response.write "错误的图像格式"

set fso = createobject("scripting.filesystemobject")

set ficn = fso.getfile(server.mappath(filename))

ficn.delete

set ficn=nothing

set fso=nothing

response.end

end if

则是先将文件上传,接着立马使用自定义函数判断文件图像类型的吻合性,fso做出删除该文件的操作。


asp上传漏洞还利用"\0"对filepath进行手脚操作

针对这样的情况可使用如下函数:

function truestr(filetrue)

str_len=len(filetrue)

pos=instr(filetrue,chr(0))

if pos=0 or pos=str_len then

truestr=true

else

truestr=false

end if

end function

接着就可判断后再做文件的上传

if truestr(filename)=false then

response.write "非法文件"

response.end

end if

file.saveas server.mappath(filename)


该文章在 2024/10/30 9:04:13 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved