IT 그리고 정보보안/Knowledge base

Omega Project

plummmm 2021. 4. 15. 21:27
반응형

RTL과 비슷한 방식의 공격기법이다.

솔직히 오메가 프로젝트안에 RTL이 있는건지.. 따로 분류가 되어있는 건지는

경계가 모호 하지만, 기본 컨셉은 같다.

 

앞서 소개한 RTL에서는 system 함수 내부에서 문자열 "/bin/sh"의 위치를 찾아서

페이로드르 구성하는 방식이었다.

 

하지만 오메가 프로젝트는 페이로드에 인자를 주지않고, 원래 인자자리에 위치한

쓰레기 값을 심볼릭 링크 시켜서 인자를 구성하는 방식을 사용한다.

 

직관적으로 얘기하면

RTL은 직접 넣는 것

오메가 프로젝트는 다른 곳에다 놓고 연결 시키는 것

 

공격을 실제로 한번 해보자. 이번에도 LOB의 gate에서 해보겠다.

 

 

버퍼는 256바이트.

빨간 네모친 부분은 시스템 함수 주소이다.

 

일단 우리가 적을 페이로드는 간단하다.

[nop 260] [SYSTEM 함수 주소] 이게 끝임;;

 

대신에 우리가 함수 인자를 따로 구성해주지 않은 대신에

원래 함수 인자 자리에 있는 녀석을 심볼릭 링크시켜서 셸이 실행될 수 있도록 한다.

 

그냥 문자열을 링크 시키면 되지 않나 하는 친구들은 RTL 포스팅 보고오소

 

이제 셸 실행 프로그램을 만들어 심볼릭 링크를 걸어보자.

아래는 공격 과정을 스택상에 나타낸 것이다.

 

 

일단 뭐 셸 실행 프로그램 부터 만들자.

sys.c 라는 이름.

 

exeve함수를 이용하여 제작했다.

이제 이 프로그램을 심볼릭 링크 걸어야지.

 

네모친 부분이 system함수가 인자로 참조할 위치이다. 메인함수로 치면 **argv 자리임. 

여기선 뭐 이중 포인터가 의미는 없다. 다만 저기에 위치한 문자열을 읽을 뿐.

 

system함수는 프로그램을 실행하는 함수이다.

저 자리에는 system함수가 불러올 프로그램 이름 문자열의 첫번째 문자주소가 들어가 있다.

문자열(x/s)로 찍어보면 뭐 이상한 문자가 들어있다.

우리가 실행시킬 놈은 셸을 실행시키는 프로그램인데, 

 

"t? ?" 이런 이름의 프로그램이 어딨노. 없다.

그래서 셸을 실행시키는 프로그램을 만들었고, 그걸 심볼릭 링크를 저 곳에다가 걸어주면

(여기서 말하는 '저 곳'은 시스템함수로 실행될 프로그램 이름이다.)

무난하게 셸이 실행 될 것이다.

그럼 일단 심볼릭 링크를 걸어줄 쓰레기값의 이름을 뽑아내야지?

 

그전에 일단 페이로드를 작성하여 공격을해보자.

셸이 잘 실행되는지, 인자가 문제지 셸을 실행이 되어야 하니까.

 

perl 스크립트로 써야 주소로 읽히나보다. 그냥 쓰면 아예 그거자체로 문자열로 인식해버려서..

일단 이렇게 심볼릭 링크를 걸어두고 페이로드를 구성해서 때려보자.

 

[nop 260 (buffer + sfp)] [system 함수 주소]

이게 끝이다.

 

셸은 실행이 잘되는데 인자를 못읽고 있다.

이제 2 > dump 를 추가하여 핵스덤프를 떠보자.

 

3a20 사이에 있는게 시스템 함수에서 받아들이는 프로그램 이름이다. 3a = ':', 20 = 공백

저 놈을 심볼릭 링크 걸어주면 되겠지.

 

펄 스크립트로 적어야 주소로 인식을 한다.. 아니면 저거 자체로 그냥 문자열로 인식ㅡㅡ;

다됐따,. 근데 하나더 문제가 있다.

 

환경변수 때문이다.

sys라는 셸 실행프로그램 이름을 문자열로 받아오는데.. 그냥 프로그램 이름만으로는 저게 어딨는지

무슨 기능을 하는 프로그램인지 알 도리가 없다.

 

그래서 경로를 지정해주어야 하는데, 심볼릭 링크 걸때는 경로를 지정해줄 수가 없다.

경로까지 프로그램 이름으로 읽어버리니까.

 

그래서 심볼릭링크 부터 걸고 그다음에 환경변수로 경로를 지정해주어야 한다.

여기서 또 생각 해야 할게 하나 더있다.

 

LOB에서는 Setuid걸린 파일이 있는 디렉토리마다 권한이 다 독립적으로 부여되어있다.

그래서 tmp에다가 셸 실행 프로그램을 두고, gremlin을 실행 시킬때 /home/gate/gremlin 으로 해야함.

(환경 변수는 ./로 등록하니까.. tmp 디렉토리로 이동하여 거서 실행한다.)

 

다시해보자.

 

 

땡.

반응형

'IT 그리고 정보보안 > Knowledge base' 카테고리의 다른 글

RTL(bypass NX-bit, ASCII Armor)  (0) 2021.04.15
RET Sled  (0) 2021.04.15
RTL (Return-to-Libc) Attack  (0) 2021.04.15
Shellcode 작성  (0) 2021.04.15
기계어코드 작성  (0) 2021.04.15