p4c

보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
이번에 풀이할 문제는 HackCTF의 x64 Buffer Overflow다. 지금까지는 32bit 문제에서 exploit을 진행했지만, 문제 명으로도 알 수 있듯이 이번 문제는 64bit 문제에서 exploit을 진행한다. file 명령어로 문제 파일의 정보를 확인해보면 64bit라는 것을 알 수 있다. 실행해보면 첫 줄에 입력을 받는데, 이 입력한 값을 바탕으로 두 번째 줄에서 Hello 으로 문구를 출력해준다. 일단 ida로 문제 파일을 열어봤다. char형 변수(배열로 추정) s, int형 변수 v5를 선언하고 scanf 변수를 통해 문자열을 입력 받은 후, v5는 s의 문자열 길이를 담고, printf 함수를 사용해 Hello 형식으로 출력해준다. bof를 일으킬 수 있는 취약한 함수인 scanf..
이번에 풀이할 문제는 HackCTF의 "내 버퍼가 흘러넘친다!!!"다. 역시 간단히 풀이해 보겠다. 문제를 실행해보면 Name, input을 입력받는 것을 볼 수 있다. 별다른 점은 보이지 않아서 ida를 통해 문제를 열어봤다. Name은 read 함수를 통해 입력 값을 50byte만큼 name 저장, input은 취약한 gets 함수를 통해 입력 값을 20byte 크기([sp+0h][bp-14h]이므로 0x14, 즉 20이다.)의 char형 배열 변수 s에 저장한다. 일단 보기만 해도 gets 함수를 통해 buffer overflow가 일어나는 것을 볼 수 있다. name 변수의 경우 main 함수에 선언돼 있지 않길래 클릭해서 name 변수가 선언된 위치로 가봤다. bss 영역에 선언돼 있는 것을 볼..
이번에 풀이할 문제는 Basic_BOF #2다. Basic_BOF #1 풀이에서 말했듯이, 이번 write-up부터는 핵심만 간단히 풀이하겠다. 리눅스 환경에서 실행해보니, 어떤 입력 값을 넣어도 "하아아아아아아아아앙"이 출력되는 것을 볼 수 있다. ida로 main 함수를 c 코드로 보니 엄청난 양의 코드가 존재하는 것을 볼 수 있다.(ida 문제인가..?) 위 코드에서 한 가지를 알 수 있다. fgets 함수로 133byte만큼 char 형 배열 s에 문자열을 넣어준다. basic_bof #1 문제도 배열 변수의 크기보다 큰 문자열을 fgets 함수로 넣어줘서 취약점이 발생했기 때문에 이 문제도 역시 이 부분이 취약점을 발생시킬 수도 있다. 일단 저 코드만으로는 쉘을 얻을 수 있는 로직 등이 보이지 ..
이번에 풀이할 Basic_BOF #1은 많은 시행착오를 겪으며, 마침내 혼자 힘으로 풀어낸 첫 pwnable 문제다. 문제 화면에서 다운로드 버튼을 눌러 파일을 받으니, 위처럼 아무 확장자도 없어서 처음에는 좀 황당했었다. ELF 파일은 원래 그런가 싶어서 ubuntu를 켜서 확인해 봤다. 참고로 64bit 리눅스로 실행할 경우 처음에는 해당 파일을 찾지 못했다는 오류가 뜨는데, 아래 링크를 참고해 라이브러리들을 설치한다면 해결할 수 있다. 문제 파일이 32bit라 64bit 환경에서는 호환되지 않아 뜨는 오류다. 64bit 리눅스에서 32bit 파일 실행하기 파일을 실행시키니 먼저 입력을 받고 [buf]와 [check]를 출력해준다. [buf]는 사용자의 입력을 출력해주는 것 같다. 자세한 동작을 알아..
Unit 48 구조체 사용하기 -구조체 struct- 구조체는 관련 정보를 하나의 의미로 묶을 때 사용한다. 구조체는 자료를 체계적으로 관리하기 위해 c언어가 제공하는 문법이다. 구조체는 struct로 정의한다. 만드는 것은 struct { }; 으로 하면 된다. 예를 들어 학생 구조체가 있다 가정하면 struct Student { char name[20]; // 이름 int classNum; // 학번 int grade; // 학년 char gender; // 성별 }; 이런식으로 만들 수 있다. 이렇게 구조체로 학생에 사용되는 변수들을 만든다면, 한 학생을 만들 때마다 name1, name2 이런식으로 변수를 여러 개 만들 필요없이 하나로 손쉽게 관리 가능하다. 또한 구조체 안에 들어있는 변수를 멤버..
Unit 45 문자열 자르기 -strtok- strtok는 특정 문자를 기준으로 문자열을 잘라주는 역할을 한다. 마찬가지로 string.h 헤더에 선언돼 있다. 사용은 strtok(, );로 하면 된다. 자른 문자열을 반환하고 더 이상 자를 문자열이 없으면 NULL을 반환한다. #define _CRT_SECURE_NO_WARNINGS #include #include int main() { char a[30] = "pwnable system hacking"; // 30 크기의 char 형 배열 선언 char *p = strtok(a, " "); // 공백을 기준으로 문자열 자르고 포인터 반환 while (p != NULL) // 문자열을 더 이상 자르지 못할 때까지 { printf("%s\n", p); /..
Unit 42 문자열을 복사하고 붙이기 -strcpy- strcpy는 문자열을 다른 배열이나 포인터로 복사해주는 함수다. strcmp 등과 마찬가지로 string.h 헤더에 선언돼 있다. 사용은 strcpy(, );로 하면 된다. strcpy 역시 취약점이 있는 함수이므로 #define _CRT_SECURE_NO_WARNINGS를 써줘야한다. #define _CRT_SECURE_NO_WARNINGS #include #include int main() { char a[10] = "Hello"; char b[10]; // 10 크기의 char형 배열 a, b를 선언하고 문자열 Hello를 a에 저장 strcpy(b, a); // a의 문자열을 b에 복사 printf("%s %s", a, b); // a, b..
dyp4r
'p4c' 태그의 글 목록 (3 Page)