SQL漏洞之“万能登陆密码”

SQL漏洞之“万能登陆密码”
常用的“万能登陆密码”:
' or '' = '
' or 1=1;--
1 or 1=1
" or ""="
漏洞描述:
在login.asp中,接收用户输入的Userid和Password数据,并分别赋值给user和pwd,然后再用
sql="select * from admin where username="&user&" and password="&pwd&""

这句来对用户名和密码加以验证。
以常理来考虑的话,这是个很完整的程序了。而在实际的使用过程中,整套程序也的确可能正常使用。
  
但是如果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’
 
既然有这样的问题,接下来我们就来看看如何解决它。从上面的程序中各位也可以看出,只要对用户输入的数据进行严格过滤就可以了。具体可以参下面的程序:
<%
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 "Fuck you !"
response.end
end if
next
%>

同样是先取得用户输入数据,然后分析用户输入的每一个字符,如发现异常,则转到错误页面。
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")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值