Protostar - Format 2 (포맷 스트링 버그) 포스팅 썸네일 이미지

시스템 해킹 (Pwnable)/Wargame

Protostar - Format 2 (포맷 스트링 버그)

Format2.c 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include #include #include #include int target; void vuln() { char buffer[512]; fgets(buffer, sizeof(buffer), stdin); printf(buffer); if(target == 64) { printf("you have modified the target :)\n"); } else { printf("target is %d :(\n", target); } } int main(int argc, char **argv) { vuln(); } Colored by Color Scripter cs i..

2021.09.30 게시됨

Protostar - Format 1 (포맷 스트링 버그) 포스팅 썸네일 이미지

시스템 해킹 (Pwnable)/Wargame

Protostar - Format 1 (포맷 스트링 버그)

Format1.c 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include #include #include #include int target; void vuln(char *string) { printf(string); if(target) { printf("you have modified the target :)\n"); } } int main(int argc, char **argv) { vuln(argv[1]); } Colored by Color Scripter cs target 변수만 건들면, 풀리는 문제다. target은 전역변수이니 objdump로 구할 수도 있다. printf 문이 있으니, 포맷 스트링 버그를 이용하면 된다. printf() 함수..

2021.09.25 게시됨

Protostar - Format 0 (포맷 스트링 버그 + 버퍼 오버플로우) 포스팅 썸네일 이미지

시스템 해킹 (Pwnable)/Wargame

Protostar - Format 0 (포맷 스트링 버그 + 버퍼 오버플로우)

의도치 않게 프로그램의 메모리를 확인할 수 있는 버그인 Format String bug 를 이용한다. 이해하기 쉬운 예인 하트블리드(Heartbleed) 사례를 보고오면 바로 이해 가능하고, 아래의 사진으로도 간단하게 파악할 수 있다. https://ko.wikipedia.org/wiki/%ED%95%98%ED%8A%B8%EB%B8%94%EB%A6%AC%EB%93%9C 하트블리드 - 위키백과, 우리 모두의 백과사전 하트블리드심장출혈을 나타내는 로고이다. 이 로고와 "하트블리드"라는 이름은 이 문제에 대한 대중의 인식을 이끌어내는데 기여했다.[1][2]CVE 식별자CVE-2014-0160발견일2014년 4월 1일 (7년 전)(2014-04 ko.wikipedia.org Format0.c 1 2 3 4 5 ..

2021.09.23 게시됨

Protostar - Stack 7 (쉘 코드 + 버퍼 오버플로우 + RTL) 포스팅 썸네일 이미지

시스템 해킹 (Pwnable)/Wargame

Protostar - Stack 7 (쉘 코드 + 버퍼 오버플로우 + RTL)

stack7.c 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include #include #include #include char *getpath() { char buffer[64]; unsigned int ret; printf("input path please: "); fflush(stdout); gets(buffer); ret = __builtin_return_address(0); if((ret & 0xb0000000) == 0xb0000000) { printf("bzzzt (%p)\n", ret); _exit(1); } printf("got path %s\n", buffer); return strdup..

2021.09.12 게시됨

Protostar - Stack 6 (쉘 코드 + 버퍼 오버플로우 + RTL) 포스팅 썸네일 이미지

시스템 해킹 (Pwnable)/Wargame

Protostar - Stack 6 (쉘 코드 + 버퍼 오버플로우 + RTL)

Stack6.c 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #include #include #include #include void getpath() { char buffer[64]; unsigned int ret; printf("input path please: "); fflush(stdout); gets(buffer); ret = __builtin_return_address(0); if((ret & 0xbf000000) == 0xbf000000) { printf("bzzzt (%p)\n", ret); _exit(1); } printf("got path %s\n", buffer); } int main(..

2021.09.01 게시됨

Protostar - Stack 5 (쉘 코드 + 버퍼 오버플로우 + attach) 포스팅 썸네일 이미지

시스템 해킹 (Pwnable)/Wargame

Protostar - Stack 5 (쉘 코드 + 버퍼 오버플로우 + attach)

Stack5.c 1 2 3 4 5 6 7 8 9 10 11 #include #include #include #include int main(int argc, char **argv) { char buffer[64]; gets(buffer); } cs 단계가 올라갈 수록 코드의 길이가 짧아진다. 함수를 실행하는 방법이나 원하는 주소로 가기 위해선 ret 값을 변조하면 된다. ret 주소에 쉘코드를 덮어서 문제를 풀어보겠다. 쉘코드를 직접 만들어도 상관없다. 하지만 msfvenom 을 이용해서 페이로드를 사용하겠다. 페이로드 리스트를 불러오는데 리눅스 항목만 확인해보겠다. 현재 운영체제에 맞는 것을 사용할 것이다. 정말정말 친절하게 지정한 포맷으로 출력이 된다. 참 편리하다. 복사를해서 파이썬 코드를 작성해보..

2021.08.28 게시됨

Protostar - Stack 4 (버퍼 오버플로우 공격 + 메모리 참조) 포스팅 썸네일 이미지

시스템 해킹 (Pwnable)/Wargame

Protostar - Stack 4 (버퍼 오버플로우 공격 + 메모리 참조)

stack4.c 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include #include #include #include void win() { printf("code flow successfully changed\n"); } int main(int argc, char **argv) { char buffer[64]; gets(buffer); } Colored by Color Scripter cs 이번 코드는 특이한 것이 win주소를 덮을만한 함수가 보이지 않는다. 즉 매개가 없다는 것은 스택에 제일 먼저 들어간 ret 부분을 오염시키면 된다는 것이다. 메인 함수를 확인한 뒤 아래에 ret 이 보인다. ret 부분에 브레이크 포인트를 걸어두고 패턴을 만들어서 사용하겠다. ret..

2021.08.25 게시됨

반응형