Page cover

🐧Bandit series:

một series học về linux căn bản của overthewire.org

tags: Linux


Level 0:

https://overthewire.org/wargames/bandit/bandit0.html https://overthewire.org/wargames/bandit/bandit1.html

Ở level 0 challenge sẽ giúp mình hiểu mình kết nối remote với một server thông qua giao thức ssh.

Khi đang nhập thông qua giao thức ssh ta sẽ được hỏi password để có thể truy cập vào server. Sau khi vào được server là dùng lệnh ls để liệt kê các file đang có sẵn trong folder và lệnh cat để thể hiện nội dung file ta cần đọc.

Level 1:

https://overthewire.org/wargames/bandit/bandit2.html

Sau khi có password ta dùng password để đăng nhập vào bandit01. ssh -p 2220 bandit1@bandit.labs.overthewire.org Challenge giúp ta đọc một file với kí tự đặc biệt ở đầu tên file

Level 2:

https://overthewire.org/wargames/bandit/bandit3.html

ssh -p 2220 bandit2@bandit.labs.overthewire.org Challenge này giúp ta đọc file với tên file có dấu space

Level 3:

https://overthewire.org/wargames/bandit/bandit4.html

ssh -p 2220 bandit3@bandit.labs.overthewire.org Challenge này giúp ta đọc những file bị ẩn trong folder và đọc file có kí tự đặc biệt trong tên như ở Level 1

Trong folder inhere khi sử dụng lệnh ls ta không thấy bất kì file hay folder nào hiện lên do đó ta sử dụng lênh ls -a để xem những file bị ẩn. Sau đó ta thấy file .hidden có kí tự đặc biệt ta dùng cú pháp -- .hidden để đọc file.

Level 4:

https://overthewire.org/wargames/bandit/bandit5.html

ssh -p 2220 bandit4@bandit.labs.overthewire.org Challenge này giúp ta đọc file với tag human-readable

khi sử dụng ls trong folder inhere ta thấy có rất nhiều file nếu cat từng file thì rất mất thời gian. Do đó ta sử dụng lệnh file để xem loại file. Cú pháp * sẽ duyệt qua tất cả file trong folder. Ta thấy ở file -file07 :ASCII text là file có thể đọc được. Sử dụng cat để đọc file.

Level 5:

https://overthewire.org/wargames/bandit/bandit6.html

ssh -p 2220 bandit5@bandit.labs.overthewire.org Challenge yêu cầu ta đọc file với tag human-readable, 1033 byte và not executable

Tương tự như level 4 ở đây chúng ta có rất nhiều folder do đó không thể cd từng folder mà kiếm được. Chúng ta sử dụng lệnh find. Cú pháp ./ là ta sẽ duyệt qua tất cả cả folder trong folder hiện tại, -size là kích thước file ta cần tìm, -readble là loại file có ASCII text-not -executable là file không thực thi được. Sau khi có được đường dẫn thì cdcat, cú pháp && cho phép ta thực thi 2 lệnh sau khi lệnh đầu đã được hoàn thành.

Level 6:

https://overthewire.org/wargames/bandit/bandit7.html

ssh -p 2220 bandit6@bandit.labs.overthewire.org Challenge giúp ta biết về đặc quyền của user và group trên từng file

Chúng ta sử dụng lệnh find để tìm file mà ta cần tìm với cú pháp / chúng ta sẽ duyệt toàn bộ folder trên toàn server do đó khi xuất ra màn hình sẽ có rất nhiều dòng command báo lỗi. Để khác phục ta sử dụng 2>/dev/null để bỏ qua những command báo lỗi. https://linuxhint.com/two-dev-null-command-purpose/ Với -user-group ta sử dụng để tìm user và group cần tìm. Sau đó sử dụng cdcat.

Level 7:

https://overthewire.org/wargames/bandit/bandit8.html

ssh -p 2220 bandit7@bandit.labs.overthewire.org Challenge này yêu cầu ta tìm dòng có chữ cho trước trong một file

Sử dụng lệnh grep với cú pháp -w để tìm từ mà ta cần tìm trong file.

Level 8:

https://overthewire.org/wargames/bandit/bandit9.html

ssh -p 2220 bandit8@bandit.labs.overthewire.org Challenge này yêu cầu ta tìm dòng chỉ xuất hiện duy nhất 1 lần trong file

Ở đây ta sử dụng lệnh sort để sắp xếp lại các dòng giống nhau. Sau đó sử dụng lệnh uniq -u lệnh này sẽ xuất ra màn hình dòng chỉ xuất hiện một lần duy nhất. Ở đây có cú pháp | cú pháp này sẽ lấy kết quả mà command 1 đã thực hiện sau đó thực hiện command 2.

Level 9:

https://overthewire.org/wargames/bandit/bandit10.html

ssh -p 2220 bandit9@bandit.labs.overthewire.org Challenge này yêu cầu ta xuất chuỗi human-readable strings và đứng trước có kí tự đặc biệt

