iT邦幫忙

2026 iThome 鐵人賽

DAY 5
0
Security

仿生人是否會夢見網頁山羊? 資安小白的30天Webgoat闖關紀錄系列 第 5

[DAY5]仿生人是否會夢見網頁山羊? --SQL基本指令

  • 分享至 

  • xImage
  •  

今天我們便要開始正式打Webgoat了! 至於為什麼不從A1開始 而是從A3...... 老實說單純就是因為看到injection這個詞 感覺注入很酷就從這裡開始了

今天我們會從前四題手打題開始,畢竟想要能夠讓資料庫照你想像的方式工作 就必須要先學習命令他的方法

SQL是什麼?

SQL全名為Structured Query Language,是在1980年代制定的標準電腦語言,用於管理關聯式資料庫中的資料並進行操作,本身是以直欄(COLUMN)以及橫列(ROW)結合成的表格進行儲存,對於表格內資料的型態有嚴格的要求
以下是Webgoat自帶的SQL資料庫示意圖

https://ithelp.ithome.com.tw/upload/images/20260918/20184109d3xTeEuEHY.png

SQL有什麼指令?

SQL中的指令主要能分5大類

DQL(Data Query Language)-資料查詢語言

顧名思義,用於查詢資料用的語言,某些教材會將他歸類在DML中,但有些則是像這樣分一大類出來給他,原因是雖然感覺有對資料進行操作,但是實際上不會對資料進行任何改動,SELECT(查詢)被單獨分在了這一類,同時也是資料庫中大部分時間最常用的語言

SELECT基本用法

SELECT [資料所在的直欄] FROM [表格名稱] WHERE [條件];--查詢在資料表格中符合條件的某直欄

DML(Data Manipulation Language)-資料操作語言

用於對於資料庫中存有的資料進行變更,指令有INSERT(新增),UPDATE(更新),DELETE(刪除),操作的基本上都是橫列

INSERT基本用法

INSERT INTO [表格名][橫列1,橫列2,橫列3...] VALUES [資料1,資料2,資料3...];--在表格內輸入新的一組資料

UPDATE基本用法

UPDATE [表格名] SET [列名]=[你想要設定的值] WHERE [條件]; --更新表個內某橫列的數值,如果沒有加WHERE則會把整張表的數據都改成一樣的值

DELETE基本用法

DELETE FROM [表格名] WHERE [條件]; --刪除表格內的某一橫列,如果沒有加WHERE則會把整張表的數據都刪除

DDL(Data Definition Language)-資料定義語言

用於對資料庫本身結構進行修改,指令有CREATE(創造),ALTER(修改結構),DROP(刪除整個表格),操作的基本上都是直欄

CREATE基本用法

CREATE TABLE [表格名]([直欄一名][資料類別], [直欄二名][資料類別],[直欄三名][資料類別]… );--用於創造資料表格

ALTER基本用法

ALTER TABLE [表格名] ADD [直欄名][資料類別]; --在資料表中新增一欄資料
ALTER TABLE [表格名] DROP COLUMN [直欄名]; --在資料表中刪除一欄資料

DROP的使用方法

DROP TABLE [表格名];--刪除整個表格

DCL (Data Control Language)-資料控制語言

用來管理使用者的權限,指令有GRANT(給予)和REVOKE(收回)

GRANT使用方法

GRANT [指令名] [表格] TO [使用者名];--給予使用者使用某個指令的權限

REVOKE使用方法

REVOKE [指令名] [表格] FROM [使用者名];--收回使用者使用某個指令的權限

TCL(Transaction Control Language)-交易控制語言

用於確保相關聯的資料庫交易中資料的安全與一致性,指令有COMMIT(確認更改),ROLLBACK(回到上次更改)以及SAVEPOINT(設置存檔點),但這次解Webgoat時基本上應該不太會碰到,所以先簡單帶過

COMMIT使用方法

BEGIN;
...(執行DML指令)...
COMMIT;--確認修改,永久送入資料庫

ROLLBACK使用方法

BEGIN;
...(執行DML指令)
ROLLBACK;--把剛剛的指令全部撤銷,回復原狀

SAVEPOINT使用方法

BEGIN;
...(執行DML指令1)...
SAVEPOINT STEP1;
...(執行DML指令2)...
ROLLBACK TO STEP1;--回退到存檔點STEP1;
COMMIT;--只確認修改並送入從開始到STEP1的內容;

現在,我們已經大致了解SQL指令了,讓我們進入實戰!

SQL基本指令實戰

題目1

https://ithelp.ithome.com.tw/upload/images/20260918/201841097BGf6MmyhY.png

https://ithelp.ithome.com.tw/upload/images/20260918/20184109g6X3PqyLW2.png

可以看到這題題目是叫我們要從名叫employees的這張表格中找出Bob Franco的department的資料,所以我們要使用SELECT,並由於資料表格中first_namelast_name的資料都有,且沒有人和他有相同的地方,所以都可以使用,這裡用first_name當範例

SELECT department FROM employees WHERE first_name = 'Bob'

https://ithelp.ithome.com.tw/upload/images/20260918/20184109stINb6hoAP.png

雖然說只是開胃小菜,但這題我感覺還是有小重點可以畫,那就是後面包著Bob的單引號(')
在SQL中,除非橫列是特殊名稱(例如SELECT這種和指令名相同的),不然可以省略代表列位的雙引號(")
但字串資料必須被單引號包著('),不然SQL會以為他是某個指令,欄位名或是變數而報錯

題目2

https://ithelp.ithome.com.tw/upload/images/20260918/20184109Sj8UeYKPxd.png

這題告訴我們要把employees這張表格中Tobi Barnett的department改成Sales,所以我們要使用DML中的UPDATE

UPDATE employees SET department = 'Sales' WHERE first_name = 'Tobi'

https://ithelp.ithome.com.tw/upload/images/20260918/20184109eGFVvLJTTa.png

一樣記得,字串一定要包單引號!!!

題目3

https://ithelp.ithome.com.tw/upload/images/20260918/201841091NnQys0voK.png

這一題要我們在employees這張表格中加入叫做phone的新的一個直欄,所以我們要使用DDL中的ALTER,同時由於之前說過SQL對欄位中資料型態有嚴格要求,所以還給了我們varchar(20)

ALTER TABLE employees ADD phone (varchar(20))

https://ithelp.ithome.com.tw/upload/images/20260918/2018410961g2gCNMY5.png

題目4

https://ithelp.ithome.com.tw/upload/images/20260918/20184109ebC7RilI6R.png

這題要我們把grant_rights這張表中的指令權限給到使用者unauthorized_user,所以我們要使用GRANT,這裡用SELECT當範例

GRANT SELECT ON grant_rights TO unauthorized_user

https://ithelp.ithome.com.tw/upload/images/20260918/20184109qjEIIQ5viY.png

這裡有個小知識,GRANT本身不被算作一種權限而是一種動作,所以沒有GRANT GRANT這種東西,如果要允許別人下放權限的話,後面要加上WITH GRANT OPTION,
然後由於資料庫使用者通常會自動被當成一種識別字(Identifier)識別,所以不需要加'

這樣我們就解完SQL指令相關的四題啦! 明天就要開始正式進入SQL injection了

明日內容: SQL injection 原理介紹!


上一篇
[DAY4]仿生人是否會夢見網頁山羊?--ffuf功能及ATTACK mode介紹
下一篇
[DAY6]仿生人是否會夢見網頁山羊?--SQL injection基本原理
系列文
仿生人是否會夢見網頁山羊? 資安小白的30天Webgoat闖關紀錄9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言