Information Security
시스템 콜을 이용한 mkdir 프로그램 작성 본문
시스템 콜을 이용한 mkdir 프로그램 작성 실습
-시스템 콜만 가지고 리눅스의 mkdir 명령어와 비슷하게 프로그램을 구현해볼 것이다.
-필요한 시스템 콜 함수는 다음과 같다.
-> read: 경로 입력
-> write: 디렉터리 생성 성공, 실패 출력
-> mkdir: 디렉터리 생성, 성공시 0 반환
1. C언어로 작성
먼저 C로 작성하고 어셈블리어로 변환할 것이다.
일단 read 함수로 경로를 입력받는다.
-> fd = 0 (표준 입력)
read 함수는 입력받은 문자열에 자동으로 개행 문자가 들어가게 된다.
경로에는 개행 문자(\n)가 들어갈 수 없기 때문에 제거해야 한다.
while 문을 이용해서 개행 문자를 찾으면 0으로 값을 변경하도록 한다.
다시 확인해보면 개행이 되지 않는 것을 확인할 수 있다.
mkdir( 경로 이름, 권한 )
디렉터리의 기본 권한은 755이다.
mkdir 함수로 디렉터리를 생성해서 반환 값에 따라 메시지를 출력한다.
파일 실행 후 경로명 입력
-> success 메시지 출력
-> ls -l 명령어로 디렉터리(권한 755)가 생성된 것을 확인할 수 있다.
2. 어셈블리어로 작성
메모리 1032(path[1024] + end + result) 할당
path[1024] -> [ebp-1024]
end -> [ebp-1028]
result -> [ebp-1032]
모든 변수 0으로 초기화
시스템 콜 함수 write, read 호출
while(path[end] != '\n'){
end++;
}
path[end] = 0;
while 문 작성
path[end]
path 배열을 포인터로 표현하면 다음과 같다.
*(path+end)
== 메모리(주소 + 메모리)
lea eax, [ebp-1024] // address
mov ebx, [ebp-1028] // memory
byte [eax + ebx*1] // *(path+end)
mkdir 함수를 호출하기 위해서 시스템 콜 번호, 인자 확인
호출 후 반환 값은 eax 레지스터에 저장된다.
이 반환 값을 result 변수에 저장하면 result = mkdir( path, 0755 ); 문장이 완성된다.
이제 if ... else 문만 작성해주면 끝!
dir1 디렉터리 생성 시도 -> 성공
디렉터리 확인
'System Hacking' 카테고리의 다른 글
권한 상승 기법(Leviathan) (0) | 2018.01.31 |
---|---|
버퍼 오버플로우 취약점 확인 + 메모리 변조 실습 (0) | 2018.01.31 |
시스템 콜(System Call) (1) | 2018.01.25 |
main 함수의 인자 argc, argv (0) | 2018.01.24 |
함수 (0) | 2018.01.23 |