Ta sử dụng lệnh strings để lọc ra các human-readable strings là các chuỗi có ASCII text sau đó sử dụng grep để tìm các string có kí tự **.

Level 10:

https://overthewire.org/wargames/bandit/bandit11.html

ssh -p 2220 bandit10@bandit.labs.overthewire.org Challenge này yêu cầu ta decode một đoạn mã đã bị encode bằng base64

Ta sử dụng lệnh base64 -d để giải mã đoạn mã đã bị mã hóa để lấy password.

Level 11:

https://overthewire.org/wargames/bandit/bandit12.html

ssh -p 2220 bandit11@bandit.labs.overthewire.org Challenge này yêu cầu ta decode một đoạn mã bị encode bằng rot13

Sau khi cat file data.txt chúng ta sẽ thấy một đoạn mã bị encode, ta có đem nó decode bằng tool trên google. Với Linux thì không có lệnh rot13 sẵn như base64. Chúng ta sẽ sử dụng lệnh tr lệnh này cho chúng ta dịch chuyển hoặc xóa các kí tự theo quy luật mà ta sắp xếp.

Level 12:

https://overthewire.org/wargames/bandit/bandit13.html

ssh -p 2220 bandit12@bandit.labs.overthewire.org Đây là một trong những level theo mình là khá khó cho beginner ở mức độ easy. Challenge này giúp ta hiểu được các dạng file nén trên Linux, cách phân biệt giữa chúng, cách nén và giải nén những loại file đó

Đầu tiên đề kêu ta tạo một thư mực trong đường dẫn /tmp ở đây ta sử dụng lệnh mkdir để tạo folder có tên là baigiai trong folder /tmp. Sử dụng lệnh cp để copy file data.txt vào đường dẫn vừa tạo, sau đó sử dụng cd để vào đường dẫn.

Sau khi cat file data.txt ra chúng ta sẽ thấy như hình ở trên đây là một file hexdump. Lệnh head sẽ xuất ra 10 dòng đầu tiên của một file do đó sẽ dễ nhìn hơn.

Lệnh xxd -r sẽ trả về giá trị binary của file hex. Ở đây ta lưu giá trị trả về vào file tên là data. Ta sử dụng lệnh file để xem loại file. Ta sẽ thấy dòng chữ gzip compressed data do đó đây là file có data được nén theo định dạng gzip.

Sử dụng mv để chuyển từ file data sang tệp data.gz Lệnh gzip -d sẽ giải nén tệp data.gz, sử dụng lệnh ls ta sẽ thấy lại file data, nhưng khi sài file ta sẽ thấy dòng thông báo mới bzip2 compressed data--> Data dạng bị nén dưới định dạng bzip2.

Tương tự như với gzip ta lặp lại các thao tác cũ.

Sau khi lặp lại các thao tác thì lúc này sau khi sử dụng file ta gặp một dòng thông báo mới. Data dạng bị nén trong định dạng tar.

Sau khi đổi file data thành tệp tar. Ta sử dụng lệnh tar xf để giải nén file tar.

Lặp lại các quá trình như trên.

Sau khi hoàn tất thì khi sử dụng lệnh file sẽ gặp lại dòng ASCII text sử dụng cat để đọc file.

Level 13:

https://overthewire.org/wargames/bandit/bandit14.html

ssh -p 2220 bandit13@bandit.labs.overthewire.org Challenge này cho ta biết ngoài cách nhập password để đăng nhập thì còn cách là sử dụng sshkey để xác thực thay cho password

Ta sẽ copy sshkey lại lưu vào một file trong máy.

Sử dụng sskey vừa lưu để đăng nhập vào Level 14.

Level 14:

https://overthewire.org/wargames/bandit/bandit15.html

ssh -p 2220 bandit14@bandit.labs.overthewire.org -i ... Challenge này giúp ta biết về localhost trên server

Sử dụng sshkey vừa nãy để đăng nhập vào server thay cho password, cú pháp -i để xác thực sshkey.

Quay lại Level 13 chúng ta vẫn còn một dữ liệu chưa xài đó là /etc/bandit_pass/bandit14 and can only be read by user bandit14. Chỉ khi nào đăng nhập vào bằng user của bandit14 chúng ta mới chạy được dữ liệu này. Sau khi truy cập và cat được file bandit14. Ta quay lại mục đích của Level này là kết nối vào localhost trên server.

Ở đây chúng ta sử dụng nc để kết nối với localhost thông qua port 30000 sau đó đưa vào password của bandit14 máy chủ sẽ trả về cho ta password của bandit15.

  • nc hay netcat là một kết nối tới host từ xa thông qua giao thức TCP/UDP

Level 15:

https://overthewire.org/wargames/bandit/bandit16.html

  • Theo mình từ đây mức độ của các challenge sẽ bắt đầu ở mức medium. ssh -p 2220 bandit15@bandit.labs.overthewire.org Challenge này sẽ giúp ta biết một cách kết nối thay cho netcat là openssl

