Protostar Stack4
https://exploit.education/protostar/stack-four/
Stack Four :: Andrew Griffiths' Exploit Education
Stack Four Stack4 takes a look at overwriting saved EIP and standard buffer overflows. This level is at /opt/protostar/bin/stack4 Hints A variety of introductory papers into buffer overflows may help.gdb lets you do “run < input”EIP is not directly aft
exploit.education
위 사이트에 접속을 하면 Stack Four문제의 소스코드를 볼 수 있다.
Source Code
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
void win()
{
printf("code flow successfully changed\n");
}
int main(int argc, char **argv)
{
char buffer[64];
gets(buffer);
}
소스코드를 보면 main함수와 win이라는 함수가 있다. main함수에서 buffer를 입력받고있고 끝이난다.
이 문제는 main함수가 호출되고 return 될때 win()함수를 출력하는 문제임을 유추해볼 수 있다.
main함수에서 gets로 buffer를 입력받고 있지만 길이를 검증하지 않기 때문에 buffer가 지정된 크기보다 더 많은 데이터가 들어가 buffer overflow가 발생할 수 있다. buffer를 가득채우고 ebp까지 가득채워 return에서 win함수의 시작부분을 넣어주면 main함수가 끝날 때 win함수를 실행할 수 있을 것이다.
문제 풀이
Stack4번을 실행을 하면 gets로 문자들을 입력을 받을 수 있다.
gets로 입력을 받기 때문에 buffer에 지정된 크기보다 더많은 데이터를 입력받을 수 있다.
많은 데이터를 넣었을 경우 segmentation fault를 출력하며 오류가 난다.
그림 2는 main함수를 disassemble한 화면이다.
main+27번째 위치에서 gets를 사용하여 문자열들을 입력받고 main+38번째 위치에서는 ret으로 다음에 실행할 함수의 위치를 가지고 있다.
먼저 return위치인 main+38번째 위치에 브레이크포인터를 걸고 pattern create로 100개의 문자열을 가진 패턴을 입력하여 return 위치에서 rsp를 확인해보도록 하겠다.
ret위치인 main+38위치에서 스택 젤 상단인 rsp를 확인해보니 우리가 만든 패턴들이 들어있음을 알 수 있고 이 패턴의 offset을 확인해보니 72라는 것을 알 수 있다. 이것은 우리가 입력한 buffer에서 72번째 위치에 떨어져있다는 것이다.
우리는 win함수를 실행해야하니 win함수의 주소값을 알아야한다.
disas win을 통하여 win함수의 시작 주소를 알 수 있다.
win함수의 시작주소는 0x0000000000401136이다.
pwntools를 이용하여 공격코드를 작성하겠다.
로컬에 payload를 전송하기 위해서 process에 경로를 입력하면 된다.
win함수의 주소를 p64로 리틀엔디언 방식으로 패킹을 하였고 payload에 72바이트의 쓰레기 값과 패킹한 win함수의 주소를 넣어 ./Stack4로 payload를 보내주었다.
python으로 payload를 작성한 파일을 실행하였다.
그 결과 code flow successfully changed라는 문자열이 실행되었고 win함수로 우회가 된것을 알 수 있다.
'System hacking > 프로토스타(Protostar)' 카테고리의 다른 글
Protostar Stack5[RTL이용하여 문제 풀이] (3) | 2022.09.22 |
---|---|
Protostar Stack5 문제 (1) | 2022.09.21 |
Protostar Stack3 문제 (0) | 2022.09.16 |
Protostar Stack2 문제 (2) | 2022.09.14 |
Protostar Stack1 문제 (2) | 2022.09.12 |