<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>CISCN on Jay's CTF life</title><link>https://asd12542.github.io/tags/ciscn/</link><description>Recent content in CISCN on Jay's CTF life</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Tue, 12 May 2026 14:13:01 +0800</lastBuildDate><atom:link href="https://asd12542.github.io/tags/ciscn/index.xml" rel="self" type="application/rss+xml"/><item><title>CISCN 2026 Web easy_time</title><link>https://asd12542.github.io/p/ciscn2026-web-easy-time/</link><pubDate>Tue, 12 May 2026 14:13:01 +0800</pubDate><guid>https://asd12542.github.io/p/ciscn2026-web-easy-time/</guid><description>&lt;p&gt;我这是复现，所以有些环境可能会有出入，借鉴了一些大佬的思路（&lt;a href="https://blog.csdn.net/2301_76794844/article/details/159472594"&gt;第十九届全国大学生信息安全竞赛半决赛 Web 题 easy_time 详细题解：Cookie 伪造 + Zip Slip + SSRF 拿 Flag&lt;/a&gt;）。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://asd12542.github.io/img/posts/ciscn2026-web-easy-time/01.png" alt="题目环境"&gt;&lt;/p&gt;&#10;&lt;h2 id="a-登录界面"&gt;a. 登录界面&lt;/h2&gt;&#10;&lt;p&gt;这是一个登录界面，我们的常规思维就是想会不会是 admin+admin 或者 admin+admin123 的这种格式，结果都不是。然后我们打开题目附件发现：&lt;/p&gt;&#10;&lt;figure class="code-block" data-code-block data-language="python"&gt;&#10; &lt;figcaption class="code-block__toolbar"&gt;&#10; &lt;span class="code-block__language"&gt;python&lt;/span&gt;&#10; &lt;button class="code-block__copy" type="button" data-code-copy&gt;复制&lt;/button&gt;&#10; &lt;/figcaption&gt;&#10; &lt;div class="code-block__viewport"&gt;&#10; &lt;pre class="code-block__fallback" tabindex="0"&gt;&lt;code class="language-python"&gt;def is_logged_in() -&amp;gt; bool:&#10; return flask.request.cookies.get(&amp;#34;visited&amp;#34;) == &amp;#34;yes&amp;#34; and bool(flask.request.cookies.get(&amp;#34;user&amp;#34;))&lt;/code&gt;&lt;/pre&gt;&#10; &lt;/div&gt;&#10; &lt;button class="code-block__expand" type="button" data-code-expand hidden&gt;展开全部&lt;/button&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;这是成功登录的条件：在 Cookie 头里面传入两个参数，一个是 &lt;code&gt;visited&lt;/code&gt;，值为 &lt;code&gt;yes&lt;/code&gt;；另外一个是检查 Cookie 头里面 &lt;code&gt;user&lt;/code&gt; 是否存在赋值。于是我们构建 payload：&lt;/p&gt;&#10;&lt;figure class="code-block" data-code-block data-language="text"&gt;&#10; &lt;figcaption class="code-block__toolbar"&gt;&#10; &lt;span class="code-block__language"&gt;text&lt;/span&gt;&#10; &lt;button class="code-block__copy" type="button" data-code-copy&gt;复制&lt;/button&gt;&#10; &lt;/figcaption&gt;&#10; &lt;div class="code-block__viewport"&gt;&#10; &lt;pre class="code-block__fallback" tabindex="0"&gt;&lt;code class="language-text"&gt;Cookie: visited=yes; user=admin&lt;/code&gt;&lt;/pre&gt;&#10; &lt;/div&gt;&#10; &lt;button class="code-block__expand" type="button" data-code-expand hidden&gt;展开全部&lt;/button&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;但是随后我们用 bp 将该 payload 发包给目的网址，发现没有任何反应，于是我们继续代码审计，发现有两处代码说得很清楚。&lt;/p&gt;&#10;&lt;h3 id="1-抓包路径必须为根目录"&gt;1. 抓包路径必须为根目录&lt;/h3&gt;&#10;&lt;figure class="code-block" data-code-block data-language="python"&gt;&#10; &lt;figcaption class="code-block__toolbar"&gt;&#10; &lt;span class="code-block__language"&gt;python&lt;/span&gt;&#10; &lt;button class="code-block__copy" type="button" data-code-copy&gt;复制&lt;/button&gt;&#10; &lt;/figcaption&gt;&#10; &lt;div class="code-block__viewport"&gt;&#10; &lt;pre class="code-block__fallback" tabindex="0"&gt;&lt;code class="language-python"&gt;@app.route(&amp;#39;/&amp;#39;)&#10;def home():&#10; if is_logged_in():&#10; return flask.redirect(flask.url_for(&amp;#34;dashboard&amp;#34;))&#10; return flask.redirect(flask.url_for(&amp;#34;login&amp;#34;))&lt;/code&gt;&lt;/pre&gt;&#10; &lt;/div&gt;&#10; &lt;button class="code-block__expand" type="button" data-code-expand hidden&gt;展开全部&lt;/button&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;因为登录校验是在根目录做的校验，所以抓包也应该在根目录进行。当满足登录条件的时候，网页会重定向到 &lt;code&gt;/dashboard&lt;/code&gt; 这个界面，反之不满足就应该跳转回 login。&lt;/p&gt;</description></item><item><title>CISCN 2026 Web MediaDrive</title><link>https://asd12542.github.io/p/ciscn2026-web-mediadrive/</link><pubDate>Fri, 08 May 2026 18:08:01 +0800</pubDate><guid>https://asd12542.github.io/p/ciscn2026-web-mediadrive/</guid><description>&lt;h2 id="a-漏洞概述"&gt;a. 漏洞概述&lt;/h2&gt;&#10;&lt;p&gt;在 preview.php 这个文件中，通过特定文件名的拼接，利用函数 &lt;code&gt;iconv()&lt;/code&gt; 的转码漏洞，实现文件读取，最终获得 flag。&lt;/p&gt;&#10;&lt;h2 id="b-代码审计"&gt;b. 代码审计&lt;/h2&gt;&#10;&lt;figure class="code-block" data-code-block data-language="php"&gt;&#10; &lt;figcaption class="code-block__toolbar"&gt;&#10; &lt;span class="code-block__language"&gt;php&lt;/span&gt;&#10; &lt;button class="code-block__copy" type="button" data-code-copy&gt;复制&lt;/button&gt;&#10; &lt;/figcaption&gt;&#10; &lt;div class="code-block__viewport"&gt;&#10; &lt;pre class="code-block__fallback" tabindex="0"&gt;&lt;code class="language-php"&gt;$user = null;&#10;if (isset($_COOKIE[&amp;#39;user&amp;#39;])) {&#10; $user = @unserialize($_COOKIE[&amp;#39;user&amp;#39;]);&#10;}&#10;if (!$user instanceof User) {&#10; $user = new User(&amp;#34;guest&amp;#34;);&#10; setcookie(&amp;#34;user&amp;#34;, serialize($user), time() + 86400, &amp;#34;/&amp;#34;);&#10;}&lt;/code&gt;&lt;/pre&gt;&#10; &lt;/div&gt;&#10; &lt;button class="code-block__expand" type="button" data-code-expand hidden&gt;展开全部&lt;/button&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;将 user 这个对象序列化，存到 cookie 中，使用的时候再将它反序列化，赋值给变量 &lt;code&gt;$user&lt;/code&gt;。&lt;/p&gt;&#10;&lt;figure class="code-block" data-code-block data-language="php"&gt;&#10; &lt;figcaption class="code-block__toolbar"&gt;&#10; &lt;span class="code-block__language"&gt;php&lt;/span&gt;&#10; &lt;button class="code-block__copy" type="button" data-code-copy&gt;复制&lt;/button&gt;&#10; &lt;/figcaption&gt;&#10; &lt;div class="code-block__viewport"&gt;&#10; &lt;pre class="code-block__fallback" tabindex="0"&gt;&lt;code class="language-php"&gt;$f = (string)($_GET[&amp;#39;f&amp;#39;] ?? &amp;#34;&amp;#34;);&#10;if ($f === &amp;#34;&amp;#34;) {&#10; http_response_code(400);&#10; echo &amp;#34;Missing parameter: f&amp;#34;;&#10; exit;&#10;}&#10;$rawPath = $user-&amp;gt;basePath . $f;&lt;/code&gt;&lt;/pre&gt;&#10; &lt;/div&gt;&#10; &lt;button class="code-block__expand" type="button" data-code-expand hidden&gt;展开全部&lt;/button&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;采用 GET 方式获取 &lt;code&gt;f&lt;/code&gt; 的值，之后将它和 user 对象里面的 &lt;code&gt;basePath&lt;/code&gt; 拼接，赋值给变量 &lt;code&gt;$rawPath&lt;/code&gt;。其中 &lt;code&gt;basePath&lt;/code&gt; 是 user 对象里面的一个属性，是我们构造特定文件名的利用点。&lt;/p&gt;</description></item></channel></rss>