【内网渗透】01 Windows 基础回顾]


内网学习-Windows基础回顾

拓扑

一、Tools:

掌握impacket工具包:使用--原理--编写 == 大成
https://github.com/SecureAuthCorp/impacket
dnspy
HXD
SoftEther VPN
Windows Admin center  微软出品,用来远程管理电脑
Autoruns  开机启动项管理工具

课外阅读:https://cloud.tencent.com/developer/article/1769697

二、内网渗透理解

渗透测试本质是信息收集,内网对抗本身是对Windows的对抗。Linux较少

三、Windows基础回顾

3.1 环境变量

所有命令行其实都是二进制的可执行文件。如果cmd 是 c:\Windows\system32\whoami.exe 可以做个小实验,设置自己的exe到任意目录。

查看环境变量:set

设置环境变量:set tempname = uunicodesec

查询环境变量:set | findstr r

环境变量

3.2 文件

3.2.1 Magic number

即幻数,它可以用来标记文件或者协议的格式,很多文件都有幻数标志来表明该文件的格式。数头(Magic number)

  • ZIP Archive(zip): 文件头 504B0304
  • RAR Archive(ara): 文件头 52617221
  • JPEG(jpg) 文件头 FFD8FF
  • PNG(png) 文件头 89504E47
  • GIF(gif) 文件头 47494638

3.2.2 PE 文件

MZ头

3.2.3 文件时间

  • 创建时间:是表示这个文件存在机器上的时间,当文件信息首次出现在当前硬盘上时
  • 修改时间:这次更新的是对文件内容的单个更改,例如当您更改文件的内容并使用vim等工具保存它时,文件修改时间就会发生变化
  • 访问时间:一旦文件的内容被读取,时间就会更新。例如在文件中使用较少的命令或请求较多的命令、

3.2.3 ACL

ICACLS

ICACLS name /save aclfile [/T] [/C] [/L] [/Q]
    将匹配名称的文件和文件夹的 DACL 存储到 aclfile 中
    以便将来与 /restore 一起使用。请注意,未保存 SACL、
    所有者或完整性标签。

ICACLS directory [/substitute SidOld SidNew [...]] /restore aclfile
                 [/C] [/L] [/Q]
    将存储的 DACL 应用于目录中的文件。

ICACLS name /setowner user [/T] [/C] [/L] [/Q]
    更改所有匹配名称的所有者。该选项不会强制更改所有
    身份;使用 takeown.exe 实用程序可实现
    该目的。

ICACLS name /findsid Sid [/T] [/C] [/L] [/Q]
    查找包含显式提及 SID 的 ACL 的
    所有匹配名称。

ICACLS name /verify [/T] [/C] [/L] [/Q]
    查找其 ACL 不规范或长度与 ACE
    计数不一致的所有文件。

ICACLS name /reset [/T] [/C] [/L] [/Q]
    为所有匹配文件使用默认继承的 ACL 替换 ACL。

ICACLS name [/grant[:r] Sid:perm[...]]
       [/deny Sid:perm [...]]
       [/remove[:g|:d]] Sid[...]] [/T] [/C] [/L] [/Q]
       [/setintegritylevel Level:policy[...]]

    /grant[:r] Sid:perm 授予指定的用户访问权限。如果使用 :r,
        这些权限将替换以前授予的所有显式权限。
        如果不使用 :r,这些权限将添加到以前授予的
        所有显式权限。

    /deny Sid:perm 显式拒绝指定的用户访问权限。
        将为列出的权限添加显式拒绝 ACE,
        并删除所有显式授予的权限中的相同权限。

    /remove[:[g|d]] Sid 删除 ACL 中所有出现的 SID。使用
        :g,将删除授予该 SID 的所有权限。使用
        :d,将删除拒绝该 SID 的所有权限。

    /setintegritylevel [(CI)(OI)]级别将完整性 ACE 显式
        添加到所有匹配文件。要指定的级别为以下级别
        之一:
             L[ow]
             M[edium]
             H[igh]
        完整性 ACE 的继承选项可以优先于级别,但只应用于
        目录。

    /inheritance:e|d|r
        e - 启用继承
        d - 禁用继承并复制 ACE
        r - 删除所有继承的 ACE


