STUDY/Pwnable 9

함수 호출 규약

개요 Dreamhack 함수 호출 규약에 대해서 공부한 것을 정리한 포스트이다. 함수 호출 규약이란? 함수 호출 규약은 함수의 호출 및 반환에 대한 약속 한 함수에서 다른 함수를 호출할 때, 프로그램의 실행 흐름은 다른 함수로 이동하고, 호출한 함수가 반환하면, 다시 원래의 함수로 돌아와서 기존의 실행 흐름을 이어나간다. 그러므로 함수를 호출할 때는 반환된 이후를 위해 호출자(Caller)의 상태(Stack frame) 및 반환 주소(Return Address)를 저장해야 한다. 또한, 호출자는 피호출자(Callee)가 요구하는 인자를 전달해줘야 하며, 피호출자의 실행이 종료될 때는 반환 값을 전달받아야 한다. x86(32bit) Architecture 특징 레지스터를 통해 피호출자의 인자를 전달하기에는..

STUDY/Pwnable 2022.10.21

[Dreamhack] Shell_basic

문제 Description 입력한 셸코드를 실행하는 프로그램입니다. main 함수가 아닌 다른 함수들은 execve, execveat 시스템 콜을 사용하지 못하도록 하며, 풀이와 관련이 없는 함수입니다. flag 위치와 이름은 /home/shell_basic/flag_name_is_loooooong입니다. 감 잡기 어려우신 분들은 아래 코드를 가지고 먼저 연습해보세요! 플래그의 형식은 DH{…} 입니다. 분석 이 문제는 shell_basic과 shell_basic.c를 준다. 맨처음 시나리오는 execve를 통해서 shell에 접근하여 하려했으나, 문제를 보면 main함수가 아닌 다른 함수들은 execve, execveat 시스템 콜을 사용하지 못하게 한다. 따라서 Flag의 위치와 이름을 알고 있기 때..

STUDY/Pwnable 2022.10.21

pwntools

개요 이번에 학교에서 새 컴퓨터에 대회에 필요한 툴들을 설치하는 김에 pwntools에 대해서 자세히 알아보는 시간을 가지게 되었다. 본 포스트는 드림핵을 포함한 pwntools에 대한 여러 정보를 재가공하여 하나로 모아 놓은 것이다. pwntools이란? python으로 작성된 exploit 작성을 간단하게 하기위해 만든 CTF framework, exploit 개발 라이브러리이다. CTF 문제를 풀면서 계속 중복되는 코드가 발생하니깐 이거를 빠르고 간편하게 작성하기 위해서 pwntools을 만든 것이라고 한다. pwntools 설치 apt-get update apt-get install python3 python3-pip python3-dev git libssl-dev libffi-dev build-..

STUDY/Pwnable 2022.10.11

어셈블리어 기초

printf등을 포함한 모든 함수는 에필로그 할때 모두 ret가 있음 EIP : 다음 실행할 명령어의 주소 EBP : 스택의 제일 높은 주소 (기준점) ESP : stack의 제일 아래 부분, 현재 진행 stack지점 1. PUSH : 스택에 값을 저장한다 PUSH후에는 스택이 4byte 증가, ESP레지스터가 4byte감소 ex) PUSH EBP --->EBP의 값을 스택에 저장 2. POP : 스택 끝에 저장된 값을 가져온다 POP후에는 스택이 4byte감소, ESP레지스터가 4byte증가 ex) POP EBP ---> 스택 끝의 값을 꺼내서 EBP에 저장 3. MOV : 지정한 값을 지정한 곳에 넣어주는 역할을 한다.(주소에 저장된 값을 저장) ex) MOV ESP, EBP --->스택 프레임 제거..

STUDY/Pwnable 2020.01.15

환경변수 이용하는 법

환경변수에 등록된 데이터는 고정적인 메모리 주소를 가지고 있는다 따라서 shellcode를 환경변수에 등록하고 메모리 주소를 알아가지고 RET에 넣으면 원하는 결과를 얻을 수 있다. ------------ pwntool 안 쓸때------------- 1.환경변수 등록 export [환경변수명]=$(python -c 'print"\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\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\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\xb0\x01\xcd\x80"') 2. shellcode가 위치하는 메모..

STUDY/Pwnable 2020.01.02

주로 사용하는 리눅스 명령어 모음

파일의 종류 파일 : 관련있는 정보들의 집합 리눅스는 파일을 효과적으로 관리하기 위해 디렉터리를 사용 파일시스템 : 디렉터리와 파일로 구성된 전체집합 리눅스에서 파일은 사용 목적에 따라 일반파일.디렉티리, 심벌릭링크, 장치파일로 구분 일반파일 데이터를 저장하는데 주로 사용 각종 텍스트 파일, 실행파일, 이미지 파일 등 리눅스에서 사용하는 대부분의 파일은 일반파일에 해당 실행파일이나 이미지 파일의 경우 바이너리 형태로 데이터가 저장되어 바이너리 파일이라고 함 디렉터리 리눅스에서는 디렉터리도 파일로 취급 디렉터리 파일에는 해당 디렉터리에 저장된 파일이나 하위 디렉터리에 대한 정보가 저장 심벌릭링크 원본파일을 대신하여 다른 이름으로 파일명을 지정한 것 (윈도우의 바로가기와 비슷함) 장치파일 리눅스에서는 하드디..

STUDY/Pwnable 2019.12.24