'or'='or'经典漏洞原理分析

摘要:
“or”=“or”漏洞是一个旧漏洞,主要出现在后台登录中。利用此漏洞,我们可以直接进入系统后台,而无需输入密码。说到这里,我们去练习吧。我在自己的机器上设置了这个系统,并在后台登录。我们可以在用户名中输入“或”=“或”,我可以在密码中输入000,然后单击“登录”。让我们看看。
 

'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'or1=1or'1'='1'and PassWord='000'"大家知道,在逻辑表达式中'1'是为假,1=1总为真吧,'1'='1'也为真,而密码我们是随便输入的所以为假,那么where后的语句转换成逻辑语句后为假or真or真and假,最终的运算结果也为真.这些大家自己慢慢的去实践,去体会,我相信大家都会搞懂的,大家还可以自己构造一些语句去验证下.
  对于Session验证的,我们还可以进行Session欺骗(大家都知道cookie欺骗登录了吧,呵呵),假设我们知道这个系统的管理员的用户名为admin,那么我们只需在密码处输入的语句使它的运算结果为真就行了,这儿留给大家自己构造,当做作业吧(晕,看教程还布置作业,我可不是小学生了啊)
  coolie验证的登录原理和Session"验证的相同,只要大家构造的语句使的SQL的执行为真就行了,这是关键哟,大家可记住了!
  说到这儿,我们去实践下吧,我在自己的机子搭好了这套系统,进入后台登录,我们就在用户名处输入'or'='or',密码我就输入000,再点登录,看进去了吧。

免责声明:文章转载自《'or'='or'经典漏洞原理分析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Spring Boot中使用@Transactional注解配置事务管理用Gitolite搭建服务器上的Git下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

记录用户登陆信息,你用PHP是如何来实现的

对于初入门的PHP新手来说,或许有一定的难度。建议大家先看看PHP中session的基础含义,需要的朋友可以选择参考。 下面我们就通过具体的代码示例,为大家详细的介绍PHP中session实现记录用户登录信息的具体方法。 1.简单的登录界面代码示例: login.html 1 <!DOCTYPE html> 2 <html>...

使用 MYSQLBINLOG 来恢复数据。

今天在家里做了一下试验,终于搞明白了以前做复制的时候没有搞明白的问题。原来BINLOG就是一个记录SQL语句的过程,和普通的LOG一样。不过只是她是二进制存储,普通的是十进制存储罢了。 1、配置文件里要写的东西: [mysqld] log-bin=yueliangdao_binglog(名字可以改成自己的,如果不改名字的话,默认是以主机名字命名)重新启动M...

基于Memcached的tomcat集群session共享所用的jar及多个tomcat各种序列化策略配置

原文:http://www.cnblogs.com/interdrp/p/4096466.html 多个tomcat各种序列化策略配置如下:一、java默认序列化tomcat配置conf/context.xml添加<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManag...

漏洞复现——Apache SSI远程命令执行

漏洞原理:当目标服务器开启了SSI与CGI支持,我们就可以上传shtml文件,利用<!--#exec cmd="id" -->语法执行命令。 SSI:SSI(服务器端包含)是​​放置在HTML页面中的指令,并在提供页面时在服务器上进行评估。它们允许将动态生成的内容添加到现有HTML页面,而无需通过CGI程序或其他动态技术提供整个页面。 SSIe...

Oracle 中session和processes的初始设置

http://blog.163.com/succu/blog/static/193917174201252911727149/ 1.sessions 在初始化参数所设定的限制中,最为人所知的估计就是sessions和processes Sessions 参数指定了一个 Instance中能够同时存在的sessions数量,或者说,就是能同时登陆到数据库的...

JMS是一种应用于异步消息传递的标准API

JMS是一种应用于异步消息传递的标准API,作为Java平台的一部分,JMS可以允许不同应用、不同模块之间实现可靠、异步数据通信。一些概念 JMS provider    An implementation of the JMS interface for a Message Oriented Middleware (MOM). Providers are...