注意:
    Sid 可以采用数字格式或友好的名称格式。如果给定数字格式,
    那么请在 SID 的开头添加一个 *。

    /T 指示在以该名称指定的目录下的所有匹配文件/目录上
        执行此操作。

    /C 指示此操作将在所有文件错误上继续进行。
        仍将显示错误消息。

    /L 指示此操作在符号
      链接本身而不是其目标上执行。

    /Q 指示 icacls 应该禁止显示成功消息。

    ICACLS 保留 ACE 项的规范顺序:
            显式拒绝
            显式授予
            继承的拒绝
            继承的授予

    perm 是权限掩码,可以指定两种格式之一:
        简单权限序列:
                N - 无访问权限
                F - 完全访问权限
                M - 修改权限
                RX - 读取和执行权限
                R - 只读权限
                W - 只写权限
                D - 删除权限
        在括号中以逗号分隔的特定权限列表:
                DE - 删除
                RC - 读取控制
                WDAC - 写入 DAC
                WO - 写入所有者
                S - 同步
                AS - 访问系统安全性
                MA - 允许的最大值
                GR - 一般性读取
                GW - 一般性写入
                GE - 一般性执行
                GA - 全为一般性
                RD - 读取数据/列出目录
                WD - 写入数据/添加文件
                AD - 附加数据/添加子目录
                REA - 读取扩展属性
                WEA - 写入扩展属性
                X - 执行/遍历
                DC - 删除子项
                RA - 读取属性
                WA - 写入属性
        继承权限可以优先于每种格式,但只应用于
        目录:
                (OI) - 对象继承
                (CI) - 容器继承
                (IO) - 仅继承
                (NP) - 不传播继承
                (I) - 从父容器继承的权限

示例:

        icacls c:\windows\* /save AclFile /T
        - 将 c:\windows 及其子目录下所有文件的
          ACL 保存到 AclFile。

        icacls c:\windows\ /restore AclFile
        - 将还原 c:\windows 及其子目录下存在的 AclFile 内
          所有文件的 ACL。

        icacls file /grant Administrator:(D,WDAC)
        - 将授予用户对文件删除和写入 DAC 的管理员
          权限。

        icacls file /grant *S-1-1-0:(D,WDAC)
        - 将授予由 sid S-1-1-0 定义的用户对文件删除和
          写入 DAC 的权限。

权限

3.2.3 Windows 目录结构

Users文件夹内包含着用户的一些信息和资料

program files

Program Files 指的是程序文件,也就是Windows 操作系统,也包括其它的操作系统各种软件默认安装到的目录。位于C盘分区(”C:\Program Files”,”%ProgramFiles%”)。

AppData

Appdata文件位于系统盘(一般是C盘)→用户→Default 目录下,里面还包含了Locallow、Local转、Loaming等文件夹,具体功能如下。

1、locallow:共享数据存放文件,一般都可以清理一些无用的共享文件。

2、Local:本地保存文件,其中本地临时文件,AppData\Local\Temp\下面的文件可以删除(注意是Temp)。

3、Roaming:保存应用程序运行后的数据信息,如果删除应用程序运行配置数据会丢失

ProgramDate

ProgramDate文件夹属于电脑 C盘的一个系统文件夹,它是公用的被创建文件夹或文件存放的地方,这些文件夹或文件仅由创建者完整控制。

3.3 路由设置

tracert baidu.com
route print
netstat -r
route add 70.34.197.181 mask 255.255.255.255 192.168.103.1 
route delete 192.168.0.0

Events

安全蓝队 : windows日志检索和分析

