**복기용**
문제 분석
해당 문제는 ImageMagick을 활용하여 이미지를 업로드하는 기능이 있는 문제이다. 해당 문제를 풀기 위해서는 ImageMagick에서 발생하는 취약점인 CVE-2022-44268 사용해서 LFI를 터트려야 한다.
CVE-2022-44268
해당 취약점은 ImageMagick에서 convert로 이미지를 수정할 때, ReadOnePNGImage라는 함수에서 profile이라는 키워드가 발견될 경우에 발생하는 취약점이다. 여기서는 LFI 뿐만이 아니라 Privilege escalation도 발견될 수 있다.
코드 및 취약점 분석
@app.route('/logo-sm.png')
def logo_small():
# A smaller images looks better on mobile so I just resize it and serve that
logo_sm_path = os.path.join(app.config['UPLOAD_FOLDER'], 'logo-sm.png')
if not os.path.exists(logo_sm_path):
os.system("magick/bin/convert logo.png -resize 10% " + os.path.join(app.config['UPLOAD_FOLDER'], 'logo-sm.png'))
return send_from_directory(app.config['UPLOAD_FOLDER'], 'logo-sm.png')
취약점은 해당 함수에서 발생한다.
<간단한 정리>
1. logo_sm_path 변수에 "/uploads/logo-sm.png" 경로를 저장한다.
2. 만약 "/upload/logo-sm.png 경로에 파일이 존재하지 않는다면
- convert logo.png -resize 10% /uploads/logo-sm.png 커맨드 실행
3. 만약 파일이 존재한다면 /uploads/logo-sm.png 반환
여기서 취약한 코드는 바로
os.system("magick/bin/convert logo.png -resize 10% " + os.path.join(app.config['UPLOAD_FOLDER'], 'logo-sm.png'))
이다.
-> 해당 커맨드는 logo.png를 resize하고 /uploads/logo-sm.png로 다시 저장하는 커맨드이다.
익스플로잇
CVE-2022-44268는 convert 할 때 발생한다. 따라서 우리는 logo.png를 악의적인 파일로 덮어쓴다면 악의적인 logo.png가 logo-sm.png로 저장되어 우리는 LFI를 터트릴 수 있을 것이다.
<간략 정리>
- pngcrush로 pngout.png 생성
- pngout.png 업로드 → burp에서 ../logo.png로 filename 수정해서 logo.png dump
- /logo-sm.png 엔드포인트 접속 → 여기서 logo-sm.png 다운로드
- identify -verbose logo-sm.png || strings logo-sm.png로 hex 확인
- 7363726970744354467b7430305f6d7563685f6d343669635f6638393538343539376664327d0a → scriptCTF{t00_much_m46ic_f89584597fd2}
-> 여기서 우리가 ../logo.png로 Filename을 수정하는 이유는 우리가 업로드하는 모든 파일들은 uploads 디렉터리에 저장되기 때문에 ../logo.png를 해줘야만 logo.png가 덮어써지기 때문이다.
과정(사진)
'CTF & Wargame(CTF's)' 카테고리의 다른 글
| SunshineCTF writeup (0) | 2025.10.17 |
|---|---|
| CCE 예선 - Photo Editing(web) 라이트업 (0) | 2025.10.17 |
| WatCTF writeup(web) (0) | 2025.09.11 |
| 제 31회 해킹캠프 CTF write up (0) | 2025.09.10 |
| Full Weak Engineer CTF 2025 Writeup(web) (0) | 2025.09.10 |