Sunrin
객체지향 프로그래밍 (Object-Oriented Programming)
1. 객체란? 1) 객체 객체는 어떠한 행동을 포함하는 데이터이다. 자신의 속성을 갖고 있고 다른 것과 식별이 가능한 것을 말한다. - 데이터 : 이름과 값을 가지는 속성이다. - 동작 : 일련의 동작을 정의한 함수이다. 자바에서 이런 속성과 동작을 각각 필드와 메소드라고 부른다. 2) 객체의 예시 개가 있다. 하지만 개의 속성은 모두 다르다. Property dog.name = "meongmeong" dog.sound = "bowwow" dog.age = 5 dog.color = "brown" 2. 객체지향 프로그래밍 언어의 특징 1) 캡슐화 Encapsulation : 데이터와 데이터를 처리하는 함수를 하나로 묶은 것을 의미한다. (1) 캡슐화된 내용이 외부에 정보 은닉이 되어 변경이 발생할 때 오류..
Stack pivoting
Stack pivoting 관련 문서 https://www.lazenca.net/display/TEC/16.Stack+pivot https://eclipsemode.tistory.com/55 기타 참고 자료 더보기 https://www.lazenca.net/display/TEC/02.ROP%28Return+Oriented+Programming%29-x64 (ROP gadget) https://manpd.tistory.com/222(gadget, bss영역) http://blog.daum.net/english_100/65 (VMA, LMA) https://www.embeddedrelated.com/showthread/comp.arch.embedded/77071-1.php (VMA, LMA) https://..
운영체제의 메모리 할당 알고리즘
여러 개의 남는 공간 중 가장 좋은 자리를 고르는 것을 Fit이라고 한다. 프로세스가 생성되고 종료되는 과정에서 Scattered Holes가 만들어지는데, 여러 개의 holes 중 프로세스를 적재할 메모리를 찾아 할당한다. 다음은 메모리를 할당하는데 사용되는 대표적인 알고리즘 세 가지이다. First-fit, Best-fit, Worst-fit Example 이 메모리에다가 저 노란색 크기 만큼의 데이터를 저장하려고 한다. 메모리 할당 알고리즘마다 어떻게 데이터를 저장하는지 보자. First-fit (최초적합) First-fit은 가장 최초로 발견되는 곳에 데이터를 저장한다. 메모리를 순차적으로 탐색하다가 가장 먼저 발견한 곳에 데이터를 저장하는 방법이다. Example의 데이터를 다음과 같이 저장할 ..
Codegate 2018 BaskinRobbins31
많은 글을 참고했다. 어쩌면 이보다 더 많은 글을 봤을 수도. https://blackperl-security.gitlab.io/blog/2018/02/15/2018-02-15-codegate2018-baskinrobbins31/ https://j0n9hyun.xyz/writeups/pwn/baskinrobbins31/ https://rookie0705.tistory.com/5 https://advancedpersistentjest.com/2018/02/04/writeup-baskinrobins31-codegate/ 0. 시작 전 더보기 IDA를 설치하는 것부터가 난관이었다. 세 번은 깔았다 지웠다 한 것 같다. IDA를 처음 설치하고 처음 써보는 거라서 너무 어려웠다. 구글링 하면서 최대한 따라해봤다...
NX-bit binary exploit ( with ASLR )
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 #include void setup() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); setvbuf(stderr, 0, 2, 0); } int main(void) { setup(); char buf[0x100]; printf("What's your name? : "); gets(buf); // Buffer Overflow printf("Hello, "); printf(buf); // Format String Bug printf("!!!\n"); printf("Last greeting : "); gets(buf); return..
NX-bit binary exploit
컴파일 옵션 : gcc -o test2 test.c -fno-stack-protector -z norelro 1. 버퍼의 시작 주소 알아내기 main을 disassemble 한다. 버퍼의 시작 주소를 의미하는 부분은 0x00000000004006f3이다. ( rbp-0x100 ) 0x00000000004006f3 에 breakpoint를 걸고 run한다. buf에 doyeon을 입력한다. doyeon이 0x7fffffffde70에 들어갔다. buf 시작 주소는 0x7fffffffde70 이다. ( 입력받은 문자열이 buf에 저장되기 때문) 2. rdi값 찾기 rdi는 함수의 첫 번째 인자이다. rdi값을 찾기 위해서 gadget을 이용한다. ROPgadget --binary (파일명) ROPgadget ..