waffle
μ™€ν”Œκ³΅μž₯
waffle
전체 방문자
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기 (72)
    • πŸ“’ Daily Log (2)
    • πŸ”¨ Dev_BE (5)
      • κ°œλ…μ •λ¦¬ (4)
      • 기둝 (1)
    • πŸ”¨ Dev_FE (4)
    • πŸ”¨ Dev_DB (1)
    • βš™ Dev_Ops (0)
    • πŸ”‘ Lang (2)
      • Python (2)
    • πŸ’‘ ν”„λ‘œμ νŠΈ (9)
      • Base (1)
      • μ•„λŒ€λ°€λ§΅ (8)
    • πŸƒπŸ» μ™ΈλΆ€ν™œλ™ (2)
      • [ν”„λ¦¬μ½”μŠ€] μš°μ•„ν•œν…Œν¬μ½”μŠ€ 7κΈ° - BE (2)
    • πŸ“• [STUDY] 개발 (13)
      • [STUDY] μ•Œκ³ λ¦¬μ¦˜ (9)
      • 동계 μŠ€ν„°λ”” [Do-iT: μ›ΉνŒ©] (2021) (4)
    • πŸ“™ [STUDY] AI (2)
      • Tensorflow (2)
    • πŸ” λ³΄μ•ˆ,μ •λ³΄λ³΄ν˜Έ (32)
      • CTF (2)
      • πŸ“˜ [STUDY] ν¬λ Œμ‹ (15)
      • πŸ“˜ [STUDY] 취약점 (4)
      • πŸ“˜ [STYDY] 리버싱 (11)
    • πŸ“” IT 법λ₯  (0)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • νƒœκ·Έ

곡지사항

인기 κΈ€

νƒœκ·Έ

  • ν”„λ¦¬μ½”μŠ€
  • sql
  • λ°μΌλ¦¬μ•Œκ³ 
  • API
  • λ¬Έμžμ—΄
  • scrum
  • κ°œλ°œλ°±μ„œ
  • 자료ꡬ쑰
  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
  • Java
  • til
  • reversing
  • μ½”λ”©ν…ŒμŠ€νŠΈ_고득점
  • js
  • μš°ν…Œμ½”
  • μš°ν…Œμ½”_7κΈ°
  • JAVA_API
  • dopwn
  • write-up
  • javascript
  • gdb
  • 개발
  • μˆ˜ν•™_1(μ—°μŠ΅)
  • μˆ˜ν•™_1
  • μ•„μ£ΌλŒ€_μ•Œκ³ λ¦¬μ¦˜_ꡐ윑
  • μ•Œκ³ λ¦¬μ¦˜
  • μš°μ•„ν•œν…Œν¬μ½”μŠ€
  • Weekly
  • λ°±μ€€
  • μ—°μŠ΅_자료ꡬ쑰

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
waffle

μ™€ν”Œκ³΅μž₯

[ DoPwn ] Week1 - "Magic Spell" Write Up
πŸ” λ³΄μ•ˆ,μ •λ³΄λ³΄ν˜Έ/πŸ“˜ [STYDY] 리버싱

[ DoPwn ] Week1 - "Magic Spell" Write Up

2021. 11. 22. 19:42
728x90

Magic Spell μ‹€ν–‰ κ²°κ³Ό

Magic Spell ν”„λ‘œκ·Έλž¨μ€ 주문을 μž…λ ₯λ°›μœΌλ©΄ ν•΄λ‹Ή 주문에 따라 μ •ν•΄μ§„ λͺ…령을 μ‹€ν–‰ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ΄λ‹€.

λ”°λΌμ„œ ν”„λ‘œκ·Έλž¨ μ•ˆμ—λŠ” 주문을 λΉ„κ΅ν•˜λŠ” cmp λͺ…령이 μ‘΄μž¬ν•  것 이라 μœ μΆ”ν•œ λ’€ μ ‘κ·Όν–ˆλ‹€.

 

gdb - pd main μ‹€ν–‰κ²°κ³Ό

main ν•¨μˆ˜μ˜ λ‚΄μš©μ€ spell1 ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λŠ” 것을 μ œμ™Έν•˜κ³ λŠ” 별 λ‚΄μš©μ΄ μ—†μ—ˆλ‹€.

