# Challenge-3-OTW: Overthewire - Bandit
## Level 0 -> 1
**Pass:** `bandit0`
### Tóm tắt:
Mật khẩu của level tiếp theo nằm trong file `readme` trong thư mục gốc.
### Lệnh sử dụng:
```bash
ls
cat readme
```
---
## Level 1 -> 2
**Pass:** `ZjLjTmM6FvvyRnrb2rfNWOZOTa6ip5If`
### Tóm tắt:
Mật khẩu nằm trong file tên `-`.
### Lệnh sử dụng:
```bash
cat ./-
cat < -
```
---
## Level 2 -> 3
**Pass:** `263JGJPfgU6LtdEvgfWU1XP5yac29mFx`
### Tóm tắt:
Tìm mật khẩu trong một file có tên `spaces in this filename`.
### Lệnh sử dụng:
```bash
cat "spaces in this filename"
cat spaces\ in\ this\ filename
```
---
## Level 3 -> 4
**Pass:** `MNk8KNH3Usiio41PRUEoDFPqfxLPlSmx`
### Tóm tắt:
Tìm mật khẩu trong một file ẩn nằm trong thư mục `inhere`.
### Lệnh sử dụng:
```bash
cd inhere
ls -la
cat .hidden
```
---
## Level 4 -> 5
**Pass:** `2WmrDFRmJIq3IPxneAaMGhap0pFhF3NJ`
### Tóm tắt:
Tìm mật khẩu trong một file nằm trong thư mục `inhere`, chỉ có một file có thể đọc được.
### Lệnh sử dụng:
```bash
file ./*
cat ./-file đúng định dạng-
```
---
## Level 5 -> 6
**Pass:** `4oQYVPkxZOOEOO5pTW81FB8j8lxXGUQw`
### Tóm tắt:
Tìm mật khẩu trong một file nằm trong thư mục `inhere`, file có kích thước 1033 bytes, không thực thi được.
### Lệnh sử dụng:
```bash
find . -type f ! -executable -size 1033c
cat ./-file tìm thấy-
```
---
## Level 6 -> 7
**Pass:** `HWasnPhtq9AVKe0dmk45nxy20cvUa6EG`
### Tóm tắt:
Tìm mật khẩu trong một file thuộc user `bandit7` và group `bandit6`, có kích thước 33 bytes.
### Lệnh sử dụng:
```bash
find / -type f -size 33c -user bandit7 -group bandit6 2>/dev/null
cat /-file tìm thấy-
```
---
## Level 7 -> 8
**Pass:** `morbNTDkSW6jIlUc0ymOdMaLnOlFVAaj`
### Tóm tắt:
Tìm dòng chứa từ khóa `millionth` trong file `data.txt`.
### Lệnh sử dụng:
```bash
cat data.txt | grep millionth
```
---
## Level 8 -> 9
**Pass:** `dfwvzFQi4mU0wfNbFOe9RoWskMLg7eEc`
### Tóm tắt:
Tìm giá trị chỉ xuất hiện một lần trong file `data.txt`.
### Lệnh sử dụng:
```bash
cat data.txt | sort | uniq -u
```
---
## Level 9 -> 10
**Pass:** `4CKMh1JI91bUIZZPXDqGanal4xvAg0JM`
### Tóm tắt:
Tìm chuỗi có dạng `==` trong file `data.txt`.
### Lệnh sử dụng:
```bash
strings data.txt | grep ==
```
---
## Level 10 -> 11
**Pass:** `FGUW5ilLVJrxX9kMYMmlN4MgbpfMiqey`
### Tóm tắt:
Giải mã `base64` từ file `data.txt`.
### Lệnh sử dụng:
```bash
base64 -d data.txt
```

---
## Level 11 -> 12
**Pass:** `dtR173fZKb0RRsDFSGsg2RWnpNVj3qRr`
### Tóm tắt:
Giải mã mã hóa `ROT13` từ file `data.txt`.
### Lệnh sử dụng:
```bash
cat data.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m'
```
---
## Level 12 -> 13
**Pass:** `7x16WNeHIi5YkIhWsfFIqoognUTyj9Q4`
### Tóm tắt:
File `data.txt` là file `hexdump` được nén nhiều lần. Giải nén để lấy mật khẩu.
### Lệnh sử dụng:
```bash
mktemp -d
cp data.txt /tmp/
xxd -r data.txt data1
file data1
gunzip data1.gz
bzip2 -d data1.bz2
tar -xvf data1
...
cat data8
```
## Level 13 -> 14
Mật khẩu nằm trong một file có quyền chỉ đọc bởi user `bandit14`. Cách tiếp cận:
1. Dùng SSH key có sẵn để truy cập vào user `bandit14`:
```sh
ssh -i ssh.private bandit14@localhost
```
2. Đọc file chứa mật khẩu.
Mật khẩu tiếp theo: `FO5dwFsc0cbaIiH0h8J2eUks2vdTDwAn`

