En_Geon 2020. 2. 24. 03:09

level 13 로그인 후 hint를 본다.

 

level 13 hint

 

level 11, level 12와 비슷하다. BOF에 취약한 strcpy 함수가 있다.

 

level 13 hint 분석

 

hint를 분석하면 위와 같다.

strcpy복사할 때 크기를 검사하지 않기 때문에 BOF에 취약하다.

 

이제 BOF를 일으켜야 하는데 level 11과 level 12와 다른 점은 변수 i로 BOF가 일어나는지 확인하는 보안코드라고 볼 수 있다.

하지만 너무 단순한 보안코드이다. 

 

gdb로 attackme를 분석해 프로그램이 어떻게 돌아가는지 본다.

 

gdb attackme

 

처음 0x418(1048)byte만큼 공간을 확보하고 ebp-12에 0x1234567을 저장한다.

확보한 공간보다 -12에 변수 i를 저장한다고 생각하면 쉽다.

 

 

더보기

 

그렇다면 1036byte 이후에 변수 i가 저장된다.

변수 i가 어디에 저장되는지 알았다면 공격할 때 i를 포함해서 공격하면 된다.

 

공격을 위해 eggshell로 주소를 알아낸다.

 

eggshell

 

주소를 알아냈으면 공격을 하면 되는데 간단하게 도식화하면 이렇게 된다.

 

1048byte str i dummy
1036byte 4byte 8byte
1024보다 넘게 저장해 BOF를 일으킴 0x1234567 저장 쓰레깃값

SFP (4byte)

여기까지 BOF를 일으켜야 한다.

RET (4byte)

그러면 여기에 쉘 코드가 입력된다.

 

공격 실행

 

공격 코드를 보자면 "A"를 1036byte 주고 "i"를 저장해주고 "A"를 12byte를 넣고 환경변수 주소를 넣어준다.

여기서 두 번째 "A"에 12가 들어가는 이유는 dummy 공간 8byte와 SFP 4byte를 합쳐 12byte가 들어간다.