《内网安全攻防-渗透测试实战指南》阅读笔记

第一章 内网渗透测试基础

内网基础知识

工作组

对局域网中的计算机进行分类,使得网络更有序。计算机的管理依然是各自为政,所有计算机依然是对等的,松散会员制,可以随意加入和退出,且不同工作组之间的共享资源可以相互访问。

“域”是一个有安全边界的计算机组合(一个域中的用户无法访问另一个域中的资源),域内资源由一台域控制器(Domain Controller,DC)集中管理,用户若想访问域内资源必须进行身份验证。当计算机连接到域时,域控制器首先需要鉴别计算机是否属于这个域,再确定用户名和密码是否正确,若全部正确则让其登录。

  • 单域:即只有一个域的网络环境,一般需要两台DC,一台DC,另一台备用DC(容灾)

  • 父子域:类比公司总部和公司分部的关系,总部的域称为父域,各分部的域称为该域的子域。

    使用父子域的好处:

    • 减小了域之间信息交互的压力(域内信息交互不会压缩,域间信息交互可压缩)
    • 不同的子域可以指定特定的安全策略

    父子域中域名使用一个.表示一个层次,类似于DNS域名表示方式,子域只能使用父域的名字作为域名后缀

  • 域树:多个域通过建立信任关系组成的集合。若两个域之间需要相互访问,需要建立信任关系(Trust Relation),通过信任关系可以将父子域连接成树状结构。

  • 域森林:多个域树通过建立信任关系组成的集合。

  • 域名服务器:实现域名到IP地址的转换。由于域中计算机使用DNS来定位DC、服务器和其他计算机的,所以域的名字就是DNS域的名字。

    内网渗透中,大都是通过寻找DNS服务器来确定域控制器位置(因为DNS服务器和域控制器通常配置在一台机器上)

活动目录

活动目录(Active Directory,AD)是指域环境中提供目录服务的组件,用于存储有关网络对象(用户、组、计算机、共享资源、联系人)的信息。基于活动目录有目录服务,用于帮助用户从活动目录中快速找到所需的消息。活动目录使得企业可以对网络环境进行集中管理。(可类比为内网中的索引,里面存储有内网里所有资源的快捷方式)

活动目录的逻辑结构包含组织单元、域、域树、域森林。域树内的所有域共享一个活动目录,因此非常适合进行统一管理。

活动目录的功能:

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

**域和活动目录的区别:**要实现域环境,其实就是要安装AD。一台计算机安装了AD之后就变成了DC。

安全域的划分

在一个用路由器连接的内网中,可以将网络划分为3个区域:

  1. 内网(安全级别最高):分为核心区(存储企业最重要的数据,只有很少的主机能够访问)和办公区(员工日常工作区,一般能够访问DMZ,部分主机可以访问核心区)
  2. DMZ(Demilitarized Zone,边界网络,隔离区,安全级别中等):作为内网中安全系统和非安全系统之间的缓冲区,用于对外提供服务,一般可以放置一些必须公开的服务器设施
  3. 外网(Internet,安全级别最低)

拥有DMZ的网络需要制定一些访问控制策略:

  • 内网可以访问外网,可以访问DMZ
  • 外网不能访问内网(若要访问可以通过VPN进行),只能访问DMZ
  • DMZ不能访问内网(否则内网无法受到保护),也不能访问外网(存在例外,如邮件服务器等需要访问外网的服务)

域中计算机的分类

  • 域控制器:用于管理所有的网络访问,存储有域内所有的账户和策略信息。允许网络中拥有多台域控制器(容灾)
  • 成员服务器:安装了服务器操作系统并加入了域,但没有安装活动目录的计算机,主要任务是提供网络资源
  • 客户机:安装了其他操作系统的计算机,利用这些计算机和域中的账户就可以登录到域。
  • 独立服务器:和域无关,既不加入域,也没有活动目录

域内权限

  • 域本地组:多域用户访问单域资源(访问同一个域),主要用于授予本域内资源的访问权限,可以从任何域中添加用户账号、通用组和全局组。域本地组无法嵌套在其他组中
  • 全局组:单域用户访问多域资源(必须是同一个域中的用户),只能在创建该全局组的域中添加用户和全局组,但可以在域森林中的任何域内指派权限,也可以嵌套在其他组中
  • 通用组:多域用户访问多域资源,成员信息不保存在域控制器中,而是保存在全局编录(GC)中,任何变化都会导致全林复制

