【经验分享】后台常用的万能密码

这万能密码好几年前就有了。我都不当回事,结果这次真派上用场了,还真进了后台了 网站后台万能密码就是在用户名与密码处都写入下列字符,如果知道管理员帐号的话直接添帐号,效果会更好! 例如我们要利用第一条就是: 用户名:"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的执行为真就行了,这是关键哟,大家可记住了!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏友弟技术工作室

SQLAlchemy简单入门

SQlAlchemy简单使用 sqlalchemy介绍 SQLAlchemy的是Python的SQL工具包和对象关系映射器,让应用程序开发人员可以使用上SQL...

405100
来自专栏Python、Flask、Django

TP踩过的坑[修改功能]前台要给input加上隐藏属性

13140
来自专栏PHP在线

mysqli_stmt::get_result 方法的替代方案

作者:西瓜玩偶(racnil070512 at hotmail dot com) 我们都知道,在mysqli库中,通过 mysqli_stmt::execut...

369120
来自专栏jouypub

修改MYSQL中group_concat的长度限制

在mysql中,有个函数叫“group_concat”,平常使用可能发现不了问题,在处理大数据的时候,会发现内容被截取了,

1.6K20
来自专栏Android机动车

单例模式的六种花式写法

单例模式是一种常用的设计模式,其定义是单例对象类只允许一个实例存在,实现的核心原理是构造函数私有化。使用单例可以节省内存开销,也是现实场景中的一种映射,比如一台...

17420
来自专栏技术专栏

慕课网Flask高级编程实战-8.用户登录与注册

在搜索书籍页面里,需要将每一条结果的作者,出版社,价格在一行展示,并以”/“分割。由于这三个属性还有可能为空,所以在html模板里处理不太方便。我们选择将这些数...

27340
来自专栏魏琼东

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET平台开发指南 - 数据访问

统一数据访问介绍          统一数据访问(Uniform Data Access,简写为UDA)用于隔离系统和数据平台,使系统可以在各种数据库平台上自由...

21880
来自专栏腾讯Bugly的专栏

Android 平台 Native 代码的崩溃捕获机制及实现

一、背景 在Android平台,native crash一直是crash里的大头。native crash具有上下文不全、出错信息模糊、难以捕捉等特点,比jav...

1.3K70
来自专栏Java架构师进阶

Mybatis的二级缓存配置

 缓存将使用LRU(Least Recently Used)最近最少使用策略算法来回收

7620
来自专栏Crossin的编程教室

像对象一样对待数据

咱们编程教室有不少同学,学完了基础课程,掌握了一定的编程能力,开始做项目了。然后很可能遇到一个问题:管理数据。课程里有讲过用文件保存数据,还有 pickle、c...

11420

扫码关注云+社区

领取腾讯云代金券