欢迎来到天天文库
浏览记录
ID:6788865
大小:701.50 KB
页数:5页
时间:2018-01-25
《利用sql注入进行登录》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、关于“进销存”系统的登录方法——利用SQL注入进行登录“进销存”系统的登录存在着SQL注入的漏洞,利用这个漏洞可以绕过用户名和密码的判断,从而进入“进销存”系统。下面,对于这个漏洞进行具体的说明。(注:由于系统源代码可见,于是可以直接通过代码来分析SQL注入,因此不在这里进行源代码语句漏洞试探。)1、首先打开登录页面,找到源代码地址。图1——登录页面的源代码地址2、打开源代码,找到有关登录语句验证的代码,代码如下(重要部分已给出注释):<%elsenowusername=request.form("u
2、sername")//声明一个变量nowusername,把页面中的登录名内容传值给此变量。nowpwd=request.form("pwd")//声明一个变量nowpwd,把页面中的密码内容传值给此变量。userip=Request.ServerVariables("HTTP_X_FORWARDED_FOR")Ifuserip=""Thenuserip=Request.ServerVariables("REMOTE_ADDR")endifsql="select*fromloginwhere(user
3、name='"&nowusername&"'andpwd='"&md5(nowpwd)&"')or(bianhao='"&nowusername&"'andpwd='"&md5(nowpwd)&"')"//声明一个sql语句,条件是调用login表中的username字段为页面中的登录名内容值且pwd字段为页面中的密码内容值,或者调用login表中的bianhao字段为页面中的登录名内容值且pwd字段为页面中的密码内容值。//从这里还可以看出,登录方式为两种:输入用户名和密码;输入用户编号和密码。//
4、username='"&nowusername&"'此段代码的意思为:把用户输入的登录名内容替换如下代码——"&nowusername&"。//例:登录时登录名输入admin,运行时,username='"&nowusername&"'将被编译为username=’admin’。setrs=conn.execute(sql)//创建一个对象rs,运行上面的sql语句。ifrs.eofThen//如果没有查询结果。//rs.eof的意思是rs对象移动到最后一行,如果rs对象在最后一行,说明没有查询结果,
5、因为如果有查询结果,rs对象将是查询结果。conn.execute("insertintorizi(username,class,address)values('"&nowusername&"','登陆失败','"&userip&"')")//在rizi表中添加记录,记录username登录失败的信息。%>alert('登录名称或密码错误!')//弹出警告对话框window.history.go(-1)3、由代码中可以看到,关键的
6、登录判断语句为:sql="select*fromloginwhere(username='"&nowusername&"'andpwd='"&md5(nowpwd)&"')or(bianhao='"&nowusername&"'andpwd='"&md5(nowpwd)&"')"这段语句会判断login表中是否存在输入的用户名和密码,或者用户编号和密码。下面,提出sql语句进行具体分析:SQL语句1:select*fromloginwhere(username='"&nowusername&"'and
7、pwd='"&md5(nowpwd)&"')or(bianhao='"&nowusername&"'andpwd='"&md5(nowpwd)&"')可见,where条件有两大部分,用or进行连接(形式为:select*fromloginwhere条件1or条件2)。因此,or后面的语句是否为真不重要,只要前面(条件1)为真即可。再拿出前面的(条件1)语句进行分析:SQL语句2:username='"&nowusername&"'andpwd='"&md5(nowpwd)&"'由这段代码中可以看到,此
8、部分又分为两个条件判断,用and进行连接(形式为:条件1and条件2)。4、进行SQL注入分析由上面的登录代码分析可见,如果SQL语句2为真,那么SQL语句1也为真。现在的问题是如何让SQL语句2恒为真。现在SQL语句2的形式为:条件1and条件2,根据SQL语句1的提示,可以看出,如果SQL语句2形式变成:条件1or条件3or条件4and条件2,那么可见,即使条件2不为真,如果条件1或者条件3有一个为真,那么SQL语句2就为真。因此,目的就是要添加or
此文档下载收益归作者所有