CTF & Wargame(REVERSING)

[dreamhack] level1 Small Counter

KWAKBUMJUN 2025. 3. 9. 16:24

chall9 실행 화면

해당 바이너리를 실행하면 위와 같은 숫자들이 출력된다.

 

IDA 분석

chall 9 main 함수 어셈블리 코드

위의 코드를 확인해보면 [rbp+var4]의 값이 5와 같아야 "Nice!"라는 문구를 출력한다. 따라서 [rbp+var4]의 값이 5와 같아지도록 gdb를 활용하여 수정해야한다.

 

pwndbg 디버깅

일단 cmp [rbp+var4], 5가 있는 주소로 이동해야 한다. 

ida에서 해당 주소를 확인해보면 0x00000000000015AA인것을 알 수 있다.

디버깅을 하기 앞서서 checksec 명령어를 통해 PIE 여부를 확인해보면 PIE가 enabled 되어 있는 것을 확인할 수 있다.

따라서 vmmap을 통해 해당 바이너리의 시작점을 확인한다. 따라서 0x00000000000015AA + 0x555555554000를 연산한 주소에 bp를 걸어준 뒤에 해당 함수로 이동해야한다. 

0x00000000000015AA + 0x555555554000 = 0x5555555555AA

위와 같이 bp를 걸어주면 잘 이동된 것을 확인할 수 있고, [rbp - 4] = 5 조건을 만족 시키기 위해 

set *(int *)($rbp-4)=5 명령어를 통해 해당 값을 5로 수정해주면

 

위와 같이 flag를 획득할 수 있다.