A-G-DL-P策略:Account–Global–Universal Group–Domain Local Group–Permission,先将用户账号添加至全局组中,再将全局组添加至域本地组中,然后为域本地组分配资源权限。

下图为Windows Server 2012 中Users组织单元中的内置组:

搭建内网环境

  1. 域控制器主机使用服务器管理器安装“DNS”和“Active Directory域服务”两个功能,然后修改机器IP为固定IP,并修改DNS服务器为自身。安装好功能之后Win+R输入dsa.msc打开活动目录管理界面创建一个新的域用户

  2. 其他机器在计算机名/域更改窗口内将域修改为之前创建的域即可

  3. 使用net view /domain:域名来查看域内主机:

第二章 内网信息收集

进入内网后,首先需要对当前网络环境进行判断:

  • 我是谁:当前机器的角色
  • 这是哪:当前机器所处网络环境的拓扑结构
  • 我在哪:当前机器所处的区域

收集本机信息

手动收集信息

包括操作系统、权限、内网IP地址段、杀毒软件、端口、服务、补丁更新频率、网络连接、共享、会话等。

  • 获取网络配置信息:ipconfig /all

  • 获取操作系统及软件信息:systeminfo

    可以通过管道符传给findstr来简化输出,systeminfo | findstr /B /C:"OS Name"

  • 获取系统体系结构:echo %PROCESSOR_ARCHITECTURE%(cmd下,PowerShell没用)

  • 查看安装的软件、版本、路径等:wmic product get name,versionGet-WmiObject -class Win32_Product | Select-Object -Property name,version(PowerShell)

  • 查看本机服务:wmic service list brief

  • 查询进程列表:tasklistwmic process list brief

  • 查看启动程序信息:wmic startup list brief

  • 查看计划任务:schtasks /query /fo LIST /v

  • 查看主机开机时间:net statistics workstation,统计数据开始时间即为开机时间

  • 查询用户列表:net user

  • 查询本地管理员信息(通常包含域用户):net localgroup administrators

  • 查看当前在线用户:query user || qwinsta(cmd)

  • 列出或断开本地计算机与所连接客户端之间的会话:net session需要管理员权限(没搞懂是干啥的)

  • 查询端口列表和连接状态:netstat -ano

  • 查看补丁列表:systeminfo,见上面的图

  • 查看已安装的补丁:wmic qfe get Caption,Description,HotFixID,InstalledOn

  • 查看本机共享列表和可访问的域共享列表:net sharewmic share get name,path,status

  • 查看路由表和ARP缓存:route printarp -a

  • 查询防火墙相关配置

    1. 关闭防火墙:netsh firewall set opmode disable(WinServer2003及以前)netsh advfirewall set allprofiles state off(WinServer2003之后)

    2. 查看防火墙配置:netsh firewall show config

    3. 修改防火墙配置

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      # WinServer2003及以前,允许指定程序全部连接
      netsh firewall add allowedprogram c:\nc.exe "allow nc" enable

      # WinServer2003之后
      netsh advfirewall firewall add rule
      name="pass nc" # 规则名称
      dir=in/out # 流量进/出
      action=allow # 执行动作
      protocol=TCP # 限定协议类型
      localport=3389 # 限定端口
      program="c:\nc.exe" # 允许指定程序
  1. 自定义防火墙日志储存位置:netsh advfirewall set currentprofile logging filename "C:\Windows\temp\fw.log"
  • 查看代理配置情况:通过查询注册表

    1
    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
  • 开启3389端口(2003之后那个命令不知道为啥跑不起来)

    1
    2
    3
    4
    5
    6
    7
    # WinServer2003及以前
    wmic path win32_terminalservicesetting where (_CLASS ! ="") call setallowtsconnections 1

    # WinServer2003之后
    wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (_CLASS !="") call setallowtscoonections 1
    wmic /namespace:\\root\cimv2\terminalservices path win32_tsgeneralsetting where (TerminalName='RDP-Tcp') call setuserauthenticationrequired 1
    reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f

