목록I.sly()/9기 기초 - 포너블 (16)
또 뭐하지
카나리함수 시작 시 스택 버퍼와 Return Address 사이에 랜덤 값을 삽입한 후 함수 종료 시 해당 랜덤 값의 변조 여부를 확인하여 메모리 오염 여부를 확인하는 보호 기법 카나리 생성 `security_init` 함수에서 TLS에 랜덤 값으로 카나리를 설정하면, 매 함수에서 이를 참조하여 사용합니다. 카나리 우회 기법- 무차별 대입 공격 (Brute Force Attack) : 무차별 대입으로 카나리 값을 구하는 방법. 현실적으로 불가능.- TLS 접근 : 카나리는 TLS에 전역 변수로 저장되므로, 이 값을 읽거나 조작할 수 있으면 카나리를 우회 가능- 스택 카나리 릭 : 함수의 프롤로그에서 스택에 카나리 값을 저장하므로, 이를 읽어낼 수 있으면 카나리를 우회할 수 있음. 가장 현실적인 카나리 우..
1. Calling Convention함수 호출 규약함수 호출 규약 : 함수의 호출 및 반환에 대한 약속호출자 : 프로그래밍에서 다른 함수 또는 메서드를 호출하는 주체. 쉽게 말해, 호출자는 특정 함수 또는 메서드를 실행하도록 명령한 코드 부분을 가리킴.함수를 호출할 때는 반환된 이후를 위해 호출자의 상태 및 반환 주소를 저장해야함또한, 호출자는 피호출자가 요구하는 인자를 전달해줘야하고, 피호출자의 실행이 종료될 때는 반환값을 전달받아야 함함수 호출 규약의 종류컴파일러는 지원하는 호출 규약 중에서 CPU의 아키텍처에 적합한 것을 선택x86(32bit) 아키텍처 -> 레지스터 수 적음 -> 스택으로 인자 전달하는 규약 사용x86-64 아키텍처 -> 레지스터 수 많음 -> 적은 인자는 레지스터만, 많은 인자..
Shellcode익스플로잇(Exploit) : 상대 시스템을 공격하는 것셸코드(Shellcode) : 익스플로잇을 위해 제작된 어셈블리 코드 조각. 셸코드는 어셈블리어로 구성되며 공격을 수행할 대상 아키텍처와 운영체제에 따라, 그리고 셸코드의 목적에 따라 다르게 작성. 1. orw 셸코드: 파일을 열고, 읽은 뒤 화면에 출력해주는 셸코드. [예시] "/tmp/flag"를 읽는 셸코드 - 셸코드의 동작을 C언어 형식의 의사코드로 표현한 것char buf[0x30];int fd = open("/tmp/flag", RD_ONLY, NULL);read(fd, buf, 0x30);write(1, buf, 0x30); - 필요 syscallsyscallraxrdirsirdxread0x00fd*bufcountwri..
환경구축Ubuntu 22.04 기반 윈도우 : VMware, VirtualBox, WSL2맥 : VirtualBox Background - Computer Science1. Computer Architecture(1) 컴퓨터 구조 (Computer Architecture): 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 이들을 구성하는 방법 - 컴퓨터의 기능 구조에 대한 설계 : 연산을 효율적으로 하기 위한 기능을 설계.ex) 폰 노이만 구조, 하버드 구조, 수정된 하버드 구조- 명령어 집합구조 : CPU가 처리하는 명령어를 설계 ex) ARM, MIPS, AVR, 인텔의 x86 및 x86-64 등- 마이크로 아키텍처 : 명령어 집합을 처리하는 CPU 회로를 설계ex) ..
ssh public private key ssh 공개키, 비공개 키를 이용해 로그인 기존 : ssh egoing@192.168.0.67을 입력하고 비밀번호를 입력하면 로그인 가능 ssh-keygen : /home/egoing/.ssh/id_rsa에 키쌍을 생성 id_ras : 비밀키, id_rsa.pub : 공개키 로그인하고자하는 컴퓨터에 공개키를 저장하게 되면 비밀번호 없이 로그인 가능. : authorized_keys에 pub key를 추가하면 됨 -> ssh-copy-id egoing@192.168.0.67를 이용해 추가 가능 (여기서 egoing@192.168.0.67는 로그인하고자 하는 컴퓨터) rsync ssh키를 이용하면 로그인 없이 rsync를 이용할 수 있음 -> crone 기능을 이용하..
rsync 1 : Basic r : remote의 약자 sync : 각 컴퓨터의 변경내용을 다른 컴퓨터에도 반영되도록하여 동일한 상태를 유지하는것. rsync : 인터넷을 통해 sync할 수 있도록하는 프로그램. 파일 카피, 백업 등에 사용. src와 dest 디렉토리를 만들어 두 디렉토리를 동기화해보자 src 폴더에 파일을 만든 후 rsync -a src/ dest를 입력하면 dest라는 디렉토리 안에 src 디렉토리 아래의 파일이 복제됨. cf. touch test{1..10} : test1부터 test10까지의 파일을 생성 cf. src/ -> src 밑의 모든 파일 rsync -av src/ dest를 통해 변동 내용만 복제 가능. rsync 2 : Remote sync 다른 컴퓨터에 sync를 ..
Domain 1. DNS (Domain name system) 서버에 접속할 때 서버의 이름이 google.com이라고 할 때, 실제로는 google.com의 IP Address로 접속을 하게된다. 브라우저를 통해 google.com에 접속을 시도하면, 먼저 DNS의 IP Address로 접속해 google.com의 IP Address를 묻게되고 응답 받은 값으로 서버에 접속하게 된다. 2, hosts 파일 : 도메인 네임과 IP Address를 매핑하는 파일 각각의 컴퓨터마다 hosts 파일을 가짐. DNS 이전에는 hosts 파일을 통해 접속. elinks google.com : google 홈페이지에 접속 elinks http://localhost : 로컬 서버에 접속 sudo nano /etc/h..
인터넷인터넷 통신 : request, response 가 계속해서 왕래하는 컴퓨터 간의 대화client : request를 하는 컴퓨터server : request를 받아서 response를 하는 컴퓨터domain name : google.com과 같이 서버에 접속할 때 사용하는 이름ip address : 서버에 접속할 수 있는 주소.ping google.com으로 확인해볼 수 있다.DNS 서버 : domain name의 ip address를 저장해둔 서버domain name을 입력하면 DNS 서버를 통해 ip address로 변환되어 서버에 접속하여 응답이 온다.ip addr : 본인의 ip 주소를 알 수 있는 명령어 -> 컴퓨터에 부여된 실제 ip, private addresscurl ipinfo.i..