---
## Level 14 -> 15
Mật khẩu của level tiếp theo có thể nhận được bằng cách gửi mật khẩu hiện tại đến cổng `30000` trên `localhost`.
Dùng lệnh `nc` (Netcat):
```sh
nc localhost 30000
```
Sau đó nhập mật khẩu hiện tại.
Mật khẩu tiếp theo: `MU4VWeTyJk8ROof1qqmcBPaLh7lDCPvS`

---
## Level 15 -> 16
Tương tự bài trước, nhưng lần này cần sử dụng **SSL/TLS** qua cổng `30001`.
Dùng OpenSSL:
```sh
openssl s_client -connect localhost:30001
```
Hoặc:
```sh
nc --ssl localhost 30001
```
Mật khẩu tiếp theo: `8xCjnmgoKbGLhHFAZlGE5Tmu4M2tKJQo`

---
## Level 16 -> 17
Cổng chứa mật khẩu nằm trong khoảng `31000-32000`, chỉ có một cổng hợp lệ, các cổng còn lại chỉ phản hồi lại nội dung gửi vào.
**Các bước thực hiện:**
1. Dùng `nmap` để quét các cổng mở:
```sh
nmap -p 31000-32000 localhost
```
2. Kiểm tra dịch vụ chạy trên từng cổng bằng:
```sh
nmap -A -p 31000-32000 localhost
```
3. Xác định cổng có **SSL/TLS** (không phải echo).
4. Gửi mật khẩu hiện tại đến cổng đó bằng `netcat`.
5. Lưu SSH key được trả về vào file tạm, cấp quyền và sử dụng để SSH vào `bandit17`.
Mật khẩu tiếp theo: `kSkvUpMQ7lBYyCM4GBPvCvT1BfWRy0Dx`

Sau khi quét, xác định cổng hợp lệ:


Gửi mật khẩu và lưu SSH key:
```sh
openssl s_client -connect localhost:31790 -quiet
```

Lưu SSH key và cấp quyền:
```sh
chmod 600 /tmp/bandit17_key
```
Đăng nhập:
```sh
ssh -i /tmp/bandit17_key bandit17@localhost
```


## level 17->18 
bài cho ta biết mật khẩu nằm trong passwords.new là dòng khác biệt duy nhất giữa 2 file password old và new level này còn có 1 note rằng nếu mình vào bandit 18 và được trả về byebye thì nó liên quan đến bandit19

sau khi tìm hiểu và tham khảo thì em biết được lệnh diff sẽ cho ta biết rằng dòng thứ mấy khác dòng thứ mấy và cho ta thấy
## Level 18 → 19
**Password:** `x2gLTTjFwMOhQ8oWNbMN362QKxfRqGlO`

Bài cho biết pass của level tiếp theo nằm trong homedir nhưng file `.bashrc` đã bị sửa để tự động đăng xuất khi SSH vào.
- Giải pháp: Sử dụng `bash --noprofile` để tránh chạy `.bashrc`.

---
## Level 19 → 20
**Password:** `cGWpMaKXVwDUNgPAVJbWYuGHVn9zl3j8`

Bài cho biết pass được lưu trong `/etc/bandit_pass`, nhưng cần sử dụng file nhị phân `bandit20-do` với quyền setuid để đọc file đó.
- Kiểm tra quyền:

- Sử dụng file `bandit20-do` để đọc mật khẩu:

---
## Level 20 → 21
**Password:** `0qXahG8ZjOVMN9Ghs7iOWsCfZyXOUbYO`

Bài cung cấp một tệp setuid mở cổng mạng và trả về mật khẩu khi nhập đúng password của level hiện tại.
- Dùng `nc` để lắng nghe kết nối:
```bash
nc -nlvp <port>
```
- Mở một terminal khác để kết nối đến cổng đó:

- Nhập pass hiện tại vào cổng lắng nghe:

- Kết quả trên cổng kết nối:

## Level 21 → 22
**Password:** `EeoULMCra2q0dSkYj561DX7s1CpBuOBt`
Bài yêu cầu kiểm tra chương trình tự động thực thi từ file `cron`. Để xem các câu lệnh nào đang chạy, truy cập thư mục `/etc/cron.d/`.

Sau khi kiểm tra, ta phát hiện mật khẩu nằm trong file `bandit22`, và nó đã cấp quyền để tự động đẩy vào một file tạm thời.

Đọc file tạm thời để lấy mật khẩu:

---
## Level 22 → 23
**Password:** `tRae0UfB9v0UzbCdn9cY0gQnds9GF58Q`

