《内网安全攻防》阅读笔记

内网安全攻防

内网渗透测试基础

内网基础知识

  • 工作组

  • 域:有安全边界的计算机集合

    • 单域:至少两台域服务器,一台DC,一台备用DC
    • 父子域:父子域的名字用一个“.”代表一个层次
    • 域树:多个域通过建立信任关系的集合
    • 域森林:多个域树通过建立信任关系的集合
    • 域名服务器:用于实现域名和与之对应的IP地址转换的服务器
  • 域控制器(DC)

  • 活动目录:域环境中提供目录服务的组件,用于存储有关网络对象的信息

    • 账号集中管理
    • 软件集中管理
    • 环境集中管理
    • 增强安全性
    • 更可靠,更短的宕机时间
  • 安全域的划分

    • 目的:将一组安全等级相同的计算机划入同一网段

    • 安全级别最高的内网

      • 办公区
      • 核心区
    • 安全等级中等的DMZ隔离区:解决安装防火墙后外部网络不能访问内部网络的问题

      • 位于企业内部网络和外部网络之间

      • 放置一些必须公开的服务器设施,比如企业WEB服务器,FTP服务器和论坛服务器等

      • 访问控制策略

        • 内网可以访问外网,防火墙需要执行NAT
        • 内网可以访问DMZ
        • 外网不能访问内网,防火墙基本策略,如果要访问就要通过VPN
        • 外网可以访问DMZ,防火墙完成对外地址到服务器实际地址的转换
        • DMZ不能访问内网
        • DMZ不能访问外网,有例外,比如邮件服务器
    • 安全等级最低的外网

  • 域中计算机分类

    • 域控制器
    • 成员服务器
    • 客户机
    • 独立服务器:不加入域,也不安装活动目录
  • 域内权限解读

    • 域本地组:多域用户访问单域资源

      • 可以从任何域添加用户账户、通用组和全局组,但只能在其所在域内指派权限
      • 域本地组不能嵌套于其他组中
      • 主要是用于授予位于本域资源的访问权限
      • 来自全林,作用于本域
    • 全局组:单域用户访问多域资源

      • 只能在创建该全剧组的域中添加用户和全剧组
      • 可以嵌套在其他组中
      • 来自本域,作用于全林
    • 通用组

      • 可以从任何域中添加用户和组
      • 可以嵌套于其他域组中
      • 保存在全局编录(GC)中
      • 来自全林,作用全林
    • A-G-DL-P策略:将用户账号添加到全局组中,将全局组添加到域本地组中,然后为域本地组分配资源权限

内网信息收集

概述

  • 我是谁:对当前机器角色进行判断
  • 这是哪:对当前机器所处的网络环境的拓扑结构进行分析和判断
  • 我在哪:对当前机器所处的区域的判断

收集本机信息

  • 手动收集本机信息

    • 查询网络配置信息

      • ipconfig /all
    • 查询操作系统及软件信息

      • 操作系统和版本信息:systeminfo | findstr /B /C:”OS Name” /C:”OS Version”
      • 查看系统体系结构:echo %PROCESSOR_ARCHITECTURE%
      • 查看安装的软件,版本,路径等:wmic product get name,version 或 powershell “Get-WmiObject” -class Win32_Product | Select-Object -Property name,version”
    • 查询本机服务信息

      • wmic service list brief
    • 查询进程列表

      • testlist 或 wmic process list brief
    • 查看启动程序信息

      • wmic startup get command,caption
    • 查看计划任务

      • schtasks /query /fo LIST /v
    • 查看主机开机时间

      • net statistics workstation
    • 查看用户列表

      • 查看本机用户列表:net user
      • 获取本地管理员信息:net localgroup administrators
      • 查看当前在线用户:query user || qwinsta
    • 列出或断开本地计算机与所连接的客户端之间的会话

      • net session
    • 查询端口列表

      • netstat -ano
    • 查看补丁列表

      • systeminfo 或 wmic qfe get Caption,Description,HotFixID,InstalledOn
    • 查询本机共享列表

      • net share 或 wmic share get name,path,status
    • 查看路由表及所有可用接口的ARP缓存表

      • route print 或 arp -a
    • 查询防火墙相关配置

      • 关闭防火墙

        • windows server 2003 之前:netsh firewall set opmode disable
        • windows server 2003 之后:nersh advfirewall set allprofiles state off
      • 查看防火墙配置

        • netsh firewall show config
      • 修改防火墙配置

        • windows server 2003 之前,允许指定程序全部连接:netsh firewall add allowedprogram c:\nc.exe “allow nc” enable

        • windows server 2003 之后

          • 允许指定程序进入:nersh advfirewall firewall add rule name=”pass nc” dir=in action=allow program=”c:\nc.exe”
          • 允许指定程序退出:nersh advfirewall firewall add rule name=”Allow nc” dir=out action=allow program=”c:\nc.exe”
          • 允许3389端口放行:nersh advfirewall firewall add rule name=”Remote Desktop” protocol=TCP dir=in localport=3389 action=allow
      • 自定义防火墙日志的存储位置

        • netsh advfirewall set currentprofile logging filename “C:\windows\temp\fw.log”
    • 查询代理配置情况

      • 查看127.0.0.1的1080端口:reg query “HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings”
    • 查询并开启远程连接服务

      • 查看远程连接端口:REG QUERY “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp” /V PortNumber

      • 在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_tsgeneralsetting where (TerminalName=’RDP-Tcp’) call setuserauthenticationrequired 1
        • reg add “HKLM\SYSTEM\CURRENT\CONTROLSET\CONTROL\TERMINAL SERVER” /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
  • 自动收集信息

    • wmic_info.bat
  • Empire下的主机信息收集

