array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 ASP代码审计学习笔记 -3.上传漏洞 - 爱码网

 

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.过滤不全aspasacercdxhtr

防御办法:使用白名单如jpggifrar

 

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

防御办法:使用白名单如jpggifrar

 

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.上传漏洞

相关文章: