분류 전체보기 83

no relro, partial relro, full relro /GOT 변화 실습

실습코드// hello.c#include int main() { printf("Hello, world!\n"); return 0;} 컴파일NO RELRO로 컴파일- gcc hello.c -o hello_norelro -Wl,-z,norelroPARTIAL RELRO- gcc hello.c -o hello_partial -Wl,-z,relro -Wl,-z,lazyFULL RELRO로 컴파일- gcc hello.c -o hello_full최신 버전에선 옵션을 안주면 자동으로 full Relro 설정됨. hello_norelro 파일 보호기법 확인 hello_partial 파일 보호기법 확인hello_full 파일 보호기법 확인 hello_norelro got 확인--> 모두 쓰기 가능 상태 h..

프로세스? 스레드? 멀티스레드?

프로세스란?실행중인 프로그램.운영체제가 자원을 할당하고 관리하는 독립적인 실행 단위.즉, 운영체제에 의해 메모리 공간을 할당받아 실행중인 것. 프로세스의 메모리 구조이렇다함. Text: 실행할 기계어 코드 (프로그램 명령어)가 저장됨. 함수나 if,for 등 실행코드 포함.-> 읽기 전용(Read-Only) -> 코드의 무결성을 보장하기 위해.Data: 초기화된 전역 변수와 static 변수 저장 -> 메모리에 올릴 때 이미 값이 지정된 변수들이 저장됨.BSS: 초기화되지 않은 전역 변수/ 정적 변수 저장. -> 실행하면 0이나 garbage값으로 초기화됨.Heap: 런타임 시에 동적 메모리 할당을 위한 공간. -> 사용자가 필요할 때마다 크기를 정해 할당하고 해제해야함. -> 위로 자람.Stack: 함..

PIE, ASLR, PIC 개념과 차이 실습하면서 이해

ASLR(Address Space Layout Randomization)코드나 데이터가 어느 주소에 로딩될지 랜덤으로 정함스택, 라이브러리, 힙, mmap이 랜덤하게 배치됨.근데, PIE가 같이 있는 경우엔 메인 바이너리 주소도 바뀜.-> 운영체제가 제공하는 보호기법임. PIE(Position Independent Executable): 위치 독립 실행 파일코드가 어느 주소에 로딩 돼도 잘 작동하게 함. 즉, ASLR이 있어야만 보안 효과가 있음.메인 실행 바이너리를 바꿔줌.-> 컴파일 시 설정되는 보호기법임. PIC(Position Independent Code) : 위치 독립코드어느 주소에 로딩돼도 작동할 수 있는 코드.PIE는 내부적으로 PIC방식으로 만들어진 실행파일임.-> 모든 라이브러리 파일은..

one gadget

원가젯 (One Gadget)이란?libc 내부에 존재하는 작은 코드 조각으로, 특정 조건이 충족되면 쉘을 실행. ROP 체인 없이 하나의 주소만으로 쉘 획득 가능.일반적으로 레지스터나 메모리의 특정 값이 NULL이어야 하는 등의 조건이 있음.원가젯의 위치와 조건은 사용하는 libc 버전에 따라 달라짐.ruby/ one_gadget 설치해봄.sudo apt-get install rubysudo gem install one_gadget 도커 안에서 원가젯이 잘 안 깔려서리눅스에서 원가젯깔고 도커에서 립시꺼내서씀.docker cp containerID:/lib/x86_64-linux-gnu/libc-2.31.so ./libc.so.6 원가젯 사용.one_gadget ./libc.so.6이 명령어를 치면 여러..

UAF

보호기법IDA 분석1. add noteidx값은 0-0x7F(127) 까지만 가능함.dword_4048[4 * v3] = size; 를 보면 인덱스 4칸마다 입력한 사이즈를 저장함.그리고 지정한 사이즈만큼 heap 메모리 할당.*(&unk_4040 + 2 * v3) = v1; 를 보면 2칸마다 포인터를 저장함. 디버깅해서 분석각각 다른 사이즈로 할당을 해주고 시작점을 찾은 후에 &unk4040을 더해준 곳 안을 봄. (스트립 파일일 경우)안을 보면 구조체 배열을 볼 수 있음.왼쪽에 할당된 힙 주소가 들어있고, 오른쪽엔 사이즈가 들어가있음.힙주소는 char형이라 8바이트 그대로 들어가 있는데, size는 int형이라 4바이트지만 보기쉽게 8바이트로 맞춰 들어가있음. 2. delete note여기서는 인..

setbuf란?

