前言
当渗透测试进入内网后,面对复杂的内网域环境,首先需要了解当前所处的网络环境,例如判断当前机器的的角色,当前机器所处位置区域,以及当前网络环境的拓扑结构等。因此,我们需要对当前内网环境进行信息搜集。
0x01 域环境判断
查看网卡详细信息
通过查看网卡的主DNS后缀信息,一般情况下域环境机器会显示域信息(luckysec.cn),而工作组环境机器显示为空。
代码语言:javascript复制ipconfig /all
查看系统详细信息
通过查看系统详细信息,根据显示当前域信息(luckysec.cn)可以判断是一台域机器,如果是工作组机器,则显示(WORKGROUP)。
代码语言:javascript复制systeminfo
查看当前登录域信息
通过查看当前登录域及域用户信息,如果是域环境工作站域会显示当前域(luckysec.cn),如果是工作组环境会显示(WORKGROUP)。
代码语言:javascript复制net config workstation
查看域内时间
通过查询域内时间命令,根据结果判断是否是域环境机器:
- 存在域,当前用户不是域用户,会显示拒绝访问。
- 存在域,当前用户是域用户,会显示当前域内时间
- 不存在域,当前为工作组,会显示找不到域WORKGROUP的控制器
net time /domain
0x02 本机信息搜集
查看本机网络配置信息
通过查看网络配置信息,可以判定当前机器网卡数量,有多个网卡就代表可以扩大资产范围进行内网横向渗透,从而有更多机会拿到域内其他主机的权限。
代码语言:javascript复制ipconfig /all
查看操作系统和版本信息
通过查看确定当前系统版本信息后,就可以针对性的去搜集相关系统版本的漏洞EXP。
代码语言:javascript复制英文版系统用这条命令:
systeminfo | findstr /B /C:"OS Nmae" /C:"OS Version"
中文版系统用这条命令:
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"
查看系统体系结构
通过查看查看系统体系结构,可以确定在当前机器上需要使用相对应版本兼容性的渗透工具。
代码语言:javascript复制echo %PROCESSOR_ARCHITECTURE%
查看安装程序和版本信息
通过搜集当前本机安装了哪些程序后,就可以了解当前机器的使用情况,比如某个程序有一些溢出、提权漏洞、DLL劫持提权等。
代码语言:javascript复制wmic product get name,version
查看本机服务信息
通过搜集当前本机的服务信息,可以了解当前机器上有哪些服务是开启的还是关闭的,看是否有可以深入利用的点。
代码语言:javascript复制wmic service list brief
查看进程列表
通过查看当前进程列表对应的用户身份命令,可以了解每个程序的进程以及对应执行的用户身份等。
代码语言:javascript复制tasklist /v
查看当前本地运行的程序、对应进程PID号、服务名,可以将执行命令的返回结果去查询是否有杀毒软件在运行。
代码语言:javascript复制tasklist /svc
Windows杀软在线对比辅助 https://maikefee.com/av_list
查看启动程序信息
通过查看启动程序信息,可以了解当前机器开机的时候会运行哪些程序,这也可以利用自启动劫持。
代码语言:javascript复制wmic startup get command,caption
查看计划任务
通过查看本机计划任务,可以了解当前机器上“某个时间”会运行哪些程序,可以利用这一点来做定时任务劫持。
代码语言:javascript复制schtasks /query /fo LIST /v
查看主机开机时间
通过查看本机的开机时间,可以判断这台机器的管理员是不是经常在登陆这台机器。
代码语言:javascript复制net statistics workstation
查看用户列表
通过查看本机用户列表,可以了解出内部网络机器名的命名规则,特别是个人机器,可以推测出整个域的用户命名方式。
代码语言:javascript复制net user
查看当前在线用户
通过查看当前在线用户,可以了解当前机器有没有管理员在登陆。
代码语言:javascript复制query user || qwinsta
查看本机端口开放情况
通过查看本机网络连接/相关网络地址/端口开放情况,可以了解当前机器有没有与其他机器进行连接,以及分析当前机器是否开放一些敏感服务。
代码语言:javascript复制netstat -ano
查询系统和补丁信息
查看系统的详细信息,注意系统的版本、位数、域、补丁信息及跟新频率等信息,通过查看本地计算机补丁列表,可以找到未打补丁的漏洞,用来辅助提升权限。
代码语言:javascript复制# 查询系统信息/补丁安装情况
systeminfo
# 查询补丁信息,包含说明链接/补丁描述/KB编号/更新时间等信息
wmic qfe get Caption,Description,HotFixID,InstalledOn
# 查询全部信息
wmic qfe list full
查看路由表及ARP缓冲表
通过查询路由表及所有可用接口的ARP缓冲表,可以了解当前网络的分布情况,内网有没有其他机器等等。
代码语言:javascript复制# 查看路由信息
route print
# 查看arp缓存
arp -a
查看防火墙配置
通过查看防火墙配置,可以了解当前机器是否开了防火墙,以及更多防火墙配置信息。
代码语言:javascript复制netsh firewall show config
若是想修改防火墙配置信息就可以使用:
代码语言:javascript复制win 2003及之前的版本,运行指定程序全部连接:
netsh firewall add allowedprogram c:nc.exe "allow nc" enable
win 2003之后的版本用这条:
netsh advfirewall firewall add rule name="pass nc" dir=in action=allow program="C:nc.exe"
允许指定程序连出,命令如下
netsh advfirewall firewall add rule name="Allow nc" dir=out action=allow program="C: nc.exe"
允许 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"
若是想要关闭防火墙就可以使用:
代码语言:javascript复制win 2003及之前的版本用这条命令:
netsh firewall set opmode disablewin 2003之后的版本用这条命令:
netsh advfirewall set allprofiles state off
查询并开启远程桌面服务
查看远程桌面服务是否开启,在cmd下使用注册表查询语句,命令如下,得到连接端口为0xd3d,转换后为3389
代码语言:javascript复制REG QUERY "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp" /V PortNumber
一些开启远程桌面的命令:
代码语言:javascript复制# 在 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
# 在 Windows 7 中开启 3389 端口
reg add "HKLMSYSTEMCURRENTCONTROLSETCONTROLTERMINAL SERVER" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
0x03 域内信息搜集
获取域SID
获取域SID值,可以用于票据传递攻击。
代码语言:javascript复制whoami /all
查询域内用户
通过查询域内用户,可以获取到这个域内所有用户名。
代码语言:javascript复制net user /domain
查看域用户详细信息
例如要查询luckystar这个域用户的信息,可以使用如下命令:
代码语言:javascript复制net user luckystar /domain
查询域列表
通过查询域列表发现当前只有一个 LUCKYSEC 域。
代码语言:javascript复制net view /domain
查询域主机
通过执行以下命令来查看当前域内有多少台主机,以及主机的主机名信息:
代码语言:javascript复制net view /domain:XXX
查询域管理员列表
查询域管理员用户。
代码语言:javascript复制net group "domain admins" /domain
查询企业管理员
查询企业指定系统管理员用户。
代码语言:javascript复制net group "enterprise admins" /domain
查看域内时间
通过查看域内时间(时间服务器)得知当前域的时间,可以使用定时任务 IPC来运行一些bat文件。
代码语言:javascript复制net time /domain
当前域的时间服务器是AD2-2016,可以Ping一下它的机器名获取道它的IP信息:
代码语言:javascript复制ping -n 2 AD2-2016
查看登陆本机的域管理员
这条命令会显示本地管理员和域管理员。
代码语言:javascript复制net localgroup administrators /domain
查看域内所有用户组列表
通过执行以下命令来查看域内所有用户组列表信息。
代码语言:javascript复制net group /domain
查看主域控制器
通过查看主域控制器,可以知道当前域的核心域控就是AD-2016这台机器。
代码语言:javascript复制netdom query pdc
通过查看当前时间定位主域控制器。
代码语言:javascript复制net time /domain
通过查询域控制组定位主域控制器。
代码语言:javascript复制net group "Domain Controllers" /domain
通过nltest定位主域控制器。
代码语言:javascript复制nltest /DCLIST:xxx
查看所有域控制器列表
一个域可以有多个域控制器,通过查看域控制器列表就可以得到域控制器对应的机器名
代码语言:javascript复制net group "Domain Controllers" /domain
通过Ping它的机器名即可得到域控制器的IP地址,域控机器名为 AD-2016 的 IP 是 10.10.10.10。
查询域信任信息
通过查询域信任信息,可以知道当前有多少个域以及域名信息。
代码语言:javascript复制nltest /domain_trusts
查询域密码信息
通过查询域密码信息,就可以根据密码策略来制定一份密码字典,例如:密码长度最小值为7,则可以直接忽略7位以下的密码字典。
代码语言:javascript复制net accounts /domain
参考文章
- https://mp.weixin.qq.com/s/IO5ZqNHoPTbhVvWd9yzC7g
- https://mp.weixin.qq.com/s/deXZAYwyyCDOESXM6g84Eg