Skip to content

Commit f9f0e00

Browse files
committed
Site updated: 2024-04-24 21:25:33
1 parent ffdd61c commit f9f0e00

File tree

9 files changed

+26
-11
lines changed

9 files changed

+26
-11
lines changed

2024/04/15/2024geekctf/PicBed.zip

35.4 KB
Binary file not shown.
20.7 KB
Binary file not shown.

2024/04/15/2024geekctf/index.html

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@
1616
<meta name="author" content="lazy_forever">
1717
<meta name="keywords" content="">
1818

19-
<meta name="description" content="经历了无数次爆零的比赛之后,终于做出来了几道题(哭 题目本身并没有想象的特别难,不过质量和创新点做的非常好。 Secrets一道关于字符串匹配的问题 打开网站,查看源码,看到了一串base85加密的数据,解个密看下,工作目录都给了 123456789101112131415161718192021222324252627282930313233343536.├── app.py├── assets">
19+
<meta name="description" content="经历了无数次爆零的比赛之后,终于做出来了几道题(哭 题目本身并没有想象的特别难,不过质量和创新点做的非常好。 最终rank:59 Secrets一道关于字符串匹配的问题 打开网站,查看源码,看到了一串base85加密的数据,解个密看下,工作目录都给了 123456789101112131415161718192021222324252627282930313233343536.├── app.">
2020
<meta property="og:type" content="article">
2121
<meta property="og:title" content="GeekCTF 2024 Web WriteUp(全)">
2222
<meta property="og:url" content="https://blog.lazyforever.top/2024/04/15/2024geekctf/index.html">
2323
<meta property="og:site_name" content="lazy_forever&#39;s Blog">
24-
<meta property="og:description" content="经历了无数次爆零的比赛之后,终于做出来了几道题(哭 题目本身并没有想象的特别难,不过质量和创新点做的非常好。 Secrets一道关于字符串匹配的问题 打开网站,查看源码,看到了一串base85加密的数据,解个密看下,工作目录都给了 123456789101112131415161718192021222324252627282930313233343536.├── app.py├── assets">
24+
<meta property="og:description" content="经历了无数次爆零的比赛之后,终于做出来了几道题(哭 题目本身并没有想象的特别难,不过质量和创新点做的非常好。 最终rank:59 Secrets一道关于字符串匹配的问题 打开网站,查看源码,看到了一串base85加密的数据,解个密看下,工作目录都给了 123456789101112131415161718192021222324252627282930313233343536.├── app.">
2525
<meta property="og:locale" content="zh_CN">
26+
<meta property="og:image" content="https://blog.lazyforever.top/2024/04/15/2024geekctf/rank.png">
2627
<meta property="og:image" content="https://blog.lazyforever.top/2024/04/15/2024geekctf/nextgpt1.png">
2728
<meta property="og:image" content="https://blog.lazyforever.top/2024/04/15/2024geekctf/webdav.png">
2829
<meta property="og:image" content="https://blog.lazyforever.top/2024/04/15/2024geekctf/nextgpt2.png">
@@ -43,11 +44,11 @@
4344
<meta property="og:image" content="https://blog.lazyforever.top/2024/04/15/2024geekctf/graphqlflag3.png">
4445
<meta property="og:image" content="https://blog.lazyforever.top/2024/04/15/2024geekctf/graphqlflag4.png">
4546
<meta property="article:published_time" content="2024-04-14T16:16:44.000Z">
46-
<meta property="article:modified_time" content="2024-04-24T03:27:56.121Z">
47+
<meta property="article:modified_time" content="2024-04-24T13:19:56.458Z">
4748
<meta property="article:author" content="lazy_forever">
4849
<meta property="article:tag" content="web">
4950
<meta name="twitter:card" content="summary_large_image">
50-
<meta name="twitter:image" content="https://blog.lazyforever.top/2024/04/15/2024geekctf/nextgpt1.png">
51+
<meta name="twitter:image" content="https://blog.lazyforever.top/2024/04/15/2024geekctf/rank.png">
5152

5253

5354
<meta name="referrer" content="no-referrer-when-downgrade">
@@ -311,7 +312,7 @@
311312

312313

313314

314-
150 分钟
315+
151 分钟
315316

316317
</span>
317318

@@ -363,6 +364,9 @@ <h1 id="seo-header">GeekCTF 2024 Web WriteUp(全)</h1>
363364