自动收集信息

  1. 脚本收集,利用WMIC(Windows Management Instrumentation Command-Line,Windows管理工具命令行)获取系统信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for /f "delims=" %%A in ('dir /s /b %WINDIR%\system32\*htable.xsl') do set "var=%%A"

    wmic process get CSName,Description,ExecutablePath,ProcessId /format:"%var%" >> out.html
    wmic service get Caption,Name,PathName,ServiceType,Started,StartMode,StartName /format:"%var%" >> out.html
    wmic USERACCOUNT list full /format:"%var%" >> out.html
    wmic group list full /format:"%var%" >> out.html
    wmic nicconfig where IPEnabled='true' get Caption,DefaultIPGateway,Description,DHCPEnabled,DHCPServer,IPAddress,IPSubnet,MACAddress /format:"%var%" >> out.html
    wmic volume get Label,DeviceID,DriveLetter,FileSystem,Capacity,FreeSpace /format:"%var%" >> out.html
    wmic netuse list full /format:"%var%" >> out.html
    wmic qfe get Caption,Description,HotFixID,InstalledOn /format:"%var%" >> out.html
    wmic startup get Caption,Command,Location,User /format:"%var%" >> out.html
    wmic PRODUCT get Description,InstallDate,InstallLocation,PackageCache,Vendor,Version /format:"%var%" >> out.html
    wmic os get name,version,InstallDate,LastBootUpTime,LocalDateTime,Manufacturer,RegisteredUser,ServicePackMajorVersion,SystemDirectory /format:"%var%" >> out.html
    wmic Timezone get DaylightName,Description,StandardName /format:"%var%" >> out.html

    注:默认情况下,Windows XP的低权限用户不能访问WMIC,Windows 7以上版本系统的低权限用户允许查询操作。

  2. Empire下的主机信息收集

    Empire一款基于PowerShell的后渗透测试工具。里面提供了不少收集主机信息的模块,如powershell/situational_awareness/host/winenum,可以获得系统信息、剪贴板、服务、防火墙、用户组等一堆信息:

    还有powershell/situational_awareness/host/computerdetails,这个脚本要管理员权限:

    里面模块挺多的,慢慢玩

    注:原项目已不再更新而且用的Python2,我装的时候有依赖问题,然后找到了有个项目Fork了原项目并且一直在维护https://github.com/BC-SECURITY/Empire,而且代码也都基于Python3,直接完美运行。

查询当前权限

使用whoami查看当前权限,可分为3种情况:

  1. 本地普通用户:如win-2008\user
  2. 本地管理员用户:如win7-x64\administrator
  3. 域内用户:如hack\testuser

其中,本地普通用户无法查询域内信息(如果内网中存在域),而本地管理员和域内用户则可以查询到域内信息。

原理:域内所有查询都要通过域控制器来实现(使用LDAP协议),且查询需要权限认证,而域用户才能拥有这个权限。当域用户执行查询命令时,会自动使用Kerberos协议进行认证,无需额外输入账号密码。对于本地管理员来说,本地Administrator权限可以直接提升为NT Authority或System权限,而本机的System用户对应的就是域里的对应的机器用户,所以使用System权限可以运行域内查询命令。

获取域的SID(Security Identifier)使用whoami /all。如图,当前域SID为S-1-5-21-870803880-2107536184-4061183828,用户administrator的SID为S-1-5-21-870803880-2107536184-4061183828-500,是在域的SID后面增加一段数字来标识。

接下来是查询指定用户的详细信息,使用net user [username] /domain,输出如下图,可以通过判断用户所在用户组从而确定对应用户的权限:

判断是否存在域

通过ipconfig

命令ipconfig /all得到信息如下,主要关注图中红框中的信息。

首先是DNS后缀和DNS后缀搜索列表,很明显能看出主机就在某域内(与登录账户无关)。若主机不在域内,则这两条是空的,比如我的电脑系统:

接下来就要关注DNS服务器了。我们通过DNS后缀获得了域名,那么可以通过nslookup/ping来查询到域名对应的IP地址,也就可以判断域控制器和DNS服务器是否为同一台机器了。比如在上面那个环境下,查出来就是同一台机器:

通过systeminfo

systeminfo中的“域”和“登陆服务器”可以确定当前主机是否在域内。

若主机在域内,则情况就会类似于如下,此时登陆服务器的主机名对应的就是域控制器。

1
2
域:               hu.hack
登录服务器: \\HU-SERVER2012

若主机不在域内,则其域对应值为WORKGROUP,登陆服务器也应该是本机,就像下面这样:

1
2
域:               WORKGROUP
登录服务器: \\HUJ13K4N9-WIN

通过查询工作站配置

