Kali Linux Căn Bản – Bài 12: Giao thức SMB và cách khai thác lỗi dựa vào SMBmap và SMBclient; giới thiệu impacket và những tài liệu tự học privilege escalation

Xin chào,

Hôm nay chúng ta sẽ ôn lại sơ lược về giao thức SMB, giới thiệu công cụ SMBmap, SMBclient, Impacket và một số tài liệu tự học privilege escalation. Bài hôm nay thuần về lý thuyết và chỉ mang tính chất giới thiệu là chính vì mình cũng không tìm được nguồn thực hành, nên mình sẽ chỉ nói sơ lược để các bạn nắm nội dung căn bản thôi. Sau này, khi mình ổn định và quay trở lại và tìm được nguồn thực hành, mình sẽ hướng dẫn chi tiết lại từng phần cho các bạn.


1 – Giao thức SMB là gì?

SMB, viết tắt của Server Message Block Protocol, là một giao thức theo dạng server-client. Có nghĩa là server sẽ là máy chủ cung cấp dịch vụ và client sẽ là thiết bị cá nhân có nhu cầu sử dụng dịch vụ. 

Giao thức SMB được sử dụng cho các mục đích như truy cập dữ liệu, file, ảnh, nhạc, máy in được kết nối bên trong mạng và những tài nguyên khác được lưu trữ bên trong mạng. Các SMB servers sẽ là nơi lưu trữ các tài nguyên, và các máy clients khi cần sử dụng những tài nguyên này sẽ truy cập vào các SMB servers.

Giao thức SMB còn được biết tới như là một giao thức response-request (phản hồi-truy vấn). Nghĩa là SMB servers và SMB clients sẽ gửi nhiều gói tin qua lại với nhau để thiết lập một kết nối TCP.

H1.1

Sau khi kết nối thành công đến SMB server, các clients sẽ tương tác với servers thông qua các câu lệnh.

Các bạn liên tưởng thế này, ở series Linux Căn Bản, các bạn truy cập vào máy thực hành thông qua giao thức SSH, tùy vào account mà bạn dùng để truy cập và phân quyền được cấp cho account đó, mà bạn sẽ được phép hoặc không được phép truy cập vào một số tài nguyên của hệ thống.

Với SMB, tất cả các tài nguyên cho phép SMB clients truy cập sẽ được lưu trữ trong một directory. Khi SMB clients truy cập vào SMB servers, họ sẽ truy cập vào directory chứa các tài liệu được chia sẻ. Tùy vào phân quyền được cấp, phần lớn trường hợp những SMB clients có phân quyền thấp sẽ chỉ được phép đọc dữ liệu được lưu trữ bên trong directory mà thôi, chứ không được phép xóa, chỉnh sửa, thay đổi, nội dung được lưu trữ bên trong directory SMB. Ngoài ra, trong một số trường hợp SMB clients còn được cấp quyền thực thi câu lệnh bên trong SMB server.

Giao thức SMB đã được tích hợp vào hệ điều hành Windows từ Windows 95. Samba là một phiên bản mở rộng, mã nguồn mở của giao thức SMB, cho phép giao thức SMB có thể chạy trên những hệ thống Linux.

2 – SMBmap

SMBmap là một công cụ trên giao diện dòng lệnh, dù để thu thập thông tin và được sử dụng hướng đến các hệ thống chạy Samba. SMBmap hoàn toàn miễn phí và được tích hợp sẵn vào hệ điều hành Kali Linux. SMBmap cho phép pentesters có thể tìm các share drives trong hệ thống mạng của mục tiêu (cách gọi khác của các directories trên SMB servers chứa tài nguyên dùng để chia sẻ cho SMB clients), phân quyền của share drives đó, những nội dung nào được chia sẻ, thực thi câu lệnh từ xa, v.v

Nói cách khác, SMBmap có thể được sử dụng để tìm những dữ liệu nhạy cảm được lưu giữ trong các SMB servers và được share rộng rãi với các SMBclients.

Để truy cập vào SMBmap trên Kali Linux, đầu tiên, bạn cần mở terminal và gõ dòng lệnh sau:

smbmap

Lúc này, hệ thống sẽ trả về cho chúng ta cách sử dụng smbmap

