Information Security

시스템 콜을 이용한 mkdir 프로그램 작성 본문

System Hacking

시스템 콜을 이용한 mkdir 프로그램 작성

leeeeye321 2018. 1. 28. 00:45

시스템 콜을 이용한 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