|
16 | 16 | <meta name="author" content="lazy_forever"> |
17 | 17 | <meta name="keywords" content=""> |
18 | 18 |
|
19 | | - <meta name="description" content="经历了无数次爆零的比赛之后,终于做出来了几道题(哭 题目本身并没有想象的特别难,不过质量和创新点做的非常好。 Secrets一道关于字符串匹配的问题 打开网站,查看源码,看到了一串base85加密的数据,解个密看下,工作目录都给了 123456789101112131415161718192021222324252627282930313233343536.├── app.py├── assets"> |
| 19 | + <meta name="description" content="经历了无数次爆零的比赛之后,终于做出来了几道题(哭 题目本身并没有想象的特别难,不过质量和创新点做的非常好。 最终rank:59 Secrets一道关于字符串匹配的问题 打开网站,查看源码,看到了一串base85加密的数据,解个密看下,工作目录都给了 123456789101112131415161718192021222324252627282930313233343536.├── app."> |
20 | 20 | <meta property="og:type" content="article"> |
21 | 21 | <meta property="og:title" content="GeekCTF 2024 Web WriteUp(全)"> |
22 | 22 | <meta property="og:url" content="https://blog.lazyforever.top/2024/04/15/2024geekctf/index.html"> |
23 | 23 | <meta property="og:site_name" content="lazy_forever'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."> |
25 | 25 | <meta property="og:locale" content="zh_CN"> |
| 26 | +<meta property="og:image" content="https://blog.lazyforever.top/2024/04/15/2024geekctf/rank.png"> |
26 | 27 | <meta property="og:image" content="https://blog.lazyforever.top/2024/04/15/2024geekctf/nextgpt1.png"> |
27 | 28 | <meta property="og:image" content="https://blog.lazyforever.top/2024/04/15/2024geekctf/webdav.png"> |
28 | 29 | <meta property="og:image" content="https://blog.lazyforever.top/2024/04/15/2024geekctf/nextgpt2.png"> |
|
43 | 44 | <meta property="og:image" content="https://blog.lazyforever.top/2024/04/15/2024geekctf/graphqlflag3.png"> |
44 | 45 | <meta property="og:image" content="https://blog.lazyforever.top/2024/04/15/2024geekctf/graphqlflag4.png"> |
45 | 46 | <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"> |
47 | 48 | <meta property="article:author" content="lazy_forever"> |
48 | 49 | <meta property="article:tag" content="web"> |
49 | 50 | <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"> |
51 | 52 |
|
52 | 53 |
|
53 | 54 | <meta name="referrer" content="no-referrer-when-downgrade"> |
|
311 | 312 |
|
312 | 313 |
|
313 | 314 |
|
314 | | - 150 分钟 |
| 315 | + 151 分钟 |
315 | 316 |
|
316 | 317 | </span> |
317 | 318 |
|
@@ -363,6 +364,9 @@ <h1 id="seo-header">GeekCTF 2024 Web WriteUp(全)</h1> |
363 | 364 |
|
364 | 365 | <p>经历了无数次爆零的比赛之后,终于做出来了几道题(哭</p> |
365 | 366 | <p>题目本身并没有想象的特别难,不过质量和创新点做的非常好。</p> |
| 367 | +<p>最终rank:59</p> |
| 368 | +<img src="/2024/04/15/2024geekctf/rank.png" srcset="/img/loading.gif" lazyload class=""> |
| 369 | + |
366 | 370 | <h2 id="Secrets"><a href="#Secrets" class="headerlink" title="Secrets"></a>Secrets</h2><p>一道关于字符串匹配的问题</p> |
367 | 371 | <p>打开网站,查看源码,看到了一串base85加密的数据,解个密看下,工作目录都给了</p> |
368 | 372 | <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> |
407 | 411 | <p>发现输入jq env可以得到当前的环境变量,并且题目中提示flag在环境变量中</p> |
408 | 412 | <p>直接出了payload:<code>json={}&args=%26jq&args='env'</code></p> |
409 | 413 | <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 | + |
410 | 416 | <p>给了Dockerfile,直接看一下,题目用了<code>webpsh/webp-server-go:0.11.0</code>的容器,并且给了flask的前端代码,简单看下代码,是一个文件上传和下载的图床,使用了webp进行缩小图片</p> |
411 | 417 | <p>upload路由大体上没问题,使用随机数进行文件的重命名防止了目录穿越。</p> |
412 | 418 | <p>关键点在于查看图片的路由,其中调用了fetch_converted_image函数对23333端口进行http请求,因为其HTTP报文直接对Accept进行了拼接,会导致一个HTTP走私,举个例子</p> |
@@ -456,6 +462,8 @@ <h2 id="SafeBlog1(复现)"><a href="#SafeBlog1(复现)" class="headerlin |
456 | 462 | <p>flag:<code>flag{W0rdpr355_plu61n5_4r3_vuln3r4bl3}</code></p> |
457 | 463 | <p>遇到题一定要有耐心看下去</p> |
458 | 464 | <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 | + |
459 | 467 | <p>首先因为<code>NODE_NDEBUG=1</code>可以直接忽视<code>require('assert-plus')</code></p> |
460 | 468 | <p>接下来是/comment/like出有一个把所有参数都注入到查询语句的查询,这里有一个注入点</p> |
461 | 469 | <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 = ?`, ["1"]);<br>?post_id=<span class="hljs-number">1</span>&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 = ?`, ["1", "1"]);<br>?post_id=<span class="hljs-number">1</span>&%<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>& <span class="hljs-string">'1'</span> = <span class="hljs-string">'1'</span> <span class="hljs-keyword">OR</span> <span class="hljs-string">'1'</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">'1'</span> = <span class="hljs-string">'1'</span> <span class="hljs-keyword">OR</span> <span class="hljs-string">'1'</span> = ?`, ["1", "1"]);<br></code></pre></td></tr></table></figure> |
|
0 commit comments