# eViewer

## Phân tích
Chall này cho phép đọc cái file, các file tồn tại được list ở dưới

Thử đọc các file

Tuy nhiên đến file `index.php` thì không có quyền truy cập

Thử path traversal, ở đây mình đã đọc được file `/etc/passwd`

## Khai thác
Đọc được `/flag.txt` ngay rùi

**Flag:** `CHH{P4thf1nd3r_c2950b5b7b9bacc956bd15a64e063ee5}`
# Cookie Comic

## Phân tích
Web này dùng để xem ảnh như 1 album

Click vào xem thì thấy link ảnh được truyền vào từ url

Vậy đọc `/etc/passwd` ở đây xem sao, đọc thành công chứng tỏ web bị path traversal

## Khai thác
Cuối cùng là lấy flag
**Flag:** `CHH{C00k13C0m1c_c7087fe6a5e365f200ee2a6266801e7b}`
# COMB

## Phân tích
Web này hiển thị thông tin CV của người dùng tên là John Doe, để lấy được flag thì phải login vào tài khoản của người này

Dùng dirsearch tìm các dir

File `robots.txt` cho mình biết thêm thông tin về file `comb.php`

Vì `robots.txt` chỉ có tác dụng đối với Search Engine của trình duyệt, còn mình là người mà :))))), vậy nên ta sẽ đọc được file này
Password được leak, nhập email vào để tìm thui

Có nhiều kết quả được trả về, đối chiếu với mail của John và ta có password là `football24`

## Khai thác
Login vào để lấy flag thôi

**Flag:** `CHH{C0MBL34kD47a_ccd963d7b20c0247c23abea0cfad452a}`
# Pin Rate Limit

## Phân tích
Chall này yêu cầu nhập mã Pin để login

Chỉ được login tối đa 5 lần, nếu quá 5 lần thì tài khoản sẽ bị khóa

Source
```php
if (!isset($_SESSION['attempts'][$user_ip])) {
$_SESSION['attempts'][$user_ip] = 0;
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$user_pin = $_POST['pin'] ?? '';
if ($_SESSION['attempts'][$user_ip] >= $max_attempts) {
header('HTTP/1.1 403 Forbidden');
echo "You've reached the limit of request you can send to us";
exit;
}
if ($user_pin) {
$stored_pin = trim(file_get_contents($secure_file));
if ($user_pin === $stored_pin) {
$message = file_get_contents("/flag.txt");
} else {
$_SESSION['attempts'][$user_ip]++;
$message = "Incorrect PIN. Attempts remaining: " . ($max_attempts - $_SESSION['attempts'][$user_ip]);
}
} else {
$message = "Please enter a PIN.";
}
}
```
Ở đây, dựa vào biến `$_SESSION['attempts'][$user_ip]` để đếm số lần login, vậy chỉ cần xóa cookie đi là có thể bruteforce mà không lo bị khóa acc. Còn một cách khác là dùng `X-Forwarded-For: [ip]`.
## Khai thác
Dùng intruder của Burp để brute force

Lấy flag và submit

**Flag:** `CHH{P1nRa7e1m1t_744bd40cbd620e858f964b2c0dce32ad}`
# My Deploy

## Phân tích

Web này có các chức năng upload file zip, sau đó giải nén zip



Thử upload file php xem sao


Vậy web không thực hiện bất cứ filter nào
## Khai thác
```php
<?php
system("cat /flag*");
?>
```

**Flag:** `CHH{N1yD31510y_e530130e4219392abc657b00c9d36fef}`
# NSLookup

## Phân tích
Web này thực hiện phân giải tên miền, nhập vào domain và nhận được kết quả như hình

Ở đây dùng nslookup để phân giải, liên quan đến các hàm thực thi lệnh hệ thống. Vì vậy ta sẽ thử OS command injection

## Khai thác
Đọc file flag thui. Nhưng mà, các lệnh đọc file như `ls, cat, head, tail, less`, kí tự `*` đều bị filter