setbuf?void setbuf(FILE *stream, char *buffer);스트림의 버퍼링 방식을 설정함. 스트림이 뭔데프로그램이 다양한 입출력 소스와 일관된 방식으로 통신할 수 있게 해주는 추상화된 데이터 통로. 버퍼링이 뭔데데이터를 일시적으로 저장하는 버퍼에 모았다가 한 번에 처리하는 방식. char my_buffer[1024];setbuf(stdout, my_buffer);원하는 메모리를 버퍼로 사용하는 것.-> 특수하게 메모리 할당을 하고 싶을 때 사용함. 시스템에서 사용되는 기본 버퍼 크기가 너무 클 때 주로 사용.setbuf(stdout, 0LL);setbuf(stdin, 0LL);stdout과 stdin 두 스트림의 버퍼링을 비활성화한 것.-> 비활성화 하면 출력함수랑 입력함수가 호..

힙 실습 정리2

tcachebins -> fastbins -> unsortedbin 순으로 사용됨. tcachebins에 있는 chunk 주소는 -> fd주소.fastbins에는 있는 chunk 주소는 -> 헤더 주소. fastbins -> tcachebins chunk 이동이 상태에서 malloc 7번을 해주면 tcachebins에 있는 chunk들이 전부 나가고fastbins에 있는 chunk들이 tcachebins로 이동함. __malloc_hook __malloc_hook에 현재는 0이 들어있고 안에 값을 넣어줄거임.AAAA를 넣어줌.RIP가 바뀌면서 넣어준 값을 jmp 했음.유효한 주소였으면 그 주소로 이동했음.만약 원가젯을 __malloc_hook에 넣어주면 쉘 획득이 가능해짐. __free_hookfr..

힙 실습 정리 1

tcachebins LIFO 확인malloc 0x10 을 2번 주고 free로 다시 해제해줌.tcachebins를 보면 먼저 해제해준 chunk가 들어가있음.그리고 다시 malloc을 해주면 마지막에 해제된 영역이 할당됨.-> LIFO 리스트 구조 확인이번에는 3개를 할당/해제 해줌.각각 해제된 영역을 보면 fd에 이전에 해제된 chunk가 적혀있음.가장 처음에 해제된 영역엔 fd에 0이 들어있음. tcache arena 영역 확인그리고 주소들 앞을 보면 [ 3] 이렇게 해제된 chunk의 개수가 적혀있는데,tcache arena안에서도 확인 가능함.그리고 마지막에 해제된 chunk가 적힘.만약 저게 할당되면 다음에 있는 chunk가 적히고 개수는 줄어듬. tcachebins 사이즈 별 관리다른 사이..

.net

.net 마이크로소프트에서 개발한 크로스 플랫폼 소프트웨어 프레임 워크C#, F# 같은 언어를 사용해서 개발 가능함. 프레임 워크: 소프트웨어 개발에서 사용되는 기본 구조나 플랫폼. 개발자들이 애플리케이션을 더 쉽고 효율적으로 만들 수 있도록 도와줌. .Net의 작동 원리와 컴파일 과정 1. 소스코드 작성개발자가 C#이나 F#등의 고급 언어로 코드를 작성함.2. IR(중간언어) 변환작성된 코드는 컴파일러에 의해서 IL이나 CIL이라는 중간언어로 변환됨. 여기서 중간언어는 PE파일 형식으로 패키징됨.3. CLR(공통언어, 런타임)역할CLR은 .NET의 핵심 엔진으로, 중간 언어로 된 코드를 실행하는 역할을 함.메모리 관리나 보안, 예외처리 같은 런타임 서비스 제공.중간 언어를 실제 기계어로 변환하는 컴파일..

basics 2025.04.29

docker 정리

초기에 LXC(리눅스 컨테이너스)라는 커널 컨테이너 기술을 이용하여 만든 컨테이너 기술 중 하나. 나무위키 컨테이너는?컨테이너를 설명하자면 '운영체제 수준 가상화'. Linux의 cgroup 과 namespace를 이용하여 호스트 OS와 별개로 동작하는 가상머신 비스무리한 것. 나무위키 well known port : 1 -10000포트10000-65535 2바이트 NAT?network address translation공인ip로 들어왔을때 사설 ip로 넘겨줌. 포트포워딩?공인 ip 몇번 포트는 -> 사설ip 몇번포트로 보내겟음. 공유기 -> 공인ip : 공신력있는 ip, 통신사에서 할당해줌.사설ip : 통신이 안됨. 사설 ip끼리만 통신 가능. docker run -it ubuntu:22.04 ..