364365
<p>经历了无数次爆零的比赛之后,终于做出来了几道题(哭</p>
365366
<p>题目本身并没有想象的特别难,不过质量和创新点做的非常好。</p>
367+
<p>最终rank:59</p>
368+
<img src="/2024/04/15/2024geekctf/rank.png" srcset="/img/loading.gif" lazyload class="">
369+
366370
<h2 id="Secrets"><a href="#Secrets" class="headerlink" title="Secrets"></a>Secrets</h2><p>一道关于字符串匹配的问题</p>
367371
<p>打开网站,查看源码,看到了一串base85加密的数据,解个密看下,工作目录都给了</p>
368372
<figure class="highlight xquery"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><code class="hljs xquery">.<br>├── app.py<br>├── assets<br>│ ├── css<br>│ │ ├── pico.amber<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.azure<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.blue<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.cyan<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.fuchsia<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.green<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.grey<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.indigo<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.jade<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.lime<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.orange<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.pink<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.pumpkin<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.purple<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.red<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.sand<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.slate<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.violet<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.yellow<span class="hljs-built_in">.min</span>.css<br>│ │ └── pico.zinc<span class="hljs-built_in">.min</span>.css<br>│ └── js<br>│ ├── color-picker.js<br>│ ├── home.js<br>│ ├── jquery-<span class="hljs-number">3.7</span>.<span class="hljs-number">1</span><span class="hljs-built_in">.min</span>.js<br>│ └── login.js<br>├── gunicorn_conf.py<br>├── populate.py<br>├── requirements.txt<br>└── templates<br> ├── base.html<br> ├── index.html<br> └── login.html<br></code></pre></td></tr></table></figure>
@@ -407,6 +411,8 @@ <h2 id="YAJF"><a href="#YAJF" class="headerlink" title="YAJF"></a>YAJF</h2><p>
407411
<p>发现输入jq env可以得到当前的环境变量,并且题目中提示flag在环境变量中</p>
408412
<p>直接出了payload:<code>json=&#123;&#125;&amp;args=%26jq&amp;args=&#39;env&#39;</code></p>
409413
<h2 id="PicBed(复现)"><a href="#PicBed(复现)" class="headerlink" title="PicBed(复现)"></a>PicBed(复现)</h2><p>花时间比较长的一题,最后还是没能做出来</p>
414+
<a href="/2024/04/15/2024geekctf/PicBed.zip" title="PicBed.zip">PicBed.zip</a>
415+
410416
<p>给了Dockerfile,直接看一下,题目用了<code>webpsh/webp-server-go:0.11.0</code>的容器,并且给了flask的前端代码,简单看下代码,是一个文件上传和下载的图床,使用了webp进行缩小图片</p>
411417
<p>upload路由大体上没问题,使用随机数进行文件的重命名防止了目录穿越。</p>
412418
<p>关键点在于查看图片的路由,其中调用了fetch_converted_image函数对23333端口进行http请求,因为其HTTP报文直接对Accept进行了拼接,会导致一个HTTP走私,举个例子</p>
@@ -456,6 +462,8 @@ <h2 id="SafeBlog1(复现)"><a href="#SafeBlog1(复现)" class="headerlin
456462
<p>flag:<code>flag&#123;W0rdpr355_plu61n5_4r3_vuln3r4bl3&#125;</code></p>
457463
<p>遇到题一定要有耐心看下去</p>
458464
<h2 id="SafeBlog2(复现)"><a href="#SafeBlog2(复现)" class="headerlink" title="SafeBlog2(复现)"></a>SafeBlog2(复现)</h2><p>花时间最长的一道题,但还是没有做出来</p>
465+
<a href="/2024/04/15/2024geekctf/SafeBlog2.zip" title="SafeBlog2.zip">SafeBlog2.zip</a>
466+
459467
<p>首先因为<code>NODE_NDEBUG=1</code>可以直接忽视<code>require(&#39;assert-plus&#39;)</code></p>
460468
<p>接下来是&#x2F;comment&#x2F;like出有一个把所有参数都注入到查询语句的查询,这里有一个注入点</p>
461469
<figure class="highlight pgsql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs pgsql">正常情况 ?post_id=<span class="hljs-number">1</span><br>db.<span class="hljs-keyword">all</span>(`<span class="hljs-keyword">SELECT</span> * <span class="hljs-keyword">FROM</span> comments <span class="hljs-keyword">WHERE</span> post_id = ?`, [&quot;1&quot;]);<br>?post_id=<span class="hljs-number">1</span>&amp;inject=<span class="hljs-number">1</span><br>db.<span class="hljs-keyword">all</span>(`<span class="hljs-keyword">SELECT</span> * <span class="hljs-keyword">FROM</span> comments <span class="hljs-keyword">WHERE</span> post_id = ? <span class="hljs-keyword">AND</span> inject = ?`, [&quot;1&quot;, &quot;1&quot;]);<br>?post_id=<span class="hljs-number">1</span>&amp;%<span class="hljs-number">271</span>%<span class="hljs-number">27</span>+%<span class="hljs-number">3</span>D+%<span class="hljs-number">271</span>%<span class="hljs-number">27</span>+<span class="hljs-keyword">OR</span>+%<span class="hljs-number">271</span>%<span class="hljs-number">27</span>=<span class="hljs-number">1</span> 即post_id=<span class="hljs-number">1</span>&amp; <span class="hljs-string">&#x27;1&#x27;</span> = <span class="hljs-string">&#x27;1&#x27;</span> <span class="hljs-keyword">OR</span> <span class="hljs-string">&#x27;1&#x27;</span> = <span class="hljs-number">1</span><br>db.<span class="hljs-keyword">all</span>(`<span class="hljs-keyword">SELECT</span> * <span class="hljs-keyword">FROM</span> comments <span class="hljs-keyword">WHERE</span> post_id = ? <span class="hljs-keyword">AND</span> <span class="hljs-string">&#x27;1&#x27;</span> = <span class="hljs-string">&#x27;1&#x27;</span> <span class="hljs-keyword">OR</span> <span class="hljs-string">&#x27;1&#x27;</span> = ?`, [&quot;1&quot;, &quot;1&quot;]);<br></code></pre></td></tr></table></figure>

2024/04/15/2024geekctf/rank.png

145 KB
Loading

atom.xml

Lines changed: 3 additions & 3 deletions
Large diffs are not rendered by default.

content.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ <h2 class="index-header">
285285

286286
<a class="index-excerpt index-excerpt__noimg" href="/2024/04/15/2024geekctf/" target="_self">
287287
<div>
288-
经历了无数次爆零的比赛之后,终于做出来了几道题(哭 题目本身并没有想象的特别难,不过质量和创新点做的非常好。 Secrets一道关于字符串匹配的问题 打开网站,查看源码,看到了一串base85加密的数据,解个密看下,工作目录都给了 123456789101112131415161718192021222324252627282930313233343536.├── app.py├── assets
288+
经历了无数次爆零的比赛之后,终于做出来了几道题(哭 题目本身并没有想象的特别难,不过质量和创新点做的非常好。 最终rank:59 Secrets一道关于字符串匹配的问题 打开网站,查看源码,看到了一串base85加密的数据,解个密看下,工作目录都给了 123456789101112131415161718192021222324252627282930313233343536.├── app.
289289
</div>
290290
</a>
291291

local-search.xml

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

search.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -994,6 +994,9 @@
994994
<url>/2024/04/15/2024geekctf/</url>
995995
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>经历了无数次爆零的比赛之后,终于做出来了几道题(哭</p>
996996
<p>题目本身并没有想象的特别难,不过质量和创新点做的非常好。</p>
997+
<p>最终rank:59</p>
998+
<img src="/2024/04/15/2024geekctf/rank.png" class="">
999+
9971000
<h2 id="Secrets"><a href="#Secrets" class="headerlink" title="Secrets"></a>Secrets</h2><p>一道关于字符串匹配的问题</p>
9981001
<p>打开网站,查看源码,看到了一串base85加密的数据,解个密看下,工作目录都给了</p>
9991002
<figure class="highlight xquery"><table><tr><td class="code"><pre><code class="hljs xquery">.<br>├── app.py<br>├── assets<br>│ ├── css<br>│ │ ├── pico.amber<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.azure<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.blue<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.cyan<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.fuchsia<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.green<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.grey<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.indigo<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.jade<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.lime<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.orange<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.pink<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.pumpkin<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.purple<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.red<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.sand<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.slate<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.violet<span class="hljs-built_in">.min</span>.css<br>│ │ ├── pico.yellow<span class="hljs-built_in">.min</span>.css<br>│ │ └── pico.zinc<span class="hljs-built_in">.min</span>.css<br>│ └── js<br>│ ├── color-picker.js<br>│ ├── home.js<br>│ ├── jquery-<span class="hljs-number">3.7</span>.<span class="hljs-number">1</span><span class="hljs-built_in">.min</span>.js<br>│ └── login.js<br>├── gunicorn_conf.py<br>├── populate.py<br>├── requirements.txt<br>└── templates<br> ├── base.html<br> ├── index.html<br> └── login.html<br></code></pre></td></tr></table></figure>
@@ -1038,6 +1041,8 @@
10381041
<p>发现输入jq env可以得到当前的环境变量,并且题目中提示flag在环境变量中</p>
10391042
<p>直接出了payload:<code>json=&#123;&#125;&amp;args=%26jq&amp;args=&#39;env&#39;</code></p>
10401043
<h2 id="PicBed(复现)"><a href="#PicBed(复现)" class="headerlink" title="PicBed(复现)"></a>PicBed(复现)</h2><p>花时间比较长的一题,最后还是没能做出来</p>
1044+
<a href="/2024/04/15/2024geekctf/PicBed.zip" title="PicBed.zip">PicBed.zip</a>
1045+
10411046
<p>给了Dockerfile,直接看一下,题目用了<code>webpsh/webp-server-go:0.11.0</code>的容器,并且给了flask的前端代码,简单看下代码,是一个文件上传和下载的图床,使用了webp进行缩小图片</p>
10421047
<p>upload路由大体上没问题,使用随机数进行文件的重命名防止了目录穿越。</p>
10431048
<p>关键点在于查看图片的路由,其中调用了fetch_converted_image函数对23333端口进行http请求,因为其HTTP报文直接对Accept进行了拼接,会导致一个HTTP走私,举个例子</p>
@@ -1087,6 +1092,8 @@
10871092
<p>flag:<code>flag&#123;W0rdpr355_plu61n5_4r3_vuln3r4bl3&#125;</code></p>
10881093
<p>遇到题一定要有耐心看下去</p>
10891094
<h2 id="SafeBlog2(复现)"><a href="#SafeBlog2(复现)" class="headerlink" title="SafeBlog2(复现)"></a>SafeBlog2(复现)</h2><p>花时间最长的一道题,但还是没有做出来</p>
1095+
<a href="/2024/04/15/2024geekctf/SafeBlog2.zip" title="SafeBlog2.zip">SafeBlog2.zip</a>
1096+
10901097
<p>首先因为<code>NODE_NDEBUG=1</code>可以直接忽视<code>require(&#39;assert-plus&#39;)</code></p>
10911098
<p>接下来是&#x2F;comment&#x2F;like出有一个把所有参数都注入到查询语句的查询,这里有一个注入点</p>
10921099
<figure class="highlight pgsql"><table><tr><td class="code"><pre><code class="hljs pgsql">正常情况 ?post_id=<span class="hljs-number">1</span><br>db.<span class="hljs-keyword">all</span>(`<span class="hljs-keyword">SELECT</span> * <span class="hljs-keyword">FROM</span> comments <span class="hljs-keyword">WHERE</span> post_id = ?`, [&quot;1&quot;]);<br>?post_id=<span class="hljs-number">1</span>&amp;inject=<span class="hljs-number">1</span><br>db.<span class="hljs-keyword">all</span>(`<span class="hljs-keyword">SELECT</span> * <span class="hljs-keyword">FROM</span> comments <span class="hljs-keyword">WHERE</span> post_id = ? <span class="hljs-keyword">AND</span> inject = ?`, [&quot;1&quot;, &quot;1&quot;]);<br>?post_id=<span class="hljs-number">1</span>&amp;%<span class="hljs-number">271</span>%<span class="hljs-number">27</span>+%<span class="hljs-number">3</span>D+%<span class="hljs-number">271</span>%<span class="hljs-number">27</span>+<span class="hljs-keyword">OR</span>+%<span class="hljs-number">271</span>%<span class="hljs-number">27</span>=<span class="hljs-number">1</span> 即post_id=<span class="hljs-number">1</span>&amp; <span class="hljs-string">&#x27;1&#x27;</span> = <span class="hljs-string">&#x27;1&#x27;</span> <span class="hljs-keyword">OR</span> <span class="hljs-string">&#x27;1&#x27;</span> = <span class="hljs-number">1</span><br>db.<span class="hljs-keyword">all</span>(`<span class="hljs-keyword">SELECT</span> * <span class="hljs-keyword">FROM</span> comments <span class="hljs-keyword">WHERE</span> post_id = ? <span class="hljs-keyword">AND</span> <span class="hljs-string">&#x27;1&#x27;</span> = <span class="hljs-string">&#x27;1&#x27;</span> <span class="hljs-keyword">OR</span> <span class="hljs-string">&#x27;1&#x27;</span> = ?`, [&quot;1&quot;, &quot;1&quot;]);<br></code></pre></td></tr></table></figure>

0 commit comments

Comments
 (0)