2017. 12. 13. 14:40ㆍSystemHacking/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
'SystemHacking > Fedora Catle' 카테고리의 다른 글
[5] evil_wizard -> dark_stone ( GOT Overwriting & Remote BOF ) (0) | 2017.12.01 |
---|---|
[4] hell_fire -> evil_wizard ( GOT Overwriting ) (0) | 2017.11.30 |
[3] dark_eyes -> hell_fire ( Fake EBP & fgets Cache memory / mprotect) (0) | 2017.11.28 |
[2] iron_golem -> dark_eyes ( RET Sleding ) (0) | 2017.11.28 |
[1] gate -> iron_golem ( Fake EBP ) (0) | 2017.11.28 |