rosieblue
article thumbnail
[Linux] /proc 디렉토리

/proc 리눅스에는 커널과 커널 모듈로부터 프로세스에게 정보를 전송해주기 위한 추가적인 메카니즘인 /proc 파일시스템이 있다. 원래는 프로세스 정보에 쉽게 접근할 수 있기 위해 만들어졌기 때문에 proc(process)라는 이름을 가지고 있다고 한다 프로세스 정보 대충 아무 프로세스나 실행하고 이 친구의 proc 디렉토리를 가보겠다 이렇게 여러 정보들을 담은 디렉토리가 생성이 됐다 /proc/[pid]/maps 아래처럼 메모리 매핑이 어떻게 되어있는지 보여준다 /proc/[pid]/cmdline 프로세스 인수를 담는 애다! 우리는 딱히 옵션을 주지않았기 때문에 아래처럼 출력됐다 /proc/[pid]/cwd 해당 프로세스가 실행되고 있는 디렉토리를 링크로 걸어둔 거다 아래처럼 똑같이 생겼다 /proc/..

article thumbnail
[Kernel] Tasks (1)
Linux Exploitation/Kernel 2023. 10. 4. 16:02

Tasks 리눅스에서는 프로세스나 스레드를 'Task'라는 하나의 단위로 관리한다. Task는 결국 하나의 '실행 단위'를 이야기한다. 결국 프로세스나 스레드는 개념적인 구분일 뿐이고, 리눅스 내에서 이들이 관리될 때에는 프로세스나 스레드나 모두 '태스크'로 관리가 된다. 테스크 별로 시간을 할당하여 여러 개의 테스크들을 실행하는 멀티 태스킹, 실행 시간을 배분하는 스케줄링 등 모두 많이 들어본 용어들일 것이다. 각 태스크는 task_struct라는 구조체로 표현이 된다. 커널은 태스크 관리자라고 했었는데 그렇기 때문에 task_struct는 커널 메모리 내에 존재한다. 생각해보면 당연한 것이, 이렇게 중요한 정보는 일반 사용자가 접근하면 안되므로 커널 메모리 안에 들어가서 쉽게 접근할 수 없게 만드는 ..

article thumbnail
[Heap] Exploitation : House of Spirit
Linux Exploitation/Heap 2023. 10. 3. 23:06

House of SpiritHouse of Spirit은 free함수의 인자를 우리가 원하는 값으로 보내서, 이 값에다가 재할당해서 AAW이나 AAR등을 할 수 있는 기법이다. 해당 기법으로 원하는 위치(Heap 영역이 아니어도 상관 x! 스택이나 다른 곳도 가능~~)에 청크를 할당하여 임의의 주소의 값을 알거나 덮을 수 있다! 예) free(main의 return address) - 이렇게 해서 return address overwrite 하기위 예시와 같은 공격을 하기 위해서는 당연히 main의 return address를 알아야할 것이고 그렇다면 스택의 주소를 구하는 과정 또한 선행되어야겠다! 예시 1// gcc -o spirit1 spirit1.c -no-pie #include #include i..

보호되어 있는 글입니다. 내용을 보시려면 비밀번호를 입력해주세요.
article thumbnail
[Heap] Exploitation : House of Force
Linux Exploitation/Heap 2023. 9. 30. 22:49

House of Force 힙을 안한지 너무 오래되어서 오랜만에 힙 공부를 하는겸 House of Force 기법에 대해 분석하고자 한다. House of Force 기법은 Top Chunk의 사이즈를 조작해서 원하는 위치에 청크를 할당 할 수 있게 하는 공격 방법이다. House of Force를 보기 전에 Top chunk에 대해 다시 복습해보자. -> [Heap] Background : Chunk [Heap] Background : Chunk Heap 시리즈 [Heap] Background : Memory Allocator [Heap] Background : Chunk [Heap] Background : Bin (Fastbin, Unsorted bin, Small bin, Large bin) [He..

article thumbnail
[드림핵(Dreamhack)] pathtraversal
🖥️ Computer Science/Web 2023. 9. 28. 18:01

#!/usr/bin/python3 from flask import Flask, request, render_template, abort from functools import wraps import requests import os, json users = { '0': { 'userid': 'guest', 'level': 1, 'password': 'guest' }, '1': { 'userid': 'admin', 'level': 9999, 'password': 'admin' } } def internal_api(func): @wraps(func) def decorated_view(*args, **kwargs): if request.remote_addr == '127.0.0.1': return func(*..