ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [L.O.B] Level 8 - orge
    Wargame/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

    댓글

Designed by Tistory.