or 1=1等漏洞问题 -电脑资料

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

    漏洞描述:

    在login.asp中,接收用户输入的Userid和Password数据,并分别赋值给user和pwd,然后再用sql="select * from admin where username="&user&" and password="&pwd&"" 这句来对用户名和密码加以验证,

or 1=1等漏洞问题

    以常理来考虑的话,这是个很完整的程序了。而在实际的使用过程中,整套程序也的确可能正常使用。

    但是如果Userid的值和password的值被赋于:safer’ or’1’=’1’ 这时,sql="select * from admin where username="&user&" and password="&pwd&"" 就成了:

    sql="select * from reg where user=safer’ or’1’=’1’ and pass=safer’ or’1’=’1’

    怎么样?!我不说大家也明白了吧!

    既然有这样的问题,接下来我们就来看看如何解决它。从上面的程序中各位也可以看出,只要对用户输入的数据进行严格过滤就可以了。具体可以参下面的程序:

    Quote

    〈%

    user=request.from("UserID")

    pass=request.from("password")

    for i=1 to len(UserID)

    cl=mid(UserID,i,1)

    if cl="" or us="%" or us="〈" or us="〉" then

    response.redirect "54safer ..haha"

    response.end

    end if

    next

    %〉

    同样是先取得用户输入数据,然后分析用户输入的每一个字符,如发现异常,则转到错误页面,

电脑资料

or 1=1等漏洞问题》(https://www.unjs.com)。

    if cl="" or us="%" or us="〈" or us="〉" then 这一句中可以加入任意的过滤字符,跟据具体情况而定。

    ********************************************************************

    漏洞修补:

    username=replace(trim(request("username")),"’","")

    password=replace(trim(Request("password")),"’","")

    把“’”给过滤了

    如果你想用“’”当做密码 就用下面的方法

    1、select * from user where user=’ " & User & "’ "

    2、如果返回不为假,则取密码

    pass=rs("passwd")

    3、判断:if pass=password

    4、得出结论。

    例子:

    Quote

    sql="select * from ****_admin where admin_pass=’"&admin_pass&"’ and admin=’"&admin&"’"

    rs.open sql,conn,1,3

    if not(rs.bof and rs.eof) then

    if admin_pass=rs("admin_pass") then

    session("admin")=rs("admin")

    ********************************************************************

最新文章