FTZ level13

2022. 3. 7. 18:29Site/FTZ

이번시간에는 level13에 대하여 풀어보겠습니다

공부를 하는 입장이니 틀린게 있어도 양해부탁드리겠습니다


이번에도 먼저 전체 디렉토리와 파일을 확인해 보니 attackme파일이 이번에도 있습니다

cat hint를 통해 힌트파일 보니 c코드가 나와있습니다

여기서도 strcpy함수에서 buf에서 1024보다 큰값이 들어가면 버퍼오버플로우취약점이 발생합니다

그런데 전 level과 다르게 i값이 0x1234567이 아니면 프로그램을 강제종료시키는 조건이 있는데 이 부분은

버퍼오버플로우가 발생하는지 확인하는 역할을 하는것 같아서 나중에 페이로드를 작성할때 신경써주어야 될 것 같습니다

*

iong형 변수 i에 0x123456 선언

char형 배열 buf에 1024byte 할당

level14의 id값

argc가 2이상이면 입력값을 buf에 할당

i가 0x1234567이 아니면 경고문 출력과 프로그램 종료 [kill(프로세스id, signal_number)]

*

gdb를 통해 attackme의 핵심부분을 분석해봅시다

main+3 : 1048byte스택공간확보(buf의 크기가 1024byte -> 24byte dummy?)

main+9 : 0x1234567의 값을 ebp-12위치에 할당 cf)DWORD PTR -> 4byte (long은 4byte인데 + 8byte는 dummy?)

cf) WORD -> 2bytes, DWORD -> 4bytes

main+54 : ebp-1048[buf배열주소값]를 eax에 복사 [buf에서 ebp까지의 거리1048]

main+69 : 0x1234567과 ebp-12[i]비교

 

main+9에서 i의 위치는 ebp-12걸 예상할수있었고

buf는 ebp에서 -1048만큼 떨어져 있고 +sfp[4byte]하면 ret까지는 1052만큼떨어져 있다는걸 예상할수있습니다

따라서 ret을 알아내기 위해 페이로드에 0x1234567을 추가하여 

buf+dummy+0x1234567+dummy+sfp+ret 순으로 작성하면 될것같습니다

 

 

                [메모리구조]

ret[4]
sfp[4]
dummy[8]
0x1234567(i)[4]
dummy[12]
buf[1024]

환경변수 등록을 시켜줍니다

위에서 만든 환경변수의 주소값을 얻기위해 shell.c을 만든다음

SHELL의 주소값을 얻기위해 getenv함수를 작성하였습니다

환경변수주소값 : 0xbffffbe4

[buf+dummy(1036bytes)]에 "A" + 0x1234567 + [dummy+sfp(12bytes)]에 "A" + ret위치에 환경변수주소를 작성하면 되겠습니다

 

다음시간에는 level14를 풀어보겠습니다

'Site > FTZ' 카테고리의 다른 글

FTZ level15  (0) 2022.03.09
FTZ level14  (0) 2022.03.08
FTZ level12  (0) 2022.03.06
FTZ level11  (0) 2022.03.04
FTZ level10  (0) 2022.02.25