实例方法:解决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进行手脚操作
针对这样的情况可使用如下函数:
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-14 23:23:49

实例方法:解决ASP图像上传漏洞的相关文章

IIS下ASP目录漏洞和IIS分号漏洞(;)的临时解决方法_win服务器

解决方法: 下载 银月服务器工具,使用工具->组件下载器下载ISAPI_Rewrite,解压出来. 把ISAPI_Rewrite中的ISAPI_Rewrite.dll添加为ISAPI,名字为ISAPI_Rewrite,这就是伪静态,做过的不用安装了 下载漏洞补丁包,即下图选择的项目,下载打开! 把ISAPI_Rewrite目录中的httpd.ini替换成补丁包中的httpd.ini. 或者保证ISAPI_Rewrite下面的httpd.ini有下图选择的两行规则也行!这样就能防止这两个IIS漏洞

SQL注入天书—ASP注入漏洞全接触

SQL注入天书-ASP注入漏洞全接触选择自 digituser 的 Blog 随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入. SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的

IIS的ASP目录漏洞和IIS分号漏洞(;)临时解决方案

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 先说解决方法:下载 银月服务器工具,使用工具->组件下载器下载ISAPI_Rewrite,解压出来. 把ISAPI_Rewrite中的ISAPI_Rewrite.dll添加为ISAPI,名字为ISAPI_Rewrite,这就是伪静态,做过的不用安装了. 下载漏洞补丁包,即下图选择的项目,下载打开! 把ISAPI_Rewrite目录中的h

解决ASP中Connection对像封装dll问题

     asp代码保密一直是令人头痛的问题,目前没有非常好的解决方案,无非用vb编译成dll,但工作量实在太大,于是一直苦苦寻求着另一种途径,本文详细介绍关于解决ASP中Connection对像封装dll问题的文章专题. 中午,突然灵感一发,"为什么不尝试用加密数据库?",通过对数据库设一个高强度的密码,然后用vb封装connection对像,将密码信息写在dll里,然后通过asp创建组件方式调用,就算人家拿了我的代码,也无法改动数据库! 于是,开始了一步步既痛苦又刺激的旅程.vb三

解决ASP.NET的进程帐户没有访问 IIS的权限

asp.net|iis|访问|解决|进程 解决ASP.NET 的进程帐户没有访问 IIS的权限 IIS下,访问asp页面出现错误: 访问 IIS 元数据库失败 "用于运行 ASP.NET 的进程帐户必须具有对 IIS 元数据库(如 IISservernameW3SVC)的读访问权.有关如何修改元数据库权限的信息,请参见 httpsupport.microsoft.comkbid=267904." 原因可能是先安装.NET Framework后安装IIS,导致IIS没有为ASP.NET设

一次用ASP页面漏洞引发的渗透攻击

攻击|页面 最近几天,网络上好像总是不太平,自从WebDAV漏洞的溢出工具发布之后,网上潜在的"肉鸡"好像慢慢多了起来.虽然补丁也已经发布多日,但是还是有人没有放在心上--但是我今天要讲的并不是WebDAV漏洞的溢出攻击,而是一次用asp叶面漏洞引发的渗透攻击.前天晚上,一个多日不见的朋友,忽然在网上Q我(因为他是广东人,所以我以为他住院了,呵呵),聊了一会突然给了我一个地只要我看看,问我能不能得到发布新闻的权限--老套路,ping一下域名得到IP地址,使用SuperScan进行端口扫

解决ASP.NET创建的线程的用户改变引发的拒绝访问错误

asp.net|创建|错误|访问|解决 解决ASP.NET创建的线程的用户改变引发的"拒绝访问"错误                ASP.NET创建的线程的用户由<identity impersonate="true"/> 改为NT AUTHORITY\NETWORK SERVICE, 引起"System.UnauthorizedAccessException","拒绝访问"     Dim thr As Thr

解决ASP.NET的进程帐户没有访问IIS的权限

解决ASP.NET 的进程帐户没有访问 IIS的权限 IIS下,访问asp页面出现错误: 访问 IIS 元数据库失败 "用于运行 ASP.NET 的进程帐户必须具有对 IIS 元数据库(如IIS://servername/W3SVC)的读访问权.有关如何修改元数据库权限的信息,请参见http://support.microsoft.com/?kbid=267904." 原因可能是先安装.NET Framework后安装IIS,导致IIS没有为ASP.NET设置用户. 解决方法:1.运行

解决ASP.NET回传后div滚动条位置复位的问题

 这篇文章主要介绍了解决ASP.NET回传后div滚动条位置复位的问题,中心思想是用一个隐藏控件保存当前scorll值.回传回来后根据scrollTop的值,然后在Page_Load中重新设置scrollTop  首先是为DIV添加一个onscroll="javascript:setScollTop()" 的方法(当然不一定是DIV其他的标签思路应该也是这样的)   代码如下: <div style="overflow: auto; height: 152px"