-
[L.O.B] Level 8 - orgeWargame/L.O.B 2022. 10. 20. 00:49반응형
Level 8 - orge를 풀어보자. (카카오 복구..)
이번에도 제약이 하나 추가되었다.
소스 코드를 보면 다음 Level은 troll이고, check argc + argv hunter라는 힌트가 있다.
우선 check argc로 인해 argc의 크기가 2가 아니면 문구를 출력하고, 프로그램이 종료된다.
다음으로 argv hunter의 내용으로 argv[1]의 내용이 0으로 모두 초기화된다.

<troll 소스 코드의 내용> gdb를 이용해 troll을 더 분석해보자.
확실하게 알 수 있는 내용은 buffer와 SFP 사이에 더미 값이 없다는 것이다.
그 외의 내용은 문제를 풀어가면서 필요할 때 사용하도록 하자.



<troll 파일의 gdb 분석> 소스 코드를 보면 처음에는 답답함이 느껴진다.
argc가 2여야 하므로 프로그램을 실행시키면서 인자는 하나가 들어가는데, 그걸 초기화한다.
그렇다면 공격은 어떻게 해야 할까??
소스 코드를 보면 인자로 넣을 수 있으면서, 정보를 건드리지 않는 유일한 부분은 argv[0]이다.
공격은 이 argv[0]이 의미하는 파일 명을 변경하는 방법으로 시도하도록 하자.
심볼릭 링크로 홈 디렉터리의 troll 파일에 연결하면서 NOP + 쉘 코드의 이름을 가진 파일을 생성한다.
그런데.. 파일이 생성되지 않는다.

<생성되지 않는 파일> /tmp 디렉터리에 troll 파일을 복사해 생성해보고, 파일 이름을 다르게 수정하는 등등 시도를 했지만 모두 안됐다.
결국 구글링을 통해 알아냈는데, 쉘 코드의 내용 중 \x2f가 ASCII 코드로 '/'을 의미하고 있다.
그래서 \x2f로 인해 파일 이름이 경로로 지정이 되면서 생성이 되지 않았던 것이다.
쉘 코드를 \x2f가 없는 것을 이용해 다시 파일을 생성해보자.
이번에는 심볼릭 링크가 연결된 파일이 잘 생성된 것을 확인할 수 있다.

<심볼릭 링크로 생성된 파일> argv[0]의 주소를 알아보기 위해 Core Dumped 파일을 생성해보자.
쭉 내려가다 보면 0xbffff96a 부분에 파일의 이름이 나오는 것을 알 수 있다.
이곳이 argv[0]의 주소이므로 RET에 이 주소를 넣어 쉘 코드가 실행되도록 하자.


<알아낸 argv[0]의 주소> 분석한 파일은 복사한 troll 파일과 링크되어 있으므로, 홈 디렉터리의 troll 파일과 링크할 새 파일을 생성한다.
그리고 RET에 알아낸 argv[0]의 주소를 넣어 프로그램을 실행시키면 troll 권한의 쉘이 실행된다.
my-pass를 입력하니 비밀번호가 나타났다.

<나타난 비밀번호> 반응형'Wargame > L.O.B' 카테고리의 다른 글
[L.O.B] Level 10 - vampire (0) 2022.10.20 [L.O.B] Level 9 - troll (0) 2022.10.20 [L.O.B] Level 7 - darkelf (0) 2022.10.14 [L.O.B] Level 6 - wolfman (0) 2022.10.14 [L.O.B] Level 5 - orc (0) 2022.10.13