使用net config workstation命令可以查询到当前工作站的配置信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
计算机名                     \\HU-SERVER2008
计算机全名 hu-Server2008.hu.hack
用户名 Administrator

工作站正运行于
NetBT_Tcpip_{E5AB4E27-437B-4993-B681-BE080DCDB8E2} (000C2922705D)

软件版本 Windows Server 2008 R2 Enterpri

工作站域 HU
工作站域 DNS 名称 hu.hack
登录域 HU-SERVER2008

COM 打开超时 (秒) 0
COM 发送计数 (字节) 16
COM 发送超时 (毫秒) 250
命令成功完成。

和上面类似,若“工作站域 DNS 名称”为WORKGROUP,则不在域内,反之在域内。除此之外,登陆域可以判断出当前用户是域用户还是本地用户。

通过net time

net time指令的功能是将计算机的时钟与其他计算机或域的时钟同步,或显示计算机或域的时间。很多时候域服务器通常会同时作为时间服务器来使用,所以也可以通过命令net time /domain判断是否存在域。

3种情况:

  1. 不存在域

    1
    2
    3
    找不到域 WORKGROUP 的域控制器。

    请键入 NET HELPMSG 3913 以获得更多的帮助。
  2. 存在域,且当前用户是本地普通用户

    1
    2
    3
    发生系统错误 5

    拒绝访问。
  3. 存在域,且当前用户是域用户或本地管理员

    1
    2
    3
    \\hu-Server2012.hu.hack 的当前时间是 2020/11/30 22:13:47

    命令成功完成。

探测域内存活主机

使用NetBIOS探测内网

NetBIOS(Network Basic Input/Output System)是局域网程序使用的一种API,它提供了OSI模型中的会话层服务,让在不同电脑上运行的不同程序,可以在局域网中,互相连线,以及分享资料。几乎所有的局域网都是在NetBIOS的基础上工作的。NetBIOS提供了名称的服务,所以通过解析机器的NetBIOS名称可以快速的扫描内网机器。

Windows系统自带的有nbtstat命令也可以用来查询NetBIOS信息。比如nbtstat -A [IP],程序会通过电脑中的每个网卡进行请求,但一般只有一个网卡能返回消息了,其他的都是找不到主机:

nbtscan是一个NetBIOS扫描工具,项目地址https://github.com/scallywag/nbtscan,总之好用就完事了

我还发现了一个Python库可以发NetBIOS请求,pysmb · PyPI,但这个好像没办法多线程,速度比较慢,更详细的看文档

1
2
3
4
5
6
>>> from nmb.NetBIOS import NetBIOS
>>> n = NetBIOS(broadcast=True, listen_port=0)
>>> n.queryIPForName('192.168.6.100', timeout=10)
['HU-SERVER2012']
>>> n.queryName('HU-WIN7-PC')
['192.168.6.101']

使用ICMP协议探测内网

可以对内网中的每个IP地址进行Ping命令,来找到存活的主机。

for /L %I in (1,1,254) do @ping -w 1 -n 1 192.168.1.%I | findstr "TTL"(只能CMD)

还有个书上的vbs脚本(要自己换IP地址段,而且巨慢,一个一个扫的)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
str = "192.168.6."
For i = 1 To 254
strC = str & i
res = Ping(strC)
If res = True Then
WScript.Echo strC & " is alive !"
End If
Next

WScript.Echo "All Done!"

Function Ping(S)
Set objwmi = GetObject("winmgmts:\\.\root\cimv2")
Set col = objwmi.ExecQuery("Select * From Win32_PingStatus Where Address='" & S & "'")
For Each objItem in col
Select case objItem.StatusCode
Case 0
Ping = True
Case Else
Ping = False
End Select
Exit For
Next
End Function

使用ARP协议探测内网

  1. arp-scan:https://github.com/royhills/arp-scanhttp://www.royhills.co.uk/wiki/index.php/Arp-scan_User_Guide

  2. Empire:powershell/situational_awareness/network/arpscan

  3. Mcafee出的软件ScanLine(没找到哪里有下载)

扫描域内端口

主要关注三类信息:

  1. 端口的Banner信息
  2. 端口上运行的服务
  3. 常见应用的默认端口

使用Telnet命令进行端口扫描

1
2
3
4
5
6
7
8
9
10
$ telnet 192.168.6.100 22                                                                                       
Trying 192.168.6.100...
Connected to 192.168.6.100.
Escape character is '^]'.
SSH-2.0-OpenSSH_for_Windows_8.1
^C
Connection closed by foreign host.
$ telnet 192.168.6.100 80
Trying 192.168.6.100...
telnet: Unable to connect to remote host: Connection refused

