时间:2024-11-23 17:07:55 作者:邓文君
最新消息报道,如何登录进销存系统?登录进销存系统的方式有很多种,下面小编为大家介绍一种用技术的手段登录进销存系统,SQL注入进行登录。
关于“进销存”系统的登录方法——利用SQL注入进行登录
“进销存”系统的登录存在着SQL注入的漏洞,利用这个漏洞可以绕过用户名和密码的判断,从而进入“进销存”系统。下面,对于这个漏洞进行具体的说明。
(注:由于系统源代码可见,于是可以直接通过代码来分析SQL注入,因此不在这里进行源代码语句漏洞试探。)
1、首先打开登录页面,找到源代码地址。
图1——登录页面的源代码地址
2、打开源代码,找到有关登录语句验证的代码,代码如下(重要部分已给出注释):
3、由代码中可以看到,关键的登录判断语句为:
sql="select * from login where(username=' "&nowusername&" ' and pwd=' "&md5(nowpwd)&"') or (bianhao=' "&nowusername&" ' and pwd=' "&md5(nowpwd)&"')"
这段语句会判断login表中是否存在输入的用户名和密码,或者用户编号和密码。
下面,提出sql语句进行具体分析:
SQL语句1:
select * from login where (username=' "&nowusername&"' and pwd=' "&md5(nowpwd)&" ') or (bianhao=' "&nowusername&"' and pwd=' "&md5(nowpwd)&" ')
可见,where条件有两大部分,用or进行连接(形式为:select * from login where条件1 or条件2)。因此,or后面的语句是否为真不重要,只要前面(条件1)为真即可。
再拿出前面的(条件1)语句进行分析:
SQL语句2:
username=' "&nowusername&" ' and pwd=' "&md5(nowpwd)&"'
由这段代码中可以看到,此部分又分为两个条件判断,用and进行连接(形式为:条件1and条件2)。
4、进行SQL注入分析
由上面的登录代码分析可见,如果SQL语句2为真,那么SQL语句1也为真。现在的问题是如何让SQL语句2恒为真。
现在SQL语句2的形式为:条件1 and条件2,根据SQL语句1的提示,可以看出,如果SQL语句2形式变成:条件1or条件3 or条件4and条件2,那么可见,即使条件2不为真,如果条件1或者条件3有一个为真,那么SQL语句2就为真。
因此,目的就是要添加or条件3 or条件4到语句中,使SQL语句2恒为真。
5、SQL注入语句构造
username=’ “&nowusername&” ‘ and pwd=’ “&md5(nowpwd)&”‘
由前面代码分析看出,如果输入登录名为admin,密码为12345,运行时,此段代码被编译为:
username=’ admin ‘ and pwd=’ admin ‘
通过编译后的代码与后台数据库进行数据对比,判断是否存在该用户。
可见,输入的内容首先将被替换为相应的sql语句内容,再进行sql语句的执行。
先假设一下,如果运行时,代码被编译为:
username=’ admin ‘or 1=1 or 1=1andpwd=’ admin ‘
形式为:条件1or条件3 or条件4and条件2,可见条件3恒成立,因此不论条件1和条件2是否为真,此段代码恒为真。
再把源代码拿出来进行对比:
预想结果:username=’ admin ’or 1=1 or 1=1and pwd=’admin ‘
相关代码:username=’“&nowusername&”’ and pwd=’ “&md5(nowpwd)&”‘
代码中标红的内容是用户输入的内容,需要注意的是,在标红的内容后面有一个’对应着前面的’。
如果输入的内容为:admin’ or 1=1 or 1=1
代入到标红内容,代码为:
username=’admin’ or 1=1 or 1=1’ andpwd=’ “&md5(nowpwd)&” ‘
可见,username=’ admin’为条件1,1=1为条件2,pwd=’ “&md5(nowpwd)&” ‘为条件3,但是需要注意的是1=1后面有一个“’”,是源代码中存在的,如果在输入的时候,输入了一个“’”,那么源代码中的“’”将缺少对应。
SQL语句3:
username=’admin’or 1=1 or 1=1’and pwd=’“&md5(nowpwd)&”‘
可见,如果输入内容为:admin’ or 1=1,将导致内容替换代码后,“’”会缺少一个对应。原因就是我们在输入的时候输入了一个“’”。因此,为了让“’”不缺少对应,我们在输入的时候再输入一个“’”。
输入内容为:admin’ or 1=1’
这时,再代入到相应代码中,编译后的代码为:
源代码:username=’“&nowusername&”’ and pwd=’ “&md5(nowpwd)&”‘
代入后:username=’admin’ or 1=1 or 1=1 ’ ’ and pwd=’ “&md5(nowpwd)&” ‘
可见,这回“’”已经不缺少对应了:
SQL语句4:
username=’admin’or 1=1 or 1=1’’and pwd=’“&md5(nowpwd)&”‘
形式为:条件1 or条件2or条件3and条件4
这时,又出现了一个问题,条件3为:1=1’ ’,这不是正确的条件语句,还要修改一下,改为:
SQL语句5:
username=’admin’or 1=1or1=1’’and pwd=’“&md5(nowpwd)&”‘
删除1=1使形式改变为我们需要的:
条件1 or条件2or条件3 and条件4
可见,条件2为:1=1,恒为真,条件3为:’’,是一个不进行判断的空条件。
因此,SQL语句5因为有条件2恒为真,所以SQL语句5恒为真。
6、总结分析
SQL注入的目的是让SQL语句1恒成立。
SQL语句1:
select * from login where (username=' "&nowusername&"' and pwd=' "&md5(nowpwd)&" ') or (bianhao=' "&nowusername&"' and pwd=' "&md5(nowpwd)&" ')
如果其中的username=' "&nowusername&"' and pwd=' "&md5(nowpwd)&" '恒成立,那么SQL语句1即恒成立。
语句中的username='"&nowusername&"' and pwd=' "&md5(nowpwd)&"'标红部分是用户输入的内容。现在输入内容:
’ or 1=1 or ‘
替换后为:
username=‘’ or 1=1 or ‘’ and pwd=' "&md5(nowpwd)&"'
此语句变为恒成立。
(还可以看出来,如果输入helloworld’ or 1=1 or ‘,系统一样可以登录,原因就是前面输入的都是条件1的内容,无所谓真假,因为1=1的条件恒为真。)
7、测试结果:
登录名为:’ or 1=1 or ‘
密码不为空
图2——SQL注入
点击登录,登录成功。
8、查看登录日志:
登录日志
可见,使用SQL注入成功登录后的用户标识为“-1”,登录日志页面的登录用户调用的是rizi表中的username字段,为什么会是“-1”,原因留给大家去思考。
HiShop友数进销存系统,为了对企业生产经营中进货、出货、批发销售、付款等进行全程进行跟踪,管理,而设计的整套方案。
线上线下收银系统哪个好门店收银好帮手
打通线上线下一体化,门店能实现快速收银。
系统自带进销存管理,更好管理库存销售。
配备收银硬件一站式整体服务。
收 银 会员管理 库存管理 商品管理 交接班 数据报表 营销促单 售后处理 多种收款
获取报价