密码验证程序简析
呵呵!这是自己分析的一段代码,拿出来和大家分享!希望能对大家有所帮助!有什么不对的地方请大家留言哈!我很愿意听取大家的意见!
看代码吧:
dir rs,sql
set rs=server.createobject("adodb.recordset")
sql="slect * from USERS where name = ' "&name&" ' and pass=' "&pass&" ' "
name=request("name")
pass=request("pass")
rs.opn sql,conn,1,3
if rs.eof then
rsponse.write("<table width=300 border=0 cellspacing=0 cellpadding=0 aling=centr>")
rsponse.write("<tr><td>--您的密码或用户名填写错误!--<br>---您没有权利进入管理页面---</td></tr>")
rsponse.write("<tr><td>---<a herf=vbscript:history.back()>重新填写</a>---</td></tr>")
response.write("</table>")
response.end
else
......
end if
大家注意到那段红色代码了吗?就是sql="slect * from USERS where name = ' "&name&" ' and pass=' "&pass&" ' "
是一条在USERS数据库中找出name字段为输入的用户名,pass字段为输入的密码数据记录的SQL语句.我们现在假设用户名是abc,密码是123,那么这条SQL语句就成了要查找:name='abc' and pass='123'我们现在再假设输入的用户名是abc,密码是123' or '1'='1,那么这条SQL语句就成了要查找:name='abc' and pass='123' or '1'='1'大家注意了这里的123' or '1'='1是一个整体.通过和'...........'来构造了一个语句!就和我们在进行跨站的时候想方设法闭合<script>alert("sunzn跨站!")</script>一样!
呵呵! 到这里我估计大家就懂了,对" ' "过滤不严再加一个标准的or逻辑就可以绕过密码的验证了!因为or的逻辑或,只要'1'='1'就表示验证通过了!
文章引用自: