信息收集

当我们拿到一台或多台可控的主机时,需要对当前主机进行信息收集,核心就是发现更多的目标收集各种密码

总结: 拿到一台机器后,尝试上线到C2,这里判断一下是否出网,然后看一下是否有域,再查一下网段信息,尽量扩大后续目标范围,最后再去机器上翻文件、找密码(本机密码、浏览器密码、各种服务密码)、找敏感进程等。

主机信息

当前shell主机的信息。

是否出网

在出网的情况下,方便上线到C2,也方便做内网穿透,更容易进行后续操作。

  • TCP/HTTP出网: powershell curl http://baidu.com
  • DNS出网: nslookup baidu.com
  • ICMP出网: ping baidu.comtracert baidu.com

是否有域

ipconfig可以查看当前机器是否处于内网、是否有域、当前内网网段、DNS地址等等;如果主DNS后缀有内容,就说明在域内。

ipconfig /all # 看主DNS后缀
nslookup <主DNS后缀> # 获取DNS服务器的IP地址,一般是DC

systeminfo查看系统详细信息的时候,可通过“域”字段来判断是否在域内,如果是WORKGROUP则说明是工作组。

systeminfo | findstr "域:"
systeminfo | findstr "Domain:"

查询工作站时,如果”工作站域“显示WORKGROUP则说明是工作组。

net config workstation

网段信息

为了寻找更多的目标,比如当前是10.0.0.0的网段,不知道其他的网段,如果直接去全局扫的话,影响太大。

此外通过网段信息也可以找到跨网段的机器,这样可以扩大攻击范围,如从DMZ进入核心内网等。

Windows:

ipconfig /all
netstat -ano
arp /a
tracert -d -h 10 ip

route print
type C: \Windows\System32\drivers\etc\hosts
wevtutil qe Security /q:"*[System[(EventID=4624)]]" /rd:true /f:text | findstr /C:"源网络地址:" | findstr /V /C:"127.0.0.1" /C:"-" /C:"::1" # windows日志查看登陆记录

Linux:

ifconfig
netstat -antlp
arp
traceroute

last
ip addr
cat /etc/hosts
route

其他:

比较笨的办法,全局ping网关

# linux
for i in 192.168.{1..254}.1; do if ping -c 1 -w 1 $i &>/dev/null; then echo $i is alived; fi; done

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

各种密码

  • 本机hash(mimikatz
  • 浏览器密码(LaZagne
  • 配置文件中的各种密码,如mysql、sqlserver、redis、VPN等服务的密码
  • 应用中的各种密码,如xshell、navicat等
  • Wi-Fi密码(for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') do @echo %j | findstr -i -v echo | netsh wlan show profiles %j key=clear

敏感文件

多翻一翻机器上的文件,除了密码外,万一有其他重要的敏感信息,如拓扑图、通讯录、集群等等。

  • Windows

      dir /a /s /b D:\"*conf*"
      dir /s /b "*密码*" "*登录*" "*资产*" "*VPN*" "*Svn*" "*Git*" "*交接*" "*离职*" "*网络*" "*后台*" "*拓扑*" "*邮箱*" "*工资*" "*管理员*" "*巡检*"
      findstr /I /c:"user=" /c:"pass=" /c:"login=" /c:"uid=" /c:"pwd="  /si *.conf *.asp *.php *.jsp *.aspx *.cgi *.xml *.ini *.inf *.txt *.cgi
    
  • Linux

      find / -name "*.properties" | xargs egrep -i "user|pass|pwd|uname|login|db_"
      grep -rli "user|pass|pwd|uname|login|db_" ./
    

进程列表

通过进程列表,可以看到运行的软件和服务,如邮件客户端、VPN客户端等,从而获取到敏感信息,甚至利用第三方应用进行提权。

tasklist /svc
wmic process list brief

当然也可以看看杀软,可通过在线网站【Windows杀软在线查询】进行对比匹配。

其他

这一块感觉都不是特别重要了,也不是刚需,可以根据需求查对应的信息。

当前SID
whoami /user
whoami /all
当前用户/组和权限
net user
net user xxx
net user xxx /domain # 域内
net localgroup administrators
安装软件列表

查看目标主机上安装的第三方应用有哪些,是否可以用来留后门等。

wmic product get name,version
powershell "Get-WmiObject -class Win32_Product |Select-Object -Property name
开机启动项
wmic startup get command,caption
计划任务
schtasks  /query  /fo  LIST /v
服务列表
wmic service list brief
net start
post/windows/gather/enum_applications    # msf
RDP

查看RDP的端口( 0xd3d 表示3389

REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /V PortNumber
环境变量
set
在线用户
query user
qwinsta
quser
操作系统版本
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
echo %PROCESSOR_ARCHITECTURE% # 架构
是否为虚拟机
# msf
post/windows/gather/checkvm
补丁信息
systeminfo
wmic qfe get Caption,Description,HotFixID,InstalledOn

可以去Windows提权辅助工具1或者Windows提权辅助工具2来查询可用的提权补丁。

共享信息

查看本机共享列表和可访问的域共享列表

net share
wmic share get name,path,status
wmic share get /format:list

# List shares on a remote PC
wmic /node: COMPUTER_NAME share get
DNS缓存记录
ipconfig /displaydns
防火墙配置
netsh firewall show config
netsh firewall show state    # 防火墙状态
代理信息

如果有代理可以看到 ProxyServer 字段

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

域内信息

域内的所有查询都是通过LDAP协议去AD进行查询的,而这个查询需要经过权限认证,所以只有域用户才拥有这个权限,当域用户运行查询命令时,会自动使用Kerberos协议进行认证,无须额外输入账号和密码。

域内组

通过域内组可以查到很多的信息,如域内主机、域内用户、域控等。

查看域内组

net group /domain

其中系统自带的常见组如下:

  • Domain Admins:域管理员组。
  • Domain Computers:域内机器。
  • Domain Controllers:域控制器。
  • Domain Guest:域访客组,权限较低。
  • Domain Users:域用户。
  • Enterprise Admins:企业系统管理员用户。

在默认情况下,Domain AdminsEnterprise Admins对域内所有域控制器有完全 控制权限

查询组内的对象

net group "Domain Admins" /domain        # 域管列表
net group "Domain Controllers" /domain    # 域控列表
net group "Domain Users" /domain         # 域内用户列表, net user /domain 平替
net group "Domain Computers" /domain     # 域内主机列表

定位域控

在真实环境中,一般存在两台或两台以上的域控制器,1台作为主域控,1台作为备份域控;备份域控主要是在主域控瘫痪时,为整个域继续提供正常的服务。

  1. nltest 命令用于在 Windows 系统上执行各种与域相关的测试和操作,包括获取当前计算机的域控制器信息。
nltest /DCLIST:org.gm7
nltest /DSGETDC:org.gm7
nltest /DNSGETDC:org.gm7
  1. 使用 nslookup 命令查询 SRV 记录的语法,其目的是查找与 LDAP 服务相关的 SRV 记录。
nslookup -type=SRV _ldap._tcp
  1. 查询域控的时间
net time /domain
  1. 一般情况下DNS服务会搭建在DC上,所以DNS服务器就是DC
ipconfig /all | findstr /R "DNS Servers"
ipconfig /all | findstr /R "DNS 服务器"
  1. 域内用户组Domain Controllers中的对象就是DC
net group "Domain Controllers" /domain
  1. 通过SPN定位到开放了特定服务的机器,一般就会是DC
setspn -T org.gm7 -Q */* | findstr "DNS"
setspn -T org.gm7 -Q */* | findstr "ldap"
  1. 如果上述的都定位不到DC,那么可以尝试寻找开放了88(Kerberos),389(LDAP),53(DNS)端口的服务器。

定位到DC后,如果拿到的是机器名,可以使用ping获取到具体的IP地址。

ping -n 1 PDC

定位域管

域管理员可以上域内的任意机器,包括域控,换句话说,拿到了域管账号就相当于拿下了整个域。

有的域成员机器上登录过域管账号,当拿下这一台机器后 ,就可以尝试从内存中读取明文密码或者hash,这个时候既有域控的地址,也有域管身份凭证,就可以内网漫游了。

所以我们要定位域管在哪些机器上登陆过。常用来定位域内管理员的渠道有两个,一是日志,二是会话:

  • 日志是指本地机器的管理员日志,可以使用脚本或wevtutil导出查看。
  • 会话是指域内每个机器的登录会话,可以匿名查询, 无须权限,可以使用 netsess.exePowerView 等工具查询。
  1. 使用powerviewFind-DomainUserLocation模块(Invoke-UserHunter平替),枚举域内每台机器来寻找域管。

     PS C:\Users\d4m1ts\Desktop\Recon> Import-Module .\PowerView.ps1                                                     PS C:\Users\d4m1ts\Desktop\Recon> Find-DomainUserLocation                                                               
    
     UserDomain      : ORG
     UserName        : Administrator
     ComputerName    : DESKTOP-9CAT508.org.gm7
     IPAddress       : 172.16.93.2
     SessionFrom     :
     SessionFromName :
     LocalAdmin      :
    
  2. 使用psloggedon来枚举当前机器或指定机器登陆了哪些用户。

     C:\Users\d4m1ts\Desktop>PsLoggedon64.exe
    
     PsLoggedon v1.35 - See who's logged on
     Copyright (C) 2000-2016 Mark Russinovich
     Sysinternals - www.sysinternals.com
    
     Users logged on locally:
          2024/4/9 10:01:01          ORG\d4m1ts
          <unknown time>             ORG\Administrator
    
     No one is logged on via resource shares.
    
     C:\Users\d4m1ts\Desktop>PsLoggedon64.exe \\PDC
    
     PsLoggedon v1.35 - See who's logged on
     Copyright (C) 2000-2016 Mark Russinovich
     Sysinternals - www.sysinternals.com
    
     Users logged on locally:
          <unknown time>             ORG\Administrator
     Unable to query resource logons
    

SPN扫描

之前介绍过,SPN(Service Principal Name)是Kerberos身份验证中用于标识特定服务实例(如HTTP、SMB、MySQL)的唯一名称。Kerberos身份验证使用SPN将服务实例与服务登录帐户相关联。

因此可通过SPN发现一些敏感的服务,但需要注意的是,SPN结果的服务不一定是存活的。

setspn -Q */*                # 查看当前域内所有的SPN
setspn -T org.gm7 -Q */*    # 指定域查询SPN
setspn -L d4m1ts            # 查找指定用户的SPN

一些常用的定位敏感服务。

# 定位数据库相关服务
setspn -T org.gm7 -Q */* | findstr "MSSQLSvc"
setspn -T org.gm7 -Q */* | findstr "oracle"

# 定位LDAP服务器
setspn -T org.gm7 -Q */* | findstr "ldap"

# 定位邮件服务器
setspn -T org.gm7 -Q */* | findstr "exchangeMDB"
setspn -T org.gm7 -Q */* | findstr "SMTPSVC"
setspn -T org.gm7 -Q */* | findstr "IMAP"
setspn -T org.gm7 -Q */* | findstr "POP3"

# 定位WEB服务器
setspn -T org.gm7 -Q */* | findstr "HTTP"
setspn -T org.gm7 -Q */* | findstr "HTTPS"

# 定位DNS服务器
setspn -T org.gm7 -Q */* | findstr "DNS"

# 定位文件服务器
setspn -T org.gm7 -Q */* | findstr "ftp"
setspn -T org.gm7 -Q */* | findstr "nfs"

# 定位开启远程连接服务服务器
setspn -T org.gm7 -Q */* | findstr "TERMSRV" >>> PerfLogs rdp .txt
setspn -T org.gm7 -Q */* | findstr "WSMAN" >> C: PerfLogs winrm .txt
setspn -T org.gm7 -Q */* | findstr "vnc" >> C: PerfLogs vnc .txt
setspn -T org.gm7 -Q */* | findstr "vpn" >> C: PerfLogs vpn .txt
setspn -T org.gm7 -Q */* | findstr "tnetdgines" >> C: PerfLogs tnetdgines .txt

域信任关系

nltest /domain_trusts

dsquery

dsquery)是一个内置在Windows Server 2008中的命令行工具,在安装了活动目录域服务(AD DS)服务器(域控)上可用,可以用来查询AD中各种对象。

dsquery computer       ----- 寻找AD中的计算机
dsquery server         ----- 寻找AD中的域控制器
dsquery user           ----- 寻找AD中的用户
dsquery contact        ----- 在AD中查找与指定的搜索条件相匹配的联系人
dsquery subnet         ----- 寻找AD中的子网
dsquery group          ----- 寻找AD中的群组
dsquery ou             ----- 寻找AD中的组织单位
dsquery site           ----- 寻找AD中的站点
dsquery quota          ----- 寻找AD中的配额规格
dsquery partition      ----- 寻找AD中的磁盘分区
dsquery *              ----- 使用标准的LDAP查询在AD中寻找任何对象

dsquery server –domain Yahoo.com | dsget server–dnsname –site   ---搜索域内域控制器的DNS主机名和站点名
dsquery computer domainroot –name *-xp –limit 10                ----- 搜索域内以-xp结尾的机器10台
dsquery user domainroot –name admin* -limit 10                  ---- 搜索域内以admin开头的用户10个

其他

一般拿到域控权限后,需要统计主机数量来证明数据量,可在DC中使用如下命令统计:

dsquery computer -limit 0 | find /c /v ""
powershell.exe -Command "(Get-ADComputer -Filter *).Count"

内网探测

内网探测是内网渗透中不可或缺的一个环节,在扫描的时候,应尽量避免使用Namp等工具进行暴力扫描,也不要在目标机器上使用图形化的工具, 而要尽量使用目标系统自带的各种工具,推荐使用PowerShell脚本

特定服务探测

  1. 使用 CrackMapExec 探测常用的服务。【推荐】

     cme smb 172.16.93.2/24   # 根据 SMB 探测服务器
     cme ssh 172.16.93.2/24   # 根据 SSH 探测服务器
     cme ldap 172.16.93.2/24  # 根据 LDAP 探测服务器
     cme mssql 172.16.93.2/24 # 根据 MSSQL 探测服务器
     cme winrm 172.16.93.2/24  # 根据 WINRM 探测服务器
    
  2. 使用MSF探测常用的服务,也可以通过端口探测。

     # module列表
     auxiliary/scanner/http/http_version
     auxiliary/scanner/smb/smb_version
     auxiliary/scanner/ftp/ftp_version
     auxiliary/scanner/ssh/ssh_version
     auxiliary/scanner/telnet/telnet_version
     auxiliary/scanner/mysql/mysql_version
     auxiliary/scanner/db2/db2_version
    

多网卡机器探测

在内网渗透过程中,目标网络中一般是划分不同区域使用防火墙进行隔离的。在日常运维过程中,运维人员为了方便操作,会将特定主机配置多网卡以访问不同网络区域的机器。

假如机器A通10.1.0.1/24段,但是不通10.1.1.1/24段,而机器B可以同时通10.1.0.1/24段和10.1.1.1/24段,那么寻找并拿下机器B就可以实现跨网段,也就可以发现更多的攻击目标,或者说更敏感的数据。(如从DMZ进入到内网)

可使用工具 SharpOXID-Find 进行探测。

C:\Users\d4m1ts\Desktop>SharpOXID-Find.exe -c 172.16.93.1/24

[+] ip range 172.16.93.1 - 172.16.93.254

[*] Retrieving network interfaces of  172.16.93.2
  [>] Address:DESKTOP-9CAT508
  [>] Address:172.16.93.2
  [>] Address:fd15:4ba5:5a2b:1008:4446:59a:f9a4:2af8
  [>] Address:fd15:4ba5:5a2b:1008:44a4:e53c:8e4:d1dd

[*] Retrieving network interfaces of  172.16.93.15
  [>] Address:PDC
  [>] Address:172.16.93.15
  [>] Address:fd15:4ba5:5a2b:1008:dcd:73da:d2f0:3ba1
Finish!

NetBIOS探测

通过NetBIOS协议,可以获取内网中的主机名、IP地址以及其他相关信息。

可使用命令行工具 nbtscan 进行探测。

C:\Users\d4m1ts\Desktop>nbtscan.exe 172.16.93.1/24
Doing NBT name scan for addresses from 172.16.93.1/24

IP address       NetBIOS Name     Server    User             MAC address
------------------------------------------------------------------------------
172.16.93.15     PDC              <server>  <unknown>        00-0c-29-f1-fc-2a

ARP探测

使用MSF的arp_sweep模块。

auxiliary/scanner/discovery/arp_sweep

ICMP探测

依次对内网中的每个IP地址执行 ping命令,可以快速有效地找出内网中所有存活的主机。

# windows
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.174.%I | findstr "TTL="
for /l %i in (1,1,255) do @ping 192.168.100.%i -w 1 -n 1 | find /i "ttl"

# linux
for i in 10.28.98.{1..254}; do if ping -c 1 -w 1 $i &>/dev/null; then echo $i is alived; fi; done

端口探测

上面的NetBIOS、ARP、ICMP探测大多数情况下只能探测主机的存活,并无法探测到主机上有哪些服务,而我们知道要进行横向肯定是对特定服务进行攻击,如NTLM认证、SMB、SqlServer、WEB等,因此要想全面的获取到攻击面就需要进行端口扫描。

  1. 使用MSF

     search portscan
    
     auxiliary/scanner/portscan/ack                                     normal  No     TCP ACK Firewall Scanner
     auxiliary/scanner/portscan/tcp                                     normal  No     TCP Port Scanner
     auxiliary/scanner/portscan/syn                                     normal  No     TCP SYN Port Scanner
    
  2. 使用PowerSploit中的Invoke-Portscan.ps1脚本

     Import-Module .\Invoke-Portscan.ps1
    
     Invoke-Portscan -Hosts 172.16.93.1/24 -T 4 -TopPorts 25 -oA c:\windows\temp\res.txt
     Invoke-Portscan -Hosts 172.16.93.1/24 -T 4 -ports '445,1433,8080,3389,80,22' -oA c:\windows\temp\res.txt
    

综合工具

如果内网环境中没有防护,或者在客户授权加白的情况下进行测试,那么可以使用一些现成的工具进行大范围扫描。

Copyright © d4m1ts 2023 all right reserved,powered by Gitbook该文章修订时间: 2024-04-09 15:24:06

results matching ""

    No results matching ""