Skip to content

Files

Latest commit

d523eea Β· Dec 19, 2023

History

History
This branch is 14 commits ahead of gunh0/kr-vulhub:main.

SSTI

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Dec 17, 2023
Dec 17, 2023
Dec 17, 2023
Dec 17, 2023
Dec 17, 2023
Dec 17, 2023
Dec 19, 2023

Flask (Jinja2) SSTI (Server Side Template Injection)

μ‹ κ²½λ°© (@positiveWand)


μš”μ•½

  • μ„œλ²„ νƒ¬ν”Œλ¦Ώ 엔진은 μ‚¬μš©μžλ‘œλΆ€ν„° μš”μ²­μ΄ λ“€μ–΄μ˜¬λ•Œλ§ˆλ‹€ μž‘μ„±λœ ν…œν”Œλ¦Ώ νŒŒμΌμ„ λ Œλ”λ§ν•˜κ³  κ·Έ κ²°κ³Όλ₯Ό μ‚¬μš©μžμ—κ²Œ λ°˜ν™˜ν•œλ‹€.
  • μ„œλ²„λŠ” μ„œλ²„μ— μ €μž₯된 데이터, μ‚¬μš©μž μš”μ²­κ³Ό ν•¨κ»˜ 전달받은 데이터 λ“±κ³Ό 같이 μ„œλ²„μ—μ„œ μ‚¬μš©κ°€λŠ₯ν•œ 데이터듀을 μ΄μš©ν•΄ λ Œλ”λ§μ„ μˆ˜ν–‰ν•œλ‹€.
  • 이 취약점은 Flask와 Flaskμ—μ„œ μ‚¬μš©ν•˜λŠ” ν…œν”Œλ¦Ώ 엔진 "Jinja2"λ₯Ό μ‚¬μš©ν•  λ•Œ λ°œμƒ. μ‚¬μš©μžκ°€ 잘 κ΅¬μ„±ν•œ λ Œλ”λ§ μ½”λ“œ λ¬Έμžμ—΄μ„ μ„œλ²„μ— μ „λ‹¬ν•˜κ³  μ„œλ²„κ°€ 이 λ¬Έμžμ—΄μ„ κ·ΈλŒ€λ‘œ ν…œν”Œλ¦Ώ 엔진에 μ‚½μž…ν•˜μ—¬ λ Œλ”λ§μ„ μˆ˜ν–‰ν•œλ‹€λ©΄ μ‚¬μš©μžκ°€ μ „λ‹¬ν•œ μž„μ˜μ˜ Python μ½”λ“œκ°€ 싀행될 수 μžˆλ‹€.

ν™˜κ²½ ꡬ성 및 μ‹€ν–‰

  1. docker compose up -d λ₯Ό μ‹€ν–‰ν•˜μ—¬ ν…ŒμŠ€νŠΈ ν™˜κ²½μ„ μ‹€ν–‰.
  2. http://your-ip:8000/?name={{233*233}}에 μ ‘μ†ν•˜μ—¬ 54289κ°€ 좜λ ₯λ˜λŠ”μ§€ ν™•μΈν•˜μ—¬ SSTI 취약점이 μ‘΄μž¬ν•¨μ„ ν™•μΈν•©λ‹ˆλ‹€.
  3. python poc.pyλ₯Ό μ‹€ν–‰ν•˜μ—¬ 곡격을 μˆ˜ν–‰ν•˜λŠ” URL을 확인.
  4. ν•΄λ‹Ή URL에 μ ‘μ†ν•˜λ©΄ μ‚½μž…ν•œ μ½”λ“œκ°€ μ‹€ν–‰λ˜μ–΄ μ„œλ²„ ν”„λ‘œμ„ΈμŠ€μ˜ idκ°€ 좜λ ₯λ˜λŠ” 것을 확인할 수 있음.

+) poc.py의 script λ³€μˆ˜μ˜ 값을 μ›ν•˜λŠ” Python μ½”λ“œλ‘œ λ°”κΎΈλ©΄ ν•΄λ‹Ή μ½”λ“œκ°€ μ„œλ²„μ—μ„œ μ‹€ν–‰λœλ‹€. (κΈ°λ³Έ μ½”λ“œλŠ” μ„œλ²„ ν”„λ‘œμ„ΈμŠ€μ˜ idλ₯Ό 좜λ ₯ν•˜λŠ” μ½”λ“œ)


κ²°κ³Ό

poc μ‹€ν–‰ 이미지

μ„œλ²„λ‘œλΆ€ν„° 받은 λ°˜ν™˜κ°’


정리

  • 이 취약점은 μ‚¬μš©μžκ°€ μ„œλ²„μ—μ„œ μž„μ˜μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ„λ‘ ν•  수 있게 λ§Œλ“€κΈ° λ•Œλ¬Έμ— μœ„ν—˜ν•˜λ‹€. μ•ˆμ „ν•œ μ›Ή μ„œλΉ„μŠ€ μš΄μ˜μ„ μœ„ν•΄μ„œλŠ” μ„œλ²„ κ°œλ°œμžκ°€ ν˜Ήμ€ 라이브러리, ν”„λ ˆμž„μ›Œν¬μ—μ„œ μ‚¬μš©μžκ°€ μ „λ‹¬ν•œ 데이터가 ν…œν”Œλ¦Ώ μ½”λ“œμΈμ§€ ν™•μΈν•˜μ—¬ ν•„ν„°λ§ν•˜κ±°λ‚˜ μ‚¬μš©μž μž…λ ₯ 데이터가 μ‹€ν–‰μœΌλ‘œ 이어지지 μ•Šλ„λ‘ ν•΄μ•Όν•œλ‹€.