'공부/Local'에 해당되는 글 6건

  1. EXEC 2007/08/24
  2. Strace 2007/07/24
  3. Smashing The Stack For Fun And Profit (1) 2007/07/04
  4. 간단한 Windows BufferOverflow - written babyhack 2006/12/11
  5. rlogin, rhosts (4) 2006/10/29
  6. race condition 2006/10/29

EXEC

from 공부/Local 2007/08/24 13:07
대문   
ManPage  |  ManPage 검색  |  참여하기  |  내려받기  |  바뀐글  |  로그인
RecentChanges
 


Man Page/exec.3
한글 페이지 보기 | 변경사항 보기 | 영문 페이지 보기

EXEC

Section: 리눅스 프로그래머 매뉴얼 (3)
Updated: 1993년 11월 29일
Index
Return to Main Contents
 

이름

execl, execlp, execle, execv, execvp - 파일 실행하기  

사용법

#include <unistd.h>

extern char **environ;

int execl( const char *path, const char *arg, ...);
int execlp( const char *file, const char *arg, ...);
int execle( const char *path, const char *arg , ..., char * const envp[]);
int execv( const char *path, char *const argv[]);
int execvp( const char *file, char *const argv[]);  

설명

exec 함수 계열은 현재 프로세스 이미지를 새로운 프로세스 이미지로 바꾼다. 이 매뉴얼에 기술된 함수들은 execve(2) 함수의 전위들이다. (현재 프로세스의 대체에 관한 세부적인 정보를 원하면 execve 매뉴얼 페이지를 참고해라.)

이들 함수의 초기 인자는 실행되어야 하는 파일의 경로명이다.

const char *argexecl, execlp, 그리고 execle 함수들에 있는 연속적인 것들은 arg0, arg1, ..., argn 등으로 생각할 수 있다. 그것들은 실행 프로그램이 이용할 수 있는 인자 리스트를 나타내는 하나나 그이상의 null로 끝난 문자열을 가리킨다.

편의를 위해, 처음 인자는 실행되어야 할 파일의 이름이다. 인자 리스트는 반드시 NULL 포인터로 끝나야 한다.

execvexecvp 함수는 새로운 프로그램이 이용할수 있는 인자 리스트를 나타내는 null로 끝난 문자열의 포인터 배열을 제공한다. 편리를 위해, 첫 인자는 실행되어야 할 파일과 관련된 파일 이름 을 가리켜야 한다. 포인터 배열은 반드시 NULL 포인터로 끝나야 한다.

execle 함수는 또한 실행 프로세서의 환경변수를 지정해야 하며, 파라미터 리스트에 있는 인자 리스트나 추가적인 파라미터를 가지고 있는 argv 배열에 대한 포인터를 끝마치도록 NULL 포인터가 뒤따라 온다. 이러한 추가적인 파라미터는 null로 끝난 문자열에 대한 포인터 배열이며 반드시 NULL 로 끝나야 한다. 다른 함수들은 현재 프로세스에 있는 외부 변수 environ 에서 새로운 프로세스 이미지를 위한 환경 변수를 가져온다.

이들 함수들 중 몇몇은 특별한 의미를 가지고 있다.

만일 지정된 파일 이름이 slash(/) 문자를 포함하지 않는다면 execlpexecvp 함수는 실행파일을 찾기 위해 shell 의 행동을 복사한다. 탐색 경로는 PATH 변수에 지정된 경로이다. 이 변수가 지정되지 않는다면, 기본 경로 ``:/bin:/usr/bin''가 사용된다. 추가적으로, 어떤 에러들은 특별하게 처리된다.

만일 허가권이 파일에 금지되어 있다면 ( execveEACCES를 반환한다.), 이들 함수들은 탐색 경로의 나머지를 계속해서 탐색한다. 그러나 만일 어떤 다른 파일이 발견된다면, 전역 변수 errnoEACCES로 설정하고 반환된다.

만일 파일의 헤더가 인식되지 않는다면( execveENOEXEC를 반환한다), 이들 함수들은 첫 인자로써 파일의 경로에 있는 shell을 실행한다. (만일 이들 시도가 실패한다면, 추가적인 탐색은 행해지지 않는다.)  

반환값

만일 exec 함수들이 반환한다면, 에러가 일어난 것이다. 반환 값은 -1이며, 전역 변수 errno 는 에러를 가리키도록 설정된다.  

파일

