Jastes 2023. 5. 27. 00:20

πŸ’‘ν•΄λ‹Ή λ‚΄μš©μ€ pentestqym의 λ‚΄μš©μ„ λ‹€μ‹œ ν•œ 번 μ •λ¦¬ν•œ λ‚΄μš©μ΄λ©°,
λͺ¨λ“  μ €μž‘κΆŒμ€ ν•΄λ‹Ή μ‚¬μ΄νŠΈμ—κ²Œ μžˆμŠ΅λ‹ˆλ‹€.

인코딩(Encoding)μ΄λž€?

인코딩 : μ–΄λ–€ ν•œ ν˜•μ‹μ˜ 데이터λ₯Ό λ‹€λ₯Έ ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜λŠ” κΈ°μˆ μ΄λ‚˜ κ³Όμ •
λ””μ½”λ”© : μΈμ½”λ”©λœ ν˜•μ‹μ„ λ‹€μ‹œ μ›λž˜μ˜ ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜λŠ” κΈ°μˆ μ΄λ‚˜ κ³Όμ •

μ›Ή(App)은 μ™œ 인코딩을 ν• κΉŒ?

 μ΄ˆκΈ° μ›Ή ν™˜κ²½μ—μ„œλŠ” ASCII 기반의 문자 ν‘œκΈ°μ— λŒ€ν•œ μš”κ΅¬μ‚¬ν•­μ΄ 주둜 μžˆμ—ˆμ§€λ§Œ, μΈν„°λ„·μ˜ κΈ€λ‘œλ²Œ ν™•μž₯κ³Ό λ‹€κ΅­μ–΄ ν‘œκΈ°μ˜ ν•„μš”μ„±μ΄ λŒ€λ‘λ˜λ©΄μ„œ λ‹€μ–‘ν•œ 인코딩 기법이 κ°œλ°œλ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ›Ήμ—μ„œ 주둜 μ‚¬μš©λ˜λŠ” 인코딩 기법은 μ€‘μš”ν•œ κ°œλ…μœΌλ‘œ μ•Œμ•„λ‘μ–΄μ•Ό ν•©λ‹ˆλ‹€.


인코딩 μ’…λ₯˜μ™€ μœ ν˜•

URL 인코딩

 URL 인코딩은 URLμ—μ„œ 문자λ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•œ κΈ°λ²•μœΌλ‘œ, % 문자 뒀에 16μ§„μˆ˜ ASCII 문자λ₯Ό λΆ™ν˜€ μ‚¬μš©ν•©λ‹ˆλ‹€. URLμ—λŠ” 좜λ ₯ κ°€λŠ₯ν•œ ASCII 문자만 μ‚¬μš©ν•  수 있으며, 특수 λ¬Έμžλ‚˜ λ‹€κ΅­μ–΄ 문자 등이 ν¬ν•¨λœ 경우 인코딩을 ν•΄μ•Ό ν•©λ‹ˆλ‹€. λ˜ν•œ URLμ—μ„œ μ‚¬μš©λ˜λŠ” μ˜ˆμ•½ λ¬ΈμžλŠ” νŠΉλ³„ν•œ 의미λ₯Ό κ°–λŠ” κ΅¬λΆ„μžλ‘œ μ‚¬μš©λ˜λ―€λ‘œ μΆ©λŒμ„ ν”Όν•˜κΈ° μœ„ν•΄ 인코딩이 ν•„μš”ν•©λ‹ˆλ‹€.

λŒ€ν‘œμ μΈ μ˜ˆμ•½ 문자

 

HTML URL Encoding Reference

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

 μƒμ„Έν•œ λ‚΄μš©μ€ μœ„μ— 링크λ₯Ό 톡해 ν™•μΈν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€. 많이 μ‚¬μš©λ˜λŠ” μ˜ˆμ•½ 문자λ₯Ό μˆ™μ§€ν•˜λ©΄ μ’‹μ§€λ§Œ.. κ·Έ 뢀뢄은 μ‚¬μš©ν•˜λ‹€ 보면 λŠ˜κΈ°λ„ ν•˜κ³  μ§œν”Ό 툴둜 λŒλ €μ„œ ν•˜λŠ” κ²½μš°κ°€ λ‹€λ°˜μ΄κΈ°μ— μ‚¬μš©λ˜λŠ” νˆ΄μ„ κ²€μƒ‰ν•˜μ‹œκ±°λ‚˜ μ•„λž˜ 링크λ₯Ό 톡해 ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.

 

dreamhack-tools

 

tools.dreamhack.games


