当前位置: 首页 > 编程日记 > 正文

'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'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

相关文章:

第七篇:数据预处理(四) - 数据归约(PCA/EFA为例)

前言 这部分也许是数据预处理最为关键的一个阶段。 如何对数据降维是一个很有挑战&#xff0c;很有深度的话题&#xff0c;很多理论书本均有详细深入的讲解分析。 本文仅介绍主成分分析法(PCA)和探索性因子分析法(EFA)&#xff0c;并给出具体的实现步骤。 主成分分析法 - PCA 主…

Matlab编程与数据类型 -- 函数M文件的调用

本图文介绍了Matlab中函数M文件的调用方式。

直接依赖,间接依赖,可选依赖,排除依赖,依赖冲突

直接依赖 在本工程pom文件中配置的依赖&#xff0c;称为本工程的直接依赖。间接依赖 本工程pom配置了依赖A&#xff0c;A又依赖B&#xff0c;则本工程也依赖B&#xff0c;B为本工程的间接依赖。可选依赖 在依赖中配置<optional> true/false 是否向下传递&#xff0c;如果…

Windows 编程[9] - WM_CLOSE 消息

本例效果图:program Project1;usesWindows, Messages;{供 WM_CLOSE 消息调用的自定义过程} procedure OnClose(h: HWND); beginif IDOK MessageBox(h, 确认关闭吗?, 提示, MB_OKCANCEL) thenDestroyWindow(h); end;function WndProc(wnd: HWND; msg: UINT; wParam: Integer; …

Python自动化测试白羊座-week3切片+元组

name zcl,py,zyznames [zcl,py,zyz]print(names[0])print(names[0:2]) #切片就是从里面取几个元素, 从第几个取到第几个结束.取值时顾头不顾尾.print(names[1])#切片操作对字符串也适用name1[zcl,py,zyz]print(name1[2])num list(range(10)) #用range生成列表&#xff0c;需…

Matlab编程与数据类型 -- 函数M文件的组成

本图文介绍了Matlab中函数M文件的组成。

intellij idea 必知的debug功能

1.设置断点 选定要设置断点的代码行&#xff0c;在行号的区域后面单击鼠标左键即可。 2.开启调试会话 点击红色箭头指向的小虫子&#xff0c;开始进入调试。 IDE下方出现Debug视图&#xff0c;红色的箭头指向的是现在调试程序停留的代码行&#xff0c;方法f2()中&#xff0c;程…

Lession 15 Good news

1 语法:直接引语;间接引语; 直接引语:用引号"" 直接把要说的话引起来; l am busy, he said. 间接引语:转述说话人的话; He said that he is busy. 间接引语:1>陈述句,say,tell,来转述,人称,时态,指示代词,时间状语,地点状语…

使用HTML5监測站点性能

在这个信息爆炸的互联网时代&#xff0c;越来越多的人缺少了等待的耐心。站点性能对于一个站点来说越来越重要。下面为监控到的站点打开时间对跳出率的影响&#xff1a; 当站点打开时间在0-1秒时&#xff0c;跳出率为12% 当站点打开时间在1-2秒时&#xff0c;跳出率为26% 当站点…

Matlab编程与数据类型 -- 单元数组

Matlab编程与数据类型 – 单元数组

反向代理服务器的工作原理

最近接触了nginx&#xff0c;nginx可以作为一个反向代理服务器完成负载均衡&#xff0c;下面记录一下从网上学习到的一些知识。 一 概述 反向代理&#xff08;Reverse Proxy&#xff09;方式是指以代理服务器来接受Internet上的连接请求&#xff0c;然后将请求转发给…

VS2005 制作安装程序的一些网络教程

原文写于&#xff1a;2006-12-14 在VS2005中&#xff0c;制作安装程序需要建立setup project&#xff0c;后面的操作就比较简单了。我在网上看了一些文章&#xff0c;把它们列在下面&#xff1a; 文章 内容 备注 Customizing Setup Project in Visual Studio.NET 2005 …

还有这种操作?

【GDB调试】 用bat避免路径问题 :a g cyc.cpp -g -Wall -o cyc -m32 gdb32 cyc.exe pause goto a debuger.bat开O2在调试中容易出现奇怪错误&#xff0c;尽量不要开&#xff01; 常用命令&#xff1a; ---------- help info 输出所有cmd指令 r 运行 ---------- b 100 在100行前…

什么是人工神经网络?

本图文详细介绍了人工神经网络的生物学基础&#xff0c;并在此基础上推导出人工神经网络的数学模型。

上传大文件,出现: 413 request Entity too Large错误的解决办法

工作中遇见了一个问题&#xff0c;就是上传一个100M的文件&#xff0c;会报413 request Entity too Large错误&#xff0c;下面给出解决方式。 经过排查&#xff0c;发现服务器使用nginx作为反向代理服务器&#xff0c;报上名错误&#xff0c;是因为请求长度超过了nginx默认的…

Java中的策略模式实例教程

策略模式是一种行为模式。用于某一个具体的项目有多个可供选择的算法策略&#xff0c;客户端在其运行时根据不同需求决定使用某一具体算法策略。 策略模式也被称作政策模式。实现过程为&#xff0c;首先定义不同的算法策略&#xff0c;然后客户端把算法策略作为它的一个参数。使…

struts 2 结合json

struts 2 结合json 在struts 2中&#xff0c;要结合json的话&#xff0c;其实是不错的选择&#xff0c;最近做一个登陆系统时&#xff0c;可以考虑选择用struts 2结合json,下面是要点register页面<s:form action"Regist.action"> <s:textfield id"u…

什么是遗传算法?

本文从遗传算法的生物学基础讲起&#xff0c;详细介绍了遗传算法的原理、步骤和简单应用。

使用FileItem获取文件名时注意事项

获取文件名的时候&#xff0c;要注意对不同浏览器的处理&#xff0c;下面给出方法参考 FileItem类的常用方法&#xff1a; 1. boolean isFormField() isFormField方法用于判断FileItem类对象封装的数据是一个普通文本表单字段&#xff0c;还是一个文件表单字段&#xff0c;如果…

Winson.SqlPager 2.5 发布!

Winson.SqlPager 分页控件 版本: 2.5 此控件必须与Winson.Framework框架一起使用安装方法:只需将解压出来的 SqlPage.cs文件复盖了Winson.WControls\SqlPager\ 目录里的同名文件即可.由于之前的控件存在着一些比较严重的BUG,这次对SqlPager做了比较大的改动,修复了一些BUG和改进…

laravel中查看执行的SQL语句

今天想查看laravel框架中执行的SQL语句,百度了一圈,才找到,这文档真心看着不爽,下面上查看方法 DB::connection()->enableQueryLog();$navObj new NavModel();$data $navObj->where($where)->select($this->field)->orderBy(id, desc)->get();$log DB::ge…

Matlab与线性代数 -- 向量的范数

Matlab与线性代数 – 向量的范数

Mac下sublime text2 解决中文乱码

1.control ~ 调出console 2.粘贴以下代码并回车 import urllib2,os;pfPackage Control.sublime-package;ippsublime.installed_packages_path();os.makedirs(ipp) if not os.path.exists(ipp) else None;open(os.path.join(ipp,pf),wb).write(urllib2.urlopen(http://sublim…

封装DateTimePicker并使用绑定时遇到的问题

请教各位高手: 我想把一个控件封装起来.DateTimePicker 因为他的value的类型为DateTime所以不可以为Null 但是数据库里有一些日期是为空的.如离职日期 现在我写了一个类继承至DateTimePicker 使用public object Value覆盖了基类的Value方法 这样它就可以为NULL了. 在使用…

php入门01

关于变量 注意点&#xff1a; 在php中&#xff0c;变量是通过$符号定义的在php中&#xff0c;变量名是区分大小写的数据类型 布尔类型 布尔类型有两个值&#xff0c;true和false,它不区分大小写当我们用”echo”指令输出布尔类型时&#xff0c;如果是“true”则输出的是“1”&a…

遗传算法主程序

遗传算法主程序 本图文已经更新&#xff0c;详细地址如下&#xff1a; http://blog.csdn.net/lsgo_myp/article/details/54584840

jquery日历插件FullCalendar使用技巧

原文链接&#xff1a;http://blog.csdn.net/u013493957/article/details/44920341FullCalendar是一款基于jquery的日历控件,它有着很强大的功能&#xff0c;下面我来给大家介绍一下FullCalendar使用技巧吧&#xff0c;希望此方法对各位有帮助呀。简介 官方网站&#xff1a;http…

列表CheckBox全选 结合DataGrid 进行删除操作

//CheckBox全选function CA(){ var frmdocument.Form1; alert(frm) for (var i0;i<frm.elements.length;i) { var efrm.elements[i]; alert(e.type) alert(e.name) if ((e.name ! allbox) && (e.typecheckbox)) { …

遗传算法主程序(辅助)

遗传算法主程序&#xff08;辅助&#xff09; 本图文已经更新&#xff0c;详细地址如下&#xff1a; http://blog.csdn.net/lsgo_myp/article/details/54584840

互联网产品mysql数据库设计总结

mysql数据库性能不比oracle数据库&#xff0c;所以设计上&#xff0c;和oracle有一些不同。下面总结一些互联网产品的数据库设计。 1.主键 主键可以使用bigint(20) unsigned也可以使用varchar&#xff0c;使用bigint&#xff0c;可以设置为自增主键auto_increment。使用varch…