λ”°λΌμ„œ spell1 ν•¨μˆ˜μ˜ λ‚΄μš©μ„ ν•¨κ»˜ ν™•μΈν–ˆλ‹€.

 

spell1 ν•¨μˆ˜μ— μ˜ˆμƒν•œ 바와 같이 λΉ„κ΅ν•˜λŠ” 뢀뢄이 μ‘΄μž¬ν•œλ‹€. 0x4d와 λΉ„κ΅ν•˜λŠ” κ²ƒμœΌλ‘œ 보아, λ¬Έμžμ—΄ "M"이 μž…λ ₯되면 같은 κ²ƒμœΌλ‘œ μΈμ‹λ˜μ–΄ μ•„λž˜μ— jumpκ°€ λ˜μ§€ μ•Šκ³  spell2둜 λ„˜μ–΄κ°ˆ 수 μžˆμŒμ„ μ•Œ 수 μžˆλ‹€.

gdb - λ¬Έμžμ—΄ μž…λ ₯ 직전 (scanf)

λ¬Έμžμ—΄ μž…λ ₯ 직전을 보면, 0x7fffffffe4c0 μœ„μΉ˜, 즉 rsi에 μž…λ ₯λ°›λŠ” λ¬Έμžμ—΄μ— 듀어감을 μ•Œ 수 μžˆλ‹€. λΉ„κ΅ν•˜λŠ” 뢀뢄은 rbp-1, 즉 μž…λ ₯λ°›λŠ”κ³³λ³΄λ‹€ 8*4 더 κ°„ κ³³μ—μ„œ ν™•μΈν•˜λ―€λ‘œ, 이런 크기의 μž„μ˜μ˜ λ¬Έμžμ—΄λ‘œ μ±„μ›Œμ£Όλ©΄ 될 것이라 μƒκ°ν–ˆλ‹€.

 

ν•˜μ§€λ§Œ μ—¬κΈ°μ—μ„œ κ°„κ³Όν•œ 것이 ν•˜λ‚˜ μžˆλŠ”λ°, rbp-1 μ΄λ―€λ‘œ 8*4보닀 1개 μž‘μ€ κ³³μ—μ„œ ν™•μΈν•œλ‹€λŠ” 것과, BYTE PTR μ΄λ―€λ‘œ κΈ€μž 1개만 ν™•μΈν•œλ‹€λŠ” μ μ΄μ—ˆλ‹€. (μ—¬κΈ°μ—μ„œ 20μ‹œκ°„ λ„˜κ²Œ κ±Έλ¦Ό)

 

λ”°λΌμ„œ μ•žμ— 31개 문자λ₯Ό μ•„λ¬΄κ±°λ‚˜ μ±„μš°κ³ , λ§ˆμ§€λ§‰ 문자λ₯Ό M 으둜 μž…λ ₯ν–ˆλ‹€.

gdb - M 32개 μž…λ ₯ ν›„ ν™”λ©΄

μ˜λ„ν•œ 바와 같이 overflowκ°€ λ°œμƒν•˜μ—¬ jumpκ°€ μˆ˜ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€κ³  ν‘œμ‹œλ˜μ—ˆλ‹€.

 

gdb - spell2 λ‚΄λΆ€ 비ꡐ뢀

spell2 ν•¨μˆ˜ μ•ˆμ—λ„ 내뢀에 λΉ„κ΅ν•˜λŠ” 뢀뢄이 μžˆλ‹€. μ—¬κΈ°μ—μ„œλŠ” λ¬Έμžμ—΄μ„ λΉ„κ΅ν•˜κΈ° μœ„ν•΄ strncmp ν•¨μˆ˜κ°€ μ‚¬μš©λ˜μ—ˆκ³ , 이 ν•¨μˆ˜μ— λ“€μ–΄κ°€λŠ” λ¬Έμžμ—΄ 2κ°œκ°€ rsi와 rdi에 μ„€μ •λ˜μ—ˆλ‹€.

gdb - x/s μ‹€ν–‰κ²°κ³Ό

