Google
      
发新话题
打印

ASP上传漏洞终极防范

ASP上传漏洞终极防范

.

经常听说的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进行手脚操作
http://www.webjx.com/htmldata/2006-05-14/1147569636.html

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


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)


关于upfile.asp的全新内容如下:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!--#include file="upload.inc"-->
<html>
<head>
<title>文件上传</title>
<meta http-equiv="content-type" content="text/html;charset=gbk">
</head>
<body>
<%
on error resume next
dim upload,f_folder,file,formPath,iCount,filename,fileExt,filesizemin,filesizemax
'***************************************
'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)
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
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
filesizemin=100
filesizemax=200*1024
set upload=new upload_5xSoft '建立上传对象
f_folder=upload.form("upfilefolder")
'*******列出所有上传文件***********
For each formName in upload.objFile
set file=upload.file(formName)
If file.filesize>0 then
'********检测文件大小***********
If file.filesize<filesizemin Then
response.write "你上传的文件太小了 [ <a href=# onclick=history.go(-1)>重新上传</a> ]"
ElseIf file.filesize>filesizemax then
response.write "文件大小超过了 "&filesizemax&"字节 限制 [ <a href=# onclick=history.go(-1)>重新上传</a> ]"
End If
'*******检测文件类型*******
fileExt=ucase(right(file.filename,4))
uploadsuc=false Forum_upload="RAR|ZIP|SWF|JPG|PNG|GIF|DOC|TXT|CHM|PDF|ACE|MP3|WMA|WMV|MIDI|AVI|RM|RA|RMVB|MOV|XLS"
Forumupload=split(Forum_upload,"|")
for i=0 to ubound(Forumupload)
if fileEXT="."&trim(Forumupload(i)) then
uploadsuc=true
exit for
else
uploadsuc=false
end if
next
if uploadsuc=false then
response.write "文件格式不正确 [ <a href=# onclick=history.go(-1)>重新上传</a> ]"
response.end
end if
'********建立文件上传的目录文件夹*********
Set upf=Server.CreateObject("Scripting.FileSystemObject")
If Err<>0 Then
Err.Clear
response.write("您的服务器不支持FSO")
response.end
End If
f_type= replace(fileExt,".","")
f_name= year(now)&"-"&month(now)
If upf.FolderExists(Server.MapPath(f_folder&"/"&f_type&"/"&f_name))=False Then
If upf.FolderExists(Server.MapPath(f_folder&"/"&f_type))=False Then
If upf.FolderExists(Server.MapPath(f_folder))=False Then
upf.CreateFolder Server.MapPath(f_folder)
upf.CreateFolder Server.MapPath(f_folder&"/"&f_type)
upf.CreateFolder Server.MapPath(f_folder&"/"&f_type&"/"&f_name)
Else
upf.CreateFolder Server.MapPath(f_folder&"/"&f_type)
upf.CreateFolder Server.MapPath(f_folder&"/"&f_type&"/"&f_name)
End If
Else
upf.CreateFolder Server.MapPath(f_folder&"/"&f_type&"/"&f_name)
End If
End If
f_ftn=f_folder&"/"&f_type&"/"&f_name
Set upf=Nothing
'********保存上传文件至文件夹***
'*******河南吃喝玩乐网*********
randomize
ranNum=int(90000*rnd) 10000
filename=f_ftn&"/"&day(now)&"-"&ranNum&"-"&file.filename
if TrueStr(filename)=false then
response.write "非法文件"
response.end
end if
if file.filesize>filesizemin and file.filesize<filesizemax then
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
if f_type="JPG" or f_type="GIF" or f_type="PNG" then
response.write "<script>parent.cn_bruce.cn_content.value =''</script>"
ElseIf f_type="ZIP" or f_type="RAR" or f_type="DOC" or f_type="TXT" then
response.write "<script>parent.cn_bruce.cn_content.value ='"&filename&"'</script>"
'ElseIf
else
response.write "<script>parent.cn_bruce.cn_content.value =' "&filename&" '</script>"
end if
iCount=iCount 1
end if
set file=nothing
end if
next
set upload=nothing '删除此对象
response.write (iCount&" 个文件上传成功! <a href=# onclick=history.go(-1)>继续上传</a>")
%>
</body>
</html>
<%
'上面的函数错了,晕死,下面的才是正确的!
'气死哦了!
'------------------------------------
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
%>

TOP

上海虹口婚礼|亲相爱婚庆策划

上海虹口婚庆|上海虹口婚礼|上海婚庆网|上海婚庆一条龙|上海婚礼一条龙|上海司仪|上海摄影摄像|上海婚庆化妆跟妆|

上海婚庆-上海亲相爱婚礼策划
7*24小时客服热线
殷先生:13472777790 徐小姐:15900979934
网址:  www.xiangai1314.com   www.xiangai1314.cn
MSN:xiangai1314520@hotmail.com
客服QQ:597125452
更多详细内容请登陆网站了解!!!



