Liệt kê các port đang mở trên Kali Linux Sử dụng câu lệnh netstat dưới quyền root để hiển thị các thông tin về kết nối.-t, -u hiển thị các kết nối sử dụng TCP và UDP -l chỉ hiển thị các
Trang 1BÁO CÁO THỰC HÀNH
Môn học: An Toàn Mạng Tên chủ đề: Lab1 GETTING COMFORTABLE WITH LINUX
2 NỘI DUNG THỰC HIỆN: 1
Trang 2BÁO CÁO CHI TIẾT
A Tổng quan về Kali Linux
1 Sử dụng lệnh which để xác định vị trí lưu trữ của lệnh pwd
2 Sử dụng lệnh locate để xác định vị trí lưutrữ wce32.exe
3 Sử dụng lệnh find để xác định bất kỳ tậptin (không phải thư mục) đã đượcsửa đổi vào ngày trước đó, KHÔNG thuộc sở hữu của user root và thực thilệnh ls -l trên chúng KHÔNG được sử dụng các lệnh pipeline/chaining
/home/mrlucky/Downloads : tên thư mục nơi muốn tìm kiếm
-type f : loại là tập tin
-mtime 1 : 1 ngày về trước
! -user root : Không thuộc sở hữu của user root
-exec ls -l : thực hiện câu lệnh ls -l
{} : kí hiệu cho tập tin được tìm thấy
Trang 3\; kết thúc câu lệnh
B Quản lí các dịch vụ
4 Liệt kê các port đang mở trên Kali Linux
Sử dụng câu lệnh netstat dưới quyền root để hiển thị các thông tin về kết nối.-t, -u hiển thị các kết nối sử dụng TCP và UDP
-l chỉ hiển thị các socket ở dạng LISTEN
-p hiển thị PID và tên của tiến trình
-n hiển thị địa chỉ và port dưới dạng số thay vì tên dịch vụ hay tên miền
grep LISTEN lọc ra các dòng có chữ LISTEN (các port đang lắng nghe)
5 Tại sao khi kiểm tra dịch vụ SSH có đang chạy hay không (Hình 10), kết quảhiển thị 2 dòng, trong khi dịch vụ HTTP (Hình 13), kết quả chỉ có 1 dòng
SSH có thể sử dụng nhiều phiên bản tiến trình hoặc giao thức khác nhau để lắngnghe kết nối, dẫn đến việc hiển thị nhiều dòng
HTTP có thể chỉ lắng nghe trên một giao thức hoặc cổng, nên kết quả thường chỉhiển thị một dòng
Trang 46 Ngăn dịch vụ SSH khởi động cùng lúc với hệ thống
systemctl dùng để quản lý các dịch vụ trong hệ thống
SSH sẽ không tự động khởi động khi hệ thống khởi động Tuy nhiên, SSH vẫn tồntại, và có thể khởi động nó thủ công bất cứ khi nào cần bằng cách sử dụng lệnhsudo systemctl start ssh
C Command line
7 Lịch sử các lệnh thực ra được lưu trữ ở đâu? Liệt kê các ưu, nhược điểm
khi thực hiện lưu trữ lại các lệnh đã nhập?
~/ bash_history file nơi lưu trữ lịch sử các câu lệnh đã sử dụng
Pros:
- Tăng hiệu quả khi dùng CLI vì có thể tái sử dụng lại các câu command đãdùng trước đó
- Nếu xảy ra lỗi trong quá trình dùng CLI có thể dễ dàng xem lại các câu
command trước đó để tìm ra nguyên nhân
- Admin có thể theo dõi được các câu command mà người dùng đã dùng đểtránh các hành vi nguy hiểm
- Khi mở thêm shell khác thì lịch sử sẽ vẫn được ghi tiếp tục, giúp ích cho việctheo dõi các command trong suốt cả 1 project
Cons:
- Vì lịch sử của các câu command đã dùng được lưu tại ~/ bash_history filenên nếu attacker có thể xâm nhập vào hệ thống được thì cũng có thể truycập vào file lịch sử
- Các dữ liệu như mật khẩu, private keys khi sử dụng trong câu command cóthể bị rò rỉ
8 Có cách nào để ngăn chặn việc lưu trữ lịch sử lệnh hay không? Nếu có, hãy
mô tả cách làm
Trang 5- Thiết lập biến môi trường để không lưu lịch sử Sử dụng biến môi trườngHISTFILE để trỏ đến tệp không tồn tại hoặc giá trị rỗng.
Thêm dòng sau vào tệp ~/.bashrc
export HISTFILE=
- Tắt lịch sử lệnh
Thiết lập biến HISTSIZE và HISTFILESIZE về 0
Thêm các dòng sau vào tệp ~/.bashrc
export HISTSIZE=0
export HISTFILESIZE=0
HISTSIZE kiểm soát số lượng lệnh được giữ trong bộ nhớ lịch sử, còn
HISTFILESIZE kiểm soát số lượng lệnh được lưu trong tệp lịch sử Bằngcách đặt cả hai giá trị này bằng 0, Bash sẽ không lưu bất kỳ lệnh nào
- Ngăn lịch sử lệnh ở phiên làm việc hiện tại
- Dùng phím mũi tên lên xuống để sử dụng lại các câu lệnh cũ
- Sử dụng câu lệnh history để xem lịch sử câu lệnh Và sử dụng !n, n là số thứ
tự của câu lệnh trong lịch sử
- Sử dụng Ctrl + R để tìm kiếm các lệnh đã sử dụng trong lịch sử
- Tạo alias để sử dụng tắt các câu dụng thường sử dụng
10 .Như đã biết, khi sử dụng toán tử “>” để xuất kết quảvô tập tin, nếu tập tin
đã tồn tại, nội dung trong tập tin sẽ bị thay thế bằng nội dung mới Vậy, có cáchnào để hoàn tác lại quá trình này hay không? Nếu có, hãy mô tả cách làm
Không có cách hoàn tác trực tiếp khi bị ghi đè
Có một số cách để hạn chế hoặc khắc phục như:
- Sử dụng toán tử >> thay vì >
- Sử dụng các hệ thống quản lý phiên bản như Git, Github,
11 Sử dụng lệnh cat cùng với lệnh sort để sắp xếp lại nội dung của tập tin
/etc/passwd, sau đó lưu kết quả vào một tập tin mới có tên passwd_new và
thực hiện đến số lượng dòng có trong tập tin mới
Trang 6Sử dụng lệnh cat để xem nội dung của tập tin /etc/passwd, đồng thời sử dụng sort
để sắp xếp lại nội dung và lưu vào tập tin mới passwd_new
Sử dụng lệnh wc để đếm có bao nhiêu dòng trong passwd_new
12 Sử dụng tập tin /etc/passwd, trích xuất tên user và home directory cho tất
cả user có shell được thiết lập là /usr/sbin/nologin Lưu ý, chỉ sử dụng 1 dòng
● Trường 1: Tên user
● Trường 2: Mật khẩu (thường là một ký hiệu thay vì mật khẩu thực)
● Trường 3: ID user (UID)
● Trường 4: ID nhóm (GID)
● Trường 5: Thông tin mô tả người dùng
● Trường 6: Thư mục home của user
● Trường 7: Shell đăng nhập của user (ví dụ: /bin/bash, /usr/sbin/nologin)
$7 == “/usr/sbin/nologin”: trường thứ 7 trong được lọc là /usr/sbin/nologin
Trang 7print: dùng để in ra các thông tin cần trả về trong kết quả
/etc/passwd : vị trí tập tin thực thi lệnh awk
13 Tải tập tin access_log.txt.gz tại
(https://github.com/blakduk/ahihi/raw/master/access_log.txt.gz), sau đó thực hiệnliệt kê danh sách các địa chỉ IP và số lượng tương ứng, thực hiện sắp xếp giảmdần
Sử dụng lệnh wget để tải tập tin về
Sử dụng lệnh gunzip để giải nén tập tin
Sử dụng awk để in ra tham số đầu tiên được lọc trong tập tin access_log.txtLệnh uniq -c dùng để đếm số lần xuất hiện của IP address
Lệnh sort -nr dùng để xếp số lần xuất hiện theo thứ tự giảm dần
Trang 814 Hãy cho biết đường dẫn thực thi của 2 lệnh wget và curl?
Sử dụng câu lệnh which để hiển thị đường dẫn thực thi
15 Theo bạn, trong 2 lệnh tải về wget và curl, lệnh nào ưu việt hơn? Giải thích?
wget:
Ưu điểm:
Đơn giản: wget để tải về tệp từ các giao thức HTTP, HTTPS, và FTP,
dễ sử dụng cho mục đích tải dữ liệu về
Tải tệp hàng loạt: wget có thể tải nhiều tệp, toàn bộ trang web hoặcthậm chí cả thư mục từ server bằng cách sử dụng tùy chọn như -r(recursive)
Khả năng tiếp tục tải: Nếu quá trình tải bị gián đoạn, wget có thể tiếptục từ nơi bị dừng lại mà không cần tải lại toàn bộ tệp
Hoạt động trong nền: wget có thể chạy trong nền mà không cần ngườidùng theo dõi tiến trình, hữu ích cho tải về tệp lớn
Hỗ trợ nhiều giao thức: Ngoài HTTP, HTTPS, FTP, curl còn hỗ trợnhiều giao thức khác như SCP, SFTP, LDAP, và POP3
Trang 9Tương thích với nhiều hệ thống: curl có thể được sử dụng không chỉtrên Linux, mà còn trên nhiều hệ điều hành khác như macOS vàWindows.
Đầu ra tùy chỉnh: curl có thể xử lý dữ liệu trả về từ server và cung cấpnhiều tùy chọn đầu ra tùy chỉnh
16 Có thể sử dụng lệnh curl để thay đổi các HTTP header được hay không?
Nếu được, cho ví dụ?
Sử dụng tùy chọn -H (hoặc header) của lệnh curl để thiết lập một HTTP headertùy chỉnh
VD:
Thay đổi User-Agent header
curl -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
https://example.com
Thiết lập nhiều header
curl -H "User-Agent: MyApp" -H "Accept: application/json"https://example.com
D Các công cụ cần thiết
17 Máy chủ nào sẽ đóng vai trò là server ?
- Máy chủ chạy lệnh nc -lvnp 4444 sẽ đóng vai trò là server, chờ kết nối từphía máy khách(client) Ở đây là máy Window 10
18 Máy chủ nào sẽ đóng vai trò là client ?
- Máy Kali Linux sẽ đóng vai trò là client
Trang 1019 Nếu khai báo lệnh ‘nc -lvnp 4444’ thì thật chất port 4444 được mở ở máy nào?
- Nếu khai báo lệnh “nc -lvnp 4444” thì thật chất port 4444 được mở ở máychạy lệnh này Ở đây là máy Window đang mở port 4444 để lắng nghe từmáy Kali Linux
20 Thực hiện chuyển tập tin wget.exe từ máy Kali sang máy Windows 10
Trang 1221 Thực hiện lại chi tiết kịch bản Reverse Shell và Bind Shell sử dụng netcat.
● Bind Shell
- Máy window 10 mở cổng 4444
- Linux kết nối đến port trên win 10 và chiếm quyền thực thi cmd
Trang 13- Kết nối thành công
- Tiến hành khai thác máy win 10 thông qua điều khiển command line
Trang 14● Reverse Shell
22 So sánh ưu nhược điểm khi sử dụng Bind Shell và Reverse shell Khi nào nên
sử dụng Bind Shell? Khi nào nên sử dụng Reverse Shell?
Trang 15★ Bind Shell
➢ Ưu điểm :
+ Dễ thực hiện trong môi trường nội bộ: Nếu cả hai máy (máy tấncông và máy đích) nằm trong cùng một mạng hoặc môi trườngnội bộ, việc thiết lập một bind shell có thể dễ dàng vì không gặpnhiều vấn đề về tường lửa hoặc NAT
+ Không yêu cầu máy tấn công mở port: Máy tấn công không cầnphải mở cổng và chờ kết nối, thay vào đó chỉ cần kết nối đếncổng của máy đích
+ Có thể ra vào máy nạn nhân bất cứ lúc nào
➢ Nhược điểm:
+ Bị chặn bởi tường lửa: Máy đích cần mở một cổng để lắng nghekết nối từ xa Điều này có thể bị chặn bởi tường lửa hoặc cơ chếbảo mật của hệ thống
+ Có thể dễ bị phát hiện: Khi mở một cổng trên máy đích, hệ thốngbảo mật hoặc quản trị viên mạng có thể phát hiện và ngăn chặn.+ Cần phải biết địa chỉ IP của máy nạn nhân
★ Reverse Shell
➢ Ưu điểm:
+ Vượt qua tường lửa: Máy đích thực hiện kết nối ra ngoài, điềunày giúp bypass nhiều cơ chế tường lửa hoặc NAT vì kết nốioutbound thường ít bị kiểm soát chặt chẽ hơn inbound
+ Ẩn mình: Do kết nối được bắt đầu từ máy đích, phương phápnày khó bị phát hiện hơn trong nhiều trường hợp, đặc biệt nếumáy đích được phép truy cập ra ngoài mạng
+ Kẻ tấn công không cần biết địa chỉ IP của máy nạn nhân
➢ Nhược điểm:
+ Yêu cầu máy tấn công mở port: Máy tấn công cần mở cổng đểlắng nghe kết nối, điều này có thể làm cho máy tấn công dễ bịphát hiện hoặc bị chặn bởi các chính sách bảo mật của chínhmáy tấn công
+ Khi ngắt kết nối cần cần chạy lại lệnh netcat trên máy nạn nhân
- Hoàn cảnh sử dụng:
+ Bind Shell: Phù hợp trong các môi trường mà máy đích có thể mởcổng và không bị hạn chế bởi tường lửa hoặc NAT Tuy nhiên, nó dễ bịphát hiện và gặp vấn đề về tường lửa
+ Reverse Shell: Phù hợp hơn khi cần vượt qua tường lửa hoặc khi máyđích bị hạn chế về kết nối inbound Reverse shell giúp máy tấn cônggiữ trạng thái "ẩn" tốt hơn, nhưng yêu cầu máy tấn công phải chuẩn bị
để nhận kết nối
Trang 1623 Thực hiện trao đổi tập tin, bind shell, reverse shell sử dụng Powershell.
● Trao đổi tập tin
- Tiến hành truyền nội dung của tệp 22521360.txt qua cổng 4444 bằng netcat
- Máy win10 nhận dữ liệu từ Linux và truyền vào file FilefromKali.txt
Trang 17- Dữ liệu trong file 2252136.txt ở Linux
- Dữ liệu mà window nhận được trong file FilefromKali.txt
● Bind Shell
Trang 19● Reverse Shell
- Máy Kali làm server và tiến hành mở kết nối
- Win 10 tiến hành thiết lập tới kết nối và sử dụng thuộc tính -e của netcat
- Kết nối thành công
Trang 20- Tiến hành khai thác
Trang 2124 Ngoài netcat và Powershell có cách nào tạo ra được Bind Shell và ReverseShell không? Cho ví dụ.
Ngoài netcat và PowerShell, có một số cách khác để tạo bind shell vàreverse shell, bao gồm:
- Sử dụng ngôn ngữ lập trình: Python, Ruby, Perl, PHP
- Công cụ và kỹ thuật khác: Bash, Socat OpenSSL, Java
- Các kỹ thuật web: WebSockets, Server-Sent Events(SSE)
+ Sử dụng Python để tạo server và client
- Chạy code python ở máy win10 làm server và khai thác máy linux
Trang 22- Chạy code client ở máy Kali Linux
- Máy win10 đã khai thác được Linux sau khi thiết lập kết nối thành công
- Code:
Server.py
Trang 23HẾTCảm ơn thầy đã theo dõi bài làm của nhóm chúng em