1、ASP上传过程抓包分析:

POST /4.asp HTTP/1.1
Host: 192.168.1.102
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://192.168.1.102/upfile.htm
Cookie: BMFNWNPGYIUDQDSPBJIM=LPJCJXPLUPUEWFQHYUSRFZDREVMVJBPDVCLCWBZM
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Content-Type: multipart/form-data; boundary=---------------------------17271789418104
Content-Length: 630 -----------------------------17271789418104
Content-Disposition: form-data; name="act" upload
-----------------------------17271789418104
Content-Disposition: form-data; name="upcount" 1
-----------------------------17271789418104
Content-Disposition: form-data; name="filepath" /upload
-----------------------------17271789418104
Content-Disposition: form-data; name="file1"; filename="1.jpg"
Content-Type: image/jpeg 111111111111111111111111111111111111
-----------------------------17271789418104
Content-Disposition: form-data; name="Submit" ¡¤ Ìá½» ¡¤
-----------------------------17271789418104--

 

2、利用方法

1.\0路径截断上传漏洞 %00 filepath截断上传   /upload/a.asp

修复方法:锁定上传路径   if filepath="upload" then filepath="img" end if

2.filetype上传漏洞,修改filetype绕过上传    Content-Type: image/jpeg

3.过滤不全asp、asa、cer、cdx、htr

防御办法:使用白名单如jpg、gif、rar

4. IIS6的目录解析漏洞如/a.asp/a.jpg下面的jpg会当asp执行

防御办法:不允许客户自建目录或者目录名不能包含“.”字符

5. IIS6的文件名解析漏洞如a.asp;a.jpg名字包含分号的jpg会当asp执行

防御办法:文件名不能包含“;”字符

6.替换漏洞

7.二次上传漏洞主要是利用逻辑漏洞,比如无惧无组件上传代码:

fileExt=lcase(Mid(ofile.filename,InStrRev(ofile.filename,".")+1))

arrUpFileType=split(UpFileType,"|")'获得允许上传的所有文件扩展名

for i=0 to ubound(arrUpFileType)'判断上传的文件扩展名是否在允许的范围内

if fileEXT=trim(arrUpFileType(i)) then

EnableUpload=true

exit for

end if

双文件上传,状态为true,可以上传

8.小数点或空格被忽视,这个也是利用了win系统特性了,比如a.asp.和a.asp空格、a.php.

绕过黑名单的过滤

防御办法:使用自己的扩展名来代替

9.超长文件名截断文件后缀,各系统版本的超长文件名长度可能各不相同,最常见的是应用在本地包含漏洞方面,由于php新版过滤了%00,所以用 a.php?files=../../../../../../../../../etc/passwd…………………………………(N个点).html,推荐用“.”和“/”或空格来试。在win下:

echo aaaa>a.asp若干个空格.gif

dir a.asp

2010-03-15 17:41 2,852 a.asp

防御办法:对文件名长度进行限制

10.只校验了文件头和文件完整性

