gremlin --- hello bof world
우선 gremlin의 디렉토리를 확인한다.
cobolt라는 의심스러운 파일이 존재한다. cobolt는 cobolt의 권한을 가지고 있고, setuid가 걸려있는 파일이다.
cobolt.c를 가지고 cobolt 파일을 만들었을 가능성이 있기 때문에 cobolt.c 파일을 본 뒤 어떤 취약점이 있는지 확인해보자.
배열이 하나 선언되어 있다.(char buffer[16])
우리는 cobolt를 실행할 때 최소 1개 이상의 인자를 전달해야 한다.(if(argc<2))
1개의 인자를 buffer에 전달한 뒤 출력한다.
cobolt의 메모리 구조를 그려보면 아래와 같이 그려볼 수 있다.
하지만 실제 배열이 할당되면서 중간에 gcc가 자동적으로 dummy를 생성할 수 있다.
gdb를 이용해서 소스를 분석해보자. 소스에 permission denied 발생하면 cp 명령을 이용해 파일을 복사하면 권한이 변경되어 분석할 수 있다.
위와 같이 gremlin의 권한으로 coboltcp 파일이 복사된 것을 확인 할 수 있다.
gdb로 분석해보면 dummy가 추가적으로 생성되지 않았음을 확인 할 수 있다.
buffer에 일반적으로 쉘 코드를 삽입하고 buffer의 주소를 RET에 write하여, 쉘을 띄우는데 cobolt.c에서는 buffer size가 16 byte이다. 따라서 buffer는 쉘 코드가 저장되기에 충분하지 않다.
따라서 어딘가에 쉘 코드를 올리고, 주소를 알아야 하는데 가장 편한 방법이 환경 변수를 이용하는 것이다.
'Wargame > LOB' 카테고리의 다른 글
해커스쿨 LOB wolfman 풀이, write-up (0) | 2018.08.13 |
---|---|
해커스쿨 LOB orc 풀이, write-up (2) | 2018.08.12 |
해커스쿨 LOB goblin 풀이, write-up (0) | 2018.08.12 |
해커스쿨 LOB cobolt 풀이, write-up (0) | 2018.08.10 |
해커스쿨 LOB gate 풀이, write-up (0) | 2018.08.09 |