2023 IrisCTF) Write-up #3 (Misc/ Name that song , 2, Host Issues)

2023. 1. 12. 20:37CTF

목차

01) PWN) babyseek , ret2libm

02) PWN) baby?socat , Michael Bank

03) Misc) Name that song 1, 2 , Host Issues

04) Foren) babyforens


Misc) Name that song (417 pts)

Name that song

https://filext.com/online-file-viewer.html

위 링크를 통해 it파일을 열고 메타 데이터 확인

https://modarchive.org/index.php?request=view_by_moduleid&query=179034

메타데이터에 포함된 정보를 키워드로 검색하여 곡의 제목을 알아내었다.

Blue orian – moon gun

Irisctf{moon_gun}

Misc) Name that song2 (484 pts)

Name that song 2

https://modarchive.org/index.php?request=view_by_moduleid&query=163428

1번 문제를 풀 때 이용한 사이트 modarchive에서 소수점 아래 두자리까지 용량을 보여준다.

속성에서 알아낸 바이트를 kb in binary단위로 변경하여 636.60KB라는 것을 알아내고 사이즈 범위와 파일 포맷 필터를 이용해서 검색하려고 하였으나 검색어 없이 쉽게 검색하기 어려웠으므로 Rating 소분류에서 검색 후 파일 용량이 같은 항목을 재생하여 비교 후 제목을 알아내었다.

Carlos – hit and run

Irisctf{hit_and_run}

Misc) Name that song2 (482 pts)

Host Issues

- chal.py

import os
import subprocess
import json
from base64 import urlsafe_b64encode as b64encode

BANNER = """

Welcome to my insecure temporary data service!
1) Write data
2) Read data

"""

REMOTE = "http://0:25566/"

def check(url):
    return json.loads(subprocess.check_output(["curl", "-s", url]))

print(BANNER)
while True:
    choice = input("> ")
    try:
        print(check("http://flag_domain:25566/flag"))
    except subprocess.CalledProcessError: pass
    try:
        if choice == '1':
            env = input("Name? ")
            if check(REMOTE + "env?q=" + b64encode(env.encode()).decode())["ok"]:
                os.environ[env] = input("Value? ")
            else:
                print("No!")
        elif choice == '2':
            env = input("Name? ")
            if check(REMOTE + "env?q=" + b64encode(env.encode()).decode())["ok"]:
                if env in os.environ:
                    print(os.environ[env])
                else:
                    print("(Does not exist)")
            else:
                print("No!")
        else:
            print("Bye!")
            exit()

    except Exception as e:
        print(e)
        exit()

환경 변수를 바꿀수 있는 파이썬 코드이다. curl을 이용하여 http://flag_domain:25566/flag의 값을 가져오는데, 이것을 http://localhost:25566/flag로 변경해야한다.

환경 변수 중 proxy_http라는 변수가 있는데 이를 변경하여 domain을 변경시킬 수 있다.

플래그 획득

irisctf{very_helpful_error_message}