SWLUG/μ›Ή ν•΄ν‚Ή

[Root Me] Javascript - Webpack

waterproof 2023. 9. 26. 23:59

https://www.root-me.org/en/Challenges/Web-Client/Javascript-Webpack

 

Challenges/Web - Client : Javascript - Webpack [Root Me : Hacking and Information Security learning platform]

TCP - Back to school just blocks when i try to read the flag after i have sent the calculation. Not sure if my calculation is wrong or what is is?

www.root-me.org

 


 

 

Start the challenge λ²„νŠΌμ„ 눌러 문제 풀이λ₯Ό μ‹œμž‘ν•˜μž.

 

 

 

 

 

문제 ν’€μ΄μ˜ 처음 화면이닀.

 

 

Quack Quack ! | Duck or Mandarin duck 이라고 글이 μ ν˜€μžˆλ‹€.

Duckκ³Ό Mandarin duck μ—λŠ” 링크가 λ˜μ–΄μžˆλ‹€.

 

 

 

 

Welcome !

If you are here, it means that you don't know the difference between a duck and mandarin duck.

Shame on you !

 

라고 ν•˜λŠ”λ°... 'duckκ³Ό mandarin duck의 차이'κ°€ 뭔지 문제λ₯Ό λ‹€ ν’€κ³  λ‚˜λ©΄ μ•Œ 수 있게 λ˜λ‚˜ 보닀

 

 

링크λ₯Ό 눌러보면 κ·Έ 차이λ₯Ό μ•Œ 수 μžˆμ„κΉŒ μƒκ°ν•˜μ—¬ Duck κ³Ό Mandarin duck 을 각각 눌러보기둜 ν•œλ‹€.

 

 

 

 

Duck 을 λˆŒλ €μ„ λ•Œ λ‚˜μ˜€λŠ” μ›ΉνŽ˜μ΄μ§€μ΄λ‹€.

 

 

 

 

λ§Œλ‹€λ¦°μ˜€λ¦¬λŠ” κ·Έλƒ₯ μ˜€λ¦¬λ³΄λ‹€ 훨씬 더 μ˜ˆμ˜λ‹€λŠ” 게 차이점인가?

μ•„κΉŒ κ·Έλƒ₯ μ˜€λ¦¬μ™€λŠ” λ‹€λ₯΄κ²Œ 먹지 λ§λž€λ‹€... λ„Œμ„ΌμŠ€ ν€΄μ¦ˆ κ°™λ‹€

 

 

 

 

이제 μ›ΉνŽ˜μ΄μ§€μ˜ μ†ŒμŠ€ μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄κ² λ‹€.

 

 

 

 

 

쑰금 μˆ˜μƒν•œ μ†ŒμŠ€μ½”λ“œλ₯Ό λ°œκ²¬ν–ˆλ‹€.

 

 

λ…Έλž€μƒ‰ λ°•μŠ€μ™€ κ΄€λ ¨λœ μ›ΉνŽ˜μ΄μ§€(Home, Duck, DuckMandarin)λŠ” λͺ¨λ‘ λ°©λ¬Έν–ˆμ—ˆλ‹€.

