Hướng dẫn khai thác thông tin dịch vụ SMB trong quá trình pentest (Phần 2)

tuantran

Moderator
Thành viên BQT
27/04/2017
29
76 bài viết
Hướng dẫn khai thác thông tin dịch vụ SMB trong quá trình pentest (Phần 2)
Sau khi đăng phần 1, có bạn đăng trên group hỏi là tài liệu này có đầy đủ hay không? Theo mình thì nó đã bao gồm những thứ cần thiết nhất để khai thác thông tin trên FTP và mình đã kiểm chứng qua các bài lab mà mình từng trải qua. Vậy nên mình hy vọng các bạn có thể tận dụng nó như 1 dạng cheat sheet.

Vâng, dịch vụ tiếp theo mình muốn giới thiệu với các bạn là SMB. Nó là một dịch vụ được sử dụng khá nhiều hiện nay. Ở bài này, để khai thác dịch vụ SMB thì mình vẫn dùng cấu trúc như ở bài 1. Nhưng để cho mọi thứ sinh động hơn và các bạn có môi trường để thực hành thì Legacy box trên Hackthebox là 1 box lý tưởng để kiểm chứng.

Bây giờ, chúng ta đã có lab và đã có cấu trúc, còn chần chờ gì nữa mà không vào việc thôi nào.

SERVER MESSAGE BLOCK (SMB).png

SMB là gì

Server Message Block (SMB) là một phương thức mạng được dùng để chia sẻ file, máy in và các cổng tiếp nối giữa các điểm với nhau. SMB server có thể truy cập qua nhiều công cụ command-line như là SMBclient hoặc là thông qua duyệt file trên browser. Mặc định, SMB được chạy trên 2 cổng là 139, 445.

Trước khi đi sâu vào các cách để thu thập thông tin từ SMB, việc quan trọng hơn đó là tìm hiểu về các phiên bản của SMB qua các năm và tại sao nó lại được cho là kém bảo mật.

  • SMB1 là phiên bản đầu tiên của SMB. Nó dùng gói dữ liệu 16 bit và bộ đệm của dữ liệu nhỏ, điều này làm giảm hiệu suất truyền dữ liệu. Hơn thế nữa, nó không có bất kỳ mã hóa nào trong quá trình truyền dữ liệu. Đó là nguyên nhân vì sao nó không an toàn. Ngoài ra, nó cũng rất dễ bị lợi dụng để tấn công MITM (man in the middle).
  • SMB2 là phiên bản cải thiện của SMB1 thông qua việc tăng gói dữ liệu lên 32 bit và 128 bit cho file. Thêm vào đó, dữ liệu không cần thiết truyền qua SMB được giảm đáng kể. Về bảo mật thì đã được cải thiện để ngăn chặn các cuộc tấn công MITM thông qua signing dữ liệu mặc dù vẫn chưa hỗ trợ mã hóa.
  • SMB3 được bổ sung thêm nhiều cải tiến về hiệu suất và bảo mật. Ở phiên bản này, AES (Advanced Encryption Standard) được sử dụng để mã hóa multichannel và end-to-end trong quá trình kết nối các máy chủ khác nhau.

Xác định mục tiêu có sử dụng dịch vụ SMB hay không?

Sử dụng nmap để xác định xem SMB có đang chạy trên mục tiêu cần pentest hay không thông qua lệnh:

Mã:
nmap –p 139, 445 –Pn IP

2.png

Sau khi quét ta xác định được mục tiêu có sử dụng SMB trên cổng 139, 445.

Để xác định phiên bản đang sử dụng trên SMB, ta vẫn dùng nmap với lệnh như trên nhưng thêm vào 1 cờ, đó là -sV (sV flag là cờ để scan phiên bản của dịch vụ đang được dùng):

Mã:
nmap –p 139,445 –Pn –sV IP

3.png

Trong trường hợp không thể xác định phiên bản với cờ trên, chúng ta có thể dùng wireshark để bắt gói tin và xem kết quả xem có tiết lộ gì về hostname, SMB version, system version hay bất kì thông tin gì liên quan hay không? Thủ thuật này được gọi là packet sniffing.

4.png

Ngoài ra nmap còn cung cấp cho chúng ta script sẵn để sử dụng:

auxiliary/scanner/SMB/SMB_version Metasploit module

Sau khi xác định được mục tiêu có sử dụng và đoán được phiên bản đang sử dụng thì bước tiếp theo ta tiến hành khai thác sâu hơn những thông tin bên trong dịch vụ SMB. Và vẫn như bài trước mình sẽ chia làm 2 hình thức đó là khai thác thủ công và khai thác tự động.

Khai thác thủ công

Xác định lỗ hổng đã được biết thông qua searchsploit


Với searchsploit, ta có thể kiểm tra theo cấu trúc như sau:

Mã:
searchsploit microsoft SMB [window or SMB version]

5.png

Hoặc là:

Mã:
search type:exploit platform:windows tartget:[window version]

6.png

