利用万能密码登陆网站后台并漏洞修复WEB安全 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

   

    万能密码这是个比较老的漏洞了,如果你的网站存在这个漏洞,结果肯定非常的悲剧,

利用万能密码登陆网站后台并漏洞修复WEB安全

。任何一个初学 技术的新人都能很轻松的入侵掉你的网站。因为需要入侵存在这种漏洞的网站不存在任何的技术含量,简单打个密码就行。。但如今还有很多网站管理员都没重视。。以至于让自己的服务器沦落成业内人士常说“万人骑”

    要修复此漏洞首先需要了解该漏洞的原理,是什么愿意导致漏洞的产生。

    下面就来解释下给大家吧! 原理是这样的:

    (以下全部以asp为例子) 很多网站把密码放到数据库中,在登陆验证中一般都用以下sql查询语句去查找数据库, sql=select * from user where username='username'

    sql="select * from user where username='"&username&"'and pass='"& pass&'" ,

    如果用户提交的用户名密码和数据库里面的一样就让你登录,反之则不行。

    or 是一个逻辑运算符,作用是在判断两个条件的时候,只要其中一个条件成立,那么

    等式将会成立.而在语言中,是以1来代表真的(成立).那么在这行语句中,原语句的"and"验证将不再

    继续,而因为"1=1"和"or"令语句返回为真值.。(其实也好理解,英文or是或者的意思,也就是说

    这个或者那个中有一个是对的,那么整句话就对的,那我还管你后面的and甘什么呢?)好了,

    我们根据sql这个特性构造一个特殊的用户名和密码来绕过它的验证,就用我构造的那个'or' '=' ,

    用户名和密码都是'or' '=',我们来看看放到整个程序中会是什么样子。

    sql="select * from user where username=''or' '=''and pass=''or' '='' (注意,or前面和=后面都不是

    双引号,而是两个单引号,查询语句里面没有双引号,双引号只是让里面的变量变成字符而已,

    我们查询的时候双引号中的变量就被我们提交的数据所代替),好了,现在整句话的意思是:从数

    据库的user表中查找的用户名是空(两个单引号之间没东西当然是空了:))或者空等于空。废

    话,因为空当然等于空了,所以程序就认为你提交的数据是合法的,于是就放你通过拉and后面

    的密码验证都不要了。

    有人问,是不是只有这个'or' '=' 才可以绕过验证呢? NO,you are wrong !

    根据这个原理我就可以随便构造我喜欢的语句,比如 aweige' or 'aweige'<>'骆驼

    这样放进去就变成了用户名是aweige或者aweige不等于骆驼,废话,aweige当然不不等于骆驼拉

    难道还等于骆驼啊??于是就给我放行了。大家也可以根据自己的喜欢去构造这样的语句,

    修复方法很简单

    复制以下代码:

    程序代码

    <%

    Dim Query_Badword,Form_Badword,i,Err_Message,Err_Web,name

    '------定义部份头----------------------------------------------------------------------

    Err_Message = 3 '处理方式:1=提示信息,2=转向页面,3=先提示再转向

    Err_Web = "dl.Asp" '出错时转向的页面

    Query_Badword="'∥and∥select∥update∥chr∥delete∥%20from∥;∥insert∥mid∥master.∥set∥chr(37)∥="

    '在这部份定义get非法参数,使用"∥"号间隔

    Form_Badword="'∥(∥)∥;∥=" '在这部份定义post非法参数,使用"∥"号间隔

    '------定义部份尾-----------------------------------------------------------------------

    On Error Resume Next

    '----- 对 get query 值 的过滤.

    if request.QueryString<>"" then

    Chk_badword=split(Query_Badword,"∥")

    FOR EACH Query_Name IN Request.QueryString

    for i=0 to ubound(Chk_badword)

    If Instr(LCase(request.QueryString(Query_Name)),Chk_badword(i))<>0 Then

    Select Case Err_Message

    Case "1"

    htm = htm& ""

    Case "2"

    htm = htm& ""

    Case "3"

    htm = htm& ""

    End Select

    Response.End

    End If

    NEXT

    NEXT

    End if

    '-----对 post 表 单值的过滤.

    if request.form<>"" then

    Chk_badword=split(Form_Badword,"∥")

    FOR EACH name IN Request.Form

    for i=0 to ubound(Chk_badword)

    If Instr(LCase(request.form(name)),Chk_badword(i))<>0 Then

    Select Case Err_Message

    Case "1"

    htm = htm& ""

    Case "2"

    htm = htm& ""

    Case "3"

    htm = htm& ""

    End Select

    Response.End

    End If

    NEXT

    NEXT

    end if

    %>

    另存为xx.asp文件

    然后将xx.asp放入网站与conn.asp文件同一目录下

    然后复制以下代码

    程序代码

   

    粘贴在你网站数据库连接文件conn.asp里,一般复制在conn.asp顶部,

电脑资料

