<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>나키의 블로그</title>
    <link>https://retn0.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 16 Mar 2026 20:02:19 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>retn0</managingEditor>
    <image>
      <title>나키의 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/2856985/attach/ee2b8268625c427081b6ae67f82b1080</url>
      <link>https://retn0.tistory.com</link>
    </image>
    <item>
      <title>[JavaScript] ? 기호의 또 다른 사용 - 옵셔널 체이닝</title>
      <link>https://retn0.tistory.com/30</link>
      <description>&lt;p&gt;자바스크립트(JavaScript)를 포함한 대부분의 언어에서 &lt;code&gt;?&lt;/code&gt; 기호는 삼항 연산자(conditional operator)를 의미한다. 하지만 자바스크립트에서는 객체 이름 뒤에 &lt;code&gt;?&lt;/code&gt;를 붙여서 사용하는 경우를 볼 수 있다. 이건 무슨 문법일까? 아직 잘 알려지지 않은 건지 검색해도 삼항 연산자만 나와서 찾기가 어려웠다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;옵셔널 체이닝&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;옵셔널 체이닝&lt;/a&gt;(optional chaining)은 의미 그대로 &lt;b&gt;선택적&lt;/b&gt;으로 &lt;b&gt;체이닝&lt;/b&gt;을 적용할 수 있는 기능이다. 체이닝에 &lt;code&gt;.&lt;/code&gt;을 적는 대신 앞에 &lt;code&gt;?&lt;/code&gt;를 넣어서 &lt;code&gt;?.&lt;/code&gt;으로 적으면 옵셔널 체이닝을 사용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1596032063028&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;conn?.release();&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이렇게 적을 경우 &lt;code&gt;conn&lt;/code&gt; 객체가 &lt;code&gt;null&lt;/code&gt; 또는 &lt;code&gt;undefined&lt;/code&gt;일 경우, &lt;code&gt;release&lt;/code&gt; 함수가 호출되지 않는다. 즉, &lt;code&gt;null&lt;/code&gt; 또는 &lt;code&gt;undefined&lt;/code&gt; 경우가 아닐 때에만 체이닝을 해서 &lt;code&gt;release&lt;/code&gt; 함수에 접근한다고 볼 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1596032480614&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code class=&quot;hljs javascript&quot;&gt;// if 사용
if (conn) {
    conn.release();
}

