ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • LOB FC3 gate
    CTF&Wargame/Lob 2016.01.11 19:47

    안녕하세요

    이번 문제는 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]


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



    'CTF&Wargame > Lob' 카테고리의 다른 글

    LOB FC3 dark_eyes  (0) 2016.01.14
    LOB FC3 iron_golem  (0) 2016.01.12
    LOB FC3 gate  (0) 2016.01.11
    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

    댓글 0

Designed by Tistory.