PageSourceSearch

https://lactea.kr/

html lactea.kr collected 2026-10-06 03:36:22 UTC 91,273 bytes, 1,593 lines download raw bytes

1<!DOCTYPE html>
2<html lang="ko" class="night view-more-support progress-bar-support page-cover-support altcover-support alt1 show-comments gh-top hide-sidebar hide-blog-info sidebar-left sidebar-first theme-color deptheffect">
3                                                                                <head>
4                
4<script type="text/javascript">if (!window.T) { window.T = {} }
5window.T.config = {"TOP_SSL_URL":"https://www.tistory.com","PREVIEW":false,"ROLE":"guest","PREV_PAGE":"","NEXT_PAGE":"","BLOG":{"id":3085610,"name":"universe-blog","title":"Universe blog","isDormancy":false,"nickName":"Universe7202","status":"open","profileStatus":"normal"},"NEED_COMMENT_LOGIN":true,"COMMENT_LOGIN_CONFIRM_MESSAGE":"이 블로그는 로그인한 사용자에게만 댓글 작성을 허용했습니다. 지금 로그인하시겠습니까?","LOGIN_URL":"https://www.tistory.com/auth/login/?redirectUrl=https://lactea.kr/","DEFAULT_URL":"https://lactea.kr","USER":{"name":null,"homepage":null,"id":0,"profileImage":null},"SUBSCRIPTION":{"status":"none","isConnected":false,"isPending":false,"isWait":false,"isProcessing":false,"isNone":true},"IS_LOGIN":false,"HAS_BLOG":false,"IS_SUPPORT":false,"IS_SCRAPABLE":false,"TOP_URL":"http://www.tistory.com","JOIN_URL":"https://www.tistory.com/member/join","PHASE":"prod","ROLE_GROUP":"visitor"};
6window.T.entryInfo = null;
7window.appInfo = {"domain":"tistory.com","topUrl":"https://www.tistory.com","loginUrl":"https://www.tistory.com/auth/login","logoutUrl":"https://www.tistory.com/auth/logout"};
8window.initData = {};
9
10window.TistoryBlog = {
11    basePath: "",
12    url: "https://lactea.kr",
13    tistoryUrl: "https://universe-blog.tistory.com",
14    manageUrl: "https://universe-blog.tistory.com/manage",
15    token: "T85OP6vNpwItW1WINF/Zp7K5DngM6XJOsZ3C+Ayvyir5mJEZITdNSb3hwTSzDZ/h"
16};
17var servicePath = "";
18var blogURL = "";</script>
18
19
20                
21                
22                
23                        <!-- BusinessLicenseInfo - START -->
24        
25            <link href="https://edge.daumcdn.net/tistory/tistory-admin/userblog/userblog-542bd84ce37260cece1e68a465e3c63534629c86/static/plugin/BusinessLicenseInfo/style.css" rel="stylesheet" type="text/css"/>
26
27            
27<script>function switchFold(entryId) {
28    var businessLayer = document.getElementById("businessInfoLayer_" + entryId);
29
30    if (businessLayer) {
31        if (businessLayer.className.indexOf("unfold_license") > 0) {
32            businessLayer.className = "business_license_layer";
33        } else {
34            businessLayer.className = "business_license_layer unfold_license";
35        }
36    }
37}
38</script>
38
39
40        
41        <!-- BusinessLicenseInfo - END -->
42        <!-- DaumShow - START -->
43        <style type="text/css">#daumSearchBox {
44    height: 21px;
45    background-image: url(//i1.daumcdn.net/imgsrc.search/search_all/show/tistory/plugin/bg_search2_2.gif);
46    margin: 5px auto;
47    padding: 0;
48}
49
50#daumSearchBox input {
51    background: none;
52    margin: 0;
53    padding: 0;
54    border: 0;
55}
56
57#daumSearchBox #daumLogo {
58    width: 34px;
59    height: 21px;
60    float: left;
61    margin-right: 5px;
62    background-image: url(//i1.daumcdn.net/img-media/tistory/img/bg_search1_2_2010ci.gif);
63}
64
65#daumSearchBox #show_q {
66    background-color: transparent;
67    border: none;
68    font: 12px Gulim, Sans-serif;
69    color: #555;
70    margin-top: 4px;
71    margin-right: 15px;
72    float: left;
73}
74
75#daumSearchBox #show_btn {
76    background-image: url(//i1.daumcdn.net/imgsrc.search/search_all/show/tistory/plugin/bt_search_2.gif);
77    width: 37px;
78    height: 21px;
79    float: left;
80    margin: 0;
81    cursor: pointer;
82    text-indent: -1000em;
83}
84</style>
85
86        <!-- DaumShow - END -->
87
88        <!-- GoogleAnalytics - START -->
vendor: 66 bytes, lines 88-89
88
89        <script src="https://www.googletagmanager.com/gtag/js?id=
89G-9NQ0W46WZD
vendor: 26 bytes, line 89
89" async="async"></script>
90<script>
vendor: 126 bytes, lines 90-93
90window.dataLayer = window.dataLayer || [];
91function gtag(){dataLayer.push(arguments);}
92gtag('js', new Date());
93gtag('config','
93G-9NQ0W46WZD
vendor: 166 bytes, lines 93-97
93', {
94    cookie_domain: 'universe-blog.tistory.com',
95    cookie_flags: 'max-age=0;domain=.tistory.com',
96    cookie_expires: 7 * 24 * 60 * 60 // 7 days, in seconds
97});
97</script>
97
98
99        <!-- GoogleAnalytics - END -->
100
101        <!-- MetaTag - START -->
102        <meta name="네이버 웹 마스터 도구" content="&lt;meta name=&quot;Robots&quot; content=&quot;index,follow&quot;&gt;"/>
103<meta name="네이버 로봇툴 검증" content="&lt;meta name=&quot;Yeti&quot; content=&quot;index,follow&quot;&gt;"/>
104<meta name="구글 봇" content="&lt;meta name=&quot;Googlebot&quot; content=&quot;index,follow&quot;&gt;"/>
105<meta name="구글 이미지 봇" content="&lt;meta name=&quot;googlebot-image&quot; content=&quot;index,follow&quot;&gt;"/>
106<meta name="다음 봇" content="&lt;meta name=&quot;Daumoa&quot; content=&quot;index,follow&quot;&gt;"/>
107        <!-- MetaTag - END -->
108
109<!-- System - START -->
110
111<!-- System - END -->
112
113        <!-- GoogleSearchConsole - START -->
114        
115<!-- BEGIN GOOGLE_SITE_VERIFICATION -->
116<meta name="google-site-verification" content="broe8ArOBmX2vtJZ7PCa3ZyJJo1Xo97IwH9j-zLiQbw"/>
117<!-- END GOOGLE_SITE_VERIFICATION -->
118
119        <!-- GoogleSearchConsole - END -->
120
121        <!-- TistoryProfileLayer - START -->
122        <link href="https://edge.daumcdn.net/tistory/tistory-admin/userblog/userblog-542bd84ce37260cece1e68a465e3c63534629c86/static/plugin/TistoryProfileLayer/style.css" rel="stylesheet" type="text/css"/>
123<script type="text/javascript" src="https://edge.daumcdn.net/tistory/tistory-admin/userblog/userblog-542bd84ce37260cece1e68a465e3c63534629c86/static/plugin/TistoryProfileLayer/script.js"></script>
123
124
125        <!-- TistoryProfileLayer - END -->
126
127                
128                <meta http-equiv="X-UA-Compatible" content="IE=Edge">
129<meta name="format-detection" content="telephone=no">
130<script src="//t1.daumcdn.net/tistory_admin/lib/jquery/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
vendor: 1 bytes, line 130
130
131<script type="text/javascript" src="//t1.kakaocdn.net/tiara/js/v1/tiara-1.2.0.min.js"></script>
131<meta name="referrer" content="always"/>
132<meta name="google-adsense-platform-account" content="ca-host-pub-9691043933427338"/>
133<meta name="google-adsense-platform-domain" content="tistory.com"/>
134<meta name="description" content="i love security"/>
135
136    <!-- BEGIN OPENGRAPH -->
137    <meta property="og:type" content="website"/>
138<meta property="og:url" content="https://lactea.kr"/>
139<meta property="og:site_name" content="Universe blog"/>
140<meta property="og:title" content="Universe blog"/>
141<meta property="og:description" content="i love security"/>
142<meta property="og:image" content="https://img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Ftistory1.daumcdn.net%2Ftistory%2F3085610%2Fattach%2F0f893d6589334a90b770b9f65beb42a9"/>
143<meta property="og:article:author" content="'Universe7202'"/>
144    <!-- END OPENGRAPH -->
145
146    <!-- BEGIN TWITTERCARD -->
147    <meta name="twitter:card" content="summary_large_image"/>
148<meta name="twitter:site" content="@TISTORY"/>
149<meta name="twitter:title" content="Universe blog"/>
150<meta name="twitter:description" content="i love security"/>
151<meta property="twitter:image" content="https://img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Ftistory1.daumcdn.net%2Ftistory%2F3085610%2Fattach%2F0f893d6589334a90b770b9f65beb42a9"/>
152    <!-- END TWITTERCARD -->
153<script type="module" src="https://edge.daumcdn.net/tistory/tistory-admin/userblog/userblog-542bd84ce37260cece1e68a465e3c63534629c86/static/pc/dist/index.js" defer=""></script>
vendor: 1 bytes, line 153
153
154<script type="text/javascript" src="https://edge.daumcdn.net/tistory/tistory-admin/userblog/userblog-542bd84ce37260cece1e68a465e3c63534629c86/static/pc/dist/index-legacy.js" defer="" nomodule="true"></script>
vendor: 1 bytes, line 154
154
155<script type="text/javascript" src="https://edge.daumcdn.net/tistory/tistory-admin/userblog/userblog-542bd84ce37260cece1e68a465e3c63534629c86/static/pc/dist/polyfills-legacy.js" defer="" nomodule="true"></script>
155
156<link rel="icon" sizes="any" href="https://t1.daumcdn.net/tistory_admin/favicon/tistory_favicon_32x32.ico"/>
157<link rel="icon" type="image/svg+xml" href="https://t1.daumcdn.net/tistory_admin/top_v2/bi-tistory-favicon.svg"/>
158<link rel="apple-touch-icon" href="https://t1.daumcdn.net/tistory_admin/top_v2/tistory-apple-touch-favicon.png"/>
159<link rel="stylesheet" type="text/css" href="https://t1.daumcdn.net/tistory_admin/www/style/font.css"/>
160<link rel="stylesheet" type="text/css" href="https://edge.daumcdn.net/tistory/tistory-admin/userblog/userblog-542bd84ce37260cece1e68a465e3c63534629c86/static/style/content.css"/>
161<link rel="stylesheet" type="text/css" href="https://edge.daumcdn.net/tistory/tistory-admin/userblog/userblog-542bd84ce37260cece1e68a465e3c63534629c86/static/pc/dist/index.css"/>
162<link rel="stylesheet" type="text/css" href="https://edge.daumcdn.net/tistory/tistory-admin/userblog/userblog-542bd84ce37260cece1e68a465e3c63534629c86/static/style/uselessPMargin.css"/>
163<script type="text/javascript">(function() {
164    var tjQuery = jQuery.noConflict(true);
165    window.tjQuery = tjQuery;
166    window.orgjQuery = window.jQuery; window.jQuery = tjQuery;
167    window.jQuery = window.orgjQuery; delete window.orgjQuery;
168})()</script>
vendor: 1 bytes, line 168
168
169<script type="text/javascript" src="https://edge.daumcdn.net/tistory/tistory-admin/userblog/userblog-542bd84ce37260cece1e68a465e3c63534629c86/static/script/base.js"></script>
vendor: 1 bytes, line 169
169
170<script type="text/javascript" src="//developers.kakao.com/sdk/js/kakao.min.js"></script>
170
171
172                
173<!-- Google tag (gtag.js) -->
vendor: 64 bytes, lines 173-174
173
174<script async src="https://www.googletagmanager.com/gtag/js?id=
174G-9NQ0W46WZD
vendor: 12 bytes, line 174
174"></script>
175<script>
176  
vendor: 134 bytes, lines 176-180
176window.dataLayer = window.dataLayer || [];
177  function gtag(){dataLayer.push(arguments);}
178  gtag('js', new Date());
179
180  gtag('config', '
180G-9NQ0W46WZD
vendor: 4 bytes, line 180
180');
181</script>
vendor: 1 bytes, line 181
181
182<script src="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.4.2/tocbot.min.js"></script>
182
183<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.4.2/tocbot.css">
184<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1431972397228530"
185     crossorigin="anonymous"></script>
185
186<!-- Version 11.5.3 -->
187<meta charset="utf-8">
188<meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,minimum-scale=1,maximum-scale=1">
189<meta http-equiv="X-UA-Compatible" content="IE=Edge">
190<title>Universe blog</title>
191<link rel="alternate" type="application/rss+xml" title="Universe blog" href="https://universe-blog.tistory.com/rss">
192<link rel="preconnect" href="https://cdn.jsdelivr.net">
193<link rel="dns-prefetch" href="https://cdn.jsdelivr.net">
194<link rel="preconnect" href="https://fonts.gstatic.com">
195<link rel="dns-prefetch" href="https://fonts.gstatic.com">
196<link rel="preconnect" href="https://fonts.googleapis.com">
197<link rel="dns-prefetch" href="https://fonts.googleapis.com">
198
199
200<link rel="preconnect" href="https://tistory1.daumcdn.net/tistory/3085610/skin/">
201<link rel="dns-prefetch" href="https://tistory1.daumcdn.net/tistory/3085610/skin/">
202
203<link rel="preconnect" href="https://img1.daumcdn.net">
204<link rel="dns-prefetch" href="https://img1.daumcdn.net">
205<link rel="preconnect" href="https://t1.daumcdn.net">
206<link rel="dns-prefetch" href="https://t1.daumcdn.net">
207<link rel="preconnect" href="//developers.kakao.com">
208<link rel="dns-prefetch" href="//developers.kakao.com">
209<link rel="preload" as="script" href="https://t1.daumcdn.net/tistory_admin/lib/jquery/jquery-3.2.1.min.js">
210<link rel="preload" as="script" href="https://t1.daumcdn.net/tistory_admin/lib/lightbox/js/lightbox-plus-jquery.min.js">
211<link rel="preload" as="script" href="//developers.kakao.com/sdk/js/kakao.min.js">
212
213
214<link rel="preload" as="script" href="https://cdn.jsdelivr.net/gh/kaniwari/[email protected]/build/script_polyfills.js">
215<link rel="preload" as="script" href="https://cdn.jsdelivr.net/gh/kaniwari/[email protected]/build/script.js">
216<link rel="preload" as="script" href="https://cdn.jsdelivr.net/gh/kaniwari/[email protected]/build/script_sidebar.js">
217<link rel="preload" as="script" href="https://cdn.jsdelivr.net/gh/kaniwari/[email protected]/build/script_appearance.js">
218<link rel="preload" as="style" href="https://cdn.jsdelivr.net/gh/kaniwari/[email protected]/build/style_base.css">
219<link rel="preload" as="style" href="https://cdn.jsdelivr.net/gh/kaniwari/[email protected]/build/style_common.css">
220<link rel="preload" as="style" href="https://cdn.jsdelivr.net/gh/kaniwari/[email protected]/build/style_sidebar.css">
221
222
223<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700&amp;
223family=Noto+Sans+SC:wght@400;700&amp;family=Noto+Sans+TC:wght@400;700&amp;display=swap">
224<link rel="preload" as="font" type="font/woff2" href="https://cdn.jsdelivr.net/gh/kaniwari/[email protected]/resources/font_icon.woff2" crossorigin>
225<link rel="preload" as="font" type="font/woff2" href="https://cdn.jsdelivr.net/gh/kaniwari/[email protected]/font/font_sans_400.woff2" crossorigin>
226<link rel="preload" as="font" type="font/woff2" href="https://cdn.jsdelivr.net/gh/kaniwari/[email protected]/font/font_sans_700.woff2" crossorigin>
227<script src="https://cdn.jsdelivr.net/gh/kaniwari/[email protected]/build/script_polyfills.js"></script>
227
228
229<script>let
230$themeColor="transparent",$themeColorOrig=$themeColor.toLowerCase(),$date=new Date();if(document.querySelectorAll("html.dynamic").length>0){const $html=document.getElementsByTagName("html")[0];if($date.getHours()<6||$date.getHours()>18){$html.classList.add("night");}
231else if($date.getHours()==6||$date.getHours()==7||$date.getHours()==17||$date.getHours()==18){$html.classList.add("dawn");}
232else{$html.classList.add("day");};};if($themeColor.toLowerCase()=="transparent"){if(document.querySelectorAll("html.day:not(.sysui)").length>0){$themeColor="#f4f4f4";}
233else if(document.querySelectorAll("html.dawn").length>0){$themeColor="#d9d0c3";}
234else if(document.querySelectorAll("html.night").length>0){$themeColor="#0e0e0e";};if(document.querySelectorAll("html:not(.sysui)").length>0){let theme=document.createElement("meta");theme.name="theme-color";theme.content=$themeColor;document.head.appendChild(theme);};}
235else{let theme=document.createElement("meta");theme.name="theme-color";theme.content=$themeColor;document.head.appendChild(theme);};</script>
235
236
237<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kaniwari/[email protected]/build/style_base.css">
238
239<link rel="stylesheet" href="https://tistory1.daumcdn.net/tistory/3085610/skin/style.css?_version_=1679819021">
240<style>
241
242
243.toc-absolute {
244  position: absolute;
245  margin-top: 365px;
246}
247
248.toc-title {
249  position: absolute;
250  margin-top: 335px;
251}
252 
253.toc-fixed {
254  position: fixed;
255  top: 165px;
256}
257
258.toc-title-fixed {
259  position: fixed;
260  top: -200px;
261}
262 
263.toc, .toc-title {
264  right: calc((100% - 850px) / 2 - 500px);
265  width: 250px;
266  padding: 10px;
267  box-sizing: border-box;
268}
269 
270.toc-list {
271  margin-top: 10px !important;
272  font-size: 0.9em;
273}
274 
275.toc > .toc-list li {
276  margin-bottom: 10px;
277}
278 
279.toc > .toc-list li:last-child {
280  margin-bottom: 0;
281}
282 
283.toc > .toc-list li a {
284  text-decoration: none;
285}
286#article{
287  color: white;
288}
289.page-limit-width{max-width:728px!important}@media(max-width:calc(728px + 800px)){html.no-gpu body#tt-body-page .recommendation{display:none!important}html.gpu body#tt-body-page .recommendation{opacity:0!important}}@media(min-width:1100px){html:not(.fixed-sidebar) .page-limit-width{width:728px;max-width:970px!important}}@media(min-width:1380px){html.fixed-sidebar .page-limit-width{width:728px;max-width:970px!important}}
290
291</style>
292
293                
294                
295                <style type="text/css">.another_category {
296    border: 1px solid #E5E5E5;
297    padding: 10px 10px 5px;
298    margin: 10px 0;
299    clear: both;
300}
301
302.another_category h4 {
303    font-size: 12px !important;
304    margin: 0 !important;
305    border-bottom: 1px solid #E5E5E5 !important;
306    padding: 2px 0 6px !important;
307}
308
309.another_category h4 a {
310    font-weight: bold !important;
311}
312
313.another_category table {
314    table-layout: fixed;
315    border-collapse: collapse;
316    width: 100% !important;
317    margin-top: 10px !important;
318}
319
320* html .another_category table {
321    width: auto !important;
322}
323
324*:first-child + html .another_category table {
325    width: auto !important;
326}
327
328.another_category th, .another_category td {
329    padding: 0 0 4px !important;
330}
331
332.another_category th {
333    text-align: left;
334    font-size: 12px !important;
335    font-weight: normal;
336    word-break: break-all;
337    overflow: hidden;
338    line-height: 1.5;
339}
340
341.another_category td {
342    text-align: right;
343    width: 80px;
344    font-size: 11px;
345}
346
347.another_category th a {
348    font-weight: normal;
349    text-decoration: none;
350    border: none !important;
351}
352
353.another_category th a.current {
354    font-weight: bold;
355    text-decoration: none !important;
356    border-bottom: 1px solid !important;
357}
358
359.another_category th span {
360    font-weight: normal;
361    text-decoration: none;
362    font: 10px Tahoma, Sans-serif;
363    border: none !important;
364}
365
366.another_category_color_gray, .another_category_color_gray h4 {
367    border-color: #E5E5E5 !important;
368}
369
370.another_category_color_gray * {
371    color: #909090 !important;
372}
373
374.another_category_color_gray th a.current {
375    border-color: #909090 !important;
376}
377
378.another_category_color_gray h4, .another_category_color_gray h4 a {
379    color: #737373 !important;
380}
381
382.another_category_color_red, .another_category_color_red h4 {
383    border-color: #F6D4D3 !important;
384}
385
386.another_category_color_red * {
387    color: #E86869 !important;
388}
389
390.another_category_color_red th a.current {
391    border-color: #E86869 !important;
392}
393
394.another_category_color_red h4, .another_category_color_red h4 a {
395    color: #ED0908 !important;
396}
397
398.another_category_color_green, .another_category_color_green h4 {
399    border-color: #CCE7C8 !important;
400}
401
402.another_category_color_green * {
403    color: #64C05B !important;
404}
405
406.another_category_color_green th a.current {
407    border-color: #64C05B !important;
408}
409
410.another_category_color_green h4, .another_category_color_green h4 a {
411    color: #3EA731 !important;
412}
413
414.another_category_color_blue, .another_category_color_blue h4 {
415    border-color: #C8DAF2 !important;
416}
417
418.another_category_color_blue * {
419    color: #477FD6 !important;
420}
421
422.another_category_color_blue th a.current {
423    border-color: #477FD6 !important;
424}
425
426.another_category_color_blue h4, .another_category_color_blue h4 a {
427    color: #1960CA !important;
428}
429
430.another_category_color_violet, .another_category_color_violet h4 {
431    border-color: #E1CEEC !important;
432}
433
434.another_category_color_violet * {
435    color: #9D64C5 !important;
436}
437
438.another_category_color_violet th a.current {
439    border-color: #9D64C5 !important;
440}
441
442.another_category_color_violet h4, .another_category_color_violet h4 a {
443    color: #7E2CB5 !important;
444}
445</style>
446
447                
448                <link rel="stylesheet" type="text/css" href="https://edge.daumcdn.net/tistory/tistory-admin/userblog/userblog-542bd84ce37260cece1e68a465e3c63534629c86/static/style/revenue.css"/>
449<link rel="canonical" href="https://lactea.kr"/>
450
451<!-- BEGIN STRUCTURED_DATA -->
452<script type="application/ld+json">
453    {"@context":"http://schema.org","@type":"WebSite","url":"/","potentialAction":{"@type":"SearchAction","target":"/search/{search_term_string}","query-input":"required name=search_term_string"}}
454</script>
454
455<!-- END STRUCTURED_DATA -->
456<link rel="stylesheet" type="text/css" href="https://edge.daumcdn.net/tistory/tistory-admin/userblog/userblog-542bd84ce37260cece1e68a465e3c63534629c86/static/style/dialog.css"/>
457<link rel="stylesheet" type="text/css" href="//t1.daumcdn.net/tistory_admin/www/style/top/font.css"/>
458<link rel="stylesheet" type="text/css" href="https://edge.daumcdn.net/tistory/tistory-admin/userblog/userblog-542bd84ce37260cece1e68a465e3c63534629c86/static/style/postBtn.css"/>
459<link rel="stylesheet" type="text/css" href="https://edge.daumcdn.net/tistory/tistory-admin/userblog/userblog-542bd84ce37260cece1e68a465e3c63534629c86/static/style/tistory.css"/>
460<script type="text/javascript" src="https://edge.daumcdn.net/tistory/tistory-admin/userblog/userblog-542bd84ce37260cece1e68a465e3c63534629c86/static/script/common.js"></script>
460
461
462                
463                </head>
464                                                <body id="tt-body-index">
465                
466                
467                
468
469<div id="measuring" hidden>
470<div class="measuring"><div></div></div>
471</div>
472<div id="gpu-support" hidden>
473<div class="gpu-support sidebar-support"></div>
474<div class="gpu-support blog-info-support"></div>
475</div>
476<nav class="scrollbar-support" id="global-navigation">
477<div class="notice-go-to-index" hidden>
478<span class="icon">이 영역을 누르면 첫 페이지로 이동</span>
479</div>
480<div class="gnb-inner">
481<a class="go-to-index no-text" href="https://lactea.kr/" role="button" aria-hidden="false">Universe blog 블로그의 첫 페이지로 이동</a>
482<div class="go-to-index-visual" aria-hidden="true">
483<div class="gnb-title">
484<p aria-hidden="true">Universe blog</p>
485
486</div>
487</div>
488<div class="gnb-left">
489<ul class="fc-list">
490<li><button class="fc-icon fc-appearance fc-button open-sidebar" data-func="open-sidebar">사이드바 열기</button></li>
491</ul>
492</div>
493<div class="gnb-center">
494<div class="gnb-title">
495<a class="gnb-blog-link no-text fc-button" href="javascript:" data-func="go-to-top" role="button">페이지 맨 위로 올라가기</a>
496<p aria-hidden="true">Universe blog</p>
497<span aria-hidden="true">i love security</span>
498
499</div>
500</div>
501<div class="gnb-right">
502<button class="no-text fc-button fc-appearance blogger-toggle" data-func="open-blog-info">Universe7202 블로그 정보 보기</button>
503<div class="gnb-blogger-icon" data-style="background-image:url(//img1.daumcdn.net/thumb/R150x0/?scode=mtistory2&fname=https://tistory1.daumcdn.net/tistory/3085610/attach/0f893d6589334a90b770b9f65beb42a9)" aria-hidden="true"></div>
504</div>
505</div>
506</nav>
507<main class="scrollbar-support" id="wrap" aria-hidden="false">
508
509<h1 class="visuallyhidden" aria-hidden="true">Universe blog</h1>
510<div>
511
512
513
514
515
516
517<section class="index-item-slider index-fullscreen-slider cover-item for-gallery">
518<ul class="fc-list">
519
520<li style="display:none" aria-hidden="true">
521<a class="slider-link no-text" href="/entry/%EB%B0%B0%EA%B2%BD-%EC%9D%B4%EB%AF%B8%EC%A7%80" role="button">Universe Blog</a>
522<div class="slider-visual" aria-hidden="true">
523
524<div class="slider-image" data-style="background-image:url(//img1.daumcdn.net/thumb/R48x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FxEUFT%2Fbtrb6uqdl4Z%2FAAAAAAAAAAAAAAAAAAAAAAgYEsUnEoA_RXNLe0Qn1XX624CrCRmqvs89ifU7Nkr4%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DPPnSTBcSOhMhSMeFF5JrB0Q%252FIhw%253D)">
525<div class="small-slider-image" data-style="background-image:url(//img1.daumcdn.net/thumb/R1024x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FxEUFT%2Fbtrb6uqdl4Z%2FAAAAAAAAAAAAAAAAAAAAAAgYEsUnEoA_RXNLe0Qn1XX624CrCRmqvs89ifU7Nkr4%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DPPnSTBcSOhMhSMeFF5JrB0Q%252FIhw%253D)"></div>
526<div class="medium-slider-image" data-style="background-image:url(//img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FxEUFT%2Fbtrb6uqdl4Z%2FAAAAAAAAAAAAAAAAAAAAAAgYEsUnEoA_RXNLe0Qn1XX624CrCRmqvs89ifU7Nkr4%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DPPnSTBcSOhMhSMeFF5JrB0Q%252FIhw%253D)"></div>
527<div class="large-slider-image" data-style="background-image:url(//img1.daumcdn.net/thumb/R1920x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FxEUFT%2Fbtrb6uqdl4Z%2FAAAAAAAAAAAAAAAAAAAAAAgYEsUnEoA_RXNLe0Qn1XX624CrCRmqvs89ifU7Nkr4%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DPPnSTBcSOhMhSMeFF5JrB0Q%252FIhw%253D)"></div>
528<div class="exlarge-slider-image" data-style="background-image:url(//img1.daumcdn.net/thumb/R2560x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FxEUFT%2Fbtrb6uqdl4Z%2FAAAAAAAAAAAAAAAAAAAAAAgYEsUnEoA_RXNLe0Qn1XX624CrCRmqvs89ifU7Nkr4%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DPPnSTBcSOhMhSMeFF5JrB0Q%252FIhw%253D)"></div>
529</div>
530
531<div class="slider-title"><h2>Universe Blog</h2></div>
532</div>
533</li>
534
535</ul>
536<button class="prev-slide fc-icon fc-appearance">이전 슬라이드</button>
537<button class="next-slide fc-icon fc-appearance">다음 슬라이드</button>
538</section>
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561<section class="cover-item for-gallery">
562<div class="page-stroke"></div>
563<h2 class="cover-title">👀 About me</h2>
564<div class="fc-index-width for-cover-item gallery small">
565<ul class="index-width-support fc-list">
566
567<li class="index-item article-item">
568<div class="index-item-wrap">
569<a class="no-text index-item-link" href="https://twilight-princess-750.notion.site/Who-am-I-047259a12251420a95244c0472f64535" role="button">About Me</a>
570<div class="index-item-visual" hidden>
571<div class="index-item-text">
572<h2>About Me</h2>
573
574<div class="index-item-summary"></div>
575</div>
576<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Ftistory2.daumcdn.net%2Ftistory%2F3085610%2FskinCover%2F597634d12d694bebb4346bcb9f8fa11e);background-position:50% 50%;background-size:cover"></div>
577</div>
578</div>
579</li>
580
581<li class="index-item article-item">
582<div class="index-item-wrap">
583<a class="no-text index-item-link" href="https://github.com/Universe1122" role="button">My Github Profile</a>
584<div class="index-item-visual" hidden>
585<div class="index-item-text">
586<h2>My Github Profile</h2>
587
588<div class="index-item-summary"></div>
589</div>
590<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Ftistory4.daumcdn.net%2Ftistory%2F3085610%2FskinCover%2Fcba1f0f8a63a4095a744a228b4c8952d);background-position:50% 50%;background-size:cover"></div>
591</div>
592</div>
593</li>
594
595<li class="index-item article-item">
596<div class="index-item-wrap">
597<a class="no-text index-item-link" href="https://lactea.kr/entry/2022%EB%85%84-%EB%A7%88%EC%A7%80%EB%A7%89-%EB%82%A0%EC%9D%84-%EC%A0%95%EB%A6%AC%ED%95%98%EB%A9%B0" role="button">2022년 마지막 날을 정리하며</a>
598<div class="index-item-visual" hidden>
599<div class="index-item-text">
600<h2>2022년 마지막 날을 정리하며</h2>
601
602<div class="index-item-summary"></div>
603</div>
604<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fgithub.com%2Fkaniwari%2Fspace%2Fblob%2F11.5.3%2Fimg%2Fcover%2F3.jpg%3Fraw%3Dtrue);background-position:50% 50%;background-size:cover"></div>
605</div>
606</div>
607</li>
608
609<li class="index-item article-item">
610<div class="index-item-wrap">
611<a class="no-text index-item-link" href="https://lactea.kr/entry/%EC%88%98%EC%83%81-%EC%A0%9C-3%ED%9A%8C-KOSPO-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%A0%95%EB%B3%B4%EB%B3%B4%EC%95%88-%EA%B2%BD%EC%A7%84%EB%8C%80%ED%9A%8C-%EC%B5%9C%EC%9A%B0%EC%88%98%EC%83%81" role="button">[수상] - 제 3회 KOSPO 웹서비스 정보보안 경진대회 최우수상</a>
612<div class="index-item-visual" hidden>
613<div class="index-item-text">
614<h2>[수상] - 제 3회 KOSPO 웹서비스 정보보안 경진대회 최우수상</h2>
615
616<div class="index-item-summary"></div>
617</div>
618<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fgithub.com%2Fkaniwari%2Fspace%2Fblob%2F11.5.3%2Fimg%2Fcover%2F4.jpg%3Fraw%3Dtrue);background-position:50% 50%;background-size:cover"></div>
619</div>
620</div>
621</li>
622
623<li class="index-item article-item">
624<div class="index-item-wrap">
625<a class="no-text index-item-link" href="https://lactea.kr/entry/2021%EB%85%84%EC%9D%84-%EC%A0%95%EB%A6%AC%ED%95%98%EB%A9%B0" role="button">2021년을 정리하며..</a>
626<div class="index-item-visual" hidden>
627<div class="index-item-text">
628<h2>2021년을 정리하며..</h2>
629
630<div class="index-item-summary"></div>
631</div>
632<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fgithub.com%2Fkaniwari%2Fspace%2Fblob%2F11.5.3%2Fimg%2Fcover%2F5.jpg%3Fraw%3Dtrue);background-position:50% 50%;background-size:cover"></div>
633</div>
634</div>
635</li>
636
637</ul>
638</div>
639</section>
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661<section class="cover-item for-card-type">
662<div class="page-stroke"></div>
663<h2 class="cover-title">✍️ Recent Article</h2>
664<div class="fc-index-width for-cover-item card-type">
665<ul class="index-width-support fc-list">
666
667<li class="index-item article-item">
668<div class="index-item-wrap">
669<a class="no-text index-item-link" href="/entry/%EB%B6%84%EC%84%9D-%EC%9D%BC%EA%B8%B0-JWK%EB%A5%BC-%EC%BA%90%EC%8B%9C%EC%97%90-%EC%A0%80%EC%9E%A5%ED%95%98%EC%97%AC-%EA%B4%80%EB%A6%AC%ED%95%A0-%EA%B2%BD%EC%9A%B0-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%90%A0%EA%B9%8C-with-CVE-2025-59936" role="button">[분석 일기] JWK를 캐시에 저장하여 관리할 경우 어떻게 될까 with CVE-2025-59936</a>
670<div class="index-item-visual" hidden>
671<div class="index-item-text">
672<h2>[분석 일기] JWK를 캐시에 저장하여 관리할 경우 어떻게 될까 with CVE-2025-59936</h2>
673
674<span class="digit">2025.09.30</span>
675
676<div class="index-item-summary">1. 서론얼마전에 npm 모듈 중에서 재미있는 취약점이 공개 되었길래 분석을 진행하였다. `get-jwks` 모듈은 전달 받은 JWT를 verify 하기 위해, iss 필드에 있는 서버로 fetch한 결과(JWK)를 캐시에 저장하는 모듈이다. 이로 인해, 상황에 맞는 동일한 JWK에 대해 다시 요청할 필요 없이 캐시된 정보로 verify 하게 된다.https://github.com/nearform/get-jwks GitHub - nearform/get-jwks: Fetch utils for JWKS keysFetch utils for JWKS keys. Contribute to nearform/get-jwks development by creating an account on GitHub.github.c..</div>
677</div>
678<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbwZxmG%2FbtsQ109X2LU%2FAAAAAAAAAAAAAAAAAAAAAE_El5SnpERZ7CH4XSkRpQvK6CHxK89v6JLwYaXw59Ot%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DMvfDYMNPuA0r3Dg%252BUJkRRhz%252FID0%253D);background-position:50% 50%;background-size:cover"></div>
679</div>
680</div>
681</li>
682
683<li class="index-item article-item">
684<div class="index-item-wrap">
685<a class="no-text index-item-link" href="/entry/%EB%B6%84%EC%84%9D-%EC%9D%BC%EA%B8%B0-docs-%EC%A0%95%EB%8F%85%EC%9C%BC%EB%A1%9C-Grav-CMS%EC%97%90%EC%84%9C-RCE-%EC%B7%A8%EC%95%BD%EC%A0%90-%EC%B0%BE%EC%9D%80-%EC%8D%B0" role="button">[분석 일기] docs 정독으로 Grav CMS에서 RCE 취약점 찾은 썰</a>
686<div class="index-item-visual" hidden>
687<div class="index-item-text">
688<h2>[분석 일기] docs 정독으로 Grav CMS에서 RCE 취약점 찾은 썰</h2>
689
690<span class="digit">2024.01.12</span>
691
692<div class="index-item-summary">1. Grav CMS Grav CMS는 php로 개발된 CMS 입니다. Grav is a Fast, Simple, and Flexible, file-based Web-platform. GitHub - getgrav/grav: Modern, Crazy Fast, Ridiculously Easy and Amazingly Powerful Flat-File CMS powered by PHP, Markdown, Twig Modern, Crazy Fast, Ridiculously Easy and Amazingly Powerful Flat-File CMS powered by PHP, Markdown, Twig, and Symfony - GitHub - getgrav/grav: Modern, Crazy Fast, Ri..</div>
693</div>
694<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbKQn6R%2FbtsDniBJczW%2FAAAAAAAAAAAAAAAAAAAAAElEXRurndmgoPOFlVdrnQBGJEwkBl55QJXe8yEaiP8i%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3Db1i%252B1NDhFGf%252FzqXAP1RsYYnzwUk%253D);background-position:50% 50%;background-size:cover"></div>
695</div>
696</div>
697</li>
698
699<li class="index-item article-item">
700<div class="index-item-wrap">
701<a class="no-text index-item-link" href="/entry/synology-nas%EC%97%90%EC%84%9C-gluetun-docker%EB%A5%BC-%EC%9D%B4%EC%9A%A9
701%ED%95%98%EC%97%AC-twitch-1080p-%EC%9E%90%EB%8F%99-%EB%85%B9%ED%99%94-%EC%84%9C%EB%B2%84-%EB%A7%8C%EB%93%A4%EA%B8%B0" role="button">synology nas에서 gluetun docker를 이용하여 twitch 1080p 자동 녹화 서버 만들기</a>
702<div class="index-item-visual" hidden>
703<div class="index-item-text">
704<h2>synology nas에서 gluetun docker를 이용하여 twitch 1080p 자동 녹화 서버 만들기</h2>
705
706<span class="digit">2023.11.10</span>
707
708<div class="index-item-summary">1. 개요 몇년 전 '그' 사건으로 인해 twitch 1080p 가 막히고 다시보기 또한 볼 수 없게 되었다. 필자는 `streamlink`를 이용하여 녹화를 잘 하고 있었지만, 어느순간 1080p가 막히게 되면서 방법을 찾다가 gluetun docker를 접하게 되었다. 2. 환경 세팅 다음과 같은 사전 세팅이 필요하다. synology nas에 ssh 접속 설정 docker 및 docker-compose 설치 proton vpn 회원가입 회원 가입 후 아래 링크에서 3번까지 진행하기 https://young-cow.tistory.com/95 위에서 다운로드 받은 openvpn config 파일, openvpn id 및 pw 확인 twitch API key 발급 (아래 4번에서 설명) 3. gluetu..</div>
709</div>
710<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FDUFfj%2Fbtsz5jc1A19%2FAAAAAAAAAAAAAAAAAAAAALcdoRxhrixIbsOi7Vc6_uHCZctV5Y5pavIa-PkornoS%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DLGyYB%252FkPZ4U3gvIqKQi9xRrmVSc%253D);background-position:50% 50%;background-size:cover"></div>
711</div>
712</div>
713</li>
714
715<li class="index-item article-item">
716<div class="index-item-wrap">
717<a class="no-text index-item-link" href="/entry/WACon2023-CTF-Write-up" role="button">WACon2023 CTF Write up</a>
718<div class="index-item-visual" hidden>
719<div class="index-item-text">
720<h2>WACon2023 CTF Write up</h2>
721
722<span class="digit">2023.09.03</span>
723
724<div class="index-item-summary">주변에 아는 사람들이랑 총 4명이서 WACon2023 CTF에 참가했습니다. 결과는 15등으로 마무리 했네요. 1. [web] mosaic 문제 코드는 다음과 같습니다. 이 문제의 컨셉은 이미지 업로드 관련 기능을 제공합니다. from flask import Flask, render_template, request, redirect, url_for, session, g, send_from_directory import mimetypes import requests import imageio import os import sqlite3 import hashlib import re from shutil import copyfile, rmtree import numpy as np app = Flask(__na..</div>
725</div>
726<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FLJgnA%2FbtssVTyzNWw%2FAAAAAAAAAAAAAAAAAAAAANOZ9kZczrgc6HIpqho60r4wUUctxoZKXUOD6RAImv86%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3D8k0GJkc67x837BKb8ZeNGPRLups%253D);background-position:50% 50%;background-size:cover"></div>
727</div>
728</div>
729</li>
730
731<li class="index-item article-item">
732<div class="index-item-wrap">
733<a class="no-text index-item-link" href="/entry/ctf-%EB%AC%B8%EC%A0%9C%EB%A5%BC-%ED%86%B5%ED%95%B4-CSP-bypass-%EC%A0%95%EB%A6%AC%ED%95%98%EA%B8%B0" role="button">ctf 문제를 통해 CSP bypass 정리하기</a>
734<div class="index-item-visual" hidden>
735<div class="index-item-text">
736<h2>ctf 문제를 통해 CSP bypass 정리하기</h2>
737
738<span class="digit">2023.03.13</span>
739
740<div class="index-item-summary">1. 업로드 기능을 활용한 bypass 서버에 다음과 같이 CSP가 적용되어 있다고 가정해 봅시다. `script-src` 지시자에는 `self` 와 랜덤한 `nonce` 값이 설정되어 있습니다. 즉, `` 와 같은 payload는 `nonce` 값이 없기 때문에 실행이 되지 않습니다.</div>
741</div>
742<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FGQDQf%2Fbtr3HTclKoB%2FAAAAAAAAAAAAAAAAAAAAAH9FvdqFf0x6ZO7WDM0SglYlWGpsEnfhsXCRmD7EOr_g%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DQkC9skS0yLlwXy8XpkluvDRK6yQ%253D);background-position:50% 50%;background-size:cover"></div>
743</div>
744</div>
745</li>
746
747<li class="index-item article-item">
748<div class="index-item-wrap">
749<a class="no-text index-item-link" href="/entry/hacktm-ctf-2023-writeup" role="button">hacktm ctf 2023 writeup</a>
750<div class="index-item-visual" hidden>
751<div class="index-item-text">
752<h2>hacktm ctf 2023 writeup</h2>
753
754<span class="digit">2023.02.21</span>
755
756<div class="index-item-summary">1. [web] Blog cookie 값을 `unserialize()` 하고 있다. 이를 활용하여 취약한 클레스를 찾다 보니, `Profile` 클래스가 눈에 들어왔다. `file_get_contents()` 함수가 `$this->
756picture_path` 맴버 변수 값을 통해 파일을 읽으려고 한다. 즉, `Profile` 클래스의 `picture_path` 맴버 변수를 이용하여 flag 값을 읽으면 문제를 해결할 수 있다. O:4:"User":2:{s:7:"profile";O:7:"Profile":2:{s:8:"username";s:8:"universe";s:12:"picture_path";s:46:"/02d92f5f-a58c-42b1-98c7-746bbda7abe9/flag.txt";}s:5:"post..</div>
757</div>
758<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FpJqp4%2Fbtr0dl4LCDe%2FAAAAAAAAAAAAAAAAAAAAAJkeaFPhs3uIO33NE-TOSyQf2G2FXEKv4vsNubXTGz2J%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3D62IfqgekU3Cp2PPWKXFlJNVeAGU%253D);background-position:50% 50%;background-size:cover"></div>
759</div>
760</div>
761</li>
762
763<li class="index-item article-item">
764<div class="index-item-wrap">
765<a class="no-text index-item-link" href="/entry/lactf-2023-writeup" role="button">lactf 2023 writeup</a>
766<div class="index-item-visual" hidden>
767<div class="index-item-text">
768<h2>lactf 2023 writeup</h2>
769
770<span class="digit">2023.02.14</span>
771
772<div class="index-item-summary">1. [pwn] gatekeep 이 문제는 단순 bof를 통해 다른 변수의 값을 변조시켜 flag를 획득하는 문제이다. `lactf{sCr3am1nG_cRy1Ng_tHr0w1ng_uP}` 2. [pwn] bot 이 문제의 c코드는 다음과 같다. #include #include #include #include int main(void) { setbuf(stdout, NULL); char input[64]; volatile int give_flag = 0; puts("hi, how can i help?"); gets(input); if (strcmp(input, "give me the flag") == 0) { puts("lol no"); } else if (strcmp(input, "please give ..</div>
773</div>
774<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fcr2KbD%2FbtrZchIIL4R%2FAAAAAAAAAAAAAAAAAAAAADyEODCB_JxbzDlPZG28JP9gXqeoRR6gKKe8ZRYMvr68%2Fimg.gif%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3Dwfvn%252Bl3RL7nly8BddUdX1tgPATQ%253D);background-position:50% 50%;background-size:cover"></div>
775</div>
776</div>
777</li>
778
779<li class="index-item article-item">
780<div class="index-item-wrap">
781<a class="no-text index-item-link" href="/entry/Dicectf-2023-writeup" role="button">Dicectf 2023 writeup</a>
782<div class="index-item-visual" hidden>
783<div class="index-item-text">
784<h2>Dicectf 2023 writeup</h2>
785
786<span class="digit">2023.02.08</span>
787
788<div class="index-item-summary">대회 당일날 웹 한문제 밖에 못 풀었지만, 이후 writeup을 보고 정리하고자 한다. 1. recursive-csp 해당 문제는 GET 파라미터로 전달한 값을 그대로 출력하여 XSS 가 가능하다. 하지만, 이 값을 암호화 하여 csp 정책에 들어가게 된다.</div>
789</div>
790<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fcm42CU%2FbtrYzqzMGuB%2FAAAAAAAAAAAAAAAAAAAAAEHLr7BuJAKzoFMDwucM3xy5YrkjRPTYlD9UzM9_Bzyy%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DOgcSHu2S7ijDWO8ca8gxJuz2Ie0%253D);background-position:50% 50%;background-size:cover"></div>
791</div>
792</div>
793</li>
794
795<li class="index-item article-item">
796<div class="index-item-wrap">
797<a class="no-text index-item-link" href="/entry/SSRF-bypass-using-DNS-Rebinding" role="button">SSRF bypass using DNS Rebinding</a>
798<div class="index-item-visual" hidden>
799<div class="index-item-text">
800<h2>SSRF bypass using DNS Rebinding</h2>
801
802<span class="digit">2023.01.04</span>
803
804<div class="index-item-summary">1. 들어가기에 앞서 일반적으로 SSRF 공격을 막기 위해 개발자들은 다음과 같은 로직을 구현합니다. 차단할 IP 범위 도메인 이름 확인 (이상한 문자열로 우회하는 공격..) DNS를 이용한 IP 확인 위 과정을 통과하게 되면 사용자가 입력한 URL로 접속하게 됩니다. 이러한 상황을 간단한 코드로 나타내면 다음과 같습니다. const dns = require("dns/promises"); const axios = require("axios"); async function request(url){ const check_domain_name = is_domain_name(url); const check_dns = await dns.resolve4(url); const check_ip = is_blacklis..</div>
805</div>
806<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2F2k24Z%2FbtrVptTq45c%2FAAAAAAAAAAAAAAAAAAAAANFLmakwGtX15ayjUtzPxYKyH7z1V6qgkI5rZtMe0FAi%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3D%252B6nPX5MPCb%252BAJIKw9bI9MZaGVe8%253D);background-position:50% 50%;background-size:cover"></div>
807</div>
808</div>
809</li>
810
811<li class="index-item article-item">
812<div class="index-item-wrap">
813<a class="no-text index-item-link" href="/entry/2022%EB%85%84-%EB%A7%88%EC%A7%80%EB%A7%89-%EB%82%A0%EC%9D%84-%EC%A0%95%EB%A6%AC%ED%95%98%EB%A9%B0" role="button">2022년 마지막 날을 정리하며</a>
814<div class="index-item-visual" hidden>
815<div class="index-item-text">
816<h2>2022년 마지막 날을 정리하며</h2>
817
818<span class="digit">2022.12.31</span>
819
820<div class="index-item-summary">2022년도는 크고 작은 사건들이 많은 해였던거 같습니다. 어떤 일들이 있었고, 다음 해에는 어떤 목표를 세울지 기록하고자 합니다. 버그 바운티 작년 목표였던 CVE 발급을 위해, 올해 wordpress plugin 취약점 발굴을 시작했습니다. 코드 분석한 ê²°ê³¼ 다수의 취약점을 찾아 10개(?) 정도의 CVE를 발급 받았습니다. (아직 패치 되지 않은 플러그인 때문에,,) CVE-2022-29452 CVE-2022-34154 CVE-2022-34648 CVE-2022-34656 CVE-2022-36285 CVE-2022-36343 CVE-2022-27858 아래는 patchstack에서 wordpress plugin 1월달 취약점 제보 ìˆ
820œìœ„ 1위 한 ê²°ê³¼ 입니다. 네이버 버그바운티에 참가하여 최종 4등을..</div>
821</div>
822<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fcdpdoe%2FbtrU1oSXqLa%2FAAAAAAAAAAAAAAAAAAAAAAhPvRBsahrXqCHNNq9DgzQGqvVVOb6uKeLLihkg8-80%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3D8efQ9dcTlIwvGm0OQzV2FYRbqs8%253D);background-position:50% 50%;background-size:cover"></div>
823</div>
824</div>
825</li>
826
827<li class="index-item article-item">
828<div class="index-item-wrap">
829<a class="no-text index-item-link" href="/entry/nodejs-unicode" role="button">nodejs unicode</a>
830<div class="index-item-visual" hidden>
831<div class="index-item-text">
832<h2>nodejs unicode</h2>
833
834<span class="digit">2022.10.06</span>
835
836<div class="index-item-summary">1. Intro 기본적인 ASCII 범위를 벗어나 전세계 언어를 표현하기 위해 unicode를 많이 사용합니다. 이로 인해 ASCII로 표현이 불가능 했던 문자를 unicode로 표현이 가능해졌습니다. 이로 인해 예상치 못한 버그가 발생하곤 합니다. 이에 대해 설명하고자 합니다. 2. Compare unicode 사용자는 unicode를 통해 다양한 문자를 입력할 수 있습니다. 서버는 사용자가 입력한 값을 처리하는 과정을 거치겠죠. 예를들어, 사용자가 unicode K 를 입력했다고 가정합시다. 이 값과 ASCII 에서 소문자 k 와 비교하면 당연히 `false`가 출력 되겠죠. "K" == "k" false 하지만, unicode K를 toLowerCase() 함수를 이용하여 소문자로 바꾼 뒤, ASC..</div>
837</div>
838<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FrYVH1%2FbtrNTgt6rzJ%2FAAAAAAAAAAAAAAAAAAAAALbaXIPqHwNo4DPOfVCliv0vSw4CplLnlzQioP8g3ntN%2Fimg.gif%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DKOiHoQzAl4%252Fy73H4VGlboCVS0W4%253D);background-position:50% 50%;background-size:cover"></div>
839</div>
840</div>
841</li>
842
843<li class="index-item article-item">
844<div class="index-item-wrap">
845<a class="no-text index-item-link" href="/entry/android-macos-m2-android-virtual-device-emulator-%EA%B2%80%EC%9D%80-%ED%99%94%EB%A9%B4-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95" role="button">[android] - macos m2 android virtual device (emulator) 검은 화면 해결 방법</a>
846<div class="index-item-visual" hidden>
847<div class="index-item-text">
848<h2>[android] - macos m2 android virtual device (emulator) 검은 화면 해결 방법</h2>
849
850<span class="digit">2022.09.20</span>
851
852<div class="index-item-summary">1. Intro 저는 macos m2 를 사용하고 있습니다. 안드로이드 앱을 분석할 일이 있어 android studio를 설치하여 AVD를 설치했습니다. 하지만, AVD에서 검은 화면만 출력되어 문제를 겪었습니다. 2. How to solve 제 환경에서는 다음과 같은 AVD를 설치하여 해결했습니다. 1. Pixel 4를 선택합니다. 2. 아래 사진에서 파란색 박스를 선택합니다. Release Name : S API Level: 31 Target: Android 12.0 3. 설치를 완료하고 실행하면, 아래 사진처럼 성공적으로 AVD가 실행된 것을 볼 수 있습니다. 4. 실행이 안되거나, 예전에 실행이 됐었지만 다시 실행했을 때 검은 화면이 출력된다면, Cold Boot Now를 선택하면 해결됩니다.</div>
853</div>
854<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbhaEkv%2FbtrMDAANyGr%2FAAAAAAAAAAAAAAAAAAAAAAnHfxIFo7un9E702RYgpUayi3YDYgf921Kk2GIwZd8Q%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DEYp68V%252FmZWNZPKLxvRD5MDvqUtA%253D);background-position:50% 50%;background-size:cover"></div>
855</div>
856</div>
857</li>
858
859<li class="index-item article-item">
860<div class="index-item-wrap">
861<a class="no-text index-item-link" href="/entry/%EC%88%98%EC%83%81-%EC%A0%9C-3%ED%9A%8C-KOSPO-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%A0%95%EB%B3%B4%EB%B3%B4%EC%95%88-%EA%B2%BD%EC%A7%84%EB%8C%80%ED%9A%8C-%EC%B5%9C%EC%9A%B0%EC%88%98%EC%83%81" role="button">[수상] - 제 3회 KOSPO 웹서비스 정보보안 경진대회 최우수상</a>
862<div class="index-item-visual" hidden>
863<div class="index-item-text">
864<h2>[수상] - 제 3회 KOSPO 웹서비스 정보보안 경진대회 최우수상</h2>
865
866<span class="digit">2022.09.16</span>
867
868<div class="index-item-summary">그토록 웹 모의해킹 대회에서 상을 타보고 싶어, 제 1회부터 매년 참가했습니다. 제 1회에는 순위권에 못들었고, 제 2회에는 3점 차이로 장려상을 놓쳤습니다. 하지만 올해 제3회는 진짜 마지막이라고 생각하면서 팀원들을 모집했습니다. 개인적인 일로 참가를 못할 뻔 했지만, 친구의 도움으로 대회에 임할 수 있었습니다. 그결과,, 최우수상(2위) 이라는 좋은 ê²°ê
868³¼ë¥¼ 얻었습니다. 정말 그토록 바랬던 수상을 하게 되었습니다. 끝까지 최선을 다한 팀원분들이 있었기에, 그리고 올해 마지막의 대학생 팀으로 참가하여 좋은 상을 타게 되어 정말 좋았습니다.</div>
869</div>
870<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FcFEfLD%2FbtrMjcAYen5%2FAAAAAAAAAAAAAAAAAAAAAA-Ijijc42XTjJkehj3wgxf58DiFgHOsled0CGVafGkq%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3D2BldaPEqnsFalFv%252Fh%252FkTEMKDyhU%253D);background-position:50% 50%;background-size:cover"></div>
871</div>
872</div>
873</li>
874
875<li class="index-item article-item">
876<div class="index-item-wrap">
877<a class="no-text index-item-link" href="/entry/Spring-boot-HandlerMethodArgumentResolver" role="button">Spring boot HandlerMethodArgumentResolver</a>
878<div class="index-item-visual" hidden>
879<div class="index-item-text">
880<h2>Spring boot HandlerMethodArgumentResolver</h2>
881
882<span class="digit">2022.09.07</span>
883
884<div class="index-item-summary">https://starkying.tistory.com/entry/Spring-MVC-%E2%80%94-HandlerMethodArgumentResolver-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0</div>
885</div>
886<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FnrVh8%2FbtrLD8TfRfi%2FAAAAAAAAAAAAAAAAAAAAAAWOUIsRXAfypgcJ8LeUXM3YpVA6GWmLMQLOe-6F6nAK%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DzKIhTABJ060Gtfv2f6uECzf0uG4%253D);background-position:50% 50%;background-size:cover"></div>
887</div>
888</div>
889</li>
890
891<li class="index-item article-item">
892<div class="index-item-wrap">
893<a class="no-text index-item-link" href="/entry/%EB%B6%84%EC%84%9D%EC%9D%BC%EA%B8%B0-php-switch-case" role="button">[분석일기] - php switch case</a>
894<div class="index-item-visual" hidden>
895<div class="index-item-text">
896<h2>[분석일기] - php switch case</h2>
897
898<span class="digit">2022.09.06</span>
899
900<div class="index-item-summary">1. Intro 얼마전 cake CTF 2022 대회가 있었는데, 일 때문에 주말에는 쉬고 싶어서 참가는 안했네요,,, 암튼 이후 writeup을 봤는데 신기해서 기록하고자 합니다. 2. switch case if else 구문이 지저분한 사람들이 switch case 구문을 좋아하더라구요. 아래처럼 switch case 구문이 있다고 가정해 봅시다. POST방식으로 `user` 정보를 받고 이를 json으로 파싱하고 있습니다. 이후 if 문으로 입력 값을 검증하고 있습니다. 최종적으로는 `user->name` 변수의 값이 admin 이어야 하지만, if문에서 admin 문자열을 필터링 하고 있습니다. 어떻게 하면 이를 bypass 할 수 있을까요? 정답은 switch case 구문에 있습니다. 공식 d..</div>
901</div>
902<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FqMbtq%2FbtrLqV7OTCk%2FAAAAAAAAAAAAAAAAAAAAAH4zAWbSpmF3WqkhFLuRDeNgYPY--sGc1FCZ7DC0yim5%2Fimg.webp%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DFQS21I%252BK%252Fuwp2F3CbBNIT1CaY%252Bo%253D);background-position:50% 50%;background-size:cover"></div>
903</div>
904</div>
905</li>
906
907<li class="index-item article-item">
908<div class="index-item-wrap">
909<a class="no-text index-item-link" href="/entry/DiceCTF-2022-writeup" role="button">DiceCTF 2022 writeup</a>
910<div class="index-item-visual" hidden>
911<div class="index-item-text">
912<h2>DiceCTF 2022 writeup</h2>
913
914<span class="digit">2022.07.25</span>
915
916<div class="index-item-summary">0. Intro TeamH4C에 가입하여 처음으로 참가한 CTF 대회 입니다. 저는 웹만 풀었는데,, 다른 분들이 웹 외의 분야도 많이 풀어서 19등으로 마무리 되었네요. 웹 문제는 쉬운 문제를 제외하고, 풀이를 작성하려고 합니다. 1. web / point 이 문제는 golang 으로 작성된 web 문제 입니다. go 언어에 대해 지식이 없지만, 이번 기회를 통해 풀어보려고 했습니다. POST 방식으로 전송하면, body에 특정 문자열이 있는지를 검증하고 있습니다. 아래 코드에서는 2번째 if 문에서 `what_point` 와 `\` 를 필터링 하고 있네요. 이후, `json.Unmarshal()` 함수를 통해 body 값을 json parsing 하고 있습니다. json paring 결과는 `what..</div>
917</div>
918<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FrKf
918Xg%2FbtrIdYdPbFF%2FAAAAAAAAAAAAAAAAAAAAAHTUdpY2AZVwlShh3haeTDOYE3F_0MOAV6M805mkNKO5%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DAKwUR%252FDZo%252FF%252BcEulRYy%252B55lpkuc%253D);background-position:50% 50%;background-size:cover"></div>
919</div>
920</div>
921</li>
922
923<li class="index-item article-item">
924<div class="index-item-wrap">
925<a class="no-text index-item-link" href="/entry/%EB%B6%84%EC%84%9D-%EC%9D%BC%EA%B8%B0-EJS-Server-Side-Template-Injection-to-RCE-CVE-2022-29078" role="button">[분석 일기] - EJS, Server Side Template Injection to RCE (CVE-2022-29078)</a>
926<div class="index-item-visual" hidden>
927<div class="index-item-text">
928<h2>[분석 일기] - EJS, Server Side Template Injection to RCE (CVE-2022-29078)</h2>
929
930<span class="digit">2022.07.21</span>
931
932<div class="index-item-summary">🚪 Intro 2022년 4월달에 nodejs 의 모듈인 EJS에서 RCE 취약점이 발견되었습니다. 맨 아래 Reference 에 있는 링크를 참고하여 어떻게 EJS에서 RCE가 가능한지를 분석해 봤습니다. 취약한 EJS 버전은 `3.1.6` 이하 버전입니다. 해당 취약점은 `3.1.7`에서 패치 되었습니다. 💡Analysis 환경 세팅을 위해 아래와 같은 명령어로 취약한 EJS 버전을 설치해 줍니다. npm install [email protected] 이후 간단한 코드를 작성하여 서버를 시작해 줍니다. // index.js const express = require("express"); const app = express(); app.set("view engine", "ejs") app.get("/", (req, ..</div>
933</div>
934<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fbv5CvU%2FbtrHPcKP14i%2FAAAAAAAAAAAAAAAAAAAAAOHuT_C8luI7nNwjGoJbqhhzspv8N00B28_iYNpFui0E%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DM5rSXMRjT4f5ROPZ4PVnkA%252BSeU4%253D);background-position:50% 50%;background-size:cover"></div>
935</div>
936</div>
937</li>
938
939<li class="index-item article-item">
940<div class="index-item-wrap">
941<a class="no-text index-item-link" href="/entry/%EB%B6%84%EC%84%9D-%EC%9D%BC%EA%B8%B0-Microsoft-Teams-Cross-Site-Scripting-XSS-Bypass-CSP-CVE-2021%E2%80%9324114" role="button">[분석 일기] - Microsoft Teams - Cross Site Scripting (XSS) Bypass CSP (CVE-2021–24114)</a>
942<div class="index-item-visual" hidden>
943<div class="index-item-text">
944<h2>[분석 일기] - Microsoft Teams - Cross Site Scripting (XSS) Bypass CSP (CVE-2021–24114)</h2>
945
946<span class="digit">2022.07.19</span>
947
948<div class="index-item-summary">해당 내용은 아래 사이트를 통해 어떻게 취약점을 찾았는지를 분석하는 글 입니다. Microsoft Teams — Cross Site Scripting (XSS) Bypass CSP During my early stages of employment at Gais Cyber Security in 2021, my manager had reached out to me over the phone and said with… medium.com Microsoft Teams 에서 스티커를 보내는 기능이 있습니다. (필자는 해당 기능을 찾아봤는데, 저런 기능이 안보이더라구요,,) 스티커 기능을 통해 메시지를 전송하면, 아래 사진처럼 PO
948ST 방식으로 body에 데이터를 넣어 전송합니다. 이때 content 라는 key의..</div>
949</div>
950<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbPDzo0%2FbtrHDcSKjxS%2FAAAAAAAAAAAAAAAAAAAAAGNBB8ca0qvBMbmRK5FNRqyAAvH1eY5f52KKIxxb6Z_T%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DHV4IoGFxwPBfgA%252FiC46xJqyMObY%253D);background-position:50% 50%;background-size:cover"></div>
951</div>
952</div>
953</li>
954
955<li class="index-item article-item">
956<div class="index-item-wrap">
957<a class="no-text index-item-link" href="/entry/Nodejs-querystring-%ED%95%A8%EC%88%98-%EB%B6%84%EC%84%9D" role="button">Node.js querystring 함수 분석과 bug 설명</a>
958<div class="index-item-visual" hidden>
959<div class="index-item-text">
960<h2>Node.js querystring 함수 분석과 bug 설명</h2>
961
962<span class="digit">2022.07.09</span>
963
964<div class="index-item-summary">🚪 Intro 작년 Line 2021 CTF 웹 문제를 풀다가 기록하고 싶어 작성하려고 합니다. 바로 Node.js 에서 built-in 모듈인 `querystring` 입니다. 현재는 deprecated 된 모듈입니다. 💡 About querystring module Node.js 공식 문서에 설명된 `querystring`에 대한 설명은 다음과 같습니다. 기본으로 URL의 query string을 파싱하는데 사용됩니다. 사용방법은 공식문서에 다음과 같이 설명하고 있습니다. `parse()` 함수의 첫번째 인자에 URL의 query string 값을 넘겨줘야 하며, 나머지 인자들은 기본 값으로 설정 됩니다. 예를들어, 아래 사진처럼 `parse()` 함수의 첫번째 인자에 foo=1&abc=2 라는 값을..</div>
965</div>
966<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FASj9Y%2FbtrGRjkoEFU%2FAAAAAAAAAAAAAAAAAAAAAFy-12DM3X2XJki0OiT15_B6TRcLNRv-UU7PHPJ-T87r%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DnGLruTL1z5rz%252F1tZAi0Wb753Di8%253D);background-position:50% 50%;background-size:cover"></div>
967</div>
968</div>
969</li>
970
971<li class="index-item article-item">
972<div class="index-item-wrap">
973<a class="no-text index-item-link" href="/entry/WACon-2022-yetanotherbabyweb" role="button">[WACon 2022] yet_another_baby_web</a>
974<div class="index-item-visual" hidden>
975<div class="index-item-text">
976<h2>[WACon 2022] yet_another_baby_web</h2>
977
978<span class="digit">2022.06.28</span>
979
980<div class="index-item-summary">🚪 Intro 웹 2번째 문제 입니다. 이 문제 역시 poc 코드와 힌트를 보고 정보를 찾은 뒤 풀게 되었는데요. 이 문제를 풀기 위해서는 `session upload progress` 에 대해 알고 있어야 합니다. 💡 Analysis - 코드 분석 POST 방식으로 url 데이터를 넘기면 curl 명령어를 실행합니다. 이때 url 값은 여러번의 필터링을 거치게 되죠. curl 실행 후 출력 값에는 본인의 UUID 값이 포함되어 있어야 출력 값을 볼 수 있습니다.</div>
981</div>
982<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbBm9lD%2FbtrF0tHp97P%2FAAAAAAAAAAAAAAAAAAAAALXcJH2q7QFlNGfvjZ0mkHKqDrR2hUxaFIvxi-62jWa0%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DIVlK0zwUwfckLa3a8j9zcmLPNL0%253D);background-position:50% 50%;background-size:cover"></div>
983</div>
984</div>
985</li>
986
987<li class="index-item article-item">
988<div class="index-item-wrap">
989<a class="no-text index-item-link" href="/entry/WACon-2022-ppower-write-up" role="button">[WACon 2022] ppower write up</a>
990<div class="index-item-visual" hidden>
991<div class="index-item-text">
992<h2>[WACon 2022] ppower write up</h2>
993
994<span class="digit">2022.06.28</span>
995
996<div class="index-item-summary">🚪 Intro 웹 3번째 문제 ppower 입니다. 이 문제는 `prototype pollution` 을 통한 RCE를 하는 문제입니다. 💡 Analysis - 코드 분석 /answer 페이지로 GET 방식의 데이터를 전달할 수 있습니다. 이는 `req.query` 에 저장되여 `merge()` 함수를 통해 `r` 변수에 저장되는데, `merge()` 함수는 어떠한 검증없이 merge 하고 있습니다. 전형적인 prototype pollution 공격에 취약한 코드 입니다. 또한, 53번째 줄에서 `config.flagForEveryone` 값이 무조건 false가 아니어야 합니다. 그래야 `sendFlag()` 함수가 실행되죠. `sendFlag()` 함수를 보면, 25번째 줄에서 `childProces..</div>
997</div>
998<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2F5Rdnd%2FbtrFUimJkVm%2FAAAAAAAAAAAAAAAAAAAAANRbFjunnbGhhW8qQ8LCgSxB8_BTOSwAxna9sbEOG768%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DHX4aGdgjwuClJ1GaS0Dq%252FeSWKf8%253D);background-position:50% 50%;background-size:cover"></div>
999</div>
1000</div>
1001</li>
1002
1003<li class="index-item article-item">
1004<div class="index-item-wrap">
1005<a class="no-text index-item-link" href="/entry/WACon-2022-Kunc%C9%9Blan-write-up" role="button">[WACon 2022] Kuncɛlan write up</a>
1006<div class="index-item-visual" hidden>
1007<div class="index-item-text">
1008<h2>[WACon 2022] Kuncɛlan write up</h2>
1009
1010<span class="digit">2022.06.27</span>
1011
1012<div class="index-item-summary">🚪 Intro 20명이나 푼 웹 첫번째 문제 입니다. 물론 풀다가 포기하고, 대회 끝난 이후 힌트와 친구의 도움으로 해결했습니다. 해당 문제를 풀기 위한 Keyword는 다음과 같습니다. `LFI` `hash length extension attack` `SSRF` `SQLI` 💡 Analysis - 화면 흐름 문제 사이트에 접속하면 로그인 페이지로 이동 됩니다. 로그인 후 "fun" 이라는 페이지로 이동하면 아래 사진처럼 SSRF 느낌이 나는 페이지가 출력됩니다. input 태그에 값을 입력하면, 해당 기능은 로컬에서만 동작하는 것을 알 수 있습니다. 코드가 없는 상태에서 우회하기에는 힘들기 때문에, 다른 방법을 찾아야 합니다. 💡 Exploit - LF
1012I 위 페이지에는 LFI 취약점이 존재합니다. f..</div>
1013</div>
1014<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FFG1tS%2FbtrFShHbPtS%2FAAAAAAAAAAAAAAAAAAAAAFFLkIqaOtt_m5imC4tynoqwjr_pL-W7nWLLRMg3MJht%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DUyqkQNSSbnT5Ki4Ss8Wyyku2%252BmM%253D);background-position:50% 50%;background-size:cover"></div>
1015</div>
1016</div>
1017</li>
1018
1019<li class="index-item article-item">
1020<div class="index-item-wrap">
1021<a class="no-text index-item-link" href="/entry/%EC%B2%98%EC%9D%8C%EC%9C%BC%EB%A1%9C-CVE-%EB%B0%9C%EA%B8%89-%EB%B0%9B%EC%9D%80ssul-CVE-2022-29452" role="button">처음으로 CVE 발급 받은.ssul [CVE-2022-29452]</a>
1022<div class="index-item-visual" hidden>
1023<div class="index-item-text">
1024<h2>처음으로 CVE 발급 받은.ssul [CVE-2022-29452]</h2>
1025
1026<span class="digit">2022.05.28</span>
1027
1028<div class="index-item-summary">Intro 작년 까지는 국내 버그 바운티 프로그램에 참가하여 취약점을 제보하고 포상금을 받았습니다. 올해의 목표는 CVE 를 발급 받는 것이었는데요. 어떻게 찾게 되었는지 간단하게 작성하고자 합니다. CVE를 발급해주는 기관을 찾다보니 wordpress 와 wordpress plugin에서 취약점을 찾게 되면, 정해진 기관에 제보하여 CVE 발급을 해줄 수 있다는 정보를 얻었습니다. 저는 Patchstack 기업에 wordpress plugin 취약점을 찾아 제보하였는데요. 제보를 하다보니 1월달에는 여러개의 취약점을 찾아 제보하게 되었습니다. 운이 좋게도, Patchstack은 달마다 순위를 매기게 되는데 1등을 차지 했습니다. 포상금 기대를 하지 않고 CVE 목적으로 제보했는데, 1등이라 포상금도 주..</div>
1029</div>
1030<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FT9VUh%2FbtrDkmkOmr1%2FAAAAAAAAAAAAAAAAAAAAAB6eHYlFVzXsPjjMMa5ITnOHDg1W8tBqR1XWRXjj36Y8%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DxMpuCxFNrQZv8NKhpWrmz%252BrlnkQ%253D);background-position:50% 50%;background-size:cover"></div>
1031</div>
1032</div>
1033</li>
1034
1035<li class="index-item article-item">
1036<div class="index-item-wrap">
1037<a class="no-text index-item-link" href="/entry/%EB%B6%84%EC%84%9D-%EC%9D%BC%EA%B8%B0-file-upload-%EC%B7%A8%EC%95%BD%EC%A0%90" role="button">분석 일기 - file upload 취약점</a>
1038<div class="index-item-visual" hidden>
1039<div class="index-item-text">
1040<h2>분석 일기 - file upload 취약점</h2>
1041
1042<span class="digit">2022.05.12</span>
1043
1044<div class="index-item-summary">🚪 Intro 취약점 및 CVE 획득을 위해 분석하고 있는 프로젝트가 있습니다. file upload를 통한 webshell 획득 과정을 정리하고자 합니다. 💡 Analysis 분석하려는 웹 사이트에는 업로드 기능이 존재 합니다. 다만 ico, webp, svg 확장자만 업로드 할 수 있습니다. 그런데 아래 코드를 보면서 의문점이 생기더라구요. 보통 파일 업로드 관련 기능을 만들 때, 확장자 검증은 .(dot) 을 기준으로 문자열을 나누어 맨 마지막 값을 확장자로 판단 합니다. 이렇게 추출된 확장자로 업로드 할 파일을 필터링 하게 되죠. 하지만, 위 코드는 `strpos()` 함수를 사용하여 업로드 파일의 확장자를 검사하고 있습니다. 이 함수는 문자열의 위치를 int 로 리턴합니다. 예를 들면, 아래와 ..</div>
1045</div>
1046<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fbo3X0N%2FbtrBZ3zmeWH%2FAAAAAAAAAAAAAAAAAAAAAAjej5OYWiNQVQ5zjNIUo0iDZLHO7y5aiLlPcP1PDo9m%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DcuIViDtsesFoPezeP3zPTmTYjJc%253D);background-position:50% 50%;background-size:cover"></div>
1047</div>
1048</div>
1049</li>
1050
1051<li class="index-item article-item">
1052<div class="index-item-wrap">
1053<a class="no-text index-item-link" href="/entry/NBB-2330" role="button">NBB-2330</a>
1054<div class="index-item-visual" hidden>
1055<div class="index-item-text">
1056<h2>NBB-2330</h2>
1057
1058<span class="digit">2022.04.21</span>
1059
1060<div class="index-item-summary">📅 Timeline 2022-03-14: Reported vulnerability. 2022-03-14: Checked report. 2022-03-16: Verified a vulnerability and reported to dev department. 2022-04-21: Fixed a Vulnerability. Comming soon.</div>
1061</div>
1062<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FunqaP%2FbtrGYzz8GqZ%2FAAAAAAAAAAAAAAAAAAAAAO9HERC3aWYAPlchcG3CN5ILEMWIodcbxmCNXKAYIUfB%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3Do7Kovu%252BWrzhZXxR3npZVThjVL%252BI%253D);background-position:50% 50%;background-size:cover"></div>
1063</div>
1064</div>
1065</li>
1066
1067<li class="index-item article-item">
1068<div class="index-item-wrap">
1069<a class="no-text index-item-link" href="/entry/NBB-2301" role="button">NBB-2301</a>
1070<div class="index-item-visual" hidden>
1071<div class="index-item-text">
1072<h2>NBB-2301</h2>
1073
1074<span class="digit">2022.04.21</span>
1075
1076<div class="index-item-summary">📅 Timeline 2022-02-21: Reported vulnerability. 2022-02-22: Checked report. 2022-02-22: Verified a vulnerability and reported to dev department. 2022-04-13: Fixed a Vulnerability. Comming soon.</div>
1077</div>
1078<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FcfJbiY%2FbtrGWz8ts4G%2FAAAAAAAAAAAAAAAAAAAAAF66Kex22LFPiyN8BhRThLhIzpPSffyYeQgSIsAarrOk%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3Dn%252FQcX1%252F7%252B7XoumZgdyF6TKFENTc%253D);background-position:50% 50%;background-size:cover"></div>
1079</div>
1080</div>
1081</li>
1082
1083<li class="index-item article-item">
1084<div class="index-item-wrap">
1085<a class="no-text index-item-link" href="/entry/NBB-2238" role="button">NBB-2238</a>
1086<div class="index-item-visual" hidden>
1087<div class="index-item-text">
1088<h2>NBB-2238</h2>
1089
1090<span class="digit">2022.04.21</span>
1091
1092<div class="index-item-summary">📅 Timeline 2022-01-06: Reported vulnerability. 2022-01-06: Checked report. 2022-01-06: Verified a vulnerability and reported to dev department. 2022-02-23: Fixed a Vulnerability. 2022-03-22: Bounty time.</div>
1093</div>
1094<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FXF2VG%2FbtrGYAeKAIB%2FAAAAAAAAAAAAAAAAAAAAAJN_-kYX49SE9itLC5Qb9L2sw5ZwCa28NEnJ7NP8opCT%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DH%252FH%252FqiH1UTXBrPoCzWH3uSGb0lw%253D);background-position:50% 50%;background-size:cover"></div>
1095</div>
1096</div>
1097</li>
1098
1099<li class="index-item article-item">
1100<div class="index-item-wrap">
1101<a class="no-text index-item-link" href="/entry/NBB-2217" role="button">NBB-2217</a>
1102<div class="index-item-visual" hidden>
1103<div class="index-item-text">
1104<h2>NBB-2217</h2>
1105
1106<span class="digit">2022.04.21</span>
1107
1108<div class="index-item-summary">📅 Timeline 2021-12-21: Reported vulnerability. 2021-12-22: Checked report. 2021-12-22: Verified a vulnerability and reported to dev department. 2022-01-12: Fixed a Vulnerability. 2022-02-08: Bounty time.</div>
1109</div>
1110<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fc14Z3x%2FbtrGZL1oH3n%2FAAAAAAAAAAAAAAAAAAAAAI4UIEBhQzo8aA63ccRCv8z3FIk-jwpnT2ABBz35PcsO%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3D%252B1sl8HM0dR232tWJMUN6UKKf3Nc%253D);background-position:50% 50%;background-size:cover"></div>
1111</div>
1112</div>
1113</li>
1114
1115<li class="index-item article-item">
1116<div class="index-item-wrap">
1117<a class="no-text index-item-link" href="/entry/NBB-1810" role="button">NBB-1810</a>
1118<div class="index-item-visual" hidden>
1119<div class="index-item-text">
1120<h2>NBB-1810</h2>
1121
1122<span class="digit">2022.04.21</span>
1123
1124<div class="index-item-summary">📅 Timeline 2021-04-09: Reported vulnerability. 2021-04-12: Checked report. 2021-04-12: Verified vulnerability and reported to dev department. 2021-05-17: Fixed Vulnerability.</div>
1125</div>
1126<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fc7JcK5%2FbtrGYy2ktKK%2FAAAAAAAAAAAAAAAAAAAAALdqnWqqIjq7vqg_dd7yhtXD9G0Yrj0WowUR54r7vVqc%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3DVmyeJuhZyRP7IIT%252F7%252BNaoUAJBws%253D);background-position:50% 50%;background-size:cover"></div>
1127</div>
1128</div>
1129</li>
1130
1131<li class="index-item article-item">
1132<div class="index-item-wrap">
1133<a class="no-text index-item-link" href="/entry/KVE-2021-1414" role="button">KVE-2021-1414</a>
1134<div class="index-item-visual" hidden>
1135<div class="index-item-text">
1136<h2>KVE-2021-1414</h2>
1137
1138<span class="digit">2022.04.21</span>
1139
1140<div class="index-item-summary">📅 Timeline 2021-11-10: Reported vulnerability. 2021-11-10: Checked report. 2021-11-10: Verified vulnerability and forword to manufacturer. 2021-12-06: Bounty time.</div>
1141</div>
1142<div class="index-item-thumbnail" data-style="background-image:url(//img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FWvbQF%2FbtrGYyHZcpr%2FAAAAAAAAAAAAAAAAAAAAALlHSyJ5jPOU478hs_7POtwG1fHP-I8YWm9m0u3ASce6%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1793458799%26allow_ip%3D%26allow_referer%3D%26signature%3D1Y8cbbLBFFq5Ph1960T%252FRRywTMQ%253D);background-position:50% 50%;background-size:cover"></div>
1143</div>
1144</div>
1145</li>
1146
1147</ul>
1148</div>
1149</section>
1150
1151
1152
1153</div>
1154
1155<section>
1156
1157
1158<div class="fc-index-width card-type">
1159<div class="index-width-support">
1160
1161
1162
1163                
1164</div>
1165</div>
1166
1167</section>
1168</main>
1169
1170<aside class="sidebar-area">
1171<div class="sidebar-scrollbar" hidden>
1172<div class="sidebar-scrollbar-inner"></div>
1173</div>
1174<div class="sidebar-inner">
1175<section class="sidebar-title">
1176<h3 class="visuallyhidden-content">정보</h3>
1177<a class="no-text sidebar-title-link" href="https://lactea.kr/" role="button">Universe blog 블로그의 첫 페이지로 이동</a>
1178<div class="sidebar-title-inner" aria-hidden="true">
1179<div class="sidebar-avatar" data-style="background-image:url(//img1.daumcdn.net/thumb/R240x0/?scode=mtistory2&fname=https://tistory1.daumcdn.net/tistory/3085610/attach/0f893d6589334a90b770b9f65beb42a9)"></div>
1180<p>Universe blog</p>
1181</div>
1182</section>
1183<div class="sidebar-contents">
1184<div class="sub-navigation" id="sidebar" aria-hidden="true">
1185<button class="fc-appearance fc-icon fc-button close-sidebar" data-func="close-sidebar">사이드바 닫기</button>
1186<ul class="fc-list sidebar-func-list">
1187<li class="sidebar-go-to-index-inner" style="display:none" aria-hidden="true"><a class="fc-icon sidebar-go-to-index" href="https://lactea.kr/" role="button">Universe blog의 첫 페이지로 이동</a></li>
1188</ul>
1189<div class="sidebar">
1190<button class="fc-appearance fc-button no-text transparent" data-func="close-sidebar" style="display:none" aria-hidden="true">사이드바 닫기</button>
1191
1192<!-- 검색 -->
1193<section class="module search-module icon empty">
1194<h3>검색</h3>
1195
1196<form>
1197<input class="fc-appearance search-field" type="search" name="search" value="" onkeypress="if(event.keyCode==13){try {
1198    window.location.href = '/search' + '/' + looseURIEncode(document.getElementsByName('search')[0].value);
1199    document.getElementsByName('search')[0].value = '';
1200    return false;
1201} catch (e) {}}" aria-label="검색어 입력" autocomplete="off" required>
1202<button class="fc-appearance fc-icon search-button" onclick="try {
1203    window.location.href = '/search' + '/' + looseURIEncode(document.getElementsByName('search')[0].value);
1204    document.getElementsByName('search')[0].value = '';
1205    return false;
1206} catch (e) {}" class="submit" disabled>검색</button>
1207</form>
1208
1209</section>
1210
1211<!-- 메뉴 -->
1212<section class="module menu-module">
1213<h3>메뉴</h3>
1214<ul>
1215  <li class="t_menu_home first"><a href="/" target="">홈</a></li>
1216  <li class="t_menu_tag"><a href="/tag" target="">태그</a></li>
1217  <li class="t_menu_guestbook"><a href="/guestbook" target="">방명록</a></li>
1218  <li class="t_menu_link_1 last"><a href="https://github.com/Universe1122" target="_black">Github</a></li>
1219</ul>
1220</section>
1221
1222<!-- 카테고리 -->
1223<section class="module category-module close-sub-category">
1224<h3>카테고리</h3>
1225<ul class="tt_category"><li class=""><a href="/category" class="link_tit"> 분류 전체보기 <span class="c_cnt">(209)</span> </a>
1226  <ul class="category_list"><li class=""><a href="/category/%F0%9F%92%B0Bug%20Bounty" class="link_item"> 💰Bug Bounty <span class="c_cnt">(13)</span> </a></li>
1227<li class=""><a href="/category/%F0%9F%94%92Security" class="link_item"> 🔒Security <span class="c_cnt">(43)</span> </a></li>
1228<li class=""><a href="/category/%F0%9F%9A%A9CTF" class="link_item"> 🚩CTF <span class="c_cnt">(110)</span> </a></li>
1229<li class=""><a href="/category/Code" class="link_item"> Code <span class="c_cnt">(11)</span> </a></li>
1230<li class=""><a href="/category/Free%20Board" class="link_item"> Free Board <span class="c_cnt">(3)</span> </a></li>
1231<li class=""><a href="/category/Develop" class="link_item"> Develop <span class="c_cnt">(4)</span> </a></li>
1232<li class=""><a href="/category/IT%20news" class="link_item"> IT news <span class="c_cnt">(8)</span> </a></li>
1233<li class=""><a href="/category/ETC" class="link_item"> ETC <span class="c_cnt">(5)</span> </a></li>
1234<li class=""><a href="/category/BaekJoon" class="link_item"> BaekJoon <span class="c_cnt">(10)</span> </a></li>
1235</ul>
1236</li>
1237</ul>
1238
1239</section>
1240
1241<!-- 최근 글 -->
1242<section class="module recent-module general-module-type">
1243<h3>최근 글</h3>
1244<ul>
1245
1246</ul>
1247</section>
1248
1249<!-- 인기 글 -->
1250<section class="module famous-module general-module-type">
1251<h3>인기 글</h3>
1252<ul>
1253
1254</ul>
1255</section>
1256
1257<!-- 최근 댓글 -->
1258<section class="module recent-comments-module">
1259<h3>댓글</h3>
1260<ul>
1261
1262</ul>
1263</section>
1264
1265<!-- 공지사항 -->
1266
1267<section class="module notice-module">
1268<h3>공지사항</h3>
1269<ul>
1270
1271<li>
1272<a class="icon" href="/notice/81" role="button" aria-label="공지: Site map">공지 - Site map</a>
1273</li>
1274
1275
1276</ul>
1277</section>
1278
1279
1280<!-- 아카이브 -->
1281<section class="module archive-module">
1282<h3>아카이브</h3>
1283<ul>
1284
1285</ul>
1286</section>
1287
1288<!-- 태그 -->
1289<section class="module tags-module">
1290<h3>태그</h3>
1291<ul>
1292
1293<li>
1294<a class="icon cloud4" href="/tag/CSP" role="button" aria-label="CSP 태그">CSP</a>
1295</li>
1296
1297<li>
1298<a class="icon cloud3" href="/tag/Write%20Up" role="button" aria-label="Write Up 태그">Write Up</a>
1299</li>
1300
1301<li>
1302<a class="icon cloud1" href="/tag/ctf" role="button" aria-label="ctf 태그">ctf</a>
1303</li>
1304
1305<li>
1306<a class="icon cloud4" href="/tag/PWN" role="button" aria-label="PWN 태그">PWN</a>
1307</li>
1308
1309<li>
1310<a class="icon cloud3" href="/tag/writeup" role="button" aria-label="writeup 태그">writeup</a>
1311</li>
1312
1313<li>
1314<a class="icon cloud3" href="/tag/wargame" role="button" aria-label="wargame 태그">wargame</a>
1315</li>
1316
1317<li>
1318<a class="icon cloud2" href="/tag/pwnable.xyz" role="button" aria-label="pwnable.xyz 태그">pwnable.xyz</a>
1319</li>
1320
1321<li>
1322<a class="icon cloud3" href="/tag/pwnable" role="button" aria-label="pwnable 태그">pwnable</a>
1323</li>
1324
1325
1326</ul>
1327</section>
1328
1329<!-- 나의 외부 링크 -->
1330<section class="module link-module">
1331<h3>나의 외부 링크</h3>
1332<ul>
1333
1334<li>
1335<a class="icon" href="http://jmoon.co.kr" target="_blank" role="button" aria-label="jmoon 링크">jmoon</a>
1336</li>
1337
1338<li>
1339<a class="icon" href="http://pororiri.tistory.com" target="_blank" role="button" aria-label="pororiri 링크">pororiri</a>
1340</li>
1341
1342<li>
1343<a class="icon" href="http://blog.limelee.xyz" target="_blank" role="button" aria-label="limelee 링크">limelee</a>
1344</li>
1345
1346<li>
1347<a class="icon" href="https://foo-511.tistory.com/" target="_blank" role="button" aria-label="본본 링크">본본</a>
1348</li>
1349
1350<li>
1351<a class="icon" href="https://www.floodnut.com/" target="_blank" role="button" aria-label="floodnut 링크">floodnut</a>
1352</li>
1353
1354<li>
1355<a class="icon" href="https://velog.io/@swimming" target="_blank" role="button" aria-label="swimming 링크">swimming</a>
1356</li>
1357
1358<li>
1359<a class="icon" href="https://blog.jujuwon.dev/" target="_blank" role="button" aria-label="jujuwon 링크">jujuwon</a>
1360</li>
1361
1362<li>
1363<a class="icon" href="http://velog.io/@blatter95" target="_blank" role="button" aria-label="blatter95 링크">blatter95</a>
1364</li>
1365
1366<li>
1367<a class="icon" href="https://velog.io/@sani" target="_blank" role="button" aria-label="sani 링크">sani</a>
1368</li>
1369
1370<li>
1371<a class="icon" href="https://velog.io/@1mn" target="_blank" role="button" aria-label="1mn 링크">1mn</a>
1372</li>
1373
1374<li>
1375<a class="icon" href="https://h0pp1.github.io/" target="_blank" role="button" aria-label="hoppi 링크">hoppi</a>
1376</li>
1377
1378</ul>
1379</section>
1380
1381</div>
1382</div>
1383<div class="sub-navigation" id="blog-info" hidden>
1384<button class="fc-appearance fc-icon fc-button close-blog-info" data-func="close-blog-info">블로그 정보 닫기</button>
1385<div class="sidebar">
1386<button class="fc-appearance fc-button no-text transparent" data-func="close-blog-info" hidden>블로그 정보 닫기</button>
1387<section class="module info-module">
1388<h3>정보</h3>
1389<a class="info-module-button no-text" href="https://lactea.kr/" role="button">Universe7202의 Universe blog</a>
1390<div class="align-center" aria-hidden="true">
1391<div class="info-module-icon" data-style="background-image:url(//img1.daumcdn.net/thumb/R240x0/?scode=mtistory2&fname=https://tistory1.daumcdn.net/tistory/3085610/attach/0f893d6589334a90b770b9f65beb42a9)"></div>
1392<div class="info-module-text">
1393<p>Universe blog</p>
1394<span>Universe7202</span>
1395</div>
1396</div>
1397</section>
1398
1399<!-- 블로그 구독하기 -->
1400<section class="module subscribe-module">
1401<h3>블로그 구독하기</h3>
1402<ul>
1403<li class="enable-subscription">
1404<a class="icon mdl-subsc-on-tistory fc-subscribe btn_subscription" href="javascript:" role="button"><span class="txt_state">구독하기</span></a>
1405</li>
1406
1407<li>
1408<a class="icon mdl-subsc-on-feed" href="https://universe-blog.tistory.com/rss" target="_blank" role="button">RSS 피드</a>
1409</li>
1410</ul>
1411</section>
1412
1413<!-- 방문자 -->
1414<section class="module visitor-module" role="text" aria-label="이 블로그는 총 명이 방문했고, 어제는 명, 오늘은 명이 방문했습니다.">
1415<h3>방문자</h3>
1416<ul>
1417<li class="visitor-emphasis">
1418<span class="visitor-lable">전체 방문자</span> <span class="visitor-count digit"></span>
1419</li>
1420<li>
1421<span class="visitor-lable">오늘</span> <span class="visitor-count digit"></span>
1422</li>
1423<li>
1424<span class="visitor-lable">어제</span> <span class="visitor-count digit"></span>
1425</li>
1426</ul>
1427</section>
1428
1429<!-- 티스토리 로그인 정보 -->
1430<section class="module tistory-account">
1431<h3>티스토리</h3>
1432<div class="inner_header_layer">
1433<ul class="list_toolbar">
1434<li>
1435<a class="icon" href="https://www.tistory.com" role="button">티스토리 홈</a>
1436</li>
1437<li>
1438<a class="icon manage-button" href="https://universe-blog.tistory.com/manage" role="button">이 블로그 관리하기</a>
1439</li>
1440<li>
1441<a class="icon newpost-button" href="https://universe-blog.tistory.com/manage/newpost" role="button">글쓰기</a>
1442</li>
1443</ul>
1444</div>
1445</section>
1446
1447</div>
1448</div>
1449</div>
1450</div>
1451</aside>
1452<footer class="scrollbar-support bottom" id="footer" aria-hidden="false">
1453<div class="ft-left">
1454<button class="fc-icon fc-circle fc-appearance fc-button fc-subscribe ft-subscribe btn_subscription">Universe blog 블로그 <span class="txt_state">구독하기</span></button>
1455</div>
1456<address class="ft-center">
1457<span lang="en" class="tistory-address"><a class="fade-link" href="https://www.tistory.com" target="_blank">Powered by Tistory / Daum.</a></span>
1458<span class="copyright">&copy; Universe7202.</span>
1459<span lang="en"><a class="fade-link" href="https://fraccinospace.tistory.com" target="_blank">Designed by Fraccino.</a></span>
1460</address>
1461<div class="ft-right">
1462<button class="fc-icon fc-circle fc-appearance fc-button ft-go-to-top" data-func="go-to-top">페이지 맨 위로 올라가기</button>
1463</div>
1464</footer>
1465
1466
1467<script>
1468setTimeout(function(){
1469    if ($("#article") && $("#article").length === 1) {
1470  function convertCharToTag(originalString, targetChar, openingTag, closingTag) {
1471    var resultString = originalString,
1472      i = -1,
1473      even = true;
1474    while ((i = originalString.indexOf(targetChar, i + 1)) >= 0) {
1475      if (even) resultString = resultString.replace(targetChar, openingTag);
1476      else resultString = resultString.replace(targetChar, closingTag);
1477      even = !even;
1478    }
1479    return resultString;
1480  }
1481
1482  for(let h=1; h<=6; h++){
1483    for(let i=0; i<$(`#article > h${h}`).length; i++){
1484      var htmlStr = $(`#article > h${h}`)[i].innerHTML;
1485      var converted = convertCharToTag(htmlStr, "`", "<code>", "</code>");
1486      $(`#article > h${h}`)[i].innerHTML = converted;
1487    }
1488  }
1489  console.log($(`#article > p`).length);
1490  for(let i=0; i<$(`#article > p`).length; i++){
1491    var htmlStr = $(`#article > p`)[i].innerHTML;
1492    var converted = convertCharToTag(htmlStr, "`", "<code>", "</code>");
1493    // console.log(converted);
1494    $(`#article > p`)[i].innerHTML = converted;
1495  }
1496}
1497}, 1000)
1498	
1499// if ($(".post-item")) {
1500//   function convertCharToTag(originalString, targetChar, openingTag, closingTag) {
1501//     var resultString = originalString,
1502//       i = -1,
1503//       even = true;
1504//     while ((i = originalString.indexOf(targetChar, i + 1)) >= 0) {
1505//       if (even) resultString = resultString.replace(targetChar, openingTag);
1506//       else resultString = resultString.replace(targetChar, closingTag);
1507//       even = !even;
1508//     }
1509//     return resultString;
1510//   }
1511//   var postItems = $(".post-item");
1512// 	$(postItems).each(function(index, item) {
1513//   	var htmlStr = $(item).find(".excerpt").html();
1514// 	var converted = convertCharToTag(htmlStr, "`", "<code>", "</code>");
1515//     $(item).find(".excerpt").html($.parseHTML(converted));
1516//   });
1517// }
1518</script>
vendor: 1 bytes, line 1518
1518
1519<script>let
1520imagesURL="https://cdn.jsdelivr.net/gh/kaniwari/[email protected]/build/",title="Universe blog",blogLink="https://lactea.kr/",manageLink="https://universe-blog.tistory.com/manage",fcver="",fcverCheck="?fcver=2530",fixedSidebar="true",limitedWidth="true",articleWidth=parseInt("728"),expandedImgWidth=parseInt("1100"),trademark="undefined",dawnTrademark="undefined",nightTrademark="undefined",coverTrademark="undefined",jacketColor="transparent",jacketImage="undefined",dayPageColor="#647788",dayColor="#349aff",dawnPageColor="#59656d",dawnColor="#2284d9",nightPageColor="#748a96",nightColor="#74d5ff",altCover="https://tistory2.daumcdn.net/tistory/3085610/skinSetting/b2d81febb1274f8eb3a45934149564e0",secondAltCover="https://tistory4.daumcdn.net/tistory/3085610/skinSetting/0c0d51b3f1b14914842a1101803403bf",thirdAltCover="undefined",fourthAltCover="undefined",dayKeyword="",dawnKeyword="",nightKeyword="",pageCoverKeyword="",fullscreenPageCoverKeyword="",disabledPageCoverKeyword="",altCoverKeyword="",secondCoverKeyword="",thirdCoverKeyword="",fourthCoverKeyword="",smallGalleryKeyword="",galleryKeyword="",largeGalleryKeyword="",posterTypeKeyword="",cardTypeKeyword="",textTypeKeyword="",hiddenTextKeyword="",showTextKeyword="",serifKeyword="",sanSerifKeyword="",tabSize=parseInt("4"),sidebarButtonColor="transparent",sidebarDawnButtonColor="transparent",sidebarNightButtonColor="transparent",sidebarHoverColor="transparent",sidebarDawnHoverColor="transparent",sidebarNightHoverColor="transparent",sidebarColor="transparent",sidebarDawnColor="transparent",sidebarNightColor="transparent",sidebarImage="undefined",sidebarDawnImage="undefined",sidebarNightImage="undefined",sidebarImgPosition="50% 50%",sidebarImgSize="cover",sidebarImgRepeat="no-repeat",sidebarTrademark="undefined",sidebarDawnTrademark="undefined",sidebarNightTrademark="undefined",naverID="undefined",slideInterval=1000*(Number("5")+1)</script>
vendor: 1 bytes, line 1520
1520
1521<script defer src="https://cdn.jsdelivr.net/gh/kaniwari/[email protected]/build/script.js"></script>
vendor: 1 bytes, line 1521
1521
1522<script defer src="https://cdn.jsdelivr.net/gh/kaniwari/[email protected]/build/script_sidebar.js"></script>
vendor: 1 bytes, line 1522
1522
1523<script defer src="https://cdn.jsdelivr.net/gh/kaniwari/[email protected]/build/script_appearance.js"></script>
vendor: 1 bytes, line 1523
1523
1524<script src="https://cdn.jsdelivr.net/gh/hi098123/tistory2/dist/tistory2.min.js"></script>
vendor: 1 bytes, line 1524
1524
1525<script>
1526  var content = document.querySelector('#article')
1527  var headings = content.querySelectorAll('h1, h2, h3, h4, h5, h6, h7')
1528  var headingMap = {}
1529 
1530  Array.prototype.forEach.call(headings, function (heading) {
1531      var id = heading.id ? heading.id : heading.textContent.trim().toLowerCase()
1532                 .split(' ').join('-').replace(/[\!\@\#\$\%\^\&\*\(\):]/ig, '')
1533      headingMap[id] = !isNaN(headingMap[id]) ? ++headingMap[id] : 0
1534      if (headingMap[id]) {
1535        heading.id = id + '-' + headingMap[id]
1536      } else {
1537        heading.id = id
1538      }
1539    })
1540 
1541  tocbot.init({
1542    tocSelector: '.toc',
1543    contentSelector: '#article',
1544    headingSelector:'h1, h2, h3, h4',
1545    hasInnerContainers: false,
1546    ignoreSelector: '.another-category'
1547  });
1548 
1549  $(document).ready(function(){
1550            $('.toc').addClass('toc-absolute');
1551            var toc_top = $('.toc').offset().top - 165;
1552            $(window).scroll(function() {
1553                if ($(this).scrollTop() >= toc_top) {
1554                    $('.toc-title').addClass("toc-title-fixed");
1555                    $('.toc').addClass('toc-fixed');
1556                    $('.toc').removeClass('toc-absolute');
1557                } else {
1558                    $('.toc-title').removeClass("toc-title-fixed");
1559                    $('.toc').addClass('toc-absolute');
1560                    $('.toc').removeClass('toc-fixed');
1561                }
1562            });
1563        });
1564</script>
1564
1565<div class="#menubar menu_toolbar ">
1566  <h2 class="screen_out">티스토리툴바</h2>
1567<div class="btn_tool"><button class="btn_menu_toolbar btn_subscription  #subscribe" data-blog-id="3085610" data-url="https://universe-blog.tistory.com" data-device="web_pc"><strong class="txt_tool_id">Universe blog</strong><em class="txt_state">구독하기</em><span class="img_common_tistory ico_check_type1"></span></button></div></div>
1568<div class="#menubar menu_toolbar "></div>
1569<div class="layer_tooltip">
1570  <div class="inner_layer_tooltip">
1571    <p class="desc_g"></p>
1572  </div>
1573</div>
1574<div id="editEntry" style="position:absolute;width:1px;height:1px;left:-100px;top:-100px"></div>
1575
1576
1577                <!-- DragSearchHandler - START -->
1578<script src="//search1.daumcdn.net/search/statics/common/js/fe/search-library-workspace/drag-search/1.0.2/main.js"></script>
1578
1579
1580<!-- DragSearchHandler - END -->
1581
1582                
1583                <div style="margin:0; padding:0; border:none; background:none; float:none; clear:none; z-index:0"></div>
1584<script type="text/javascript" src="https://edge.daumcdn.net/tistory/tistory-admin/userblog/userblog-542bd84ce37260cece1e68a465e3c63534629c86/static/script/common.js"></script>
1584
1585
1586                
1587                
1587<script>window.tiara = {"svcDomain":"user.tistory.com","section":"블로그","trackPage":"블로그홈_보기","page":"블로그홈","key":"3085610","customProps":{"userId":"0","blogId":"3085610","entryId":"null","role":"guest","trackPage":"블로그홈_보기","filterTarget":false},"entry":null,"kakaoAppKey":"3e6ddd834b023f24221217e370daed18","appUserId":"null","thirdProvideAgree":null}</script>
vendor: 1 bytes, line 1587
1587
1588<script type="module" src="https://edge.daumcdn.net/tistory/tistory-admin/frontend/tiara/v1.0.8/index.js"></script>
vendor: 1 bytes, line 1588
1588
1589<script src="https://edge.daumcdn.net/tistory/tistory-admin/frontend/tiara/v1.0.8/polyfills-legacy.js" nomodule="true" defer="true"></script>
vendor: 1 bytes, line 1589
1589
1590<script src="https://edge.daumcdn.net/tistory/tistory-admin/frontend/tiara/v1.0.8/index-legacy.js" nomodule="true" defer="true"></script>
1590
1591
1592                </body>
1593</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.