rosieblue
article thumbnail
[Web 용어] - 인터넷 통신 (IP,TCP/UDP, DNS, Port 등)
🖥️ Computer Science/Web 2023. 5. 17. 16:32

이 포스트는 인프런의 모든 개발자를 위한 HTTP 기본 지식이라는 강의를 참고로 작성하였다. 여기서 다루는 내용은 굉장히 기초이기 때문에 대충 웹이 이렇게 흘러가구나~라는 정도로 이해하면된다. 인터넷 통신 인터넷에서 컴퓨터 둘은 어떻게 통신할까? 웹에서 컴퓨터 두대가 통신을 한다고 하자. 예를 들어 우리가 웹포털사이트에 접속하는 상황을 가정해보자. 이때 포털사이트의 정보를 요청하는 컴퓨터와 포털사이트 정보를 우리에게 주는 컴퓨터 이렇게 분류할 수 있을 것이다. 여기서 정보를 요청하는 컴퓨터를 클라이언트, 정보를 제공해주는 컴퓨터를 서버라고 볼 수 있다. 웹에서는 클라이언트가 서버에게 HTTP 요청 메시지를 보내고 서버가 클라이언트에게 HTTP 응답 메시지를 보내는 형식으로 통신이 이루어진다. 하지만 세상..

article thumbnail
[Pwnable] PIE

들어가며 ASLR : 스택, 힙, 라이브러리 등의 위치가 무작위로 랜덤하게 설정됨 한계 : 코드 영역과 데이터 영역의 위치는 고정되는 단점 우회 : 라이브러리 주소를 알아내면 고정된 오프셋을 통해 원하는 함수로 overwrite할 수 있음 PIE가 적용되지 않으면 코드 세그먼트의 주소는 고정되므로 PLT를 overwrite할 수 있음 고정된 주소의 리턴 가젯(코드 영역에 위치) 등을 이용하여 실행 흐름을 조작할 수 있음 아래는 addr.c라는 파일을 PIE를 적용하지 않고 컴파일한 경우이다. buf_stack, buf_heap, libc_base, printf의 주소는 바뀌지만 main 함수와 사용자 정의 함수 my_func의 위치는 고정되고 있음 -> 만약 리턴 가젯등의 주소가 실행마다 달라진다면 저런..

article thumbnail
[Security] 샌드박스(Sandbox)와 샌드박스의 취약점
🔐 Security 2023. 5. 12. 19:05

샌드박스 아래 샌드박스의 정의에 대해 쉽게 설명해 놓은 좋은 글이 있어서 이를 발췌해 보았다. "Sandboxing is a form of software virtualization that lets programs and processes run in its isolated virtual environment. Typically, programs running within the sandbox have limited access to your files and system, and they can make no permanent changes. That means that whatever happens in the sandbox stays in the sandbox." (https://web.archi..

article thumbnail
[OS] 동기식 입출력 vs 비동기식 입출력
🖥️ Computer Science/OS 2023. 5. 11. 15:54

💡개념 이해하기 오늘은 동기식 입출력과 비동기식 입출력에 대하여 알아볼 것이다. 먼저 동기식, 비동기식 어원부터 살펴보자. 동기식은 영어로 Synchronized인데, 딱딱 시간에 맞춰진다는 의미이다. 예를 들어 립싱크에서 싱크도 Sync이다. 입모양과 노래 소리를 시간에 맞추는 것이니 립'싱크'라고 하는 것이다. 그렇다면 IO에서 synchronize 되어있다는 것은 무슨 의미일까? 아래 그림을 보자. 동기식 입출력 (Synchronized IO)는 순차적으로 입출력이 처리되고 있고, 비동기식 입출력 (Asynchronized IO)에서는 순서를 지키지 않은채 처리되고 있다. 이와 같이 순서를 지켜 처리하는 것을 동기적(Synchronized), 그것을 보장해주지 않는 것을 비동기적(Asynchrono..

article thumbnail
[OS] 스레드(Thread)
🖥️ Computer Science/OS 2023. 5. 10. 17:36

스레드(Thread)란? 스레드(Thread)는 프로세스(Process) 안에서 실제로 작업을 수행하고 있는 하나의 주체이다. 프로세스가 실행되고 있는 프로그램 (참고 : [🖥️ Computer Science/OS] - [OS] 프로세스 vs 프로그램)이라면, 스레드는 프로세스 안에서 진행되는 실행의 흐름이다. 스레드는 오직 한 프로세스 안에만 속해있다. 스레드는 프로세스의 특징을 지니기 때문에 경량 프로세스(lightweight process)라는 이름을 가지고 있기도 하다. 그렇다면 프로세스만 사용하면 되지 스레드까지 귀찮게 또 만들어서 사용하는 것일까? 예시를 들어보면 다음과 같다. (이 예시는 인파님 블로그의 설명을 참고하였음을 밝힌다.) 예를 들어 크롬이라는 프로세스가 실행되고 있다고 하자. 이..

article thumbnail
[gdb] 로컬/서버의 라이브러리 다른 경우

서버의 라이브러리 정보 찾는 방법 서버에서 어떻게든 주소 하나 leak해서 뒤에 3자리(16진수) 입력해주면 됨 (왜냐하면 aslr나 pie 적용되어있어도 뒤에 12bit는 똑같음 페이지 기법 때문에) https://libc.blukat.me/?q=__libc_start_main_ret%3A18a libc database search Matches Not found. Sorry! libc.blukat.me 아래는 서버의 main return 주소 익스플로잇 한것임 라이브러리가 동일하면 bf7이 일정한 것을 볼 수 있음. 따라서 위 프로그램 이용하면됨 예) 이렇게 서버의 라이브러리가 어떤 라이브러리인지 나온다. 오프셋도 쉽게 찾을 수 있음. 위에 All Symbols에 들어가면 이런식으로 심볼들의 주소 혹..