四、服务(Services

Microsoft Windows 服务(过去称为 NT 服务)允许用户创建可在其自身的 Windows 会话中长时间运行的可执行应用程序。 这些服务可在计算机启动时自动启动,可以暂停和重启,并且不显示任何用户界面。 这些功能使服务非常适合在服务器上使用,或者需要长时间运行的功能(不会影响在同一台计算机上工作的其他用户)的情况。 还可以在与登录用户或默认计算机帐户不同的特定用户帐户的安全性上下文中运行服务。

4.1 服务生存周期

​ 一项服务在其生存期内会经历几个内部状态。 首先,服务会安装到它将在其上运行的系统上。 此过程执行服务项目的安装程序,并将该服务加载到该计算机的服务控制管理器 中。 服务控制管理器是Windows 提供的用于管理服务的中央实用程序。

​ 必须在服务加载完成后启动它。 启动该服务以允许它开始运行。 可以从服务“服务控制管理器” 、“服务器资源管理器” ,或从通过调用 Start 方法的代码来启动服务。 Start 方法将处理进程传递给应用程序的OnStart 方法,并处理在那里定义的任何代码。

​ 正在运行的服务可以在此状态下无限期地存在,直到它停止或暂停,或者直到计算机关闭。 服务可以三种基本状态之一存在:RunningPausedStopped。 该服务还可以报告挂起命令的状态:ContinuePending、PausePending、StartPending 或 StopPending。 这些状态指示命令已发出(例

如,暂停正在运行的服务的命令),但尚未执行。 可以查询 Status 以确定服务所处的状态,或者在出现其中任一状态时使用 WaitForStatus 执行操作。

​ 可以从“服务控制管理器” 、“服务器资源管理器” ,或通过调用代码中的方法来暂停、停止或恢复服务。其中的每个操作都可以调用服务中的相关过程(OnStop、OnPause 或 OnContinue),可以在其中定义在服务更改状态时执行的其他处理进程。

4.1.1 services.msc

在 Windows 中,打开 “服务”桌面应用程序。 按“Windows 徽标键+R”以打开“运行”框,然后输入services.msc 并按 Enter 或单击“确定” 。你会看到 “服务”中列出的服务按其设置的显示名称的字母顺序显示。

服务

每一行列出了服务的五个基本属性 (名称、描述、状态、启动类型、登录为)。其中我们比较关心的是服务的 状态启动类型,状态有三种基本状态,分别是 RunningPausedStopped。启动类型则有如下四种类型 : 手动自动自动(延迟启动)、禁用

  • 手动 :服务只会在明确被调用的时候才会启动自动 :服务会在系统启动时启动

  • 自动(延迟启动):服务会在系统启动一段时间后启动。此选项在 windows Vista 中引用,目的是

  • 降低等待时间。

  • 禁用 :服务被停用。

通过 services.msc 可以轻松对服务的属性进行编辑。

服务编辑

4.1.2 使用 SC 控制服务

描述:
        SC 是用来与服务控制管理器和服务进行通信
        的命令行程序。
用法:
        sc <server> [command] [service name] <option1> <option2>...


        <server> 选项的格式为 "\\ServerName"
        可通过键入以下命令获取有关命令的更多帮助: "sc [command]"
        命令:
          query-----------查询服务的状态,
                          或枚举服务类型的状态。
          queryex---------查询服务的扩展状态,
                          或枚举服务类型的状态。
          start-----------启动服务。
          pause-----------向服务发送 PAUSE 控制请求。
          interrogate-----向服务发送 INTERROGATE 控制请求。
          continue--------向服务发送 CONTINUE 控制请求。
          stop------------向服务发送 STOP 请求。
          config----------更改服务的配置(永久)。
          description-----更改服务的描述。
          failure---------更改失败时服务执行的操作。
          failureflag-----更改服务的失败操作标志。
          sidtype---------更改服务的服务 SID 类型。
          privs-----------更改服务的所需特权。
          managedaccount--更改服务以将服务帐户密码
                          标记为由 LSA 管理。
          qc--------------查询服务的配置信息。
          qdescription----查询服务的描述。
          qfailure--------查询失败时服务执行的操作。
          qfailureflag----查询服务的失败操作标志。
          qsidtype--------查询服务的服务 SID 类型。
          qprivs----------查询服务的所需特权。
          qtriggerinfo----查询服务的触发器参数。
          qpreferrednode--查询服务的首选 NUMA 节点。
          qmanagedaccount-查询服务是否将帐户
                          与 LSA 管理的密码结合使用。
          qprotection-----查询服务的进程保护级别。
          quserservice----查询用户服务模板的本地实例。
          delete ----------(从注册表中)删除服务。
          create----------创建服务(并将其添加到注册表中)。
          control---------向服务发送控制。
          sdshow----------显示服务的安全描述符。
          sdset-----------设置服务的安全描述符。
          showsid---------显示与任意名称对应的服务 SID 字符串。
          triggerinfo-----配置服务的触发器参数。
          preferrednode---设置服务的首选 NUMA 节点。
          GetDisplayName--获取服务的 DisplayName。
          GetKeyName------获取服务的 ServiceKeyName。
          EnumDepend------枚举服务依赖关系。

        以下命令不需要服务名称:
        sc <server> <command> <option>
          boot------------(ok | bad)指示是否应将上一次启动另存为
                          最近一次已知的正确启动配置
          Lock------------锁定服务数据库
          QueryLock-------查询 SCManager 数据库的 LockStatus
示例:
        sc start MyService


QUERY 和 QUERYEX 选项:
        如果查询命令带服务名称,将返回
        该服务的状态。其他选项不适合这种
        情况。如果查询命令不带参数或
        带下列选项之一,将枚举此服务。
    type=    要枚举的服务的类型(driver, service, userservice, all)
             (默认 = service)
    state=   要枚举的服务的状态 (inactive, all)
             (默认 = active)
    bufsize= 枚举缓冲区的大小(以字节计)
             (默认 = 4096)
    ri=      开始枚举的恢复索引号
             (默认 = 0)
    group=   要枚举的服务组
             (默认 = all groups)

语法示例
sc query                - 枚举活动服务和驱动程序的状态
sc query eventlog       - 显示 eventlog 服务的状态
sc queryex eventlog     - 显示 eventlog 服务的扩展状态
sc query type= driver   - 仅枚举活动驱动程序
sc query type= service  - 仅枚举 Win32 服务
sc query state= all     - 枚举所有服务和驱动程序
sc query bufsize= 50    - 枚举缓冲区为 50 字节
sc query ri= 14         - 枚举时恢复索引 = 14
sc queryex group= ""    - 枚举不在组内的活动服务
sc query type= interact - 枚举所有不活动服务
sc query type= driver group= NDIS     - 枚举所有 NDIS 驱动程序

sc 常用命令

sc \\ServerName query spooler // 查看远程机器的服务状态 
sc qc spooler // 查询服务的配置信息 
sc start spooler // 停止指定服务 
sc start spooler // 开启指定服务 
sc query | findstr Manager // 查询所有服务名中有 Manager 的服务 
sc delete <ServerName> // 删除指定服务 
sc create WindowsUpdate binPath="cmd /K C:\windows\beacon.exe" 
DisplayName="WindowsUpdate" // 创建名为 WindowsUpdate 的服务 
sc create WindowsUpdate binPath="cmd /k C:\windows\beacon.exe" 
DisplayName="WindowsUpdate" start=auto // 创建名为 WindowsUpdate 的服务并设置启动状 态为自启动 
sc sdshow spooler // 显示服务的安全描述符

五、Firewall

Windows 防火墙(在Windows 10 中正式称为Windows Defender 防火墙),是MicrosoftWindows的防火墙组件。它首先包含在Windows XP和Windows Server 2003 中。在 2004 年发布Windows XP Service Pack 2之前,它被称为Internet 连接防火墙。随着 2017 年 9 月 Windows10 版本 1709 的发布,它更名为 Windows Defender 防火墙。

5.1 windows防火墙

Windows Defender高级安全防火墙提供基于主机的双向网络流量筛选,并阻止未经授权的网络流量流入或流出本地设备

windows系统默认的规则:默认阻止入站连接,默认允许出站连接。也就是说,凡是入站连接,任何程序和端口都要在防火墙上配置入站规则,否则都会被禁止

Firewall

三种配置文件的区别:

连接到可检测计算机加入域的域控制器的网络时,应用于网络适配器。
专用 家中或在工作中信任网络上的人和设备的网络。选择专用网络时,网络发现会打开,但文件和打印机共享会关闭。专用配置文件设置应该比域配置文件设置更为严格。
公用 公共场所的网络。此位置可防止其他计算机看到该计算机。当公共网络是选定的网络位置时,网络发现以及文件和打印机共享将关闭。由于计算机连接到无法控制安全性的公用网络,因此公用配置文件设置应该最为严格。

配置文件的具体配置相关

  • 防火墙状态。您可以为每个配置文件单独打开或关闭防火墙。

  • 入站连接。您可以阻止与任何活动防火墙规则不匹配的连接(这是默认设置),无论入站规则规范如何,都阻止所有连接,或允许与活动防火墙规则不匹配的入站连接。出站连接。您可以允许与任何活动防火墙规则不匹配的连接(这是默认设置)或阻止与活动防火墙规则不匹配的出站连接。

  • 受保护的网络连接。您可以选择希望 Windows 防火墙帮助保护的连接(例如,本地连接)。您可以配置显示通知和单播响应,以及通过组策略分发的合并规则。您可以配置和启用日志记录。

  • IPsec 设置。您可以为 IPsec 配置配置默认值。IPSEC

  • 在通信之前和期间提供相互身份验证。

  • 强制双方在沟通过程中表明自己的身份。

  • 通过 IP 流量加密和数字数据包身份验证实现机密性。

IPsec

WF.msc

打开“控制面板”,然后输入 允许应用或功能通过Windows Defender防护墙 你会看到 “高级安全Windows Defender防火墙” 或 按“Windows 徽标键+R”以打开“运行”框,然后输入WF.msc 并按 Enter或单击“确定” 。

规则

入站规则 出战规则 连接安全规则 监视 4个列表

  • 入站规则:其他网络设备或机器访问自己机器的触发的规则。

  • 出站规则:自己机器去访问其他网络设备或机器触发的规则。

netsh在渗透中的利用

  • 修改防火墙配置(不会被360拦截)
1.开启防火墙
  netsh advfirewall set allprofiles state on 
2.关闭防火墙 
  netsh advfirewall set allprofiles state off 
3.恢复防火墙默认设置 
  netsh advfirewall reset 
4.添加远程桌面入站规则允许端口3389 
  netsh advfirewall firewall add rule name=远程桌面(TCP-In-3389) protocol=TCP 
  dir=in localport=3389 action=allow 
5.删除规则(可以删除特定的防火墙规则) 
  netsh advfirewall firewall delete rule name=远程桌面(TCP-In-3389) 
6.导出防火墙配置到文件 
  netsh advfirewall export c:\xxx.pol 
7.导入防火墙配置文件到系统中 
  netsh advfirewall import c:\xxx.pol
  • POWERSHELL
1.关闭所有配置文件的防火墙 
Set-NetFirewallProfile -All -Enabled False 
2.打开所有配置文件的防火墙 
Set-NetFirewallProfile -All -Enabled True 
3.设置允许专业配置文件 80 443端口入站规则 
New-NetFirewallRule -DisplayName 'HTTP-Inbound' -Profile @('Private') - Direction Inbound -Action Allow -Protocol TCP -LocalPort @('80', '443') 
4.允许特定ip入站规则连接3389 
New-NetFirewallRule -DisplayName "AllowRDP" –RemoteAddress 192.168.2.200 - Direction Inbound -Protocol TCP –LocalPort 3389 -Action Allow
  • 端口转发
1.查看所有端口代理参数 
netsh interface portproxy show all 
2.将本地1337端口流量转发到192.168.1.2 的8000端口 
netsh interface portproxy add v4tov4 listenport=6666 connectport=8000 connectaddress=192.168.1.2 
端口转发配置是保存在注册表的 
Get-ItemProperty -Path 
HKLM:\SYSTEM\CurrentControlSet\Services\PortProxy\v4tov4\tcp 
3.删除端口转发的规则 
netsh interface portproxy delete v4tov4 listenport=6666

文章作者: Taoing
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Taoing !
  目录