(μ§€κΈˆ 보고 μžˆλŠ” μ†ŒμŠ€ νŒŒμΌλ“€μ€ webpack:// 에 μžˆλ‹€.)

 

 

빨간색 λ°•μŠ€λ‘œ ν‘œμ‹œν•œ μ†ŒμŠ€μ½”λ“œμ— 주석 처리된 뢀뢄이 μ˜μ‹¬μŠ€λŸ½λ‹€κ³  μƒκ°ν–ˆλ‹€.

 

 

 

 

 

 

 

 

 

μ†ŒμŠ€μ½”λ“œμ™€ 같이,

 

Home의 κ²½λ‘œλŠ” '/'

Duck의 κ²½λ‘œλŠ” '/duck'

DuckMandarin의 κ²½λ‘œλŠ” '/duck-mandarin'

 

인 것을 확인할 수 μžˆλ‹€!

 

 

 

그런데 "YouWillNotFindThisRouteBecauseItIsHidden"와 κ΄€λ ¨λœ μ›ΉνŽ˜μ΄μ§€λŠ” λ³Έ 적이 μ—†μ—ˆλ‹€.

 

 

 

 

 

 

μ£Όμ„μ²˜λ¦¬κ°€ 된 핑크 λ°•μŠ€ λΆ€λΆ„μ˜ λ‚΄μš©μ„ μ΄μš©ν•΄ 보자.

μ•žμ„  κ·œμΉ™λŒ€λ‘œ, μ£Όμ†Œ 뒷뢀뢄이 '/you-will-not-find-this-route-because-it-is-hidden'인 νŽ˜μ΄μ§€κ°€ μ‘΄μž¬ν•  것이닀.

μ € νŽ˜μ΄μ§€λ₯Ό μ—΄λ©΄ 닡에 λŒ€ν•œ λ‹¨μ„œλ₯Ό 얻을 수 μžˆμ„ 거라고 μƒκ°ν–ˆλ‹€.

 

 

 

 

 

http://challenge01.root-me.org/web-client/ch27/#/you-will-not-find-this-route-because-it-is-hidden 에 μ ‘μ†ν–ˆλŠ”λ°,

λ…Έλž€μƒ‰ λ°°κ²½ν™”λ©΄ λ§κ³ λŠ” 아무것도 μ—†μ—ˆλ‹€....

 

 

 

κ·Έλž˜μ„œ μ†ŒμŠ€μ½”λ“œλ₯Ό 이것저것 μ‚΄νŽ΄λ΄€λŠ”λ°, 더 이상 μ•Œμ•„λ‚Ό 수 μžˆλŠ” 것이 μ—†μ–΄μ„œ

λ‹€λ₯Έ λΈ”λ‘œκ·Έμ˜ 풀이λ₯Ό μ°Έκ³ ν•˜κΈ°λ‘œ ν–ˆλ‹€.

 

 

 

 


μš°μ„  webpack이 무엇인지 μ•Œμ•„λ³΄λ„λ‘ ν•˜μž!

 

 


webpack μ΄λž€?



 

 

 

https://happy-jjang-a.tistory.com/124

 

Vue.js μ›ΉνŒ©(webpack) κ°œλ… 및 μ„€μ •

Vue CLIλ₯Ό ν†΅ν•΄μ„œ ν”„λ‘œμ νŠΈλ₯Ό μƒμ„±ν•˜λ©΄ webpack 섀정이 μžλ™ μ μš©λ˜μ–΄ 'npm run serve', 'npm run build' μ‹€ν–‰ μ‹œ webpack 기반으둜 λ™μž‘μ„ ν•˜κ²Œλœλ‹€. vue CLI 2λ²„μ „κΉŒμ§€λŠ” ν”„λ‘œμ νŠΈ 생성 μ‹œ μ›ΉνŒ©μ„€μ • 파일인 webpack

happy-jjang-a.tistory.com

 

 

Webpack은 ν˜„λŒ€μ μΈ μ›Ή κ°œλ°œμ—μ„œ μ‚¬μš©λ˜λŠ” 도ꡬ 쀑 ν•˜λ‚˜.

 

 

<μ£Όμš” κΈ°λŠ₯>


1. λͺ¨λ“ˆ λ²ˆλ“€λ§:
μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ—¬λŸ¬ 개의 파일둜 이루어져 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, JavaScript 파일, CSS 파일, 이미지 파일, HTML 파일 등이 μžˆλ‹€. 이 νŒŒμΌλ“€ κ°„μ—λŠ” μ’…μ’… 의쑴 관계가 μžˆλ‹€. webpack은 μ΄λŸ¬ν•œ νŒŒμΌλ“€μ„ μ΄ν•΄ν•˜κ³ , 이듀 κ°„μ˜ 관계λ₯Ό νŒŒμ•…ν•˜μ—¬ ν•˜λ‚˜μ˜ μ΅œμ ν™”λœ λ²ˆλ“€λ‘œ λ¬Άμ–΄μ€€λ‹€.

 

2. λ‘œλ” (Loaders):
webpack은 μžλ°”μŠ€ν¬λ¦½νŠΈ 파일 이외에도 CSS, 이미지, 폰트 λ“± λ‹€μ–‘ν•œ 파일 ν˜•μ‹μ„ μ²˜λ¦¬ν•  수 μžˆλ‹€. 이λ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” 것이 λ‘œλ”μ΄λ‹€. λ‘œλ”λŠ” μ΄λŸ¬ν•œ λ‹€λ₯Έ ν˜•μ‹μ˜ νŒŒμΌλ“€μ„ 읽어 듀이고, webpack이 이해할 수 μžˆλŠ” λͺ¨λ“ˆλ‘œ λ³€ν™˜μ‹œμΌœ μ€€λ‹€.

 

3. ν”ŒλŸ¬κ·ΈμΈ (Plugins):
λ‘œλ”κ°€ κ°œλ³„ νŒŒμΌμ„ μ²˜λ¦¬ν•˜λŠ”λ° λ°˜ν•΄, ν”ŒλŸ¬κ·ΈμΈμ€ λ²ˆλ“€λœ 결과물에 좔가적인 μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€. 예λ₯Ό λ“€μ–΄, μ½”λ“œ μ••μΆ•, ν™˜κ²½ λ³€μˆ˜ μ£Όμž…, λ²ˆλ“€ μ΅œμ ν™” λ“±μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€.

 

4. 개발 μ„œλ²„ (Development Server):

개발 μ€‘μ—λŠ” μ‹€μ‹œκ°„μœΌλ‘œ λ³€κ²½λœ λ‚΄μš©μ„ 확인해야 ν•œλ‹€. webpack은 개발 μ„œλ²„λ₯Ό μ œκ³΅ν•˜μ—¬ μ½”λ“œλ₯Ό μˆ˜μ •ν•  λ•Œλ§ˆλ‹€ μžλ™μœΌλ‘œ λ‹€μ‹œ λΉŒλ“œν•˜κ³  λΈŒλΌμš°μ €λ₯Ό μƒˆλ‘œκ³ μΉ¨ν•΄μ€€λ‹€.

 

5. λ²ˆλ“€ μ΅œμ ν™”:

webpack은 λ²ˆλ“€λœ 파일의 크기λ₯Ό μ΅œμ†Œν™”ν•˜κΈ° μœ„ν•œ λ‹€μ–‘ν•œ 섀정을 μ œκ³΅ν•œλ‹€. 이λ₯Ό 톡해 λΆˆν•„μš”ν•œ κ³΅λ°±μ΄λ‚˜ 주석을 μ œκ±°ν•˜κ³ , μ½”λ“œλ₯Ό μ••μΆ•ν•œλ‹€.

 

6. λ‹€μ΄λ‚˜λ―Ή λͺ¨λ“ˆ λ‘œλ”©:

μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ ν•„μš”ν•œ λͺ¨λ“ˆμ„ λŸ°νƒ€μž„ μ‹œμ μ— λ™μ μœΌλ‘œ 뢈러올 수 μžˆλŠ” κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€. μ΄λŠ” ν•„μš”ν•œ μ½”λ“œλ₯Ό ν•„μš”ν•œ μ‹œμ μ— λ‘œλ”©ν•˜μ—¬ 초기 λ‘œλ”© μ‹œκ°„μ„ 쀄여쀀닀.

 

7. ν”„λ‘ νŠΈμ—”λ“œ ν”„λ ˆμž„μ›Œν¬ 지원:

λŒ€λΆ€λΆ„μ˜ ν˜„λŒ€μ μΈ ν”„λ‘ νŠΈμ—”λ“œ ν”„λ ˆμž„μ›Œν¬λ“€ (Vue, React, Angular λ“±)은 webpack을 μ‚¬μš©ν•˜λŠ” 것을 ꢌμž₯ν•œλ‹€. webpack은 μ΄λŸ¬ν•œ ν”„λ ˆμž„μ›Œν¬μ™€ ν•¨κ»˜ μ‚¬μš©λ  λ•Œ λͺ¨λ“ˆ 관리와 λ²ˆλ“€λ§μ„ 효과적으둜 ν•΄μ€€λ‹€.

 

즉, webpack은 ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμžλ“€μ΄ ν”„λ‘œμ νŠΈλ₯Ό κ΅¬μ„±ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 데 맀우 μœ μš©ν•œ 도ꡬ이닀.

λͺ¨λ“ˆν™” 된 μ½”λ“œλ₯Ό 효과적으둜 λ²ˆλ“€λ‘œ λ¬Άμ–΄μ„œ λΈŒλΌμš°μ €μ—μ„œ λ‘œλ”©λ˜λŠ”λ°, 이λ₯Ό 톡해 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„±λŠ₯을 μ΅œμ ν™”ν•  수 μžˆλ‹€.

 

 

 

 

...라고 ν•˜λŠ”λ° 사싀 μ’€ μ–΄λ €μš΄ κ°œλ…μ΄λΌκ³  λŠκ»΄μ§„λ‹€...

 


문제 풀이λ₯Ό λ‹€μ‹œ μ§„ν–‰ν•˜κ² λ‹€.

 

 

 

 

webpack:///src/components/YouWillNotFindThisRouteBecauseItIsHidden.vue 파일

 

webpack:///src/components/YouWillNotFindThisRouteBecauseItIsHidden.vue νŒŒμΌμ—

flag 값이 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬λ˜μ–΄ μžˆμ–΄μ„œ ν™•μΈν•˜κ³  닡을 맞히면 λœλ‹€κ³  ν•œλ‹€.

 

그런데 λ‚˜λŠ” flag 값이 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬λ˜μ–΄ μžˆλŠ” 뢀뢄을 찾을 수 μ—†μ—ˆλ‹€. (κ·Έλž˜μ„œ 문제 풀이 진행이 μ•ˆ 됐닀.)

 

 

 

 

κ·Έ μ΄μœ μ— λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜λŠ”λ°, (μ°Έκ³ : https://29223.tistory.com/36 , https://29223.tistory.com/37

 

 

이 문제의 μ›ΉνŒ© νŒŒμΌμ—μ„œ μ£Όμ„μœΌλ‘œ 처리된 flag 값을 확인할 수 μžˆλŠ” μ΄μœ λŠ”, source map이 ν™œμ„±ν™”λ˜μ–΄μžˆκΈ° λ•Œλ¬Έμ΄λΌκ³  ν•œλ‹€.

 

μ†ŒμŠ€ 맡(Source Map) μ΄λž€?


μ†ŒμŠ€ 맡(Source Map)은 배포용으둜 λΉŒλ“œν•œ 파일과 원본 νŒŒμΌμ„ μ„œλ‘œ μ—°κ²°μ‹œμΌœ μ£ΌλŠ” κΈ°λŠ₯이닀.
일반적으둜 μ„œλ²„μ— λ°°ν¬ν•˜κΈ° 전에 HTML, CSS, JS λ“±μ˜ μ›Ή μžμ›μ„ μ••μΆ•ν•˜μ—¬ μ„±λŠ₯을 μ΅œμ ν™”ν•œλ‹€.
κ·ΈλŸ¬λ‚˜ μ••μΆ•λœ νŒŒμΌμ—μ„œ 였λ₯˜κ°€ λ°œμƒν•œλ‹€λ©΄ μ–΄λ–»κ²Œ 디버깅할 수 μžˆμ„κΉŒ?
μ΄λ•Œ μ†ŒμŠ€ 맡을 μ‚¬μš© ν•˜λ©΄ 배포용 파일의 νŠΉμ • 뢀뢄이 원본 μ†ŒμŠ€μ˜ μ–΄λ–€ 뢀뢄인지 확인할 수 μžˆλ‹€.

μ†ŒμŠ€ 맡은 μ›Ή κ°œλ°œμ—μ„œ μ€‘μš”ν•œ λ„κ΅¬λ‘œ, 주둜 μ΅œμ ν™”λœ μ½”λ“œ(주둜 JavaScript)λ₯Ό 디버깅할 λ•Œ ν™œμš©λœλ‹€.
μ΅œμ ν™”λœ μ½”λ“œλŠ” λ³€μˆ˜ μ΄λ¦„μ΄λ‚˜ 곡백 등이 μ œκ±°λ˜μ–΄ 파일 크기가 μ€„μ–΄λ“€μ§€λ§Œ, 이둜 인해 디버깅이 μ–΄λ €μ›Œμ§„λ‹€.
Source Map은 μ΅œμ ν™”λœ μ½”λ“œμ™€ 원본 μ½”λ“œ κ°„μ˜ λŒ€μ‘ 관계λ₯Ό μ œκ³΅ν•˜μ—¬ 디버깅을 μš©μ΄ν•˜κ²Œ ν•œλ‹€.
μ΄λŠ” JSON ν˜•μ‹μ˜ 파일둜, μ΅œμ ν™”λœ μ½”λ“œμ™€ ν•΄λ‹Ή μ½”λ“œμ˜ 원본 파일 κ°„μ˜ 맀핑 정보λ₯Ό λ‹΄κ³  μžˆλ‹€.
λΈŒλΌμš°μ € 개발자 λ„κ΅¬μ—μ„œ 디버깅할 λ•Œ μ΅œμ ν™”λœ μ½”λ“œ λŒ€μ‹  원본 μ½”λ“œλ₯Ό 보여쀀닀.

예λ₯Ό λ“€μ–΄, TypeScript둜 μž‘μ„±ν•œ μ½”λ“œλ₯Ό JavaScript둜 μ»΄νŒŒμΌν•˜κ³  μ΅œμ ν™”ν•˜μ—¬ μ›Ή νŽ˜μ΄μ§€μ— ν¬ν•¨μ‹œν‚¨λ‹€κ³  κ°€μ •ν•΄ 보면, ν•¨κ»˜ μƒμ„±λœ Source Map을 μ‚¬μš©ν•˜λ©΄ λΈŒλΌμš°μ €μ—μ„œ 디버깅할 λ•Œ TypeScript μ½”λ“œμ˜ 였λ₯˜ λ©”μ‹œμ§€μ™€ ν•¨κ»˜ ν•΄λ‹Ή TypeScript 파일의 원본 μœ„μΉ˜λ₯Ό ν‘œμ‹œν•  수 μžˆλ‹€. 이λ₯Ό 톡해 κ°œλ°œμžλŠ” μ΅œμ ν™”λœ μ½”λ“œμ—μ„œ λ°œμƒν•œ 였λ₯˜λ₯Ό μ‹ μ†ν•˜κ²Œ μ‹λ³„ν•˜κ³  ν•΄κ²°ν•  수 μžˆλ‹€.

 

 

그런데 λ‚˜λŠ” μ†ŒμŠ€λ§΅μ΄ ν™œμ„±ν™”λ˜μ–΄μžˆμ§€ μ•Šμ•˜λ‹€. 

 

 

μ†ŒμŠ€λ§΅μ„ ν™œμ„±ν™”μ‹œμΌœμ•Ό μ£Όμ„μ²˜λ¦¬λœ flag 값을 확인할 수 μžˆλŠ”λ°

 

"이 파일의 μ†ŒμŠ€ 맡을 κ±΄λ„ˆλ›°μ—ˆμŠ΅λ‹ˆλ‹€."λΌλŠ” 문ꡬ가 λ‚˜μ˜€κ³  ν™œμ„±ν™”μ‹œν‚¬ μˆ˜λŠ” μ—†μ—ˆλ‹€.

 

 

 

κ·Έλ ‡μ§€λ§Œ 

 

 

μ™Όμͺ½ μ•„λž˜λ₯Ό 보면

 

 

μ†ŒμŠ€ 맀핑 λ˜μ–΄μžˆλŠ” νŒŒμΌμ„ 확인할 수 μžˆμ—ˆλ‹€.

(마우슀λ₯Ό 올리면 "app.a92c~. jsμ—μ„œ λ§€ν•‘λœ μ†ŒμŠ€"λΌλŠ” νŒμ—… 문ꡬ가 생긴닀.)

 

 

 

그리고 app.a92c507.... jsλ₯Ό λˆŒλŸ¬μ„œ 보면 원본 μ†ŒμŠ€λ₯Ό 찾을 수 μžˆλ‹€.

 

 

μ΄λ ‡κ²Œ 원본 μ†ŒμŠ€λ₯Ό 찾을 수 μžˆλŠ” 방법은 λ²ˆλ“€λ§ 된 μ†ŒμŠ€μ˜ κ°€μž₯ 끝에 νŠΉλ³„ν•œ 주석이 μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

이 νŠΉλ³„ν•œ 주석을 λΈŒλΌμš°μ €κ°€ 읽어 sourcemap을 μ°Ύμ•„ μ›λž˜ μ†ŒμŠ€μ™€ λ²ˆλ“€λ§λœ μ†ŒμŠ€λ₯Ό μ—°κ²°ν•œλ‹€.

 

 

(μ°Έκ³ : https://velog.io/@jiseong/Webpack-Devtool )

 

 

 

 

개발자 도ꡬ ν™”λ©΄(F12)μ—μ„œ, μ™Όμͺ½ μœ„μ˜ μ„Έ 개의 점 μ•„μ΄μ½˜μ„ λˆ„λ₯΄λ©΄ 개발자 λ¦¬μ†ŒμŠ€ λ₯Ό 선택할 수 μžˆλ‹€.

 

그러면 μ•„λž˜μͺ½μ— 개발자 λ¦¬μ†ŒμŠ€ 창을 λ„μšΈ 수 μžˆλŠ”λ° 원본 μ†ŒμŠ€λ₯Ό λ‹€μš΄λ‘œλ“œν•  수 μžˆλŠ” url 정보가 λ‚˜μ˜¨λ‹€.

 

app.a92c5074dafac0cb6365.js.map 에 ν•΄λ‹Ήν•˜λŠ” 보라색 체크 λ°•μŠ€ μ†μ˜ 링크둜 μ΄λ™ν•˜λ©΄

( http://challenge01.root-me.org/web-client/ch27/static/js/app.a92c5074dafac0cb6365.js.map )

 

μ›λ³ΈνŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•˜μ—¬ ν”Œλž˜κ·Έ 값을 λ³Ό 수 μžˆμ„ 것이닀.

 

 

// Here is your flag : BecauseSourceMapsAreGreatForDebuggingButNotForProduction

 

μ†ŒμŠ€ μ½”λ“œμ˜ 제일 μ•„λž«λΆ€λΆ„μ— μžˆμ—ˆλ‹€!

 

 

 

μ •λ‹΅~ μ•„μ£Ό λ§Žμ€ μ‹œκ°„μ΄ κ±Έλ¦° λ¬Έμ œμ˜€λ‹€...~

 

 

'SWLUG > μ›Ή ν•΄ν‚Ή' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Webhacking.kr] old-28  (0) 2023.09.28
[webhacking.kr] old-12번  (0) 2023.09.27
[Root Me] Javascript - Authentication 2  (0) 2023.09.23
[Root Me] HTTP - COOKIES  (0) 2023.09.23
[webhacking.kr] old-19번  (0) 2023.09.19