iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
1
Security

資安0~100K只要30天系列 第 16

Day 16 - SQLi (ㄧ)

  • 分享至 

  • xImage
  •  

今天開始的幾個篇章
要來介紹一下榮登 OWASP TOP 10 第一名注入攻擊中的大宗 - SQL Injection

What is SQL ?

全名 Structured Query Language 結構化查詢語言
專門用來處理資料的存取與管理

  • 三層架構
    • Database
    • Table
    • Column

一個資料庫裡面有多張表
一張表裏面又有多個 column

table 的概念就像 Excel
一個直的稱為 column
每個橫的稱為 row
每個 row 為一組資料

  • 一定具備四個基礎行為 -> CRUD
    • C
      • create
    • R
      • read
    • U
      • update
    • D
      • delete

除了 SQL 這個語言外
還需要有一個 engine 來讓我們可以使用這些功能
現存的 SQL Engine 非常多種
這次的例子就以 MySQL 與 MariaDB 當範例

基本語法

不談多詳細
先知道怎麼用就好

在這些語法中,指令的大小寫並不影響

  • Database
    首先最一開始當然就是需要對資料庫做操作
    整體語法很直觀

    語法 說明

    | SHOW DATABASES; | 列出所有 DB |
    | CREATE DATABASE <db_name>; | 新增一個 DB |
    | USE <db_name> ; | 選擇使用該 DB |
    | DROP DATABASE <db_name> ; | 刪除一個 DB |

  • Table

    語法 說明

    | SHOW TABLES; | 列出所有 Table |
    | DROP TABLE <tb_name> ; | 刪除一個 Table |

    接下來稍微有點不同
    在 Create 一張表時
    需要同時將 column 資訊宣告出來

    CREATE TABLE <tb_name> (
        <col_name1> type,
        <col_name2> type,
        <col_name3> type,
        ...
    )
    

Select

在創建完東西後
來到了資料庫中最重要的其中一個指令
那就是 "找資料"

  • 將整張表資料都印出來
    • SELECT * FROM <tb_name>
  • 選擇特定欄位輸出
    • SELECT <col>, <col>, ... FROM <tb_name>

要記得在 SQL 中字串都只能用單引號(')包起來
雙引號是不給過的喔

然後庫名、表名、欄位名都可以用重音符(`) 包起來

where

在查詢資料時
我們不可能總是把整份文件倒出來
一定會需要某些過濾
所以就有了這個小插件
用來塞選符合我們條件的資料才印出來

SELECT *
FROM <tb_name>
WHERE <condition> AND|OR <condition> ...

order by

順序需放在 WHERE 後面
用來對資料進行排序以某 column 的資料做字典序

ORDER BY <col>, <col> ...

limit

在查詢的最後輸出前
限制要輸出的資料筆數
所以順序比 order by 更後面

LIMIT <from>, <n>
  • from
    • 從哪一筆開始
  • n
    • 輸出幾筆

Insert

  • 對特定欄位插入資料
    值需一一對應填入的欄位順序

    INSERT INTO <tb>(<col>, ...)
    VALUES (<val>, ...)
    
  • 對全部欄位都插入值
    需照著當初宣告的順序填值

    INSERT INTO <tb>
    VALUES (<val>, ...)
    

Delete

不加 where 會將整個 table 內容清空 !!!!!!!!!!!!!!!!!!!!!!!!

從某張表刪除符合條件的 row

DELETE FROM <tb>

WHERE <condition>

Update

不加 where 會將 table 中該欄位直接毀滅 !!!!!!!!!!!!!!!!!!

更新某張表中
符合條件的 row
將其中的某些 col 設定為某個值

UPDATE <tb>

SET <col>=<val>, ...

WHERE <condition>

Small End

到這邊基本語法也提的差不多了
明天開始會進入 SQLi 的主體
大家可以花些時間將上面的語法熟悉一下

這邊有一包 範例 DB
大家可以自己建起來練習看看


上一篇
Day 15 - PHP 反序列化 (二)
下一篇
Day 17 - SQLi (二)
系列文
資安0~100K只要30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言