IT 그리고 정보보안/Knowledge base

RTL(bypass NX-bit, ASCII Armor)

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

저번 포스팅에서 RTL을 한건 NX-bit를 우회하는 기본적인 RTL에 대해 언급했었다.

근데 여기서 아스키아머가 적용되었을 때 RTL 공격을 하는 법을 알아보자.

 

아스키 아머가 적용되면 SYSTEM 함수 라이브러리 주소의 최상위 1바이트가 NULL로 바뀌는데

strcpy 등으로 페이로드가 복사될 때 null 때문에 함수 호출한 후 페이로드 뒷부분이 전달이 되지 않으므로

함수의 인자값을 직접 대입하여 변조하는 것은 불가능하다.

그렇기 때문에 쓰레기값 심볼릭 링크를 하는 RTL 즉, 오메가 프로젝트를 사용한다.

근데.. 접때도 설명했듯이 argv 자리에 있는 값은 스택영역에 있다.

 

 

아스키 아머가 걸려 있으면 적어도 페도라 코어3은 될텐데.

거기엔 또 랜덤 스택이 적용되어 스택주소는 계속 해서 바뀐다. 

그렇게 되면 원샷 원킬 한방 코드를 지향하는 RTL 공격의 의미가 퇴색되버림.

그래서 우리는 인자로 사용할 다른 자리를 찾아야 한다.

 

근데, 다른 자리에 있는걸 어떻게 참조함? 무조건 ebp+8 자리에 있는 녀석을 인자로 사용하는데"?

심플하게 생각하자. 함수 호출 자리를 옮겨주면 될것 아닌가?

인자로 사용하려고 하는 녀석이 있는 곳에서 -8 위치에 함수 호출을 두면 되지 않을까.

일단 그 생각은 잠시 후 계속 하도록 하고 인자로 사용할 만한 자리를 찾아보자.

 

 

네모 친 곳이 적당한 곳이다. 내가 네모친 근거는 무엇일까.

바로 주소가 0804로 시작하는 곳들.

 

0804로 시작하는건 text 영역,. 뭔짓을 해도 고정적인 영역

컴파일 단계에서 결정짓는 영역이므로, 프로그램 실행한다고 변하는게 아니다.

이 영역을 인자로 참조해야 rtl 한방 코드가 이루어지겠지

 

이 중에서 하나 골라보자. 알다시피 심볼릭 링크를 하려고 하는데, 웬만하면 쓰레기값 문자열의

길이가 짧은 걸로 고르는게 좋겠지. 뭘 하든 관계는 없지만..

 

 

080482e0가 적당할 것 같다.

 

근데 멀다. 어떻게 해야 내가 원하는 인자를 참조하도록 만들까

바로 RET Sled 라는 기법을 사용한다.

 

굳이 계산할 것도 없지만.. 계산 아닌 계산? 을 해보면

RET sled를 10번 하면 될 것 같네.

 

이제 그럼 페이로드를 구성하기 위해 시스템 함수 주소와 ret 가젯을 찾아보자.

먼저 시스템 함수 주소.

 

다음 RET 가젯을 찾아보자.

 

0x8048483 이다.

 

준비가 됐다. 페이로드를 구성해보자.

[NOP 260] [RET Gadget]*10 [System 함수 주소]

이런 식으로 될 것이다. 080482e0에 있는 저 알 수 없는 문자열로 심볼릭 링크를 시켜줘야 하지만

일단 저놈의 핵사값을 알아내야 링크를 걸 수 있으므로 거두절미 하고 페이로드를 때려넣어 보자.

 

 

페이로드를 때려넣으면 당연히 공격이 안됨.

시스템 함수는 잘 돌아가고, 셸 실행 시에 인자 오류가 난다.

오류 나는 부분만 따로 dump2 라는 파일에 저장시켜 보자.

# 2>dump2  --> '2'는 리눅스에서 STDERR 표준 에러를 뜻한다. 에러난 부분을 dump2라는 파일에 쓰겠다는 말.

 

덤프 뜬 부분을 xxd(헥스에디터) 를 이용하여 열어보면

위 표시된 부분 만큼이 파일 이름으로 나올 것이다.

3a20 사이에 있는 것들

 

인자 자리에 오는 문자열이 뭔지 알았으니까 심볼릭 링크를 걸자.

 

심볼릭 링크 걸 파일 부터 작성 합세.

셸 실행시키는 프로그램

 

오메가 프로젝트 적을 때 말했듯이, lob는 레벨별로 디렉토리 권한이 독립적이어서

gate 디렉토리 안에서 심볼릭 링크를 걸었다간 권한에 걸려 실행이 안된다.

그래서 tmp 디렉토리를 이용해야 한다고 했따.

셸 실행 프로그램을 tmp 디렉토리에 넣고 심볼릭 링크를 걸어주자.

 

 

다음 환경 변수 등록을 해야 하는데, 접때 오메가 프로젝트 할 때 환경 변수 등록하는 부분에 대해 설명했다.

그 부분을 참고하고.. 나는 이미 등록이 되어 있기 때문에 자세한 설명을 생략함 

 

환경 변수를 등록하고 다시 아까 페이로드를 때려보면.,.

 

 

공격 성공

반응형

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

Frame Pointer Overwriting  (0) 2021.04.15
Fake EBP  (0) 2021.04.15
RET Sled  (0) 2021.04.15
Omega Project  (0) 2021.04.15
RTL (Return-to-Libc) Attack  (0) 2021.04.15