안녕하세요! 저번에는 단순히 버퍼 오버 플로우가 어떤 원리로 일어나는 것인가 ? 
오버 플로우를 통해서 어떻게 공격을 할 수 있는가? 를 알아봤습니다!

이번에는 좀 더 업그레이드 되고 세련된 방법을 소개해드리겠습니다!
바로 Retrun To Library입니다!

이러한 구조로 되어있습니다!
버퍼 오버플로우 - 1 에서 SFP , RET의 역할과 오버플로우를 통하여 RET에 닿으면 어찌되는가 ? 를 설명해드렸는데 혹시 기억이 안나시거나 개념이 햇갈리시면 다시 봐주시길 바랍니다 .

먼저 RTL이란 ? Ret 주소에 libc라는 공유라이브러리 함수 주소로 덮어서 
system 함수를 호출하도록 유도하여 공격하는겁니다!

예제를 통해 RTL이란 무엇인가? 를 설명해드리겠습니다!


( 본 소스는 해커스쿨 FTZ-LEVEL12입니다 . 풀이를 알게 될 수도 있으니 스스로의 힘으로 LEVEL12를 풀어보시려는 분은 다른 좋은 글들을 읽어주시면 되겠습니다! )
setreuid가 걸려있어서 따로 만들어 줄 필요는 없어보입니다!
그리고 gets 함수를 사용하네요 
gets 함수의 취약점은 엔터를 입력받을 때 까지 모두 버퍼에 담아버립니다
즉 256을 넘길 수 있으니 버퍼 오버플로우가 일어나겠군요 ? 
그렇다면 이러한 취약점을 통해서 RTL로 공격해보겠습니다 

버퍼는 일단 256만큼 주어졌습니다!

자 ! 여기서 이제 RTL을 위해 알아야 하는 주소들은 무엇들이 있을까요 ?

먼저 System 주소를 파악해야합니다!
(이유  : System 함수란? 운영체제의 명령어나 외부의 각종 실행 파일을 실행하기 위해서 사용합니다! 또한 쉘을 실행시켜야 하기 때문에 시스템 함수로 /bin/sh을 호출해야합니다!)



system 의 주소는 이런식으로 gdb분석에서 얻을 수 있는 방법이 있습니다!

system의 주소를 휙득했으면 /bin/sh의 주소도 얻어야겠지요 ? 

/bin/sh의 주소는 저러한식으로 gdb에서 읽어 낼 수 없고 따로 코드를 써서 얻어내셔야합니다 

이러한 소스를 이용해서 /bin/sh의 주소를 구하고 나면 페이로드를 어떻게 짜야할까요 ?
해당 level12의 소스는 256이 주어졌습니다 [실제로 푸실떄는 더미값을 계산하셔야합니다.]
buf[256]+sfp[4]+ret[4] 이러한식으로 스택이 구성되잇겠습니다.

buf[256]+sfp[4]+system주소[4]+dummy[4]+/bin/sh[4] 이런식으로 짤 수 잇겠습니다.

dummy를 넣어주는 이유는 system 함수나 execl 함수는 ebp+8 위치의 인자를 인식하기 때문에 dummy+4를 넣어서 /bin/sh를 불러옵니다!
(system주소 다음에 리턴어드레스를 쓰레기값으로 채우기 위한 용도라고도 합니다)

이것이 RTL의 기본 원리입니다 

응용과 좀 더 자세하게는 다음에 찾아뵙곘습니다


'시스템 기법 정리' 카테고리의 다른 글

Format String Attack (FSB)  (0) 2016.05.30
ASLR를 해제하는 여러가지 방법  (0) 2016.05.29
plt , got , rtl chain , ASLR  (0) 2016.05.28
버퍼 오버플로우 - 1  (1) 2016.05.25
버퍼 오버 플로우 역사 및 정리  (0) 2016.05.24

+ Recent posts