이쀑 인코딩(Double Encoding)

 URL 디코딩을 μˆ˜ν–‰ν•˜λŠ” κ³Όμ •μ—μ„œ μž…λ ₯값을 두 번 URL μΈμ½”λ”©ν•˜λŠ” 기법

 μ΄λ‘œ 인해 URL μΈμ½”λ”©λœ 값이 ν•œ 번 더 μΈμ½”λ”©λ˜μ–΄ % λ¬Έμžκ°€ %25둜 ν‘œν˜„λ˜λŠ” κ²°κ³Όλ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅λ°±λ¬ΈμžλŠ” URL 인코딩 μ‹œ %20으둜 ν‘œν˜„λ˜λŠ”λ°, 이쀑 인코딩을 μ μš©ν•˜λ©΄ %2520으둜 ν‘œν˜„λ©λ‹ˆλ‹€.

μ •λ¦¬ν•˜λ©΄, μ΄μ€‘ μΈμ½”딩은 μž…λ ₯값을 λ‘ λ²ˆ URL μΈμ½”λ”©ν•˜μ—¬ % λ¬Έμžλ₯Ό %25둜 ν‘œν˜„ν•˜λŠ” κΈ°λ²•μž…λ‹ˆλ‹€.


HTML 인코딩

 HTML λ¬Έμ„œμ—μ„œ 특수문자(<, >)듀은 νŠΉμ • κΈ°λŠ₯을 μˆ˜ν–‰ν•  수 있기 λ•Œλ¬Έμ— μ•…μ˜μ μΈ 곡격에 이용될 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό λ°©μ–΄ν•˜κΈ° μœ„ν•΄ νŠΉμˆ˜λ¬Έμžλ“€μ„ μΈμ½”λ”©ν•˜μ—¬ μ•ˆμ „ν•˜κ²Œ ν‘œμ‹œν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 인코딩은 슀크립트 싀행에 이용될 수 μžˆλŠ” νŠΉμˆ˜λ¬Έμžλ“€μ„ λ³€ν™˜ν•˜μ—¬ HTML λ¬Έμ„œ μ•ˆμ—μ„œ μ•ˆμ „ν•˜κ²Œ ν‘œν˜„ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.

  • μŒλ”°μ˜΄ν‘œ("): &quot;
  • ν™‘λ”°μ˜΄ν‘œ('): &apos;
  • μ•€λ“œκΈ°ν˜Έ(&): &amp;
  • μ—¬λŠ” κΊ½μ‡ κ΄„ν˜Έ(<): &lt;
  • λ‹«λŠ” κΊ½μ‡ κ΄„ν˜Έ(>): &gt;
  • 곡백문자(Space): &nbsp;

Base64 Encoding

 μ¦‰, Base64λŠ” λ°”μ΄λ„ˆλ¦¬ 데이터λ₯Ό ASCII 문자둜 이루어진 λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•˜λŠ” 인코딩 방식[각주:1]을 μ‚¬μš©λ©λ‹ˆλ‹€.

 

 μΈμ½”λ”©λœ λ¬Έμžμ—΄μ€ μ•ŒνŒŒλ²³ λŒ€μ†Œλ¬Έμž(a-zA-Z), 숫자(0-9), "+"와 "/" 기호둜 κ΅¬μ„±λ˜λ©°, "="λ₯Ό μ‚¬μš©ν•˜μ—¬ 끝을 μ•Œλ¦½λ‹ˆλ‹€. 그리고 Base64둜 μΈμ½”λ”©ν•˜λ©΄ 데이터 크기가 μ•½ 33% μ¦κ°€ν•œλ‹€λŠ” νŠΉμ§•μ΄ μžˆμŠ΅λ‹ˆλ‹€.


Base64 인코딩은 λ‹€μŒκ³Ό 같은 ν”„λ‘œμ„ΈμŠ€λ₯Ό 톡해 μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€:

  1. 각 κΈ€μžλ₯Ό 8bit(1byte)의 λΈ”λŸ­μœΌλ‘œ λ‚˜λˆ”
  2. (8bit * 3) = 24bit(3bytes)의 그룹을 λ§Œλ“¬
  3. 24bit/6bit λ‹¨μœ„μ˜ κ°œλ³„ 그룹으둜 λ‚˜λˆ”
  4. 각 6bit λ‹¨μœ„μ˜ κ°œλ³„ 그룹을 μƒ‰μΈν‘œμ— 따라 λ³€ν™˜ν•©λ‹ˆλ‹€.
  5. 24bit κ·Έλ£Ή κ΅¬μ„±μ‹œ 8bit λ‹¨μœ„λ‘œ μ±„μ›Œμ§€μ§€ μ•Šκ³  λˆ„λ½λ˜λŠ” 경우 κΈ€μžμˆ˜λ§ŒνΌ "="둜 채움

ν•΄λ‹Ή λ¬Έμžμ—΄μ„ 인코딩 ν•œ λͺ¨μŠ΅
세뢀적인 μ„€λͺ…에 λ”°λ₯Έ λ³€ν™˜

μ‹€μŠ΅(μ˜ˆμ‹œ)해보기
더보기
μœ„μ™€ 같이 λ‹€λ₯Έ λ¬Έμžμ—΄μ„ 생성학 λ§Œλ“€μ–΄λ΄…μ‹œλ‹€..
 

Base64 visualizer

 

kevinlitchfield.com

 ν•΄λ‹Ή μ‚¬μ΄νŠΈλ₯Ό 톡해 확인 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 ν΄λΌμ΄μ–ΈνŠΈλŠ” 이후 ν•΄λ‹Ή 정보λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ μΏ ν‚€λ₯Ό μ„œλ²„μ—κ²Œ 전달(GET)ν•˜μ—¬ 데이터λ₯Ό λ°›λŠ” ν˜•μ‹μœΌλ‘œ μ§„ν–‰λ©λ‹ˆλ‹€. 이λ₯Ό 톡해 ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„λ‘œλΆ€ν„° λ°œκΈ‰λ°›μ€ μΏ ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ 인증, μ„Έμ…˜ μœ μ§€, μƒνƒœ 관리 등을 μˆ˜ν–‰ν•˜κ²Œ λ©λ‹ˆλ‹€.


μœ λ‹ˆμ½”λ“œ 인코딩(Unicode Encoding)

 μœ λ‹ˆμ½”λ“œ 인코딩은 λ‹€μ–‘ν•œ 문자λ₯Ό μ»΄ν“¨ν„°μ—μ„œ ν‘œν˜„ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” 인코딩 λ°©μ‹μž…λ‹ˆλ‹€. μœ λ‹ˆμ½”λ“œλŠ” μ „ μ„Έκ³„μ˜ λͺ¨λ“  문자λ₯Ό κ³ μœ ν•œ μ½”λ“œ 포인트[각주:2]둜 λ§€ν•‘ν•˜λŠ” ν‘œμ€€μ΄λ©°, λ‹€μ–‘ν•œ 문자 μ„ΈνŠΈλ₯Ό ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

ν•΄λ‹Ή λ¬Έμžμ—΄μ„ μœ λ‹ˆμ½”λ“œλ‘œ ν‘œν˜„ν•œ

μ–΄λ–»κ²Œ μ €μž₯ν•˜λŠ”μ§€μ— λ”°λ₯Έ ν˜•μ‹(μ—”λ””μ•ˆ)은 μ•„λ ˆ 이미지λ₯Ό 톡해 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

더보기
읡슀 μ½”λ“œ μ„€λͺ…μ—μ„œ μ •λ¦¬ν•œ λ‚΄μš©μΈλ°.. 데이터λ₯Ό μ €λŸ° μ‹μœΌλ‘œ μ €μž₯ν•©λ‹ˆλ‹€.
// Name: endian.c
// Compile: gcc -o endian endian.c
 
#include <stdio.h>
 
int main() {
  unsigned long long n = 0x4005a7;
  printf("Low <-----------------------> High\n");
 
  for (int i = 0; i < 8; i++) printf("0x%hhx ", *((unsigned char*)(&n) + i));
  return 0;
}

 λ™μž‘ κ΅¬μ‘°λ‚˜ 데이터 μ €μž₯ λ“±μ˜ μžμ„Έν•œ λ‚΄μš©μ€ μ‹œμŠ€ν…œ νŠΈλž™μ—μ„œ 배울 뢀뢄이기에 μ—¬κΈ΄ μ›ΉμœΌλ‘œ μ„€λͺ…은 λ„˜μ–΄κ°€κ² μŠ΅λ‹ˆλ‹€. λ˜ν•œ μœ λ‹ˆμ½”λ“œ μΈμ½”λ”©μ˜ λ”μš± μƒμ„Έν•œ λ‚΄μš©μ€ μ•„λž˜μ— λͺ…μ‹œλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

 

Unicode - Wikipedia

From Wikipedia, the free encyclopedia Character encoding standard Unicode, formally The Unicode Standard,[note 1][note 2] is an information technology standard for the consistent encoding, representation, and handling of text expressed in most of the world

en.wikipedia.org

 

κ°€μž₯ 일반적인 μœ λ‹ˆμ½”λ“œ 인코딩 방식은 UTF-8κ³Ό UTF-16μž…λ‹ˆλ‹€.

UTF-8

 κ°€λ³€ 길이 인코딩 λ°©μ‹μœΌλ‘œ, ASCII λ¬ΈμžλŠ” 1λ°”μ΄νŠΈλ‘œ ν‘œν˜„λ˜κ³ , λ‹€λ₯Έ μœ λ‹ˆμ½”λ“œ λ¬ΈμžλŠ” 2λ°”μ΄νŠΈ μ΄μƒμœΌλ‘œ ν‘œν˜„λ©λ‹ˆλ‹€. 이λ₯Ό 톡해 μ˜μ–΄μ™€ 기타 λŒ€λΆ€λΆ„μ˜ μ–Έμ–΄λ₯Ό 효율적으둜 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

UTF-16

 κ³ μ • 길이 인코딩 λ°©μ‹μœΌλ‘œ, λͺ¨λ“  μœ λ‹ˆμ½”λ“œ 문자λ₯Ό 2λ°”μ΄νŠΈ λ˜λŠ” 4λ°”μ΄νŠΈλ‘œ ν‘œν˜„ν•©λ‹ˆλ‹€. κΈ°λ³Έ λ‹€κ΅­μ–΄ 평면(Basic Multilingual Plane, BMP)에 μ†ν•˜λŠ” λ¬ΈμžλŠ” 2λ°”μ΄νŠΈλ‘œ ν‘œν˜„λ˜κ³ , λ‚˜λ¨Έμ§€λŠ” 4λ°”μ΄νŠΈλ‘œ ν‘œν˜„λ©λ‹ˆλ‹€

 

 μœ λ‹ˆμ½”λ“œ 인코딩을 μ‚¬μš©ν•˜λ©΄ λ‹€μ–‘ν•œ 언어와 문자λ₯Ό λ™μΌν•œ λ¬Έμ„œ λ˜λŠ” λ°μ΄ν„°μ—μ„œ ν‘œν˜„ν•  수 있으며, μ „ μ„Έκ³„μ˜ λ‹€μ–‘ν•œ ν…μŠ€νŠΈ 데이터λ₯Ό μƒν˜Έ ν˜Έν™˜μ„± 있게 μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


μ•Œλ“€μ‹ μž‘

01234
ν•΄λ‹Ή Unicode Encoding의 적용 μ˜ˆμ‹œ


Hex Encoding

 Hex 인코딩은 16μ§„μˆ˜λ‘œ ν‘œν˜„λœ λ¬Έμžμ—΄λ‘œ λ°”μ΄λ„ˆλ¦¬ 데이터λ₯Ό λ³€ν™˜ν•˜λŠ” 인코딩 κΈ°λ²•μž…λ‹ˆλ‹€. 각 λ¬ΈμžλŠ” λ°”μ΄νŠΈμ˜ 16μ§„μˆ˜ 값을 λ‚˜νƒ€λ‚΄λ©°, 이λ₯Ό 톡해 λ°”μ΄λ„ˆλ¦¬ 데이터λ₯Ό 일반 ν…μŠ€νŠΈλ‘œ ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μœ„μ— μžˆλŠ” 이미지λ₯Ό λ³΄μ‹œλ©΄μ„œ Hex Encoding을 λ‹€μ‹œ μƒκ°ν•΄λ³΄μ‹œλ©΄ 금방 이해 될 κ²λ‹ˆλ‹€.


참고 자료

 

인코딩(Encoding) | Pentest Gym | λ²„κ·Έλ°”μš΄ν‹°ν΄λŸ½

이번 ν›ˆλ ¨μ—μ„œλŠ” μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©λ˜λŠ” μ—¬λŸ¬κ°€μ§€ 인코딩 기법을 λ‹€λ£Ήλ‹ˆλ‹€.인코딩(Encoding)μ΄λž€?μΈμ½”λ”©μ΄λž€ μ–΄λ–€ ν•œ ν˜•μ‹μ˜ 데이터λ₯Ό λ‹€λ₯Έ ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜λŠ” κΈ°μˆ μ΄λ‚˜ κ³Όμ •

www.bugbountyclub.com

μ°Έκ³  이미지

 

  1. 주둜 μ΄λ©”μΌμ΄λ‚˜ μ›Ήμ—μ„œ μ΄λ―Έμ§€λ‚˜ λ°”μ΄λ„ˆλ¦¬ 데이터λ₯Ό μ „μ†‘ν•˜κ±°λ‚˜ λ‚œλ…ν™”ν•˜λŠ” μš©λ„ [본문으둜]
  2. μœ λ‹ˆμ½”λ“œ μ»¨μ†Œμ‹œμ—„μ΄λž€ λ‹¨μ²΄μ—μ„œ κ΄€λ¦¬ν•˜κ³  있으며, μœ λ‹ˆμ½”λ“œ μ»¨μ†Œμ‹œμ—„μ—μ„œλŠ” 각 κΈ€μžλ§ˆλ‹€ κ³ μœ ν•œ μ½”λ“œλ₯Ό 맀핑해 λ†“μ•˜μŠ΅λ‹ˆλ‹€. 이 κ³ μœ ν•œ μ½”λ“œλ₯Ό μ½”λ“œ 포인트(Code Point)라고 μΉ­ν•©λ‹ˆλ‹€. [본문으둜]