시스템 해킹/ProtoStar로 처음 입문하기

[pwnable] 시스템 해킹 ProtoStar - Stack1

0x6b6569 2023. 2. 1. 21:02

gcc -z exexstack -w -no-pie -o stack1 stack1.c

https://github.com/z3tta/Exploit-Exercises-Protostar/blob/master/01-Stack1.md

 

GitHub - z3tta/Exploit-Exercises-Protostar: Solutions for Exploit-Exercises Protostar

Solutions for Exploit-Exercises Protostar. Contribute to z3tta/Exploit-Exercises-Protostar development by creating an account on GitHub.

github.com

 

strcopy는  BOF 가능성이 있는 취약한 함수이다.

 

modified의 위치를 파악해서 해당 위치에 0x61626364 값을 넣으면 풀리는 문제이다.

 

조금 어렵게 느껴진다..!!

 

여기서 modified의 주소를 알아야 해당 주소까지 dummy 값을 채우고 우리가 원하는 값을 넣을 수 있다.

현재 <+79>에서 [rbp-4]의 값을 eax로 mov하고 바로 밑에서 cmp를 하므로 우리가 원하는 위치는 [rbp-4]임을 확인 할 수 있다. 

 

마지막으로 buffer 의 주소는 strcopy가 호출되는 <+64> ~ <+74> 영역을 확인하면 쉽게 알 수 있다.

strcpy는 rsi -> rdi 로 값을 복사한다. (rdi 주소가 buffer 주소이다!)

 

현재 rsi는 rax값이 mov 되는데 rax에는 <+64>를 보면 [rbp-0x50]이 lea가 되는 것을 확인 할 수 있다. 

이것을 토대로 우리는 [rbp-0x50]이 buffer의 주소인 것을 알 수 있다.

 

0x50 - 0x4 만큼 더미 값을 채우면 modified 값에 접근할 수 있다.

DEC(10진수)로 76, 즉 76개의 아무 문자를 채우면 modified에 접근할 수 있다.

 

0x61626364 값은 abcd로 헷갈릴 수 있다. 하지만 little endian이므로 반대로 입력값에는 dcba값으로 입력을 해주어야 0x61626364 으로 값이 들어간다.