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 |