首页 » 瞎搞 » 正文

网站后台万能密码'or'='or' 原理

admin 15年前 (2009-12-21) 瞎搞 6677 views 0

扫一扫用手机浏览

弱口令百科http://baike.baidu.com/view/98458.html?wtp=tt


许多菜鸟都不清楚'or'='or'为什么可以直接进网站的后台,下面就来讲解下给大家吧!原理是这样的:(以下全部以asp为例子)许多网站把密码放
到数据库中,在登陆验证中平常都用以下sql查询语句去查找数据库,sql=select*fromuserwhereusername='username'
  许多菜鸟都不清楚'or'='or'为什么可以直接进网站的后台,下面就来讲解下给大家吧!
原理是这样的:(以下全部以asp为例子)
许多网站把密码放到数据库中,在登陆验证中平常都用以下sql查询语句去查找数据库,
 
sql="select*fromuserwhereusername='"&username&"'andpass='"&pass&'",
反之则不行,假如用户提交的用户名密码和数据库里面的一样就让你登录。
 
这里多嘴两句,or是一个逻辑运算符,作用是在断定两个条件的时候,只要其中一个条件成立,那么
等式将会成立.而在语言中,是以1来代表真的(成立).那么在这行语句中,原语句的"and"验证将不再
继承,而因为"1=1"和"or"令语句返回为真值.。(其实也好体味,英文or是或者的意思,也就是说。
这个或者那个中有一个是对的,那么整句话就对的,那我还管你后面的and甘什么呢?)好了,
我们依据sql这个特色结构一个特殊的用户名和密码来绕过它的验证,就用我结构的那个'or''=',
用户名和密码都是'or''=',我们来看看放到全体程序中会是什么样子。
 
sql="select*fromuserwhereusername=''or''=''andpass=''or''=''(看重,or前面和=后面都不是
双引号,而是两个单引号,查询语句里面没有双引号,双引号只是让里面的变量变成字符而已,
我们查询的时候双引号中的变量就被我们提交的数据所取代),好了,现在整句话的意思是:从数
据库的user表中查找的用户名是空(两个单引号之间没东西固然是空了:))或者空等于空。废
话,因为空固然等于空了,所以程序就觉得你提交的数据是合法的,于是就放你通过拉and后面
的密码验证都不要了。
有人问我,是不是惟独这个'or''='才可以绕过验证呢?NO,youarewrong!
 
依据这个原理我就可以随意结构我爱好的语句,比如aweige'or'aweige'<>'骆驼
这样放进去就变成了用户名是aweige或者aweige不等于骆驼,废话,aweige固然不不等于骆驼拉
难道还等于骆驼啊??于是就给我放行了。大家也可以依据自己的爱好去结构这样的语句,我就。
不多说了。我想说的是修补法子。
 
修补法子有两(固然还有别的,这只是我自己常用的):
 
1,对输入的内容验证
 
可以加一些脚原先验证客户端输入的内容进行验证
 
2,特殊字符特殊是单引号的过滤。
 
我们也看到了,上面的结构语句中,都有但引号的存在,也有一些其它的字符,因此,只要我们
系统就会安全一点了,吧这些东西都过滤掉。
 
可以用replace语句对但引号和其他特殊字符进行过滤,比如
 
replace(username,"'","''")'把单引号转换为两个单引号
 
replace(username,"<>","")'把不等号转换为空
这样的话用户提交的结构语句就没用了。
========
后记
========
 
1,以上的马脚只是登录的问题,假如再精心结构,还能得到全系统统的全部数据,我曾用过自
己结构的union语句拿到金梅电影的所有钻石会员和黄金会员,搞得我电影都看不完,大家去认真
钻研学习一下asp和sql数据库查询语言的话可能还会得到比我还多的东西哦
2,现在的系统除了一些对比烂的之外,根本上都已经修补好了这个马脚,所以,远离清楚了,
通过别的法子来得到我们想要的东西,大家就去学习新的东西。

发表评论