Bài này tương tự Level trước, nhưng có thêm ghi chú: *"Xem các tập lệnh shell do người khác viết là một kỹ năng rất hữu ích."*
Sau khi phân tích script, ta nhận thấy nó sử dụng MD5 để hash chuỗi:

- `whoami` trả về `bandit22`.
- `md5sum` băm giá trị đó thành chuỗi 32 ký tự.
- `cut -d ' ' -f 1` lấy phần băm MD5.
Ta cần nhập `I am user bandit23` để nhận mật khẩu:

---
## Level 23 → 24
**Password:** `0Zf11ioIjMVN551jX3CmStKLYqjk54Ga`

Tương tự bài trước, ta kiểm tra `/etc/cron.d/`, phát hiện một script sử dụng biến `$myname` để xác định owner:

Ta tạo một file bash để copy mật khẩu:
```bash
#!/bin/bash
cat /etc/bandit_pass/bandit24 > /tmp/passbandit24
```
Sau đó, đổi tên file thành `.sh`, copy vào thư mục `/var/spool/bandit24/foo/` (hãy chờ 1 lúc để script chạy):

Đọc file `/tmp/passbandit24` để lấy mật khẩu:

---
## Level 24 → 25
**Password:** `gb8KRRCsshuZXI0tUuR6ypOFjiZbf3G8`

Bài này có một *daemon* lắng nghe tại cổng `30002`. Ta cần nhập mật khẩu `bandit24` và 4 số mã PIN.

Viết script thử 10,000 mã PIN:
```bash
#!/bin/bash
for i in {0000..9999}; do
echo "gb8KRRCsshuZXI0tUuR6ypOFjiZbf3G8 $i" >> /tmp/try.txt
done
```
Chạy script, sau đó dùng `nc` để gửi dữ liệu:
```bash
cat /tmp/try.txt | nc localhost 30002
```

---
## Level 25 → 26
**Password:** `iCi86ttT4KSNe1armKiwbQNmB3YJP3q4`

Bài yêu cầu tìm cách đăng nhập bằng khóa RSA:

Sau khi đăng nhập, ta bị *logout* ngay lập tức do file `/usr/bin/showtext`.
Phân tích file:

Ta can thiệp bằng cách thu nhỏ terminal để chặn lệnh `more`, sau đó mở trình chỉnh sửa bằng cách nhập `v`, rồi chạy:
```bash
:set shell=/bin/bash
:sh
```

Lấy mật khẩu từ `/etc/bandit_pass/bandit26`:

---
## Level 26 → 27
**Password:** `s0773xxkk0MXfdqOfPRVr9L3jJBUOgCZ`

Sau khi vào Bandit26, bài yêu cầu lấy mật khẩu của level 27 từ file `bandit27-do`.

---
## Level 27 → 28
**Password:** `upsNCc7vzaRDx6oZC6GiR6ERwe1MowGB`

Bài cung cấp một repo Git tại `ssh://bandit27-git@localhost/home/bandit27-git/repo` (cổng 2220). Password của `bandit27-git` giống với `bandit27`.
- Clone repo:
```bash
git clone ssh://bandit27-git@localhost:2220/home/bandit27-git/repo
```
- Tìm file chứa mật khẩu:

---
## Level 28 → 29
**Password:** `Yz9IpL0sBcCeuG7m9uQFt8ZNpS4HZRcN`

- Xem lịch sử commit bằng `git log`:

- Checkout commit chứa pass:
```bash
git checkout <mã commit>
```

---
## Level 29 → 30
**Password:** `4pT1t5DENaYuqnqvadYs1oE4QLCdjmJ7`

- Kiểm tra nhánh (branch) bằng `git branch -a`:

- Chuyển sang nhánh đúng:
```bash
git checkout <tên nhánh>
```

---
## Level 30 → 31
**Password:** `qp30ex3VLz5MDG1n91YowTv4Q8l7CDZL`

- Kiểm tra tag bằng `git tag`:

- Hiển thị nội dung tag:
```bash
git show <tên tag>
```
---
## Level 31 → 32
**Password:** `fb5S2xb7bRyFmAvQYQGEqsbhVyJqhnDy`

- Tạo file với nội dung đúng:

- Đẩy lên repo:
```bash
git add -f <file>
git commit -m "Added required file"
git push origin master
```


---
## Level 32 → 33
**Password:** `3O9RfhqyAlVBEZpVb6LYStshZoqoSx5K`

Khi vào shell, các lệnh bị in hoa và bị từ chối. Giải pháp:
- Nhập `$0` để thoát shell:

- Kiểm tra user bằng `id` hoặc `whoami`:

---
## Level 33 → 34
**Password:** `tQdtbs5D5i2vJwkO8mEyYEyTL8izoeJ0`