S扫描器

项目:kingron/s,主要用于老版本的Windows系统

1
2
3
4
5
6
7
PS C:\Users\Administrator> .\s.exe TCP xxx.xxx.xxx.xxx 80,443 /HBanner
TCP Port Scanner V1.2 By WinEggDrop

Normal Scan: About To Scan 3 Ports Using 1 Thread
xxx.xxx.xxx.xxx 80 -> "nginx/1.16.1"
xxx.xxx.xxx.xxx 443 -> "nginx/1.16.1"
Scan xxx.xxx.xxx.xxx Complete In 0 Hours 0 Minutes 1 Seconds. Found 3 Open Ports

Metasploit

auxiliary/scanner/portscan/tcp模块可以扫描已开启的TCP端口。当然Metasploit还有很多种扫描技术,可以使用search portscan来搜索:

PowerShell脚本

  1. PowerSploit的Invoke-Portscan脚本:https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/Invoke-Portscan.ps1
  2. Nishang的Invoke-Portscan模块:https://raw.githubusercontent.com/samratashok/nishang/master/Scan/Invoke-PortScan.ps1

获取帮助:Get-Help [Module-Name] -full

端口Banner信息

发现端口之后可以通过工具获取其Banner信息(比如上面的Telnet)。查询到Banner之后可以拿去漏洞库查找是否有对应版本的漏洞以及其对应的PoC、EXP,再去目标系统中进行验证。参考网站:Exploit DatabaseSecurityFocus

收集域内基础信息

