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

oolongeya

·

2021. 8. 29. 15:49

해당 기법은 Protostar - Stack.5 문제를 기반으로 작성했다.

 

기법을 실습하기 위해 관련 Protostar 이미지 파일이 필요하다.

해당 파일은 바이러스, 악성코드 파일이 아님을 밝힌다.

 

Protostar 워게임 문제들의 이미지 파일이다. 모든 문제를 포함하고 있다.

bin.tar
0.92MB

리눅스에서 저장한 뒤 압축을 풀고 사용하면 된다.

 

 

gdb stack5 실행 후 메인 함수 부분에 브레이크 포인트를 걸고 프로그램 실행한다.

이후 disas system 혹은 print system (p system) 으로 system 함수의 주소 확인할 수 있다.

* 메인함수에 브레이크 포인트 안 걸고 실행도 안하면 system 함수를 확인할 수 없으니 주의하자.

 

find '/bin/sh'

/bin/sh 또한 주소를 확인할 수 있다.

 

얻은 정보들로 공격 코드를 작성해준다.

 

p32으로 패킹 하는 이유는 프로그램이 32비트 기반이다.

file 파일명 으로 확인가능하다.

 

A * 76 패딩한 이유는 pattern create 100 으로 패턴을 만들어서

input에 넣어주고 프로그램을 실행한 뒤 pattern offset 으로 확인했을 때 stack의 제일 첫번째로 쓰이는 부분까지의 거리가 76바이트 떨어져있기 때문이다.

 

즉 A로 76바이트 패딩 + 스택의 첫번째 쓰이는 부분(sys 함수) + dummy(sys함수 호출이후 ret주소가 들어가야하는 곳) + /bin/sh주소(sys의 인자값) 으로 /bin/sh을 불러오는 것이다.

 

sys 함수 호출 이후 sys의 ret 값을 더미값을 채워놓고 다음 인자값을 불러 오는 것이다.

 

성공적으로 쉘을 얻을 수 있다.

 

하지만 이 문제는 32비트 기반의 문제 이미지 파일을 이용한 것이고,

64비트 리눅스 환경에서 컴파일한 파일의 경우 공격 페이로드가 달라진다.

 

아래의 게시글들은 64비트 환경에서의 페이로드 작성을 다루고 있다.

 

https://kkomii22.tistory.com/75

 

x86와 x64에서 RTL을 이용한 페이로드 작성 시 주의점

먼저 x86 방식같은 경우 아래의 게시글과 같이 작성합니다. https://kkomii22.tistory.com/73 시스템 해킹을 위한 ret2lib 기법 해당 기법은 Protostar - Stack.5 문제를 기반으로 작성함. 기법을 실습하기 위해..

kkomii22.tistory.com

https://kkomii22.tistory.com/74

 

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

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;   prin..

kkomii22.tistory.com

 

반응형