각 λ¬Έμžμ—΄μ„ ν™•μΈν•˜κΈ° μœ„ν•΄ x/s λͺ…령을 μ‚¬μš©ν–ˆλ‹€. x/sλŠ” νŠΉμ • λ©”λͺ¨λ¦¬ μœ„μΉ˜μ˜ λ‚΄μš©μ„ λ¬Έμžμ—΄λ‘œ 보여쀀닀.

확인결과 첫번째 μœ„μΉ˜λŠ” "pwnable!", λ‘λ²ˆμ§Έ μœ„μΉ˜λŠ” λΉ„μ–΄μžˆλ‹€. μœ„μ—μ„œ μž…λ ₯λ˜λŠ” scanf의 μœ„μΉ˜μ™€ μ•„λž˜ μ£Όμ†Œμ˜ μ£Όμ†Œκ°’ 차이가 16byte밖에 μ°¨μ΄λ‚˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, overflowλ₯Ό μ΄μš©ν•΄ λ‘λ²ˆμ§Έ μœ„μΉ˜λ₯Ό μ±„μš°λ©΄ 될 κ²ƒμœΌλ‘œ 보인닀.

 

'μ°¨μ΄λ‚˜λŠ” μΉΈ 수 (16) + μž…λ ₯ν•  λ¬Έμžμ—΄'을 톡해 μž…λ ₯값을 μ •ν–ˆλ‹€

 

gdb - A 16개 + 'pwnable!' μž…λ ₯ ν›„ ν™”λ©΄

μ •μƒμ μœΌλ‘œ μ˜λ„ν•˜λŠ” μœ„μΉ˜μ— μ˜λ„ν•˜λŠ” λ¬Έμžμ—΄μ΄ λ“€μ–΄κ°”μŒμ„ 확인할 수 μžˆλ‹€.

λ§ˆμŒνŽΈν•˜κ²Œ niλ₯Ό μ—°νƒ€ν•˜λ©° λ‹€μŒ λ‹¨κ³„λ‘œ μ΄λ™ν•œλ‹€.

 

이λ₯Ό 톡해 ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλœλ‹€. μœ„μ˜ μž…λ ₯듀을 파이썬 μ½”λ“œλ‘œ μž‘μ„±ν•˜μ—¬ μ»€λ§¨λ“œλΌμΈμ—μ„œ νŒŒμ΄ν”„λΌμΈμ„ 톡해 μž…λ ₯을 μžλ™ν™”μ‹œμΌ°λ‹€.

 

print "M"*32 + "\n" + "M"*16 + "pwnable!"

 

python pipeline μ‹€ν–‰κ²°κ³Ό

 

이λ₯Ό μ›κ²©μ„œλ²„ νŒŒμΌμ—μ„œ μ‹€ν–‰ν•΄ flagλ₯Ό νšλ“ν–ˆλ‹€.

 

flag νšλ“

μ™„λ£Œ!

728x90
λ°˜μ‘ν˜•

'πŸ” λ³΄μ•ˆ,μ •λ³΄λ³΄ν˜Έ > πŸ“˜ [STYDY] 리버싱' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[ DoPwn ] Week2 - "assembly" Write Up  (0) 2021.11.30
[ DoPwn ] Week1 - "system" Write Up  (0) 2021.11.22
[ DoPwn ] Week1 - "Student ID" Write Up  (0) 2021.11.20
[Whois-Internal] "EasyReverseMe" Write-Up  (0) 2021.11.08
[root-me.org] "reversing - PE x86 -0 protection" Write Up  (0) 2021.11.08
    'πŸ” λ³΄μ•ˆ,μ •λ³΄λ³΄ν˜Έ/πŸ“˜ [STYDY] 리버싱' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [ DoPwn ] Week2 - "assembly" Write Up
    • [ DoPwn ] Week1 - "system" Write Up
    • [ DoPwn ] Week1 - "Student ID" Write Up
    • [Whois-Internal] "EasyReverseMe" Write-Up
    waffle
    waffle
    개발기술 κ΄€λ ¨ 글듀은 velog에 μžˆμŠ΅λ‹ˆλ‹€ :) (https://velog.io/@cm_waffle) Developer waffle = new Waffle();

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”