-bindshell, trinoo daemon
execve() - execve (const char *filename, char *const argv [], char *const envp[]);
filename이 가리키는 파일을 실행한다.
uname() - 시스템 정보 를 얻어온다(커널에 대한 이름과 버젼정보등을 얻어온다)
brk() - 데이터 세그먼트 사이즈 변경
old_mmap() - mmap(void * addr, size_t len, int prot, int flags, int fd, off_t offset);
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40016000
메모리 블럭을 할당하고 0x40016000으로 반환
open() - 파일을 열거나 생성 할때 사용한다 에러가 발생시 -1을 반환한다
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory)
ENOENT : 경로명의 디렉토리가 없거나, 심볼릭 링크가 깨져있을때.
stat() - 파일의 상태를 알아올수 있다 성공할경우 0을 실패했을경우에는 -1을 반환
close() - close 는 열린 파일 지정번호를 닫는다.
read() - open으로 열린 파일에서 원하는 데이터를 읽어 들인다.
mmap() - fd로 지정된 파일(혹은 다른 객체)에서 offset을 시작으로 length바이트 만큼을 start주소로 대응시키도록 한다
socket()- socket(int domain, int type, int protocol); - 통신의 종점를 생성하고 성공시 통신종점으로 사용될 파일지시자를 반환
bind() - bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);sockfd 는 socket함수를 통해서 만들어진 소켓지정번호이다.
bind 는 이 sockfd 에 my_addr 로 대변되는 특성을 부여한다.
my_addr 에는 sockfd 가 통신을 하기 위해서 필요한 정보인 "port", "인터넷주소", "소켓 흐름종류" 등을 포함하고 있다.
exit_group() - exit_group() 이 시스템 호출은 전체 프로세스와 쓰레드를 종료한다.
sendto() - 지정된 주소로 데이터를 전송하는 함수이다.
clone() - 새로운 프로세스를 생성한다. fork 와 달리 자식프로세스가 메모리, 테이블, 시그널핸들러 테이블과 같이 부모 프로세스와
실행 문맥 부분들을 공유한다.
setpgid() - setpgid(pid_t pid, pid_t pgid); pid로 설정된 프로세스의 프로세스 그룹 ID를 pgid로 설정한다.
//바인트쉘을 실행한다
execve("./bindshell", ["./bindshell"], [/* 22 vars */]) = 0
// 시스템 정보를 얻어온다
uname({sys="Linux", node="securitya", ...}) = 0
// 데이터 세그먼트 값을 설정
brk(0) = 0x8049a60
//메모리 블럭을 할당하고 0x40016000으로 반화
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40016000
// 파일을 읽기 전용으로 연다 링크가 깨졌거나 파일이 없을시 -1 을 반환
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
//파일의 상태를 알아온다 위의 open 3에서 열어본 파일의 상태를 알아보고 성공했기에 0을 반환
fstat64(3, {st_mode=S_IFREG|0644, st_size=21918, ...}) = 0
// 3으로 열린 파일의 주소를 반환
old_mmap(NULL, 21918, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40017000
// 3으로 열린 파일을 닫는다
close(3) = 0
open("/lib/tls/libc.so.6", O_RDONLY) = 3
// 512 버퍼로 새로연 3번 파일의 부분을 읽는다
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0`V\1B4\0"..., 512) = 512
// 3번 파일의 상태를 보고 0을 반환
fstat64(3, {st_mode=S_IFREG|0755, st_size=1531064, ...}) = 0