<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Iconv on Jay's CTF life</title><link>https://asd12542.github.io/tags/iconv/</link><description>Recent content in Iconv on Jay's CTF life</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Fri, 08 May 2026 18:08:01 +0800</lastBuildDate><atom:link href="https://asd12542.github.io/tags/iconv/index.xml" rel="self" type="application/rss+xml"/><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>