LOB 맛보기 (1번 예시)
ID에 gate, PW에도 gate를 입력하고 나면 1번 문제에 진입할 수 있다.
ls 명령어를 실행하여 파일 리스트를 펼치고, 유저 권한을 보면 스파이가 하나 껴 있다.
여기서 root는 상위 디렉토리로 이동하는 ".."이니 당연히 아니고, 우리가 주목해야할 것은 하단 부분에 있는 gremlin이다.
그 아래 gremlin.c 가 있는 걸로 보아 저 gremlin 실행 파일은 C 언어로 컴파일 되었다는 것을 유추할 수 있다.
하단의 gremlin.c를 vi 라든지, cat이라든지, 아무거나 써서 코드를 읽어보자.
보기 쉽게 nl 명령어를 사용했다. 이는 cat 명령어와 유사한데, 대신 앞 부분에 라인(line) 수를 표기해준다.
코드를 보면 1 ~ 5번째 라인은 주석이니 무시하고, 결국 7번 라인 이후의 main 함수 부분만 바라보면 된다.
9번째 라인에서 char형 배열 256개를 선언해주고,
10번째 라인에서 인수가 2개 미만일 때 에러코드를 출력해준 뒤 프로그램이 종료된다.
여기서 인수(argument)란, 프로그램을 실행할 때 같이 넣어주는 값이다. 다른 말로 매개변수 및 파라미터(parameter)라고도 한다.
본문에선 코드가
------------------------------------------------
int main(int argc, char *argv[])
------------------------------------------------
이렇게 나왔는데 하나하나 해석해보자.
여기서 argc는 "argument count"의 약자로써, 매개변수의 갯수를 나타내주고
argv는 "argument vector"의 약자로써, 매개변수의 내용들을 나타내준다.
이해하기 쉽게 예제를 하나 작성해보았다. (vi 편집기 사용)
==== 아래는 실행 결과 ====
여기서 프로그램의 이름도 매개변수에 포함된다는 것을 알 수 있다. (./argc)
따라서 1번 문제를 풀려면 매개변수에 대한 개념을 이해해야 하고,
char buffer[256]과 같이 변수가 할당된 크기도 파악해봐야 하고,
이후에 어떤 함수가 보안에 취약한지도 알아야한다.
1번 문제에서 유심히 봐야할 것은
int main(int argc, char *argv[]) 부분을 통한 값의 입력 부분과
char buffer[256]; 과 같은 변수의 할당
그리고 strcpy(buffer, argv[1]) 과 같은 함수의 사용이라는 것이다.
우리는 1번 문제에서, 이 세 가지의 특징을 가지고 해당 문제를 풀어서 다음 단계로 넘어가야한다.
하지만 단계가 올라갈 수록 점점 더 어려워질 것이다.
정리하자면, 모든 LOB 문제가 이런 형태로 구성되어 있다.
현재 문제에서 ls 명령어를 통해 파일들을 보면 상위 레벨의 권한이 있는 프로그램이 하나 있고,
우리는 이 프로그램의 취약점을 이용해 해킹하여 다음 레벨의 패스워드를 알아내면 되는 방식이다.
열심히 하자.
이는 대학교 수업의 "시스템 프로그래밍"과 관련이 있다고 말할 수 있겠다.
*** 참고 ***
LOB는 OS에 결함이 있어서, 문제를 풀기 전에 "bash2"를 입력하여 쉘을 변경해줘야 한다.
기존 쉘(bash)은 "\xff" 코드를 0으로 치환하기 때문에, 문제풀이에 있어 오류가 생기기 때문이다.
그리고 LOB는 문제를 푸는 과정에 있어 쉘코드, 에그쉘 및 RTL(Return To Library)를 포함하여 다양한 공격 기법이 있다.
이런 수많은 공격 기법을 하나하나 다 적용하여 풀고 설명하기엔, 내가 아직 실력도 부족하고 글도 길어질 우려가 있다.
해당 공격 기법들은 다른 블로그에서 참고하도록 하자.
************