Protostar Format4 [ FSB / PLT / GOT ]

2017. 6. 13. 12:58SystemHacking/Protostar




Protostar Format4번 문제입니다

[ 그림1 ]


vuln()함수에서 exit(1)함수가 실행되어 종료됩니다

exit(1)함수가 실행되는 주소값을 변질시켜서 hello()함수가 실행되게 해보도록 하겠습니다

objdump명령어를 사용하여서 필요한 함수들의 주소를 찾아내겠습니다


[ 그림2 ]


$objdump -TR ./format4 | grep exit

exit(1)함수가 실행(호출)되는 주소 : 0x08049724


[ 그림3 ]


$objdump -d ./format4 | grep hello -F10

hello()함수의 시작주소 : \x080484b4


exit(1)함수가 호출되는 주소에 hello()함수의 시작주소를 덮어씌우는 공격코드를 작성하면 끝입니다


[ 그림4 ]


[1] 먼저 우리가 입력한 데이터가 저장되는 위치를 파악했습니다

[2] 입력할 데이터값은 exit(1)함수를 호출하는 주소가 되겠습니다

[3] "%c"스트링을 이용해서 hello()함수의 시작주소를 입력시켰습니다

포맷스트링의 자세한 설명은 http://itsaessak.tistory.com/115 링크에 있습니다




# 보충내용 #

위 문제풀이과정에서 " $objdump -TR ./format4 | grep exit "명령어를 통해서 exit()함수의 주소를 가져왔다고 했습니다

해당 명령어를 이해하려면 PLT와 GOT개념을 알아야합니다

간단히 말하면 프로세스에서 사용할 함수들을 구현할 수 있는 코드를 컴파일한 오브젝트 파일이 있습니다

이 오브젝트 파일들이 모여있는 곳이 라이브러리(GOT) 입니다

실행파일과 라이브러리를 연결(링킹)시켜서 함수를 사용할 수 있게 하는 원리입니다 ( 링킹방식에는 Static과 Dynamic방식이 있습니다 )

static방식은 라이브러리의 내용들을 실행파일에 모두 내장시켜서 라이브러리와의 연결없이 사용할 수 있지만 용량이 매우 커지는 단점이 있습니다

( 실행파일 컴파일 시 static옵션을 주어서 컴파일 한다 )

Dynamic방식은 라이브러리로부터 필요한 함수들의 정보를 얻어와서 함수를 구현하는 방식입니다

문제의 파일은 Dynamic방식이였습니다. 따라서 -TR옵션을 이용해 라이브러리에서의 exit(1)함수의 주소를 찾아냈고, 그 함수의 주소를 우리가 원하는 함수(hello())의 주소로 변질시켜주어서 공격을 성공시킨 원리입니다

좀 더 상세한 설명은 http://itsaessak.tistory.com/132 링크에 있습니다


'SystemHacking > Protostar' 카테고리의 다른 글

Protostar Heap2 [ Heap Overflow ]  (0) 2017.06.14
Protostar Heap0 [구조체활용]  (0) 2017.06.14
Protostar Format3 [ FSB / objdump ]  (0) 2017.06.13
Protostar Format2 [ FSB / objdump ]  (0) 2017.06.13
Protostar Format1 [ FSB / objdump ]  (0) 2017.06.13