H2.1

Để tìm tất cả các share drives có trong mạng của mục tiêu, chúng ta sẽ sử dụng câu lệnh sau:

smbmap -H <địa-chỉ-ip>

Trong trường hợp chúng ta biết được username và password được dùng để truy cập vào tài nguyên được lưu trữ bên trong SMBserver, account này cũng cho phép người đăng nhập có thể thực thi câu lệnh. Vậy chúng ta sẽ sử dụng câu lệnh sau:

smbmap -u "<username>" -p "<password>" -H <IP-mục-tiêu> -x "<câu-lệnh-cần-chạy>"

Các bạn hãy sử dụng thông tin hiện ra để trả lời các câu hỏi trong task 20 nhé.

3 – SMBclient

Bên cạnh SMBmap, chúng ta còn có thể sử dụng SMBclient để truy cập vào những tài nguyên bên trong của một SMB server. SMBclient cũng là một công cụ dòng lệnh miễn phí và được tích hợp sẵn vào Kali Linux.

Để sử dụng smbclient, chúng ta sẽ gõ câu lệnh sau:

H3.1

Để truy cập vào hướng dẫn sử dụng công cụ SMBclient, chúng ta sẽ sử dụng câu lệnh sau:

man smbclient
H3.2

Hai chức năng được mình sử dụng nhiều nhất trên SMBclient là put và get.

Get cho phép bạn download file từ SMBserver về máy Kali. Cú pháp như sau:

get <tên-file-cần-download>

Put cho phép bạn upload file từ máy Kali lên SMBserver. Cú pháp như sau:

put <tên-file-cần-upload>

Các bạn hãy sử dụng những thông tin hiện ra khi chạy câu lệnh “man smbclient” để trả lời những câu hỏi ở task 21 nhé.

4 – Impacket

Impacket là một tập hợp những đoạn scripts được viết bằng ngôn ngữ Python và được sử dụng để tấn công những giao thức mạng phổ biến được sử dụng trên hệ điều hành Windows. Những đoạn scripts này cho phép pentesters có thể thu thập thông tin người dùng, lấy hashes, leo thang đặc quyền, v.v.

Bạn nào muốn tìm đọc source code của Impacket, có thể tham khảo tại trang Github sau.

Các bạn cũng có thể tham khảo trang sau để xem cách các công cụ impacket được sử dụng khi tấn công một mục tiêu chạy Windows như thế nào.

5 – Một số tài liệu tham khảo tự học privilege escalation (leo thang đặc quyền)

Leo thang đặc quyền là một chủ đề rất rộng, và có vô số cách thức khác nhau có thể sử dụng để leo thang đặc quyền sau khi xâm nhập. Ở task 23 có một số trang khá hay các bạn có thể tham khảo.

General:

https://github.com/swisskyrepo/PayloadsAllTheThings (A bunch of tools and payloads for every stage of pentesting)

Linux:

https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/ (a bit old but still worth looking at)

https://github.com/rebootuser/LinEnum (One of the most popular priv esc scripts)

https://github.com/diego-treitos/linux-smart-enumeration/blob/master/lse.sh (Another popular script)

https://github.com/mzet-/linux-exploit-suggester (A Script that’s dedicated to searching for kernel exploits)

https://gtfobins.github.io (I can not overstate the usefulness of this for priv esc, if a common binary has special permissions, you can use this site to see how to get root perms with it.)

Windows:

https://www.fuzzysecurity.com/tutorials/16.html  (Dictates some very useful commands and methods to enumerate the host and gain intel)

https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerUp (A bit old but still an incredibly useful script)

https://github.com/411Hall/JAWS (A general enumeration script)

Cá nhân mình khi học priv escaltion, chủ yếu mình sẽ học từ các nguồn sau:

https://www.udemy.com/course/windows-privilege-escalation/

https://www.udemy.com/course/windows-privilege-escalation-for-beginners/

https://www.udemy.com/course/linux-privilege-escalation-for-beginners/

https://www.udemy.com/course/linux-privilege-escalation/

Và mình thực hành với 2 room sau:

https://tryhackme.com/room/windows10privesc

https://tryhackme.com/room/linuxprivesc


Xin cám ơn các bạn đã theo dõi,

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