蓝色动力网络

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 4659|回复: 5

经典漏洞('or'='or')再现和原理

[复制链接]
发表于 2009-1-10 17:31:44 | 显示全部楼层 |阅读模式
今天要做的教程是"经典漏洞('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("assWord") "将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,再点登录,看进去了吧,大家也可去网上找这类系统,关键字"co net mib ver 1.0网站后台管理系统"我用google搜寻了下,有1550项符合,随便进入一个网站试下,看也进去了,至于怎么拿网站的webshell,我想你们可比我历害的多了(晕,我还不懂呢,怎么比你历害呢?)好吧,为了照顾下小菜兄弟们,我在这儿再说下了,进入后台管理页面在上面一拦有"产品管理"这项.我们点击进入后,再点"添加产品"再点"浏览"把马后缀改为图片的格式,点"上传"得到马的路径,再去"系统管理"点"数据库备份"把马的路径填入"当前数据库路径"处,"备份数据库目录"处,你自己定,"备份数据库名称"处,你自己定个以asp后缀的就行了,再点确定,备份就成功了并得到了数据库路径,再把数据的路径补到url上,点刷新,看成了,我们再利用小马上传个大马就成了,
好了,教程就到这儿,在以后我就这套系统会陆续推出ASP其它漏洞攻击的教程,大家可以加我一起学习,探讨!

发表于 2009-1-11 20:42:19 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

发表于 2011-4-26 21:07:42 | 显示全部楼层

Re:经典漏洞(&#39;or&#39;=&#39;or&#39;)再现和原理

记得16岁的时候刚会上网的时候用or进入人家后台兴奋的要死
回复 支持 反对

使用道具 举报

发表于 2013-1-7 17:59:27 | 显示全部楼层
谢谢分享,学习了
回复 支持 反对

使用道具 举报

发表于 2013-11-9 21:01:33 | 显示全部楼层
请楼主继续发好贴,支持你
回复 支持 反对

使用道具 举报

发表于 2013-12-24 00:32:23 | 显示全部楼层
关注一下,学习学习,不懂的东西太多了!
关注一下,学习学习,不懂的东西太多了!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

蓝色动力网络微信平台
网站管理,业务合作联系邮箱: admin#lansedongli.com    QQ:13412492 限网站业务问题.
网站帐号、密码、密保找回请使用注册邮箱,发送邮件至 password#lansedongli.com ,否则不予受理.
免责声明:本论坛所有文字和图片仅代表其个人观点.
本站某些资料或文章来自于互联网,不代表本站观点,如果侵犯了您的权益,请来信告知,我们会在三天内删除.
为了给大家一个更好的交流场所,请勿在本论坛发表与中华人民共和国法律相抵触的言论,请合作,谢谢!
Copyright © 2007-2019 Corporation Powered by网吧系统 版权所有    转载请注明!
浙ICP备11043737号-1 程序:Discuz! x3.4

湘公网安备 43018102000145号

手机版|Archiver|蓝色动力网络   

快速回复 返回顶部 返回列表