[FTZ] 해커스쿨 FTZ 로컬 서버 구축하기
2021. 3. 10. 20:53
Wargame/Hackerschool FTZ
1. VMware Workstaion 설치 https://www.vmware.com/go/getworkstation-win https://gist.github.com/gopalindians/ec3f3076f185b98353f514b26ed76507 접속하여 시리얼 키 입력 2. FTZ Server 설치 https://drive.google.com/file/d/1krZs8e6QG_l_mxMI3eCY11F-lgb12HLb/view Vmware_Redhat_9_FTZ 폴더를 문서→Virtual Machines로 이동 Red Hat Linux.vmx 더블클릭하여 VMware 연결 후 부팅 root / hackerschool 로 로그인하여 ifconfig 명령어로 inet addr 확인(마우스가 없어졌다 → ct..
[Pwnable] RTL 실습
2021. 3. 7. 18:29
Hacking/Pwnable
Return To Libc(RTL)은 리턴 주소를 라이브러리 내에 존재하는 함수의 주소로 바꿔 NX bit를 우회하는 공격 기법이다. 리눅스 익스플로잇의 최종 목표는 셸 바이너리를 실행하는 것이다. libc.so.6 라이브러리에는 execve , execlp , execl , execvp , system , popen 등 프로그램을 실행할 수 있는 다양한 함수들이 존재한다. 이 중 system 함수를 이용해 "/bin/sh" 문자열의 주소를 system 함수의 인자로 넘겨준 후 호출하면 /bin/sh 바이너리가 실행된다. example1 예제에 NX bit가 추가된 example1_nx를 이용해 RTL을 실습해 보도록 하겠다. 취약점은 이전과 동일하지만 example1_nx에는 NX bit가 적용되어 스..
[Pwnable] NX bit
2021. 3. 7. 16:06
Hacking/Pwnable
앞에서는 프로그램의 취약점을 이용해 실행 흐름을 조작한 뒤 스택 영역에 저장된 셸코드를 실행하였다. 하지만 일반적인 프로그램에서의 스택 메모리는 코드를 실행하는 용도로 사용되는 것이 아니라, 일시적으로 데이터를 읽고 쓰는 데 사용되기 때문에 실행 권한이 있을 필요가 없다. 이러한 이유로 프로그램의 공격을 어렵게 하기 위해, 메모리에 쓰기 권한과 실행 권한을 동시에 부여하지 않는 No-eXecute bit(NX bit)가 등장하였다. //gcc -o example2_x example2.c -fno-stack-protector -z execstack -mpreferred-stack-boundary=2 -m32 //gcc -o example2_nx example2.c -fno-stack-protector -m..
[P4C] BOJ 2003 : 수들의 합 2
2021. 3. 6. 15:28
ETC
문제 : 양수 A가 N의 진짜 약수가 되려면, N이 A의 배수이고, A가 1과 N이 아니어야 한다. 어떤 수 N의 진짜 약수가 모두 주어질 때, N을 구하는 프로그램을 작성하시오. 정답 : #define _CRT_SECURE_NO_WARNINGS #include #include #include int main(void) { int num; int num2; int count = 0; int sum = 0; scanf("%d", &num); scanf("%d", &num2); int *p = malloc(sizeof(int) * num); for (int i = 0; i < num; i++) { scanf("%d",*(p+i)); } for (int i = 0; i < num; i++) { sum = 0;..
[P4C] BOJ 10809 : 알파벳 찾기
2021. 3. 6. 15:17
ETC
문제 : 알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오. 정답 : #define _CRT_SECURE_NO_WARNINGS #include #include int main(void) { char arr[101]; char* p = arr; int check; scanf("%s",p); for (char i = 'a'; i
[P4C] BOJ 10773 : 제로
2021. 3. 6. 12:17
ETC
문제 : 재민이는 동아리 회식을 준비하기 위해서 장부를 관리하는 중이다. 재현이는 재민이를 도와서 돈을 관리하는 중인데, 애석하게도 항상 정신없는 재현이는 돈을 실수로 잘못 부르는 사고를 치기 일쑤였다. 재현이는 잘못된 수를 부를 때마다 0을 외쳐서, 가장 최근에 재민이가 쓴 수를 지우게 시킨다. 재민이는 이렇게 모든 수를 받아 적은 후 그 수의 합을 알고 싶어 한다. 재민이를 도와주자! 정답 : #include #include int main(void) { int size; int sum = 0; int temp; int top = 0; scanf("%d", &size); int* matrix = malloc(sizeof(int) * size); for (int i = 0; i < size; i++) ..
[P4C] CodeUp 1810 : (포인터) 부분 문자열
2021. 3. 5. 17:43
Programming Languages/C
문제 : 어떤 문자열에서 부분문자열을 추출하여 출력하는 프로그램을 작성하시오. 단 배열 대신 동적메모리 할당방법을 사용하시오. 정답 : #define _CRT_SECURE_NO_WARNINGS #include #include int main(void) { int a, b; char *matrix = malloc(sizeof(char) * 100); scanf("%s",matrix); scanf("%d %d",&a,&b); for (int i = a - 1; i < b; i++) { printf("%c",*(matrix+i)); } free(matrix); return 0; } 포인터 연산을 이용하여, 메모리를 역참조하였다. *(matrix+i) = matrix[i]
[P4C] CodeUp 1581 : swap 함수 만들기 (Call by Reference)
2021. 3. 5. 17:39
Programming Languages/C
문제 : 이 문제는 두 변수의 값을 바꾸는 함수를 구현하는 문제입니다. 함수명 : myswapmyswap 매개 변수(parameter) : 정수형 포인터 변수 변수 22개(매개변수를 반드시 int∗int∗로 사용) 반환 형(return type) : 없음(voidvoid) 함수 내용 : 첫 번째 포인터가 가리키는 변수의 값이 두 번째 포인터가 가리키는 변수의 값보다 클 경우 두 값을 서로 바꾼다. 정답 : #define _CRT_SECURE_NO_WARNINGS #include void myswap(int *a, int *b) { int temp; if (*a > *b) { temp = *b; *b = *a; *a = temp; } } main() { int a, b; scanf("%d%d", &a, &..