(해결)

name에다 os.system('ls') 하였더니 check_session에서 os.system 그래도 출력이 됩니다.

return render_template('check_session.html', info=info) 이부분에서 매개변수로 전달된것은 문자열형태로 변환이 되어서 출력이 되는건가요?

그럴수도 있을것 같아서

다시 name에다 cos\nsystem\n(S'ls\ntR. 을 다시 주었지만 역시 코드 그대로 출력을 합니다.

또 다른 방법으로

import pickle
import base64
import os

class exploit:
def reduce(self):
str = "os.system('ls')"
return (eval, (str,))

data = pickle.dumps(exploit())
data = base64.b64encode(data)
print(data)

를 작성하고 base64로 엔코딩 한 값을 다시 name에다 주었지만 또 코드 그대로 출력합니다.

혹시 ssti를 할수 있을지 몰라 {{ info }} 등을 해보았지만 전혀 통하지 않습니다.

코드를 그대로 출력된다는점이 도저히 안풀립니다.

제가 방향을 잘못잡은건가요?

pickle.loads 빼곤 특별한게 안보입니다.

#web
작성자 정보
답변 1
avatar
Sechack
2024 Invitational Contenders

역직렬화 취약점을 통해서 RCE를 트리거할 수 있습니다. 하지만 os.system함수는 문자열을 반환하지 않아서 익스가 안된것같습니다. os.system말고
subprocess.popen함수 같은걸 써서 커맨드 실행 결과를 즉석에서 봐보세요. 근데 이문제는 사실 os command까지 쓸필요가 없긴 합니다.

2021.07.28. 00:43
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기