查询当前权限

  • 查询当前权限:whoami
  • 获取域SID:whoami /all
  • 查询指定用户的详细信息:net user XXX /domain

判断是否存在域

  • 使用ipconfig命令

    • 执行 ipconfig /all ,可以查看网关IP地址,DNS的IP地址,域名,本机是否和DNS服务器是否处于同一网段等信息
    • 然后反向解析查询命令nslookup来解析域名的IP地址
  • 查看系统详细信息

    • systeminfo

      • 域即域名,登陆服务器即域控制器,如果域为WORKGROUP,表示当前服务器不在域内
  • 查询当前登录域及登陆用户信息

    • net config workstation
  • 判断主域

    • net time /domain

      • 存在域,但当前用户不是域用户:发生系统错误5,拒绝访问
      • 存在域,且当前用户是域用户:显示时间
      • 不存在域:找不到…

探测域内存活主机

  • 利用NetBIOS快速探测内网

  • 利用ICMP协议快速探测内网

    • for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.1.%I | findstr “TTL=”
  • 利用ARP扫描探测内网

    • arp-scan工具:目标机中运行arp.exe -t 192.168.1.0/20
    • Empire中的arpscan模块:usemodule situational_awareness/network/arpscan
    • Nishang中的Invoke-ARPScan.ps1脚本:目标机中运行或远程加载脚本 powershell.exe -exec bypass -Command “&{Import-Module C:\windows\temp\Invoke-ARPScan.ps1; Invoke-ARPScan -CIDR 192.168.1.0/20}” >> C:\windows\temp\log.txt
  • 通过常规UDP/TCP端口扫描内网

    • ScanLine工具

扫描域内端口

  • 利用telnet命令进行扫描

    • telnet DC port
  • S扫描器

  • Metasploit端口扫描

  • PowerSploit的Invoke-portscan.ps1脚本

  • Nishang的Invoke-PortScan模块

收集域内基础信息

  • 查询域

    • net view /domain
  • 查询域内计算机

    • net view /domain:HACKE
  • 查询域内所有用户列表

    • net group /domain
  • 查询所有域成员计算机列表

    • net group “domain computers” /domain
  • 获取域密码信息

    • net accounts /domain
  • 获取域信任信息

    • nltest /domain_trusts

查找域控制器

  • 查看域控制器的机器名

    • nltest /DCLIST:hacke
  • 查看域控制器的主机名

    • Nslookup -type=SRV _ldap._tcp
  • 查看当前时间

    • net time /domain
  • 查看域控制器组

    • 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

定位域管理员

  • 定位域管理员的常规渠道:1、日志;2、会话

  • 常用域管理员定位工具

    • psloggedon.exe

      • 可以查看本地登录的用户和通过本地计算机或远程计算机的资源登录的用户。原理是检查注册表,某些功能需要管理员权限。
    • PVEFindADUser.exe

      • 查找活动用户登陆的位置、枚举域用户,以及查找在特定计算机上登录的用户,包括本地用户,通过RDP登录的用户,用于运行服务和计算任务的用户。需要.NET Framework 2.0环境,并且需要具有管理员权限。
    • netview.exe

      • 枚举工具,使用WinAPI枚举系统,利用NetSessionEnum找寻登陆会话,利用NetShareEnum找寻共享,利用NetWkstaUserEnum枚举登录的用户,查询共享入口和有价值的用户。绝大部分功能不需要管理员权限。
    • Nmap的NSE脚本

      • 如果存在域账户或者本地账户,就可以使用Nmap的smb-enum-sessions.nse引擎获取远程机器的登录会话。
    • PowerView脚本

      • Invoke-StealthUserHunter:只需要一次查询就可以获取域里面的所有用户。方法:从user.HomeDirectories中提取所有用户,并对每台服务器进行Get-NetSessions获取。隐蔽性较高,但不全面。
      • Invoke-UserHunter:找到域内特定的用户群,接受用户名、用户列表和域组查询,接收一个主机列表或查询可用的主机域名。使用Get-NetSessions和Get-NetLoggedon扫描每台服务器并对扫描结果进行比较。
    • Empire的user_hunter模块

      • 查找域管理员登录的机器

查找域管理进程

  • 本机检查

    • 获取域管理员列表

      • net group “domain admins” /domain
    • 列出本机的所有进程及进程用户

      • tasklist /v
    • 寻找进程所有者为域管理员的进程

  • 查询域控制器的域用户会话

    • 查询域控制器列表

      • net group “Domain Controllers” /domain
    • 收集域管理员列表

      • net group “domain admins” /domain
    • 收集所有活动域的会话列表

      • 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
  • 查询远程系统中运行的任务

    • 该脚本将目标域系统列表添加到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信息

    • 该脚本将目标域系统列表添加到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
    • 该脚本将目标域系统列表添加到ips.txt文件中,将收集的域管理员列表添加到admins.txt中,和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收集域信息

  • 四种权限

    • Restricted 默认设置,不允许执行任何脚本
    • Allsigned 只能运行经过证书验证的脚本
    • Unrestricted 权限最高,可以执行任意脚本
    • RemoteSigned 对本地脚本不进行限制,对来自网络的脚本必须验证其签名
  • PowerView

域分析工具BloodHound

敏感信息防护

  • 资料,数据,文件的定位流程

    • 定位内部人事组织结构
    • 在内部人事组织结构中寻找需要监视的人员
    • 定位相关人员的机器
    • 监视相关人员存放文档的位置
    • 列出存放文档的服务器的目录
  • 重点核心业务机器及敏感信息

  • 应用与文件形式信息

分析域内网划分情况及拓扑结构

  • 基本架构

  • 域内网段划分

    • DMZ:在外围Web环境中拿到的权限都在DMZ中
    • 办公区
    • 核心区
  • 多层域结构

  • 绘制内网拓扑图