오늘은 Command Injection에 대해서 강의 받은 내용을 정리를 하고자 글을 쓴다.
예제1 cgi1.c
char형 변수 buf에 read함수로 입력을 받아 system함수를 통해서
입력받은 값을 실행시키는 코드였다.
read함수는 read (int fd, void *buf, size_t nbytes);라는 형식에 맞추어 사용이되고
int fd는 파일디스크립터로 0은 표준입력 1는 표준출력 2는 표준에러를 나타낸다.
여기서는 0임으로 입력을받는다 그리고 void *buf는 입력한 값을 저장할 공간을 나타내고
size_t nbytes는 입력받을 바이트를 표시한다.
여기의 코드에서 문제가 되는 점은 입력받은 값으로 system함수를 실행을 시켜준다는것이다.
-system함수는 /bin/sh -c "입력받은값"이다.
cgi1.c를 실행을해준후 입력값을 /bin/sh을 한다면 쉘을 얻을수 있을것이다.
예제2 cgi2.c
strcpy함수는 문자열을 복사해주는 역활을 해준다.
strcpy( char *dest, const char *src);형식으로쓰고 src에있는 문자를 dest에있는 곳으로 복사를 해준다.
strcat함수는 문자열을 연결해주는 역활을 해준다.
strcat( char *dest, const char *src);형식으로쓰고 dest에는 연결될문자열 src에는 연결할 문자열을 쓰면된다.
echo명령어는 입력한 값을 그대로 똑같이 보여주는 명령어이다.
이코드는
read함수로 입력을 받은 값을 buf에 저장을 시키고 command배열에 strcpy를 이용해서 echo를 복사해놓은후
buf에 저장된 값을 command에 들어있는 값뒤에 연결해준다.
그 후,system함수에 command를 넣어서 실행을한다.
이 문제는 리눅스에서의 세미콜론을 이용해서 문제를 풀면 된다!!
리눅스에서 ;(세미콜론)은 여러개의 명령어를 동시에 실행하게 해준다.
이 세미콜론을 이용하면 이 문제를 풀 수 있을것이다.
command에는 "echo 자신이입력한값"이 들어가게 될 것 이다.
입력한값에 세미콜론을 입력하고 다른 명령어를 입력하면 다른명령어를 실행 할 수 있을것이다.
쉘을 따내었다!
'SYSTEM HACKING > 기법' 카테고리의 다른 글
DAY-6 Return To Library (0) | 2017.11.11 |
---|---|
DAY-5 쉘코드 작성 (0) | 2017.11.10 |
DAY-4 프로세스 디버깅 (0) | 2017.11.02 |
DAY-3 버퍼오버플로우를 풀어보자 (0) | 2017.10.23 |
DAY-2 GDB로 어셈블리 해석 (0) | 2017.10.17 |