// &amp;amp;&amp;amp; 사용
conn &amp;amp;&amp;amp; conn.release();&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;만약 옵셔널 체이닝이 없다면 객체가 있는지 없는지 매번 체크해야 하는 불편함이 생길 것이다. 객체가 &lt;code&gt;null&lt;/code&gt; 또는 &lt;code&gt;undefined&lt;/code&gt;가 될 수 있기 때문이다. 객체가 없는데 체이닝을 시도한다면 런타임 오류가 발생하게 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1596033598926&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code class=&quot;hljs javascript&quot;&gt;function getStatus() {
    let res = null;

    // 다양한 처리를 한 뒤에 ...

    return res?.status;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;객체가 존재하면 객체의 &lt;code&gt;status&lt;/code&gt; 값을, 그렇지 않으면 &lt;code&gt;undefined&lt;/code&gt;를 반환하고 싶을 때에도 유용하게 사용할 수 있다. 옵셔널 체이닝은 객체가 존재하지 않는다면 &lt;code&gt;undefined&lt;/code&gt;를 반환하도록 되어 있다.&lt;/p&gt;</description>
      <category>Programming/JavaScript</category>
      <category>자바스크립트</category>
      <author>retn0</author>
      <guid isPermaLink="true">https://retn0.tistory.com/30</guid>
      <comments>https://retn0.tistory.com/30#entry30comment</comments>
      <pubDate>Wed, 29 Jul 2020 23:52:38 +0900</pubDate>
    </item>
    <item>
      <title>[Webhacking.kr] Old - 26 문제 풀이</title>
      <link>https://retn0.tistory.com/29</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;01.png&quot; data-origin-width=&quot;155&quot; data-origin-height=&quot;130&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCP5ft/btqFBMOFGk4/5L9pNddoZLAsMkRm8meZak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCP5ft/btqFBMOFGk4/5L9pNddoZLAsMkRm8meZak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCP5ft/btqFBMOFGk4/5L9pNddoZLAsMkRm8meZak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCP5ft%2FbtqFBMOFGk4%2F5L9pNddoZLAsMkRm8meZak%2Fimg.png&quot; data-filename=&quot;01.png&quot; data-origin-width=&quot;155&quot; data-origin-height=&quot;130&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;들어가니 아무것도 안 뜨고 소스 코드 보기 링크만 있네요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;02.png&quot; data-origin-width=&quot;421&quot; data-origin-height=&quot;362&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y6H0q/btqFBZG0QGC/RVPQYugubyrhD3lFku7Fi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y6H0q/btqFBZG0QGC/RVPQYugubyrhD3lFku7Fi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y6H0q/btqFBZG0QGC/RVPQYugubyrhD3lFku7Fi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy6H0q%2FbtqFBZG0QGC%2FRVPQYugubyrhD3lFku7Fi1%2Fimg.png&quot; data-filename=&quot;02.png&quot; data-origin-width=&quot;421&quot; data-origin-height=&quot;362&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;PHP 코드가 보이네요. &lt;code&gt;preg_match&lt;/code&gt; 함수로 &lt;code&gt;admin&lt;/code&gt;을 필터링하는 것을 볼 수 있습니다. 그런데 그 밑에 &lt;code&gt;urldecode&lt;/code&gt; 함수가 있네요. 그럼 &lt;code&gt;admin&lt;/code&gt;을 URL 인코딩해서 &lt;code&gt;id&lt;/code&gt; 파라미터로 넘기면 문제가 풀리겠군요.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;03.png&quot; data-origin-width=&quot;410&quot; data-origin-height=&quot;571&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uzxZO/btqFBZNNarJ/2IlUZbeb0NujMdpwMc6u7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uzxZO/btqFBZNNarJ/2IlUZbeb0NujMdpwMc6u7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uzxZO/btqFBZNNarJ/2IlUZbeb0NujMdpwMc6u7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuzxZO%2FbtqFBZNNarJ%2F2IlUZbeb0NujMdpwMc6u7K%2Fimg.png&quot; data-filename=&quot;03.png&quot; data-origin-width=&quot;410&quot; data-origin-height=&quot;571&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;하지만 바로 넣으면 서버에 들어가기 전에 이미 admin으로 해석되어 들어가기 때문에, 한 번 더 인코딩해야 합니다. 그래야 서버에 들어갔을 때 &lt;code&gt;%61%64%6d%69%6e&lt;/code&gt;로 해석되어 들어갈 테고, 서버의 &lt;code&gt;urldecode&lt;/code&gt; 함수로 인해 최종적으로 &lt;code&gt;admin&lt;/code&gt;으로 해석됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;04.png&quot; data-origin-width=&quot;645&quot; data-origin-height=&quot;186&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHuOpk/btqFAgQUFiQ/ogJKPzEdDDdUGGkkB4GXaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHuOpk/btqFAgQUFiQ/ogJKPzEdDDdUGGkkB4GXaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHuOpk/btqFAgQUFiQ/ogJKPzEdDDdUGGkkB4GXaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHuOpk%2FbtqFAgQUFiQ%2FogJKPzEdDDdUGGkkB4GXaK%2Fimg.png&quot; data-filename=&quot;04.png&quot; data-origin-width=&quot;645&quot; data-origin-height=&quot;186&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;id&lt;/code&gt; 파라미터로 인코딩된 값을 넣어주면 이렇게 문제가 풀리게 됩니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p&gt;&lt;a href=&quot;https://webhacking.kr/&quot;&gt;https://webhacking.kr&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1594576518211&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Webhacking.kr&quot; data-og-description=&quot;Index Welcome Stranger! Notice(en) [2019-08-18] In the process of receiving service, some loss of data has been observed. For example, in very few accounts there may be a truncation of the last one letter of an userid. If userid contains multibyte characte&quot; data-og-host=&quot;webhacking.kr&quot; data-og-source-url=&quot;https://webhacking.kr/&quot; data-og-url=&quot;https://webhacking.kr/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://webhacking.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://webhacking.kr/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Webhacking.kr&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Index Welcome Stranger! Notice(en) [2019-08-18] In the process of receiving service, some loss of data has been observed. For example, in very few accounts there may be a truncation of the last one letter of an userid. If userid contains multibyte characte&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;webhacking.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>Problem Solving/Wargame</category>
      <category>webhacking.kr</category>
      <author>retn0</author>
      <guid isPermaLink="true">https://retn0.tistory.com/29</guid>
      <comments>https://retn0.tistory.com/29#entry29comment</comments>
      <pubDate>Thu, 16 Jul 2020 15:56:59 +0900</pubDate>
    </item>
    <item>
      <title>[Webhacking.kr] Old - 07 문제 풀이</title>
      <link>https://retn0.tistory.com/28</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;01.png&quot; data-origin-width=&quot;129&quot; data-origin-height=&quot;126&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TBwsa/btqFBKXuFWp/ekTbPtWrrqPHw6n8EC2sRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TBwsa/btqFBKXuFWp/ekTbPtWrrqPHw6n8EC2sRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TBwsa/btqFBKXuFWp/ekTbPtWrrqPHw6n8EC2sRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTBwsa%2FbtqFBKXuFWp%2FekTbPtWrrqPHw6n8EC2sRk%2Fimg.png&quot; data-filename=&quot;01.png&quot; data-origin-width=&quot;129&quot; data-origin-height=&quot;126&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;들어가니 어드민 페이지가 보이고, 밑에 인증 버튼이 있네요. 클릭하니 &lt;code&gt;Access_Denied!&lt;/code&gt; 문구만 뜹니다. 소스 코드를 확인해 봅시다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;02.png&quot; data-origin-width=&quot;847&quot; data-origin-height=&quot;658&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UcV4C/btqFA6UgiXz/9yxThTZd3xXnckRrvqIpU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UcV4C/btqFA6UgiXz/9yxThTZd3xXnckRrvqIpU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UcV4C/btqFA6UgiXz/9yxThTZd3xXnckRrvqIpU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUcV4C%2FbtqFA6UgiXz%2F9yxThTZd3xXnckRrvqIpU0%2Fimg.png&quot; data-filename=&quot;02.png&quot; data-origin-width=&quot;847&quot; data-origin-height=&quot;658&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;PHP 소스 코드와 SQL 쿼리문이 보이네요. 이번 문제는 SQL Injection 문제인 것 같습니다. GET 방식으로 &lt;code&gt;val&lt;/code&gt; 파라미터에서 값을 얻어온 뒤 &lt;code&gt;preg_match&lt;/code&gt; 함수로 정규식을 이용해 필터링을 하네요. 그 아래에선 랜덤으로 5가지의 쿼리문 중 하나를 선택해 쿼리를 보내고, 결과가 2이면 문제가 풀리는 것 같군요.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;바로 시도해볼 수 있는 방법으로 &lt;code&gt;val&lt;/code&gt; 파라미터에 2를 넣어볼 수 있지만, 필터링에 걸리기 때문에 문제가 발생합니다. 그래서 이번엔 사칙연산 기호 중 필터링에 걸리지 않는 % 연산자를 이용해서 5 % 3 = 2인 점을 이용해 간접적으로 2가 만들어지도록 &lt;code&gt;5%3&lt;/code&gt;을 넣어보았습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;03.png&quot; data-origin-width=&quot;514&quot; data-origin-height=&quot;142&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/36j9i/btqFzGvGoyk/oSvKk0Bn0s9XamnoqfP8aK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/36j9i/btqFzGvGoyk/oSvKk0Bn0s9XamnoqfP8aK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/36j9i/btqFzGvGoyk/oSvKk0Bn0s9XamnoqfP8aK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F36j9i%2FbtqFzGvGoyk%2FoSvKk0Bn0s9XamnoqfP8aK%2Fimg.png&quot; data-filename=&quot;03.png&quot; data-origin-width=&quot;514&quot; data-origin-height=&quot;142&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;그랬더니 이번엔 &lt;code&gt;query error&lt;/code&gt;가 뜨네요. 이는 애초에 DB에 처음부터 &lt;code&gt;lv&lt;/code&gt;가 2인 값이 없다는 의미가 됩니다. 따라서 DB에서 가져오는 것이 아닌, 직접 2라는 결과가 나오도록 &lt;code&gt;union&lt;/code&gt; 연산자를 이용해 보았습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1594556132731&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code class=&quot;sql hljs&quot;&gt;select lv from chall7 where lv=(3) union select 2&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;이런 식으로 쿼리문을 구성하게 된다면 앞에는 &lt;code&gt;lv&lt;/code&gt;가 3인 경우가 없으므로 빈 결과가 나오게 되고, 최종적으로 뒤의 2가 결과로 나오게 될 것입니다. 하지만 필터링이 있어 위 쿼리문을 그대로 사용할 수는 없습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;2의 경우 아까와 마찬가지로 % 연산자를 사용해 우회하고, 공백의 경우 괄호를 넣어 대신할 수 있습니다. 마지막으로 # 주석 처리를 이용해 뒷부분의 쓸데없는 부분은 버릴 수 있죠. 이를 토대로 공격 페이로드를 만들어 보면 &lt;code&gt;3)union(select(5%3))%23&lt;/code&gt;이 됩니다. (#의 경우 URL 인코딩을 이용해 %23으로 넣어야 들어갑니다.)&lt;/p&gt;
&lt;pre id=&quot;code_1594556594688&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code class=&quot;sql hljs&quot;&gt;select lv from chall7 where lv=(3)union(select(5%3))#)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;페이로드가 들어가면 이런 식으로 쿼리문이 만들어지게 되면서 2가 결과로 나오게 될 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;04.png&quot; data-origin-width=&quot;644&quot; data-origin-height=&quot;214&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oaVbd/btqFBf4wqsp/wHXIrs9XdPtJ6s3R8Ub3Sk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oaVbd/btqFBf4wqsp/wHXIrs9XdPtJ6s3R8Ub3Sk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oaVbd/btqFBf4wqsp/wHXIrs9XdPtJ6s3R8Ub3Sk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoaVbd%2FbtqFBf4wqsp%2FwHXIrs9XdPtJ6s3R8Ub3Sk%2Fimg.png&quot; data-filename=&quot;04.png&quot; data-origin-width=&quot;644&quot; data-origin-height=&quot;214&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;5개의 쿼리문 중 랜덤으로 선택되기 때문에 괄호가 하나만 있는 쿼리문이 선택될 때까지 몇 번 새로고침을 하다 보면 이렇게 문제가 풀리는 것을 볼 수 있습니다!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;a href=&quot;https://webhacking.kr/&quot;&gt;https://webhacking.kr&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1594556813141&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Webhacking.kr&quot; data-og-description=&quot;Index Welcome Stranger! Notice(en) [2019-08-18] In the process of receiving service, some loss of data has been observed. For example, in very few accounts there may be a truncation of the last one letter of an userid. If userid contains multibyte characte&quot; data-og-host=&quot;webhacking.kr&quot; data-og-source-url=&quot;https://webhacking.kr/&quot; data-og-url=&quot;https://webhacking.kr/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://webhacking.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://webhacking.kr/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Webhacking.kr&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Index Welcome Stranger! Notice(en) [2019-08-18] In the process of receiving service, some loss of data has been observed. For example, in very few accounts there may be a truncation of the last one letter of an userid. If userid contains multibyte characte&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;webhacking.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>Problem Solving/Wargame</category>
      <category>webhacking.kr</category>
      <author>retn0</author>
      <guid isPermaLink="true">https://retn0.tistory.com/28</guid>
      <comments>https://retn0.tistory.com/28#entry28comment</comments>
      <pubDate>Wed, 15 Jul 2020 16:31:30 +0900</pubDate>
    </item>
    <item>
      <title>[Webhacking.kr] Old - 06 문제 풀이</title>
      <link>https://retn0.tistory.com/27</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;01.png&quot; data-origin-width=&quot;175&quot; data-origin-height=&quot;108&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tWoTY/btqFBLopI9s/obsGg7xpSfmhj4Vxs9QK90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tWoTY/btqFBLopI9s/obsGg7xpSfmhj4Vxs9QK90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tWoTY/btqFBLopI9s/obsGg7xpSfmhj4Vxs9QK90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtWoTY%2FbtqFBLopI9s%2FobsGg7xpSfmhj4Vxs9QK90%2Fimg.png&quot; data-filename=&quot;01.png&quot; data-origin-width=&quot;175&quot; data-origin-height=&quot;108&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;처음 들어가면 나오는 화면입니다. 아이디와 패스워드가 보이네요. 일단 소스 코드를 확인해 봅시다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;02.png&quot; data-origin-width=&quot;446&quot; data-origin-height=&quot;519&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bw7yWs/btqFA6zMmzn/0bEK2jpKAAgAXcKUAC6NeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bw7yWs/btqFA6zMmzn/0bEK2jpKAAgAXcKUAC6NeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bw7yWs/btqFA6zMmzn/0bEK2jpKAAgAXcKUAC6NeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbw7yWs%2FbtqFA6zMmzn%2F0bEK2jpKAAgAXcKUAC6NeK%2Fimg.png&quot; data-filename=&quot;02.png&quot; data-origin-width=&quot;446&quot; data-origin-height=&quot;519&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;PHP 소스 코드가 보이네요. 이 부분은 아이디와 비밀번호를 암호화하는 부분인 것 같습니다. &lt;code&gt;$val_id&lt;/code&gt;에 &lt;code&gt;guest&lt;/code&gt;, &lt;code&gt;$val_pw&lt;/code&gt;에 &lt;code&gt;123qwe&lt;/code&gt;가 들어간 뒤 Base64 인코딩을 20번 수행합니다. 마지막으로 &lt;code&gt;str_replace&lt;/code&gt; 함수로 몇 개의 문자열을 바꾼 뒤에 최종적으로 쿠키에 대입하네요.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;03.png&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;511&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCXshs/btqFzAvuWEe/xkXliMHVPKqdls4gjbsXu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCXshs/btqFzAvuWEe/xkXliMHVPKqdls4gjbsXu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCXshs/btqFzAvuWEe/xkXliMHVPKqdls4gjbsXu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCXshs%2FbtqFzAvuWEe%2FxkXliMHVPKqdls4gjbsXu1%2Fimg.png&quot; data-filename=&quot;03.png&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;511&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;이 부분은 위에서 수행한 작업을 반대로 하는 것으로 보아 암호화된 내용을 복호화하는 코드인 것 같습니다. 쿠키에 기록된 암호화된 아이디와 패스워드를 가져온 뒤에 복호화를 수행하고, 마지막에 아이디가 &lt;code&gt;admin&lt;/code&gt;, 패스워드가 &lt;code&gt;nimda&lt;/code&gt;가 되면 문제가 풀리는 것 같네요.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;04.png&quot; data-origin-width=&quot;302&quot; data-origin-height=&quot;423&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kCkKI/btqFzF4tNkQ/wQ8vgzxB4VjzLqu9v4jln1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kCkKI/btqFzF4tNkQ/wQ8vgzxB4VjzLqu9v4jln1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kCkKI/btqFzF4tNkQ/wQ8vgzxB4VjzLqu9v4jln1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkCkKI%2FbtqFzF4tNkQ%2FwQ8vgzxB4VjzLqu9v4jln1%2Fimg.png&quot; data-filename=&quot;04.png&quot; data-origin-width=&quot;302&quot; data-origin-height=&quot;423&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;그럼 &lt;code&gt;admin&lt;/code&gt;과 &lt;code&gt;nimda&lt;/code&gt;를 암호화해 쿠키에 넣어주면 문제가 바로 풀리겠네요. 구글에 online php compiler를 검색해서 나온 아무 사이트에 들어가서 암호화 코드를 그대로 복사해 값을 확인할 수 있게 했습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;05.png&quot; data-origin-width=&quot;885&quot; data-origin-height=&quot;102&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAPjMJ/btqFAqyJ1IL/6k5WyDR45KMWEkKb3K3gb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAPjMJ/btqFAqyJ1IL/6k5WyDR45KMWEkKb3K3gb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAPjMJ/btqFAqyJ1IL/6k5WyDR45KMWEkKb3K3gb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAPjMJ%2FbtqFAqyJ1IL%2F6k5WyDR45KMWEkKb3K3gb1%2Fimg.png&quot; data-filename=&quot;05.png&quot; data-origin-width=&quot;885&quot; data-origin-height=&quot;102&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;실행하니 이렇게 암호화된 값을 확인할 수 있네요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;06.png&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;532&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOjmHs/btqFBLWfR2Y/YE0vpUrYdNAX5TTMTg6bxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOjmHs/btqFBLWfR2Y/YE0vpUrYdNAX5TTMTg6bxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOjmHs/btqFBLWfR2Y/YE0vpUrYdNAX5TTMTg6bxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOjmHs%2FbtqFBLWfR2Y%2FYE0vpUrYdNAX5TTMTg6bxK%2Fimg.png&quot; data-filename=&quot;06.png&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;532&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 이걸 쿠키의 &lt;code&gt;user&lt;/code&gt;와 &lt;code&gt;password&lt;/code&gt; 항목에 대입해서 새로고침을 하게 되면&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;07.png&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;153&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lg8TB/btqFBMgyXlj/3PbHPVUmRVH5yHYJtLh5H0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lg8TB/btqFBMgyXlj/3PbHPVUmRVH5yHYJtLh5H0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lg8TB/btqFBMgyXlj/3PbHPVUmRVH5yHYJtLh5H0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flg8TB%2FbtqFBMgyXlj%2F3PbHPVUmRVH5yHYJtLh5H0%2Fimg.png&quot; data-filename=&quot;07.png&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;153&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 문제가 풀리는 것을 볼 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p&gt;&lt;a href=&quot;https://webhacking.kr/&quot;&gt;https://webhacking.kr&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1594541130171&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Webhacking.kr&quot; data-og-description=&quot;Index Welcome Stranger! Notice(en) [2019-08-18] In the process of receiving service, some loss of data has been observed. For example, in very few accounts there may be a truncation of the last one letter of an userid. If userid contains multibyte characte&quot; data-og-host=&quot;webhacking.kr&quot; data-og-source-url=&quot;https://webhacking.kr/&quot; data-og-url=&quot;https://webhacking.kr/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://webhacking.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://webhacking.kr/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Webhacking.kr&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Index Welcome Stranger! Notice(en) [2019-08-18] In the process of receiving service, some loss of data has been observed. For example, in very few accounts there may be a truncation of the last one letter of an userid. If userid contains multibyte characte&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;webhacking.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>Problem Solving/Wargame</category>
      <category>webhacking.kr</category>
      <author>retn0</author>
      <guid isPermaLink="true">https://retn0.tistory.com/27</guid>
      <comments>https://retn0.tistory.com/27#entry27comment</comments>
      <pubDate>Tue, 14 Jul 2020 18:08:16 +0900</pubDate>
    </item>
    <item>
      <title>[Webhacking.kr] Old - 24 문제 풀이</title>
      <link>https://retn0.tistory.com/26</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;01.png&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;176&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bofJaS/btqFzH1P6bP/cLXcA1rVVVkSyfeT8Z61kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bofJaS/btqFzH1P6bP/cLXcA1rVVVkSyfeT8Z61kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bofJaS/btqFzH1P6bP/cLXcA1rVVVkSyfeT8Z61kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbofJaS%2FbtqFzH1P6bP%2FcLXcA1rVVVkSyfeT8Z61kk%2Fimg.png&quot; data-filename=&quot;01.png&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;176&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;제 아이피와 사용자 에이전트(User agent)가 보이고, 그 아래 잘못된 아이피(Wrong IP!)라고 표시가 되어있네요. 일단 소스 코드를 확인해 보겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;02.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;552&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pwdEx/btqFz2xUrTf/vhC8e6XzS0yye7qu41w1xk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pwdEx/btqFz2xUrTf/vhC8e6XzS0yye7qu41w1xk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pwdEx/btqFz2xUrTf/vhC8e6XzS0yye7qu41w1xk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpwdEx%2FbtqFz2xUrTf%2FvhC8e6XzS0yye7qu41w1xk%2Fimg.png&quot; data-filename=&quot;02.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;552&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;PHP 코드가 있네요. 대충 보니 &lt;code&gt;$ip&lt;/code&gt; 변수에 클라이언트의 아이피 주소를 담고, 이 값이 &lt;code&gt;127.0.0.1&lt;/code&gt;일 경우 문제가 풀리는 것 같습니다. 하지만 아이피 주소는 서버의 &lt;code&gt;REMOTE_ADDR&lt;/code&gt;로 얻어오기에 얼핏 보면 불가능해 보이지만, 상단에 &lt;code&gt;extract($_COOKIE);&lt;/code&gt; 코드가 있기 때문에 값을 제 마음대로 바꿀 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;a href=&quot;https://www.php.net/manual/en/function.extract.php&quot;&gt;https://www.php.net/manual/en/function.extract.php&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1594469836724&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;PHP: extract - Manual&quot; data-og-description=&quot;[New Version]This function is very useful for filtering complicated array structure.Also, Some integer bitmasks and invalid UTF-8 sequence detection are available.Code: $_GET,&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; INPUT_POST =&amp;gt; $_POST,&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; INPUT_COOKIE =&amp;gt; $_COOKIE&quot; data-og-host=&quot;www.php.net&quot; data-og-source-url=&quot;https://www.php.net/manual/en/function.extract.php&quot; data-og-url=&quot;https://www.php.net/manual/en/function.extract.php&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.php.net/manual/en/function.extract.php&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.php.net/manual/en/function.extract.php&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;PHP: extract - Manual&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;[New Version]This function is very useful for filtering complicated array structure.Also, Some integer bitmasks and invalid UTF-8 sequence detection are available.Code: $_GET,&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; INPUT_POST =&amp;gt; $_POST,&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; INPUT_COOKIE =&amp;gt; $_COOKIE&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.php.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;code&gt;extract&lt;/code&gt; 함수를 PHP 매뉴얼에서 살펴보았습니다. 배열에 있는 데이터를 변수에 각각 매핑시키는 역할을 하는 것 같아 보이는데요. 사실 &lt;code&gt;$ip&lt;/code&gt; 변수에 값을 담을 때에도 원래는 &lt;code&gt;$_SERVER['REMOTE_ADDR']&lt;/code&gt;로 가져와야 하지만, &lt;code&gt;extract($_SERVER);&lt;/code&gt; 코드가 있기 때문에 &lt;code&gt;$ip = $REMOTE_ADDR;&lt;/code&gt;이 가능한 것입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;03.png&quot; data-origin-width=&quot;585&quot; data-origin-height=&quot;437&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGOLmR/btqFzcO0dNv/kJ9txKfR2VXgvJjSFlsJT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGOLmR/btqFzcO0dNv/kJ9txKfR2VXgvJjSFlsJT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGOLmR/btqFzcO0dNv/kJ9txKfR2VXgvJjSFlsJT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGOLmR%2FbtqFzcO0dNv%2FkJ9txKfR2VXgvJjSFlsJT0%2Fimg.png&quot; data-filename=&quot;03.png&quot; data-origin-width=&quot;585&quot; data-origin-height=&quot;437&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;어쨌든 &lt;code&gt;extract($_COOKIE);&lt;/code&gt; 코드 덕분에 우리는 쿠키에 값을 설정하는 것으로 언제든지 &lt;code&gt;$ip&lt;/code&gt; 변수의 값을 바꿀 수 있습니다. 테스트로 &lt;code&gt;REMOTE_ADDR&lt;/code&gt; 이름의 쿠키를 만들고 값을 &lt;code&gt;123.123.123.123&lt;/code&gt;으로 설정해 보았습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;04.png&quot; data-origin-width=&quot;186&quot; data-origin-height=&quot;178&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H8Kru/btqFAgvWZx2/SppVljvbWsYncuXLahmTa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H8Kru/btqFAgvWZx2/SppVljvbWsYncuXLahmTa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H8Kru/btqFAgvWZx2/SppVljvbWsYncuXLahmTa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH8Kru%2FbtqFAgvWZx2%2FSppVljvbWsYncuXLahmTa0%2Fimg.png&quot; data-filename=&quot;04.png&quot; data-origin-width=&quot;186&quot; data-origin-height=&quot;178&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;정말로 값이 바뀌었네요! &lt;code&gt;3.3.3.3&lt;/code&gt;으로 나오는 이유는 &lt;code&gt;str_replace&lt;/code&gt; 함수를 이용한 필터링 때문입니다. 하지만 딱 1번만 실행되도록 코딩해놨기 때문에 이를 쉽게 우회할 수 있습니다. 예를 들어 &lt;code&gt;12&lt;/code&gt;가 필터링 되는 경우에 &lt;code&gt;1122&lt;/code&gt;로 입력하면, 내부의 &lt;code&gt;12&lt;/code&gt;가 사라지면서 결과적으로 &lt;code&gt;12&lt;/code&gt;가 나오게 됩니다. 이런 방식으로 필터링을 우회하면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;code&gt;123.123.123.123&lt;/code&gt;으로 입력했던 값을 지우고 &lt;code&gt;112277....00....00....1&lt;/code&gt;를 입력해 보았습니다. &lt;code&gt;str_replace&lt;/code&gt; 함수에 의해 최종적으로 &lt;code&gt;127.0.0.1&lt;/code&gt;로 바뀌게 될 것입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;05.png&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;140&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcl4YV/btqFAfw2vgr/SSxXz5Q75KLmy8E2He4mH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcl4YV/btqFAfw2vgr/SSxXz5Q75KLmy8E2He4mH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcl4YV/btqFAfw2vgr/SSxXz5Q75KLmy8E2He4mH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbcl4YV%2FbtqFAfw2vgr%2FSSxXz5Q75KLmy8E2He4mH0%2Fimg.png&quot; data-filename=&quot;05.png&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;140&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;아이피가 &lt;code&gt;127.0.0.1&lt;/code&gt;이 나오게 되면서 문제가 풀렸습니다! PHP의 &lt;code&gt;extract&lt;/code&gt; 함수의 문제점을 알고 있는지 묻는 문제였습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;a href=&quot;https://webhacking.kr/&quot;&gt;https://webhacking.kr&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1594470865642&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Webhacking.kr&quot; data-og-description=&quot;Index Welcome Stranger! Notice(en) [2019-08-18] In the process of receiving service, some loss of data has been observed. For example, in very few accounts there may be a truncation of the last one letter of an userid. If userid contains multibyte characte&quot; data-og-host=&quot;webhacking.kr&quot; data-og-source-url=&quot;https://webhacking.kr/&quot; data-og-url=&quot;https://webhacking.kr/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://webhacking.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://webhacking.kr/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Webhacking.kr&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Index Welcome Stranger! Notice(en) [2019-08-18] In the process of receiving service, some loss of data has been observed. For example, in very few accounts there may be a truncation of the last one letter of an userid. If userid contains multibyte characte&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;webhacking.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>Problem Solving/Wargame</category>
      <category>webhacking.kr</category>
      <author>retn0</author>
      <guid isPermaLink="true">https://retn0.tistory.com/26</guid>
      <comments>https://retn0.tistory.com/26#entry26comment</comments>
      <pubDate>Mon, 13 Jul 2020 16:35:16 +0900</pubDate>
    </item>
    <item>
      <title>[Webhacking.kr] Old - 16 문제 풀이</title>
      <link>https://retn0.tistory.com/25</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;01.png&quot; data-origin-width=&quot;219&quot; data-origin-height=&quot;226&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vmavp/btqFA5ArsPV/HvbUrNAybpbbBXFU1aq1iK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vmavp/btqFA5ArsPV/HvbUrNAybpbbBXFU1aq1iK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vmavp/btqFA5ArsPV/HvbUrNAybpbbBXFU1aq1iK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvmavp%2FbtqFA5ArsPV%2FHvbUrNAybpbbBXFU1aq1iK%2Fimg.png&quot; data-filename=&quot;01.png&quot; data-origin-width=&quot;219&quot; data-origin-height=&quot;226&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;알 수 없는 별이 보이네요. WASD 키를 누르니 큰 별이 막 움직이네요. 일단 소스 코드를 먼저 확인해 봅시다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;02.png&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;346&quot; width=&quot;1095&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TkTUM/btqFAOeCv6r/QwWXveFjxqg6jQkZtAWUT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TkTUM/btqFAOeCv6r/QwWXveFjxqg6jQkZtAWUT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TkTUM/btqFAOeCv6r/QwWXveFjxqg6jQkZtAWUT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTkTUM%2FbtqFAOeCv6r%2FQwWXveFjxqg6jQkZtAWUT1%2Fimg.png&quot; data-filename=&quot;02.png&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;346&quot; width=&quot;1095&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;margin-top: 24px !important;&quot;&gt;대충 보니 &lt;code&gt;mv&lt;/code&gt; 함수에서 별을 움직이게 하는 것 같네요. 매개변수인 &lt;code&gt;cd&lt;/code&gt;에 키 코드가 들어가는 것 같고요. 맨 마지막 if 문이 좀 수상해 보입니다. 124번에 맞는 &lt;code&gt;|&lt;/code&gt; 키를 눌러보았습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;03.png&quot; data-origin-width=&quot;331&quot; data-origin-height=&quot;60&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbLxuw/btqFAgbz5G1/2M4D9KIXLEOUJtL5hEP5hK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbLxuw/btqFAgbz5G1/2M4D9KIXLEOUJtL5hEP5hK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbLxuw/btqFAgbz5G1/2M4D9KIXLEOUJtL5hEP5hK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbLxuw%2FbtqFAgbz5G1%2F2M4D9KIXLEOUJtL5hEP5hK%2Fimg.png&quot; data-filename=&quot;03.png&quot; data-origin-width=&quot;331&quot; data-origin-height=&quot;60&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;풀렸네요! 그냥 JavaScript 문제인 것 같습니다...&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p&gt;&lt;a href=&quot;https://webhacking.kr/&quot;&gt;https://webhacking.kr&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1594468021311&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Webhacking.kr&quot; data-og-description=&quot;Index Welcome Stranger! Notice(en) [2019-08-18] In the process of receiving service, some loss of data has been observed. For example, in very few accounts there may be a truncation of the last one letter of an userid. If userid contains multibyte characte&quot; data-og-host=&quot;webhacking.kr&quot; data-og-source-url=&quot;https://webhacking.kr/&quot; data-og-url=&quot;https://webhacking.kr/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://webhacking.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://webhacking.kr/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Webhacking.kr&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Index Welcome Stranger! Notice(en) [2019-08-18] In the process of receiving service, some loss of data has been observed. For example, in very few accounts there may be a truncation of the last one letter of an userid. If userid contains multibyte characte&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;webhacking.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>Problem Solving/Wargame</category>
      <category>webhacking.kr</category>
      <author>retn0</author>
      <guid isPermaLink="true">https://retn0.tistory.com/25</guid>
      <comments>https://retn0.tistory.com/25#entry25comment</comments>
      <pubDate>Sun, 12 Jul 2020 14:48:11 +0900</pubDate>
    </item>
    <item>
      <title>[Webhacking.kr] Old - 15 문제 풀이</title>
      <link>https://retn0.tistory.com/24</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;01.png&quot; data-origin-width=&quot;473&quot; data-origin-height=&quot;158&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AeUTg/btqFztCZkQi/BToZDhEnh1MBVH6RwpZX7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AeUTg/btqFztCZkQi/BToZDhEnh1MBVH6RwpZX7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AeUTg/btqFztCZkQi/BToZDhEnh1MBVH6RwpZX7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAeUTg%2FbtqFztCZkQi%2FBToZDhEnh1MBVH6RwpZX7k%2Fimg.png&quot; data-filename=&quot;01.png&quot; data-origin-width=&quot;473&quot; data-origin-height=&quot;158&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;들어가자마자 경고 창이 뜨면서 강제로 메인 화면으로 돌아가지네요. 소스 코드를 한번 확인해 봅시다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;02.png&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;252&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb4cWI/btqFBfCO4Sk/xMgs3hsM6ubpegPnhadgbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb4cWI/btqFBfCO4Sk/xMgs3hsM6ubpegPnhadgbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb4cWI/btqFBfCO4Sk/xMgs3hsM6ubpegPnhadgbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb4cWI%2FbtqFBfCO4Sk%2FxMgs3hsM6ubpegPnhadgbK%2Fimg.png&quot; data-filename=&quot;02.png&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;252&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;크롬의 경우 주소 앞에 &lt;code&gt;view-source&lt;/code&gt;를 넣어주면 쉽게 소스 코드를 확인할 수 있습니다. &lt;code&gt;document.write(&quot;&amp;lt;a href=?getFlag&amp;gt;[Get Flag]&amp;lt;/a&amp;gt;&quot;);&lt;/code&gt; 코드가 수상하네요. 주소 뒤에 &lt;code&gt;?getFlag&lt;/code&gt;를 한 번 넣어봅시다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;03.png&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;150&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GXqD6/btqFA6lOgB3/2VKCrB991y50wroMnxJgbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GXqD6/btqFA6lOgB3/2VKCrB991y50wroMnxJgbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GXqD6/btqFA6lOgB3/2VKCrB991y50wroMnxJgbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGXqD6%2FbtqFA6lOgB3%2F2VKCrB991y50wroMnxJgbk%2Fimg.png&quot; data-filename=&quot;03.png&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;150&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://webhacking.kr/challenge/js-2/?getFlag&quot;&gt;https://webhacking.kr/challenge/js-2/?getFlag&lt;/a&gt; 이렇게 입력하고 들어가니 문제가 풀렸네요!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p&gt;&lt;a href=&quot;https://webhacking.kr/&quot;&gt;https://webhacking.kr&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1594466697020&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Webhacking.kr&quot; data-og-description=&quot;Index Welcome Stranger! Notice(en) [2019-08-18] In the process of receiving service, some loss of data has been observed. For example, in very few accounts there may be a truncation of the last one letter of an userid. If userid contains multibyte characte&quot; data-og-host=&quot;webhacking.kr&quot; data-og-source-url=&quot;https://webhacking.kr/&quot; data-og-url=&quot;https://webhacking.kr/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://webhacking.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://webhacking.kr/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Webhacking.kr&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Index Welcome Stranger! Notice(en) [2019-08-18] In the process of receiving service, some loss of data has been observed. For example, in very few accounts there may be a truncation of the last one letter of an userid. If userid contains multibyte characte&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;webhacking.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>Problem Solving/Wargame</category>
      <category>webhacking.kr</category>
      <author>retn0</author>
      <guid isPermaLink="true">https://retn0.tistory.com/24</guid>
      <comments>https://retn0.tistory.com/24#entry24comment</comments>
      <pubDate>Sat, 11 Jul 2020 20:27:03 +0900</pubDate>
    </item>
    <item>
      <title>[Webhacking.kr] Old - 01 문제 풀이</title>
      <link>https://retn0.tistory.com/23</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;01.png&quot; data-origin-width=&quot;381&quot; data-origin-height=&quot;267&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9r4vw/btqFz3CSX2e/7ZLQ2Zr3kjPzrx4HV3Wxm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9r4vw/btqFz3CSX2e/7ZLQ2Zr3kjPzrx4HV3Wxm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9r4vw/btqFz3CSX2e/7ZLQ2Zr3kjPzrx4HV3Wxm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9r4vw%2FbtqFz3CSX2e%2F7ZLQ2Zr3kjPzrx4HV3Wxm1%2Fimg.png&quot; data-filename=&quot;01.png&quot; data-origin-width=&quot;381&quot; data-origin-height=&quot;267&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;들어가면 가장 먼저 보이는 화면입니다. view-source 링크를 클릭해 소스 코드를 확인해 보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;02.png&quot; data-origin-width=&quot;446&quot; data-origin-height=&quot;422&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BP1cS/btqFzb9IrlJ/BEhK1Mb7ICB4ARyFlK4fj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BP1cS/btqFzb9IrlJ/BEhK1Mb7ICB4ARyFlK4fj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BP1cS/btqFzb9IrlJ/BEhK1Mb7ICB4ARyFlK4fj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBP1cS%2FbtqFzb9IrlJ%2FBEhK1Mb7ICB4ARyFlK4fj0%2Fimg.png&quot; data-filename=&quot;02.png&quot; data-origin-width=&quot;446&quot; data-origin-height=&quot;422&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;PHP 소스 코드가 보이네요. 중요한 부분은 아래 부분입니다. &lt;code&gt;user_lv&lt;/code&gt; 쿠키의 값이 5보다 크면 &lt;code&gt;solve(1)&lt;/code&gt; 함수를 호출하는 것으로 보아 저 부분을 실행시키면 될 것 같네요. 하지만 6 이상일 경우 1로 초기화되기 때문에 5보다 크고 6보다 작은 5.5 같은 값을 넣어주면 될 것 같습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;03.png&quot; data-origin-width=&quot;573&quot; data-origin-height=&quot;475&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JP7fi/btqFzth2QlA/eGRNhbKx91BWAijbHo5nZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JP7fi/btqFzth2QlA/eGRNhbKx91BWAijbHo5nZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JP7fi/btqFzth2QlA/eGRNhbKx91BWAijbHo5nZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJP7fi%2FbtqFzth2QlA%2FeGRNhbKx91BWAijbHo5nZ1%2Fimg.png&quot; data-filename=&quot;03.png&quot; data-origin-width=&quot;573&quot; data-origin-height=&quot;475&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;쿠키 변조는 간단히 &lt;a href=&quot;http://www.editthiscookie.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;EditThisCookie&lt;/a&gt; 확장 프로그램을 사용했습니다. &lt;code&gt;user_lv&lt;/code&gt; 값을 5.5로 바꾼 뒤 새로고침을 하면&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;04.png&quot; data-origin-width=&quot;474&quot; data-origin-height=&quot;304&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p1Mki/btqFzGH0sZ9/JajVDmOeCqCSEJVLLfIeo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p1Mki/btqFzGH0sZ9/JajVDmOeCqCSEJVLLfIeo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p1Mki/btqFzGH0sZ9/JajVDmOeCqCSEJVLLfIeo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp1Mki%2FbtqFzGH0sZ9%2FJajVDmOeCqCSEJVLLfIeo1%2Fimg.png&quot; data-filename=&quot;04.png&quot; data-origin-width=&quot;474&quot; data-origin-height=&quot;304&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 문제가 풀립니다. 가장 기본적인 쿠키 변조 문제였네요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p&gt;&lt;a href=&quot;https://webhacking.kr/&quot;&gt;https://webhacking.kr&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1594380422317&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Webhacking.kr&quot; data-og-description=&quot;Index Welcome Stranger! Notice(en) [2019-08-18] In the process of receiving service, some loss of data has been observed. For example, in very few accounts there may be a truncation of the last one letter of an userid. If userid contains multibyte characte&quot; data-og-host=&quot;webhacking.kr&quot; data-og-source-url=&quot;https://webhacking.kr/&quot; data-og-url=&quot;https://webhacking.kr/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://webhacking.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://webhacking.kr/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Webhacking.kr&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Index Welcome Stranger! Notice(en) [2019-08-18] In the process of receiving service, some loss of data has been observed. For example, in very few accounts there may be a truncation of the last one letter of an userid. If userid contains multibyte characte&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;webhacking.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>Problem Solving/Wargame</category>
      <category>webhacking.kr</category>
      <author>retn0</author>
      <guid isPermaLink="true">https://retn0.tistory.com/23</guid>
      <comments>https://retn0.tistory.com/23#entry23comment</comments>
      <pubDate>Fri, 10 Jul 2020 20:32:00 +0900</pubDate>
    </item>
    <item>
      <title>[Project] 지뢰 찾기 게임 (React)</title>
      <link>https://retn0.tistory.com/22</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;minesweeper.PNG&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;604&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ysozh/btqCMopw6El/qI4ZnYFL2Qkdif6Cah5nu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ysozh/btqCMopw6El/qI4ZnYFL2Qkdif6Cah5nu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ysozh/btqCMopw6El/qI4ZnYFL2Qkdif6Cah5nu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fysozh%2FbtqCMopw6El%2FqI4ZnYFL2Qkdif6Cah5nu0%2Fimg.png&quot; data-filename=&quot;minesweeper.PNG&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;604&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;Play: &lt;a href=&quot;https://nbsp1221.github.io/react-minesweeper-game&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://nbsp1221.github.io/react-minesweeper-game&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;React 공부용으로 만든 지뢰 찾기 게임입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;지금까지 웹 프로그래밍은 해온 게 많아서 HTML, CSS, JavaScript 같은 언어에는 많이 익숙했지만, 지금까지 써본 라이브러리는 고작 jQuery 말곤 없었기에 적응하는데 꽤나 고생했습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;더구나 React는 라이브러리라고 하기에는 뭔가... 라이브러리보다 프레임워크인 듯한 느낌이 강했습니다. 웹인데 빌드 개념이 등장하고 웹팩(Webpack) 등등 이상한 게 마구 등장하니 어렵게 느껴진 것 같네요.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;하지만 괜히 인기 있는 라이브러리가 아니겠죠? 처음 배웠을 땐 도대체 이걸 왜 하나 싶었지만, 막상 프로젝트를 진행해보니 확실히 편한 부분들이 많은 것 같습니다. 특히 styled-components를 배우고 났을 땐 진짜 최고였어요! CSS를 안 만들어도 된다니 엄청 편했습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;지금까지 너무 Vanilla JavaScript로만 코딩을 해온 게 아닐까 싶네요. 물론 기본이 되는 JavaScript 스킬도 매우 중요하겠지만, 라이브러리나 프레임워크 1 ~ 2개쯤 배워보는 것도 괜찮을 것 같습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;Source Code: &lt;a href=&quot;https://github.com/nbsp1221/react-minesweeper-game&quot;&gt;https://github.com/nbsp1221/react-minesweeper-game&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1584352271888&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;object&quot; data-og-title=&quot;nbsp1221/react-minesweeper-game&quot; data-og-description=&quot;Minesweeper Game in React. Contribute to nbsp1221/react-minesweeper-game development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/nbsp1221/react-minesweeper-game&quot; data-og-url=&quot;https://github.com/nbsp1221/react-minesweeper-game&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/buCmxl/hyFjmaYgvw/Kdg0adEnrt6ich0dghP860/img.png?width=256&amp;amp;height=256&amp;amp;face=0_0_256_256,https://scrap.kakaocdn.net/dn/bNqAWO/hyFjnAWppc/HUrLIAZ3hJFdq9T5lhUGtK/img.png?width=516&amp;amp;height=604&amp;amp;face=0_0_516_604&quot;&gt;&lt;a href=&quot;https://github.com/nbsp1221/react-minesweeper-game&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/nbsp1221/react-minesweeper-game&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/buCmxl/hyFjmaYgvw/Kdg0adEnrt6ich0dghP860/img.png?width=256&amp;amp;height=256&amp;amp;face=0_0_256_256,https://scrap.kakaocdn.net/dn/bNqAWO/hyFjnAWppc/HUrLIAZ3hJFdq9T5lhUGtK/img.png?width=516&amp;amp;height=604&amp;amp;face=0_0_516_604');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;nbsp1221/react-minesweeper-game&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Minesweeper Game in React. Contribute to nbsp1221/react-minesweeper-game development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>Project</category>
      <category>게임</category>
      <category>리액트</category>
      <author>retn0</author>
      <guid isPermaLink="true">https://retn0.tistory.com/22</guid>
      <comments>https://retn0.tistory.com/22#entry22comment</comments>
      <pubDate>Mon, 16 Mar 2020 18:55:46 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] SSH 접속 포트 변경하는 방법</title>
      <link>https://retn0.tistory.com/21</link>
      <description>&lt;p style=&quot;text-align: justify;&quot;&gt;기본적으로 SSH 접속 포트는 22번으로 설정되어 있습니다. 하지만 기본 포트를 그대로 사용하게 되면 외부의 공격에 쉽게 노출될 수 있기 때문에 Fail2ban 같은 프로그램을 이용하거나 아예 다른 포트로 바꿔주는 것이 좋습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;어려운 비밀번호를 설정해서 해킹 당할 걱정이 없겠거니 하고 그냥 놔두시는 경우도 있는데, 해킹은 그렇다 쳐도 트래픽이 문제입니다. 보통 봇을 이용해서 무차별 대입 공격을 하는 경우가 많기 때문에 잘못하다간 하루 만에 트래픽이 30GB씩 낭비되는 모습을 보실 수 있습니다... (제가 그랬거든요.  )&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;저는 처음에 Fail2ban을 이용해 로그인에 실패한 아이피는 차단되도록 했는데 공격이 워낙 많아서 감당이 안 되더라고요. 그래서 아예 포트 번호를 바꿔버리는 게 낫겠다는 생각이 들었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;SSH 접속 포트를 변경하는 방법은 매우 간단합니다. SSH 설정 파일인 &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt; 파일을 에디터로 열어 원하는 포트를 추가하기만 하면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1583682967426&quot; class=&quot;awk&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code class=&quot;hljs shell&quot;&gt;sudo vi /etc/ssh/sshd_config&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;내용을 보면 주석 처리가 된 &lt;span class=&quot;inline-code&quot;&gt;#Port 22&lt;/span&gt; 부분이 있을 겁니다. 주석을 지우고 22 대신 원하는 포트 번호를 넣어 설정하셔도 되고, 주석을 그대로 두고 바로 밑에 &lt;span class=&quot;inline-code&quot;&gt;Port 1234&lt;/span&gt; 같이 내용을 따로 추가하셔도 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;설정을 마쳤으면 파일을 저장한 뒤 SSH 서비스를 다시 실행합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1583683371534&quot; class=&quot;routeros&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code class=&quot;hljs shell&quot;&gt;sudo service sshd restart&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;포트 번호가 바뀌었기 때문에 iptables 같은 설정 또한 모두 바꿔주셔야 합니다. 그렇지 않으면 SSH 접속이 안될 수 있으니 주의하시길 바랍니다.&lt;/p&gt;</description>
      <category>Operating System/Linux</category>
      <category>ssh</category>
      <category>우분투</category>
      <author>retn0</author>
      <guid isPermaLink="true">https://retn0.tistory.com/21</guid>
      <comments>https://retn0.tistory.com/21#entry21comment</comments>
      <pubDate>Mon, 9 Mar 2020 01:09:24 +0900</pubDate>
    </item>
  </channel>
</rss>