/bin/sh  

에러

이들 함수 모두는 실패할수 있으며 라이브러리 함수 execve(2)에 지정된 에러중 어떤 것으로 errno 가 설정된다.  

관련 항목

sh(1), execve(2), fork(2), environ(5), ptrace(2)  

호환

몇몇 다른 시스템에서 기본 PATH는 anti-Trojan-horse 처럼 /bin 그리고 /usr/bin후에 나열된 현재 작업 디렉토리를 가진다. libc 5.4.7에서, 리눅스는 여전히 현재 작업 디렉토리를 기본 PATH로 사용한다.

파일을 실행하는 동안 에러가 나타났을 때 execlp 그리고 execvp 의 행동은 역사적 관습에 따른다. 그러나 전통적으로 문서화되지 않으며 POSIX 표준에도 지정되지 않는다. BSD(그리고 다른 시스템)는 자동적으로 sleep을 하며 만일 ETXTBSY를 만난다면 다시 시도한다. Linux는 어려운 에러로 대하고 바로 반환한다.

전통적으로, 함수 execlpexecvp 는 위에 기술된 것들 그리고 ENOMEM 그리고 E2BIG를 제외한 모든 에러를 무시하며 리턴된다. 이들 함수는 위에 기술된 것들 이외의 에러를 만난다면 바로 리턴된다.  

표준

Execl, execv, execle, execlp 그리고 execvp 는 IEEE Std1003.1-88 (``POSIX.1'')를 따른다.  

번역

정강훈 <skyeyes@soback.kornet.net> 2001년 3월 8일
한글 Manpage 프로젝트 (http://man.kldp.org) 2005년 2월 17일
 
 

Index

이름
사용법
설명
반환값
파일
에러
관련 항목
호환
표준
번역

This document was created by man2html, using the manual pages.
Time: 05:05:40 GMT, December 01, 2005

EditText | FindPage | DeletePage | LikePages

Powered by MoniWiki
xhtml1 | css2 | rss
Last modified 2006-06-12 10:24:21
Loading 0.0838 sec

2007/08/24 13:07 2007/08/24 13:07
Tag // , ,

Strace

from 공부/Local 2007/07/24 02:50

디버깅의 시작은 과감히 툴을 먼저 배우는 것이라고 해도 과언이 아닐정도로 툴에
익숙해야합니다. 디버깅 툴은 어떻게 보면, 크게 구분이 되어 있는 것은 아니지만
사뭇 심도있는 분석을 위해서는 해킹에 사용되는 것과 크게 다르지 않습니다.
디버깅과 해킹은 같은 맥락에 있는 것이지요.

먼저 쉽고 재밌게 접근할 수 있는 것이 system call tracer입니다.

linux: strace
solaris: truss
hpux: trace(10.x), tusc(11.x)

로 알려져 있는 것들이지요. 위 프로그램들의 option 들이 대개 비슷합니다.

strace ls

만 해도 나오는 내용이 어떻다는 것을 보실 수 있을텐데요.
이들은 모두 kernel level의 함수들입니다. 즉 system call이라는 것이지요.

직관적으로 이용할 수 있는 방법은 다음과 같은 것들입니다.

1. 어떤 shared library가 사용되는지 알수 있음.
2. 1번과 비슷하지만 어떤 파일을 열다가 실패하는지,
대개 configuration file을 global, home.. 순으로 찾지요.
3. process가 잠시 멈출때, 어떤것을 대기하고 있는지.
4. 전송되고 들어오는 내용은 무엇인지 (-s 1024 option)
5. 어떤 signal을 받는지.
6. ipc 객체들은 어떤것들이 이용되는지.

등등...

system call은 기본적으로 OS를 다루는 방법에 대한 것이므로, 많은 hint를 얻을 수
있습니다.

option 들중에 중요한 것 몇가지만 소개하자면, system call의 가장 대표적인 것중의
하나는 실행되고 있는 daemon의 현재 작업내용을 살펴볼수 있는 것이 있습니다.

strace -p <pid>

형태로 실행중인 process를 살펴보는 것이지요. 더불어 daemon의 경우 fork가
일어나는 경우가 많은데,

strace -f -p <pid>

-f option을 주어 fork되어 나오는 process까지 trace 하라는 것입니다. fork외에
vfork도 추적할 수 있어야하므로 대개 f를 쓸때는 다음과 같이 사용합니다.

strace -fF -p <pid>

더 줄여서

strace -fFp <pid>

로 사용하지요.

이것들을 종합하여 다음과 같은 용도로 사용할 수 있습니다.

1. daemon 이 갑자기 멈추었는데, debug 용 printf를 집어 넣지 않았을 때, 알고싶은
경우.
2. socket server가 과연 process가 connection을 접수한 뒤 제대로 fork 되는지.
3. telnet 서버에 접속하였는데, prompt가 떨어지지 않는 경우 inetd가 무슨일을
하는지. (대개 tcp_wrapper에 의해 DNS IP resolve 하는 경우가 많죠.)

지금까지 한 것은 일부분에 지나지 않습니다. 남의 program을 추적할때 system call
trace를 하는 것만으로 process가 하는 일을 상상할 수 있다면, 프로그램을
만든사람은 어느 code를 지나가고 있는지 알 수 있을 것입니다.

Submitted by pynoos

----------------------------------------------------------------------------

http://kldp.org/node/900

2007/07/24 02:50 2007/07/24 02:50

<Smashing The Stack For Fun And Profit > 열기




http://www.phrack.org/issues.html?issue=49&id=14#article


2007/07/04 17:25 2007/07/04 17:25

OS 프로젝트 주제가 DEP를 강화하는 것이기 때문에
테스트를 하기 위하여 Windows BOF를 공부해봤다.
Linux에서는 해봤지만, Windows에서는 처음이었는데
OS 플젝 때문에 짜증나기는 하지만 그래도 이런것도 공부해보고, 좋다.
http://hdp.null2root.org/ 에 있는 문서
이 사이트 예전에 발견해놓고 안보고 있었는데 꽤 좋은 것 같다.
방학 때 좀 봐야지.
(긁어올려니 mht라서 그런지 그림 같이 생긴건 안 긁어지네)

http://hdp.null2root.org/system/simple_window_bof.mht


2006/12/11 03:48 2006/12/11 03:48

rlogin, rhosts

from 공부/Local 2006/10/29 06:01
race condition 관련 문서 보다가
예를 드는 파일 중 /root/.rhosts 를 자꾸 얘기하길래
뭔가 해서 찾아봤는데 재밌는 놈이다.


원격 호스트에서 접근할 때 사용자 인증을 할 때 쓰는 파일이다.
rlogin, rcp, rsh, rcmd 등 R Command 가 수행될 경우
검증이 된 user 라면 비밀번호를 묻지 않고도 인증이 되어 접근이 가능하게 된다.

.rhosts는 host user에 홈디렉토리에 있어야 한다. (~/.rhosts)

.rhosts 파일의 구성
hostname [username]

Ex)
plus5에서 freestar가 plus7에 root로 자주 로긴한다고 할때
plus7의 root 디렉토리에 .rhosts를 만들고

