시스템콜 3

execve 시스템 콜과 쉘 코드 작성 및 추출

execve를 사용해서 쉘 코드를 만들어보겠다. execve 시스템콜이다. rax, rdi, rsi, rdx순서다. 기본적으로 execve를 쓸 때 커널은 filename을 통해서 파일을 열어준다. filename이 /bin/ls의 경우에는 뒤에 argv가 없으면 중단되어서 실행되지 않는다. 하지만 /bin/sh는 argv와 envp에 NULL을 넣어줘도 잘 동작한다. 그 이유에 대해서 찾아봤는데, 아래 글을 발견할 수 있었다. https://stackoverflow.com/questions/36673765/why-can-the-execve-system-call-run-bin-sh-without-any-argv-arguments-but-not Why can the execve system call run..

SYSTEM HACKING 2022.05.24

open, read 시스템콜을 이용한 파일 입출력

유닉스 시스템에선 모든 것이 파일이다. 장치도 파일로 취급된다. /dev/had1 같은 하드디스크 상의 파일도 존재한다. 이렇게 장치도 파일로 인식을 하면, 파일을 다루는 것처럼 장치에 접근할 수 있다. 당연히 파일의 종류도 나뉘어 있다. 예를 들어 d가 디렉토리, c가 장치인 것처럼 말이다. 파일을 다루기 위한 기본적인 흐름은 아래와 같다. 1) 파일을 연다. 2) 파일을 읽거나 쓴다. 3) 파일을 닫는다. 기본적으로 프로세스는 유저 모드에서 직접적으로 시스템에 접근할 수 없다. 때문에 시스템 콜을 통해서 운영체제에게 자원을 요청한다. 키보드 입력이나 메모리 공간을 요청하는 것들은 모두 자원을 요청하는 것의 예시이다. 그리고 이런 작업들은 커널 모드에서 이루어지게 된다. 아래 사진을 보면 커널이 프로세..

프로그래밍/C 2022.05.03