技术笔记

万能密码绕过总结

字号+ 作者:国光 来源:转载 2016-12-19 14:53 我要评论( )

PHP+Mysql 这种情况下万能密码绕过的条件是: $a=selecet*fromadminwhereusername=$usernameandpassword=$password 1 $ a = selecet*fromadminwhereusername=$user......

PHP+Mysql

这种情况下万能密码绕过的条件是:

并且没有检查过滤变量,如果过滤的话 'or and #-- 就无法绕过了,但是如果只是开启GPC的话 还是可以通过 注释 来绕过的

利用方法:

1.逻辑运算绕过

'or''=''or''=''or''=

某些情况下数据库不会认为 空=空  是成立的,这样的话 就带个1=1之类的

2.mysql里的注释语句绕过

'or 1=1 /*

'or 1=1 #

'or 1=1 %23 (防止 # 在地址栏中变成空格,所以这里使用 # 的URL编码)

ASP+Access

前提条件:

利用方法:

1.逻辑运算绕过(与楼上的php+mysql相同)

2.mysql里的注释语句绕过

-- :双连字符,这些注释语句要与执行的代码处在同行,也可另起一行。从双连字符开始到行尾均为注释

or 1=1--

我们来思考一个这样的问题:

php的站 如果是GPC魔术引号开启的话,对特殊字符进行了转义,这样我们使用万能密码还可以绕过吗?

答案是:可以绕过的  下面我们来慢慢分析其中的原理

如果sql语句是这样的话:

那么账号输入:'or 1=1/*密码输入:随意输入
这样sql语句就成了
select*from where name=''or 1=1/*' and password='随意输入的字符'
/*是mysql的注释符,和C/C++ 中的 // /* */ 的注释作用相似,这样的话后面的语句就被注释掉了,这样就是为什么在密码处可以随意输入的原因了。

假设GPC木有开启,那么 where name=' ' or 1=1(/*后面语句都被注释掉了)
name=' ' 中name=空  这个逻辑值为 假 而后面的 1=1 为真,所以整体就成为了假 or 真,最终逻辑值为 真 所以就绕过进后台了。

假设GPC开启的时,那么久对单引号进行了转换。语句就变成了 where name=' \' or 1=1 在仔细看下和楼上输入的有什么区别,无非是多了个 \  。而name=' \'与 name=' ' 的逻辑值一样,都为 假。而1=1 依然为真 所以总的逻辑值依然为 真  依然可以绕过进后台。
所以总的来说,php网站的万能密码可以这样写:'or 1=1/* GPC转换是否开启对它没有任何影响!


本文来自: 蜗蜗侠's Blog-关注网络安全 http://blog.icxun.cn/Note/460.html

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 万能密码的原理

    万能密码的原理

    2016-11-27 14:44

网友点评
暂时未开启评论功能~