FC3 ALL CLREAR

2017. 12. 13. 14:40SystemHacking/Fedora Catle


FC3 주요 목표

1> 랜덤메모리보호기법을 어떻게 우회할 것 인가 ? 

2> 라이브러리의 주소를 0x00 으로 시작되어 연속적으로 함수를 호출 할 수 없음을 우회

3> fake ebp , GOT Overwriting , pop_pop_ret , fgets , RET Sleding


[1] gate -> iron_golem ( Fake EBP )

랜덤메모리보호기법 => 라이브러리주소 이용

saved ebp = fake ebp

saved eip = &execl+3

=> execl( fake ebp + 8 , fake ebp + 12 , fake ebp + 16 )

execl( 경로를 포함한 실행파일의 이름 , 인자들 ... , NULL )

fake ebp + 8 == 0x00000068 ==> symbolic link 이용


[2] iron_golem -> darkeyes ( RET Sleding )

saved eip = &ret => pop eip(ebp+4)로 인해 스택을 타고 흘러 내려감 ( like NOP )

&ret * x + &execl + AAAA + 고정값 + NULL 의 형태의 스택구조를 형성해야함

고정값 = 0x0083eff4 -> symbolic link 이용

execl => push ebp + mov ebp,esp

saved_ebp : 현재 &execl을 입력한 주소 <-- ebp

saved_eip  : ebp + 4 ( eip ) AAAA

고정값      : ebp + 8 고정값

NULL       : ebp + 12 NULL


[3] dark_eyes -> hell_fire ( Fake EBP & fgets Cache Memory )

buffer+dummy 264byte

saved_ebp       0xfee2d628

saved_eip        &leaveret

overflow...

0xfee2d628     cache memory어딘가

0xfee2d62c      &leaveret

&execl


leave : mov esp,ebp & pop ebp    // ebp = 0xfee2d628

ret : pop eip ( ebp+4 )                // &leaveret

leave : mov esp,ebp & pop ebp    // ebp = fake ebp ( cache memory 어딘가 )

ret : pop eip ( ebp+4  )              // fake ebp+4 지점의 명령이 실행된다 ( execve() )


Cache Memory

.... overflow .... [ fake ebp ] [ saved eip ] [ &execl ] [ AAAA ] [ argv1 ] [ argv2] [ argv3] 

argv1 : &/bin/sh

argv2 : &{ &/bin/sh , NULL }

argv3 : NULL


[4] hell_fire -> evil_wizard  ( GOT Overwriting )

GOT Overwriting & pop_pop_ret 

saved ebp - [ &strcpy'PLT - &pop_pop_ret - &dst - &src ] * 4 + &printf'PLT

printf's PLT와 GOT를 계산하는 과정에서 사용하는 주소에 저장된 기존의 printf함수의 주소를 변질시킨다

strcpy를 이용해 한 바이트씩 objdump를 활용해서 일치하는 문자를 찾아서 변질시킨다

함수가 인자를 사용할 때에는 2개의 함수만을 연속호출할 수 있는데 pop_pop_ret를 통해서 연속적으로 다수의 함수를 호출했다


[5] evil_wizard -> dark_stone ( GOT Overwriting & Remote BOF )

$(python -c 'print ""';cat) | nc localhost 8888