dctf_r100 writeup
by St1tch
우선 바이너리가 어떤건지 확인을 하고, 메모리 보호기법도 확인을 먼저 했다.
32bit ELF파일이고, canary와 nx가 켜져있는것을 확인했다.
IDA를 이용해서 cat flag가 있는 곳을 중심으로 분석했다.
0x08048526을 보면 [ebp+arg_0]와 0xBADB0169를 비교해서 맞으면 system함수가 실행되어 flag를 볼 수 있다.
gdb를 이용해서 저 부분에 break를 걸고 스택주소를 확인했다.
적당히 a를 몇개 넣고 실행을 시켰다.
gets함수를 보면 ebp-0x2c가 입력buf의 주소임을 알 수 있고, eip에서 ebp+0x8부분과 특정 수를 비교한다.
ebp+0x8부분을 덮을수 있으면 보호기법이 켜져있든 말든 바로 flag를 볼 수 있다.
주소차이가 52만큼 난다.
따라서 52개의 쓰레기값 + 비교값을 넣으면 바로 flag를 볼 수 있다.
대회가 끝난 후라 local exploit을 하기 위해 임의로 flag를 대충 만들었고,
쉘코드나 우회기법 없이 간단하게 flag를 볼 수 있다.
블로그의 정보
튜기's blogg(st1tch)
St1tch