1月18
咱们提起这个万能密码,我相信玩过黑的都非常熟悉吧,也就是'or' = 'or'属于很老的漏洞,这只最基础的一种,最近我看见很多网站有这种bug,最近有个辽宁沈阳的小伙在google搜索关键词“332003231 后台”貌似想黑哥我一把。下面我来总结一下吧:
1:语句:''or'='or' a'or'1=1-- 'or1=1-- "or1=1-- or1=1-- 'or"="a'='a ') or ('a'='a等等。。。
<%
(1)pwd = request.form("pwd") "获取客户端输入的密码,再把值赋给pwd"
(2)name = request.form("name") "获取客户端输入的用户名再把值赋给name"
都没有进行任何过滤
(3)Set rs = Server.CreateObject("ADODB.Connection") "利用Server对象的CreateObject方法创建ADO组件的Connection对象"
(4)sql = "select * from Manage_User where UserName='" & name & "' And PassWord='"&encrypt(pwd)&"'" "将用户名和密码放入查询语句中查询数据库"
(5)Set rs = conn.Execute(sql) "执行SQL语句"
(6)If Not rs.EOF = True Then "当前的记录位于Connection对象的最记录之后一个前"
(7)Session("Name") = rs("UserName") "将UserName的属性赋给Name的Session自定义变量"
(8)Session("pwd") = rs("PassWord") "将PassWord的属性赋给pwd的Session自定义变量"
(9)Response.Redirect("Manage.asp")了 "利用Response对象的Redirect方法重定向"Manage.asp"
(10)Else
(11)Response.Redirect "chklogin.asp?msg=您输入了错误的帐号或口令,请再次输入!"
(12)End If
(13)end if
%>
这是很明显有漏洞的login.asp的代码.
直接从这两句就可以看出来..
(1)pwd = request.form("pwd") "获取客户端输入的密码,再把值赋给pwd"
(2)name = request.form("name") "获取客户端输入的用户名再把值赋给name"
没有进行任何的过滤..
网上流传着这么一个代码说是很好的防范的..
name=replace(request.form("name") ,"'","")
pass=replace(request.form("pass") ,"'","")
可是一旦用上了此代码 就发现了问题了.
过滤掉了'号之后管理员的密码和名称就不能用这样的符号了,那怎么办呢?看我这个方法..
嘿嘿。
pwd = request.form("pwd")
name = request.form("name")
if (name<>"") and (Pwd<>"") then '判断数据为非空
name=Replace(Replace(name,"'",""),"or","") '嵌套了两个replace函数,过滤特殊字符
Pwd=Replace(Replace(Pwd,"'",""),"or","")
当然还有一种办法是定义一个检查输入的方法,然后登陆时调用这个方法:
<%
Function ChkStr(istr)
dim Sql_Kill,Sql_Kill_2,Sql_Kill_3
Sql_Kill = "\'|and|or|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|set|;|from|="
Sql_Kill_2 = split(Sql_Kill,"|")
for Each Sql_Kill_3 In Sql_Kill_2
istr=Replace(istr,Sql_Kill_3,"")
Next
ChkStr=istr
End Function
%>
上面的方法也是就是将比如"or"这些关键词给替换成空格。
来源:Heck's Blog
地址:https://www.heckjj.com/resolve-the-or-equals-or-sqlinject-html/
转载时须以链接形式注明作者和原始出处及本声明,否则将追究法律责任,谢谢配合!
1:语句:''or'='or' a'or'1=1-- 'or1=1-- "or1=1-- or1=1-- 'or"="a'='a ') or ('a'='a等等。。。
<%
(1)pwd = request.form("pwd") "获取客户端输入的密码,再把值赋给pwd"
(2)name = request.form("name") "获取客户端输入的用户名再把值赋给name"
都没有进行任何过滤
(3)Set rs = Server.CreateObject("ADODB.Connection") "利用Server对象的CreateObject方法创建ADO组件的Connection对象"
(4)sql = "select * from Manage_User where UserName='" & name & "' And PassWord='"&encrypt(pwd)&"'" "将用户名和密码放入查询语句中查询数据库"
(5)Set rs = conn.Execute(sql) "执行SQL语句"
(6)If Not rs.EOF = True Then "当前的记录位于Connection对象的最记录之后一个前"
(7)Session("Name") = rs("UserName") "将UserName的属性赋给Name的Session自定义变量"
(8)Session("pwd") = rs("PassWord") "将PassWord的属性赋给pwd的Session自定义变量"
(9)Response.Redirect("Manage.asp")了 "利用Response对象的Redirect方法重定向"Manage.asp"
(10)Else
(11)Response.Redirect "chklogin.asp?msg=您输入了错误的帐号或口令,请再次输入!"
(12)End If
(13)end if
%>
这是很明显有漏洞的login.asp的代码.
直接从这两句就可以看出来..
(1)pwd = request.form("pwd") "获取客户端输入的密码,再把值赋给pwd"
(2)name = request.form("name") "获取客户端输入的用户名再把值赋给name"
没有进行任何的过滤..
网上流传着这么一个代码说是很好的防范的..
name=replace(request.form("name") ,"'","")
pass=replace(request.form("pass") ,"'","")
可是一旦用上了此代码 就发现了问题了.
过滤掉了'号之后管理员的密码和名称就不能用这样的符号了,那怎么办呢?看我这个方法..
嘿嘿。

pwd = request.form("pwd")
name = request.form("name")
if (name<>"") and (Pwd<>"") then '判断数据为非空
name=Replace(Replace(name,"'",""),"or","") '嵌套了两个replace函数,过滤特殊字符
Pwd=Replace(Replace(Pwd,"'",""),"or","")
当然还有一种办法是定义一个检查输入的方法,然后登陆时调用这个方法:
<%
Function ChkStr(istr)
dim Sql_Kill,Sql_Kill_2,Sql_Kill_3
Sql_Kill = "\'|and|or|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|set|;|from|="
Sql_Kill_2 = split(Sql_Kill,"|")
for Each Sql_Kill_3 In Sql_Kill_2
istr=Replace(istr,Sql_Kill_3,"")
Next
ChkStr=istr
End Function
%>
上面的方法也是就是将比如"or"这些关键词给替换成空格。
来源:Heck's Blog
地址:https://www.heckjj.com/resolve-the-or-equals-or-sqlinject-html/
转载时须以链接形式注明作者和原始出处及本声明,否则将追究法律责任,谢谢配合!