ASP常见漏洞大全
(2013-07-19 12:21:28)
标签:
漏洞aspasp漏洞it |
一、SQL注入漏洞
漏洞简介:
SQL注入漏洞的几种类型:
1、数字型注入漏洞
例如:http://www.test.com/bug.asp?id=11,这个名为“bug.asp”的文件存在有数据提交,提交的参数名为“id”,参数值为“11”,这里提交的值“11”为数字型,执行SQL语句时就类似于:
select * from 表名 where id=11
其中在bug.asp文件中获取客户端提交过来的参数“id”的值的写法一般是这样的:
id=request("id")
如果id变量没有经过充分过滤就直接放入SQL语句中执行的话,那么SQL注入漏洞就产生了!
漏洞检测方法:
提交:
http://www.test.com/bug.asp?id=11
and 1=1 和
http://www.test.com/bug.asp?id=11
and 1=2
查看两次页面的返回结果是否一样。
2、字符型注入漏洞
例如:http://www.test.com/bug2.asp?name=xufang,这个名为“bug2.asp”的文件存在有数据提交,提交的参数名为“name”,参数值为“xufang”,这里提交的值“xufang”为字符型,执行SQL语句时就类似于:
select * from 表名 where name='xufang'
其中在bug2.asp文件中获取客户端提交过来的参数“name”的值的写法一般是这样的:
name=request("name")
如果name变量没有经过充分过滤就直接放入SQL语句中执行的话,那么SQL注入漏洞就产生了!
漏洞检测方法:
提交:http://www.test.com/bug2.asp?name=xufang'
and '1'='1 和
查看两次页面的返回结果是否一样。
3、搜索型注入漏洞
例如:http://www.test.com/bug3.asp?keyword=xhonker,这个名为“bug3.asp”的文件存在有数据提交,提交的参数名为“keyword”,参数值为“xhonker”,执行SQL语句时就类似于:
select * from 表名 where keyword like '%xhonker%'
其中在bug3.asp文件中获取客户端提交过来的参数“keyword”的值的写法一般是这样的:
keyword=request("keyword")
如果keyword变量没有经过充分过滤就直接放入SQL语句中执行的话,那么SQL注入漏洞就产生了!
检测方法:
提交:http://www.test.com/bug3.asp?keyword=xhonker%'
and 1=1 and '%'=' 和
查看两次页面的返回结果是否一样。
注:在SQL注入漏洞的检测中还有另外一种情况,例如:
http://www.test.com/bug4.asp?name=xufang&id=1986
这里bug4.asp同时获取了两个变量“name”和“id”的值,用字符串连接符“&”连接两个参数,有的时候程序员只对其中的一个变量进行了过滤,而忽略了另外的一个变量,例如这里程序员只对参数“id”的值进行了过滤,而没有对参数“name”的值进行过滤,所以我们就可以将参数“name”和“id”的顺序进行下调换,提交:
http://www.test.com/bug4.asp?id=1986&name=xufang 注入语句
就可以了!
防御方法:
对于数字型注入漏洞,我们可以使用VBScript中的cint()函数将提交过来的参数值进行强制类型转换,例如:
id=cint(trim(request("id")))
对于字符型和搜索型注入漏洞,我们可以编写一个过滤SQL注入关键字的函数,需要时调用该函数即可!
二、跨站脚本攻击漏洞
漏洞简介:
例如:
检测方法:
防御方法:
Public Function
FilterHtml(Str)
If Trim(Str)="" or Isnull(str) Then
Else
")
")
FilterHtml=Str
End If
End Function
三、登陆验证绕过漏洞
漏洞简介:
举例:
1、万能密码进后台
username=trim(request.form("user"))
password=trim(request.form("pass"))
如果这个时候我们提交一个用户名为“xhonker' or '1'='1”,密码为任意的数据,会发现一样可以登陆后台!这时SQL语句就变成了这个样子:
select * from admin where username='xhonker' or '1'='1' and password='"&password&"'
解释一下,“or”是一个逻辑运算符,作用是在判断两个条件的时候,只要其中一个条件成立,那么等式将会成立。这里1=1永远成立,所以我们提交的SQL语句永远为真,这样就可以在不知道密码的情况下成功登陆后台!
防御方法:
password=replace(trim(request.form("pass")),"'","")
在服务器端使用replace函数将客户端提交过来的'过滤为空,这样对方就无法采用闭合程序中的单引号来实现非法登陆了!
2、Cookies欺骗进后台
response.redirect "login.asp"
程序只是简单的判断Cookies中admin的值是否为空,如果为空则返回登陆页面,不为空则进入后台页面。而Cookies我们是可以在客户端进行伪造的,我们只需将admin的Cookies值设为任意,只要不为空就可以,这样再次访问后台页面就可以进入了!
防御方法:
四、暴库漏洞
漏洞简介:
1、\法
2、conn.asp法
防御方法:
五、利用网站后台配置文件写入Webshell漏洞
漏洞简介:
防御方法:
六、.asp后缀数据库安全隐患
漏洞简介:
防御方法:
七、上传漏洞
漏洞简介:
防御方法:

加载中…