注:通过LDAP协议到域控制器上进行查询的命令仅域内用户和本地管理员可执行

  1. 查询域:net view /domain

  2. 查询域内所有计算机:net view /domain:[DOMAIN]

  3. 查询域内所有用户组列表:net group /domain

    几个常见的系统自带用户身份:Domain Admins(域管理员,默认对域内所有控制器有完全控制权限)、Domain Computers(域内计算机)、Domain Controllers(域控制器)、Domain Guest(域访客,权限较低)、Domain Users(域用户)、Enterprise Admins(企业系统管理员,默认对域内所有控制器有完全控制权限

  4. 查询具体用户组成员列表:net group "[USER GROUP]" /domain

  5. 获取域密码信息:net accounts /domain

  6. 获取域信任信息:nltest /domain_trusts

查找域控制器

  1. nltest /DCLIST:[DOMAIN NAME]

    1
    2
    3
    4
    C:\Users\testuser>nltest /DCLIST:hu
    获得域“hu”中 DC 的列表(从“\\HU-SERVER2012”中)。
    hu-Server2012.hu.hack [PDC] [DS] 站点: Default-First-Site-Name
    此命令成功完成
  2. nslookup -type=SRV _ldap._tcp,可以拿到域控制器的IP地址

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    C:\Users\testuser>nslookup -type=SRV _ldap._tcp
    服务器: UnKnown
    Address: 192.168.6.100

    _ldap._tcp.hu.hack SRV service location:
    priority = 0
    weight = 100
    port = 389
    svr hostname = hu-server2012.hu.hack
    hu-server2012.hu.hack internet address = 192.168.6.100
  3. net time /domain

  4. net group "Domain Controllers" /domain

  5. netdom query pdc(Win7找不到这个命令,Server08和Server12都没问题)

    1
    2
    3
    4
    5
    PS C:\Users\Administrator\Desktop> netdom query pdc
    域的主域控制器:

    HU-SERVER2012
    命令成功完成。

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

查询域用户列表

  1. 查询域内用户:net user /domain(krbtgt用户不仅可以创建票据授权服务的加密密钥,还可以实现多种域内权限持久化方法)

    1
    2
    3
    4
    5
    6
    7
    8
    PS C:\Users\Administrator\Desktop> net user /domain

    \\HU-SERVER2012 的用户帐户

    -------------------------------------------------------------------------------
    Administrator Guest krbtgt
    testuser
    命令成功完成。
  2. 获取域内用户的详细信息:wmic useraccount get /all

  3. dsquery user(dsquery是专门用于查询AD数据的,可以查询指定的类别:https://blog.51cto.com/549687/1982400

  4. 查询本地管理员组:net localgroup administrators

查询域管理员用户组

主要是上面提到的Domain Admins和Enterprise Admins两个用户组:

1
2
net group "Domain Admins" /domain
net group "Enterprise Admins" /domain

定位域管理员

当计算机加入域之后,会默认给域管理员的用户组赋予本地系统管理员权限,所以域管理员都可以访问本地计算机,具有完全控制权限。

定位域内管理员的常规方法:本地机器管理员日志和机器的登录会话

常用工具

  1. PsLoggedon.exe:https://docs.microsoft.com/en-us/sysinternals/downloads/psloggedon(是个工具集,还有别的程序不知道干啥的)

  2. PVEFindADUser.exe:https://github.com/chrisdee/Tools/tree/master/AD/ADFindUsersLoggedOn,可以获取每台机器现在登录的用户和最后登录的用户

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    PS C:\Users\testuser\Desktop> .\PVEFindADUser.exe -current -v
    -----------------------------------------
    PVE Find AD Users
    Peter Van Eeckhoutte
    (c) 2009 - http://www.corelan.be:8800
    Version : 1.0.0.12
    -----------------------------------------
    [+] Finding currently logged on users ? true
    [+] Finding last logged on users ? false

    [+] Removing old report.csv, if necessary
    [+] Writing new report.csv header

    [+] Enumerating all computers...
    [+] Number of computers found : 3
    [+] Launching queries
    [+] Processing host : hu-Server2012.hu.hack (Windows Server 2012 R2 Datacenter)
    * Pinging host hu-Server2012.hu.hack (2 times)
    * Nr of successful pings : 2/2
    * Ping ok
    Found current user : hu\administrator
    - Logged on user : hu\administrator
    [+] Processing host : HU-WIN7-PC.hu.hack (Windows 7 旗舰版;Service Pack 1)
    * Pinging host HU-WIN7-PC.hu.hack (2 times)
    * Nr of successful pings : 2/2
    * Ping ok
    [+] Processing host : HU-SERVER2008.hu.hack (Windows Server 2008 R2 Enterprise;Service Pack 1)
    * Pinging host HU-SERVER2008.hu.hack (2 times)
    * Nr of successful pings : 2/2
    * Ping ok
    Found current user : hu\testuser
    - Logged on user : hu\testuser
    [+] Report written to report.csv
  3. netview.exe:https://github.com/mubix/netview,基于NetSessionEnumNetShareEnumNetWkstaUserEnum等Win32枚举API来枚举登录会话和用户信息,绝大多数功能不需要管理员权限。

  4. Nmap NSE脚本:smb-enum-sessions、smb-enum-domains、smb-enum-users、smb-enum-shares、smb-enum-processes、smb-os-discovery

  5. PowerView脚本:https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1

  6. Empire模块:powershell/situational_awareness/network/powerview/user_hunter,好像和前面那个PowerView里面的Invoke-UserHunter一样的

查找域管理进程

本机检查

  1. net group "Domain Admins" /domain查域管理员
  2. tasklist /v可以显示本机所有进程和进程用户,找到对应域管理员进程即可(实际情况并非如此)

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

  1. 查询所有的域控制器

  2. 收集域管理员列表

  3. 收集所有活动域的会话列表:NetSess

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    PS C:\Users\Administrator\Desktop> .\NetSess.exe 192.168.6.102 -full

    NetSess V02.00.00cpp Joe Richards (joe@joeware.net) January 2004

    Enumerating Host: 192.168.6.102
    Client User Name Client Type Opens Time Idle Time Transport
    ----------------------------------------------------------------------------------------------------------
    -------
    \\HU-SERVER2012 Administrator 1 000:00:00 000:00:00


    Total of 1 entries enumerated
  4. 交叉引用域管理员列表与活动会话列表:GDA

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

  1. 收集域管理员列表
  2. tasklist /V去找是否有对应用户的任务

扫描远程系统中的NetBIOS信息

nbtstat -A [IP]nbtscan

利用PowerShell收集域信息

设置PowerShell执行权限:Set-ExecutionPolicy Unrestricted

使用上面的PowerView:https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1

BloodHound

BloodHound是一款域分析工具,可以将域内用户、计算机、会话、组、ACL之间的关系直观的展现出来,使得我们可以更加便捷地分析域内情况

安装和使用:https://xz.aliyun.com/t/7311

安装后使用SharpHound工具来提取信息,使用Cobalt Strike或其他工具将SharpHound上传至目标机器并运行,会在运行当前目录生成一个压缩包,上传至BloodHound可以获得视图。

敏感数据的防护

资料、数据、文件的定位流程

  1. 定位内部人事组织机构
  2. 寻找需要监视的人员
  3. 定位相关人员的机器
  4. 监视存放文档的位置
  5. 列出存放文档服务器的目录

核心业务机器和敏感信息防护

  • 高级管理人员、系统管理员、财务/人事/业务人员的计算机
  • 产品管理系统服务器
  • 办公系统服务器
  • 财务应用系统服务器
  • 核心产品源码服务器(SVN、Git)
  • 数据库服务器
  • 文件服务器
  • 电子邮件服务器
  • 网络监控系统服务器

隐藏通信隧道技术

概述

隧道是一种绕过防火墙/IDS对系统端口屏蔽的一种方式,隧道两端的数据包通过防火墙允许的数据包类型或端口进行封装,然后穿过防火墙,抵达目的地之后再解封装还原数据。

常用:

  • IPv6隧道、ICMP隧道、GRE隧道(网络层)
  • TCP隧道、UDP隧道、端口转发(传输层)
  • SSH隧道、HTTP隧道、HTTPS隧道、DNS隧道(应用层)

判断内网机器的连通性

指判断内网机器是否能够连上外网。

  1. ICMP协议:ping命令
  2. TCP协议:使用netcat(nc [IP] [port]
  3. HTTP协议:使用curl命令
  4. DNS协议:使用nslookup(Windows)、dig(Linux)

特殊情况:内网流量不能直接流出,需要经过Proxy服务器,判断方法:

  • 查看网络连接,是否存在与其他机器的8080(不确定)端口的连接
  • 查看内网中是否有类似proxy字样的机器
  • 查看IE浏览器的直接代理
  • 查找PAC文件
  • curl -x proxy-ip:port host进行判别

网络层隧道

IPv6隧道

IPv6隧道属于IPv4到IPv6过渡技术的一种,还有一种是IPv4和IPv6双栈,具体可以看https://blog.csdn.net/qq_38265137/article/details/80466720

IPv6隧道主要有三种

  • IPv6 over IPv4手动隧道:直接把IPv6报文封装到IPv4报文中去,IPv6报文作为IPv4报文的净载荷,源地址和目的地址均为手工指定,边界设备必须支持双栈

  • IPv6 over IPv4 GRE隧道:使用标准的GRE(通用路由封装,Generic Routing Encapsulation)隧道技术提供了点到点连接服务,需要手工指定隧道的端点地址

  • 自动隧道:用户仅需要配置设备隧道的起点,隧道的终点由设备自动生成,使用内嵌IPv4地址的IPv6地址

支持IPv6的隧道工具:socat、6tunnel、nt6tunnel等

ICMP隧道

将TCP/UDP数据封装到ICMP的ping数据包中,从而穿过防火墙(通常防火墙不会屏蔽ping数据包)

常用工具:

  1. icmpsh,直接在ICMP ping消息下面挂Data Payload:

  2. PingTunnel:http://freshmeat.sourceforge.net/projects/ptunnel/,还一个中文版的https://github.com/esrrhs/pingtunnel

防御ICMP隧道攻击:

  • 检测同一来源的ICMP数据包数量(隧道会产生大量ICMP数据包)
  • 注意Payload大于64Byte的数据包
  • 寻找响应和请求Payload不一致的数据包
  • 注意某些特定隧道程序的协议标签

传输层隧道

lcx

lcx是一个基于Socket实现的端口转发工具,Windows版为lcx.exe,Linux版为portmap,需要一个服务端和一个客户端

常用用法:

1
2
3
4
5
6
# 内网端口转发
lcx.exe -slave <服务端IP地址> <服务端监听端口> <要映射的IP> <要映射的端口>
lcx.exe -listen <监听的端口> <转发的端口>

# 本地端口转发
lcx.exe -tran <要转发的目的端口> <目标主机IP> <目标端口>

netcat(nc)

netcat老熟人了,意为网络中的cat命令。Windows下可以用Nmap附赠的Ncat

常用用法:

  • nc -nv IP Port 查端口Banner
  • nc -v -z IP Port-Range 扫描端口范围
  • nc -lvp Port 监听端口
  • nc -nv IP Port < file -q 1 传输文件

Powercat

应用层隧道

SOCKS代理