목록포너블 (5)
안 쓰던 블로그
1. pwntools 기능 공부 및 정리 - pwntool의 사용법 및 다양한 기능 정리 https://foxtrotin.tistory.com/289?category=890138 pwntools 기본 사용법 pwntools pwntools는 CTF 프레임워크이자 익스플로잇을 쉽게 짤 수 있게 해주는 라이브러리이다 공식 깃허브: github.com/Gallopsled/pwntools 공식 문서: docs.pwntools.com/en/stable/# 설치 apt-get update apt.. foxtrotin.tistory.com 2. pwntool을 이용한 간단한 문제풀이 덧셈 foxtrotin.tistory.com/290?category=890138 pwntool을 이용한 문제 풀이 pwntool 기본 ..
size를 입력 받은 다음 데이터를 입력 받는 문제 소스코드를 보면, get_shell함수가 보이고 main에 buf, size 등이 있다 메모리에는 다음과 같이 들어갈 것이다 생략 .... size buf main's sfp main's ret 전형적인 bof문제같이 보이는데, 한 가지 문제가 있다면 if문에서 너무 큰 사이즈를 넘겨버린다는 점이다 그냥 무작정 256를 넘는 범위를 보내면 if문에서 걸러진다 그러면 어떻게 size를 주어야 if문에 안 걸리고 256이 넘는 데이터를 보낼 수 있을까? 드림핵에 이 강의(dreamhack.io/learn/2/12#11)를 참고하라고 하면서 힌트를 준다 int범위는 -2^31 ~ 2^31-1 의 범위를 갖는다 또한 int같은 변수들은 최대 범위를 넘어가면 다..
x86에서 x64가 되면서 구조 뿐만 아니라 스택에도 변화가 생겼다 레지스터 사용법 변화 1) 레지스터 이름 및 크기 변화 EAX(4바이트)->RAX(8바이트) EBX(4바이트)->RBX(8바이트) EBP(4바이트)->RBP(8바이트) 앞에 e가 붙으면 x86의 레지스터(32비트), r이 붙으면 x64의 레지스터(64비트)이다 그리고 e~는 4바이트, r~은 8바이트이다 x86에서 x64가 되면서 레지스터 이름과 크기가 변화했기 때문인데, 그렇기 때문에 e~가 사용되지 않는 건 아니다. eax라는 건 rax 레지스터의 하위 4바이트를 의미하는 이름이라고 알면 된다 2) 새로운 레지스터 추가 x86에서는 없던 레지스터 R8, R9 ... R15가 추가되었다 이 중에 R12~15는 비휘발성 레지스터(Non-..
전에 리버싱 공부하면서 레지스터를 정리한 적이 있다 foxtrotin.tistory.com/266 다시 기억할 겸 정리 레지스터는 CPU 내부에 존재하는 작고 고속인 다목적 메모리이다 종류로는 범용, 세그먼트, 상태 플래그, 명령 포인터 등등.. 이 있다 범용 레지스터는 논리, 수리 연산에 사용되는 피연산자, 주소를 계산하는 사용되는 피연산자, 메모리 포인터가 저장된다 세그먼트 레지스터는 코드 세그먼트, 데이터 세그먼트, 스택 세그먼트를 가리키는 주소가 들어 있다 (세그먼트?: foxtrotin.tistory.com/312) 플래그 레지스터는 프로그램의 현재 상태나 조건 등을 검사하는 데 사용되는 플래그들이 들어 있다 명령 포인터(인스트럭션 포인터)는 다음에 수행해야 하는 명령이 있는 메모리 상의 주소가..
스택 영역(스택 프레임) 프로그램 실행 중 만들어지는 지역변수나 매개변수가 쌓이는 메모리 공간 (참고: 메모리 구조 foxtrotin.tistory.com/312 ) 특징 리틀 엔디안 방식으로 저장되므로 하위 바이트부터 먼저 들어간다 스택 기본 구조 Buffer + sfp[4byte] + ret[4byte] 1) 버퍼는 데이터가 저장되는 공간이다 2) sfp는 스택 베이스값을 뜻한다 sfp는 스택 주소값을 계산할 때 현재 스택값의 기준을 잡을 때 필요한 프레임 포인터 값을 저장한다. 크기는 4바이트이다 sfp가 필요한 이유 ebp레지스터는 한 개이기 때문에 함수가 시작할 때마다 ebp값이 바뀌는데 그 전의 ebp값을 스택에다가 저장해야 하기 때문이다 3) ret 은 return의 약자로 반환 주소값을 뜻..