TeamH4C_ProjectH4C/워게임

[TeamH4C_pwn] 포너블 문제 연습

P4P3R_H 2021. 4. 11. 23:14

안녕하세요! 이번에는 pwnable에 대한 기초적인 문제를 만들어 보았습니다.

 

pwnable 1

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int key;
	char buf[50];
	printf("buf: 0x%p key: 0x%p\n", &buf, &key);
	fflush(stdout);    

	gets(buf);
	fflush(stdout);

	if (key == 0x44454144)
		system("/bin/bash");
}

아래와 같이 ASLR기법을 해제하고 컴파일을 하여 32비트로 컴파일하면서 NX가 적용되지 않도록 해줍니다. NX비트의 적용방법으로는 아래의 주석과 같습니다.

sysctl -w kernel.randomize_va_space=0
gcc -m32 -fno-stack-protector -mpreferred-stack-boundary=2 -z execstack -no-pie -o buf1 buf1.c

// NX 미적용
// gcc -m32 -fno-stack-protector -mpreferred-stack-boundary=2 -z execstack -no-pie -o buf1 buf1.c
// NX 적용
// gcc -m32 -fno-stack-protector -mpreferred-stack-boundary=2 -no-pie -o buf1 buf1.c

no-pie옵션을 준 것은 PIE가 아닌 일반 실행파일을 만들기 위해 적용시킨 것입니다.

 

pwnable 2

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main()
{
	char buf[100];

	printf("ptr : %p\n", buf);
	gets(buf);

	return 0;
}

이번 문제도 pwnable 1과 같이 파일이름만 다르게 하여 컴파일을 해주고, 쉘코드를 삽입한 후 ret주소를 바꾸는 방식으로 권한을 얻으면 될 것입니다.

25바이트 쉘코드
\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80

쉘 코드는 위와 같습니다.

 

간단하게 문제를 보았는데 잘못된 부분이 있으면 알려주시면 감사하겠습니다!🙇‍♂️