감자 텃밭

[프로토스타] protostar - heap2 본문

protostar/heap

[프로토스타] protostar - heap2

g2h 2021. 8. 16. 16:49

이번에는 protostar에 heap2 문제이다. 해당 문제는 uaf기초에 관한 문제인 거 같았다,

일단 해당 프로그램을 실행시켜보았다.

해당 프로그램을 실행시켰을 때 auth와 service에 각각 값을 입력할 수 있고 입력했다면 해당 변수가 저장되어있는 주소를 알려주는 거 같다.

해당 프로그램의 c코드가 주어져 확인해보았다.

 

해당 코드를 봤을때는 fgets를 통해 입력값 검증을 통해 입력을 받기에 bof는 일어나지 않는다

또한 auth에도 입력값 검증을 통해 입력을 받고 auth에 malloc를 통해 메모리를 할당받는다.

그 후 입력값을 auth->name변수에 복사한다 그 후 다음 if문을 보면 free를 통해 해당 malloc를 통해 할당받은 메모리를 reset를 입력하면 free로 정리하는 모습을 볼 수 있다.

그 후 service의 조건문을 보면 service변수에 strdup를 이용해 해당 입력값을 넣는 것을 볼 수 있다.

 

그 후 login을 입력했을 때 auth -> auth일 때 you have... 문자열들이 출력되면 성공이다. 즉 auth구조체 값이 있으면 되는 것인데 이미 free를 했는데 어떻게 이렇게 되는 거냐 하면 strdup라는 함수 때문이다 이 함수는 malloc 해주고 malloc과 같이 메모리가 할당된 주소를 반환하기 때문이다.

 

두 개의 입력값을 확인했을 때 두 변수의 차이가 0x10 정도 차이가 났다 이는 10진수로 16이다.

그럼 우린 name를 채우고 auth에 접근해야 하기 때문에

name32를 채우기 위해 이미 16 정도 후의 위치에 메모리에 존재하기에 auth에 접근하기 위해서는 17만큼의 더미 값이 필요하다 그럼 익스 코드는 아래와 같다.

 

해당 코그를 살펴보면 auth AAAA를 보내 auth의 주소 값에 값을 넣고 reset를 통해 free를 한 후 service에서 bof를 일으키기 위해 더미 값을 17개 넣어 차이나는 0x10(16) + 17를 통해 auth에 접근하여 auth에 값을 넣은 후 login을 통해 해당 조건문을 통과한다 실행시켜보면 성공적으로 문자열이 출력된다.

'protostar > heap' 카테고리의 다른 글

[프로토스타] prostar - heap1  (0) 2021.08.10
[프로토스타] protostar - heap0  (0) 2021.08.10