内网渗透的流程
- 从外网拿下一个主机当做跳板
- 用
net user /domian
命令查看跳板机是否在域内,探测存活主机 - 提权、提取hash
- 进行横向移动,定位dc位置
- 查看是否有能直接提权域管的漏洞,拿到dc控制权后进行提权
- 最后制作黄金票据做好维权,清理日志
内网渗透的一些基础概念
简写 | 全称 | 描述 |
---|---|---|
DC | Domain Controller | 域控 |
KDC | Key Distribution Center | 秘钥分发中心 |
AD | Account Database | 账户数据库 |
ST | Service Tickets | ST服务票据,由TGS服务发送 |
AS | Authentication Server | 身份验证服务,认证用户的身份,并为其发放TGT的服务 |
AP | Application Server | 提供用户所需的服务 |
TGS | Ticket Granting Server | 票据授予发放服务 |
TGT | Ticket Granting Ticket | TGT认证票据,由AS服务发放,存储在内存,默认有效期为10小时 |
黄金票据 | Golden Ticket | 使用域账号krbtgt的NTLM Hash进行加密 |
白银票据 | Silver Ticket | 使用服务账户的NTLM Hash进行加密 |
socket通信与代理
两台计算机间的通信,其实是两台计算机中应用程序(进程)与应用程序(进程)间的通信。但“IP地址”仅能定位到计算机,如何定位到应用程序(进程)呢?答案是“协议+端口”。
如果你对同源策略有所了解就能马上反应过来,这就是IP + 协议 + 端口
Socket 就是一个类,封装了许多功能函数,当需要建立连接进行通信时,它会先进行初始化,然后通过内置的功能函数建立连接并完成通信(打开、读/写IO、关闭),其中就包含了TCP的三次握手。
正向代理和反向代理本质上并无区别,正向代理即客户端代理,代理客户端,服务端不知道实际发起请求的客户端。反向代理即服务端代理,代理服务端,客户端不知道实际提供服务的服务端。
正向代理可以隐藏用户的信息,并能够将其作为跳板访问我们无法访问的资源,如翻墙。反向代理可以隐藏服务器的信息,保障了内网的安全,同时能够用来实现负载均衡。(负载均衡也是防御DOS攻击的一种方式)
在地址转换与端口映射中,静态NAT
是路由器上手动配置,一个内网地址和一个公网地址相关联,一一对应。动态NAT
是路由器上配置一个公网IP地址池,当内网地址访问外网时从地址池里获取公网IP进行映射。当公网IP地址池分配完时,只能等待被占用的公网IP被释放后,其他主机才能获取公网IP访问公网。这种将源地址进行转换的方式也可称之为 SNAT(源地址转换)。NAPT 网络地址端口转换
是允许多个内网地址映射到同一个公网IP的不同端口。这种将源地址和端口进行转换的方式也可称之为 SNAPT(源地址端口转换)。
端口转发,有时被叫做隧道,是安全壳(SSH)为网络安全通信使用的一种方法。在内网中,是没有办法直接访问外网的。但是我们可以通过路由器的NAT方式访问外网。
内网穿透是当想要访问内部网络但又没有权限去操作防火墙做端口映射的情况的时候,就需要搭建一条隧道来做端口转发和流量转发。
正向socks:当一个机器同时存在内外网IP时就能在外网通过正向连接去访问其它内网机器,而且这里跳板机就相当于正向代理。因为对于攻击者来说它是可知的,而对于内网机来说,它们并不知道它们返回给跳板机的响应又被发送给了攻击者。
反弹socks:当目标机器没有公网IP,但可访问内网资源时。攻击者可以在内网跳板机上运行EarthWorm使其反弹到某台对外连接的内网服务器上,然后攻击者再通过外网连接到对外服务器进而进入到内网中。这里公网服务器既是正向代理也是反向代理。对于攻击者来说它是可知的,因为我们要通过它访问我们无法访问的资源;对于内网服务器(跳板机)来说它也是可知的,因为我们是在内网服务器(跳板机)上执行的反弹命令,使其反向连接到公网服务器上。而内网服务器(跳板机)在这里充当的仅是公网服务器的正向代理,因为它对于公网服务器来说是可知的,而对于其他内网机来说则是不可知的。
kerberos协议认证是什么?
Kerberos是一种网络身份认证的协议,协议设计目的是通过使用秘钥加密技术为客户端/服务器应用程序提供强身份验证。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意的读取、修改和插入数据。在以上情况下,Kerberos作为一种可信任的第三方认证服务,通过传统的密码技术执行认证服务。
Kerberos认证流程:
票据中心授予的票据先去AS身份验证服务,返回身份验证,带着身份验证去TGS拿票据,带着拿回来的票据去服务器。
白银票据与黄金票据的原理?
金票:在 Kerberos 认证中,Client 通过身份认证后,AS 会给 Client一个Logon Session Key 和 TGT,而 Logon Session Key 并不会保存在 KDC 中,krbtgt 的NTLM Hash 又是固定的,所以只要得到 krbtgt 的 NTLM Hash,就可以伪造TGT 和Logon Session Key 来进入下一步 Client 与 TGS 的交互。而已有了金票后,就跳过AS 验证,不用验证账户和密码,所以也不担心域管密码修改。
银票:如果说黄金票据是伪造的 TGT,那么白银票据就是伪造的 ST。在 Kerberos 认证的第三步,Client 带着 ST 和Authenticator3 向 Server 上的某个服务进行请求,Server 接收到 Client 的请求之后,通过自己的 Master Key 解密 ST,从而获得Session Key。通过 Session Key 解密 Authenticator3,进而验证对方的身份,验证成功就让 Client 访问 server 上的指定服务了。所以我们只需要知道 Server 用户的Hash 就可以伪造出一个 ST,且不会经过 KDC,但是伪造的门票只对部分服务起作用。
金票和银票的区别:
获取的权限不同
认证流程不同
加密方式不同
针对kerbores的攻击有哪些?
- 用户名爆破
- 密码喷洒和密码爆破
- Kerberoasting
- ASRepRoasting
- 黄金票据和白银票据
- MS14-068
- 非约束委派、约束委派、基于资源的约束委派
- 票据传递(ptt/ptk/ptc)
- mimikatz加密降级攻击(万能钥匙)
- 使用恶意的kerberos证书做权限维持
黄金票的条件要求?
1.域名称 AD PowerShell模块:(Get-ADDomain).DNSRoot
2.域的SID 值 AD PowerShell模块:(Get-ADDomain).DomainSID.Value(就是域成员SID值去掉最后的)
3.目标服务器的 FQDN
4.可利用的服务
5.域的KRBTGT账户NTLM密码哈希
6.需要伪造的用户名
一旦攻击者拥有管理员访问域控制器的权限,就可以使用Mimikatz来提取KRBTGT帐户密码哈希值
票据伪造
票据分为黄金票据和白银票据。
黄金票据是伪造TGT,伪造黄金票据必须拿到域控管理员的权限才可以。
伪造黄金票据需要:域名城、域SID值、域的KRBTGT账户、NTLM哈希密码、伪造用户名
横向连接方式
$IPC、Psexec、WMI、Schtasks、AT、SC、WINRM
如何获取内网中机器数量
可以使用命令net user /domian
使用扫描器扫一下
内网环境不出网怎么办?
- 通过webshell实现内网socket代理
- 正向链接
- ssh隧道
- 协议不同出网的方式不同,如dns对应dnscat2 tcp对应
- 测试是否是特定协议或端口出网
mimikatz使用方法
mimikatz是一款强大的系统密码破解获取工具。可以破解哈希值,是一个可加载的Meterpreter模块。
如果system的权限无法执行执行。需要先进行提权。
在meterpreter中输入run post/multi/recon/local_exploit_suggester
,进行提权漏洞检测。
拿下边界机器如何内网渗透?
拿下机器后,使用代理访问内网
windows环境:reGeorg与proxifier
Linux环境:reGeorg与proxychains,
使用nmap等工具进行扫描,发现web服务的主机和其它信息。有时这些边界机器上会记录一些内网服务器上的一些信息,这时候可以拿到探测的内部一些开放的端口判断进行渗透,通常用户这里基本是统一命名的,拿到的各种记录会暴露出部分内网通讯的ip.
linux常见的提权办法
- uid提权 (find / -perm -u=s -type f 2>/dev/null)
sudo git help config !/bin/bash
或者!'sh'
完成提权- 脏牛提权
- 内核提权
- 环境劫持
- suid提权
- cve-2021-4034
- docker提权
Windows提权的若干办法?
- 系统漏洞提权
通过 Webshell 命令行执行systeminfo 命令查看系统是否打了提权补丁,可使用 exp 进行提权
通过 Webshell 找网站读写执行目录,把 cs 马或提权 exp 上传到对方服务器(如果cmd无法执行命令可单独上传 cmd.exe 到对方服务器,菜刀终端设置为 setpc:\XXX\cmd.exe) - 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
文件。 - 不安全的服务权限提升
由于管理配置错误,用户可能对服务拥有过多的权限,例如用木马替换服务调用的默认文件。 - 绕过系统 UAC 提升
可通过 msf 里面的 getsystem 绕过 UAC,也可以通过 kail 模块的exploit/windows/local/bypassuac_injection、exploit/windows/local/bypassuac_vbs、exploit/windows/local/ask 绕过 UAC
权限维持
Windows机器:
- 替换系统文件类(shift 后门,放大镜后门)
- 修改注册表类
自启动项、屏幕保护程序注册表、用户登陆初始化、登录脚本、映像劫持、影子账户、AppCertDlls 注册表项、AppInit_DLLs 注册表项、文件关联、用户登陆初始化、xx.Netsh Helper DLL - 文件类
自启动文件夹、office Word StartUp 劫持 - 计划任务
schtasks 、WMI、bitsadmin
Linux:
- 预加载型动态链接库后门
- strace 后门
- SSH 后门
- SUID 后门
- inetd 服务后门
- 协议后门
- vim 后门
- PAM 后门
- 进程注入
- Rootkit
- 端口复用
拿到shell后如何接管域控?
如果拿到的就是域内用户,定位一下域控,提取本机hash
看域管是否登陆过本机,是否有域用户的进程之类的注入域用户进程窃取下权限,然后使用一些域内漏洞来提权到域管从而接管域控,然后通过dcsync
权限维持或者adminsdhound
权限维持,也可以修改机器账号的useraccount
为 8192 达成权限维持。
(注:把机器账户的UserAccountControl属性修改为8192后,活动目录就会认为这个机器账户是域控)
内网渗透搭建隧道常见的攻击?
frp、ew、ssh、Neo-reGeorg、netsh、Lcx
网络层:Ipv6情况、icmp情况、Gre隧道0
传输层:Tcp 隧道、udp 隧道 常规端口转发
应用层:ssh隧道、http隧道、https隧道、dns隧道
内网横向扩展具体方法?
密码喷洒、IPC$、WMI、mimikatz、PTH、MS14-068、web漏洞、系统漏洞
KDC服务默认开放哪些端口?
88 kerberos krb5、464kerberos kpasswd(v5)
桌面有管理员会话,想要做会话劫持怎么做?
提权到system权限,然后去通过工具,就能够劫持任何处于已登录用户的会话,而无需获得该用户的登录凭证。
终端服务会话可以是连接状态也可以是未连接状态
域内攻击方法有什么?
MS14-068、Roasting攻击离线爆破密码、非约束性委派、基于资源的约束委派、ntlmrelay、CVE-2021-42287/CVE-2021-42278
抓取密码
procdump+mimikatz 转储然后用mimikatz离线读取,或者Sam获取然后离线读取。
windows server 2012之后,或者打了补丁都抓不到了。
只能翻阅文件查找运维等等是否记录密码,或者hash传递、或者获取浏览器的账号密码。
psexec和wmic的区别
psexec会记录大量日志,wmic不会记录日志并且更为隐蔽
横向渗透命令执行手段
psexec,wmic,smbexec,winrm,net use共享+计划任务+type命令
内网的白名单如何突破?
- 利用已在白名单中的软件执行目标代码,甚至发动无文件攻击
- 白名单污染
- 暴力破解白名单防护软件
内网135端口具体有哪些利用方式?
爆破用户、wmic执行命令进行横向
怎么做域控定位?
cmd定位:
net group “Domain controllers” /Domain //查询域控
net time /domain//方式来定位域控,显示域控时间
DNS解析记录定位:nslookup -type=all _ldap._tcp.dc._msdcs.tubai.com
若当前主机dns为域内dns,则可以通过解析记录定位端口探测定位:扫描内网中同时开放389
、636
与53
的机器,389
默认是LDAP
协议端口,636
端口是LDAPS
,53
端口默认是DNS端口,主要用于域名解析,通过DNS服务器可以实现域名与ip地址之间转换,他们都是域控机器开放的端口
SPN扫描定位:由于SPN
本身就是正常的kerberos
请求,所以扫描隐蔽,它不同于TCP
与UDP
常规端口扫描。大部分windows已经自带setspn.exe
,且此操作无需管理权限
命令:setspn -T tubai.com -Q /
扫描结果中根据:CN=AD-SERVER,OU=Domain Controllers,DC=tubai,DC=com
来进行域控的定位
域管定位
net group “Domain Admins” /domain //查询域管理员
此外还可以通过一些工具定位:PSloggedon.exe、PVefindaduser.exe、powerView.ps1
mimikatz是从哪个进程抓hash?
mimikatz是从哪个进程抓hash?
win2012 无法破解hash 怎么上桌面?
hash pth传递
入侵Linux服务器后需要清除哪些日志?
web日志,如 apache 的 access.log,error.log。
直接将日志清除过于明显,一般使用sed 进行定向清除sed -i -e ‘/192.169.1.1/d’
history 命令的清除,也是对~/.bash_history 进行定向清除
wtmp日志的清除 /var/log/wtmp
登录日志清除 /var/log/secure
内网渗透要怎么做?
第一种方法:
在具备Webshell的情况下,通过Webshell直接上传CS木马到对方服务器运行,在CS软件上面开启 SocksProxy代理,把 kail 直接通过cs socksProxy代理攻击内网进行横向渗透。
第二种方法:
通过reGeorg+Proxifie进行内网渗透,把 tunnel.nosocket.php 脚本通过Webshell上传到 Web 站点目录进行访问,在本地自己电脑上面执行reGeorgSocksProxy.py -p 9999 –u http://IP 地址/tunnel.nosocket.php
,最后配置 Proxifier 本地代理地址与端口进行横向内网渗透。
内网横向渗透的一些攻击技巧
- 通过 nmap、nessus 扫描整个内网 ip 主机漏洞
ms08-067、ms17-010、ms12-020、ms15-035、ms19-0708、永恒之蓝2代、cve-2017-7494(samba)、cve-2014-6271(破壳)、php cgi
- 通过 nmap 扫内网 Web 站点端口,手动或自动进行漏洞检测
注入、命令执行、反序列化、文件上传、弱口令等
- 通过 ntscan、Bruter、hydra 工具对内网弱口令探测,同时很可能存在密码复用现象
- 适当的对内网主机进行 ARP 抓取密码
- 如果内网有 AD 域的情况下,可以通过 MS14-068 漏洞、黄金票据、白银票据进行域控攻击,拿下域控就等于基本拿下整个内网
windows cmd如何下载文件?
- certutil.exe
- powershell
- bitsadmin
- vbs
- ftp
怎么隐藏攻击痕迹?
- 跳板
- 代理服务器
- Tor
- 日志
- 清除历史记录
- 粉碎文件
Hash和NTML hash区别?
NTLM Hash(NT LAN Manager)是支持Net NTLM认证协议及本地认证过程中的一个重要参数。其长度为32位,由数字与字母组成。
ntml hash生成方式是将明文口令转换成十六进制的格式 转换成Unicode格式,即在每个字节之后添加0x00对Unicode字符串作MD4加密,生成32位十六进制数字串
内网中的信息收集技术
【主机信息收集】
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
【域内信息收集】
是否有域:使用ipconfig /all命令可以查看网关IP地址、DNS的IP地址以及判断当前主机
是否在域内:通过反 向解析查询命令nslookup来解析域名的IP地址,使用解析出来的IP地址进行对比,判断域控制器和 DNS服务器是否在同一台服务器上
登录域信息:net config workstation
ICMP探测内网:for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.174.%I | findstr "TTL="
ARP探测内网:
端口信息收集:
查询域信息:net view /domain
查询域主机:net view /domain:XXX
查询域用户:net group /domain
查找域控:Nslookup -type=SRV _ldap._tcp net time /domain net group "Domain Controllers" /domain
查域用户信息:net user /domain
查询域管理员:net group "Domain Admins" /domain
查询域sid信息:whoami /all