'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,再点登录,看进去了吧。

转载于:https://www.cnblogs.com/yeye518/archive/2008/04/18/2231766.html

'or'='or'经典漏洞原理分析相关推荐

  1. cve-2017–10271 XMLDecoder 反序列化漏洞 原理分析

    目录 1.漏洞背景 2.漏洞原理分析 3.漏洞测试 环境搭建 漏洞复现 4.修复建议 1.漏洞背景 Weblogic是oracle推出的application server,由于其具有支持EJB.JS ...

  2. log4j漏洞原理分析复现检测复盘

    凡事要自发,自然而为,即要顺从一切处于自然状态的事物,允许它们自发地转变.这样,道即达到了一种"无为而无不为"的状态.在日常生活中,道表现为"不自傲"或&quo ...

  3. JAVA反序列化漏洞原理分析

    反序列化漏洞原理分析 从序列化和反序列化说起 什么是序列化和反序列化? 简单来讲,序列化就是把对象转换为字节序列(即可以存储或传输的形式)的过程,而反序列化则是他的逆操作,即把一个字节序列还原为对象的 ...

  4. 蓝牙App系列漏洞原理分析与漏洞利用

    蓝牙App系列漏洞原理分析与漏洞利用 作者: heeeeen 本文系转载,目的是学习,如有侵权,请联系删除 转载出处:http://www.ms509.com/ 蓝牙App漏洞系列分析之一CVE-20 ...

  5. linux shellshock漏洞,shellshock漏洞原理分析(cve-2014-6271 bash漏洞)

    shellshock漏洞原理分析(cve-2014-6271 bash漏洞) 2014-09-26 10:04:16 阅读:0次 概述: 低于4.3版本的gnu bash存在漏洞,运行本地用户通过构造 ...

  6. 常见WEB漏洞原理分析

    一.SQL注入漏洞 SQL注入攻击(SQL Injection),简称注入攻击.SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞.在设计程序,忽略了对输入字符串中夹带的 ...

  7. 打印机PCL漏洞原理分析

    0x01 漏洞概要 PCL代表打印机控制语言(Printer Control Language),由惠普公司开发,并被广泛使用的一种打印机协议.关于另一种页面描述语言,应该提一提由Adobe设计的Po ...

  8. cve-2019-7609 Kibana远程代码执行漏洞攻击方法和漏洞原理分析

    目录 0x00 前言 0x01 漏洞简介 0x02 环境搭建 0x03 漏洞利用 0x04 漏洞机理 1.POC验证 ​2.漏洞产生原理和攻击思路 3.payload构建 0x05 危害分析和处理建议 ...

  9. Spring4Shell的漏洞原理分析

    Spring框架最新的PoC 这两天出来的一个RCE漏洞,但是有以下的条件限制才行: 必须是jdk9及以上 必须是部署在tomcat的应用 是springmvc的或者webflux的应用 具体的可以查 ...

最新文章

  1. @Scheduled(cron = 0/5 * * * * *)将时间改为配置
  2. idea autoscroll from source
  3. ArcGIS个人数据库(mdb)中矢量字段无法删除
  4. Android recycleview实现混合itemview,以及recycleview添加头部尾部
  5. asp.net button创建控件时出错_Tkinter Radiobutton控件
  6. Linux钩子拦截删除文件,在Linux中保存钩子文件
  7. PHP笔记-用户登录权限拦截说明
  8. IT项目管理之脸皮厚大实话
  9. 基于物理渲染的基础理论
  10. a6gpp php,内行人才知道的古董级玛莎拉蒂A6G 2000
  11. Android 进行单元測试难在哪-part3
  12. android 判断服务是否运行
  13. Libpng源码的使用
  14. 有赞云支付php接口,Erphpdown wordpress插件集成有赞云支付的接口申请方法[已失效]...
  15. 赛门铁克管理密码忘记卸载工具
  16. Avaya Aura™ 独家观察报告
  17. 数学速算法_孩子数学计算老出错?复习阶段,家长赶紧和孩子一起找准原因!...
  18. js中的点击事件(click)的实现方式
  19. 手机app怎么制作?app软件开发流程详解
  20. SQL Server认证培训与考试

热门文章

  1. java methode_Java Method.getTypeParameters方法代码示例
  2. java sslsocket程序_JAVA与C++进行sslsocket通信,JAVA做服务端或客户端
  3. android clean 框架,clean架构
  4. 深蓝学院第二章:基于全连接神经网络(FCNN)的手写数字识别
  5. 机器学习中的数学基础:(1)实际应用中矩阵特征值与特征向量的几何意义
  6. 力扣(LeetCode)刷题,简单题(第2期)
  7. STM32 GPIO的原理、特性、选型和配置
  8. 三十之惑–面霸的八月(第二部分)
  9. L1-016 查验身份证 (15 分)
  10. STL模拟实现1.0 -- list和iterator模拟实现和简单分析