Cú pháp s_client sẽ tạo một cái nối từ xa tới host thông qua SSL/TLS với mục đích truyền dữ liệu. Cú pháp -connect sẽ kết nối tới host và port cần truy cập.

Sau khi đã kết nối, kéo đến dòng cuối ta sẽ thấy dòng chữ Read R BLOCK ta nhập đúng password tới server thì server sẽ trả về password mới cho chúng ta.

Level 16:

https://overthewire.org/wargames/bandit/bandit17.html

ssh -p 2220 bandit16@bandit.labs.overthewire.org Challenge này giúp ta cách xem các port đang chạy trên một server và các service trên các port đó

Sử dụng nmap để quét các port trên server ở đây ta sẽ quét từ dãy 31000-32000, -sV cho ta biết các service đang chạy trên các port đó. Ở đây ta thấy 2 service đang chạy ssl do đó ta sẽ sử dụng openssl. Ở port 31518 khi ta kết nối nếu truyền vào một giá trị nó sẽ trả về đúng giá trị đó, nguyên nhân là có lệnh echo lệnh này sẽ in những dòng ta echo ra màn hình.

Ta sẽ kết nói với port 31790.

Sau khi nhập đúng password, 1 sshkey sẽ trả về như ở Level 13. Ta làm tương tự như Level 13 để lấy sshkey.

Level 17:

https://overthewire.org/wargames/bandit/bandit18.html

ssh -p 2220 bandit17@bandit.labs.overthewire.org -i ... Challenge này cho ta biết so sánh về kí tự giữa 2 file khác nhau

Một vấn đề mà mình gặp phải khi kết nối với bài này là server không nhận sshkey của mình do mình để đặc quyền file này too open.

Vì thế mình phải sử dụng lệnh chmod để chỉnh sửa lại đặc quyền của file. Ở đây là 400 là chỉ read bởi owner.

Sau khi vào được ta sẽ thấy 2 file. Sử dụng lệnh diff với cú pháp -normal output sẽ được xuất ra theo kiểu thông thường. Dòng trên là của file passwords.new và dòng dưới là của file passwords.old

  • https://chmod-calculator.com/ một trang tính toán về đặc quyền trên Linux.

Level 18:

https://overthewire.org/wargames/bandit/bandit19.html

ssh -p 2220 bandit18@bandit.labs.overthewire.org ... Challenge này cho ta biết không cần phải truy cập trực tiếp vào host thông qua ssh mà có thể kết hợp với một lệnh khác

Nếu chúng ta kết nối trực tiếp theo cách thông thường thì khi nhập xong password kết nối sẽ bị ngắt. Nguyên nhân là với file .bashrc đoạn script sẽ được thực thì khi một người dùng đăng nhập. Ở đây là ngắt kết nối với host.

Thay vì dùng ssh để truy cập trực tiếp vào server ta có thể thông qua ssh để sử dụng lệnh cat để đọc file trên server mà không phải đăng nhập trực tiếp vào.

Level 19:

https://overthewire.org/wargames/bandit/bandit20.html

ssh -p 2220 bandit19@bandit.labs.overthewire.org Challenge này cho ta thấy cách thực thi một file đặc nguyền là như thế nào

Khi ta gõ ./bandit20-do nó sẽ chạy như một câu lệnh xác định người dùng và hiển thị run a command as another user nghĩa là nó chạy 1 câu lệnh như một người dùng khác.

Sử dụng lệnh ls -la để kiểm tra đặc quyền của từng file hay folder. Ta thấy bandit20-do nằm ở group bandit19owner bandit20 do đó lệnh có thể được thực thi ở user bandit19 nhưng file sẽ được chạy dưới quyền của bandit20.

Do ./bandidt20-do chạy như một người dùng nên ta có thể thêm lệnh vào để chạy ra password.

Level 20:

https://overthewire.org/wargames/bandit/bandit21.html

ssh -p 2220 bandit20@bandit.labs.overthewire.org Challenge giúp ta cách tạo một port trên localhost

Đầu tiên ta sẽ lệnh ./suconnect lệnh này sẽ sẽ so sánh mật khẩu mà ta truyền vào ở trên port mà ta kết nối với mật khẩu ở Level 19. Nếu đúng sẽ trả về một password mới.

Ta sẽ cho input trên port là password của của Level 19, cú pháp /n sẽ không cho xuất hiện một dòng mới ở cuối output. Sử dụng | để thêm lệnh, -l port sẽ lắng nghe khi ta kết nói, -p port mà ta muốn tạo ra. Dấu & sẽ cho lệnh chạy ở phía background nghĩa là khi ta không chủ động tắt thì lệnh sẽ được chạy ngầm. Chạy một lệnh khác sẽ không ảnh hưởng đến lệnh đang chạy.

Sử dụng lệnh ./suconnect để kết nối với port mà ta đã tạo. Sau khi kiểm tra đúng sẽ trả về mật khẩu mới.

Last updated