亲相爱婚礼策划
完美豪华型(全鲜花) 原价8880元 现价6388元
1、资深化妆师新娘全程跟妆、伴娘妆、妈妈妆,全套面部护理
2、新娘头饰、首饰全套
3、全程数码高级摄像10小时服务(超时50元/小时)含后期制作
4、全程数码高级摄影10小时服务(超时50元/小时)含后期制作
5、资深司仪全程主持及策划
6、新娘捧花一个
7、个性彩车布置一辆
8、新郎胸花,贵宾花全套
9、欧式星光布置, 加送3~4个鲜花罗马柱子
10、鲜花拱门布置或迎宾背景布置
11、过道鲜花立亭拉纱布置6个,附送立亭绚丽冷烟火
12、15桌内鲜花烛台布置
13、烛光晚会鲜花水晶大烛台布置
14、时尚浪漫香槟塔LOVE标志(附送荧光液+香槟瓶)
15、高级投影仪一台
16、大型双轮遥控泡泡机一台
17、绚彩电脑追光灯一台
18、签到台星光、鲜花布置
19、欢迎牌一个
20、婚房布置
21、交杯酒杯鲜花布置
22、点火枪鲜花布置
23、海报架一个
24、婚庆流程策划单
25、现场督导
26、戒枕租用一个
27、花瓣雨两篮
28、礼花炮6支
29、龙凤火柴10盒
30、嘉宾席位台卡15张
31、8只红双喜高升礼炮
32、2套5000响大地红
33、精美嘉宾题名录一本和金色签名笔一只


上海婚庆 婚礼 庆典 婚纱 婚纱摄影 钻石 婚宴 礼仪公司 庆典公司 喜庆 喜庆用品 模特礼仪 礼仪庆典 花车 鲜花 鲜花彩车 罗马柱 汽车租赁 庆典礼仪 模特公司 婚庆司仪 婚庆展览 婚庆展览会 婚庆博览会 婚庆主持人 婚庆主持人大赛 时尚 美容 化妆 结婚 蜜月 旅游 婚庆司仪 婚庆摄像 婚庆摄影 婚庆跟妆 婚庆公司 婚礼公司 婚礼策划 婚庆策划 彩妆摄影 上海婚庆 上海婚礼 上海婚庆公司 上海婚礼公司 上海婚礼策划公司 上海婚礼庆祝 上海婚庆策划 上海婚礼策划 上海婚礼婚庆策划 上海彩妆摄影 上海个性彩妆 上海时尚彩妆 上海婚纱摄影 上海婚纱照 上海影像 上海摄影 上海化妆 上海司仪 上海婚介所 上海婚介 上海婚介网站 上海婚介公司 上海婚介中心 北京婚庆网 中国婚庆网 婚庆网 婚礼网 庆典网 上海婚庆网 广州婚庆网 上海婚礼网 上海婚介协会 教堂婚礼 集体婚礼 舞蹈 舞狮 锣鼓 模特 演唱会 上海婚庆公司 上海婚庆用品 上海婚庆协会 北京经典婚庆久久 经典婚庆公司 婚庆用品 上海婚庆公司招聘 婚纱摄影  上海婚纱摄影 上海婚庆道具 上海婚庆行业协会 亲相爱婚礼策划

TOP

Wedding planning上海亲相爱

上海婚庆亲相爱上海婚庆网
网站地址:www.xiangai1314.com
上海市杨浦区佳木斯路315弄34号
客服QQ:597125452
客服电话:13472777790   15900979934
我们经营的宗旨:为新一代你打造设计您觉得最实惠最完美最想要的婚礼,只有您满意才是我们最大的荣耀!!!
亲相爱婚礼策划
1、时尚欧式背景布置(鲜花点缀+星光布置)
2、时尚2个鲜花背景花柱(浪漫灯光布置)
3、时尚鲜花拱门布置或迎宾背景布置
4、时尚鲜花立亭拉纱布置4个
5、10桌内鲜花烛台布置
6、时尚主桌花一桌
7、烛光晚会鲜花大烛台布置
8、时尚香槟塔(附送七彩荧光冰)
9、签到台鲜花布置(星光布置)
10、欧式白地毯或红地毯装饰(二选一)
11、欢迎牌一个
12、婚房布置(气球 喜字 花瓣)
13、交杯酒杯鲜花布置
14、话筒鲜花布置 点火棒布置
15、泡泡机一台
16、新人椅背布置
17、海报架一个
18、婚庆流程策划单
19、现场督导
20、戒枕租用一个
预定此套餐还可享受:
租用288元的大型遥控泡泡机一台可优惠100元(现在优惠期间定套餐就免费租用)
租用288元高功率1200W追光灯可优惠100元
享受特价优惠488元/位(摄像、摄影、化妆)

TOP

发新话题