<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>SQL注入 on Chestnut Blog</title>
        <link>https://11e78f17.chestnut-blog-5da.pages.dev/tags/sql%E6%B3%A8%E5%85%A5/</link>
        <description>Recent content in SQL注入 on Chestnut Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Wed, 08 Apr 2026 14:30:00 +0800</lastBuildDate><atom:link href="https://11e78f17.chestnut-blog-5da.pages.dev/tags/sql%E6%B3%A8%E5%85%A5/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>Polaris CTF 招新赛 Web 方向复盘</title>
            <link>https://11e78f17.chestnut-blog-5da.pages.dev/post/polaris-ctf-web/</link>
            <pubDate>Wed, 08 Apr 2026 14:30:00 +0800</pubDate>
            <guid>https://11e78f17.chestnut-blog-5da.pages.dev/post/polaris-ctf-web/</guid>
            <description>&lt;img src=&#34;https://11e78f17.chestnut-blog-5da.pages.dev/&#34; alt=&#34;Featured image of post Polaris CTF 招新赛 Web 方向复盘&#34; /&gt;&lt;p&gt;1. &lt;strong&gt;ezpollute&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;分析源码，是一个Node.js + Express 网站，&lt;/p&gt;&#xA;&lt;p&gt;1启动一个 Web 服务&lt;/p&gt;&#xA;&lt;p&gt;2提供一个接口 /api/config，让用户提交 JSON 配置&lt;/p&gt;&#xA;&lt;p&gt;3提供一个接口 /api/status，去启动一个新的 node 子进程，检查“Node.js 是否正常运行”&lt;/p&gt;&#xA;&lt;img src=&#34;media/image1.png&#34; style=&#34;width:5.76806in;height:1.63056in&#34; /&gt;&#xA;&lt;p&gt;开发者显然知道 __proto__ 常常和原型污染有关，所以他写了个“黑名单”：&lt;br&gt;&#xA;如果发现传进来的键名是 __proto__，就拒绝。&lt;/p&gt;&#xA;&lt;img src=&#34;media/image2.png&#34; style=&#34;width:5.76806in;height:1.54236in&#34; /&gt;&#xA;&lt;p&gt;不过 in 不只检查对象自己有没有这个属性，还会检查它原型链上的属性。&lt;/p&gt;&#xA;&lt;p&gt;BUT &lt;strong&gt;没拦 constructor.prototype&lt;/strong&gt;。&lt;br&gt;&#xA;由于 key in target 会沿原型链找，config 上虽然没有自有属性 constructor，但它能从 Object.prototype 继承到，所以可以一路递归到 Object.prototype，形成原型污染。&lt;/p&gt;&#xA;&lt;p&gt;构造payload拿下&lt;/p&gt;&#xA;&lt;img src=&#34;media/image3.png&#34; style=&#34;width:5.76806in;height:2.00347in&#34; /&gt;&#xA;&lt;p&gt;XMCTF{9fa42f10-38fa-4963-b4ca-a21beabee11e}&lt;/p&gt;&#xA;&lt;p&gt;2. &lt;strong&gt;ez_python&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;分析app.py, Flask框架&lt;/p&gt;&#xA;&lt;p&gt;考点是 Python 对象属性递归合并导致的任意属性覆盖&lt;/p&gt;&#xA;&lt;img src=&#34;media/image4.png&#34; style=&#34;width:5.76806in;height:2.37222in&#34; /&gt;&#xA;&lt;p&gt;`POST /` 会在 `request.data` 非空时执行 `merge(json.loads(request.data), instance)`&lt;/p&gt;&#xA;&lt;p&gt;- `merge()` 可递归修改 `instance.config.filename`&lt;/p&gt;&#xA;&lt;p&gt;- `GET /read` 会执行 `open(instance.config.filename).read()`，形成任意文件读取&lt;/p&gt;&#xA;&lt;img src=&#34;media/image5.png&#34; style=&#34;width:5.76806in;height:2.24861in&#34; /&gt;&#xA;&lt;img src=&#34;media/image6.png&#34; style=&#34;width:5.76806in;height:1.55139in&#34; /&gt;&#xA;&lt;p&gt;3、&lt;strong&gt;Broken Trust&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;/api/profile 存在未鉴权 SQL 注入，可直接泄露管理员资料。用该 UID 登录后可访问 /api/admin?action=backup&amp;amp;file=&amp;hellip;，直接拿到flag&lt;/p&gt;&#xA;&lt;p&gt;先随便注册一个&lt;/p&gt;&#xA;&lt;img src=&#34;media/image7.png&#34; style=&#34;width:4.52361in;height:2.55971in&#34; /&gt;&#xA;&lt;p&gt;知道了 只有管理员可以拿到权限&lt;/p&gt;&#xA;&lt;p&gt;Dirsearch扫描发现/api/profile&lt;/p&gt;&#xA;&lt;img src=&#34;media/image8.png&#34; style=&#34;width:4.08681in;height:1.8028in&#34; /&gt;&#xA;&lt;img src=&#34;media/image9.png&#34; style=&#34;width:5.76806in;height:1.41944in&#34; /&gt;&#xA;&lt;p&gt;BP改个抓包方式&lt;/p&gt;&#xA;&lt;img src=&#34;media/image10.png&#34; style=&#34;width:5.76806in;height:1.12639in&#34; /&gt;&#xA;&lt;p&gt;打出管理员UID，基本搞定了&lt;/p&gt;&#xA;&lt;img src=&#34;media/image11.png&#34; style=&#34;width:5.76806in;height:0.47083in&#34; /&gt;&#xA;&lt;p&gt;用管理员UID登录，路径不对，想到路径穿越，慢慢试，试出来，&lt;/p&gt;&#xA;&lt;img src=&#34;media/image12.png&#34; style=&#34;width:5.76806in;height:0.76667in&#34; /&gt;&#xA;&lt;p&gt;直接flag&lt;/p&gt;&#xA;&lt;img src=&#34;media/image13.png&#34; style=&#34;width:5.76806in;height:0.56667in&#34; /&gt;&#xA;&lt;p&gt;4.only-real&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1&amp;gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;F12提示了账号密码&lt;/p&gt;&#xA;&lt;img src=&#34;media/image14.png&#34; style=&#34;width:5.76806in;height:2.01389in&#34; /&gt;&#xA;&lt;p&gt;登入进去之后f12把disabled全部删除&lt;/p&gt;&#xA;&lt;img src=&#34;media/image15.png&#34; style=&#34;width:5.76806in;height:2.48681in&#34; /&gt;&#xA;&lt;p&gt;&lt;strong&gt;2&amp;gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;看看能不能进行JWT伪造（JSON Web Token）&lt;/p&gt;&#xA;&lt;p&gt;JWT（JSON Web Token）伪造是 Web 安全中非常经典且重要的一个考点。在 CTF 的 Web 方向中，它通常是你从“普通访客”跨越到“管理员”并最终拿到 Flag 的关键钥匙。&lt;/p&gt;&#xA;&lt;p&gt;我们可以把 JWT 想象成一张“电子通行证”，服务器一旦签发给你，之后就不再查询数据库，而是直接通过查验这张通行证上的印章（签名）来确认你的身份。&lt;strong&gt;JWT 伪造的核心原理，就是利用服务端验证机制的漏洞，自己伪造出一枚能够以假乱真的“印章”，从而随意篡改通行证上的身份信息。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;为了理解它是怎么被伪造的，我们需要先拆解这张通行证的结构。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;JWT 的基础结构&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;一个标准的 JWT 看起来是一串由两个点 . 分隔的长字符串（例如 xxxxx.yyyyy.zzzzz），它由三部分组成，每部分都经过了 Base64Url 编码：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Header（头部）：&lt;/strong&gt; 声明了这块 Token 的类型（JWT）和所使用的签名算法（比如 HS256 或 RS256）。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;JSON&lt;/p&gt;&#xA;&lt;p&gt;{ &amp;ldquo;alg&amp;rdquo;: &amp;ldquo;HS256&amp;rdquo;, &amp;ldquo;typ&amp;rdquo;: &amp;ldquo;JWT&amp;rdquo; }&lt;/p&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;Payload（负载）：&lt;/strong&gt; 存放实际的有效信息，比如你的用户名、角色、过期时间等。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;JSON&lt;/p&gt;&#xA;&lt;p&gt;{ &amp;ldquo;user&amp;rdquo;: &amp;ldquo;guest&amp;rdquo;, &amp;ldquo;role&amp;rdquo;: &amp;ldquo;user&amp;rdquo; }&lt;/p&gt;&#xA;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;Signature（签名）：&lt;/strong&gt; 这是防伪的关键。服务器用一个只有它自己知道的&lt;strong&gt;密钥（Secret）&lt;/strong&gt;，按照 Header 里指定的算法，对 Header 和 Payload 进行加密计算得出的结果。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;img src=&#34;media/image16.png&#34; style=&#34;width:5.76806in;height:1.89583in&#34; /&gt;&#xA;&lt;img src=&#34;media/image17.png&#34; style=&#34;width:5.76806in;height:1.96944in&#34; /&gt;&#xA;&lt;p&gt;BP改jwt发包&lt;/p&gt;&#xA;&lt;p&gt;发现改user=admin回显未登录，alg=none，sub: &amp;ldquo;0&amp;quot;全部回显”无效cookie”&lt;/p&gt;&#xA;&lt;p&gt;遂,JWT伪造失败&lt;/p&gt;&#xA;&lt;p&gt;Wait，学习大佬的wp发现可能是一个弱密钥(正好学到利用jwtcracker工具，可以去csdn上看看，很简单，一学就会，不过爆破的时间有点长，最好问问GPT格式是啥，能省好多时间)&lt;/p&gt;&#xA;&lt;img src=&#34;media/image18.png&#34; style=&#34;width:5.76806in;height:0.23611in&#34; /&gt;&#xA;&lt;p&gt;芜湖，爆出来了cdef,&lt;/p&gt;&#xA;&lt;img src=&#34;media/image19.png&#34; style=&#34;width:5.76806in;height:2.16181in&#34; /&gt;&#xA;&lt;p&gt;&lt;strong&gt;这题其实直接dirsearch直接能扫出来，可能考点在only_real_revenge吧，我们那题再见&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;&lt;strong&gt;5.only_real_revenge&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;同上一题思路一样，用图片马尝尝咸淡，抓包再改回php，同时把伪造JWT传上&lt;img src=&#34;media/image20.png&#34; style=&#34;width:3.33437in;height:1.38878in&#34; /&gt;&lt;img src=&#34;media/image21.png&#34; style=&#34;width:3.69073in;height:2.43101in&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;访问直接出flag啦&lt;/p&gt;&#xA;&lt;img src=&#34;media/image22.png&#34; style=&#34;width:5.76806in;height:0.73889in&#34; /&gt;&#xA;&lt;p&gt;&lt;strong&gt;6.DXT&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;本体环境是一个“MCP 工具包管理后台”，它平时做的事是：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;你上传一个 .dxt 包&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;它解开这个包&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;读取里面的 manifest.json（相当于说明书）&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;按说明书里的内容，把这个 MCP server 启动起来&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;然后问它：&lt;br&gt;&#xA;“你有什么工具可以给我展示？”&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;在 &lt;strong&gt;MCP (Model Context Protocol)&lt;/strong&gt; 的语境下，.dxt 文件代表的是 &lt;strong&gt;Desktop Extension（桌面扩展）&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;简单来说，它就像是给 AI 助手（如 Claude Desktop）准备的“&lt;strong&gt;一键安装包&lt;/strong&gt;”。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1. .dxt 文件到底是什么？&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;本质上，一个 .dxt 文件就是一个&lt;strong&gt;压缩包（ZIP 格式）&lt;/strong&gt;，它把一个 MCP 服务器运行所需的所有东西都打包在了一起。它的结构通常包含：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;manifest.json&lt;/strong&gt;：这是整个扩展的“大脑”，告诉 AI 这个工具有什么功能、叫什么名字、需要怎么启动。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;服务器代码&lt;/strong&gt;：比如 Node.js 或 Python 编写的工具逻辑。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;依赖项&lt;/strong&gt;：运行这些代码需要的库文件。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;2. 它在 MCP 里面是用来做什么的？&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;在没有 .dxt 之前，如果你想给你的 Claude 增加一个“搜索本地文件”或者“操作数据库”的功能（即安装一个 MCP Server），你通常需要：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;安装 Node.js 或 Python 环境。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;手动修改复杂的 config.json 配置文件。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;处理各种环境变量和路径问题。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;有了 .dxt 文件后：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;一键安装&lt;/strong&gt;：你只需要把这个 .dxt 文件拖进支持 MCP 的客户端（比如 Claude Desktop），它就自动装好了。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;封装环境&lt;/strong&gt;：它解决了“在我电脑上能跑，在你那里报错”的问题，把环境依赖都打包好了。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;自动配置&lt;/strong&gt;：它会自动在后台帮你写好配置，不需要你手动去翻文件夹改 JSON。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;3. 注意：它正在变身&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;虽然你现在看到的是 .dxt，但根据最新的标准，这个格式正在演变为 &lt;strong&gt;.mcpb (MCP Bundle)&lt;/strong&gt;。它们的作用是一样的，都是为了让非技术用户也能像安装 Chrome 插件一样，轻松地给 AI 增加新技能。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;总结一下：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;如果你正在折腾 MCP 相关的开发，.dxt 就是你的&lt;strong&gt;发布工具&lt;/strong&gt;；如果你只是使用者，它就是你的&lt;strong&gt;安装包&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;这道题真的学到好多&lt;br&gt;&#xA;用dirsearch扫描&lt;img src=&#34;media/image23.png&#34; style=&#34;width:5.76806in;height:2.28333in&#34; /&gt;1&amp;gt;发现网站的后端&lt;strong&gt;很可能是 Go 语言写的，因为pprof是GO程序常见的性能分析/调试工具简单说，开发者本来是拿它来：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;看程序占了多少内存&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;看程序开了多少并发线程&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;看程序运行时在干什么&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;2&amp;gt;&lt;strong&gt;/debug/pprof/heap&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这个是看&lt;strong&gt;内存使用情况&lt;/strong&gt;的。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;/debug/pprof/trace&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这个是更细的运行轨迹。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;/health、/ping&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这两个一般是&lt;strong&gt;健康检查接口&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;/metrics&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这个一般是&lt;strong&gt;监控指标接口&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;很多程序会把：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;请求数量&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;响应时间&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;内存占用&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;CPU 使用情况&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这种数据放在这里，给 Prometheus 之类的监控系统抓取。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;/static/&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这一般表示&lt;strong&gt;静态资源目录&lt;/strong&gt;，比如：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;图片&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;CSS&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;JS&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;前端文件&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;2&amp;gt;状态码:&lt;/p&gt;&#xA;&lt;p&gt;200-访问成功&lt;/p&gt;&#xA;&lt;p&gt;301-跳转&lt;/p&gt;&#xA;&lt;p&gt;403-禁止访问&lt;/p&gt;&#xA;&lt;p&gt;404-资源不存在&lt;/p&gt;&#xA;&lt;p&gt;405-方法不允许&lt;/p&gt;&#xA;&lt;p&gt;3&amp;gt;按照GPT给的优先级，先访问/debug/pprof&lt;/p&gt;&#xA;&lt;img src=&#34;media/image24.png&#34; style=&#34;width:4.14123in;height:4.33967in&#34; /&gt;&#xA;&lt;p&gt;&lt;strong&gt;allocs&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;历史内存分配情况&lt;br&gt;&#xA;可以理解成：过去内存都分给谁用了。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;heap&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;当前还活着的内存对象&lt;br&gt;&#xA;就是现在内存主要被谁占着。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;goroutine&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;当前所有 goroutine 的堆栈信息&lt;br&gt;&#xA;也就是程序当前“并发任务”的运行现场。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;threadcreate&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;程序创建系统线程的情况&lt;br&gt;&#xA;可以理解成程序开过哪些更底层的线程。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;block&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;看哪些地方发生了阻塞&lt;br&gt;&#xA;比如某些操作卡住了。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;mutex&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;看锁竞争情况&lt;br&gt;&#xA;就是多个地方抢同一把锁。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;trace&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;程序运行轨迹&lt;br&gt;&#xA;像更细的运行录像。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;cmdline&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;程序启动命令&lt;br&gt;&#xA;也就是这个程序启动时是怎么运行起来的。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;symbol&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;把地址映射成函数名&lt;br&gt;&#xA;偏底层，一般是给分析工具用的。&lt;/p&gt;&#xA;&lt;p&gt;参考佬的WP：&lt;/p&gt;&#xA;&lt;p&gt;分析前端源码，这页前端本质上就是一个“&lt;strong&gt;上传包 → 查看服务列表 → 启停/删除服务 → 查看服务详情&lt;/strong&gt;”的管理面板；真正有价值的攻击面几乎都集中在它调用的那几个 /api/* 接口上，而不是页面样式本身。&lt;img src=&#34;media/image25.png&#34; style=&#34;width:5.76806in;height:1.55764in&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;前端唯一的“文件合法性检查”，就是看文件名后缀是不是 .dxt&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;media/image26.png&#34; style=&#34;width:5.76806in;height:4.73056in&#34; /&gt;&lt;img src=&#34;media/image27.png&#34; style=&#34;width:5.76806in;height:3.82917in&#34; /&gt;&lt;img src=&#34;media/image28.png&#34; style=&#34;width:5.76806in;height:2.06458in&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;然后就是codex帮着写的exp和伪造的.dxt文件了&lt;/p&gt;&#xA;&lt;p&gt;就做出来这么多题，这几天也参加了几个出色的CTF战队的面试，在AGENT时代，想要担任一名合格的WEB手 还是要有比较坚实的基础，让自己变得更强和让AGENT更强并不冲突，加油&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
