ssongk
ssongk
ssongk
전체 방문자
오늘
어제

공지사항

  • resources
  • 분류 전체보기 (626)
    • CTF (24)
    • background (79)
      • fuzzing (5)
      • linux (29)
      • linux kernel (15)
      • windows (2)
      • web assembly (1)
      • embedded (0)
      • web (13)
      • crypto (9)
      • mobile (1)
      • AI (1)
      • etc.. (3)
    • write-up(pwn) (171)
      • dreamhack (102)
      • pwn.college (4)
      • pwnable.xyz (51)
      • pwnable.tw (3)
      • pwnable.kr (5)
      • G04T (6)
    • write-up(rev) (32)
      • dreamhack (24)
      • reversing.kr (8)
    • write-up(web) (195)
      • dreamhack (63)
      • LOS (40)
      • webhacking.kr (69)
      • websec.fr (3)
      • wargame.kr (6)
      • webgoat (1)
      • G04T (7)
      • suninatas (6)
    • write-up(crypto) (19)
      • dreamhack (16)
      • G04T (1)
      • suninatas (2)
    • write-up(forensic) (53)
      • dreamhack (5)
      • ctf-d (47)
      • suninatas (1)
    • write-up(misc) (13)
      • dreamhack (12)
      • suninatas (1)
    • development (31)
      • Linux (14)
      • Java (13)
      • Python (1)
      • C (2)
      • TroubleShooting (1)
    • 자격증 (8)
    • 이산수학 (1)
    • 정보보안 (0)
hELLO · Designed By 정상우.
ssongk

ssongk

background/linux

mprotect

2022. 9. 29. 11:18

이전에 드림핵의 return to shell이라는 문제를
버퍼에 셸 코드를 저장해두고 리턴 주소를 버퍼의 주소로 overwrite해서
셸을 탈취하는 방식으로 풀었는데
이는 셸 코드가 저장된 영역에 쓰기와 실행 권한이 부여되었기에 가능했던 것이다.
만약 실행 권한이 없었다면 셸 코드가 실행되지 않아 셸 탈취가 불가능하다.

mprotect

mprotect() 함수는 메모리의 권한을 바꿔주는 함수이다.
sys/mman.h 라이브러리에 있는 함수로 아래와 같은 형식을 가지고 있다.

int mprotect(void *addr, size_t len, int prot);

인자들을 보면
addr은 권한을 바꿀 주소를 정해준다.
len에 바꿀 길이를 정해주고 prot로 바꿀 권한을 정해준다.
prot에는 'PROT_권한종류'의 형식으로 작성하며 |(or)로 여러 개를 전달할 수 있다.
PROT_READ | PROT_EXEC | PROT_WRITE

mprotect() 함수는 [주소값]부터 [주소값+len-1]를 포함하는 메모리 페이지의 접근 권한을 수정해준다.
여기서 addr은 반드시 정렬된 페이지 boundary여야 한다.
(Page Size = 0x1000 = 4096)
그래서 addr의 마지막 3자리는 0으로 맞춰줘야 한다.
(안 맞춰주면 에러 발생)


레퍼런스
https://aidencom.tistory.com/m/490

[ PWN Tech ]  ROP Stager - mprotect

mprotect 라이브러리 함수를 활용하여 스택의 NX를 우회해 스택 영역에 존재하는 쉘 코드를 실행시키는 방법에 대해서 정리해보자. 해당 기법에 대한 설명은 Lazneca 를 참고하였으며, 64-bit mprotect 에

aidencom.tistory.com

https://velog.io/@woounnan/SYSTEM-mprotect

SYSTEM] mprotect

스택에 메모리 권한을 변경하여 쉘코드를 실행시키기 위해 mprotect를 사용하려 했으나 에러가 발생하여, 원인을 찾기위해 함수에 대해 자세히 알아보게 되었다.메모리의 접근권한을 변경시키는

velog.io

https://man7.org/linux/man-pages/man2/mprotect.2.html

mprotect(2) - Linux manual page

mprotect(2) — Linux manual page MPROTECT(2) Linux Programmer's Manual MPROTECT(2) NAME         top mprotect, pkey_mprotect - set protection on a region of memory SYNOPSIS         top #include int mprotect(void *addr, size_t len, int prot); #defin

man7.org

'background > linux' 카테고리의 다른 글

환경 변수(environ)  (0) 2022.10.11
ELF 파일 보호 기법  (0) 2022.10.08
NOP Sled & RET Sled  (0) 2022.09.29
PLT(Procedure Linkage Table) & GOT(Global Offset Table)  (0) 2022.09.13
[G04T] Buffer OverFlow 1 (BOF1)  (0) 2022.07.26
    'background/linux' 카테고리의 다른 글
    • 환경 변수(environ)
    • ELF 파일 보호 기법
    • NOP Sled & RET Sled
    • PLT(Procedure Linkage Table) & GOT(Global Offset Table)
    ssongk
    ssongk
    벌레 사냥꾼이 되고 싶어요

    티스토리툴바