ssongk
ssongk
ssongk
전체 방문자
오늘
어제

공지사항

  • resources
  • 분류 전체보기 (626)
    • CTF (24)
    • background (79)
      • fuzzing (5)
      • linux (29)
      • linux kernel (15)
      • windows (2)
      • web assembly (1)
      • embedded (0)
      • web (13)
      • crypto (9)
      • mobile (1)
      • AI (1)
      • etc.. (3)
    • write-up(pwn) (171)
      • dreamhack (102)
      • pwn.college (4)
      • pwnable.xyz (51)
      • pwnable.tw (3)
      • pwnable.kr (5)
      • G04T (6)
    • write-up(rev) (32)
      • dreamhack (24)
      • reversing.kr (8)
    • write-up(web) (195)
      • dreamhack (63)
      • LOS (40)
      • webhacking.kr (69)
      • websec.fr (3)
      • wargame.kr (6)
      • webgoat (1)
      • G04T (7)
      • suninatas (6)
    • write-up(crypto) (19)
      • dreamhack (16)
      • G04T (1)
      • suninatas (2)
    • write-up(forensic) (53)
      • dreamhack (5)
      • ctf-d (47)
      • suninatas (1)
    • write-up(misc) (13)
      • dreamhack (12)
      • suninatas (1)
    • development (31)
      • Linux (14)
      • Java (13)
      • Python (1)
      • C (2)
      • TroubleShooting (1)
    • 자격증 (8)
    • 이산수학 (1)
    • 정보보안 (0)
hELLO · Designed By 정상우.
ssongk

ssongk

SECCON CTF 2023 Quals
CTF

SECCON CTF 2023 Quals

2023. 9. 17. 15:44

1개 겨우 풀었습니다 ㅎㅎ..

 


REV

jumpout

IDA로 디컴파일이 잘 안되어서 어셈블리와 gdb로 분석한 결과

 

입력한 값의 길이가 29(0x1d)인지 검증한 뒤

다음과 같은 3번의 xor 연산을 거친 뒤 값을 비교하여 동일하면 정답으로 처리해주는 로직이었습니다.

# r8d에 입력한 값이 들어감 
r8d ^ esi # esi는 0 ~ 0x1c
r8d ^ 0x55 
# r9d는 [0x555555558010 + rdi] (0~0x1c)
r8d ^ r9d

pwndbg> x/4gx 0x555555558010
0x555555558010:	0x68141581c831f5f6	0xf1ca09823ee535f6
0x555555558020:	0x816d2a33dfdfa98a	0x00000017df85a6f5

# 아래 배열과 비교해서 같으면 정답으로 처리됨
pwndbg> x/4gx 0x555555558030
0x555555558030:	0x503c0b9fdd25e4f0	0xc7f330af3fca04de
0x555555558040:	0xb4571817effdb2aa	0x00000023f4b88fd0

 

따라서 위 연산을 역연산하면 플래그 값이 나옵니다.

xor_li = 'F6F531C881151468F635E53E8209CAF18AA9DFDF332A6D81F5A685DF17'
li = []
xor_li2 = 'F0E425DD9F0B3C50DE04CA3FAF30F3C7AAB2FDEF171857B4D08FB8F423'
li2 = []
for i in range(len(xor_li)//2):
    li.append(xor_li[i*2:(i+1)*2])
for i in range(len(xor_li2)//2):
    li2.append(xor_li2[i*2:(i+1)*2])

for x in range(29):
    print(chr(int(li[x],16)^int(li2[x],16)^x^0x55),end='')
SECCON{jump_table_everywhere}

 


 

'CTF' 카테고리의 다른 글

vsCTF 2023  (0) 2023.09.25
CSAW CTF Qualification Round 2023  (0) 2023.09.18
BDSec CTF 2023  (0) 2023.07.22
AmateursCTF 2023  (0) 2023.07.20
ångstrom CTF 2023  (0) 2023.05.02
    'CTF' 카테고리의 다른 글
    • vsCTF 2023
    • CSAW CTF Qualification Round 2023
    • BDSec CTF 2023
    • AmateursCTF 2023
    ssongk
    ssongk
    벌레 사냥꾼이 되고 싶어요

    티스토리툴바