plus5.postech.ac.kr freestar

라고  추가해놓으면
plus5에서 freestar가 plus7의 root 로 로긴할때는
비번을 묻지 않고도 바로 접속 할 수 있다.


그런데 이때 ssh가 아닌 rlogin을 써야하는 듯하다.
근데 또 여기저기 보니 rlogin을 쓰는 port가 요새는 디폴트로 막혀있는 듯 하다.
보안상 위험이 있는 문제이기 때문에 당연히 막아놓은 것 같다.
rlogin 뿐 아니라 R command 전체가 요샌 안되는 듯.

rlogin은 ssh랑, rcp는 scp랑 상당히 닮아있다.

나중에 해킹 대회 같은데서 이것들을 이용해서 문제하나 내면 재밌겠다.


2006/10/29 06:01 2006/10/29 06:01

race condition

from 공부/Local 2006/10/29 05:39
OS 공부하다가 race condition이 잠깐 나오길래,
문득 해킹 기법 중 race condition이 생각나 이것저것 찾아봤다.


두개 골랐는데 비슷하다.
그리고 어렵다 =_=
뭐 쉬운개념이긴한데 중간중간 모르는게 조금씩 있다.


일단 하나는

race condition in the Unix system



또 하나는

Study on Race Condition





요새는 거의 통하지 않는다는 기법.
아마 막힌지 꽤 오래되었을거다.
한번 실제 해보면 재미있을 듯.

전에 해커스쿨 풀 때 요거 이용한게 있었던것 같기도 한데 =_=a
다 까먹었다;




2006/10/29 05:39 2006/10/29 05:39