본문 바로가기

WARGAME/Lob

LOB FC3 gate

안녕하세요

이번 문제는 Fedora core 3문제 1번 gate입니다

페도라 환경에는 메모리 보호 기법이 추가되어있습니다


NX(Non-Executable stack)

스택에 실행 권한이 없는 걸 볼 수 있습니다

rw-p라고 나와있는데 (x)execute 실행 권한이 없습니다


Ascii Armor

라이브러리 영역의 주소를 무조건 16MB 이하로 만들어

최상위 주소 1바이트는 무조건 \x00이 들어가게한 보호기법입니다

주소 첫 자리가 00으로 값이 되므로

연속적인 함수 호출을 불가능하게 만들었습니다


ASLR(Address space layout randomization)

스택의 주소 값이 랜덤하게 변함....

아까 위의 사진과 스택 영역을 보면 주소가 다른걸 볼 수 있습니다


자 그럼 문제의 소스를 봅시다

소스를 보면 버퍼가 256바이트이고

밑에 strcpy에서 취약점이 발생합니다


스택의 구조


힌트에 fake ebp가 있으므로

RTL과 fake ebp 기법을 사용해 보겠습니다


그전 LOB redhat은 system함수를 사용해서 풀었는데

fedora core는 system함수 내부 루틴중에 

geteuid를 재설정 해주는 부분이 있기 때문에

이를 유지할 수 없습니다 따라서 execl 함수를 사용합니다


int execl( const char *path, const char *arg, ...);

execl(실행할 파일, 인자1, 인자2, ..., NULL)

execl 함수 마지막 인자가 NULL이 와야하는데

이 부분은 GOT주소로 덮습니다


우리는 스택주소가 랜덤이라...사용할 수 없으므로

고정주소인 GOT를 사용하겠습니다



objdump로 GOT 주소를 구해봅시다


GOT 주소는 0x8049618입니다

이 때 -8을 해줘야합니다

ebp를 기준으로 인자를 참조하기 때문에 그렇습니다



더 자세히 보겠습니다

0x0804954c가 첫 번째 인자 파일이름이 되고

세 번째 인자가 NULL이 되므로 인자로 사용하기에 적합합니다



첫번째 인자로 쓸 파일명이 0x01값입니다

이걸 /bin/sh로 향하게 해줘야합니다



이렇게 코딩을 하고


이렇게 심볼릭을 사용하도록하겠습니다


그리고

execl 함수의 주소를 구했습니다

0x7a5720

이 때 주의할 점은 fake ebp는 ebp를 조작하는 기법인데

execl함수의 프롤로그가 실행되면 조작한 ebp가 쓸모없어지므로

execl_adress+3을 해야합니다



이제 페이로드를 구성해보자면

[Buffer*264] + [GOT_address-8] + [execl_address+3]


뭔가 안되서 처음부터 다시하니깐 잘됬습니다~~



'WARGAME > Lob' 카테고리의 다른 글

LOB FC3 dark_eyes  (0) 2016.01.14
LOB FC3 iron_golem  (0) 2016.01.12
LOB LEVEL20(xavious ==> death_knight)  (0) 2016.01.04
LOB LEVEL19 (nightmare ==> xavious)  (0) 2016.01.03
LOB LEVEL18 (succubus ==> nightmare)  (0) 2016.01.03