有的上传程序校验文件头,并只允许上传图片文件类型且验证图片文件完整性(仅伪造文件头还是不行),但没有验证文件后缀,也没有强制更改上传文件的后缀。我们可以新建一个几kb大小以内的jpg图片文件(颜色填充),然后用ue以十六进制打开文件,在文件内容末尾加些空格后再加上一句话木马< ?fputs(fopen("c.php","w"),"“)?>存为 aaa.php上传。如果有验证文件后缀,也可以结合以上方法绕过文件的后缀验证。

防御办法:对文件名进行判断即可

11. SSI文件上传漏洞

上传内容为 <!--#includ file="conn.asp"--> 的shtml 文件

conn.asp 就一览无遗 , 直接请求这个 shtm 文件 . 数据库路径也就得到了

其作用是将 "conn.asp" 内容拷贝到当前的页面中 , 解析 :<!--#includ file="conn.asp"--> 就是一条 SSI 指令 . 当访问者来浏览时 , 会看到其它 HTML 文档一样显示 conn.asp 其中的内容 .

http://baike.baidu.com/view/31870.htm

防御办法:使用白名单如jpg、gif、rar

3、如何上传才能安全?

formPath=upload.form("filepath")
''在目录后加(/)
select case formPath
case "img"
formPath="img"
case "file"
formPath="file"
case "media"
formPath="media"
case Else
HtmEnd "非法路径!"
end select
formPath=formPath&"/" set file=upload.file(formName) ''生成一个文件对象
if file.FileSize>0 then ''如果 FileSize > 0 说明有文件数据
fileext=lcase(right(file.FileName,4))
'检查文件扩展名是否合法
select case fileext
case ".jpg"
fileext=".jpg"
case ".gif"
fileext=".gif"
case ".bmp"
fileext=".bmp"
case ".rar"
fileext=".rar"
case ".mp3"
fileext=".mp3"
case ".wma"
fileext=".wma"
case ".wmv"
fileext=".wmv"
case Else
HtmEnd "非法文件扩展名!"
end select
randomize
ranNum=int(900*rnd)+100
ranNum=year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum
file.SaveAs Server.mappath(formPath&ranNum&fileext) ''保存文件
response.write file.FilePath&file.FileName&" ("&file.FileSize&") => "&formPath&ranNum&fileext&" 成功!<br>"
file.FileName=ranNum&fileext
response.write file.FileName iCount=iCount+1
end if
set file=nothing

  

关于我:一个网络安全爱好者,致力于分享原创高质量干货,欢迎关注我的个人微信公众号:Bypass--,浏览更多精彩文章。

ASP代码审计学习笔记 -3.上传漏洞的更多相关文章

  1. ASP代码审计学习笔记 -4.命令执行漏洞

    命令执行漏洞: 保存为cmd.asp,提交链接: http://localhost/cmd.asp?ip=127.0.0.1 即可执行命令 <%ip=request("ip" ...

  2. php代码审计8审计文件上传漏洞

    文件上传漏洞是指用户上传了一个可执行的脚步文件,并通过此脚本文件获得了执行服务器端命令的能力,这种攻击方式是最直接和有效的,文件上传本身是没问题的,有问题的是文件上传后,服务器怎么处理,解释文件,通过 ...

  3. Spring MVC学习笔记——文件上传

    1.实现文件上传首先需要导入Apache的包,commons-fileupload-1.2.2.jar和commons-io-2.1.jar 实现上传就在add.jsp文件中修改表单 enctype= ...

  4. 1.6(Spring MVC学习笔记)文件上传与下载

    一.文件上传 实现文件上传多数是采用表单提交数据, 但对于进行文件上传的表单需要满足一下几个条件 1.表单的method设置为post 2.表单的enctype设置为multipart/form-da ...

  5. 学习笔记-git 上传

    0.git add * (如果你需要修改源码需要在 1 之前使用,然后再回到 1) 1.git commit -m '提交文字描述' 2.git push -u origin master (上传到主 ...

  6. ASP代码审计学习笔记 -5.文件下载漏洞

    文件下载漏洞 漏洞代码: <% function download(f,n) on error resume next Set S=CreateObject("Adodb.Stream ...

  7. ASP代码审计学习笔记-1.SQL注入

    ASP注入漏洞 一.SQL注入的原因 按照参数形式:数字型/字符型/搜索型 1.数字型sql查询 sql注入原因: ID=49 这类注入的参数是数字型,SQL语句原貌大致如下: id=request. ...

  8. ASP代码审计学习笔记 -2.XSS跨站脚本

    XSS漏洞: 漏洞代码: <% xss=request("xss") response.write(xss) %> 漏洞利用: 漏洞修复: Server.HTMLEnc ...

  9. Kali学习笔记38:文件上传漏洞

    早些年,提到Web渗透,或者搜索一些黑客教程 基本都会看到文件上传漏洞. 它是一个很经典的漏洞 但它本质其实不是一个漏洞,而是网站本身的上传文件功能 不过如果我们上传了Webshell,那么就成为了文 ...

随机推荐

  1. html+js+css+接口交互+echarts实例一枚

    1. 解决了echarts的展现 2. 解决了echarts全屏幕展现(width:100%;height:100%;) 3. 解决了向接口取数据问题 <!DOCTYPE html> &l ...

  2. maven install 跳过test方法

    方式1:用命令带上参数 mvn install -Dmaven.test.skip=true 方式2:在pom.xml里面配置 <build> <defaultGoal>com ...

  3. Eclipse中Editor开启Auto-completion

    Java Editor .abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ Java Script Editor 现在Eclipse限制使用最多 ...

  4. RTX——第18章 内存管理

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 内存管理介绍在 ANSI C 中,可以用 malloc()和 free()2 个函数动态的分配内存和释放 ...

  5. JavaScript高级 面向对象(9)--深拷贝代码实现

    说明(2017.4.1): 1. 深拷贝要把对象里的“方法”也复制一份出来,“方法”里的“方法和属性”再判断深浅进行拷贝. 2. 办法就是写一个函数deepCopy,里面判断深浅拷贝,然后每个对象都添 ...

  6. activiti5.13工作流系列(一)-初识

    1.什么是工作流? 工作流就是让多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程,工作流由实体(Entity).参与者(Participant).流程定义(Flow Definition) ...

  7. 解析:SO_REUSEADDR bind: address in use

    http://blog.sina.com.cn/s/blog_53a2ecbf010095db.html socket中的SO_REUSEADDR Q: 我正在写一个unix server程序,不是d ...

  8. Fastjson 的简单使用<转>

    简介 Fastjson是一个Java语言编写的高性能功能完善的JSON库. 高性能 fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jackson. ...

  9. Android——用对话框做登陆界面(自定义对话框AlertDialog,多线程,进度条ProgressDialog,ListView,GridView,SharedPreferences存,读数据,存取文本,assets文件)

    效果: 1.点击图标进入页面二 2.页面2图片暂停显示5秒进入页面三 3.点击页面三登陆按钮,打开登陆对话框,输入密码进入页面四 点击下载按钮,显示水平进度条 点击保存和获取用户名和密码 进入页面六  ...

  10. SecureCRT 用ssh key登录配置方法

    服务器端配置 OS: Debian-6.0.5 复制代码 代码如下: #apt-get install ssh 安装ssh服务 编辑/etc/ssh/sshd_config配置文件 复制代码 代码如下 ...