[P4C] 우리집에 GDB 있는데… 메모리 보고갈래? (3) 정리
2021. 3. 13. 02:09
Hacking/Pwnable
DEBUGGING (IDA, GDB 사용) 우리는 이미 tomato.c 소스가 있지만, 보통 소스는 잘 주지 않기에 없다는 가정하에 디버깅을 해보겠다. IDA로 취약점 발견 헥스레이라는 강력한 기능을 제공하는 디스어셈블러이다. 헥스레이는 바이너리를 디컴파일해서 원본 코드와 흡사한 소스를 떨궈준다. F5 단축키를 누르면 다음과 같이 디컴파일한 소스(pseudocode)가 나온다. IDA에서 8번째 라인을 보면, buffer overflow 취약점이 나는 것을 쉽게 확인할 수 있다. strcpy를 할 때 복사 버퍼의 길이를 검증하지 않기에 버퍼 크기인 10보다 더 넣어줘서 bof를 일으켜 num의 값을 1로 바꾸면 될 것으로 보인다. (strcpy는 버퍼 오버플로우 취약점이 발생할 가능성이 농후하기 때문에 ..
[P4C] 우리집에 GDB 있는데… 메모리 보고갈래? (2) 정리
2021. 3. 12. 19:03
Hacking/Pwnable
tomato.c 파일은 strcpy를 할 때 복사 버퍼의 길이를 검증하지 않기에 버퍼 크기인 10보다 더 넣어줘서 bof를 일으켜 num의 값을 1로 바꾸면 될 것으로 보인다. 그리고 실습 환경을 최대한 똑같이 해주기 위해 다음과 같이 몇 가지 보호 기법들을 해제해서 컴파일 해주었다. gcc -m32 -fno-stack-protector -mpreferred-stack-boundary=2 -fno-pie -o tomato tomato.c -fno-stack-protector 옵션을 포함하는 이유 gcc가 스택을 보호하기 위해 ‘canary’라는 것을 삽입한다. 함수 내에서 사용하는 스택 프레임과 return address 사이에 'canary'를 넣는 것이다. 그리고 Buffer Overflow가 발생해..
[P4C] 우리집에 GDB 있는데… 메모리 보고갈래? 정리
2021. 3. 11. 21:55
Hacking/Pwnable
메모리 주소 보통 노트북은 4GB의 램을 쓰는데, 4GB를 Byte 단위로 변환하면 2^32Byte이다. 그리고 1Byte는 주소공간 한 개의 크기이다. 즉, 4GB는 2^32개의 주소를 가질 수 있다. 또 한편, 1 bit는 0 또는 1의 값만 가질 수 있기에 32bit는 2^32만큼의 숫자를 표현할 수 있다. 32 bit 라는 것은 2^32개의 주소를 가지고 있다라는 뜻이다. 따라서 32bit 운영체제는 수 표현을 최대 2^32까지 밖에 못 하기 때문에, 8GB나 16GB의 램을 가지고 있다고 하더라도 접근을 할 수가 없다. 0000…0000(32개) 부터 1111….1111(32개) 까지를 보기 편하게 16진수로 변환하면? 00000000 ~ FFFFFFFF이다! 유저 영역, 커널 영역 시스템 운영..
[FTZ] 해커스쿨 FTZ training 6~10
2021. 3. 10. 22:34
Wargame/Hackerschool FTZ
Trainer6 ※ 패스워드 파일 분석 방법 root : x : 0 : 0 : Admin : /root : /bin/bash 1 2 3 4 5 6 7 1. 로그인할 때 사용되는 아이디 2. 패스워드 - 사용자들의 패스워드만 모아 새로운 파일을 만듦 (/etc/shadow) 3. 컴퓨터에 입력되는 사용자 아이디 (컴퓨터 입장에서의 root라는 의미) 4. 해당 사용자가 속해있는 그룹 5. 사용자의 이름 6. 로그인에 성공 했을 때 기본으로 위치하게 되는 디렉터리 7. 처음 로그인 했을 때 실행되게 할 프로그램 (로그인 했을 때 쉘이 실행되는 것) Trainer7 ※ 리눅스 환경에서 압축하고, 해제하는 방법 (tar, gzip) tar는 사실 압축 프로그램이 아님 압축을 하면 용량이 줄어야 하는데 늘기 때문..
[FTZ] 해커스쿨 FTZ training 1~5
2021. 3. 10. 20:55
Wargame/Hackerschool FTZ
Trainer1 리눅스를 처음 접속하면 "프롬프트"가 나타나며 이것은 서버에 성공적으로 로그인 되었다는 것을 의미한다. [trainer1@ftz trainer1]$ 접속ID 서버 현재위치 ls : 리스트 출력 ls -l : 파일&디렉터리 파일 성격 Permission 용량 생성 날짜 이름 -rw-rw-r-- 1 trainer1 trainer1 779 9월 24 18:37 start.txt drwxr-xr-x 2 trainer2 trainer2 1024 9월 24 11:52 tmp 파일/디렉터리 구분 : 앞부분이 -이면 파일, d이면 디렉터리(directory) ls -a : 숨겨진파일 리스트 출력 (숨겨진 파일은 앞자리에 "."이 들어감) ls -al : 숨겨진파일&디렉터리 리스트 출력 Trainer2 ..
[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..
[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] 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, &..