Python Internal Read Gadgets

Tip

AWS ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°:HackTricks Training AWS Red Team Expert (ARTE)
GCP ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training GCP Red Team Expert (GRTE) Azure ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks μ§€μ›ν•˜κΈ°

Basic Information

λ‹€μ–‘ν•œ 취약점, 예λ₯Ό λ“€μ–΄ Python Format Strings λ˜λŠ” Class PollutionλŠ” 파이썬 λ‚΄λΆ€ 데이터λ₯Ό 읽을 수 μžˆμ§€λ§Œ μ½”λ“œλ₯Ό μ‹€ν–‰ν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ, νŽœν…ŒμŠ€ν„°λŠ” μ΄λŸ¬ν•œ 읽기 κΆŒν•œμ„ μ΅œλŒ€ν•œ ν™œμš©ν•˜μ—¬ λ―Όκ°ν•œ κΆŒν•œμ„ μ–»κ³  취약점을 μƒμŠΉμ‹œμΌœμ•Ό ν•©λ‹ˆλ‹€.

Flask - Read secret key

Flask μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 메인 νŽ˜μ΄μ§€μ—λŠ” μ•„λ§ˆλ„ 이 비밀이 κ΅¬μ„±λœ app μ „μ—­ 객체가 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

app = Flask(__name__, template_folder='templates')
app.secret_key = '(:secret:)'

이 경우, Python μƒŒλ“œλ°•μŠ€ 우회 νŽ˜μ΄μ§€μ—μ„œ μ „μ—­ 객체에 μ ‘κ·Όν•˜κΈ° μœ„ν•œ μ–΄λ–€ 가젯을 μ‚¬μš©ν•˜μ—¬ 이 객체에 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

취약점이 λ‹€λ₯Έ 파이썬 νŒŒμΌμ— μžˆλŠ” 경우, μ „μ—­ 객체 app.secret_key에 μ ‘κ·Όν•˜κΈ° μœ„ν•΄ 메인 파일둜 이동할 수 μžˆλŠ” 가젯이 ν•„μš”ν•˜λ©°, 이λ₯Ό 톡해 Flask λΉ„λ°€ ν‚€λ₯Ό λ³€κ²½ν•˜κ³  이 ν‚€λ₯Ό μ•Œκ³  κΆŒν•œ μƒμŠΉμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이와 같은 νŽ˜μ΄λ‘œλ“œλŠ” 이 μž‘μ„±λ¬Όμ—μ„œ:

__init__.__globals__.__loader__.__init__.__globals__.sys.modules.__main__.app.secret_key

이 νŽ˜μ΄λ‘œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ app.secret_key (κ·€ν•˜μ˜ μ•±μ—μ„œ 이름이 λ‹€λ₯Ό 수 있음)λ₯Ό λ³€κ²½ν•˜μ—¬ μƒˆλ‘œμš΄ 더 λ§Žμ€ κΆŒν•œμ˜ ν”ŒλΌμŠ€ν¬ 쿠킀에 μ„œλͺ…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Werkzeug - machine_id 및 node uuid

이 νŽ˜μ΄λ‘œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ machine_id 및 uuid λ…Έλ“œμ— μ ‘κ·Όν•  수 있으며, μ΄λŠ” Werkzeug 핀을 μƒμ„±ν•˜λŠ” 데 ν•„μš”ν•œ μ£Όμš” λΉ„λ°€μž…λ‹ˆλ‹€. 디버그 λͺ¨λ“œκ°€ ν™œμ„±ν™”λœ 경우 /consoleμ—μ„œ 파이썬 μ½˜μ†”μ— μ ‘κ·Όν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug]._machine_id}
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug].uuid._node}

Warning

app.py의 μ„œλ²„ 둜컬 경둜λ₯Ό μ–»μœΌλ €λ©΄ μ›Ή νŽ˜μ΄μ§€μ—μ„œ 였λ₯˜λ₯Ό 생성해야 ν•˜λ©°, μ΄λŠ” 경둜λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

취약점이 λ‹€λ₯Έ 파이썬 νŒŒμΌμ— μžˆλŠ” 경우, 메인 파이썬 νŒŒμΌμ—μ„œ 객체에 μ ‘κ·Όν•˜κΈ° μœ„ν•œ 이전 Flask νŠΈλ¦­μ„ ν™•μΈν•˜μ„Έμš”.

Tip

AWS ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°:HackTricks Training AWS Red Team Expert (ARTE)
GCP ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training GCP Red Team Expert (GRTE) Azure ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks μ§€μ›ν•˜κΈ°