@horseluke 我是说admin' or '1'='1' /*这个不行。。。多了一个'号就不行了?这个是什么原因?
2012-04-25 14:26 | horseluke ( 普通白帽子 | Rank:116 漏洞数:18 | Realize the dream in earnest.)
@pfdz (1)原SQL注入语句是这样的:select * from users_admin where userid='【输入字符串1】' and pwd='【输入字符串2】'。(2)你那个的话就变成了:select * from users_admin where userid='admin' or '1'='1' /*' and pwd='123'。成为了一个存在错误注释的SQL。(3)洞主所使用的万能密码并非是注释掉后面的SQL运算,似乎是利用了操作符优先级关系:select * from users_admin where userid='admin' or '1'='1 /*' and pwd='123'。(http://dev.mysql.com/doc/refman/5.1/zh/functions.html#operator-precedence )。有点神奇啊,同求解释...
2012-04-25 14:55 | horseluke ( 普通白帽子 | Rank:116 漏洞数:18 | Realize the dream in earnest.)
@pfdz 用搜索引擎再度搜索“MYSQL AND OR 优先级”,然后本机用EXPLAIN EXTENDED + SHOW WARNINGS试验,发现确实是优先级问题,因为and高于or,所以select * from users_admin where userid='admin' or '1'='1 /*' and pwd='123'就会变成select * from users_admin where userid='admin' or ('1'='1 /*' and pwd='123')。参考:(1)http://www.2cto.com/database/201203/122589.html (2)http://bbs.chinaunix.net/thread-1046414-1-1.html。
2012-04-25 15:32 | horseluke ( 普通白帽子 | Rank:116 漏洞数:18 | Realize the dream in earnest.)
@pfdz 2012-04-25 14:26的这个已经回答了你啊:“(2)你那个的话就变成了:select * from users_admin where userid='admin' or '1'='1' /*' and pwd='123'。成为了一个存在错误注释的SQL。”,完整的注释符一定要是这样子的:/**/,单行注释是“-- ”
2012-04-25 15:36 | horseluke ( 普通白帽子 | Rank:116 漏洞数:18 | Realize the dream in earnest.)