Vậy thì dùng `dir`

Ròi, lấy flag thui

**Flag:** `CHH{N5l00kupM00r3_ad90f2108249601a41f7a3e5e96e2abf}`
# Repay Bank

## Phân tích
Chall này cần login thành công để lấy được flag

Ở phần `Blogs` của web có thông tin về mật khẩu của người dùng. Mỗi user sẽ được cấp mật khẩu mặc định là `Repay@2024`, username có dạng `[chữ cái đầu của họ].[tên]`

Ở phần `About us` có thông tin về các thành viên của bank này

Từ đây, mình có danh sách username
```text
s.fergus
c.shaun
d.sophie
b.hugo
k.steven
```
Có thể thử bruteforce theo mật khẩu mặc định.
## Khai thác

**Flag:** `CHH{R3payB4nk_393d275a0e06cd299e57efe085fe4912}`
# System Monitor

## Phân tích
Vừa vào đã bắt đăng nhập rồi.

Vì bài tên System Monitor có vẻ liên quan đến tài khoản `admin:admin`. Đem đi thử thì truy cập được

Nó cho xem các file log, các package cập nhật


Ban đầu mình nghĩ là đọc file thì sẽ dính path traversal, cơ mà thử khai thác mãi không thu được gì.
Khi hết giải mình nhận ra là đọc file cũng có thể dùng các lệnh. Test ngay

Ở burp collab có nhận được HTTP request, chứng tỏ có thể inject os command

## Khai thác


**Flag:** `CHH{Sy5t3mM0n17or_6e2df7d32ffe2b24598b0263cba6a3ed}`
# Curriculum vitae

## Phân tích
Vẫn là cv của John Doe, và chúng ta phải đăng nhập thành công của tài khoản của ông này

Lúc này, `robots.txt` không cung cấp được thông tin gì hữu ích lắm, chỉ là 1 file hello

Xem source thì mình có được hint về tool CUPP, tool này sẽ dựa vào những thông tin ta cung cấp để tạo ra bộ mật khẩu từ những thông tin đó.

## Khai thác

Với mật khẩu `Doejohn9007` thì login thành công

Ở đây cho phép update thông tin cv ở dạng json

Thử update ở file `test.php` ban đầu thành công

Và tạo 1 web shell để đọc flag


**Flag:** `CHH{Curr1culu111vit4e_580b65c1fed4045496db362d04e18b2f}`
# My Blog

## Phân tích

Site này chỉ cho phép localhost truy cập các link

Bypass bằng `X-Forwarded-For`

Tiếp tục click vào các link để xem có gì không, web yêu cầu login nên đương nhiên phải có tài khoản mật khẩu

Và chúng ta có hint cũng không giống hint lắm :(((. Vậy phải tiếp tục recon thôi

Dùng dirsearch để tìm các folder và file ẩn
```cmd
dirsearch -u http://103.97.125.56:30414/ -e "*" --header "X-Forwarded-For: 127.0.0.1"
```
Vì chạy dirsearch quá lâu và toàn sập, nên mình sẽ quét bằng Burpsuite, lấy wordlist ở `dirsearch/db/dicc.txt`

Sau khi chờ đợi mòn mỏi, thu được file backup.sql có giá trị


Đi tìm password của admin

Password được mã hóa ở dạng Bcrypt. Dùng hashcat để crack
```cmd
hashcat -a 0 -m 3200 hashes.txt /usr/share/wordlists/rockyou.txt -w 3 -O
```

Vậy tìm được pass của admin là `princess`. Đem đi login sẽ được chuyển đến giao diện Textpattern


Ở chức năng upload file, file php vẫn upload thành công. Vậy là có thể rce


## Khai thác
Upload webshell và có được flag

**Flag:** `CHH{Bl0gT3xtP4tt3rn_ecf2bd4b48d36dab42c7868e3543649b}`