orc.c 코드를 보니 이렇습니다 일단 환경변수를 사용할 수 없고, argv[1][47]의 값이 \xbf 이어야 합니다. 이번 문제는 argv[2]를 이용해야 할 것 같습니다. 스택은 이렇게 구성되어 있다. 주소가 0xbf로 시작해야 하기 때문에 ret에 argv[2]의 주소를 넣어 주고 argv[2]에 shellcode를 넣어주면 될 것 같습니다.(i를 빼먹었습니다. 죄송합니다. i없는건 감안해주세요) gdb 로 orc 파일을 디버깅 해 보았습니다. disassemble 해보았습니다. main+214에서 leave 명령을 실행하므로 이곳에 breakpoint를 걸어주었습니다. run 으로 실행해 보았습니다. 위 처럼 실행 하면 스택은 이런식으로 구성 될 것입니다. esp에서 100만큼 주소를 읽어왔더니..
저번 문제가 argv에 들어있는 값을 strcpy함수를 이용하여 buffer로 복사하는 것이었다면 이번 문제는 gets 함수로 buffer에 입력을 받는 취약점을 공략하는 문제입니다. 이번 문제의 스택의 구조는 저번 문제와 동일하기 때문에 스택의 구조를 그리진 않았습니다. 저번 문제와 마찬가지로 환경변수를 이용해서 exploit 하면 될 것 같습니다. 환경변수를 만들었습니다. getit 으로 환경변수의 주소를 알아냈습니다. 저번문제와 이번문제의 유일한 차이점 이라고 할 수 있겠다. payload가 저번 문제의 payload와는 다르게 | 을 사용하고 있습니다. 익스플로있 하였습니다.
cobolt.c 파일을 열어보았더니 이런 c코드가 있습니다. 이것도 gate 문제와 같은 방식으로(환경변수를 이용) 풀면 될 것 같습니다. 스택은 이맇게 구성되어 있다. 그럼 buffer ~ sfp까지 \x90 으로 채우고 ret에 환경변수 주소를 넣어주면 될 것입니다. 환경변수를 등록합니다. getit.c 라는 환경변수 주소를 가져오는 c 파일을 만들어 gcc로 컴파일 합니다.환경변수의 주소는 0xbffffa90 입니다. 이런식으로 공략하면 될 것 같습니다. 익스플로잇 했습니다.