解决ASP(图像)上传漏洞的方法
作者:cnbruce 来源:cnbruce的blog 发布时间:2007-10-17 13:16:00
标签:上传,图片,漏洞
经常听说的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.cnbruce.com/blog/showlog.asp?cat_id=32&log_id=635
针对这样的情况可使用如下函数
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)
关于化境无组件(v2.0)upfile.asp的全新下载地址:下载地址:upfile.rar (2.10 KB)


猜你喜欢
- 系统:VMTOOLs下载:链接:https://pan.baidu.com/s/1KIzVWtPrb2vSrtokONToBw 提取码:ze
- 前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介
- 单个源文件生成可执行程序下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码:/* helloworld.c
- 聚友已经总结了五种Service Unavailable的原因,第一篇是常见的4个方面的原因(原文见http://www.juyo.org/
- “创业”这是我们讲得最多的一个话题,网络创业的故事也被我们津津乐道;只要留心观察下,就不难发现这样一个有趣的现象——很多网络创业的朋友会选择
- Vmware12+Centos7搭建Openstack环境—网络配置一、虚拟机配置根据OpenStack官方的教程,节点的环境中比较重要的就
- 国内知名的通用建站软件开发商phpwind今天再次推送新产品应用淘链接,据官方介绍,通过淘链接这一APP应用,把淘宝商品链接转换为佣金结算的
- 和其他操作系统一样,监听队列(listen queue)是首要限制条件。下面是Aaron Gifford 对BSDI 1.x,2.x和Fre
- 技巧一:挂聊天室挂聊天室的方法已经不是什么新鲜的了,但是真正掌握关键技术的还是少数人,这点就非常符合市场规则。什么是关键?永远都是细节。网络
- 垂直搜索是针对某一个行业的专业搜索引擎,是搜索引擎的细分和延伸,是对网页库中的某类专门的信息进行一次整合,定向分字段抽取出需要的数据进行处理
- 当用户试图通过HTTP或文件传输协议(FTP)访问一台正在运行Internet信息服务(IIS)的服务器上的内容时,IIS返回一个表示该请求
- 一般来说我们采用手动备份VPS中的网站就可以了。一般老左喜欢1周备份一次网站,这样的频率应该还算是不错的,对于昨天分享的”数据库/网站文件自
- 时下广告联盟遍地都是,大的有GOOGLE BAIDU YAHOO等 小的就不计其数了,现在又推出了重量级的联盟就是 阿里妈妈。面对如此繁多的
- 准备工作先在VS2012上编译一个winform,代码如下:using System;using System.Windows.Forms;
- 经常见到某些网站提供个人主页,显得很神气,其实你也可以开放你机器上的空间给别人,这很简单就能实现。只要你按照下面的提示对你的WWW服务器配置
- 要做竞争对手分析,首先就是要确定竞争对手,已经存在的和潜在的竞争对手也许都盯着你。互联网上的竞争点很多体现在网站上,这里为大家整理了竞争对手
- 代理服务器的功能是代理网络用户取得网络信息,它是网络信息的中转站。随着代理服务器的广泛使用,随之而来的是一系列的安全问题。由于没有对代理服务
- 通过“禁用出站邮件”选项,可以禁用来自所有 SMTP 队列的出站邮件。例如,如果组织中有活动的病毒,则此选项将非常有用。注意:“禁用出站邮件
- 因为喜欢PHP和开源所以喜欢上DEDECMS,但是因为技术有限所以用起来遇到很多的困难而又没人帮忙,只能自己摸索加向朋友提问,从中也体会到做
- 1 进入阿里云控制台,找到域名控制台,选择需要绑定的域名点击【解析】2 添加解析主机记录:www :将域名解析为www.example.co