ASP代码审计学习笔记 -3.上传漏洞
1、ASP上传过程抓包分析:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | 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、如何上传才能安全?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | 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--,浏览更多精彩文章。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