시스템 해킹을 위한 RTL(Return to Library) 기법 포스팅 썸네일 이미지

시스템 해킹 (Pwnable)/Archive

시스템 해킹을 위한 RTL(Return to Library) 기법

해당 기법은 Protostar - Stack.5 문제를 기반으로 작성했다. 기법을 실습하기 위해 관련 Protostar 이미지 파일이 필요하다. 해당 파일은 바이러스, 악성코드 파일이 아님을 밝힌다. Protostar 워게임 문제들의 이미지 파일이다. 모든 문제를 포함하고 있다. 리눅스에서 저장한 뒤 압축을 풀고 사용하면 된다. gdb stack5 실행 후 메인 함수 부분에 브레이크 포인트를 걸고 프로그램 실행한다. 이후 disas system 혹은 print system (p system) 으로 system 함수의 주소 확인할 수 있다. * 메인함수에 브레이크 포인트 안 걸고 실행도 안하면 system 함수를 확인할 수 없으니 주의하자. find '/bin/sh' /bin/sh 또한 주소를 확인할 수 ..

2021.08.29 게시됨

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 게시됨

시스템 해킹 (Pwnable)/Archive

시스템 해킹을 위한 pwntools 명령어

여러분들이 pwnable 분야에 입문해서 문제들을 풀었다면, 아마 페이로드를 터미널 창에 한 줄씩 입력하거나 기호를 사용해서 코드를 길게 한 줄로 공격했을 것이다. 이러한 공격은 한계가 있고, 불편함이 있으니 pwntools 를 사용하면 다른 세상(?)을 느낄 수 있다. pwntools 설치는 아래의 링크를 참고하자 https://kkomii22.tistory.com/50?category=948682 최신 칼리 리눅스 pwn 설치, 오류 해결 리눅스에서 자동, 무작위값, 빠르게 반복 행위 같은 경우 해킹대회에서 필요한 경우도 있는데, 이 경우 pwn을 이용하면 쉽게 문제를 해결할 수 있다. pwn 설치를 위해 터미널을 이용하는데 루트 권 kkomii22.tistory.com 또한 이 게시글은 아래 링크의..

2021.08.24 게시됨

최신 칼리 리눅스 pwn 설치, 오류 해결 포스팅 썸네일 이미지

시스템 해킹 (Pwnable)/Archive

최신 칼리 리눅스 pwn 설치, 오류 해결

리눅스에서 자동, 무작위값, 빠르게 반복 행위 같은 경우 해킹대회에서 필요한 경우도 있는데, 이 경우 pwn을 이용하면 쉽게 문제를 해결할 수 있다. pwn 설치를 위해 터미널을 이용하는데 루트 권한의 터미널이 필요하다, 왼쪽 상단의 터미널 아이콘 오른쪽 아래로 향하는 화살표가 있는데 누르면 root terminal 버튼이 나온다 누르면 위 처럼 뜨고 패스워드를 입력한다. kali 먼저 python-dev를 인스톨해야 한다. apt-get install python-dev python2 -m pip install pwn 를 입력하는데, 여기서 작성자처럼 pip를 못 잡는 경우가 있다. 이 문제는 최신 리눅스에서 발생할 수 있는 문제다. 또한 파이썬 버전에 따라 오류가 발생하기도 한다. 작성자는 21년 기..

2021.08.24 게시됨

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

시스템 해킹 (Pwnable)/Wargame

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

stack3.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 #include #include #include #include void win() { printf("code flow successfully changed\n"); } int main(int argc, char **argv) { volatile int (*fp)(); char buffer[64]; fp = 0; gets(buffer); if(fp) { printf("calling function pointer, jumping to 0x%08x\n", fp); fp(); } } Colored by Color Scripter cs win 함수가 실행되면 code flow succ..

2021.08.24 게시됨

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

시스템 해킹 (Pwnable)/Wargame

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

stack2.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 #include #include #include #include int main(int argc, char **argv) { volatile int modified; char buffer[64]; char *variable; variable = getenv("GREENIE"); if(variable == NULL) { errx(1, "please set the GREENIE environment variable\n"); } modified = 0; strcpy(buffer, variable); if(modified == 0x0d0a0d0a) { printf..

2021.08.22 게시됨

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

시스템 해킹 (Pwnable)/Wargame

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

Stack1.c 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include #include #include #include int main(int argc, char **argv) { volatile int modified; char buffer[64]; if(argc == 1) { errx(1, "please specify an argument\n"); } modified = 0; strcpy(buffer, argv[1]); if(modified == 0x61626364) { printf("you have correctly got the variable to the right value\n"); } else { printf("Try aga..

2021.08.21 게시됨

반응형