프로토스타

[프로토스타] format0

-dP- 2019. 1. 18. 16:06

format0.c


#include <stdlib.h> #include <unistd.h> #include <stdio.h> #include <string.h> void vuln(char *string) { volatile int target; char buffer[64]; target = 0; sprintf(buffer, string); if(target == 0xdeadbeef) { printf("you have hit the target correctly :)\n"); } } int main(int argc, char **argv) { vuln(argv[1]); }



출처: http://liveoverflow.com/binary_hacking/protostar/format0.html




1. 문제해결 및 분석


1-1. format0.c 만들기




gedit format0.c





소스 붙여넣고




gcc -z execstack -w -no-pie -o format0 format0.c




1-2. gdb ./format0





vuln 함수에 변수들이 있으므로



disas vuln




buffer를 얼마나 채워야 하나?





stack0과 stack1에서 했듯이




0x50(buffer) - 0x04(target) = 0x4c






0x4c는 십진수로 76이다.



1-3. 실행






세그멘테이션 디폴트는 왜 뜨는지 모르겠으나




추측컨대 위 문제는 32비트에 최적화 돼 있는데 현재 실행 환경이 64비트 환경이라 그런 거 같다.




정확히는 모르겠다.




어찌 됐든 원하던 공격 성공!



피드백 환영입니다!



'프로토스타' 카테고리의 다른 글

[프로토스타] format2  (0) 2019.01.22
[프로토스타] format1  (0) 2019.01.22
[프로토스타] stack7-2 (ROP)  (0) 2019.01.18
[프로토스타] stack7-1 (jmp call)  (0) 2019.01.15
[프로토스타] stack6 (함정을 지나 ret하기)  (0) 2019.01.15