goblin.c int main() { char buffer[16]; gets(buffer); printf("%s\n", buffer); } 이것도 goblin과 마찬가지로 buffer 16byte와 SFP 4byte는 nop로 채운뒤 ret에 system함수의 주소를 넣고 4byte의 nop와 /bin/sh의 주소를 넣었다. 이번엔 strcpy()가 아니고 gets()를 입력하였기 때문에, 파이프를 이용하여 공격하였다. goblin - hackers proof * 파이프? 파이프(|)는 두 가지의 명령어를 이어주는 역할을 한다. 왼쪽 명령어의 출력을 오른쪽 명령어의 입력으로 보내는 것이다.
cobolt.c int main(int argc, char *argv[]) { char buffer[16]; if(argc < 2){ printf("argv error\n"); exit(0); } strcpy(buffer, argv[1]); printf("%s\n", buffer); } gremlin과는 다르게 buffer의 크기가 16byte밖에 주어지지 않았다. 그래서 ret에 system함수를 이용하여 쉘을 띄우기로 했다. 우선, system()함수의 주소를 gdb를 이용하여 찾았다. system.c void main(){ system(); } system함수를 호출하는 부분에 브레이크 포인트를 걸고 print를 이용하여 system 함수의 주소를 찾을 수 있었다. 그 다음, system함수로 실행..
- Total
- Today
- Yesterday