Hoặc bạn có thể kiểm tra trực tiếp trên browser đó là https://www.exploit-db.com/, https://vuldb.com/, http://cve.mitre.org/cve/, https://nvd.nist.gov/.

Kiểm tra Null session

Null session cho phép người dùng có thể xác thực trên SMB bởi việc dùng username và password trống. Nó thường chỉ cho phép truy cập vào các chia sẻ ẩn gọi là IPC (interprocess communication). Ngoài ra các file muốn chia sẻ có thể được cấu hình thông qua phương pháp này.
Thêm vào đó, Null session có thể được dùng để khai thác nhiều thông tin hơn về host và mạng của mục tiêu, hoặc truy cập vào dữ liệu lưu trữ trong thư mục được chia sẻ. Nhưng nó chỉ được enable bật mặc định trên Window 2000 và các phiên bản cũ. Ở các phiên bản mới cũng hỗ trợ null session nhưng cần phải được cấu hình.

Để khai thác và kiểm tra xem dịch vụ smb có cho phép null session hay không, ta dùng SMBclient để xác định.

Mã:
smbclient –N –L \\\\IP

7.png

Common Credentials

Trong trường hợp null session không được hỗ trợ, chúng ta có thể thử đăng nhập bằng các common password như là admin, administrator, root, test… Điều này sẽ an toàn hơn là brute-forcing và hãy luôn luôn thử nó khi có thể nhé.

Ngoài ra, chúng ta có thể xác thực thông qua auxilliary/scanner/SMB/SMB_login Metasploit module hoặc là đơn giản là SMB://IP trên browser.

Brute force thông tin đăng nhập credentials

Kỹ thuật brute-forcing thì chắc hẳn mọi người cũng không còn xa lạ nữa nhỉ. Nó cho phép chúng ta đoán credentials để thông tin đăng nhập để truy cập vào hệ thống.

Ở đây mình thường xuyên sử dụng hydra để thực hiện brute-forcing. Trong trường hợp bạn không biết hydra là gì thì có thể google về nó. Đại loại nó cho phép bạn đoán username và password của một dịch vụ mà bạn muốn với wordlist bạn có sẵn. Nó hỗ trợ rất nhiều dịch vụ như ftp, SMB, ssh, form submit…

Lệnh để chạy hydra:

Mã:
hydra [-L users.txt or -l user_name] [-P pass.txt or -p password] -f [-S port] SMB://10.10.10.4

8.png

Ngoài ra SMB credentials có thể brute forced bằng việc sử dụng module của nmap.

Khai thác tự động

Nmap script


Với tất cả các bước manual ở trên thì nmap có hỗ trợ script để đơn giản hóa việc khai thác thông tin của các bạn.

Nmap cung cấp cho chúng ta các script như là:
  • SMB-enum-share: Enum SMB share trong smn server.
  • SMB-brute: thực hiện brute-force mật khẩu trên SMB server
  • SMB-system-info: thu thập thông tin hệ thống thông qua SMB/netbios
  • SMB-vuln-smn/cve*: xác định xem SMB server có bất kỳ lỗ hổng nào đã được biết trước đó hay không.
Thông thường, khi sử dụng nmap để thu thập thông tin SMB hay là thu thập các lỗ hổng đã biết trước đó có thể khai thác được trên server, người ta luôn luôn scan dưới dạng smn-enum* và SMB-vuln*

Mã:
nmap –p 139,445 –script SMB-enum*, SMB-vuln* IP

9.png

Một khi đã xác thực thành công thì bước tiếp theo được thực hiện đó là:

  • Xác định thư mục đang làm việc.
  • Files và folders có thể truy cập để đọc hay viết bởi người dùng hiện tại hay không?
  • Liệu SMB có cấp quyền vào các thư mục đang được các dịch vụ khác sử dụng hay không?
Chúng ta có thể sử dụng SMBclient để thực hiện điều này.

Mã:
smblient [-U username] [-P password or -N for no password] \\\\X.X.X.X\\share

Trong trường hợp bạn đã login được vào SMB server thì mình có một bí kíp dành cho bạn: các command thông dụng khi dùng với SMB server

10.png

Ngoài SMBclient là tool thông dụng hỗ trợ cho việc khai thác thì mình có list ở đây các tool khác để các bạn có thể sử dụng thêm như:

  • Enum4linux
  • SMBmap
  • Impacket
  • Crackmapexec
Mình có tìm thấy 1 bảng giải thích đơn giản về các tool này.

11.png

OK vậy là đến đây cũng kha khá kiến thức rồi nhỉ? Hi vọng các bạn có thể nắm được cách khai thác thông tin trên SMB và có thể thử ngay trên Legacy HTB machine.

Nếu có thắc mắc hay có câu hỏi gì thì cứ hỏi ở dưới phần comment!!! Hoặc nếu các bạn muốn làm về dịch vụ nào đó thì cũng comment dưới bài và mình sẽ cố gắng viết về dịch vụ đó nhé !!

Happy Hacking!!! :p
 
Chỉnh sửa lần cuối bởi người điều hành:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Thẻ
enumeration information gathering pentest smb smb enumeration
Bên trên