# 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 ``` ![Screenshot (72)](https://hackmd.io/_uploads/BJZJBhAK1e.png) --- ## 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` ![image](https://hackmd.io/_uploads/B1uI_CTKke.png) --- ## 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` ![image](https://hackmd.io/_uploads/Bk933MRYye.png) --- ## 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` ![image](https://hackmd.io/_uploads/ryPEOmCY1e.png) --- ## 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` ![image](https://hackmd.io/_uploads/Hyeqr4RFJe.png) Sau khi quét, xác định cổng hợp lệ: ![image](https://hackmd.io/_uploads/HkhVGBCKJl.png) ![image](https://hackmd.io/_uploads/Bkh5MHAKJe.png) Gửi mật khẩu và lưu SSH key: ```sh openssl s_client -connect localhost:31790 -quiet ``` ![image](https://hackmd.io/_uploads/BJZJBhAK1e.png) 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 ``` ![image](https://hackmd.io/_uploads/ryIb5hAtye.png) ![image](https://hackmd.io/_uploads/rJlQqnCYyg.png) ## level 17->18 ![image](https://hackmd.io/_uploads/ByxEt3Atyg.png) 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 ![Screenshot (75)](https://hackmd.io/_uploads/SJIho3AKyx.png) 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` ![image](https://hackmd.io/_uploads/BJ10ya0K1l.png) 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`. ![Screenshot (78)](https://hackmd.io/_uploads/Syng4pRYJg.png) --- ## Level 19 → 20 **Password:** `cGWpMaKXVwDUNgPAVJbWYuGHVn9zl3j8` ![image](https://hackmd.io/_uploads/SJEi4T0YJe.png) 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: ![Screenshot (82)](https://hackmd.io/_uploads/Byc4E00Fkl.png) - Sử dụng file `bandit20-do` để đọc mật khẩu: ![Screenshot (83)](https://hackmd.io/_uploads/HkVLHCRFkg.png) --- ## Level 20 → 21 **Password:** `0qXahG8ZjOVMN9Ghs7iOWsCfZyXOUbYO` ![image](https://hackmd.io/_uploads/H1RcBARY1e.png) 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 đó: ![Screenshot (92)](https://hackmd.io/_uploads/SyXnh00Fkg.png) - Nhập pass hiện tại vào cổng lắng nghe: ![Screenshot (88)](https://hackmd.io/_uploads/S1HYsCCKye.png) - Kết quả trên cổng kết nối: ![Screenshot (89)](https://hackmd.io/_uploads/rys5o00F1x.png) ## 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/`. ![Cron Jobs](https://hackmd.io/_uploads/SkjURR0YJx.png) 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. ![Finding Password](https://hackmd.io/_uploads/ryquNy19yg.png) Đọc file tạm thời để lấy mật khẩu: ![Reading Password](https://hackmd.io/_uploads/BkHeByy5yl.png) --- ## Level 22 → 23 **Password:** `tRae0UfB9v0UzbCdn9cY0gQnds9GF58Q` ![Level 22](https://hackmd.io/_uploads/ryLUB11qye.png) 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: ![MD5 Hash](https://hackmd.io/_uploads/ByxbO115yx.png) - `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: ![Getting Password](https://hackmd.io/_uploads/B12ejzk5yx.png) --- ## Level 23 → 24 **Password:** `0Zf11ioIjMVN551jX3CmStKLYqjk54Ga` ![Level 23](https://hackmd.io/_uploads/r1tLTWy5yg.png) 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: ![Script Analysis](https://hackmd.io/_uploads/H1MIkEJ5yx.png) 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): ![Executing Script](https://hackmd.io/_uploads/H1BA_vJ5yx.png) Đọc file `/tmp/passbandit24` để lấy mật khẩu: ![Reading Password](https://hackmd.io/_uploads/Skteovk5kx.png) --- ## Level 24 → 25 **Password:** `gb8KRRCsshuZXI0tUuR6ypOFjiZbf3G8` ![Level 24](https://hackmd.io/_uploads/S1_r3vkcJl.png) 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. ![Connecting to Port](https://hackmd.io/_uploads/S1znkdy5Je.png) 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 ``` ![Brute Force](https://hackmd.io/_uploads/r1HjiOy5kx.png) --- ## Level 25 → 26 **Password:** `iCi86ttT4KSNe1armKiwbQNmB3YJP3q4` ![Level 25](https://hackmd.io/_uploads/B1VcyY1cJg.png) Bài yêu cầu tìm cách đăng nhập bằng khóa RSA: ![RSA Key](https://hackmd.io/_uploads/B1xwNt1ckx.png) Sau khi đăng nhập, ta bị *logout* ngay lập tức do file `/usr/bin/showtext`. Phân tích file: ![Showtext Analysis](https://hackmd.io/_uploads/ry9z9Yk91g.png) 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 ``` ![Exploiting More](https://hackmd.io/_uploads/B1Mck51q1g.png) Lấy mật khẩu từ `/etc/bandit_pass/bandit26`: ![Reading Password](https://hackmd.io/_uploads/rJfI451ckx.png) --- ## Level 26 → 27 **Password:** `s0773xxkk0MXfdqOfPRVr9L3jJBUOgCZ` ![image](https://hackmd.io/_uploads/SkDVS5J9Je.png) 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`. ![Screenshot (124)](https://hackmd.io/_uploads/HJP6d9yqyg.png) --- ## Level 27 → 28 **Password:** `upsNCc7vzaRDx6oZC6GiR6ERwe1MowGB` ![image](https://hackmd.io/_uploads/S14St91cyg.png) 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: ![Screenshot (128)](https://hackmd.io/_uploads/rypAys1cJe.png) --- ## Level 28 → 29 **Password:** `Yz9IpL0sBcCeuG7m9uQFt8ZNpS4HZRcN` ![image](https://hackmd.io/_uploads/HkM7xiy5yg.png) - Xem lịch sử commit bằng `git log`: ![Screenshot (132)](https://hackmd.io/_uploads/rJksEjJ51l.png) - Checkout commit chứa pass: ```bash git checkout <mã commit> ``` ![Screenshot (133)](https://hackmd.io/_uploads/H1kk8iyq1l.png) --- ## Level 29 → 30 **Password:** `4pT1t5DENaYuqnqvadYs1oE4QLCdjmJ7` ![image](https://hackmd.io/_uploads/r1Qj8jJq1l.png) - Kiểm tra nhánh (branch) bằng `git branch -a`: ![Screenshot (135)](https://hackmd.io/_uploads/B1gm9s191e.png) - Chuyển sang nhánh đúng: ```bash git checkout <tên nhánh> ``` ![Screenshot (136)](https://hackmd.io/_uploads/r1iQci19ye.png) --- ## Level 30 → 31 **Password:** `qp30ex3VLz5MDG1n91YowTv4Q8l7CDZL` ![image](https://hackmd.io/_uploads/HJ5D9j1c1e.png) - Kiểm tra tag bằng `git tag`: ![image](https://hackmd.io/_uploads/rJeeRj1c1e.png) - Hiển thị nội dung tag: ```bash git show <tên tag> ``` --- ## Level 31 → 32 **Password:** `fb5S2xb7bRyFmAvQYQGEqsbhVyJqhnDy` ![image](https://hackmd.io/_uploads/ByFNCi19yx.png) - Tạo file với nội dung đúng: ![Screenshot (142)](https://hackmd.io/_uploads/SyTIx3kckl.png) - Đẩy lên repo: ```bash git add -f <file> git commit -m "Added required file" git push origin master ``` ![Screenshot (144)](https://hackmd.io/_uploads/B1mEa7lc1l.png) ![Screenshot (143)](https://hackmd.io/_uploads/BkwHaXe9ke.png) --- ## Level 32 → 33 **Password:** `3O9RfhqyAlVBEZpVb6LYStshZoqoSx5K` ![image](https://hackmd.io/_uploads/H1gmkIx91x.png) 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: ![Screenshot (148)](https://hackmd.io/_uploads/r1cNdDe51g.png) - Kiểm tra user bằng `id` hoặc `whoami`: ![Screenshot (150)](https://hackmd.io/_uploads/HyjLuPl9Je.png) --- ## Level 33 → 34 **Password:** `tQdtbs5D5i2vJwkO8mEyYEyTL8izoeJ0` ![image](https://hackmd.io/_uploads/rJH5uvx5yl.png) ![Screenshot 2025-02-17 144859](https://hackmd.io/_uploads/BkI4nwgcyg.png)