利用万能密码登陆网站后台并漏洞修复WEB安全》(https://www.unjs.com)。。

    经此,就可以轻松修复网站后台可以使用万能密码'or''=''or'登陆的漏洞了。。。

免费领课
最新文章

   

    万能密码这是个比较老的漏洞了,如果你的网站存在这个漏洞,结果肯定非常的悲剧,

利用万能密码登陆网站后台并漏洞修复WEB安全

。任何一个初学 技术的新人都能很轻松的入侵掉你的网站。因为需要入侵存在这种漏洞的网站不存在任何的技术含量,简单打个密码就行。。但如今还有很多网站管理员都没重视。。以至于让自己的服务器沦落成业内人士常说“万人骑”

    要修复此漏洞首先需要了解该漏洞的原理,是什么愿意导致漏洞的产生。

    下面就来解释下给大家吧! 原理是这样的:

    (以下全部以asp为例子) 很多网站把密码放到数据库中,在登陆验证中一般都用以下sql查询语句去查找数据库, sql=select * from user where username='username'

    sql="select * from user where username='"&username&"'and pass='"& pass&'" ,

    如果用户提交的用户名密码和数据库里面的一样就让你登录,反之则不行。

    or 是一个逻辑运算符,作用是在判断两个条件的时候,只要其中一个条件成立,那么

    等式将会成立.而在语言中,是以1来代表真的(成立).那么在这行语句中,原语句的"and"验证将不再

    继续,而因为"1=1"和"or"令语句返回为真值.。(其实也好理解,英文or是或者的意思,也就是说

    这个或者那个中有一个是对的,那么整句话就对的,那我还管你后面的and甘什么呢?)好了,

    我们根据sql这个特性构造一个特殊的用户名和密码来绕过它的验证,就用我构造的那个'or' '=' ,

    用户名和密码都是'or' '=',我们来看看放到整个程序中会是什么样子。

    sql="select * from user where username=''or' '=''and pass=''or' '='' (注意,or前面和=后面都不是

    双引号,而是两个单引号,查询语句里面没有双引号,双引号只是让里面的变量变成字符而已,

    我们查询的时候双引号中的变量就被我们提交的数据所代替),好了,现在整句话的意思是:从数

    据库的user表中查找的用户名是空(两个单引号之间没东西当然是空了:))或者空等于空。废

    话,因为空当然等于空了,所以程序就认为你提交的数据是合法的,于是就放你通过拉and后面

    的密码验证都不要了。

    有人问,是不是只有这个'or' '=' 才可以绕过验证呢? NO,you are wrong !

    根据这个原理我就可以随便构造我喜欢的语句,比如 aweige' or 'aweige'<>'骆驼

    这样放进去就变成了用户名是aweige或者aweige不等于骆驼,废话,aweige当然不不等于骆驼拉

    难道还等于骆驼啊??于是就给我放行了。大家也可以根据自己的喜欢去构造这样的语句,

    修复方法很简单

    复制以下代码:

    程序代码

    <%

    Dim Query_Badword,Form_Badword,i,Err_Message,Err_Web,name

    '------定义部份头----------------------------------------------------------------------

    Err_Message = 3 '处理方式:1=提示信息,2=转向页面,3=先提示再转向

    Err_Web = "dl.Asp" '出错时转向的页面

    Query_Badword="'∥and∥select∥update∥chr∥delete∥%20from∥;∥insert∥mid∥master.∥set∥chr(37)∥="

    '在这部份定义get非法参数,使用"∥"号间隔

    Form_Badword="'∥(∥)∥;∥=" '在这部份定义post非法参数,使用"∥"号间隔

    '------定义部份尾-----------------------------------------------------------------------

    On Error Resume Next

    '----- 对 get query 值 的过滤.

    if request.QueryString<>"" then

    Chk_badword=split(Query_Badword,"∥")

    FOR EACH Query_Name IN Request.QueryString

    for i=0 to ubound(Chk_badword)

    If Instr(LCase(request.QueryString(Query_Name)),Chk_badword(i))<>0 Then

    Select Case Err_Message

    Case "1"

    htm = htm& ""

    Case "2"

    htm = htm& ""

    Case "3"

    htm = htm& ""

    End Select

    Response.End

    End If

    NEXT

    NEXT

    End if

    '-----对 post 表 单值的过滤.

    if request.form<>"" then

    Chk_badword=split(Form_Badword,"∥")

    FOR EACH name IN Request.Form

    for i=0 to ubound(Chk_badword)

    If Instr(LCase(request.form(name)),Chk_badword(i))<>0 Then

    Select Case Err_Message

    Case "1"

    htm = htm& ""

    Case "2"

    htm = htm& ""

    Case "3"

    htm = htm& ""

    End Select

    Response.End

    End If

    NEXT

    NEXT

    end if

    %>

    另存为xx.asp文件

    然后将xx.asp放入网站与conn.asp文件同一目录下

    然后复制以下代码

    程序代码

   

    粘贴在你网站数据库连接文件conn.asp里,一般复制在conn.asp顶部,

电脑资料

利用万能密码登陆网站后台并漏洞修复WEB安全》(https://www.unjs.com)。。

    经此,就可以轻松修复网站后台可以使用万能密码'or''=''or'登陆的漏洞了。。。