echo
-
[0x41414141 CTF] echoCTF/WRITEUP 2021. 2. 2. 17:27
Disassembly 디스어셈블리 main은 echo를 호출하고 exit로 프로세스를 종료한다. void main(void) { echo(); exit(0); } echo는 0x300 바이트 만큼 값을 읽어오고, 이를 출력하는 역할을 한다. void echo(void) { int sz = read(0, [rbp-0x180], 0x300); write(1, [rbp-0x180], sz); } 사용할 만한 라이브러리는 없고, NX가 켜져있으니 레지스터를 조작해 syscall을 통해 공격하는 수밖에 없다. Sigreturn Oriented Programming rax에 원하는 값을 넣기 위해서는 write 함수의 리턴값을 이용할 필요가 있다. 공격은 세 단계로 이루어진다. 스택 버퍼 오버플로우를 이용해 RET..